@sema-agent/core
Version:
Stateless, task-oriented AI agent core
1,085 lines (1,084 loc) • 24.6 kB
JSON
{
"repo": "core",
"version": "7.45.0",
"from": "73002f2fdbd4de6991332f8173fa826e8186f970",
"to": "185f5debffa0c4e6e5104f58db12586b2839ba8f",
"added": [
{
"name": "HOST_DECIDERS",
"kind": "variable",
"tier": "advanced",
"at": [
"src/core/gate-outcome.ts:127",
"src/index.ts:1490"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "HeldQuestion",
"kind": "type",
"tier": "advanced",
"at": [
"src/core/real-approval.ts:40",
"src/index.ts:1491"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "HostDecider",
"kind": "type",
"tier": "advanced",
"at": [
"src/core/gate-outcome.ts:128",
"src/index.ts:1490"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "SCOPE_HOME_FORMS",
"kind": "variable",
"tier": "advanced",
"at": [
"src/core/memory-engine/layout.ts:1145",
"src/index.ts:2422"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "SCOPE_HOME_NOT_DIRECTORY",
"kind": "variable",
"tier": "advanced",
"at": [
"src/core/memory-engine/layout.ts:1142",
"src/index.ts:2422"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "STORE_FORM_REFUSAL_CODES",
"kind": "variable",
"tier": "advanced",
"at": [
"src/core/memory-engine/layout.ts:1135",
"src/index.ts:2422"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "ScopeHomeForm",
"kind": "type",
"tier": "advanced",
"at": [
"src/core/memory-engine/layout.ts:1146",
"src/index.ts:2422"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "StoreFormRefusal",
"kind": "type",
"tier": "advanced",
"at": [
"src/core/memory-engine/layout.ts:1163",
"src/index.ts:2422"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "StoreFormRefusalCode",
"kind": "type",
"tier": "advanced",
"at": [
"src/core/memory-engine/layout.ts:1136",
"src/index.ts:2422"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "StoreFormRefusalDetail",
"kind": "type",
"tier": "advanced",
"at": [
"src/core/memory-engine/layout.ts:1158",
"src/index.ts:2422"
],
"criteriaCovered": true,
"breaking": false
},
{
"name": "TARGET_OUTSIDE_STORE",
"kind": "variable",
"tier": "advanced",
"at": [
"src/core/memory-engine/layout.ts:1139",
"src/index.ts:2422"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "USER_INPUT_UNDRAINED_FAMILIES",
"kind": "variable",
"tier": "advanced",
"at": [
"src/core/engine-notice.ts:1050",
"src/core/types.ts:55",
"src/index.ts:360"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "UserInputLane",
"kind": "type",
"tier": "advanced",
"at": [
"src/core/task-notification.ts:68",
"src/index.ts:1006"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "injectionLaneOf",
"kind": "function",
"tier": "advanced",
"at": [
"src/core/task-notification.ts:77",
"src/index.ts:1005"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "isHostDecider",
"kind": "variable",
"tier": "advanced",
"at": [
"src/core/gate-outcome.ts:129",
"src/index.ts:1490"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "policyCannotAnswer",
"kind": "function",
"tier": "advanced",
"at": [
"src/core/real-approval.ts:62",
"src/core/tool-policy.ts:8",
"src/index.ts:1491"
],
"criteriaCovered": false,
"breaking": false
}
],
"removed": [],
"changed": [],
"narrowed": [
{
"id": "F6",
"source": "behaviorFlips.after",
"text": "v7.45.0: each entry is mapped to its tool name before the narrowing policy is built — `Edit(src/**)`, `Edit()`, `Edit(*)` and `Edit` deny the tool `Edit` for the leg and nothing else; `\"Edit \"` and `Bash(` throw `config.agent.unknown_tool` naming `workflow agentType \"<name>\"`; a name no tool carries still builds a policy that denies nothing."
},
{
"id": "F19",
"source": "behaviorFlips.summary",
"text": "BEHAVIOR NARROWING (#1403): a removal whose target is a protected location — the filesystem root, a top-level directory, a home directory, the task root / working directory / an additional working directory or an ancestor of one, or a shell script built only when the command runs that may run a removal — is the mandated class `dangerous_delete` (`ASK_CLASSES` +1): no permission mode, allow-layer member or classifier clears it."
},
{
"id": "G20",
"source": "criteria.title",
"text": "#1395 — on a narrowed read face a shell read outside the roots (or one the station cannot place) is put to the approval seat under `auto`, not to the classifier; the card is the probe card `default` gives"
}
],
"closedSetMembers": [
{
"set": "ASK_CLASSES",
"at": [
"src/core/ask-origin.ts:601"
],
"newSet": false,
"added": [
"dangerous_delete"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "DangerousRemovalKind",
"at": [
"src/tools/fs/removal-targets.ts:33"
],
"newSet": true,
"added": [
"filesystem_root",
"home",
"runtime_script",
"top_level",
"workspace"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "HOST_DECIDERS",
"at": [
"src/core/gate-outcome.ts:127"
],
"newSet": true,
"added": [
"person",
"policy",
"sla_timeout"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "HostDecider",
"at": [
"src/core/gate-outcome.ts:128",
"src/index.ts:1490"
],
"newSet": true,
"added": [
"person",
"policy",
"sla_timeout"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "PermissionResult.guard",
"at": [
"src/core/tool-policy.ts:606"
],
"newSet": false,
"added": [
"dangerous_delete"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "SHELL_REMOVAL_COMMANDS",
"at": [
"src/tools/fs/removal-targets.ts:24"
],
"newSet": true,
"added": [
"rm",
"rmdir"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "STORE_FORM_REFUSAL_CODES",
"at": [
"src/core/memory-engine/layout.ts:1135"
],
"newSet": true,
"added": [
"memory.scope_home_not_directory",
"memory.target_outside_store"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "ShellRemovalCommand",
"at": [
"src/tools/fs/removal-targets.ts:25"
],
"newSet": true,
"added": [
"rm",
"rmdir"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "StoreFormRefusalCode",
"at": [
"src/core/memory-engine/layout.ts:1136",
"src/index.ts:2422"
],
"newSet": true,
"added": [
"memory.scope_home_not_directory",
"memory.target_outside_store"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "ToolNameListSide",
"at": [
"src/agents/tool-filter.ts:118"
],
"newSet": true,
"added": [
"allowed",
"denied"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "UserInputLane",
"at": [
"src/core/task-notification.ts:68"
],
"newSet": true,
"added": [
"followUp",
"steer"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
}
],
"closedSetsUnreadable": [],
"typeKeys": [
{
"type": "AllowEntryInert",
"at": [
"src/core/allow-entry.ts:68"
],
"via": "SkillGrantHit.readsAsNothing",
"added": [
"valueType"
],
"addedDetail": [
{
"key": "valueType",
"optional": true
}
],
"addedRequired": [],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"type": "AllowEntryInertDetail",
"at": [
"src/core/allow-entry.ts:46"
],
"via": "SkillGrantHit.readsAsNothing.AllowEntryInertDetail",
"added": [
"valueType"
],
"addedDetail": [
{
"key": "valueType",
"optional": true
}
],
"addedRequired": [],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"type": "AskClassFacts",
"at": [
"src/core/ask-origin.ts:736"
],
"added": [
"readFace"
],
"addedDetail": [
{
"key": "readFace",
"optional": true
}
],
"addedRequired": [],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"type": "Prepared",
"at": [
"src/core/runner/contracts.ts:246"
],
"via": "Runner.SuspendReap.env",
"added": [
"handsRoot"
],
"addedDetail": [
{
"key": "handsRoot",
"optional": true
}
],
"addedRequired": [],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"type": "RunnerSelfSeat",
"at": [
"src/core/runner/contracts.ts:2505"
],
"added": [
"canRerootChild"
],
"addedDetail": [
{
"key": "canRerootChild",
"optional": true
}
],
"addedRequired": [],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"type": "SessionRuleNameRefusal",
"at": [
"src/core/session-policy-store.ts:66"
],
"added": [
"guidance"
],
"addedDetail": [
{
"key": "guidance",
"optional": true
}
],
"addedRequired": [],
"removed": [],
"breaking": false,
"criteriaCovered": true
},
{
"type": "ToolCallRequest",
"at": [
"src/core/tool-policy.ts:51"
],
"added": [
"root"
],
"addedDetail": [
{
"key": "root",
"optional": true
}
],
"addedRequired": [],
"removed": [],
"breaking": false,
"criteriaCovered": true
},
{
"type": "ToolGateInput",
"at": [
"src/core/hooks.ts:1470"
],
"via": "runToolGate.ToolGateInput",
"added": [
"readFace"
],
"addedDetail": [
{
"key": "readFace",
"optional": true
}
],
"addedRequired": [],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"type": "ToolSpec",
"at": [
"src/core/tool-spec.ts:131"
],
"added": [
"agentToolFaces[].authored",
"agentToolLevelAllowTools",
"agentToolLevelDenyTools"
],
"addedDetail": [
{
"key": "agentToolFaces[].authored",
"optional": true
},
{
"key": "agentToolLevelAllowTools",
"optional": true
},
{
"key": "agentToolLevelDenyTools",
"optional": true
}
],
"addedRequired": [],
"removed": [],
"breaking": false,
"criteriaCovered": true
}
],
"typeKeysUnreadableArms": [],
"typeKeysFlattenedCount": 225,
"signatures": [
{
"name": "Prepared.approvedCallScreen",
"at": [
"src/core/runner/contracts.ts:425"
],
"from": [
"(call: { toolCallId: string; toolName: string; args: unknown; decidedBy: \"person\" | \"sla_timeout\" | \"policy\"; }): Promise<{ readonly refused: string; } | { readonly args: unknown; readonly admit: () => void; }>"
],
"to": [
"(call: { toolCallId: string; toolName: string; args: unknown; decidedBy: HostDecider; }): Promise<{ readonly refused: string; } | { readonly args: unknown; readonly admit: () => void; }>"
],
"changes": [
{
"aspect": "param",
"detail": "param 1 `call` type changed, direction not read: …gs: unknown; decidedBy: [\"person\" | \"sla_timeout\" | \"policy\" -> HostDecider]; }",
"breaking": true,
"uncertain": true
}
],
"uncertain": "param 1 `call` type changed, direction not read: …gs: unknown; decidedBy: [\"person\" | \"sla_timeout\" | \"policy\" -> HostDecider]; } — the direction of a type change is not read syntactically, so it is reported breaking: check whether existing call sites still type-check before writing the BREAKING line",
"breaking": true,
"criteriaCovered": false
},
{
"name": "createUnverifiableDeletePolicy",
"at": [
"src/core/tool-policy.ts:2515"
],
"from": [
"(opts?: { safeVars?: readonly string[]; tools?: string[]; }): ToolPolicy"
],
"to": [
"(opts?: { safeVars?: readonly string[]; tools?: string[]; removalSeat?: RemovalGuardSeat; }): ToolPolicy"
],
"changes": [
{
"aspect": "param",
"detail": "param 1 `opts` type widened: …ng[]; tools?: string[]; [ -> removalSeat?: RemovalGuardSeat; ]}",
"breaking": false
}
],
"breaking": false,
"criteriaCovered": false
},
{
"name": "foldArbitrationRow",
"at": [
"src/core/ask-origin.ts:813"
],
"from": [
"(classes: ReadonlySet<AskClass>): ModeArbitrationRow"
],
"to": [
"(classes: ReadonlySet<AskClass>, readFace?: ContainmentFace): ModeArbitrationRow"
],
"changes": [
{
"aspect": "param",
"detail": "+optional param `readFace?: ContainmentFace`",
"breaking": false
}
],
"breaking": false,
"criteriaCovered": false
}
],
"declarationMoves": [
{
"name": "HeldQuestion",
"kind": "type",
"onSurface": true,
"from": [
"src/core/real-approval.ts"
],
"to": [
"src/core/real-approval.ts",
"src/index.ts"
]
},
{
"name": "SCOPE_HOME_FORMS",
"kind": "variable",
"onSurface": true,
"from": [
"src/core/memory-engine/layout.ts"
],
"to": [
"src/core/memory-engine/layout.ts",
"src/index.ts"
]
},
{
"name": "SCOPE_HOME_NOT_DIRECTORY",
"kind": "variable",
"onSurface": true,
"from": [
"src/core/memory-engine/layout.ts"
],
"to": [
"src/core/memory-engine/layout.ts",
"src/index.ts"
]
},
{
"name": "ScopeHomeForm",
"kind": "type",
"onSurface": true,
"from": [
"src/core/memory-engine/layout.ts"
],
"to": [
"src/core/memory-engine/layout.ts",
"src/index.ts"
]
},
{
"name": "StoreFormRefusal",
"kind": "type",
"onSurface": true,
"from": [
"src/core/memory-engine/layout.ts"
],
"to": [
"src/core/memory-engine/layout.ts",
"src/index.ts"
]
},
{
"name": "StoreFormRefusalDetail",
"kind": "type",
"onSurface": true,
"from": [
"src/core/memory-engine/layout.ts"
],
"to": [
"src/core/memory-engine/layout.ts",
"src/index.ts"
]
},
{
"name": "TARGET_OUTSIDE_STORE",
"kind": "variable",
"onSurface": true,
"from": [
"src/core/memory-engine/layout.ts"
],
"to": [
"src/core/memory-engine/layout.ts",
"src/index.ts"
]
},
{
"name": "policyCannotAnswer",
"kind": "function",
"onSurface": true,
"from": [
"src/core/real-approval.ts",
"src/core/tool-policy.ts"
],
"to": [
"src/core/real-approval.ts",
"src/core/tool-policy.ts",
"src/index.ts"
]
}
],
"mintMoves": [],
"criteriaObserves": [
{
"kind": "engineNoticeCode",
"name": "permission.allowed_tool_not_granted",
"assertions": [
"G16.a",
"G16.b",
"G17.a",
"G17.b",
"G19.a",
"G19.c"
]
},
{
"kind": "engineNoticeCode",
"name": "task.user_followup_undrained",
"assertions": [
"G21.a",
"G21.b"
]
},
{
"kind": "engineNoticeCode",
"name": "task.user_steer_undrained",
"assertions": [
"G21.a"
]
},
{
"kind": "taskEventField",
"name": "tool_end.isError",
"assertions": [
"G14.a",
"G15.a"
]
},
{
"kind": "taskEventField",
"name": "tool_end.output",
"assertions": [
"G14.a",
"G14.b",
"G15.a",
"G19.a"
]
},
{
"kind": "typeMember",
"name": "AgentDefinition.allowTools",
"assertions": [
"G18.a",
"G18.b",
"G18.c"
]
},
{
"kind": "typeMember",
"name": "AgentDefinition.denyTools",
"assertions": [
"G5.a",
"G5.b",
"G6.a",
"G7.a",
"G7.b",
"G10.a",
"G10.b",
"G12.a",
"G12.b",
"G16.c"
]
},
{
"kind": "typeMember",
"name": "AskRequest.askClass",
"assertions": [
"G1.a",
"G2.b",
"G20.a",
"G24.a",
"G24.d"
]
},
{
"kind": "typeMember",
"name": "AskRequest.classes",
"assertions": [
"G20.a",
"G24.a",
"G24.b",
"G24.c"
]
},
{
"kind": "typeMember",
"name": "AskRequest.mandate",
"assertions": [
"G20.a"
]
},
{
"kind": "typeMember",
"name": "AskRequest.mandated",
"assertions": [
"G20.b"
]
},
{
"kind": "typeMember",
"name": "AskRequest.message",
"assertions": [
"G1.a",
"G24.b"
]
},
{
"kind": "typeMember",
"name": "AskRequest.requiresRealApproval",
"assertions": [
"G20.b",
"G20.c"
]
},
{
"kind": "typeMember",
"name": "GateOutcome.disposition",
"assertions": [
"G1.b",
"G1.c"
]
},
{
"kind": "typeMember",
"name": "GateOutcome.disposition.released.reason",
"assertions": [
"G2.b"
]
},
{
"kind": "typeMember",
"name": "ModeArbitrationRow.classifierEligible",
"assertions": [
"G20.c"
]
},
{
"kind": "typeMember",
"name": "PendingSteerInput.priority",
"assertions": [
"G21.c"
]
},
{
"kind": "typeMember",
"name": "PermissionResult.matchedAskRule",
"assertions": [
"G3.a"
]
},
{
"kind": "typeMember",
"name": "PermissionResult.requiresRealApproval",
"assertions": [
"G2.a"
]
},
{
"kind": "typeMember",
"name": "PermissionResult.ruleUnreadable",
"assertions": [
"G2.a",
"G3.b",
"G3.c"
]
},
{
"kind": "typeMember",
"name": "ResumeOutcome.hostDecision",
"assertions": [
"G13.a",
"G13.b"
]
},
{
"kind": "typeMember",
"name": "SessionRuleNameRefusal.guidance",
"assertions": [
"G23.a"
]
},
{
"kind": "typeMember",
"name": "SessionRuleNameRefusal.verdict",
"assertions": [
"G23.b"
]
},
{
"kind": "typeMember",
"name": "SkillSpec.allowedTools",
"assertions": [
"G19.c",
"G19.d"
]
},
{
"kind": "typeMember",
"name": "SkillSpec.disallowedTools",
"assertions": [
"G19.a",
"G19.d"
]
},
{
"kind": "typeMember",
"name": "StoreFormRefusalDetail.form",
"assertions": [
"G22.a",
"G22.b"
]
},
{
"kind": "typeMember",
"name": "StoreFormRefusalDetail.path",
"assertions": [
"G22.b"
]
},
{
"kind": "typeMember",
"name": "TaskResult.terminal",
"assertions": [
"G19.b"
]
},
{
"kind": "typeMember",
"name": "TaskSpec.agents",
"assertions": [
"G5.a",
"G6.a",
"G6.b",
"G16.c",
"G18.a"
]
},
{
"kind": "typeMember",
"name": "TaskSpec.allowedTools",
"assertions": [
"G16.a"
]
},
{
"kind": "typeMember",
"name": "TaskSpec.permissionMode",
"assertions": [
"G20.b"
]
},
{
"kind": "typeMember",
"name": "TaskSpec.readFace",
"assertions": [
"G20.a"
]
},
{
"kind": "typeMember",
"name": "TaskSpec.userInvokedSkills",
"assertions": [
"G19.b"
]
},
{
"kind": "typeMember",
"name": "ToolCallRequest.cwd",
"assertions": [
"G4.a"
]
},
{
"kind": "typeMember",
"name": "ToolCallRequest.root",
"assertions": [
"G4.a"
]
},
{
"kind": "typeMember",
"name": "ToolSpec.agentToolFaces",
"assertions": [
"G9.a",
"G9.c",
"G11.a"
]
},
{
"kind": "typeMember",
"name": "ToolSpec.agentToolLevelAllowTools",
"assertions": [
"G18.a",
"G18.c"
]
},
{
"kind": "typeMember",
"name": "ToolSpec.agentToolLevelDenyTools",
"assertions": [
"G9.b"
]
},
{
"kind": "typeMember",
"name": "ToolSpec.agentToolPool",
"assertions": [
"G8.a",
"G8.b",
"G11.a"
]
}
],
"consumersHint": {
"cli": [
"ASK_CLASSES",
"PermissionResult",
"Prepared",
"RunnerSelfSeat",
"ToolCallRequest",
"ToolGateInput",
"ToolSpec"
],
"server": [
"ASK_CLASSES",
"HOST_DECIDERS",
"PermissionResult",
"Prepared",
"SCOPE_HOME_NOT_DIRECTORY",
"STORE_FORM_REFUSAL_CODES",
"SessionRuleNameRefusal",
"StoreFormRefusal",
"StoreFormRefusalCode",
"TARGET_OUTSIDE_STORE",
"ToolCallRequest",
"ToolGateInput",
"ToolSpec",
"createUnverifiableDeletePolicy",
"foldArbitrationRow",
"policyCannotAnswer"
],
"sdk": [
"ASK_CLASSES",
"PermissionResult",
"SCOPE_HOME_NOT_DIRECTORY"
],
"note": "scanned cli@fb2a095a server@bed34b7d sdk@605ccb1 — a name listed is MENTIONED there today, which is evidence of consumption, not proof of it. Ledger files (**/docs/core-consumption/**, **/docs/wire-consumption/**, **/*LEDGER*.json) are not evidence of use — server: 2 name(s) matched ONLY in bookkeeping files and were set aside (AskClassFacts, RunnerSelfSeat)"
},
"breakingCount": 1,
"breakingItems": [
"signature changed: Prepared.approvedCallScreen — param 1 `call` type changed, direction not read: …gs: unknown; decidedBy: [\"person\" | \"sla_timeout\" | \"policy\" -> HostDecider]; }"
]
}