@sema-agent/core 7.51.2 → 7.53.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 +698 -2
- package/README.md +3 -1
- package/dist/agents/agent-transcript-tool.d.ts +1 -1
- package/dist/agents/cascade.js +4 -0
- package/dist/agents/cross-session-envelope.d.ts +8 -0
- package/dist/agents/cross-session-envelope.js +6 -0
- package/dist/agents/cross-session-judge.d.ts +21 -1
- package/dist/agents/cross-session-judge.js +8 -0
- package/dist/agents/cross-session-ref.d.ts +5 -0
- package/dist/agents/cross-session-ref.js +1 -0
- package/dist/agents/cumulative-stats.d.ts +3 -0
- package/dist/agents/cumulative-stats.js +3 -0
- package/dist/agents/list-agents-tool.d.ts +1 -1
- package/dist/agents/org-delivery-gate.d.ts +122 -0
- package/dist/agents/org-delivery-gate.js +69 -0
- package/dist/agents/peer-held-queue.d.ts +9 -4
- package/dist/agents/peer-held-queue.js +6 -5
- package/dist/agents/peer-session-drain.d.ts +35 -5
- package/dist/agents/peer-session-drain.js +271 -180
- package/dist/agents/read-inbox-tool.d.ts +8 -1
- package/dist/agents/read-inbox-tool.js +5 -1
- package/dist/agents/repair-loop.js +4 -0
- package/dist/agents/send-message-tool.d.ts +11 -16
- package/dist/agents/send-message-tool.js +11 -13
- package/dist/agents/subagent.d.ts +3 -0
- package/dist/agents/subagent.js +105 -76
- package/dist/agents/tool-filter.d.ts +58 -13
- package/dist/agents/tool-filter.js +34 -14
- package/dist/bench/metrics.d.ts +1 -0
- package/dist/brain/anthropic.d.ts +6 -1
- package/dist/brain/anthropic.js +17 -13
- package/dist/brain/model-presets.d.ts +4 -5
- package/dist/brain/model-presets.js +6 -5
- package/dist/brain/open-responses.js +16 -12
- package/dist/brain/openai.js +16 -12
- package/dist/brain/request-params.d.ts +12 -33
- package/dist/brain/request-params.js +5 -2
- package/dist/brain/request-route.d.ts +9 -8
- package/dist/brain/request-route.js +1 -0
- package/dist/brain/route-adjudicator.d.ts +123 -47
- package/dist/brain/route-adjudicator.js +171 -42
- package/dist/brain/route-conformance.js +2 -2
- package/dist/brain/routing.d.ts +24 -1
- package/dist/brain/routing.js +54 -19
- package/dist/brain/status-sink.d.ts +18 -0
- package/dist/brain/status-sink.js +7 -0
- package/dist/brain/timeout.js +5 -4
- package/dist/core/a2a.d.ts +5 -2
- package/dist/core/a2a.js +30 -13
- package/dist/core/allow-entry.d.ts +42 -9
- package/dist/core/allow-entry.js +25 -18
- package/dist/core/auto-compaction.d.ts +80 -20
- package/dist/core/auto-compaction.js +65 -18
- package/dist/core/auto-promote.d.ts +2 -1
- package/dist/core/auto-promote.js +2 -2
- package/dist/core/caller-tool-name.d.ts +9 -0
- package/dist/core/caller-tool-name.js +13 -0
- package/dist/core/checkpoint-requirements.d.ts +7 -1
- package/dist/core/checkpoint-requirements.js +2 -0
- package/dist/core/checkpoint-store.d.ts +57 -24
- package/dist/core/checkpoint-store.js +3 -3
- package/dist/core/child-clamp-seats.d.ts +6 -0
- package/dist/core/child-clamp-seats.js +2 -1
- package/dist/core/compliance.js +3 -1
- package/dist/core/credential-vocabulary.d.ts +33 -8
- package/dist/core/credential-vocabulary.js +32 -7
- package/dist/core/decision-receipt.d.ts +2 -2
- package/dist/core/delegation-frames.d.ts +9 -2
- package/dist/core/delegation-name.d.ts +18 -0
- package/dist/core/delegation-name.js +47 -0
- package/dist/core/effective-path-target.d.ts +25 -6
- package/dist/core/effective-path-target.js +24 -2
- package/dist/core/engine-capabilities.d.ts +8 -1
- package/dist/core/engine-capabilities.js +1 -1
- package/dist/core/engine-notice.d.ts +49 -21
- package/dist/core/frontmatter-fence.d.ts +10 -0
- package/dist/core/frontmatter-fence.js +6 -0
- package/dist/core/gate-fold.js +8 -25
- package/dist/core/gate-lanes.js +358 -274
- package/dist/core/gate-outcome.d.ts +11 -6
- package/dist/core/governance-codes.d.ts +11 -4
- package/dist/core/governance-codes.js +12 -3
- package/dist/core/hands-band-screen.d.ts +7 -0
- package/dist/core/hands-band-screen.js +32 -0
- package/dist/core/hooks.d.ts +283 -739
- package/dist/core/hooks.js +100 -193
- package/dist/{tools/fs → core}/image-admission.d.ts +21 -3
- package/dist/{tools/fs → core}/image-admission.js +24 -6
- package/dist/core/locked-config.d.ts +84 -32
- package/dist/core/locked-config.js +128 -42
- package/dist/core/mcp-connection-pool.d.ts +4 -1
- package/dist/core/mcp-connection-pool.js +7 -2
- package/dist/core/mcp-probe.d.ts +12 -9
- package/dist/core/mcp-probe.js +3 -3
- package/dist/core/mcp-server-spec.d.ts +104 -10
- package/dist/core/mcp-server-spec.js +183 -33
- package/dist/core/mcp.d.ts +31 -20
- package/dist/core/mcp.js +66 -56
- package/dist/core/memory-engine/data-plane.js +5 -1
- package/dist/core/memory-engine/distiller.js +16 -2
- package/dist/core/memory-engine/engine.d.ts +22 -30
- package/dist/core/memory-engine/engine.js +16 -10
- package/dist/core/memory-engine/frontmatter.d.ts +6 -0
- package/dist/core/memory-engine/frontmatter.js +19 -16
- package/dist/core/memory.d.ts +2 -2
- package/dist/core/mode-policy.d.ts +5 -16
- package/dist/core/mode-policy.js +7 -19
- package/dist/core/model-seat.d.ts +4 -1
- package/dist/core/mods/dollar.d.ts +109 -0
- package/dist/core/mods/dollar.js +154 -0
- package/dist/core/mods/host.d.ts +23 -0
- package/dist/core/mods/host.js +21 -0
- package/dist/core/mods/kernel/budget.d.ts +43 -0
- package/dist/core/mods/kernel/budget.js +83 -0
- package/dist/core/mods/kernel/dispatch.d.ts +100 -0
- package/dist/core/mods/kernel/dispatch.js +699 -0
- package/dist/core/mods/kernel/events.d.ts +245 -0
- package/dist/core/mods/kernel/events.js +210 -0
- package/dist/core/mods/kernel/index.d.ts +6 -0
- package/dist/core/mods/kernel/index.js +5 -0
- package/dist/core/mods/kernel/receive.d.ts +94 -0
- package/dist/core/mods/kernel/receive.js +188 -0
- package/dist/core/mods/kernel/registration.d.ts +131 -0
- package/dist/core/mods/kernel/registration.js +102 -0
- package/dist/core/mods/kernel/site-rules.d.ts +149 -0
- package/dist/core/mods/kernel/site-rules.js +296 -0
- package/dist/core/mods/stations.d.ts +344 -0
- package/dist/core/mods/stations.js +437 -0
- package/dist/core/mounted-mcp.d.ts +57 -0
- package/dist/core/mounted-mcp.js +71 -2
- package/dist/core/own-property-receipt.d.ts +13 -0
- package/dist/core/own-property-receipt.js +13 -23
- package/dist/core/parent-spec-seat.d.ts +18 -7
- package/dist/core/parent-spec-seat.js +6 -2
- package/dist/core/path-identity.js +2 -1
- package/dist/core/permission-rule-model.d.ts +58 -9
- package/dist/core/permission-rule-model.js +81 -7
- package/dist/core/permission-rule-org.d.ts +163 -33
- package/dist/core/permission-rule-org.js +205 -71
- package/dist/core/permission-rule-syntax.d.ts +15 -0
- package/dist/core/permission-rule-syntax.js +24 -16
- package/dist/core/permission-rules.d.ts +14 -2
- package/dist/core/permission-rules.js +63 -23
- package/dist/core/prompt-section-seat.d.ts +15 -27
- package/dist/core/prompt-section-seat.js +73 -40
- package/dist/core/protocol-http-auth.d.ts +3 -1
- package/dist/core/protocol-http-auth.js +2 -0
- package/dist/core/reminder-mint.d.ts +2 -2
- package/dist/core/remote-env.d.ts +24 -12
- package/dist/core/remote-env.js +1 -0
- package/dist/core/resume-startup-cause.d.ts +16 -1
- package/dist/core/resume-startup-cause.js +4 -1
- package/dist/core/retention.js +7 -2
- package/dist/core/retired-keys.d.ts +12 -2
- package/dist/core/retired-keys.js +15 -1
- package/dist/core/roles.js +60 -10
- package/dist/core/rule-lane-reads.js +1 -1
- package/dist/core/runner/announce-once-ledger.d.ts +31 -1
- package/dist/core/runner/announce-once-ledger.js +22 -0
- package/dist/core/runner/assemble-result.d.ts +9 -0
- package/dist/core/runner/assemble-result.js +3 -1
- package/dist/core/runner/call-hook-stations.d.ts +23 -27
- package/dist/core/runner/call-hook-stations.js +58 -42
- package/dist/core/runner/caller-stop-gate.d.ts +25 -0
- package/dist/core/runner/caller-stop-gate.js +7 -0
- package/dist/core/runner/compaction-seams.d.ts +8 -22
- package/dist/core/runner/compaction-seams.js +28 -53
- package/dist/core/runner/construction-doors.js +11 -1
- package/dist/core/runner/contracts.d.ts +86 -83
- package/dist/core/runner/credential-origin-seat.d.ts +2 -0
- package/dist/core/runner/credential-origin-seat.js +19 -0
- package/dist/core/runner/extra-body-dropped-seat.d.ts +2 -6
- package/dist/core/runner/gate-exit.d.ts +47 -36
- package/dist/core/runner/gate-exit.js +12 -5
- package/dist/core/runner/image.js +1 -2
- package/dist/core/runner/inline-image.js +1 -1
- package/dist/core/runner/mcp-redial.d.ts +52 -10
- package/dist/core/runner/mcp-redial.js +38 -9
- package/dist/core/runner/notice-seat-input.d.ts +11 -0
- package/dist/core/runner/notice-seat-input.js +1 -0
- package/dist/core/runner/permission-rule-lanes.d.ts +5 -2
- package/dist/core/runner/permission-rule-lanes.js +22 -10
- package/dist/core/runner/person-path-rows.d.ts +3 -1
- package/dist/core/runner/person-path-rows.js +3 -2
- package/dist/core/runner/prepare-acquire-reconcile.js +5 -1
- package/dist/core/runner/prepare-ask-lane.d.ts +5 -7
- package/dist/core/runner/prepare-ask-lane.js +6 -15
- package/dist/core/runner/prepare-caps-and-workflow.d.ts +4 -2
- package/dist/core/runner/prepare-caps-and-workflow.js +25 -8
- package/dist/core/runner/prepare-config-doors.d.ts +52 -1
- package/dist/core/runner/prepare-config-doors.js +168 -143
- package/dist/core/runner/prepare-defer-classify.js +7 -11
- package/dist/core/runner/prepare-delegation-surface.d.ts +2 -2
- package/dist/core/runner/prepare-delegation-surface.js +7 -5
- package/dist/core/runner/prepare-gate-stations.d.ts +8 -11
- package/dist/core/runner/prepare-gate-stations.js +11 -10
- package/dist/core/runner/prepare-hands-readface.d.ts +1 -1
- package/dist/core/runner/prepare-hands-readface.js +2 -1
- package/dist/core/runner/prepare-inherited-gate.d.ts +8 -12
- package/dist/core/runner/prepare-inherited-gate.js +10 -23
- package/dist/core/runner/prepare-listings.d.ts +1 -1
- package/dist/core/runner/prepare-listings.js +4 -2
- package/dist/core/runner/prepare-memory-engine-session.d.ts +0 -6
- package/dist/core/runner/prepare-memory-engine-session.js +20 -7
- package/dist/core/runner/prepare-memory.d.ts +3 -2
- package/dist/core/runner/prepare-memory.js +6 -2
- package/dist/core/runner/prepare-offload-wrappers.d.ts +4 -4
- package/dist/core/runner/prepare-offload-wrappers.js +2 -1
- package/dist/core/runner/prepare-park-ask.js +10 -14
- package/dist/core/runner/prepare-policy-chain.d.ts +17 -15
- package/dist/core/runner/prepare-policy-chain.js +104 -109
- package/dist/core/runner/prepare-project-context.d.ts +1 -1
- package/dist/core/runner/prepare-project-context.js +11 -12
- package/dist/core/runner/prepare-prompt-assembly.d.ts +45 -40
- package/dist/core/runner/prepare-prompt-assembly.js +138 -101
- package/dist/core/runner/prepare-prompt-inputs.d.ts +28 -23
- package/dist/core/runner/prepare-prompt-inputs.js +11 -10
- package/dist/core/runner/prepare-protocol-tools.d.ts +11 -7
- package/dist/core/runner/prepare-protocol-tools.js +20 -13
- package/dist/core/runner/prepare-question-face.d.ts +4 -2
- package/dist/core/runner/prepare-question-face.js +4 -3
- package/dist/core/runner/prepare-safety-scan.js +6 -10
- package/dist/core/runner/prepare-suspend-saga.d.ts +6 -0
- package/dist/core/runner/prepare-suspend-saga.js +7 -5
- package/dist/core/runner/prepare-task.js +41 -23
- package/dist/core/runner/prepare-turn-wiring.d.ts +13 -15
- package/dist/core/runner/prepare-turn-wiring.js +29 -27
- package/dist/core/runner/prepare-wiring-manifest.d.ts +13 -9
- package/dist/core/runner/prepare-wiring-manifest.js +14 -11
- package/dist/core/runner/resume-admission.d.ts +4 -1
- package/dist/core/runner/resume-admission.js +7 -5
- package/dist/core/runner/resume-apply.d.ts +5 -2
- package/dist/core/runner/resume-apply.js +24 -42
- package/dist/core/runner/resume-checkpoint-screen.d.ts +1 -0
- package/dist/core/runner/resume-checkpoint-screen.js +9 -1
- package/dist/core/runner/resume-internals-and-config.d.ts +3 -3
- package/dist/core/runner/resume-internals-and-config.js +3 -8
- package/dist/core/runner/resume-preflight.js +38 -16
- package/dist/core/runner/retired-runner-deps.d.ts +5 -6
- package/dist/core/runner/retired-runner-deps.js +4 -5
- package/dist/core/runner/run-brain-sinks.d.ts +3 -2
- package/dist/core/runner/run-brain-sinks.js +5 -1
- package/dist/core/runner/run-compaction-machinery.d.ts +7 -1
- package/dist/core/runner/run-compaction-machinery.js +7 -33
- package/dist/core/runner/run-harness-handlers.js +4 -2
- package/dist/core/runner/run-identity-wiring.d.ts +3 -1
- package/dist/core/runner/run-identity-wiring.js +3 -2
- package/dist/core/runner/run-leg.js +103 -95
- package/dist/core/runner/run-notification-lane.js +1 -0
- package/dist/core/runner/run-recovery-lanes.d.ts +3 -0
- package/dist/core/runner/run-recovery-lanes.js +14 -11
- package/dist/core/runner/run-settle-and-teardown.js +9 -28
- package/dist/core/runner/run-stop-and-final-verify.js +18 -25
- package/dist/core/runner/run-terminal-adoption.d.ts +3 -0
- package/dist/core/runner/run-terminal-adoption.js +34 -22
- package/dist/core/runner/run-tool-mount-facts.js +5 -3
- package/dist/core/runner/run-turn-boundary.js +32 -37
- package/dist/core/runner/runtask.d.ts +6 -7
- package/dist/core/runner/runtask.js +15 -73
- package/dist/core/runner/session-rule-policy.d.ts +5 -5
- package/dist/core/runner/session-rule-policy.js +13 -8
- package/dist/core/runner/side-call-account.d.ts +68 -0
- package/dist/core/runner/side-call-account.js +61 -0
- package/dist/core/runner/skills-seat.d.ts +15 -0
- package/dist/core/runner/skills-seat.js +57 -0
- package/dist/core/runner/stream-halt-verbs.js +12 -17
- package/dist/core/runner/stream-lifecycle-verbs.js +8 -5
- package/dist/core/runner/stream-steer-verb.d.ts +1 -1
- package/dist/core/runner/stream-steer-verb.js +20 -38
- package/dist/core/runner/sub-agent-deny-lists.d.ts +124 -23
- package/dist/core/runner/sub-agent-deny-lists.js +230 -71
- package/dist/core/runner/synthetic-tools.d.ts +5 -2
- package/dist/core/runner/synthetic-tools.js +2 -12
- package/dist/core/runner/tool-end-body.d.ts +5 -6
- package/dist/core/runner/tool-end-body.js +6 -4
- package/dist/core/runner/tool-not-executed.d.ts +15 -0
- package/dist/core/runner/tool-not-executed.js +30 -0
- package/dist/core/runner/tool-occurrence.d.ts +8 -7
- package/dist/core/runner/tool-occurrence.js +5 -5
- package/dist/core/runner/tool-result-media-seat.d.ts +1 -1
- package/dist/core/runner-deps.d.ts +43 -36
- package/dist/core/safety-merge-corpus.js +18 -2
- package/dist/core/secret-env.d.ts +88 -20
- package/dist/core/secret-env.js +192 -38
- package/dist/core/session-policy-store.d.ts +71 -16
- package/dist/core/session-policy-store.js +138 -28
- package/dist/core/session-reconcile.d.ts +4 -0
- package/dist/core/session-reconcile.js +2 -1
- package/dist/core/shell-read-silence.js +3 -32
- package/dist/core/side-query.d.ts +5 -3
- package/dist/core/skill-grant.d.ts +3 -2
- package/dist/core/skill-grant.js +17 -9
- package/dist/core/skills-directory.d.ts +31 -11
- package/dist/core/skills-directory.js +655 -104
- package/dist/core/store-contracts/mailbox-store-contract.js +13 -0
- package/dist/core/task-event.d.ts +49 -3
- package/dist/core/task-notification.js +2 -2
- package/dist/core/task-result.d.ts +8 -0
- package/dist/core/task-spec.d.ts +20 -19
- package/dist/core/task-stream.d.ts +14 -4
- package/dist/core/tighten-task-spec.d.ts +4 -3
- package/dist/core/tighten-task-spec.js +2 -4
- package/dist/core/tool-check-reading.d.ts +74 -0
- package/dist/core/tool-check-reading.js +80 -0
- package/dist/core/tool-policy.d.ts +62 -18
- package/dist/core/tool-policy.js +86 -15
- package/dist/core/tool-registry.d.ts +20 -0
- package/dist/core/tool-registry.js +4 -0
- package/dist/core/tool-spec.d.ts +10 -6
- package/dist/core/tools.js +2 -0
- package/dist/core/trace.d.ts +51 -32
- package/dist/core/types.d.ts +2 -2
- package/dist/core/types.js +1 -1
- package/dist/core/unc-spelling.d.ts +10 -0
- package/dist/core/unc-spelling.js +3 -0
- package/dist/core/untrusted-egress.d.ts +8 -0
- package/dist/core/untrusted-egress.js +4 -1
- package/dist/core/untrusted-text.d.ts +16 -0
- package/dist/core/untrusted-text.js +7 -2
- package/dist/core/user-attachment.d.ts +25 -4
- package/dist/core/user-attachment.js +63 -42
- package/dist/core/wiring-manifest.d.ts +18 -15
- package/dist/core/wiring-manifest.js +2 -2
- package/dist/engine/compaction/utils.js +1 -2
- package/dist/engine/execution-env/node-execution-env.d.ts +4 -3
- package/dist/engine/execution-env/symlink-chain.js +1 -1
- package/dist/engine/harness/agent-harness.d.ts +1 -1
- package/dist/engine/harness/agent-harness.js +5 -4
- package/dist/engine/harness/types.d.ts +20 -16
- package/dist/engine/harness/types.js +7 -1
- package/dist/engine/llm/types.d.ts +12 -7
- package/dist/engine/loop/agent-loop.d.ts +12 -1
- package/dist/engine/loop/agent-loop.js +18 -6
- package/dist/engine/loop/types.d.ts +8 -2
- package/dist/engine/lsp/node-lsp-manager.d.ts +2 -2
- package/dist/engine/session/import-validate.js +3 -10
- package/dist/engine/session/session.d.ts +4 -4
- package/dist/engine/session/session.js +4 -4
- package/dist/index.d.ts +33 -23
- package/dist/index.js +23 -15
- package/dist/internal/harness.d.ts +2 -1
- package/dist/internal/harness.js +2 -1
- package/dist/orchestration/goal.d.ts +24 -1
- package/dist/orchestration/goal.js +3 -2
- package/dist/orchestration/run-spec.d.ts +4 -6
- package/dist/orchestration/run-spec.js +39 -63
- package/dist/orchestration/run-workflow-tool.js +1 -2
- package/dist/orchestration/workflow.d.ts +11 -3
- package/dist/orchestration/workflow.js +11 -2
- package/dist/prompt-assembly/artifact-store.d.ts +72 -56
- package/dist/prompt-assembly/artifact-store.js +60 -52
- package/dist/prompt-assembly/artifact.d.ts +90 -76
- package/dist/prompt-assembly/artifact.js +197 -145
- package/dist/prompt-assembly/assemble.d.ts +36 -29
- package/dist/prompt-assembly/assemble.js +34 -220
- package/dist/prompt-assembly/bands.d.ts +20 -0
- package/dist/prompt-assembly/bands.js +18 -0
- package/dist/prompt-assembly/catalog/constitution.d.ts +23 -0
- package/dist/prompt-assembly/catalog/constitution.js +69 -0
- package/dist/prompt-assembly/catalog/core-behavior.d.ts +9 -0
- package/dist/prompt-assembly/catalog/core-behavior.js +85 -0
- package/dist/prompt-assembly/catalog/index.d.ts +11 -0
- package/dist/prompt-assembly/catalog/index.js +60 -0
- package/dist/prompt-assembly/catalog/memory.d.ts +13 -0
- package/dist/prompt-assembly/catalog/memory.js +6 -0
- package/dist/prompt-assembly/catalog/modes.d.ts +15 -0
- package/dist/prompt-assembly/catalog/modes.js +137 -0
- package/dist/prompt-assembly/catalog/role.d.ts +10 -0
- package/dist/prompt-assembly/catalog/role.js +157 -0
- package/dist/prompt-assembly/catalog/schema.d.ts +138 -0
- package/dist/prompt-assembly/catalog/schema.js +25 -0
- package/dist/prompt-assembly/catalog/sections.d.ts +9 -0
- package/dist/prompt-assembly/catalog/sections.js +98 -0
- package/dist/prompt-assembly/catalog/team.d.ts +4 -0
- package/dist/prompt-assembly/catalog/team.js +258 -0
- package/dist/prompt-assembly/composer.d.ts +26 -28
- package/dist/prompt-assembly/composer.js +124 -46
- package/dist/prompt-assembly/epoch.d.ts +89 -79
- package/dist/prompt-assembly/epoch.js +115 -142
- package/dist/prompt-assembly/explain.d.ts +58 -34
- package/dist/prompt-assembly/explain.js +21 -24
- package/dist/prompt-assembly/overlay.d.ts +137 -0
- package/dist/prompt-assembly/overlay.js +339 -0
- package/dist/prompt-assembly/renderers.d.ts +21 -0
- package/dist/prompt-assembly/renderers.js +39 -0
- package/dist/prompt-assembly/section-usage.d.ts +3 -3
- package/dist/prompt-assembly/section-usage.js +1 -1
- package/dist/prompt-assembly/select.d.ts +71 -0
- package/dist/prompt-assembly/select.js +106 -0
- package/dist/prompt-assembly/sugar.d.ts +31 -0
- package/dist/prompt-assembly/sugar.js +20 -0
- package/dist/prompt-assembly/turn-snapshot.d.ts +3 -2
- package/dist/prompt-assembly/types.d.ts +45 -148
- package/dist/prompts/coordinator.d.ts +2 -21
- package/dist/prompts/coordinator.js +3 -255
- package/dist/prompts/cowork.d.ts +27 -16
- package/dist/prompts/cowork.js +2 -23
- package/dist/prompts/default.d.ts +38 -511
- package/dist/prompts/default.js +20 -288
- package/dist/prompts/supervisor.d.ts +6 -71
- package/dist/prompts/supervisor.js +6 -117
- package/dist/stores/file/permission-rule-store.d.ts +1 -1
- package/dist/stores/file/permission-rule-store.js +2 -1
- package/dist/tools/artifact/artifact-tool.js +4 -3
- package/dist/tools/fs/bash-readonly-classifier.d.ts +6 -5
- package/dist/tools/fs/dir-entries.d.ts +4 -2
- package/dist/tools/fs/dir-entries.js +16 -4
- package/dist/tools/fs/fs-bash.d.ts +1 -1
- package/dist/tools/fs/fs-bash.js +22 -11
- package/dist/tools/fs/fs-pdf.js +17 -13
- package/dist/tools/fs/fs-read.js +4 -3
- package/dist/tools/fs/fs-shared.d.ts +1 -10
- package/dist/tools/fs/fs-shared.js +3 -4
- package/dist/tools/fs/fs-write.js +2 -1
- package/dist/tools/fs/notebook.js +1 -1
- package/dist/tools/fs/pdf.d.ts +20 -10
- package/dist/tools/fs/pdf.js +19 -10
- package/dist/tools/fs/program-read-model.d.ts +68 -8
- package/dist/tools/fs/program-read-model.js +112 -33
- package/dist/tools/fs/program-read-model.rows.js +30 -10
- package/dist/tools/fs/read-deny-home.d.ts +25 -9
- package/dist/tools/fs/read-deny-home.js +28 -27
- package/dist/tools/fs/read-deny.d.ts +41 -11
- package/dist/tools/fs/read-deny.js +51 -5
- package/dist/tools/fs/safety.d.ts +4 -26
- package/dist/tools/fs/safety.js +10 -32
- package/dist/tools/fs/search.js +15 -10
- package/dist/tools/fs/shell-read-argv.d.ts +3 -2
- package/dist/tools/fs/shell-read-argv.js +118 -38
- package/dist/tools/fs/shell-read-establish.d.ts +5 -5
- package/dist/tools/fs/shell-read-establish.js +11 -61
- package/dist/tools/fs/shell-read-identity.js +6 -3
- package/dist/tools/fs/shell-read-judge.d.ts +13 -15
- package/dist/tools/fs/shell-read-judge.js +18 -4
- package/dist/tools/fs/shell-read-plan.d.ts +2 -2
- package/dist/tools/web.js +1 -1
- package/package.json +13 -1
- package/test/export-surface.snapshot.json +306 -103
- package/wire-changes/core@7.52.0.json +5859 -0
- package/wire-changes/core@7.53.0.json +1946 -0
- package/dist/core/hook-seats.d.ts +0 -66
- package/dist/core/hook-seats.js +0 -37
- package/dist/prompt-assembly/packs/sema-default.d.ts +0 -2
- package/dist/prompt-assembly/packs/sema-default.js +0 -147
- package/dist/prompts/simple-sections.d.ts +0 -58
- package/dist/prompts/simple-sections.js +0 -43
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { openSystemReminder } from "../reminder-mint.js";
|
|
2
|
-
import { formatHookFeedback
|
|
2
|
+
import { formatHookFeedback } from "../hooks.js";
|
|
3
|
+
import { classicEventBase, dispatchClassic, stopEventOf, stringMembersAnswer, stringMembersOf } from "../mods/stations.js";
|
|
3
4
|
import { asThrownError } from "../thrown-value.js";
|
|
4
5
|
const STOP_HOOK_BLOCK_CAP = 8;
|
|
5
6
|
export function runStopAndFinalVerify(input) {
|
|
6
7
|
const { spec, prepared, queue, rs, stats, ident, walltimeMonotonicDeadline, runner } = input;
|
|
7
|
-
const
|
|
8
|
+
const stopEvent = stopEventOf(prepared.hookIdentity);
|
|
9
|
+
const stopArmed = prepared.modBus.hasHandlers(stopEvent);
|
|
8
10
|
const finalVerificationOn = spec.finalVerification === true;
|
|
9
11
|
const finalVerifyBudgetFill = () => {
|
|
10
12
|
let worst = 0;
|
|
@@ -22,7 +24,7 @@ export function runStopAndFinalVerify(input) {
|
|
|
22
24
|
const emitFinalVerifyEcho = (body) => {
|
|
23
25
|
queue.push({ type: "steering_injected", source: "final_verification", preview: body.slice(0, 220), ...ident() });
|
|
24
26
|
};
|
|
25
|
-
if (
|
|
27
|
+
if (stopArmed || finalVerificationOn) {
|
|
26
28
|
let consecutiveBlocks = 0;
|
|
27
29
|
prepared.harness.setStopGate(async () => {
|
|
28
30
|
if (prepared.abortController.signal.aborted || prepared.pausedRef.current !== undefined || prepared.batchHaltRef.current !== undefined)
|
|
@@ -100,32 +102,23 @@ export function runStopAndFinalVerify(input) {
|
|
|
100
102
|
},
|
|
101
103
|
];
|
|
102
104
|
}
|
|
103
|
-
if (!
|
|
105
|
+
if (!stopArmed)
|
|
104
106
|
return [];
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
identity: prepared.hookIdentity,
|
|
113
|
-
permissionMode: prepared.permissionMode.observed,
|
|
114
|
-
signal: sig,
|
|
115
|
-
}));
|
|
116
|
-
if (stopSeat.expired) {
|
|
117
|
-
if (stopSeat.cause === "timeout") {
|
|
118
|
-
runner.deps.onError?.(hookSeatExpiredError("stop", prepared.hookTimeoutMs, stopSeat.cause, "the run was allowed to END (the seat's own no-opinion answer); no pushback and no additional context were injected"), { phase: "hook", sessionId: prepared.sessionId });
|
|
119
|
-
}
|
|
120
|
-
consecutiveBlocks = 0;
|
|
121
|
-
return [];
|
|
122
|
-
}
|
|
123
|
-
result = stopSeat.value;
|
|
124
|
-
}
|
|
125
|
-
catch (err) {
|
|
107
|
+
const outcome = await dispatchClassic(prepared.modBus, stopEvent, {
|
|
108
|
+
...classicEventBase(prepared.hookIdentity, prepared.permissionMode.observed),
|
|
109
|
+
stopHookActive: consecutiveBlocks > 0,
|
|
110
|
+
consecutiveBlocks,
|
|
111
|
+
getBranch: () => prepared.session.getBranch(),
|
|
112
|
+
backgroundTasks: () => prepared.listBackgroundTasks(),
|
|
113
|
+
}, { signal: prepared.abortController.signal, checkAnswer: stringMembersAnswer(stopEvent, ["block", "additionalContext"]) }).catch((err) => {
|
|
126
114
|
runner.deps.onError?.(asThrownError(err), { phase: "hook", sessionId: prepared.sessionId });
|
|
115
|
+
return undefined;
|
|
116
|
+
});
|
|
117
|
+
if (outcome?.kind !== "answered") {
|
|
118
|
+
consecutiveBlocks = 0;
|
|
127
119
|
return [];
|
|
128
120
|
}
|
|
121
|
+
const result = stringMembersOf(outcome.answer, ["block", "additionalContext"]);
|
|
129
122
|
const messages = [];
|
|
130
123
|
if (result?.additionalContext) {
|
|
131
124
|
messages.push({
|
|
@@ -22,6 +22,7 @@ import type { PushQueue } from "../push-queue.js";
|
|
|
22
22
|
import type { Brain, OwedUserInputAccount, TaskEvent, TaskSpec } from "../types.js";
|
|
23
23
|
import { type Stats } from "./assemble-result.js";
|
|
24
24
|
import type { EndOfTaskCompaction, Prepared, RunnerDepsSeat, RunState } from "./contracts.js";
|
|
25
|
+
import type { CallerStopGate } from "./caller-stop-gate.js";
|
|
25
26
|
export interface RunTerminalAdoptionInput<R> {
|
|
26
27
|
/** borrowed-readonly — the task spec: the task id the account's notices name; `finish`'s first argument (the end-of-task pass below). */
|
|
27
28
|
spec: TaskSpec;
|
|
@@ -78,6 +79,8 @@ export interface RunTerminalAdoptionInput<R> {
|
|
|
78
79
|
abortedLive: boolean;
|
|
79
80
|
/** borrowed-readonly — the leg's snapshot of `loopLatch.userInterrupted` (gates the interruption marker). */
|
|
80
81
|
userInterruptedLive: boolean;
|
|
82
|
+
/** borrowed-readonly — the run's caller-stop gate: the end-of-task pass admits on it and carries it (read LIVE, never snapshot). */
|
|
83
|
+
callerStop: CallerStopGate;
|
|
81
84
|
/** borrowed-readonly — the Runner's deployment deps, read LIVE (`onError`, `checkpointStore`, `onNotice`, `mediaByteCapBytes`); the one home of why it is
|
|
82
85
|
* a seat and not a captured object is {@link RunnerDepsSeat}. */
|
|
83
86
|
runner: RunnerDepsSeat;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DEFAULT_COMPACTION_INSTRUCTIONS, maybeCompact } from "../auto-compaction.js";
|
|
1
|
+
import { compactionPassReport, DEFAULT_COMPACTION_INSTRUCTIONS, isCompactionManualCancel, maybeCompact } from "../auto-compaction.js";
|
|
2
2
|
import { eventDefaultOn } from "../../prompt-assembly/event-registry.js";
|
|
3
3
|
import { appendInterruptionMarker, reconcileInterruptedSession } from "../session-reconcile.js";
|
|
4
4
|
import { emitTrace } from "../trace.js";
|
|
@@ -12,7 +12,7 @@ import { MAX_CONSECUTIVE_COMPACTION_FAILURES } from "./compaction-knobs.js";
|
|
|
12
12
|
import { emitSettled, reconciledEnd } from "./tool-end-body.js";
|
|
13
13
|
import { asThrownError, thrownText } from "../thrown-value.js";
|
|
14
14
|
export async function runTerminalAdoption(input) {
|
|
15
|
-
const { spec, queue, prepared, rs, stats, ident, emitCommitted, startedToolCallIds, toolLabels, timeout, compactionBrain, compactionBreaker, windowSafetyOptions, undrainedUserAtEnd, userInputLostAtEnd, final, abortedLive, userInterruptedLive, runner, sessions, next } = input;
|
|
15
|
+
const { spec, queue, prepared, rs, stats, ident, emitCommitted, startedToolCallIds, toolLabels, timeout, compactionBrain, compactionBreaker, windowSafetyOptions, undrainedUserAtEnd, userInputLostAtEnd, final, abortedLive, userInterruptedLive, callerStop, runner, sessions, next } = input;
|
|
16
16
|
let { threw } = input;
|
|
17
17
|
const settled = answerSettled(final, userInputLostAtEnd.current || prepared.undeliveredContinuationRef.current.parkedSteers.length > 0 || prepared.workCutRef.continuation || prepared.workCutRef.abortedBeforeTurnEnd);
|
|
18
18
|
if (threw === undefined && prepared.brainCallGuardrailRef.timedOut !== undefined) {
|
|
@@ -115,12 +115,13 @@ export async function runTerminalAdoption(input) {
|
|
|
115
115
|
}
|
|
116
116
|
const comp = await finish(spec, prepared, {
|
|
117
117
|
telemetry: { tracer: rs.telemetry.tracer, taskId: rs.telemetry.taskId },
|
|
118
|
-
skipCompaction: durablyPaused || (abortedLive && settled) || compactionBreaker.failures >= MAX_CONSECUTIVE_COMPACTION_FAILURES,
|
|
118
|
+
skipCompaction: durablyPaused || (abortedLive && settled) || callerStop.signal.aborted || compactionBreaker.failures >= MAX_CONSECUTIVE_COMPACTION_FAILURES,
|
|
119
|
+
callerStop,
|
|
119
120
|
minTokens: rs.counters.compactionFloor,
|
|
120
121
|
brain: compactionBrain,
|
|
121
122
|
windowSafety: windowSafetyOptions(prepared.harness.getModel()),
|
|
122
|
-
|
|
123
|
-
|
|
123
|
+
passReport: compactionPassReport(queue, ident),
|
|
124
|
+
onCompactionOutcome: (outcome, reason, end) => queue.push({ type: "compaction_outcome", outcome, trigger: "auto", reason, ...end, ...ident() }),
|
|
124
125
|
}, runner, sessions);
|
|
125
126
|
return await next({ threw, comp, answerSettled: settled, owedUserInput });
|
|
126
127
|
}
|
|
@@ -130,7 +131,7 @@ async function finish(spec, prepared, opts, runner, sessions) {
|
|
|
130
131
|
try {
|
|
131
132
|
const finishComp = await maybeCompact({
|
|
132
133
|
session: prepared.session,
|
|
133
|
-
|
|
134
|
+
promptIdentity: prepared.promptIdentity,
|
|
134
135
|
...centerAdoptionOption(prepared),
|
|
135
136
|
model: prepared.harness.getModel(),
|
|
136
137
|
...legContextOverlayOption(prepared, runner),
|
|
@@ -141,6 +142,8 @@ async function finish(spec, prepared, opts, runner, sessions) {
|
|
|
141
142
|
thinking: prepared.thinking,
|
|
142
143
|
settings: legCompactionSettings(spec, legContextOverlayOption(prepared, runner).contextOverlay),
|
|
143
144
|
customInstructions: spec.compaction?.instructions ?? DEFAULT_COMPACTION_INSTRUCTIONS,
|
|
145
|
+
signal: opts.callerStop.signal,
|
|
146
|
+
manualCancelSignal: opts.callerStop.signal,
|
|
144
147
|
minTokens: opts?.minTokens,
|
|
145
148
|
overheadTokens: prepared.promptOverheadTokens,
|
|
146
149
|
...(prepared.activeTools.size > 0 ? { activeTools: [...prepared.activeTools] } : {}),
|
|
@@ -151,10 +154,7 @@ async function finish(spec, prepared, opts, runner, sessions) {
|
|
|
151
154
|
...(prepared.onCompactionApplied ? { onApplied: prepared.onCompactionApplied } : {}),
|
|
152
155
|
...seamCCompactionOptions(runner, prepared),
|
|
153
156
|
...compactionRestateOptions(prepared),
|
|
154
|
-
...compactionHookOptions(runner,
|
|
155
|
-
timeoutMs: prepared.hookTimeoutMs,
|
|
156
|
-
...(opts?.cancelled === true ? { signal: prepared.abortController.signal } : {}),
|
|
157
|
-
}),
|
|
157
|
+
...compactionHookOptions(runner, prepared, "auto", opts.callerStop.signal), onStarted: opts.passReport.onStarted,
|
|
158
158
|
});
|
|
159
159
|
recordCompactionReuse(runner, prepared, finishComp);
|
|
160
160
|
if (finishComp.unevaluableWindow) {
|
|
@@ -163,18 +163,30 @@ async function finish(spec, prepared, opts, runner, sessions) {
|
|
|
163
163
|
comp = finishComp;
|
|
164
164
|
}
|
|
165
165
|
catch (err) {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
|
|
166
|
+
if (isCompactionManualCancel(err)) {
|
|
167
|
+
emitTrace(opts?.telemetry?.tracer ?? spec.tracer ?? runner.deps.tracer, () => ({
|
|
168
|
+
kind: "compaction.mooted",
|
|
169
|
+
version: 1,
|
|
170
|
+
taskId: opts?.telemetry?.taskId ?? spec.taskId ?? prepared.sessionId,
|
|
171
|
+
reason: "cancelled",
|
|
172
|
+
ts: Date.now(),
|
|
173
|
+
}));
|
|
174
|
+
opts?.onCompactionOutcome?.("mooted", "cancelled", opts.passReport.end);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
const failMsg = thrownText(err);
|
|
178
|
+
const failReason = failMsg.length > 512 ? `${failMsg.slice(0, 512)}…` : failMsg;
|
|
179
|
+
emitTrace(opts?.telemetry?.tracer ?? spec.tracer ?? runner.deps.tracer, () => ({
|
|
180
|
+
kind: "compaction.failed",
|
|
181
|
+
version: 1,
|
|
182
|
+
taskId: opts?.telemetry?.taskId ?? spec.taskId ?? prepared.sessionId,
|
|
183
|
+
trigger: "auto",
|
|
184
|
+
reason: failReason,
|
|
185
|
+
ts: Date.now(),
|
|
186
|
+
}));
|
|
187
|
+
opts?.onCompactionOutcome?.("failed", failReason, opts.passReport.end);
|
|
188
|
+
runner.deps.onError?.(err, { phase: "compaction", sessionId: prepared.sessionId });
|
|
189
|
+
}
|
|
178
190
|
}
|
|
179
191
|
}
|
|
180
192
|
try {
|
|
@@ -21,11 +21,13 @@ export function runToolMountFacts(input) {
|
|
|
21
21
|
emitTrace(rs.telemetry.tracer, () => ({ kind: "task.start", version: 1, taskId: rs.telemetry.taskId, runId: rs.telemetry.runId, model: prepared.model.id, engineVersion: engineVersion(), ts: rs.telemetry.taskStart }));
|
|
22
22
|
emitTrace(rs.telemetry.tracer, () => ({
|
|
23
23
|
kind: "prompt.assembled",
|
|
24
|
-
version:
|
|
24
|
+
version: 3,
|
|
25
25
|
taskId: rs.telemetry.taskId,
|
|
26
|
-
|
|
26
|
+
identity: prepared.promptManifest.identity,
|
|
27
|
+
selectors: prepared.promptManifest.selectors,
|
|
27
28
|
blocks: prepared.promptManifest.blocks,
|
|
28
|
-
|
|
29
|
+
sections: prepared.promptManifest.sections,
|
|
30
|
+
...(prepared.promptManifest.superseded ? { superseded: prepared.promptManifest.superseded } : {}),
|
|
29
31
|
...(prepared.promptManifest.tools ? { tools: prepared.promptManifest.tools } : {}),
|
|
30
32
|
...(prepared.promptManifest.snapshot ? { snapshot: prepared.promptManifest.snapshot } : {}),
|
|
31
33
|
...(prepared.promptManifest.lowering ? { lowering: prepared.promptManifest.lowering } : {}),
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { compactionKindOf } from "../task-notification.js";
|
|
2
2
|
import { mintSystemReminder } from "../reminder-mint.js";
|
|
3
3
|
import { eventDefaultOn } from "../../prompt-assembly/event-registry.js";
|
|
4
|
-
import { DEFAULT_COMPACTION_INSTRUCTIONS, isCompactionManualCancel, maybeCompact, mintCompactedEvent, nextTrimForceBackoff, recordCompactionAndCheckRapidRefill } from "../auto-compaction.js";
|
|
4
|
+
import { compactionPassReport, DEFAULT_COMPACTION_INSTRUCTIONS, isCompactionManualCancel, maybeCompact, mintCompactedEvent, nextTrimForceBackoff, recordCompactionAndCheckRapidRefill } from "../auto-compaction.js";
|
|
5
5
|
import { emitTrace } from "../trace.js";
|
|
6
6
|
import { redactThenCut } from "../../agents/subagent-steps.js";
|
|
7
7
|
import { ATTACHMENT_BYTE_CAP, CHANGED_FILES_MAX, TOTAL_TOKENS_REMINDER_DEFAULT_MODE, attachmentEnvelopeTags, clipToBytes, collectDateChange, collectDueAttachments, collectInstructionsChange, commitAgentListing, commitInstructionsChange, commitSkillsListing, isIntactSource, rebaseCadenceWindows, renderAgentListingFrame, renderMcpDroppedTools, renderMcpInstructionsDelta, selectMcpDroppedBatch, renderSkillsListingFrame, renderToolsDelta } from "./turn-attachments.js";
|
|
8
8
|
import { announceListingTruncation } from "../skill-listing-budget.js";
|
|
9
9
|
import { buildWorkingFileAttachments, centerAdoptionOption, contextInstructionFilesOption, emitInputTruncated, forkContextOption, legCompactionSettings, legContextOverlayOption } from "./compaction-call-options.js";
|
|
10
|
-
import {
|
|
10
|
+
import { classicEventBase, dispatchClassic, stringMembersAnswer, stringMembersOf } from "../mods/stations.js";
|
|
11
11
|
import { sanitizeUntrustedText, SHELLED_BODY_ENVELOPE_TAGS } from "../untrusted-text.js";
|
|
12
12
|
import { droppedToolDigest, withAnnounceDigests } from "./announce-once-ledger.js";
|
|
13
13
|
import { formatDiagnosticsBlock, withholdListedDiagnostics } from "../lsp-diagnostics.js";
|
|
@@ -23,7 +23,7 @@ const BATCH_CONTEXT_MIN_KEEP_BYTES = 160;
|
|
|
23
23
|
const BATCH_TRUNCATION_MARKER = "\n…[truncated]";
|
|
24
24
|
export function createTurnBoundary(input) {
|
|
25
25
|
const { prepared, stats, rs, deps } = input;
|
|
26
|
-
const { spec, queue, manualCompactRef, todoToolMounted, taskToolsMounted, walltimeMonotonicDeadline, timeout, ident,
|
|
26
|
+
const { spec, queue, loopLatch: { callerStop }, manualCompactRef, todoToolMounted, taskToolsMounted, walltimeMonotonicDeadline, timeout, ident, postToolBatchArmed, batchArgs, compactionBrain, withinTaskCompaction, compactionBreaker, windowSafetyOptions, rapidRefill, drainManualCompact, runnerHooks, runner } = deps;
|
|
27
27
|
let finalVerifySeenAtLastBoundary = 0;
|
|
28
28
|
let legContinues = true;
|
|
29
29
|
const boundaryPass = async (event) => {
|
|
@@ -464,35 +464,30 @@ export function createTurnBoundary(input) {
|
|
|
464
464
|
let batchContextBlock;
|
|
465
465
|
const finalVerifyInjectedThisTurn = rs.counters.finalVerifyInjections !== finalVerifySeenAtLastBoundary;
|
|
466
466
|
finalVerifySeenAtLastBoundary = rs.counters.finalVerifyInjections;
|
|
467
|
-
if (
|
|
467
|
+
if (postToolBatchArmed && rs.turn.toolBatch.length > 0) {
|
|
468
468
|
const batch = rs.turn.toolBatch;
|
|
469
469
|
rs.turn.toolBatch = [];
|
|
470
470
|
batchArgs?.clear();
|
|
471
471
|
const injectedThisTurn = finalVerifyInjectedThisTurn ? "final_verification" : undefined;
|
|
472
472
|
if (!boundarySteered && !prepared.abortController.signal.aborted) {
|
|
473
|
-
|
|
474
|
-
const batchSeat = await runHookSeat("postToolBatch", { timeoutMs: prepared.hookTimeoutMs, signal: prepared.abortController.signal }, (sig) => postToolBatchHook(batch, injectedThisTurn !== undefined ? { injectedThisTurn } : undefined, { identity: prepared.hookIdentity, permissionMode: prepared.permissionMode.observed, signal: sig }));
|
|
475
|
-
if (batchSeat.expired) {
|
|
476
|
-
runnerHooks.onError?.(hookSeatExpiredError("postToolBatch", prepared.hookTimeoutMs, batchSeat.cause, "the boundary observation was abandoned and its additionalContext dropped; the turn boundary itself is unchanged"), { phase: "hook", sessionId: prepared.sessionId });
|
|
477
|
-
}
|
|
478
|
-
const r = batchSeat.expired ? undefined : batchSeat.value;
|
|
479
|
-
if (r?.additionalContext && injectedThisTurn === undefined) {
|
|
480
|
-
const body = sanitizeUntrustedText(r.additionalContext, SHELLED_BODY_ENVELOPE_TAGS);
|
|
481
|
-
const budget = ATTACHMENT_BYTE_CAP - boundaryAttachmentBytes;
|
|
482
|
-
if (budget >= BATCH_CONTEXT_MIN_KEEP_BYTES) {
|
|
483
|
-
const clipped = clipToBytes(body, budget) === body
|
|
484
|
-
? body
|
|
485
|
-
: `${clipToBytes(body, budget - Buffer.byteLength(BATCH_TRUNCATION_MARKER, "utf8"))}${BATCH_TRUNCATION_MARKER}`;
|
|
486
|
-
batchContextBlock = mintSystemReminder(clipped, prepared.reminderMark);
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
catch (err) {
|
|
473
|
+
const outcome = await dispatchClassic(prepared.modBus, "classic.PostToolBatch", { ...classicEventBase(prepared.hookIdentity, prepared.permissionMode.observed), batch, ...(injectedThisTurn !== undefined ? { injectedThisTurn } : {}) }, { signal: prepared.abortController.signal, checkAnswer: stringMembersAnswer("classic.PostToolBatch", ["additionalContext"]) }).catch((err) => {
|
|
491
474
|
try {
|
|
492
475
|
runnerHooks.onError?.(asThrownError(err), { phase: "hook", sessionId: prepared.sessionId });
|
|
493
476
|
}
|
|
494
477
|
catch {
|
|
495
478
|
}
|
|
479
|
+
return undefined;
|
|
480
|
+
});
|
|
481
|
+
const r = outcome?.kind === "answered" ? stringMembersOf(outcome.answer, ["additionalContext"]) : undefined;
|
|
482
|
+
if (r?.additionalContext && injectedThisTurn === undefined) {
|
|
483
|
+
const body = sanitizeUntrustedText(r.additionalContext, SHELLED_BODY_ENVELOPE_TAGS);
|
|
484
|
+
const budget = ATTACHMENT_BYTE_CAP - boundaryAttachmentBytes;
|
|
485
|
+
if (budget >= BATCH_CONTEXT_MIN_KEEP_BYTES) {
|
|
486
|
+
const clipped = clipToBytes(body, budget) === body
|
|
487
|
+
? body
|
|
488
|
+
: `${clipToBytes(body, budget - Buffer.byteLength(BATCH_TRUNCATION_MARKER, "utf8"))}${BATCH_TRUNCATION_MARKER}`;
|
|
489
|
+
batchContextBlock = mintSystemReminder(clipped, prepared.reminderMark);
|
|
490
|
+
}
|
|
496
491
|
}
|
|
497
492
|
}
|
|
498
493
|
}
|
|
@@ -507,6 +502,7 @@ export function createTurnBoundary(input) {
|
|
|
507
502
|
const forceManual = manualCompactRef.requested;
|
|
508
503
|
if ((!withinTaskCompaction() && !forceManual) ||
|
|
509
504
|
prepared.abortController.signal.aborted ||
|
|
505
|
+
callerStop.signal.aborted ||
|
|
510
506
|
prepared.pausedRef.current !== undefined) {
|
|
511
507
|
if (forceManual) {
|
|
512
508
|
emitTrace(rs.telemetry.tracer, () => ({ kind: "compaction.mooted", version: 1, taskId: rs.telemetry.taskId, reason: "task_ending", ts: Date.now() }));
|
|
@@ -553,14 +549,8 @@ export function createTurnBoundary(input) {
|
|
|
553
549
|
w.resolve(outcome);
|
|
554
550
|
};
|
|
555
551
|
const claimedCancelSignals = claimedManual?.waiters.flatMap((w) => (w.signal !== undefined ? [w.signal] : [])) ?? [];
|
|
556
|
-
const manualCancelSignal = claimedCancelSignals.length === 0
|
|
557
|
-
|
|
558
|
-
: claimedCancelSignals.length === 1
|
|
559
|
-
? claimedCancelSignals[0]
|
|
560
|
-
: AbortSignal.any(claimedCancelSignals);
|
|
561
|
-
const compactionPassSignal = claimedCancelSignals.length > 0
|
|
562
|
-
? AbortSignal.any([prepared.abortController.signal, ...claimedCancelSignals])
|
|
563
|
-
: prepared.abortController.signal;
|
|
552
|
+
const manualCancelSignal = claimedCancelSignals.length === 0 ? callerStop.signal : AbortSignal.any([callerStop.signal, ...claimedCancelSignals]);
|
|
553
|
+
const compactionPassSignal = AbortSignal.any([prepared.abortController.signal, manualCancelSignal]);
|
|
564
554
|
const trimPressureArmed = prepared.trimPressureRef.droppedMessages;
|
|
565
555
|
if (trimPressureArmed)
|
|
566
556
|
prepared.trimPressureRef.droppedMessages = false;
|
|
@@ -568,10 +558,11 @@ export function createTurnBoundary(input) {
|
|
|
568
558
|
const passTrigger = trimPressure ? "forced" : forceManual ? "manual" : "auto";
|
|
569
559
|
let manualOutcome = "failed";
|
|
570
560
|
const manualInstructions = claimedManual?.instructions;
|
|
561
|
+
const passReport = compactionPassReport(queue, ident);
|
|
571
562
|
try {
|
|
572
563
|
const comp = await maybeCompact({
|
|
573
564
|
session: prepared.session,
|
|
574
|
-
|
|
565
|
+
promptIdentity: prepared.promptIdentity,
|
|
575
566
|
...centerAdoptionOption(prepared),
|
|
576
567
|
model: event.model,
|
|
577
568
|
...legContextOverlayOption(prepared, runner),
|
|
@@ -583,7 +574,7 @@ export function createTurnBoundary(input) {
|
|
|
583
574
|
settings: legCompactionSettings(spec, legContextOverlayOption(prepared, runner).contextOverlay),
|
|
584
575
|
customInstructions: manualInstructions ?? spec.compaction?.instructions ?? DEFAULT_COMPACTION_INSTRUCTIONS,
|
|
585
576
|
signal: compactionPassSignal,
|
|
586
|
-
|
|
577
|
+
manualCancelSignal,
|
|
587
578
|
minTokens: forceManual ? 0 : rs.counters.compactionFloor,
|
|
588
579
|
force: forceManual,
|
|
589
580
|
onInputTruncated: emitInputTruncated(rs.telemetry.tracer, rs.telemetry.taskId),
|
|
@@ -596,7 +587,8 @@ export function createTurnBoundary(input) {
|
|
|
596
587
|
...seamCCompactionOptions(runner, prepared),
|
|
597
588
|
...compactionRestateOptions(prepared),
|
|
598
589
|
...windowSafetyOptions(event.model),
|
|
599
|
-
...compactionHookOptions(runner,
|
|
590
|
+
...compactionHookOptions(runner, prepared, passTrigger, compactionPassSignal),
|
|
591
|
+
onStarted: passReport.onStarted,
|
|
600
592
|
});
|
|
601
593
|
if (comp.blocked) {
|
|
602
594
|
emitTrace(rs.telemetry.tracer, () => ({
|
|
@@ -678,10 +670,9 @@ export function createTurnBoundary(input) {
|
|
|
678
670
|
}
|
|
679
671
|
}
|
|
680
672
|
catch (err) {
|
|
681
|
-
|
|
682
|
-
if (manualCancelAbort) {
|
|
673
|
+
if (isCompactionManualCancel(err)) {
|
|
683
674
|
emitTrace(rs.telemetry.tracer, () => ({ kind: "compaction.mooted", version: 1, taskId: rs.telemetry.taskId, reason: "cancelled", ts: Date.now() }));
|
|
684
|
-
queue.push({ type: "compaction_outcome", outcome: "mooted", trigger: passTrigger, reason: "cancelled", ...ident() });
|
|
675
|
+
queue.push({ type: "compaction_outcome", outcome: "mooted", trigger: passTrigger, reason: "cancelled", ...passReport.end, ...ident() });
|
|
685
676
|
manualOutcome = "mooted";
|
|
686
677
|
}
|
|
687
678
|
else if (!prepared.abortController.signal.aborted) {
|
|
@@ -697,11 +688,15 @@ export function createTurnBoundary(input) {
|
|
|
697
688
|
reason: failReason,
|
|
698
689
|
ts: Date.now(),
|
|
699
690
|
}));
|
|
700
|
-
queue.push({ type: "compaction_outcome", outcome: "failed", trigger: passTrigger, reason: failReason, ...ident() });
|
|
691
|
+
queue.push({ type: "compaction_outcome", outcome: "failed", trigger: passTrigger, reason: failReason, ...passReport.end, ...ident() });
|
|
701
692
|
manualOutcome = "failed";
|
|
702
693
|
}
|
|
703
694
|
else {
|
|
704
695
|
manualOutcome = "mooted";
|
|
696
|
+
if (passReport.pass !== undefined) {
|
|
697
|
+
emitTrace(rs.telemetry.tracer, () => ({ kind: "compaction.mooted", version: 1, taskId: rs.telemetry.taskId, reason: "task_ending", ts: Date.now() }));
|
|
698
|
+
queue.push({ type: "compaction_outcome", outcome: "mooted", trigger: passTrigger, reason: "task_ending", ...passReport.end, ...ident() });
|
|
699
|
+
}
|
|
705
700
|
}
|
|
706
701
|
}
|
|
707
702
|
if (forceManual)
|
|
@@ -88,13 +88,13 @@ export declare class Runner implements RunnerSelfSeat {
|
|
|
88
88
|
* followed) against the seat and catalog in force, so a `swapDeps` reaches legs already running. */
|
|
89
89
|
contextOverlayOf(ref: ModelRef | undefined): ContextWindowOverlay | undefined;
|
|
90
90
|
/** The deployment-level gating baseline, exposed READ-ONLY so thin
|
|
91
|
-
* assemblers over the Runner (`runSpec`) can COMPOSE with it. The task-level engine semantic is a
|
|
92
|
-
* WHOLE-SLOT override (`spec.toolPolicy ?? deps.toolPolicy
|
|
93
|
-
*
|
|
94
|
-
*
|
|
91
|
+
* assemblers over the Runner (`runSpec`) can COMPOSE with it. The task-level engine semantic for the policy is a
|
|
92
|
+
* WHOLE-SLOT override (`spec.toolPolicy ?? deps.toolPolicy` — prepare-task), so any assembler that sets
|
|
93
|
+
* `spec.toolPolicy` without folding this in silently shadows the deployment baseline. (The mods bus needs no
|
|
94
|
+
* baseline: its two seats run side by side, so an assembler's task registrations never shadow `deps.mods`.)
|
|
95
|
+
* Getter only — nothing here is writable from outside. */
|
|
95
96
|
get gateBaseline(): {
|
|
96
97
|
toolPolicy?: RunnerDeps["toolPolicy"];
|
|
97
|
-
hooks?: RunnerDeps["hooks"];
|
|
98
98
|
};
|
|
99
99
|
/** Acquire the lock for a sessionId; returns a release fn. The one lock every leg holds on its session, from the moment it
|
|
100
100
|
* knows the id to the leg's end (through `holdSessionLock` in `runTaskStream`, one per leg). */
|
|
@@ -122,8 +122,7 @@ export declare class Runner implements RunnerSelfSeat {
|
|
|
122
122
|
* engine default); a key absent is kept. `tiers` omitted beside `models` ⇒ the current bindings are
|
|
123
123
|
* re-applied over the new catalog.
|
|
124
124
|
* - **Announced per seat.** `config.models_swapped` (models/tiers counts — key material only, never the
|
|
125
|
-
* catalog itself
|
|
126
|
-
* whose URL moved while the Model-visible credential fingerprint did not) and
|
|
125
|
+
* catalog itself) and
|
|
127
126
|
* `config.read_face_swapped` / `config.write_face_swapped` (`{ from, to, occurrenceId }`, the seat's
|
|
128
127
|
* previous and new value, `null` = no declaration) — the table {@link SWAP_SEAT_NOTICE} binds every
|
|
129
128
|
* seat to its line.
|
|
@@ -7,7 +7,6 @@ import { createRapidRefillState } from "../auto-compaction.js";
|
|
|
7
7
|
import { boundInputHashOf } from "../canonical-json.js";
|
|
8
8
|
import { emitTrace } from "../trace.js";
|
|
9
9
|
import { emitTaskOutcome } from "../task-outcome.js";
|
|
10
|
-
import { authCarrierFingerprint, displayUrlOf, routeKeyOf } from "../../brain/route-adjudicator.js";
|
|
11
10
|
import { runWithReasoningWireFacts } from "../../brain/status-sink.js";
|
|
12
11
|
import { expandTiers } from "../roles.js";
|
|
13
12
|
import { announceReadDenySwap, screenSwappableDeps } from "../swappable-deps.js";
|
|
@@ -142,48 +141,12 @@ export class Runner {
|
|
|
142
141
|
}
|
|
143
142
|
get gateBaseline() {
|
|
144
143
|
const deps = this.deps;
|
|
145
|
-
const h = deps.hooks;
|
|
146
|
-
const hooks = h
|
|
147
|
-
? {
|
|
148
|
-
...(typeof h.preToolUse === "function" ? { preToolUse: (t, i, c) => h.preToolUse(t, i, c) } : {}),
|
|
149
|
-
...(typeof h.preToolUse === "function" && h.preToolUseObservational === true ? { preToolUseObservational: true } : {}),
|
|
150
|
-
...(typeof h.postToolUse === "function" ? { postToolUse: (t, i, o, c) => h.postToolUse(t, i, o, c) } : {}),
|
|
151
|
-
...(typeof h.userPromptSubmit === "function" ? { userPromptSubmit: (p, c) => h.userPromptSubmit(p, c) } : {}),
|
|
152
|
-
...(typeof h.stop === "function" ? { stop: (c) => h.stop(c) } : {}),
|
|
153
|
-
...(typeof h.postToolUseFailure === "function"
|
|
154
|
-
? { postToolUseFailure: (t, i, f, c) => h.postToolUseFailure(t, i, f, c) }
|
|
155
|
-
: {}),
|
|
156
|
-
...(typeof h.postToolBatch === "function" ? { postToolBatch: (b, m, c) => h.postToolBatch(b, m, c) } : {}),
|
|
157
|
-
...(typeof h.preCompact === "function" ? { preCompact: (c) => h.preCompact(c) } : {}),
|
|
158
|
-
...(typeof h.postCompact === "function" ? { postCompact: (c) => h.postCompact(c) } : {}),
|
|
159
|
-
...(typeof h.stopFailure === "function" ? { stopFailure: (c) => h.stopFailure(c) } : {}),
|
|
160
|
-
...(typeof h.permissionDenied === "function" ? { permissionDenied: (p) => h.permissionDenied(p) } : {}),
|
|
161
|
-
...(h.timeoutMs !== undefined ? { timeoutMs: h.timeoutMs } : {}),
|
|
162
|
-
}
|
|
163
|
-
: undefined;
|
|
164
|
-
const MIRRORED_HOOK_KEYS = [
|
|
165
|
-
"preToolUse",
|
|
166
|
-
"preToolUseObservational",
|
|
167
|
-
"postToolUse",
|
|
168
|
-
"userPromptSubmit",
|
|
169
|
-
"stop",
|
|
170
|
-
"postToolUseFailure",
|
|
171
|
-
"postToolBatch",
|
|
172
|
-
"preCompact",
|
|
173
|
-
"postCompact",
|
|
174
|
-
"stopFailure",
|
|
175
|
-
"permissionDenied",
|
|
176
|
-
"timeoutMs",
|
|
177
|
-
];
|
|
178
|
-
const _mirrorIsComplete = true;
|
|
179
|
-
void _mirrorIsComplete;
|
|
180
144
|
return {
|
|
181
145
|
...(deps.toolPolicy !== undefined
|
|
182
146
|
? {
|
|
183
147
|
toolPolicy: wrapToolPolicy(deps.toolPolicy, (req, signal) => deps.toolPolicy.check(req, signal)),
|
|
184
148
|
}
|
|
185
149
|
: {}),
|
|
186
|
-
...(hooks !== undefined ? { hooks } : {}),
|
|
187
150
|
};
|
|
188
151
|
}
|
|
189
152
|
async acquireSessionLock(sessionId) {
|
|
@@ -210,19 +173,10 @@ export class Runner {
|
|
|
210
173
|
const catalogSwap = seats.includes("models");
|
|
211
174
|
let expanded;
|
|
212
175
|
let tiers;
|
|
213
|
-
const movedEntries = [];
|
|
214
176
|
if (catalogSwap) {
|
|
215
177
|
const models = candidate.models;
|
|
216
178
|
tiers = Object.hasOwn(candidate, "tiers") ? candidate.tiers : this.deps.tiers;
|
|
217
179
|
expanded = tiers && Object.keys(tiers).length > 0 ? expandTiers({ ...models }, tiers) : { ...models };
|
|
218
|
-
for (const [name, nextModel] of Object.entries(expanded ?? {})) {
|
|
219
|
-
const prior = this.deps.models?.[name];
|
|
220
|
-
if (!prior)
|
|
221
|
-
continue;
|
|
222
|
-
if (routeKeyOf(prior.baseUrl) !== routeKeyOf(nextModel.baseUrl) && authCarrierFingerprint(prior.headers) === authCarrierFingerprint(nextModel.headers)) {
|
|
223
|
-
movedEntries.push({ modelId: name, from: displayUrlOf(prior.baseUrl), to: displayUrlOf(nextModel.baseUrl) });
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
180
|
}
|
|
227
181
|
const faceSeats = ["readFace", "writeFace"].filter((seat) => seats.includes(seat));
|
|
228
182
|
const priorFaces = {
|
|
@@ -254,18 +208,6 @@ export class Runner {
|
|
|
254
208
|
message: `model catalog swapped: ${modelCount} model(s), ${tiers ? Object.keys(tiers).length : 0} tier binding(s); in-flight tasks finish on their resolved models, new tasks resolve against the new catalog`,
|
|
255
209
|
detail: { models: modelCount, tiers: tiers ? Object.keys(tiers).length : 0, occurrenceId: uuidv7() },
|
|
256
210
|
});
|
|
257
|
-
if (movedEntries.length > 0) {
|
|
258
|
-
const RENDER_CAP = 8;
|
|
259
|
-
const rendered = movedEntries.slice(0, RENDER_CAP);
|
|
260
|
-
deliverEngineNotice(this.deps.onNotice, {
|
|
261
|
-
code: "route.base_url_changed_key_unchanged",
|
|
262
|
-
message: `model catalog swap moved ${movedEntries.length} entry/entries to a new baseUrl while the Model-visible credential half stayed unchanged: ` +
|
|
263
|
-
rendered.map((e) => `"${e.modelId}" ${e.from || "(config root)"} → ${e.to || "(config root)"}`).join("; ") +
|
|
264
|
-
(movedEntries.length > rendered.length ? `; +${movedEntries.length - rendered.length} more` : "") +
|
|
265
|
-
" — if the provider changed (not just its domain), update the credential reference in the same step",
|
|
266
|
-
detail: { entries: rendered, total: movedEntries.length, occurrenceId: uuidv7() },
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
211
|
}
|
|
270
212
|
if (seats.includes("contextSettings")) {
|
|
271
213
|
const to = candidate.contextSettings;
|
|
@@ -461,27 +403,27 @@ export class Runner {
|
|
|
461
403
|
const { effectiveTimeoutMs, walltimeMonotonicDeadline, timeout, pushContent, ownCommittedTailRef, emitCommitted } = runClockAndContent({ spec, prepared, queue, internals, rs, ident, parentToolCallId, startedToolCallIds });
|
|
462
404
|
const toolProgress = createToolProgressLane(pushContent, ident, prepared.toolOccurrences);
|
|
463
405
|
prepared.toolProgressRef.current = toolProgress;
|
|
464
|
-
const { withBrainSinks,
|
|
406
|
+
const { withBrainSinks, withLegRequestSinks } = runBrainSinks({ queue, internals, rs, ident, observeReasoningWireFacts, notice: { onNotice: this.deps.onNotice, sessionId: prepared.sessionId, runId: prepared.runId } });
|
|
465
407
|
const toolLabels = new Map(prepared.tools.flatMap((t) => (t.label !== undefined && t.label !== t.name ? [[t.name, t.label]] : [])));
|
|
466
408
|
for (const orphan of prepared.wakeRecovered) {
|
|
467
409
|
emitSettled(prepared.toolOccurrences, { toolCallId: orphan.toolCallId, spelledName: orphan.toolName, ...(toolLabels.has(orphan.toolName) ? { label: toolLabels.get(orphan.toolName) } : {}), args: orphan.args }, reconciledEnd(orphan), { push: (f) => queue.push({ ...f, ...ident() }), structured: prepared.structuredProjector, mediaByteCapBytes: this.deps.mediaByteCapBytes });
|
|
468
410
|
emitCommitted(orphan.entryId, "toolResult", orphan.toolCallId);
|
|
469
411
|
}
|
|
470
|
-
const
|
|
471
|
-
const batchArgs =
|
|
412
|
+
const postToolBatchArmed = prepared.modBus.hasHandlers("classic.PostToolBatch");
|
|
413
|
+
const batchArgs = postToolBatchArmed ? new Map() : undefined;
|
|
472
414
|
rs.turn.toolBatch = [];
|
|
473
415
|
const { onMessageUpdate, onMessageEnd, onToolStart, onToolEnd, onTurnEnd, announceWorkspaceMove } = createHarnessHandlers({
|
|
474
416
|
prepared, stats, rs,
|
|
475
417
|
deps: {
|
|
476
418
|
spec, queue, internals, ident, mediaByteCapBytes: this.deps.mediaByteCapBytes,
|
|
477
419
|
pushContent, emitCommitted, startedToolCallIds, toolStartAt, toolProgress, writeFamilyOf,
|
|
478
|
-
toolLabels,
|
|
420
|
+
toolLabels, postToolBatchArmed, batchArgs, internalsNotifier,
|
|
479
421
|
runnerHooks: { onError: (e, info) => this.deps.onError?.(e, info), onNotice: this.deps.onNotice },
|
|
480
422
|
},
|
|
481
423
|
});
|
|
482
|
-
const { compactionBrain, withinTaskCompaction, compactionBreaker, windowSafetyOptions } = runCompactionMachinery({ spec, prepared, rs, stats, noteUnevaluablePriceTable, runner: this.depsSeat });
|
|
424
|
+
const { compactionBrain, withinTaskCompaction, compactionBreaker, windowSafetyOptions } = runCompactionMachinery({ spec, prepared, rs, stats, noteUnevaluablePriceTable, modelCatalog, runner: this.depsSeat });
|
|
483
425
|
runStopAndFinalVerify({ spec, prepared, queue, rs, stats, ident, walltimeMonotonicDeadline, runner: this.depsSeat });
|
|
484
|
-
runRecoveryLanes({ spec, prepared, queue, rs, ident, compactionBrain, compactionBreaker, windowSafetyOptions, runner: this.depsSeat });
|
|
426
|
+
runRecoveryLanes({ spec, prepared, queue, rs, ident, compactionBrain, compactionBreaker, windowSafetyOptions, callerStop: loopLatch.callerStop, runner: this.depsSeat });
|
|
485
427
|
const rapidRefill = createRapidRefillState();
|
|
486
428
|
const drainManualCompact = (outcome) => {
|
|
487
429
|
manualCompactRef.requested = false;
|
|
@@ -493,20 +435,20 @@ export class Runner {
|
|
|
493
435
|
deps: {
|
|
494
436
|
spec, queue, loopLatch, manualCompactRef, todoToolMounted, taskToolsMounted,
|
|
495
437
|
walltimeMonotonicDeadline,
|
|
496
|
-
timeout, ident,
|
|
438
|
+
timeout, ident, postToolBatchArmed, batchArgs, compactionBrain, withinTaskCompaction,
|
|
497
439
|
compactionBreaker, windowSafetyOptions, rapidRefill, drainManualCompact,
|
|
498
440
|
runnerHooks: { onError: this.deps.onError },
|
|
499
441
|
runner: this.depsSeat,
|
|
500
442
|
},
|
|
501
443
|
});
|
|
502
444
|
const { flushGitMirror, unsubGitRetry, unsubBoundary, unsub } = runGitLane({ prepared, queue, rs, ident, onMessageUpdate, onMessageEnd, onToolStart, onToolEnd, onTurnEnd, onTurnBoundary, runner: this.depsSeat });
|
|
503
|
-
return
|
|
445
|
+
return withLegRequestSinks(() => runLeg({
|
|
504
446
|
spec, queue, prepared, resume, rs, entryActor, effectiveTimeoutMs, timeout, pushContent, ident, emitCommitted, writeFamilyOf, startedToolCallIds,
|
|
505
447
|
announceWorkspaceMove, withBrainSinks, flushGitMirror, loopLatch, notificationLane, unsubscribeTaskNotifications, unsubGitRetry, unsubBoundary, unsub,
|
|
506
448
|
runner: this.depsSeat,
|
|
507
449
|
next: ({ final, threw, abortedLive, userInterruptedLive, strandedHumanAnswers }) => runTerminalAdoption({
|
|
508
450
|
spec, queue, prepared, rs, stats, ident, emitCommitted, startedToolCallIds, toolLabels, timeout, compactionBrain, compactionBreaker, windowSafetyOptions,
|
|
509
|
-
undrainedUserAtEnd, userInputLostAtEnd, final, threw, abortedLive, userInterruptedLive, runner: this.depsSeat, sessions: this.sessions,
|
|
451
|
+
undrainedUserAtEnd, userInputLostAtEnd, final, threw, abortedLive, userInterruptedLive, callerStop: loopLatch.callerStop, runner: this.depsSeat, sessions: this.sessions,
|
|
510
452
|
next: ({ threw, comp, answerSettled, owedUserInput }) => runSettleAndTeardown({
|
|
511
453
|
spec, queue, prepared, resume, internals, rs, stats, ident, loopLatch, timeout, ownCommittedTailRef,
|
|
512
454
|
emitDelegationLifecycle, taskIdRef, manualCompactRef, drainManualCompact, final, threw, abortedLive, userInterruptedLive, answerSettled, strandedHumanAnswers, reasoningResolution, comp, compactionBreaker, owedUserInput,
|
|
@@ -539,7 +481,7 @@ export class Runner {
|
|
|
539
481
|
outcome,
|
|
540
482
|
taskConfig,
|
|
541
483
|
internals,
|
|
542
|
-
runner: this.depsSeat,
|
|
484
|
+
runner: this.depsSeat, sessions: this.sessions,
|
|
543
485
|
parentConstraintRegistry: this.parentConstraintRegistry,
|
|
544
486
|
next: (admitted) => this.resumeLadder(token, outcome, admitted),
|
|
545
487
|
});
|
|
@@ -548,7 +490,7 @@ export class Runner {
|
|
|
548
490
|
const { config, internals, store, cp, outcomeGate, resumeSignal, wakeMessage } = admitted;
|
|
549
491
|
const { plainReviewOutcome, plainParkOutcome } = resumeReviewOutcome({ cp, outcome, outcomeGate, wakeMessage });
|
|
550
492
|
const { plainPolicyOutcome: capturedPolicyOutcome, redeemedAnswer } = resumePolicyOutcome({ cp, outcome, config, runner: this.depsSeat });
|
|
551
|
-
const { resumeInternals } = resumeCheckpointScreen({ cp, resumeSignal, internals, runner: this.depsSeat });
|
|
493
|
+
const { resumeInternals } = resumeCheckpointScreen({ cp, resumeSignal, internals, tools: config.tools, runner: this.depsSeat });
|
|
552
494
|
const { recheckGovernanceWindow, windowEntrance } = resumeInternalsAndConfig({ cp, config, internals, outcomeGate, runner: this.depsSeat });
|
|
553
495
|
if (windowEntrance !== undefined)
|
|
554
496
|
await windowEntrance;
|
|
@@ -556,19 +498,19 @@ export class Runner {
|
|
|
556
498
|
cp, config, internals, outcomeGate, wakeMessage, resumeSignal, recheckGovernanceWindow,
|
|
557
499
|
plainPolicyOutcome: capturedPolicyOutcome, plainReviewOutcome, plainParkOutcome,
|
|
558
500
|
runner: this.depsSeat, effectiveDelegationFacts,
|
|
559
|
-
next: ({ wakeHookContext, plainPolicyOutcome, outcomeForStore }) => resumePreflight({
|
|
501
|
+
next: ({ wakeHookContext, legMods, plainPolicyOutcome, outcomeForStore }) => resumePreflight({
|
|
560
502
|
token, cp, resumeSignal, recheckGovernanceWindow, store, runner: this.depsSeat,
|
|
561
503
|
locallyClaimedTokens: this.locallyClaimedTokens, parentConstraintRegistry: this.parentConstraintRegistry, suspendedEnvReaps: this.suspendedEnvReaps,
|
|
562
504
|
next: () => resumeClaim({
|
|
563
505
|
token, cp, store, outcomeForStore,
|
|
564
506
|
locallyClaimedTokens: this.locallyClaimedTokens, parentConstraintRegistry: this.parentConstraintRegistry,
|
|
565
|
-
next: () => this.resumeHandoff({ token, cp, store, config, internals, resumeInternals, plainPolicyOutcome, redeemedAnswer, outcomeForStore, wakeMessage, wakeHookContext, resumeSignal }),
|
|
507
|
+
next: () => this.resumeHandoff({ token, cp, store, config, internals, resumeInternals, plainPolicyOutcome, redeemedAnswer, outcomeForStore, wakeMessage, wakeHookContext, legMods, resumeSignal }),
|
|
566
508
|
}),
|
|
567
509
|
}),
|
|
568
510
|
});
|
|
569
511
|
}
|
|
570
512
|
async resumeHandoff(claimed) {
|
|
571
|
-
const { token, cp, store, config, internals, resumeInternals, plainPolicyOutcome, redeemedAnswer, outcomeForStore, wakeMessage, wakeHookContext, resumeSignal } = claimed;
|
|
513
|
+
const { token, cp, store, config, internals, resumeInternals, plainPolicyOutcome, redeemedAnswer, outcomeForStore, wakeMessage, wakeHookContext, legMods, resumeSignal } = claimed;
|
|
572
514
|
let consumeFlipDone = false;
|
|
573
515
|
if (internals?.afterCheckpointResolve !== undefined) {
|
|
574
516
|
await internals.afterCheckpointResolve();
|
|
@@ -616,7 +558,7 @@ export class Runner {
|
|
|
616
558
|
? new CheckpointError("checkpoint.reopen_failed", "the resume was aborted before the approved action could run AND the store refused to reopen the checkpoint — the approval is terminally consumed and the suspended work was not executed; a retry needs a fresh approval")
|
|
617
559
|
: new CheckpointError("checkpoint.reopen_failed", "the resume was aborted before the approved action could run and the reopen attempt FAILED IN FLIGHT — the checkpoint's state is unprovable from here: it may already be pending again. Re-read it before deciding; do NOT issue a fresh approval on the assumption the old one is dead (the approved action did NOT run either way)");
|
|
618
560
|
}
|
|
619
|
-
return this.runTaskStream(spec, { cp, outcome: outcomeForStore, onEnvRestoreFailed, recordExecutionOutcome, ...(wakeMessage !== undefined ? { wakeMessage } : {}), ...(wakeHookContext !== undefined ? { wakeMessageHookContext: wakeHookContext } : {}) }, resumeInternals);
|
|
561
|
+
return this.runTaskStream(spec, { cp, outcome: outcomeForStore, onEnvRestoreFailed, recordExecutionOutcome, ...(wakeMessage !== undefined ? { wakeMessage } : {}), ...(wakeHookContext !== undefined ? { wakeMessageHookContext: wakeHookContext } : {}), ...(legMods !== undefined ? { legMods } : {}) }, resumeInternals);
|
|
620
562
|
}
|
|
621
563
|
}
|
|
622
564
|
export function runTask(spec, deps) {
|