UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

672 lines (671 loc) • 15.7 kB
{ "repo": "core", "version": "7.25.0", "from": "cf97cdb0f908b76024df797a71fc33ecac6c0356", "to": "v7.25.0", "added": [ { "name": "AddResult", "kind": "type", "tier": "advanced", "at": [ "src/core/permission-rule-store.ts:1244", "src/index.ts:1636" ], "criteriaCovered": false, "breaking": false }, { "name": "NOTIFICATION_INJECTION_OUTCOMES", "kind": "variable", "tier": "advanced", "at": [ "src/core/task-notification.ts:22", "src/index.ts:966" ], "criteriaCovered": false, "breaking": false }, { "name": "NotificationInjectionOutcome", "kind": "type", "tier": "advanced", "at": [ "src/core/task-notification.ts:21", "src/index.ts:965" ], "criteriaCovered": false, "breaking": false }, { "name": "PEER_DIRECTORY_CONTRACT_SCOPE", "kind": "variable", "tier": "advanced", "at": [ "src/core/store-contracts/peer-directory-contract.ts:12", "src/index.ts:2763" ], "criteriaCovered": false, "breaking": false }, { "name": "PeerDirectoryContractHooks", "kind": "interface", "tier": "advanced", "at": [ "src/core/store-contracts/peer-directory-contract.ts:14", "src/index.ts:2763" ], "criteriaCovered": false, "breaking": false }, { "name": "RuleTightenAddDelta", "kind": "interface", "tier": "advanced", "at": [ "src/core/permission-rule-store.ts:171", "src/index.ts:1669" ], "criteriaCovered": false, "breaking": false }, { "name": "addPersistedRule", "kind": "function", "tier": "advanced", "at": [ "src/core/permission-rule-store.ts:1277", "src/index.ts:1615" ], "criteriaCovered": false, "breaking": false }, { "name": "isNotificationInjectionOutcome", "kind": "function", "tier": "advanced", "at": [ "src/core/task-notification.ts:25", "src/index.ts:967" ], "criteriaCovered": false, "breaking": false }, { "name": "peerDirectoryContract", "kind": "function", "tier": "advanced", "at": [ "src/core/store-contracts/peer-directory-contract.ts:51", "src/index.ts:2763" ], "criteriaCovered": false, "breaking": false } ], "removed": [ { "name": "bashReadBoundaryProbe", "kind": "function", "tier": "advanced", "at": [ "src/index.ts:588", "src/tools/fs/fs-bash.ts:648" ], "breaking": true } ], "changed": [], "narrowed": [ { "id": "F3", "source": "behaviorFlips.summary", "text": "NARROWING (#969 S0): a child REVIVED by a sibling child (or by a host verb with no reviver session) addresses `main` to the row's ROOT session and carries no live injector — its `SendMessage(\"main\")` reads `main_not_deliverable` naming the session, instead of being delivered live into the sibling reviver's lane. WHO NEEDS IT: 'main' means one conversation (the leader), never whoever happened to wake the agent. WHO IS AFFECTED: a model that relied on a sibling reading its 'main' messages after reviving it — it addresses the sibling by name instead; the sibling's own completion notification is unchanged." }, { "id": "F6", "source": "behaviorFlips.summary", "text": "#945 class A (NARROWING, 39 cells; 7.24.3 red on every cell): a deny-listed shell read is REFUSED at the gate's read station on every shell face and under every doctrine — no card, no YES arm" }, { "id": "F16", "source": "behaviorFlips.summary", "text": "NARROWING (#982): a key's `rev` (`(sessionId, principal)`) is a high-water mark across `deleteBySession` — the first write after an erase stamps `max(row, mark)+1`, never 1; rows carry their LINEAGE `gen` (an erase ends it; the live rule reader treats a row of another generation as not comparable whatever its rev, and no longer latches on a transient absence); `SessionPolicyError` gains code `corrupt` (closed set +1)." }, { "id": "F18", "source": "behaviorFlips.summary", "text": "WIDENING (#981, narrowed scope): the ancestor session-rule layer publishes the row it enforced to grandchildren spawned later (per-leg seat keyed by layer index; one projection also read by the checkpoint half); the other half (sessions with no rule row publish no ancestorRules) stays for 7.26.0." } ], "closedSetMembers": [ { "set": "DENIED_BY_VALUES", "at": [ "src/core/gate-outcome.ts:165" ], "newSet": false, "added": [ "read_boundary" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "set": "NOTIFICATION_INJECTION_OUTCOMES", "at": [ "src/core/task-notification.ts:22" ], "newSet": true, "added": [ "dropped_duplicate", "parked", "parked_durably", "queued" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "set": "NotificationInjectionOutcome", "at": [ "src/core/task-notification.ts:21" ], "newSet": true, "added": [ "dropped_duplicate", "parked", "parked_durably", "queued" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "set": "REMOVAL_LIVENESS_WORDS", "at": [ "src/core/permission-rule-store.ts:985" ], "newSet": true, "added": [ "no", "unknown", "yes" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "set": "ReadEstablishment", "at": [ "src/tools/fs/shell-read-judge.ts:105" ], "newSet": true, "added": [ "canonical", "expansion", "lexical", "unestablishable" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "set": "RemovalLiveness", "at": [ "src/core/permission-rule-store.ts:986" ], "newSet": true, "added": [ "no", "unknown", "yes" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "set": "SHELL_READ_FINDINGS", "at": [ "src/tools/fs/shell-read-judge.ts:26" ], "newSet": true, "added": [ "declined", "deny_hit", "identity_changed", "none", "outside_roots", "unestablishable" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "set": "SHELL_READ_SEATS", "at": [ "src/tools/fs/shell-read-judge.ts:33" ], "newSet": true, "added": [ "bash_classify", "bash_off", "readonly", "rejudge" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "set": "ShellReadDisposition", "at": [ "src/tools/fs/shell-read-judge.ts:52" ], "newSet": true, "added": [ "mandated", "ordinary", "refuse", "vouch" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "set": "ShellReadFinding", "at": [ "src/tools/fs/shell-read-judge.ts:27" ], "newSet": true, "added": [ "declined", "deny_hit", "identity_changed", "none", "outside_roots", "unestablishable" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "set": "ShellReadSeat", "at": [ "src/tools/fs/shell-read-judge.ts:34" ], "newSet": true, "added": [ "bash_classify", "bash_off", "readonly", "rejudge" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "set": "TASK_OUTPUT_REPLAY_KINDS", "at": [ "src/core/task-registry-shared.ts:762" ], "newSet": true, "added": [ "cursor", "full" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "set": "TaskOutputReplay", "at": [ "src/core/task-registry-shared.ts:763" ], "newSet": true, "added": [ "cursor", "full" ], "removed": [], "breaking": false, "criteriaCovered": false } ], "closedSetsUnreadable": [], "typeKeys": [ { "type": "BackgroundAgentRecord", "at": [ "src/core/background-agent-store.ts:37" ], "added": [], "removed": [ "teamName" ], "breaking": true, "criteriaCovered": false }, { "type": "BackgroundChildEvent", "at": [ "src/core/delegation-frames.ts:19" ], "added": [ "spawnName" ], "removed": [], "breaking": false, "criteriaCovered": true }, { "type": "CompoundReadonlyVerdict", "at": [ "src/tools/fs/bash-readonly-classifier.ts:649" ], "added": [], "removed": [ "checkedPaths", "checkedSpellings", "outOfRootGrantCandidate", "outOfRootGrantCoversExactPath", "outOfRootPaths", "outOfRootRead", "outOfRootSpellings", "readDenied", "readDeniedPath", "readDeniedPattern", "recursiveReadPaths", "refusedWhole", "segmentNameRefusal", "undecidedPaths", "undecidedSpellings", "unresolvedOperands" ], "breaking": true, "criteriaCovered": false }, { "type": "HookInvocationIdentity", "at": [ "src/core/hooks.ts:1017" ], "added": [ "agentType", "spawnName" ], "removed": [], "breaking": false, "criteriaCovered": true }, { "type": "MailboxPeerMeta", "at": [ "src/core/mailbox-store.ts:56" ], "added": [ "fromRoot" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "type": "MonitorToolOptions", "at": [ "src/tools/monitor.ts:60" ], "added": [ "shellReadAdmission" ], "removed": [ "readBoundary" ], "breaking": true, "criteriaCovered": false }, { "type": "ParentSpecSeat", "at": [ "src/core/parent-spec-seat.ts:42" ], "added": [ "hooks" ], "removed": [], "breaking": false, "criteriaCovered": true }, { "type": "RunInternals", "at": [ "src/core/runner/contracts.ts:1324" ], "added": [ "spawnAgentType", "uplinkSessionId" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "type": "SendMessageToolOptions", "at": [ "src/agents/send-message-tool.ts:45" ], "added": [ "uplinkSessionId" ], "removed": [], "breaking": false, "criteriaCovered": true }, { "type": "StoredSessionRules", "at": [ "src/core/session-policy-store.ts:42" ], "added": [ "gen" ], "removed": [], "breaking": false, "criteriaCovered": false }, { "type": "TaskEvent", "at": [ "src/core/task-event.ts:265" ], "added": [ "task_progress.spawnName" ], "removed": [], "breaking": false, "criteriaCovered": false } ], "declarationMoves": [ { "name": "deepestCommonDir", "kind": null, "onSurface": false, "from": [ "src/tools/fs/bash-readonly-classifier.ts" ], "to": [ "src/tools/fs/shell-read-judge.ts" ] }, { "name": "elideMiddle", "kind": null, "onSurface": false, "from": [ "src/tools/fs/fs-bash.ts" ], "to": [ "src/tools/fs/read-deny.ts" ] }, { "name": "fitMiddle", "kind": null, "onSurface": false, "from": [ "src/tools/fs/fs-bash.ts" ], "to": [ "src/tools/fs/read-deny.ts" ] } ], "mintMoves": [], "criteriaObserves": [ { "kind": "taskEventField", "name": "tool_end.errorCode", "assertions": [ "G6.a" ] }, { "kind": "taskEventField", "name": "tool_end.gate", "assertions": [ "G6.a", "G10.a" ] }, { "kind": "taskEventField", "name": "tool_end.isError", "assertions": [ "G10.a" ] }, { "kind": "taskEventField", "name": "tool_end.output", "assertions": [ "G2.a", "G3.a" ] }, { "kind": "taskEventField", "name": "tool_end.structured", "assertions": [ "G6.a", "G6.c", "G9.a" ] }, { "kind": "typeMember", "name": "AskRequest.origin", "assertions": [ "G6.b" ] }, { "kind": "typeMember", "name": "AskRequest.probeReason", "assertions": [ "G6.b" ] }, { "kind": "typeMember", "name": "AskRequest.readRootCandidate", "assertions": [ "G6.b", "G6.c" ] }, { "kind": "typeMember", "name": "BackgroundAgentRecord.rootSessionId", "assertions": [ "G5.a" ] }, { "kind": "typeMember", "name": "BackgroundChildEvent.spawnName", "assertions": [ "G1.a" ] }, { "kind": "typeMember", "name": "HookInvocationIdentity.spawnName", "assertions": [ "G4.a" ] }, { "kind": "typeMember", "name": "ParentSpecSeat.hooks", "assertions": [ "G4.a" ] }, { "kind": "typeMember", "name": "RuleAdd.origin", "assertions": [ "G7.a" ] }, { "kind": "typeMember", "name": "SendMessageToolOptions.uplinkSessionId", "assertions": [ "G2.a", "G3.a" ] }, { "kind": "typeMember", "name": "SessionPolicyStore.deleteBySession", "assertions": [ "G8.a" ] }, { "kind": "typeMember", "name": "StoredSessionRules.rev", "assertions": [ "G8.a" ] } ], "consumersHint": { "cli": [], "server": [], "sdk": [], "note": "NOT SCANNED: sema-cli, sema-server, sema-sdk — an empty list for those repos means \"not checked out\", not \"no consumer\"" }, "breakingCount": 4, "breakingItems": [ "export removed: bashReadBoundaryProbe (function)", "type lost keys: BackgroundAgentRecord -teamName", "type lost keys: CompoundReadonlyVerdict -checkedPaths,checkedSpellings,outOfRootGrantCandidate,outOfRootGrantCoversExactPath,outOfRootPaths,outOfRootRead,outOfRootSpellings,readDenied,readDeniedPath,readDeniedPattern,recursiveReadPaths,refusedWhole,segmentNameRefusal,undecidedPaths,undecidedSpellings,unresolvedOperands", "type lost keys: MonitorToolOptions -readBoundary" ], "toResolvedAt": "0acdbbe6fc5d38e5e3545a0adce816901a2f68c2" }