@sema-agent/core 7.55.0 → 7.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1054 -0
- package/LICENSE +1 -1
- package/dist/agents/cascade.js +1 -1
- package/dist/agents/cc-peer-directory.js +1 -0
- package/dist/agents/child-model-seat.d.ts +0 -11
- package/dist/agents/child-model-seat.js +0 -3
- package/dist/agents/list-agents-tool.d.ts +3 -1
- package/dist/agents/list-agents-tool.js +7 -7
- package/dist/agents/org-delivery-gate.js +3 -4
- package/dist/agents/peer-directory.d.ts +22 -4
- package/dist/agents/peer-directory.js +24 -2
- package/dist/agents/peer-held-queue.d.ts +69 -49
- package/dist/agents/peer-held-queue.js +255 -106
- package/dist/agents/peer-session-drain.js +65 -45
- package/dist/agents/repair-loop.js +2 -2
- package/dist/agents/send-message-tool.js +7 -6
- package/dist/agents/subagent.d.ts +6 -4
- package/dist/agents/subagent.js +72 -68
- package/dist/agents/tool-filter.d.ts +7 -5
- package/dist/agents/tool-filter.js +12 -9
- package/dist/agents/verify.d.ts +3 -2
- package/dist/agents/verify.js +3 -3
- package/dist/brain/anthropic.js +45 -80
- package/dist/brain/media-degrade.d.ts +18 -7
- package/dist/brain/media-degrade.js +13 -2
- package/dist/brain/model-capability.d.ts +37 -0
- package/dist/brain/model-capability.js +34 -0
- package/dist/brain/model-presets.d.ts +2 -8
- package/dist/brain/model-presets.js +1 -6
- package/dist/brain/open-responses.js +23 -34
- package/dist/brain/openai.js +25 -96
- package/dist/brain/provider-dialect.d.ts +3 -2
- package/dist/brain/provider-dialect.js +2 -2
- package/dist/brain/reasoning-request.d.ts +96 -0
- package/dist/brain/reasoning-request.js +174 -0
- package/dist/brain/reasoning.d.ts +11 -11
- package/dist/brain/reasoning.js +4 -3
- package/dist/brain/request-params.d.ts +13 -4
- package/dist/brain/request-params.js +21 -5
- package/dist/brain/status-sink.d.ts +20 -0
- package/dist/brain/status-sink.js +7 -0
- package/dist/brain/stream-engine.d.ts +9 -0
- package/dist/brain/stream-engine.js +24 -10
- package/dist/brain/stream-shared.d.ts +5 -4
- package/dist/brain/stream-shared.js +4 -4
- package/dist/core/a2a.d.ts +2 -1
- package/dist/core/a2a.js +19 -13
- package/dist/core/agent-definition.d.ts +10 -0
- package/dist/core/allow-entry.d.ts +23 -23
- package/dist/core/allow-entry.js +42 -46
- package/dist/core/allow-rule-shadow.d.ts +3 -3
- package/dist/core/approval-object.d.ts +21 -5
- package/dist/core/approval-object.js +44 -17
- package/dist/core/ask-origin.d.ts +66 -20
- package/dist/core/ask-origin.js +63 -23
- package/dist/core/ask-question.d.ts +51 -8
- package/dist/core/ask-question.js +3 -4
- package/dist/core/ask-unresolvable-notice.d.ts +8 -3
- package/dist/core/ask-unresolvable-notice.js +16 -2
- package/dist/core/auto-compaction.d.ts +71 -6
- package/dist/core/auto-compaction.js +42 -26
- package/dist/core/background-agent-store.d.ts +6 -2
- package/dist/core/background-agent-store.js +1 -1
- package/dist/core/checkpoint-generation.d.ts +53 -0
- package/dist/core/checkpoint-generation.js +35 -0
- package/dist/core/checkpoint-queries.d.ts +180 -0
- package/dist/core/checkpoint-queries.js +272 -0
- package/dist/core/checkpoint-requirements.d.ts +19 -1
- package/dist/core/checkpoint-requirements.js +6 -0
- package/dist/core/checkpoint-store.d.ts +105 -53
- package/dist/core/checkpoint-store.js +43 -20
- package/dist/core/cross-boundary-taint.d.ts +6 -5
- package/dist/core/cross-boundary-taint.js +5 -5
- package/dist/core/decision-receipt.d.ts +37 -3
- package/dist/core/decision-receipt.js +17 -17
- package/dist/core/delegation-not-started.d.ts +6 -0
- package/dist/core/delegation-not-started.js +17 -0
- package/dist/core/engine-attestation.d.ts +93 -0
- package/dist/core/engine-attestation.js +70 -0
- package/dist/core/engine-capabilities.d.ts +4 -1
- package/dist/core/engine-capabilities.js +1 -1
- package/dist/core/engine-notice.d.ts +32 -12
- package/dist/core/engine-notice.js +6 -0
- package/dist/core/file-history-store.d.ts +104 -22
- package/dist/core/file-history-store.js +37 -19
- package/dist/core/gate-fold.d.ts +1 -1
- package/dist/core/gate-fold.js +22 -10
- package/dist/core/gate-lanes.js +73 -65
- package/dist/core/gate-outcome.d.ts +26 -5
- package/dist/core/gate-outcome.js +26 -0
- package/dist/core/governance-codes.d.ts +5 -1
- package/dist/core/governance-codes.js +6 -0
- package/dist/core/hooks.d.ts +19 -18
- package/dist/core/hooks.js +3 -1
- package/dist/core/host-floor.d.ts +128 -0
- package/dist/core/host-floor.js +206 -0
- package/dist/core/host-target.d.ts +38 -3
- package/dist/core/host-target.js +38 -5
- package/dist/core/mailbox-store.d.ts +62 -1
- package/dist/core/mailbox-store.js +59 -0
- package/dist/core/mcp-name-judge.d.ts +46 -0
- package/dist/core/mcp-name-judge.js +61 -0
- package/dist/core/mcp-probe.d.ts +1 -1
- package/dist/core/mcp-probe.js +2 -5
- package/dist/core/mcp.d.ts +5 -1
- package/dist/core/mcp.js +70 -64
- package/dist/core/memory-engine/consolidation-driver.js +4 -3
- package/dist/core/memory-engine/delegation-settlement.js +15 -24
- package/dist/core/memory-engine/distiller.js +26 -17
- package/dist/core/memory-engine/engine.js +4 -4
- package/dist/core/memory-engine/layout.d.ts +60 -8
- package/dist/core/memory-engine/layout.js +70 -8
- package/dist/core/model-seat.d.ts +10 -3
- package/dist/core/mods/classic-events.d.ts +67 -0
- package/dist/core/mods/classic-events.js +1 -0
- package/dist/core/mods/dollar.d.ts +13 -0
- package/dist/core/mods/extension-call.d.ts +31 -0
- package/dist/core/mods/extension-call.js +43 -0
- package/dist/core/mods/kernel/dispatch.d.ts +20 -3
- package/dist/core/mods/kernel/dispatch.js +140 -69
- package/dist/core/mods/kernel/events.d.ts +47 -11
- package/dist/core/mods/kernel/events.js +66 -42
- package/dist/core/mods/kernel/index.d.ts +4 -4
- package/dist/core/mods/kernel/index.js +2 -2
- package/dist/core/mods/kernel/receive.d.ts +39 -5
- package/dist/core/mods/kernel/receive.js +290 -17
- package/dist/core/mods/kernel/registration.d.ts +33 -2
- package/dist/core/mods/kernel/registration.js +6 -7
- package/dist/core/mods/kernel/site-rules.d.ts +44 -16
- package/dist/core/mods/kernel/site-rules.js +24 -42
- package/dist/core/mods/spec-seats.d.ts +69 -0
- package/dist/core/mods/spec-seats.js +114 -0
- package/dist/core/mods/stations.d.ts +28 -8
- package/dist/core/mods/stations.js +29 -13
- package/dist/core/mods/tool-call.d.ts +79 -0
- package/dist/core/mods/tool-call.js +152 -0
- package/dist/core/namespaced-rule-name.d.ts +32 -38
- package/dist/core/namespaced-rule-name.js +29 -36
- package/dist/core/parent-spec-seat.d.ts +6 -1
- package/dist/core/parent-spec-seat.js +2 -0
- package/dist/core/park-selfcheck.js +3 -0
- package/dist/core/permission-rule-consent.d.ts +24 -3
- package/dist/core/permission-rule-consent.js +136 -41
- package/dist/core/permission-rule-model.d.ts +57 -5
- package/dist/core/permission-rule-model.js +90 -31
- package/dist/core/permission-rule-org.d.ts +6 -2
- package/dist/core/permission-rule-org.js +8 -4
- package/dist/core/permission-rule-provider.d.ts +5 -2
- package/dist/core/permission-rule-provider.js +41 -11
- package/dist/core/permission-rule-store.d.ts +3 -2
- package/dist/core/permission-rule-store.js +11 -2
- package/dist/core/permission-rule-sync.js +3 -2
- package/dist/core/permission-rule-syntax.d.ts +5 -4
- package/dist/core/permission-rule-syntax.js +2 -2
- package/dist/core/permission-rules.d.ts +4 -4
- package/dist/core/permission-rules.js +11 -20
- package/dist/core/persisted-rule-arms.d.ts +2 -2
- package/dist/core/persisted-rule-arms.js +10 -12
- package/dist/core/principal-name.d.ts +20 -0
- package/dist/core/principal-name.js +22 -0
- package/dist/core/prompt-section-seat.js +4 -6
- package/dist/core/protocol-http-auth.d.ts +40 -5
- package/dist/core/protocol-http-auth.js +168 -4
- package/dist/core/protocol-naming.d.ts +20 -0
- package/dist/core/protocol-naming.js +20 -3
- package/dist/core/read-only-shell.d.ts +20 -5
- package/dist/core/read-only-shell.js +29 -14
- package/dist/core/remote-env.d.ts +37 -1
- package/dist/core/remote-env.js +11 -0
- package/dist/core/resume-startup-cause.d.ts +24 -2
- package/dist/core/resume-startup-cause.js +20 -1
- package/dist/core/retired-keys.d.ts +16 -0
- package/dist/core/retired-keys.js +16 -4
- package/dist/core/rewrite-rejudge.d.ts +60 -0
- package/dist/core/rewrite-rejudge.js +36 -0
- package/dist/core/roles.d.ts +28 -1
- package/dist/core/roles.js +81 -26
- package/dist/core/rule-lane-reads.d.ts +20 -15
- package/dist/core/rule-lane-reads.js +45 -17
- package/dist/core/rule-owner.d.ts +3 -3
- package/dist/core/rule-owner.js +3 -2
- package/dist/core/runner/announce-once-ledger.d.ts +14 -0
- package/dist/core/runner/announce-once-ledger.js +5 -0
- package/dist/core/runner/assemble-result.d.ts +1 -0
- package/dist/core/runner/assemble-result.js +1 -1
- package/dist/core/runner/call-hook-stations.d.ts +3 -2
- package/dist/core/runner/caller-roster.d.ts +16 -4
- package/dist/core/runner/caller-roster.js +33 -6
- package/dist/core/runner/capability-withheld-seat.d.ts +5 -0
- package/dist/core/runner/capability-withheld-seat.js +24 -0
- package/dist/core/runner/classifier-ladder.d.ts +7 -9
- package/dist/core/runner/classifier-ladder.js +3 -3
- package/dist/core/runner/compact-session.d.ts +10 -0
- package/dist/core/runner/compact-session.js +202 -0
- package/dist/core/runner/compaction-call-options.d.ts +2 -2
- package/dist/core/runner/compaction-seams.d.ts +21 -1
- package/dist/core/runner/compaction-seams.js +11 -8
- package/dist/core/runner/construction-doors.js +3 -0
- package/dist/core/runner/contracts.d.ts +50 -40
- package/dist/core/runner/cross-boundary-lane.d.ts +17 -13
- package/dist/core/runner/cross-boundary-lane.js +40 -27
- package/dist/core/runner/denial-limit-arms.d.ts +2 -2
- package/dist/core/runner/denial-limit-arms.js +1 -1
- package/dist/core/runner/derived-route-fallback.d.ts +13 -0
- package/dist/core/runner/derived-route-fallback.js +6 -0
- package/dist/core/runner/env-capability-census.d.ts +3 -2
- package/dist/core/runner/env-capability-census.js +9 -3
- package/dist/core/runner/file-history-request.d.ts +18 -0
- package/dist/core/runner/file-history-request.js +21 -13
- package/dist/core/runner/file-history-restore.d.ts +45 -0
- package/dist/core/runner/file-history-restore.js +46 -0
- package/dist/core/runner/gate-exit.d.ts +3 -3
- package/dist/core/runner/gate-exit.js +4 -3
- package/dist/core/runner/image.d.ts +7 -17
- package/dist/core/runner/image.js +9 -60
- package/dist/core/runner/permission-rule-lanes.d.ts +11 -11
- package/dist/core/runner/permission-rule-lanes.js +39 -17
- package/dist/core/runner/person-path-rows.d.ts +12 -9
- package/dist/core/runner/person-path-rows.js +18 -7
- package/dist/core/runner/prepare-acquire-reconcile.d.ts +3 -0
- package/dist/core/runner/prepare-acquire-reconcile.js +2 -1
- package/dist/core/runner/prepare-ask-lane.d.ts +2 -2
- package/dist/core/runner/prepare-ask-lane.js +5 -2
- package/dist/core/runner/prepare-caps-and-workflow.d.ts +4 -6
- package/dist/core/runner/prepare-caps-and-workflow.js +4 -3
- package/dist/core/runner/prepare-config-doors.d.ts +35 -38
- package/dist/core/runner/prepare-config-doors.js +46 -28
- package/dist/core/runner/prepare-defer-classify.d.ts +4 -3
- package/dist/core/runner/prepare-defer-classify.js +7 -8
- package/dist/core/runner/prepare-file-history.d.ts +48 -8
- package/dist/core/runner/prepare-file-history.js +7 -39
- package/dist/core/runner/prepare-gate-stations.d.ts +1 -1
- package/dist/core/runner/prepare-gate-stations.js +10 -1
- package/dist/core/runner/prepare-hands-readface.d.ts +5 -9
- package/dist/core/runner/prepare-hands-readface.js +17 -14
- package/dist/core/runner/prepare-inherited-gate.d.ts +6 -3
- package/dist/core/runner/prepare-inherited-gate.js +5 -3
- package/dist/core/runner/prepare-memory-engine-session.js +1 -1
- package/dist/core/runner/prepare-park-ask.d.ts +2 -0
- package/dist/core/runner/prepare-park-ask.js +7 -7
- package/dist/core/runner/prepare-policy-chain.d.ts +6 -3
- package/dist/core/runner/prepare-policy-chain.js +67 -76
- package/dist/core/runner/prepare-prompt-assembly.d.ts +5 -7
- package/dist/core/runner/prepare-prompt-assembly.js +10 -8
- package/dist/core/runner/prepare-prompt-inputs.d.ts +11 -9
- package/dist/core/runner/prepare-prompt-inputs.js +3 -5
- package/dist/core/runner/prepare-protocol-tools.d.ts +2 -0
- package/dist/core/runner/prepare-protocol-tools.js +3 -3
- package/dist/core/runner/prepare-safety-scan.d.ts +1 -1
- package/dist/core/runner/prepare-safety-scan.js +0 -17
- package/dist/core/runner/prepare-suspend-saga.d.ts +2 -0
- package/dist/core/runner/prepare-suspend-saga.js +5 -6
- package/dist/core/runner/prepare-task.d.ts +5 -2
- package/dist/core/runner/prepare-task.js +48 -43
- package/dist/core/runner/prepare-tool-disclosure-mount.d.ts +20 -4
- package/dist/core/runner/prepare-tool-disclosure-mount.js +33 -23
- package/dist/core/runner/prepare-turn-wiring.d.ts +0 -4
- package/dist/core/runner/prepare-turn-wiring.js +2 -7
- package/dist/core/runner/prepare-wiring-manifest.d.ts +6 -2
- package/dist/core/runner/prepare-wiring-manifest.js +3 -3
- package/dist/core/runner/resume-admission.js +1 -1
- package/dist/core/runner/resume-apply.js +11 -12
- package/dist/core/runner/resume-checkpoint-screen.js +3 -0
- package/dist/core/runner/resume-claim.d.ts +4 -2
- package/dist/core/runner/resume-claim.js +15 -8
- package/dist/core/runner/retired-runner-deps.js +1 -0
- package/dist/core/runner/rewind-files.d.ts +12 -0
- package/dist/core/runner/rewind-files.js +90 -0
- package/dist/core/runner/run-attachment-seats.js +2 -1
- package/dist/core/runner/run-brain-sinks.d.ts +4 -1
- package/dist/core/runner/run-brain-sinks.js +4 -2
- package/dist/core/runner/run-harness-handlers.js +12 -4
- package/dist/core/runner/run-leg.d.ts +1 -1
- package/dist/core/runner/run-leg.js +40 -39
- package/dist/core/runner/run-notification-lane.d.ts +2 -0
- package/dist/core/runner/run-notification-lane.js +2 -2
- package/dist/core/runner/run-recovery-lanes.js +3 -4
- package/dist/core/runner/run-settle-and-teardown.js +7 -12
- package/dist/core/runner/run-terminal-adoption.js +3 -4
- package/dist/core/runner/run-turn-boundary.js +4 -15
- package/dist/core/runner/runtask.d.ts +10 -0
- package/dist/core/runner/runtask.js +35 -42
- package/dist/core/runner/send-message-continuation.js +1 -1
- package/dist/core/runner/session-read-file-states.d.ts +15 -0
- package/dist/core/runner/session-read-file-states.js +28 -0
- package/dist/core/runner/session-rule-policy.js +4 -3
- package/dist/core/runner/session-verb-doors.d.ts +28 -0
- package/dist/core/runner/session-verb-doors.js +48 -0
- package/dist/core/runner/session-write-ledger.d.ts +30 -0
- package/dist/core/runner/session-write-ledger.js +101 -0
- package/dist/core/runner/shell-env-withheld.d.ts +33 -0
- package/dist/core/runner/shell-env-withheld.js +51 -0
- package/dist/core/runner/skills-seat.js +6 -2
- package/dist/core/runner/stream-settle-backstop.js +12 -15
- package/dist/core/runner/sub-agent-deny-lists.d.ts +25 -3
- package/dist/core/runner/sub-agent-deny-lists.js +25 -17
- package/dist/core/runner/synthetic-tools.d.ts +6 -0
- package/dist/core/runner/synthetic-tools.js +4 -1
- package/dist/core/runner/teardown-bounded.d.ts +1 -0
- package/dist/core/runner/teardown-bounded.js +1 -0
- package/dist/core/runner/tool-disclosure.d.ts +10 -12
- package/dist/core/runner/tool-disclosure.js +1 -3
- package/dist/core/runner/tool-end-body.d.ts +1 -1
- package/dist/core/runner/tool-end-body.js +10 -9
- package/dist/core/runner/tool-not-executed.d.ts +5 -0
- package/dist/core/runner/tool-not-executed.js +11 -0
- package/dist/core/runner/tool-occurrence.d.ts +8 -0
- package/dist/core/runner/tool-occurrence.js +7 -0
- package/dist/core/runner/turn-attachments.d.ts +33 -15
- package/dist/core/runner/turn-attachments.js +62 -37
- package/dist/core/runner-deps.d.ts +7 -7
- package/dist/core/safety-axis-vocab.d.ts +6 -4
- package/dist/core/safety-axis-vocab.js +6 -5
- package/dist/core/safety-merge-corpus.js +11 -3
- package/dist/core/secret-env.d.ts +30 -3
- package/dist/core/secret-env.js +47 -8
- package/dist/core/select-model.js +3 -3
- package/dist/core/session-policy-store.d.ts +32 -15
- package/dist/core/session-policy-store.js +156 -36
- package/dist/core/session-store.d.ts +29 -10
- package/dist/core/session-store.js +51 -19
- package/dist/core/session.d.ts +82 -16
- package/dist/core/session.js +53 -0
- package/dist/core/shell-read-silence.d.ts +11 -12
- package/dist/core/shell-read-silence.js +9 -5
- package/dist/core/shell-run-candidates.js +3 -1
- package/dist/core/shell-wrapper-projection.d.ts +1 -1
- package/dist/core/shell-wrapper-projection.js +1 -1
- package/dist/core/shell-wrapper-table.d.ts +14 -7
- package/dist/core/shell-wrapper-table.js +5 -4
- package/dist/core/side-query.js +10 -1
- package/dist/core/skill-grant.d.ts +7 -2
- package/dist/core/skill-grant.js +5 -0
- package/dist/core/skills-directory.js +6 -2
- package/dist/core/store-contracts/background-agent-store-contract.js +1 -0
- package/dist/core/store-contracts/checkpoint-store-contract.d.ts +11 -1
- package/dist/core/store-contracts/checkpoint-store-contract.js +141 -2
- package/dist/core/store-contracts/file-history-store-contract.js +40 -1
- package/dist/core/store-contracts/mailbox-store-contract.js +49 -1
- package/dist/core/store-contracts/peer-directory-contract.d.ts +7 -2
- package/dist/core/store-contracts/peer-directory-contract.js +14 -2
- package/dist/core/store-contracts/session-repo-contract.js +51 -0
- package/dist/core/store-contracts/session-store-contract.d.ts +2 -1
- package/dist/core/store-contracts/session-store-contract.js +150 -14
- package/dist/core/stub-env.d.ts +2 -0
- package/dist/core/stub-env.js +1 -0
- package/dist/core/synthetic-read-verdict.js +3 -3
- package/dist/core/task-event.d.ts +32 -4
- package/dist/core/task-notification.d.ts +16 -12
- package/dist/core/task-registry-agent.d.ts +8 -4
- package/dist/core/task-registry-agent.js +14 -8
- package/dist/core/task-registry-shared.d.ts +35 -6
- package/dist/core/task-registry-shared.js +11 -0
- package/dist/core/task-registry.d.ts +10 -1
- package/dist/core/task-registry.js +12 -2
- package/dist/core/task-result.d.ts +18 -0
- package/dist/core/task-spec.d.ts +18 -13
- package/dist/core/tighten-task-spec.js +2 -1
- package/dist/core/tool-catalog-entries.d.ts +23 -0
- package/dist/core/tool-catalog-entries.js +14 -2
- package/dist/core/tool-check-reading.d.ts +11 -0
- package/dist/core/tool-check-reading.js +11 -6
- package/dist/core/tool-model-gate.d.ts +2 -2
- package/dist/core/tool-name-aliases.d.ts +48 -18
- package/dist/core/tool-name-aliases.js +36 -19
- package/dist/core/tool-name-readings.d.ts +6 -32
- package/dist/core/tool-name-readings.js +2 -9
- package/dist/core/tool-policy.d.ts +78 -204
- package/dist/core/tool-policy.js +152 -204
- package/dist/core/tool-result-store.js +3 -0
- package/dist/core/tool-roster.d.ts +14 -19
- package/dist/core/tool-roster.js +11 -44
- package/dist/core/tool-spec-members.js +7 -2
- package/dist/core/tool-spec.d.ts +19 -11
- package/dist/core/tools.js +49 -9
- package/dist/core/trace.d.ts +6 -3
- package/dist/core/trace.js +2 -1
- package/dist/core/types.d.ts +1 -1
- package/dist/core/untrusted-egress.d.ts +20 -0
- package/dist/core/untrusted-egress.js +77 -3
- package/dist/core/user-attachment.d.ts +8 -1
- package/dist/core/user-attachment.js +64 -4
- package/dist/core/wiring-manifest.d.ts +9 -0
- package/dist/core/wiring-manifest.js +1 -0
- package/dist/core/workflow-journal-store.js +1 -1
- package/dist/engine/compaction/compaction.js +3 -2
- package/dist/engine/execution-env/node-execution-env.d.ts +7 -3
- package/dist/engine/execution-env/node-execution-env.js +11 -2
- package/dist/engine/harness/agent-harness.d.ts +32 -6
- package/dist/engine/harness/agent-harness.js +65 -9
- package/dist/engine/harness/types.d.ts +29 -2
- package/dist/engine/llm/types.d.ts +28 -11
- package/dist/engine/loop/agent-loop.d.ts +23 -4
- package/dist/engine/loop/agent-loop.js +42 -30
- package/dist/engine/loop/types.d.ts +16 -6
- package/dist/engine/session/memory-repo.d.ts +9 -2
- package/dist/engine/session/memory-repo.js +11 -1
- package/dist/engine/session/repo-utils.d.ts +6 -5
- package/dist/engine/session/repo-utils.js +14 -6
- package/dist/index.d.ts +34 -17
- package/dist/index.js +22 -11
- package/dist/internal/harness-types.d.ts +1 -1
- package/dist/internal/harness.d.ts +2 -1
- package/dist/internal/harness.js +1 -0
- package/dist/internal/llm.d.ts +1 -1
- package/dist/orchestration/run-workflow-tool.d.ts +6 -4
- package/dist/orchestration/run-workflow-tool.js +5 -3
- package/dist/orchestration/workflow.d.ts +3 -0
- package/dist/orchestration/workflow.js +36 -18
- package/dist/primitives/credential-ref.d.ts +89 -0
- package/dist/primitives/credential-ref.js +125 -0
- package/dist/primitives/index.d.ts +2 -0
- package/dist/primitives/index.js +1 -0
- package/dist/prompt-assembly/artifact.d.ts +2 -2
- package/dist/prompt-assembly/artifact.js +5 -3
- package/dist/prompt-assembly/assemble.d.ts +3 -2
- package/dist/prompt-assembly/assemble.js +1 -1
- package/dist/prompt-assembly/catalog/schema.d.ts +43 -12
- package/dist/prompt-assembly/catalog/schema.js +34 -2
- package/dist/prompt-assembly/catalog/sections.js +0 -1
- package/dist/prompt-assembly/composer.d.ts +3 -1
- package/dist/prompt-assembly/composer.js +1 -1
- package/dist/prompt-assembly/event-registry.js +1 -0
- package/dist/prompt-assembly/overlay.js +3 -3
- package/dist/prompt-assembly/renderers.d.ts +1 -1
- package/dist/prompt-assembly/renderers.js +0 -3
- package/dist/prompt-assembly/role-base.d.ts +15 -0
- package/dist/prompt-assembly/role-base.js +9 -0
- package/dist/prompt-assembly/select.d.ts +39 -14
- package/dist/prompt-assembly/select.js +47 -16
- package/dist/prompt-assembly/sugar.d.ts +17 -11
- package/dist/prompt-assembly/sugar.js +8 -3
- package/dist/prompt-assembly/tool-catalog.d.ts +37 -3
- package/dist/prompt-assembly/tool-catalog.js +114 -4
- package/dist/prompt-assembly/turn-snapshot.d.ts +4 -10
- package/dist/prompt-assembly/turn-snapshot.js +0 -3
- package/dist/prompt-assembly/types.d.ts +0 -7
- package/dist/scenarios/full-body.d.ts +11 -11
- package/dist/scenarios/full-body.js +4 -3
- package/dist/shell/lex.js +10 -1
- package/dist/stores/file/adoption/adopt.js +4 -3
- package/dist/stores/file/adoption/marker.js +3 -2
- package/dist/stores/file/checkpoint-store.d.ts +21 -4
- package/dist/stores/file/checkpoint-store.js +38 -7
- package/dist/stores/file/file-history-store.js +18 -11
- package/dist/stores/file/index.js +2 -1
- package/dist/stores/file/mailbox-store.d.ts +2 -1
- package/dist/stores/file/mailbox-store.js +26 -1
- package/dist/stores/file/permission-rule-adopt.js +4 -3
- package/dist/stores/file/permission-rule-store.js +11 -5
- package/dist/stores/file/session-store.d.ts +29 -6
- package/dist/stores/file/session-store.js +42 -50
- package/dist/tools/artifact/artifact-tool.js +3 -2
- package/dist/tools/fs/bash-program-position.d.ts +19 -2
- package/dist/tools/fs/bash-program-position.js +56 -9
- package/dist/tools/fs/bash-readonly-classifier.d.ts +15 -19
- package/dist/tools/fs/bash-readonly-classifier.js +5 -10
- package/dist/tools/fs/fs-bash.js +15 -8
- package/dist/tools/fs/fs-glob.d.ts +86 -0
- package/dist/tools/fs/fs-glob.js +226 -0
- package/dist/tools/fs/fs-read.js +14 -14
- package/dist/tools/fs/fs-search-tools.js +7 -7
- package/dist/tools/fs/pattern-kill-guard.d.ts +23 -0
- package/dist/tools/fs/pattern-kill-guard.js +429 -0
- package/dist/tools/fs/pdf.d.ts +9 -6
- package/dist/tools/fs/pdf.js +3 -3
- package/dist/tools/fs/program-read-model.d.ts +57 -7
- package/dist/tools/fs/program-read-model.js +11 -1
- package/dist/tools/fs/program-read-model.rows.js +78 -21
- package/dist/tools/fs/read-deny-home.js +3 -2
- package/dist/tools/fs/removal-targets.d.ts +17 -7
- package/dist/tools/fs/removal-targets.js +47 -20
- package/dist/tools/fs/search.d.ts +10 -0
- package/dist/tools/fs/search.js +20 -26
- package/dist/tools/fs/shell-read-argv.js +89 -12
- package/dist/tools/fs/shell-read-bindings.d.ts +31 -0
- package/dist/tools/fs/shell-read-bindings.js +41 -0
- package/dist/tools/fs/shell-read-check.d.ts +10 -0
- package/dist/tools/fs/shell-read-check.js +13 -20
- package/dist/tools/fs/shell-read-environment.d.ts +5 -1
- package/dist/tools/fs/shell-read-environment.js +3 -2
- package/dist/tools/fs/shell-read-establish.d.ts +15 -0
- package/dist/tools/fs/shell-read-establish.js +19 -20
- package/dist/tools/fs/shell-read-identity.d.ts +12 -9
- package/dist/tools/fs/shell-read-identity.js +9 -4
- package/dist/tools/fs/shell-read-plan.js +24 -16
- package/dist/tools/fs/shell-read-start.d.ts +6 -1
- package/dist/tools/fs/shell-read-write-targets.d.ts +5 -1
- package/dist/tools/fs/shell-read-write-targets.js +2 -3
- package/dist/tools/fs/shell-reentry-text.d.ts +9 -0
- package/dist/tools/fs/shell-reentry-text.js +40 -2
- package/dist/tools/todo.js +63 -63
- package/dist/tools/web.d.ts +19 -14
- package/dist/tools/web.js +46 -61
- package/package.json +1 -1
- package/test/export-surface.snapshot.json +221 -7
- package/wire-changes/core-stores-sql@7.57.0.json +29 -0
- package/wire-changes/core@7.56.0.json +3891 -0
- package/wire-changes/core@7.57.0.json +1487 -0
- package/wire-changes/mods-kernel@7.56.0.json +303 -0
- package/wire-changes/mods-kernel@7.57.0.json +29 -0
- package/wire-changes/primitives@7.57.0.json +245 -0
|
@@ -14,15 +14,18 @@
|
|
|
14
14
|
*
|
|
15
15
|
* The request door (the bad-value doors and every refusal the request decides alone) lives in
|
|
16
16
|
* `./file-history-request.ts` and runs BEFORE the session is acquired; this phase receives its resolution.
|
|
17
|
-
* The module-level helpers below the phase (`
|
|
18
|
-
* the refusal's epoch-tail wording helper, `adoptForkedFileHistory` with its per-store carry memo,
|
|
17
|
+
* The module-level helpers below the phase (`adoptForkedFileHistory` with its per-store carry memo,
|
|
19
18
|
* `createFileHistoryBoundarySeat`, `resolveFileHistoryCoordinates` / `resolveFileHistoryScope` /
|
|
20
19
|
* `fileHistoryFilesystemIdentity`, `childScopeRewindRefusal`) moved with it unchanged; the two the test
|
|
21
|
-
* suite reaches through the driver are re-exported from there.
|
|
20
|
+
* suite reaches through the driver are re-exported from there. The restore itself and the reading of its
|
|
21
|
+
* answer live in `./file-history-restore.ts`, shared with the out-of-run rewind (`./rewind-files.ts`), which
|
|
22
|
+
* also reaches down here for the coordinates and the fork carry — a rewind outside a run is the same history
|
|
23
|
+
* operation as the one this phase runs.
|
|
22
24
|
*/
|
|
23
25
|
import type { ExecutionEnv } from "../../internal/harness.js";
|
|
24
26
|
import type { StoredSession } from "../../engine/session/session.js";
|
|
25
27
|
import type { RunnerDeps, TaskResult, TaskSpec, TrackFileEditHook } from "../types.js";
|
|
28
|
+
import type { FileHistoryStore } from "../file-history-store.js";
|
|
26
29
|
import type { FileHistoryBoundarySeat, RunInternals } from "./contracts.js";
|
|
27
30
|
import type { FileHistoryRequest } from "./file-history-request.js";
|
|
28
31
|
export interface PrepareFileHistoryInput {
|
|
@@ -36,8 +39,9 @@ export interface PrepareFileHistoryInput {
|
|
|
36
39
|
* acquired: every refusal the request and the deployment's seats decide on their own has already thrown. */
|
|
37
40
|
request: FileHistoryRequest;
|
|
38
41
|
/** borrowed-readonly — the trusted lineage a delegating parent handed this run (absent for a root run
|
|
39
|
-
* and for a host's own fork), read for the recording-scope decision only
|
|
40
|
-
|
|
42
|
+
* and for a host's own fork), read for the recording-scope decision only; and the Runner's session
|
|
43
|
+
* read-state seats, whose restore channel the restore writes the paths it moved into. */
|
|
44
|
+
internals: Pick<RunInternals, "fileHistoryLineage" | "sessionReadStates"> | undefined;
|
|
41
45
|
/** borrowed-readonly — the run's resolved env (owned or static or the stub); every history verb runs
|
|
42
46
|
* against ITS filesystem ops. Never rebound or destroyed here. */
|
|
43
47
|
executionEnv: ExecutionEnv;
|
|
@@ -60,9 +64,6 @@ export interface PrepareFileHistoryResult {
|
|
|
60
64
|
/** borrowed-readonly — the turn-start boundary seat runtask drives; `undefined` when not live or when
|
|
61
65
|
* this run records into its ROOT session's scope (a child mints no boundaries). */
|
|
62
66
|
fileHistoryBoundary: FileHistoryBoundarySeat | undefined;
|
|
63
|
-
/** borrowed-readonly — the absolute paths the restore MUTATED (empty when no restore ran), for the
|
|
64
|
-
* read-face phase's read-state invalidation. */
|
|
65
|
-
restoredFilePaths: string[];
|
|
66
67
|
/** borrowed-mutable — the non-fatal rewind disclosures (`TaskResult.rewindNotes`). Mutation owners after
|
|
67
68
|
* this call: none — every push happens inside this phase; the driver only reads it into `Prepared`. */
|
|
68
69
|
rewindNotes: NonNullable<TaskResult["rewindNotes"]>;
|
|
@@ -79,6 +80,45 @@ export interface PrepareFileHistoryResult {
|
|
|
79
80
|
historyFs: string;
|
|
80
81
|
}
|
|
81
82
|
export declare function prepareFileHistory(input: PrepareFileHistoryInput): Promise<PrepareFileHistoryResult>;
|
|
83
|
+
/**
|
|
84
|
+
* Carry a forked session's file history from its parent scope (the seat §5 names).
|
|
85
|
+
* Never throws and never fails the turn: a store that cannot carry leaves the fork with an empty
|
|
86
|
+
* history, which is DEGRADED (a pre-fork boundary is not restorable from the new session) and not
|
|
87
|
+
* wrong (nothing is silently mis-restored — the restore seat answers "no boundary" honestly).
|
|
88
|
+
*/
|
|
89
|
+
export declare function adoptForkedFileHistory(store: FileHistoryStore, session: {
|
|
90
|
+
getMetadata(): Promise<{
|
|
91
|
+
forkedFrom?: string;
|
|
92
|
+
}>;
|
|
93
|
+
}, sessionId: string, onError: RunnerDeps["onError"]): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* The run's two file-history COORDINATES, resolved once where store/env/root meet (module-level per
|
|
96
|
+
* the body ratchet):
|
|
97
|
+
* - `historyRoot` — ONE canonical root coordinate for every history verb: capture keys (rel-under-root
|
|
98
|
+
* vs absolute, DV-6) must agree with the canonical containment keys the hands band mints — a
|
|
99
|
+
* symlinked root spelling (macOS /var → /private/var) would otherwise record in-root files as
|
|
100
|
+
* absolute and un-tether them from the root they live in.
|
|
101
|
+
* - `historyScope` — WHICH scope this run's first-touch records land in. A top-level run owns its own
|
|
102
|
+
* (its sessionId). A delegated child that was handed a {@link RunInternals.fileHistoryLineage} and
|
|
103
|
+
* runs on the SAME canonical root records into the lineage's scope — the root session's — so the
|
|
104
|
+
* edits a child makes on the user's behalf are part of the ONE history the user rewinds from
|
|
105
|
+
* (before this, a child's first touch minted its baseline in a scope no rewind ever read, and the
|
|
106
|
+
* parent's own later first touch of that file recorded the child-modified bytes as pristine). A
|
|
107
|
+
* child on a DIFFERENT root keeps its own scope: keys are root-relative and carry no root, so a
|
|
108
|
+
* record minted under a worktree re-joined against the root session's tree would converge a file
|
|
109
|
+
* that run never edited — the structural out-of-scope guarantee the store contract opens with.
|
|
110
|
+
* Same-tree equality is judged on TWO coordinates, both minted here: the CANONICAL root spelling
|
|
111
|
+
* both sides minted their keys against, and the FILESYSTEM the env is a view of
|
|
112
|
+
* ({@link fileHistoryFilesystemIdentity}) — a path string alone is not a tree (two per-task
|
|
113
|
+
* sandboxes can both spell `/workspace` and hold unrelated files).
|
|
114
|
+
* With no live history store there is nothing to coordinate: own scope, uncanonicalized root, no
|
|
115
|
+
* filesystem identity (nothing reads any of them).
|
|
116
|
+
*/
|
|
117
|
+
export declare function resolveFileHistoryCoordinates(enabled: boolean, env: ExecutionEnv, taskRoot: string, lineage: RunInternals["fileHistoryLineage"], sessionId: string): Promise<{
|
|
118
|
+
historyRoot: string;
|
|
119
|
+
historyScope: string;
|
|
120
|
+
historyFs: string;
|
|
121
|
+
}>;
|
|
82
122
|
/** The ONE reading of {@link RunInternals.fileHistoryLineage} (see {@link resolveFileHistoryCoordinates}):
|
|
83
123
|
* the lineage's scope iff BOTH tree coordinates match; otherwise the run's own session. */
|
|
84
124
|
export declare function resolveFileHistoryScope(lineage: RunInternals["fileHistoryLineage"], historyRoot: string, historyFs: string, sessionId: string): string;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { NodeExecutionEnv } from "../../engine/execution-env/node-execution-env.js";
|
|
2
2
|
import { isRemoteExecutionEnv } from "../remote-env.js";
|
|
3
|
-
import { FILE_HISTORY_ERROR_CODES, FileHistoryStoreError
|
|
3
|
+
import { FILE_HISTORY_ERROR_CODES, FileHistoryStoreError } from "../file-history-store.js";
|
|
4
4
|
import { readMember, thrownText } from "../thrown-value.js";
|
|
5
5
|
import { isGovernanceRetryClass } from "../governance-codes.js";
|
|
6
|
+
import { fileHistoryRestoreLedgerLine, settleFileHistoryRestore } from "./file-history-restore.js";
|
|
6
7
|
export async function prepareFileHistory(input) {
|
|
7
8
|
const { deps, spec, request, internals, executionEnv, taskRootFinal, handsEnabled, sessionId, session, abortController } = input;
|
|
8
9
|
const rewindNotes = [];
|
|
@@ -45,25 +46,10 @@ export async function prepareFileHistory(input) {
|
|
|
45
46
|
});
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
|
-
let restoredFilePaths = [];
|
|
49
49
|
if (rewindTarget !== undefined && fileHistoryStore !== undefined && handsEnabled) {
|
|
50
50
|
const restoreSignal = spec.signal ? AbortSignal.any([abortController.signal, spec.signal]) : abortController.signal;
|
|
51
|
-
const restored = await fileHistoryStore
|
|
52
|
-
const ledgerLine =
|
|
53
|
-
if (restored.outcome === "failed") {
|
|
54
|
-
if (restored.error?.code === "not_found") {
|
|
55
|
-
if (rewindBefore)
|
|
56
|
-
throw beforeWithoutBoundaryRefusal(rewindTarget, sessionId);
|
|
57
|
-
const e = new Error(`rewind-files: no file-history boundary exists for entry "${rewindTarget}" on session "${sessionId}" — the working tree was NOT rewound. ${rewindRefusalTail()}`);
|
|
58
|
-
e.code = "rewind_snapshot.unresolvable";
|
|
59
|
-
throw e;
|
|
60
|
-
}
|
|
61
|
-
const e = new Error(`rewind-files restore failed (${restored.error?.code ?? "restore_failed"}): ${restored.error?.message ?? "unknown"} — ledger: ${ledgerLine(restored)}`);
|
|
62
|
-
e.code = "rewind.restore_failed";
|
|
63
|
-
if (restored.error !== undefined)
|
|
64
|
-
e.detail = { code: restored.error.code, ...(isGovernanceRetryClass(restored.error.permanence) ? { permanence: restored.error.permanence } : {}) };
|
|
65
|
-
throw e;
|
|
66
|
-
}
|
|
51
|
+
const restored = await settleFileHistoryRestore({ store: fileHistoryStore, sessionId, target: rewindTarget, before: rewindBefore, env: executionEnv, root: historyRoot, signal: restoreSignal, readStates: internals?.sessionReadStates });
|
|
52
|
+
const ledgerLine = fileHistoryRestoreLedgerLine;
|
|
67
53
|
if (restored.outcome === "partial") {
|
|
68
54
|
if (spec.acceptPartialRestore === true) {
|
|
69
55
|
rewindNotes.push({
|
|
@@ -77,7 +63,6 @@ export async function prepareFileHistory(input) {
|
|
|
77
63
|
throw e;
|
|
78
64
|
}
|
|
79
65
|
}
|
|
80
|
-
restoredFilePaths = restoredAbsPathsOf(restored, historyRoot);
|
|
81
66
|
}
|
|
82
67
|
const trackFileEdit = fileHistoryEnabled
|
|
83
68
|
? async (req) => {
|
|
@@ -115,24 +100,7 @@ export async function prepareFileHistory(input) {
|
|
|
115
100
|
? createFileHistoryBoundarySeat({ store: fileHistoryStore, sessionId, env: executionEnv, root: historyRoot, onError: deps.onError })
|
|
116
101
|
: undefined;
|
|
117
102
|
const fileHistoryFact = fileHistoryEnabled ? "on" : "disabled";
|
|
118
|
-
return { trackFileEdit, fileHistoryBoundary,
|
|
119
|
-
}
|
|
120
|
-
function restoredAbsPathsOf(restored, root) {
|
|
121
|
-
const out = [];
|
|
122
|
-
for (const key of [...restored.filesChanged, ...restored.failed.map((f) => f.path)]) {
|
|
123
|
-
const abs = resolveTrackKey(root, key);
|
|
124
|
-
if (abs.ok)
|
|
125
|
-
out.push(abs.abs);
|
|
126
|
-
}
|
|
127
|
-
return out;
|
|
128
|
-
}
|
|
129
|
-
function rewindRefusalTail() {
|
|
130
|
-
return `Boundaries are keyed by a turn's INITIAL entry and exist only for turns that recorded history (a RunnerDeps.fileHistoryStore wired, capture on, and the run's file history not disabled); a boundary from the retired whole-tree snapshot era is not restorable by this seat, and reaped boundaries have none.`;
|
|
131
|
-
}
|
|
132
|
-
function beforeWithoutBoundaryRefusal(target, sessionId) {
|
|
133
|
-
const e = new Error(`rewind-files: entry "${target}" has no file-history boundary on session "${sessionId}" — a before-restore needs the target's own boundary and never crosses into an earlier turn, so the working tree was NOT rewound. ${rewindRefusalTail()}`);
|
|
134
|
-
e.code = "rewind_snapshot.unresolvable";
|
|
135
|
-
return e;
|
|
103
|
+
return { trackFileEdit, fileHistoryBoundary, rewindNotes, fileHistoryEnabled, fileHistoryFact, historyScope, historyRoot, historyFs };
|
|
136
104
|
}
|
|
137
105
|
const FILE_HISTORY_BOUNDARY_TIMEOUT_MS = 30_000;
|
|
138
106
|
const FILE_HISTORY_LIVENESS_MEMO = new WeakMap();
|
|
@@ -160,7 +128,7 @@ function answerOf(call, code) {
|
|
|
160
128
|
return { ok: false, error: { code: known, message: text, ...(isGovernanceRetryClass(permanence) ? { permanence } : {}) } };
|
|
161
129
|
}, (value) => unanswered(`the history store threw: ${thrownText(value)}`, { value }));
|
|
162
130
|
}
|
|
163
|
-
async function adoptForkedFileHistory(store, session, sessionId, onError) {
|
|
131
|
+
export async function adoptForkedFileHistory(store, session, sessionId, onError) {
|
|
164
132
|
const memo = FILE_HISTORY_CARRY_MEMO.get(store) ?? { settled: new Set(), disclosed: new Set(), inFlight: new Map() };
|
|
165
133
|
FILE_HISTORY_CARRY_MEMO.set(store, memo);
|
|
166
134
|
const discloseOnce = (err) => {
|
|
@@ -242,7 +210,7 @@ function createFileHistoryBoundarySeat(opts) {
|
|
|
242
210
|
},
|
|
243
211
|
};
|
|
244
212
|
}
|
|
245
|
-
async function resolveFileHistoryCoordinates(enabled, env, taskRoot, lineage, sessionId) {
|
|
213
|
+
export async function resolveFileHistoryCoordinates(enabled, env, taskRoot, lineage, sessionId) {
|
|
246
214
|
if (!enabled)
|
|
247
215
|
return { historyRoot: taskRoot, historyScope: sessionId, historyFs: "" };
|
|
248
216
|
const canonRoot = await env.canonicalPath(taskRoot);
|
|
@@ -108,7 +108,7 @@ export interface PrepareGateStationsInput {
|
|
|
108
108
|
complianceDenies: ReadonlySet<ComplianceCapability>;
|
|
109
109
|
/** borrowed-mutable — the built harness. Writer here: `on("tool_call")` / `on("tool_result")` — the registrations this
|
|
110
110
|
* phase exists for, in this order, after the driver's boundary-lease handler. */
|
|
111
|
-
harness: Pick<AgentHarness, "on">;
|
|
111
|
+
harness: Pick<AgentHarness, "on" | "isBatchSafe">;
|
|
112
112
|
/** borrowed-mutable — the blocked/suspended call ids (`Prepared.blockedToolCalls`). Writers here: the head-of-evaluation
|
|
113
113
|
* hygiene `delete`, the two short-circuits' and the gate outcome's `add`, the `tool_result` station's one-shot `delete`. */
|
|
114
114
|
blockedToolCalls: Set<string>;
|
|
@@ -13,6 +13,8 @@ import { PATH_CONFINABLE_WRITE_TOOLS } from "./session-rule-policy.js";
|
|
|
13
13
|
import { callFaceSeat, rosterToolName, toolCallFaceOf } from "../tool-roster.js";
|
|
14
14
|
import { heldBy, heldValues, seatOf, wireOf } from "../tool-name-readings.js";
|
|
15
15
|
import { createApprovedCallScreen, createToolResultStation } from "./call-hook-stations.js";
|
|
16
|
+
import { extensionCallOf } from "../mods/extension-call.js";
|
|
17
|
+
import { extensionCallOverlap } from "../mods/tool-call.js";
|
|
16
18
|
const PEER_MESSAGE_NAMES = new Set([SEND_MESSAGE_TOOL_NAME]);
|
|
17
19
|
function screenGateResult(result) {
|
|
18
20
|
if (result.suspend !== undefined)
|
|
@@ -123,7 +125,7 @@ export function prepareGateStations(input) {
|
|
|
123
125
|
toolFaceOf: (name) => toolCallFaceOf(toolRosterDeltas.current, name === e.toolName ? called.toolName : name),
|
|
124
126
|
adjudicate,
|
|
125
127
|
resolveAsk: (...args) => toolOccurrences.whileAwaitingUser(args[1].toolCallId, () => resolveAskBound(...args)),
|
|
126
|
-
suspendAsk,
|
|
128
|
+
...(extensionCallOf(modBus, e.toolCallId) === undefined ? { suspendAsk } : {}),
|
|
127
129
|
resolveContentAsk: (...args) => toolOccurrences.whileAwaitingUser(args[0].toolCallId, () => resolveContentAsk(...args)),
|
|
128
130
|
egress: heldBy("gate.egress", egressTools, call),
|
|
129
131
|
peerMessage: heldBy("gate.peerMessage", PEER_MESSAGE_NAMES, call),
|
|
@@ -236,6 +238,13 @@ export function prepareGateStations(input) {
|
|
|
236
238
|
}
|
|
237
239
|
return { block: true, reason: result.reason, ...details };
|
|
238
240
|
}
|
|
241
|
+
const overlap = result.suspend === undefined && extensionCallOf(modBus, e.toolCallId) !== undefined ? extensionCallOverlap({ occurrences: toolOccurrences, toolCallId: e.toolCallId, toolName: e.toolName, args: result.finalInput ?? e.input, batchSafe: (n, a) => harness.isBatchSafe(n, a) }) : undefined;
|
|
242
|
+
if (overlap !== undefined) {
|
|
243
|
+
toolOccurrences.refuse(e.toolCallId, "hook");
|
|
244
|
+
if (blockedTracked)
|
|
245
|
+
blockedToolCalls.add(e.toolCallId);
|
|
246
|
+
return { block: true, reason: formatHookFeedback(overlap, reminderMark) };
|
|
247
|
+
}
|
|
239
248
|
if (result.suspend === undefined)
|
|
240
249
|
toolOccurrences.release(e.toolCallId);
|
|
241
250
|
return result.updatedInput !== undefined ? { updatedInput: result.updatedInput } : undefined;
|
|
@@ -2,7 +2,7 @@ import { type BeforeWriteHook, type CwdRef, type PathRuleDenyRow, type Containme
|
|
|
2
2
|
import { type ReadFileState } from "../../tools/fs/safety.js";
|
|
3
3
|
import { type PathTablesFacade, type PersonPathRows, type ReadRootsSeat } from "./person-path-rows.js";
|
|
4
4
|
import type { HeadLeads } from "../path-rule-binding.js";
|
|
5
|
-
import { type ShellReadAdmission, type ShellReadCheck } from "../../tools/fs/shell-read-check.js";
|
|
5
|
+
import { type ShellReadAdmission, type ShellReadCheck, type ShellReadLandings } from "../../tools/fs/shell-read-check.js";
|
|
6
6
|
import type { ShellReadBoundary } from "../../tools/fs/shell-read-judge.js";
|
|
7
7
|
import type { RunnerDeps, ShellGateDoctrine, TaskSpec } from "../types.js";
|
|
8
8
|
import type { Model } from "../../internal/llm.js";
|
|
@@ -96,7 +96,8 @@ export interface PrepareHandsReadFaceInput {
|
|
|
96
96
|
deps: Pick<RunnerDeps, "onError" | "onNotice" | "tracer" | "readDenyPatterns" | "readDenyBuiltinTiers" | "readDenyBuiltinExclude" | "agentConfigDir" | "readFace" | "writeFace" | "permissionRuleStore" | "hands">;
|
|
97
97
|
/** borrowed-readonly — the trusted spawn-side seats the band forwards: the finished-command
|
|
98
98
|
* notification lane, the mid-flight detach hub, and the Runner's per-session
|
|
99
|
-
* read-state seats (absent on a standalone prepare ⇒ the transcript-replay rung
|
|
99
|
+
* read-state seats and their restore channel (absent on a standalone prepare ⇒ the transcript-replay rung
|
|
100
|
+
* covers alone, and no restore is owed a check — the channel is the Runner's). */
|
|
100
101
|
internals: Pick<RunInternals, "onTaskNotification" | "detachHub" | "sessionReadStates"> | undefined;
|
|
101
102
|
/** borrowed-mutable — the harness seat, read LIVE by the band's queued-human-input predicate (the shell's
|
|
102
103
|
* auto-backgrounding leg asks it mid-command). Late-bound: the band is built here, the harness later. */
|
|
@@ -110,13 +111,6 @@ export interface PrepareHandsReadFaceInput {
|
|
|
110
111
|
};
|
|
111
112
|
/** borrowed-mutable — the leg's occurrence table; writer here: the shell read station's refused-admission callback. */
|
|
112
113
|
toolOccurrences: ToolOccurrenceTable;
|
|
113
|
-
/** borrowed-readonly — ABSOLUTE paths this prepare's restore wrote, deleted,
|
|
114
|
-
* or failed to write. Every read-state seed above describes the PRE-restore tree, so these keys are
|
|
115
|
-
* dropped from the map: the engine replaced those bytes itself, and a surviving entry makes the
|
|
116
|
-
* next refusal blame "the user or a linter" for the engine's own write. Absent (the common case)
|
|
117
|
-
* when no file restore ran. Fail-closed by construction — dropping a read record only ever
|
|
118
|
-
* produces refusals. */
|
|
119
|
-
restoredFilePaths?: readonly string[];
|
|
120
114
|
/** borrowed-readonly — the memory write gate the memory phase minted (it runs BEFORE this phase: the memory root
|
|
121
115
|
* must be known before the toolkit compiles), composed into the band's beforeWrite below; undefined for a
|
|
122
116
|
* memory-less run (every write passes the engine half). */
|
|
@@ -221,6 +215,8 @@ export interface PrepareHandsReadFaceResult {
|
|
|
221
215
|
/** owned — the same station's pre-spawn ADMISSION, published for the P11 face that spawns a shell command
|
|
222
216
|
* and mounts LATER than the band (`Monitor`): the SAME function the band's shell faces got. ⇔ a real shell. */
|
|
223
217
|
shellReadAdmission: ShellReadAdmission | undefined;
|
|
218
|
+
/** owned — the same station's landings of a judged call (`ShellReadStation.landings`): the park binds them, the resumed leg's execution station compares. ⇔ a real shell. */
|
|
219
|
+
shellReadLandings: ShellReadLandings | undefined;
|
|
224
220
|
/** owned — the file read station's admission (`FileReadStation.admitted`) the band's read tools got, for the read tools mounted later (LSP). */
|
|
225
221
|
readAdmission: ((toolCallId: string | undefined, canonicalKey: string) => boolean) | undefined;
|
|
226
222
|
/** write-back (D-3 hold) — the run's RESOLVED read face where hands mount; undefined ⇔ no hands
|
|
@@ -86,6 +86,7 @@ export function resolveHandsLessReadFace(input) {
|
|
|
86
86
|
shellReadCheck: undefined,
|
|
87
87
|
shellReadStationArmed: false,
|
|
88
88
|
shellReadAdmission: undefined,
|
|
89
|
+
shellReadLandings: undefined,
|
|
89
90
|
readAdmission: undefined,
|
|
90
91
|
resolvedReadFace: undefined,
|
|
91
92
|
resolvedWriteFace: undefined,
|
|
@@ -260,22 +261,23 @@ export async function prepareHandsMount(input) {
|
|
|
260
261
|
}
|
|
261
262
|
}
|
|
262
263
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
}
|
|
264
|
+
const restoredOwed = sessionSeats?.pendingRestored(sessionId) ?? [];
|
|
265
|
+
for (const abs of restoredOwed) {
|
|
266
|
+
const k = await judgeKey(abs);
|
|
267
|
+
if (k === undefined)
|
|
268
|
+
continue;
|
|
269
|
+
const entry = readFileState.get(k);
|
|
270
|
+
if (entry === undefined || entry.seededFromContext === true)
|
|
271
|
+
continue;
|
|
272
|
+
const cur = await executionEnv.readTextFile(abs);
|
|
273
|
+
if (cur.ok && entry.hash === sha256(normalizeFileText(cur.value)))
|
|
274
|
+
continue;
|
|
275
|
+
readFileState.delete(k);
|
|
276
276
|
}
|
|
277
|
-
if (seatLeafId !== undefined)
|
|
277
|
+
if (seatLeafId !== undefined) {
|
|
278
278
|
sessionSeats?.adopt(sessionId, readFileState, seatLeafId);
|
|
279
|
+
sessionSeats?.settleRestored(sessionId, restoredOwed);
|
|
280
|
+
}
|
|
279
281
|
sealReadStateSeat =
|
|
280
282
|
sessionSeats !== undefined && seatLeafId !== undefined
|
|
281
283
|
? (ownCommittedTailEntryId) => {
|
|
@@ -410,6 +412,7 @@ export async function prepareHandsMount(input) {
|
|
|
410
412
|
shellReadCheck: onPinnedRead(input.personRows, [...(shellReadStation !== undefined ? [{ check: shellReadStation.check, tools: shellReadTools }] : []), ...(fileReadStation !== undefined ? [fileReadStation] : [])]),
|
|
411
413
|
shellReadStationArmed: shellReadStation !== undefined,
|
|
412
414
|
shellReadAdmission: shellReadStation?.admit,
|
|
415
|
+
shellReadLandings: shellReadStation?.landings,
|
|
413
416
|
readAdmission: fileReadStation?.admitted,
|
|
414
417
|
resolvedReadFace,
|
|
415
418
|
resolvedWriteFace,
|
|
@@ -62,6 +62,8 @@ export interface PrepareInheritedGateInput {
|
|
|
62
62
|
checkpointSeat: import("../checkpoint-seat.js").CheckpointSeat | undefined;
|
|
63
63
|
/** borrowed-readonly — this leg's checkpoint scope (the driver's one `checkpointScopeOf` derivation): the ctx's `checkpointScopeForChildren`, which every delegation lane copies into its children's internals. */
|
|
64
64
|
checkpointScope: string;
|
|
65
|
+
/** borrowed-readonly — the deployment's host floor as the config doors compiled it (`RunnerDeps.hostFloor`): the ctx's `hostFloor`, absent when none is declared. */
|
|
66
|
+
hostFloor: import("../host-floor.js").HostFloor | undefined;
|
|
65
67
|
/** borrowed-readonly — the deployment seats: `autoMode.denialLimit` (the rebuilt trackers' bounds), `memoryScopeAdmission` /
|
|
66
68
|
* `deploymentMemoryScopes` / `compliancePostureResolver` (the governed-provenance bit), `onError` (the screening-face crash
|
|
67
69
|
* lane), `onNotice` (the stop seat's notice), `executionEnv` (the hook-env identity predicate), `delegationEntryCaps` (resolved
|
|
@@ -109,8 +111,8 @@ export interface PrepareInheritedGateInput {
|
|
|
109
111
|
mountsCallerTool: (tool: ToolSpec) => boolean;
|
|
110
112
|
/** borrowed-readonly — the ctx's `mountedMcp` seat: the MCP surface the run mounts right now (call-time; the roster is minted after this phase). Present iff the run declared a server. */
|
|
111
113
|
mountedMcp?: () => import("../mounted-mcp.js").MountedMcp;
|
|
112
|
-
/** borrowed-readonly — the
|
|
113
|
-
|
|
114
|
+
/** borrowed-readonly — the task-level lean switch (ctx seat; absent ⇒ no key). */
|
|
115
|
+
promptLean: ToolExecuteContext["promptLean"];
|
|
114
116
|
/** borrowed-readonly — the resolved interaction posture (ctx seat; absent ⇒ no key). */
|
|
115
117
|
resolvedInteractionPosture: ToolExecuteContext["interactionPosture"];
|
|
116
118
|
/** borrowed-readonly — the task's own permission-mode key, screened and snapshotted before the first await (undefined =
|
|
@@ -160,7 +162,8 @@ export interface PrepareInheritedGateInput {
|
|
|
160
162
|
/** borrowed-readonly — LATE-BOUND: the per-principal entitlements the caps phase resolves after this one; read only inside
|
|
161
163
|
* `inheritedGateForChildren` (the two mandate tests), at spawn time. */
|
|
162
164
|
runtimeCaps: () => RuntimeCaps | undefined;
|
|
163
|
-
/** borrowed-readonly — the leg
|
|
165
|
+
/** borrowed-readonly — what the leg hands its descendants of its mods bus (`LegMods.handedDown`: without the skills' own
|
|
166
|
+
* registrations): the chain assembly mints this leg's screening entry over its `classic.PreToolUse` chain. */
|
|
164
167
|
modBus: LegModBus;
|
|
165
168
|
/** borrowed-readonly — this leg's chain identity as its admission recorded it (`chainOfBus`) — the installation identity's chain term. */
|
|
166
169
|
ownModChain: readonly ModChainLink[];
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { principalNameOf } from "../principal-name.js";
|
|
1
2
|
import { forkGovernanceDenial, resolveDelegationEntryCaps } from "../../agents/subagent.js";
|
|
2
3
|
import { isLiveQuestionFace } from "../ask-question.js";
|
|
3
4
|
import { parentSpecSeatOf } from "../parent-spec-seat.js";
|
|
@@ -16,7 +17,7 @@ import { frozenSkillGrants } from "../skill-grant.js";
|
|
|
16
17
|
import { attachRebuiltDenialTrackers, createDenialLimitStop } from "./denial-limit-arms.js";
|
|
17
18
|
import { valveLeaves } from "../../agents/tool-filter.js";
|
|
18
19
|
export function prepareInheritedGate(input) {
|
|
19
|
-
const { spec, deps, askSeat, internals, resume, sessions, sessionId, runId, hostTaskId, taskRootFinal, executionEnv, ownedEnv, lockedPreflight, pathRuleAnchors, toolFaceSnapshot, mountsCallerTool,
|
|
20
|
+
const { spec, deps, askSeat, internals, resume, sessions, sessionId, runId, hostTaskId, taskRootFinal, executionEnv, ownedEnv, lockedPreflight, pathRuleAnchors, toolFaceSnapshot, mountsCallerTool, promptLean, resolvedInteractionPosture, permissionModeSeat, handsEnabled, reportUsage, harnessRef, skillGrants, forwardEvent, subagentRetain, worktreeIsolation, requestReview, requestStopAfterTurn, enterPlanMode, reminderMark, reminderDisclosureCounts, fileHistoryEnabled, historyScope, historyRoot, historyFs, abortRun } = input;
|
|
20
21
|
const liveInheritedGate = internals?.inheritedGate;
|
|
21
22
|
const seedInheritedGate = resume?.seed.inheritedGate;
|
|
22
23
|
const inheritedAncestorRules = (() => {
|
|
@@ -221,7 +222,7 @@ export function prepareInheritedGate(input) {
|
|
|
221
222
|
deferTools: toolFaceSnapshot.defer,
|
|
222
223
|
alwaysLoadTools: toolFaceSnapshot.alwaysLoad,
|
|
223
224
|
...(toolFaceSnapshot.restoreGated !== undefined ? { restoreGatedTools: toolFaceSnapshot.restoreGated } : {}),
|
|
224
|
-
|
|
225
|
+
...(promptLean !== undefined ? { promptLean } : {}),
|
|
225
226
|
...(spec.memoryPersistenceCapable !== undefined ? { memoryPersistenceCapable: spec.memoryPersistenceCapable } : {}),
|
|
226
227
|
get memoryCaptureOptedOut() {
|
|
227
228
|
return input.memoryEngineSession()?.captureOptOut?.optedOut() ?? false;
|
|
@@ -238,6 +239,7 @@ export function prepareInheritedGate(input) {
|
|
|
238
239
|
},
|
|
239
240
|
getApiKeyAndHeaders: spec.getApiKeyAndHeaders,
|
|
240
241
|
parentCwd: taskRootFinal,
|
|
242
|
+
...(input.hostFloor !== undefined ? { hostFloor: input.hostFloor } : {}),
|
|
241
243
|
...(fileHistoryEnabled ? { fileHistoryLineage: { scope: historyScope, root: historyRoot, fs: historyFs } } : {}),
|
|
242
244
|
reminderMark,
|
|
243
245
|
reminderDisclosureCounts,
|
|
@@ -264,7 +266,7 @@ export function prepareInheritedGate(input) {
|
|
|
264
266
|
...(sessions.fork !== undefined
|
|
265
267
|
? {
|
|
266
268
|
hostSessionFork: async () => {
|
|
267
|
-
const forked = (await sessions.fork(sessionId, spec.principal ?? null)) ?? null;
|
|
269
|
+
const forked = (await sessions.fork(sessionId, principalNameOf(spec.principal) ?? null)) ?? null;
|
|
268
270
|
if (forked === null)
|
|
269
271
|
return null;
|
|
270
272
|
return {
|
|
@@ -7,7 +7,7 @@ import { deliverEngineNotice } from "../types.js";
|
|
|
7
7
|
import { inlineUntrusted } from "../untrusted-text.js";
|
|
8
8
|
import { fileArgPath } from "../tool-registry.js";
|
|
9
9
|
import { RosterBuilder } from "../tool-roster.js";
|
|
10
|
-
import { isNotStartedDelegationResult } from "
|
|
10
|
+
import { isNotStartedDelegationResult } from "../delegation-not-started.js";
|
|
11
11
|
import { thrownText } from "../thrown-value.js";
|
|
12
12
|
export function prepareMemoryEngineSession(input) {
|
|
13
13
|
const { memoryEngineSession, internals, memoryDelegationEvidence, externalContentTargetActive, lockedPreflight, mountedMcp, sessionId, runId, deps, provenanceForChildrenRef, delegationSettlementRef, spec, envHandToolNames, roster, contentOriginWrapRef } = input;
|
|
@@ -102,6 +102,8 @@ export interface PrepareParkAskInput {
|
|
|
102
102
|
handsRoot: string | undefined;
|
|
103
103
|
/** borrowed-readonly — the live gate's target-reading stamp ({@link import("./prepare-ask-lane.js").PrepareAskLaneInput.stampCallTarget}). */
|
|
104
104
|
stampCallTarget: CallTargetStamp | undefined;
|
|
105
|
+
/** borrowed-readonly — where the leg's shell read station found a judged call's reads land (the approval object's targets). */
|
|
106
|
+
shellReadLandings: import("../../tools/fs/shell-read-check.js").ShellReadLandings | undefined;
|
|
105
107
|
/** borrowed-readonly — the SAME seat the live gate stamps from ({@link import("./prepare-ask-lane.js").PrepareAskLaneInput.advertisedWritableDirs}): a parked call's projection re-adjudication asks one question about one call, so it must ask it against the same admitted list. Read at park time, not written here. */
|
|
106
108
|
advertisedWritableDirs: Pick<AdvertisedWritableDirs, "roots"> | undefined;
|
|
107
109
|
/** borrowed-readonly — the leg's ONE exempt root, the SAME list the live gate stamps ({@link import("./prepare-ask-lane.js").PrepareAskLaneInput.exemptRoots}). */
|
|
@@ -2,7 +2,7 @@ import { callTargetReadingOf } from "../effective-path-target.js";
|
|
|
2
2
|
import { approvalTargetsOf } from "../approval-object.js";
|
|
3
3
|
import { uuidv7 } from "../../engine/session/uuid.js";
|
|
4
4
|
import { Value } from "typebox/value";
|
|
5
|
-
import { classifyQuestionOutcome, validateAskQuestions } from "../ask-question.js";
|
|
5
|
+
import { classifyQuestionOutcome, isEngineQuestionFace, validateAskQuestions } from "../ask-question.js";
|
|
6
6
|
import { hasBackgroundShell, sweepBackgroundShells, sweepRunBoundaryBackgroundShells } from "../background-shell.js";
|
|
7
7
|
import { boundInputHashOf, exactBoundInputHashOf } from "../canonical-json.js";
|
|
8
8
|
import { buildRiskDescriptor, debitLedger, encodeAtFidelity, mintCheckpointId, mintCheckpointToken, resolveDeclaredFidelity, } from "../checkpoint-store.js";
|
|
@@ -17,7 +17,7 @@ import { raceAbort, raceSettlementAgainstSignal } from "./abort-race.js";
|
|
|
17
17
|
import { CONTENT_ASK_BINDING_CAP } from "./content-ask-bindings.js";
|
|
18
18
|
import { DEFAULT_UNATTENDED_APPROVAL_TTL_MS, publishCommittedSuspend, sanitizedTtlMs } from "./park-commit.js";
|
|
19
19
|
import { remoteEnvFailureNote } from "./remote-env-retry.js";
|
|
20
|
-
import { approvalCardMemberOf, callFaceSeat,
|
|
20
|
+
import { approvalCardMemberOf, callFaceSeat, parkedToolIdentity, parkedToolFace } from "../tool-roster.js";
|
|
21
21
|
import { seatOf } from "../tool-name-readings.js";
|
|
22
22
|
class ParkRefusal extends Error {
|
|
23
23
|
constructor(message, options) {
|
|
@@ -29,7 +29,7 @@ const wordlessDemand = (toolName) => {
|
|
|
29
29
|
throw new Error(`a real-approval demand for "${toolName}" reached the park with no origin word — the origin stamp precedes every park`);
|
|
30
30
|
};
|
|
31
31
|
export function prepareParkAsk(input) {
|
|
32
|
-
const { askLane, saga, spec, deps, sessionId, checkpointStore, checkpointScope, toolRosterDeltas, parkLaneArmed, contentAskRoutable, liveQuestionFace, mountedQuestionTool, contentAskBindings, lateStrandedAnswers, discloseStrandedAnswers, onAsk, runtimeCaps, inheritedUnavailableAsks, basePolicyForResumeEdit, budgetSnapshot, handsCwdRef, handsRoot, stampCallTarget, advertisedWritableDirs, exemptRoots, offloadStore, ownedEnv, incompleteSuspendAdapter, session, sessions, suspendChainBase, maxSuspends, remoteEnvFailures, shellGatedTools, irreversibilityTier, toolMarkSources, effectiveShellGate, durableApproval, priorLedger, liveSpendRef, resourceTotal, ruleOffersOf, grantBindingOf, now, humanReviewRef, abortController, harness, pausedRef } = input;
|
|
32
|
+
const { askLane, saga, spec, deps, sessionId, checkpointStore, checkpointScope, toolRosterDeltas, parkLaneArmed, contentAskRoutable, liveQuestionFace, mountedQuestionTool, contentAskBindings, lateStrandedAnswers, discloseStrandedAnswers, onAsk, runtimeCaps, inheritedUnavailableAsks, basePolicyForResumeEdit, budgetSnapshot, handsCwdRef, handsRoot, stampCallTarget, shellReadLandings, advertisedWritableDirs, exemptRoots, offloadStore, ownedEnv, incompleteSuspendAdapter, session, sessions, suspendChainBase, maxSuspends, remoteEnvFailures, shellGatedTools, irreversibilityTier, toolMarkSources, effectiveShellGate, durableApproval, priorLedger, liveSpendRef, resourceTotal, ruleOffersOf, grantBindingOf, now, humanReviewRef, abortController, harness, pausedRef } = input;
|
|
33
33
|
if (askLane === undefined || saga === undefined)
|
|
34
34
|
return { parkAsk: undefined };
|
|
35
35
|
const { composedCallSignal, approvalPreviewOf } = askLane;
|
|
@@ -112,7 +112,7 @@ export function prepareParkAsk(input) {
|
|
|
112
112
|
};
|
|
113
113
|
const suspendAsk = parkLaneArmed && checkpointStore !== undefined
|
|
114
114
|
? async (req, postHookArgs, safety, liveFaceUnavailable, realApproval, allowRuleShadowed, askDecisionReason, probeReason, probeCause, segmentCoverage, matchedAskRule, probeMandated, carry) => {
|
|
115
|
-
const contentAsk =
|
|
115
|
+
const contentAsk = isEngineQuestionFace(req.face);
|
|
116
116
|
const syncFirstEligible = contentAsk ? contentAskRoutable(req.toolCallId) : isLiveApproverSeat(onAsk);
|
|
117
117
|
if (syncFirstEligible &&
|
|
118
118
|
runtimeCaps?.forceDurableGate !== true &&
|
|
@@ -179,7 +179,7 @@ export function prepareParkAsk(input) {
|
|
|
179
179
|
return undefined;
|
|
180
180
|
if (reprojectedRaced.tag === "threw")
|
|
181
181
|
throw reprojectedRaced.error;
|
|
182
|
-
const reprojected = refuseOutOfContractDecision(reprojectedRaced.value);
|
|
182
|
+
const reprojected = refuseOutOfContractDecision(reprojectedRaced.value, { call: req });
|
|
183
183
|
const filedAsHeld = ownArgs(parkedArgs);
|
|
184
184
|
const rewroteTheFiledValue = reprojected.updatedInput !== undefined && !(filedAsHeld.ok && samePlainValue(reprojected.updatedInput, filedAsHeld.value));
|
|
185
185
|
if (reprojected.action === "deny" || rewroteTheFiledValue) {
|
|
@@ -188,7 +188,7 @@ export function prepareParkAsk(input) {
|
|
|
188
188
|
`refusing to file a row whose executable form nothing adjudicated`);
|
|
189
189
|
}
|
|
190
190
|
if (reprojected.action === "ask")
|
|
191
|
-
storedShapeFacts = ownedClearanceFacts(reprojected);
|
|
191
|
+
storedShapeFacts = ownedClearanceFacts(reprojected, req);
|
|
192
192
|
}
|
|
193
193
|
const rowRealApproval = realApproval ?? (storedShapeFacts?.requiresRealApproval === true ? { origin: carry?.origin ?? wordlessDemand(req.toolName) } : undefined);
|
|
194
194
|
if (offloadStore && isVolatileOffloadStore(offloadStore) && !offloadStore.isEmpty()) {
|
|
@@ -311,7 +311,7 @@ export function prepareParkAsk(input) {
|
|
|
311
311
|
toolCallId: req.toolCallId,
|
|
312
312
|
toolName: req.toolName,
|
|
313
313
|
...parkedToolIdentity(toolRosterDeltas.current, req.toolName), ...parkedToolFace(toolRosterDeltas.current, req),
|
|
314
|
-
...
|
|
314
|
+
...(licenseCovers(parkedHash, req.args) ? approvalTargetsOf(callTargetReadingOf(req), shellReadLandings?.(req.toolCallId)) : {}),
|
|
315
315
|
args: parkedArgs,
|
|
316
316
|
...(() => {
|
|
317
317
|
const p = approvalPreviewOf(req.toolName, parkedArgs);
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* inherited-unavailable marker channel, the grant record, the sandbox-admission mode's arming and its three
|
|
7
7
|
* sideband maps, the source-identity and risk-axes factories, the two permission-rule lanes and the rule-offer
|
|
8
8
|
* factory, the approved-edit re-check, the inherited-constraint wrappers (the same-instance adapter and the true
|
|
9
|
-
* wrapper), the
|
|
10
|
-
*
|
|
9
|
+
* wrapper), the instrumented chain, the integrity guards, the fold, and the same-instance arbitration refresh that is the
|
|
10
|
+
* effective policy. The advised-names dedupe pair only this section reads moved with it.
|
|
11
11
|
* The interface is the dependency list the segment had implicitly.
|
|
12
12
|
*
|
|
13
13
|
* ASYNC PHASE: the stretch awaits the session-policy store (the task's own rules and each ancestor's live re-read)
|
|
@@ -42,7 +42,10 @@ import { type ModeGateSeats, type PermissionModeController } from "../mode-polic
|
|
|
42
42
|
import { type InheritedAskGrant } from "./inherited-ask-grants.js";
|
|
43
43
|
import { createRuleOffersOf, type PermissionRuleLanes } from "./permission-rule-lanes.js";
|
|
44
44
|
import type { ToolCallLike } from "../tool-registry.js";
|
|
45
|
+
import { type HostFloor } from "../host-floor.js";
|
|
45
46
|
export interface PreparePolicyChainInput {
|
|
47
|
+
/** borrowed-readonly — the deployment's host floor as the config doors compiled it: the leading narrowing layer when declared. */
|
|
48
|
+
hostFloor: HostFloor | undefined;
|
|
46
49
|
/** borrowed-readonly — the REBOUND spec. Read: `sessionId` / `principal` (the session-rule read and the lanes' identity),
|
|
47
50
|
* `durableApproval` / `checkpointStore` (the mandate-park facility test and the sandbox arming's park prerequisites), `taskId` (the late-ask observer's detail),
|
|
48
51
|
* `tools` (the names the caller mounted, for the name audit). Never mutated. */
|
|
@@ -202,7 +205,7 @@ export interface PreparePolicyChainResult {
|
|
|
202
205
|
};
|
|
203
206
|
/** owned — the caller-facing policy layers (the wiring manifest reads their COUNT). */
|
|
204
207
|
policyLayers: ToolPolicy[];
|
|
205
|
-
/** owned — THE effective policy the gate station adjudicates with (the fold plus
|
|
208
|
+
/** owned — THE effective policy the gate station adjudicates with (the fold, plus the same-instance arbitration refresh), or undefined. */
|
|
206
209
|
effectivePolicy: ToolPolicy | undefined;
|
|
207
210
|
/** borrowed-mutable — the inherited-unavailable marker channel. Writers: the inherited arms here (mark); the gate station
|
|
208
211
|
* (the lifecycle-end sweep) and the park lane's consumers (delete on consumption). */
|