@sema-agent/core 7.54.1 → 7.56.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 +950 -0
- package/dist/agents/agent-transcript-tool.js +2 -1
- package/dist/agents/builtin-agents.d.ts +12 -14
- package/dist/agents/cascade.js +1 -1
- package/dist/agents/cc-peer-directory.d.ts +36 -0
- package/dist/agents/cc-peer-directory.js +139 -0
- package/dist/agents/cc-peer-wire.d.ts +105 -0
- package/dist/agents/cc-peer-wire.js +98 -0
- package/dist/agents/cc-uds-peer-channel.d.ts +40 -0
- package/dist/agents/cc-uds-peer-channel.js +457 -0
- package/dist/agents/child-model-seat.d.ts +0 -11
- package/dist/agents/child-model-seat.js +0 -3
- package/dist/agents/cross-session-envelope.d.ts +4 -1
- package/dist/agents/cross-session-envelope.js +8 -1
- package/dist/agents/cross-session-judge.d.ts +2 -2
- package/dist/agents/list-agents-tool.d.ts +3 -1
- package/dist/agents/list-agents-tool.js +9 -8
- package/dist/agents/observer.d.ts +4 -5
- package/dist/agents/observer.js +2 -1
- package/dist/agents/peer-admission.d.ts +6 -0
- package/dist/agents/peer-admission.js +4 -1
- package/dist/agents/peer-directory.d.ts +65 -13
- package/dist/agents/peer-directory.js +90 -25
- package/dist/agents/peer-notices.d.ts +1 -1
- package/dist/agents/peer-session-drain.d.ts +3 -1
- package/dist/agents/peer-session-drain.js +3 -2
- package/dist/agents/read-inbox-tool.js +2 -1
- package/dist/agents/repair-loop.js +2 -2
- package/dist/agents/retain-ledger.d.ts +1 -1
- package/dist/agents/roster-store.d.ts +1 -1
- package/dist/agents/send-message-tool.d.ts +10 -0
- package/dist/agents/send-message-tool.js +37 -8
- package/dist/agents/subagent.d.ts +39 -82
- package/dist/agents/subagent.js +109 -106
- package/dist/agents/tool-filter.d.ts +31 -46
- package/dist/agents/tool-filter.js +13 -33
- package/dist/agents/verify.d.ts +6 -5
- package/dist/agents/verify.js +3 -3
- package/dist/brain/anthropic.js +43 -81
- package/dist/brain/errors.d.ts +15 -0
- package/dist/brain/errors.js +10 -0
- 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 +6 -12
- package/dist/brain/model-presets.js +1 -6
- package/dist/brain/open-responses.js +27 -35
- package/dist/brain/openai.js +30 -98
- package/dist/brain/provider-dialect.d.ts +39 -3
- package/dist/brain/provider-dialect.js +28 -0
- package/dist/brain/reasoning-request.d.ts +96 -0
- package/dist/brain/reasoning-request.js +174 -0
- package/dist/brain/reasoning.d.ts +12 -12
- package/dist/brain/reasoning.js +4 -3
- package/dist/brain/request-params.d.ts +62 -9
- package/dist/brain/request-params.js +42 -7
- package/dist/brain/retry.d.ts +1 -1
- package/dist/brain/route-adjudicator.d.ts +15 -0
- package/dist/brain/route-adjudicator.js +15 -0
- package/dist/brain/status-sink.d.ts +20 -0
- package/dist/brain/status-sink.js +7 -0
- package/dist/brain/stream-engine.js +6 -5
- package/dist/brain/stream-shared.d.ts +1 -1
- package/dist/core/a2a.d.ts +2 -1
- package/dist/core/a2a.js +19 -13
- package/dist/core/advisor-verdict.d.ts +120 -0
- package/dist/core/advisor-verdict.js +92 -0
- package/dist/core/agent-definition.d.ts +17 -8
- package/dist/core/allow-entry.d.ts +69 -36
- package/dist/core/allow-entry.js +81 -52
- package/dist/core/allow-rule-shadow.d.ts +10 -3
- package/dist/core/approval-object.d.ts +2 -1
- package/dist/core/approval-object.js +6 -6
- package/dist/core/ask-origin.d.ts +127 -29
- package/dist/core/ask-origin.js +87 -25
- package/dist/core/ask-question.d.ts +51 -8
- package/dist/core/ask-question.js +12 -7
- 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 +11 -8
- package/dist/core/auto-compaction.js +4 -2
- package/dist/core/auto-mode-arming.d.ts +2 -2
- package/dist/core/auto-mode-defaults.d.ts +8 -8
- package/dist/core/auto-mode-prompt-assets.d.ts +3 -3
- package/dist/core/auto-mode-prompt.d.ts +1 -1
- package/dist/core/auto-mode.d.ts +17 -9
- package/dist/core/auto-mode.js +9 -6
- package/dist/core/background-agent-store.d.ts +3 -3
- package/dist/core/canonical-json.d.ts +1 -1
- package/dist/core/canonical-json.js +2 -2
- 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 -4
- package/dist/core/checkpoint-requirements.js +8 -14
- package/dist/core/checkpoint-store.d.ts +165 -72
- package/dist/core/checkpoint-store.js +79 -82
- package/dist/core/child-clamp-seats.d.ts +6 -0
- package/dist/core/child-clamp-seats.js +3 -16
- package/dist/core/compliance.d.ts +2 -2
- package/dist/core/context-edit.d.ts +6 -7
- package/dist/core/cross-boundary-taint.d.ts +11 -4
- package/dist/core/cross-boundary-taint.js +3 -3
- package/dist/core/decision-receipt.d.ts +37 -3
- package/dist/core/decision-receipt.js +19 -19
- package/dist/core/delegation-not-started.d.ts +6 -0
- package/dist/core/delegation-not-started.js +17 -0
- package/dist/core/effective-path-target.d.ts +1 -1
- 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 +45 -12
- package/dist/core/exec-output-tail.d.ts +1 -1
- package/dist/core/file-history-retention.d.ts +1 -1
- package/dist/core/file-history-store.d.ts +147 -21
- package/dist/core/file-history-store.js +58 -32
- package/dist/core/gate-fold.d.ts +1 -1
- package/dist/core/gate-fold.js +24 -11
- package/dist/core/gate-lanes.js +81 -68
- package/dist/core/gate-outcome.d.ts +40 -6
- package/dist/core/gate-outcome.js +56 -0
- package/dist/core/governance-codes.d.ts +17 -3
- package/dist/core/governance-codes.js +16 -0
- package/dist/core/hands-band.d.ts +1 -1
- package/dist/core/hooks.d.ts +21 -20
- 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 +84 -0
- package/dist/core/host-target.js +92 -0
- package/dist/core/image-downsample.d.ts +1 -1
- package/dist/core/lsp-diagnostics.d.ts +4 -4
- package/dist/core/lsp.d.ts +3 -3
- package/dist/core/mailbox-store.d.ts +4 -0
- package/dist/core/mcp-connection-pool.d.ts +18 -2
- package/dist/core/mcp-connection-pool.js +53 -6
- package/dist/core/mcp-failure.d.ts +23 -4
- package/dist/core/mcp-failure.js +26 -11
- package/dist/core/mcp-listing-drift.d.ts +10 -0
- package/dist/core/mcp-listing-drift.js +6 -0
- package/dist/core/mcp-server-link.d.ts +173 -0
- package/dist/core/mcp-server-link.js +127 -0
- package/dist/core/mcp-server-spec.d.ts +4 -2
- package/dist/core/mcp-session-end.d.ts +26 -0
- package/dist/core/mcp-session-end.js +29 -0
- package/dist/core/mcp-startup-request.d.ts +17 -0
- package/dist/core/mcp-startup-request.js +17 -0
- package/dist/core/mcp.d.ts +17 -13
- package/dist/core/mcp.js +240 -189
- package/dist/core/media-byte-cap.d.ts +1 -1
- package/dist/core/memory-engine/delegation-settlement.js +15 -24
- package/dist/core/memory-engine/engine.d.ts +9 -9
- 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 +65 -6
- package/dist/core/memory-engine/provenance-wording.d.ts +1 -1
- package/dist/core/memory-engine/tools.js +4 -1
- package/dist/core/mode-policy.d.ts +1 -1
- 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 +44 -24
- package/dist/core/namespaced-rule-name.js +50 -43
- package/dist/core/output-style.d.ts +1 -1
- package/dist/core/param-rule-reach.d.ts +15 -0
- package/dist/core/param-rule-reach.js +30 -0
- package/dist/core/parent-spec-seat.d.ts +13 -1
- package/dist/core/parent-spec-seat.js +6 -0
- package/dist/core/park-selfcheck.js +1 -0
- package/dist/core/pause-registry.d.ts +16 -5
- package/dist/core/pause-registry.js +6 -2
- package/dist/core/peer-channel.d.ts +70 -0
- package/dist/core/peer-channel.js +1 -0
- package/dist/core/permission-rule-consent.d.ts +30 -5
- package/dist/core/permission-rule-consent.js +147 -50
- package/dist/core/permission-rule-model.d.ts +245 -65
- package/dist/core/permission-rule-model.js +421 -107
- package/dist/core/permission-rule-org.d.ts +6 -2
- package/dist/core/permission-rule-org.js +7 -3
- package/dist/core/permission-rule-provider.d.ts +6 -2
- package/dist/core/permission-rule-provider.js +41 -11
- package/dist/core/permission-rule-store.d.ts +22 -26
- package/dist/core/permission-rule-store.js +12 -6
- package/dist/core/permission-rule-sync.d.ts +11 -2
- package/dist/core/permission-rule-sync.js +11 -3
- 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 +53 -15
- package/dist/core/permission-rules.js +125 -100
- package/dist/core/persisted-rule-arms.d.ts +6 -4
- package/dist/core/persisted-rule-arms.js +10 -12
- package/dist/core/present-plan-tool.js +3 -1
- 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 +26 -5
- package/dist/core/protocol-http-auth.js +137 -4
- package/dist/core/protocol-naming.d.ts +2 -2
- package/dist/core/read-only-shell-table.d.ts +1 -1
- package/dist/core/read-only-shell.d.ts +1 -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 +34 -3
- package/dist/core/roles.js +66 -53
- package/dist/core/rule-lane-reads.d.ts +20 -15
- package/dist/core/rule-lane-reads.js +45 -17
- package/dist/core/rule-offer-read.d.ts +53 -0
- package/dist/core/rule-offer-read.js +146 -0
- package/dist/core/rule-owner.d.ts +46 -0
- package/dist/core/rule-owner.js +29 -0
- package/dist/core/runner/advisor-instructions.d.ts +70 -0
- package/dist/core/runner/advisor-instructions.js +61 -0
- package/dist/core/runner/advisor-tool.d.ts +33 -0
- package/dist/core/runner/advisor-tool.js +112 -0
- package/dist/core/runner/announce-once-ledger.d.ts +18 -26
- package/dist/core/runner/announce-once-ledger.js +19 -46
- package/dist/core/runner/approval-feedback.js +6 -3
- package/dist/core/runner/assemble-result.d.ts +2 -1
- 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 +21 -2
- package/dist/core/runner/caller-roster.js +38 -0
- 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 +33 -13
- package/dist/core/runner/classifier-ladder.js +15 -14
- package/dist/core/runner/compaction-restate.d.ts +10 -6
- package/dist/core/runner/compaction-restate.js +9 -3
- package/dist/core/runner/construction-doors.js +3 -0
- package/dist/core/runner/contracts.d.ts +40 -33
- package/dist/core/runner/conversation-segment.d.ts +28 -0
- package/dist/core/runner/conversation-segment.js +42 -0
- package/dist/core/runner/cross-boundary-lane.d.ts +21 -16
- package/dist/core/runner/cross-boundary-lane.js +58 -34
- package/dist/core/runner/decide-continuation.d.ts +7 -4
- package/dist/core/runner/decide-continuation.js +2 -2
- package/dist/core/runner/denial-limit-arms.d.ts +4 -4
- package/dist/core/runner/denial-limit-arms.js +1 -1
- package/dist/core/runner/derived-route-fallback.d.ts +24 -24
- package/dist/core/runner/derived-route-fallback.js +9 -7
- 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 +9 -3
- package/dist/core/runner/gate-exit.js +11 -5
- package/dist/core/runner/image.d.ts +7 -17
- package/dist/core/runner/image.js +9 -60
- package/dist/core/runner/initial-run-state.js +1 -1
- package/dist/core/runner/permission-rule-lanes.d.ts +6 -6
- package/dist/core/runner/permission-rule-lanes.js +38 -15
- package/dist/core/runner/person-path-rows.d.ts +12 -9
- package/dist/core/runner/person-path-rows.js +19 -8
- package/dist/core/runner/prepare-advisor.d.ts +63 -0
- package/dist/core/runner/prepare-advisor.js +77 -0
- 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 +5 -4
- package/dist/core/runner/prepare-config-doors.d.ts +31 -38
- package/dist/core/runner/prepare-config-doors.js +57 -34
- 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-delegation-surface.d.ts +2 -2
- package/dist/core/runner/prepare-delegation-surface.js +1 -1
- package/dist/core/runner/prepare-file-history.d.ts +48 -8
- package/dist/core/runner/prepare-file-history.js +41 -73
- package/dist/core/runner/prepare-gate-stations.d.ts +2 -5
- package/dist/core/runner/prepare-gate-stations.js +12 -8
- package/dist/core/runner/prepare-hands-readface.d.ts +2 -8
- package/dist/core/runner/prepare-hands-readface.js +15 -14
- package/dist/core/runner/prepare-inherited-gate.d.ts +11 -7
- package/dist/core/runner/prepare-inherited-gate.js +8 -6
- package/dist/core/runner/prepare-memory-engine-session.js +1 -1
- package/dist/core/runner/prepare-park-ask.js +12 -12
- package/dist/core/runner/prepare-policy-chain.d.ts +7 -4
- package/dist/core/runner/prepare-policy-chain.js +68 -81
- package/dist/core/runner/prepare-project-context.d.ts +5 -2
- package/dist/core/runner/prepare-project-context.js +6 -3
- 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 +4 -6
- package/dist/core/runner/prepare-protocol-tools.d.ts +4 -2
- package/dist/core/runner/prepare-protocol-tools.js +5 -4
- package/dist/core/runner/prepare-safety-scan.d.ts +9 -12
- package/dist/core/runner/prepare-safety-scan.js +8 -23
- 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 +1 -1
- package/dist/core/runner/prepare-task.js +41 -35
- package/dist/core/runner/prepare-tool-disclosure-mount.d.ts +7 -4
- package/dist/core/runner/prepare-tool-disclosure-mount.js +24 -18
- 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 +11 -4
- 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/resume-policy-outcome.js +1 -1
- package/dist/core/runner/retired-runner-deps.js +2 -1
- package/dist/core/runner/rewind-files.d.ts +15 -0
- package/dist/core/runner/rewind-files.js +132 -0
- package/dist/core/runner/run-attachment-seats.js +2 -2
- 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-compaction-machinery.d.ts +1 -1
- package/dist/core/runner/run-compaction-machinery.js +2 -12
- package/dist/core/runner/run-git-lane.d.ts +1 -0
- package/dist/core/runner/run-harness-handlers.js +14 -7
- package/dist/core/runner/run-leg.d.ts +1 -1
- package/dist/core/runner/run-leg.js +43 -18
- package/dist/core/runner/run-settle-and-teardown.js +3 -2
- package/dist/core/runner/run-telemetry-and-budget-seats.js +1 -1
- package/dist/core/runner/run-turn-boundary.d.ts +1 -0
- package/dist/core/runner/run-turn-boundary.js +15 -22
- package/dist/core/runner/runtask.d.ts +3 -0
- package/dist/core/runner/runtask.js +8 -9
- 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.d.ts +22 -21
- package/dist/core/runner/session-rule-policy.js +17 -31
- 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/side-call-account.d.ts +32 -8
- package/dist/core/runner/side-call-account.js +23 -1
- package/dist/core/runner/skills-seat.js +6 -2
- package/dist/core/runner/stream-settle-backstop.js +1 -1
- package/dist/core/runner/strict-output-schema.d.ts +1 -1
- package/dist/core/runner/sub-agent-deny-lists.js +4 -6
- package/dist/core/runner/synthetic-tools.d.ts +16 -13
- package/dist/core/runner/synthetic-tools.js +8 -3
- package/dist/core/runner/tool-disclosure.d.ts +10 -12
- package/dist/core/runner/tool-disclosure.js +3 -4
- 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-face-overlay.d.ts +2 -1
- package/dist/core/runner/tool-face-overlay.js +17 -1
- 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/tool-progress-lane.d.ts +2 -2
- package/dist/core/runner/tool-turn-repair-seat.d.ts +3 -2
- package/dist/core/runner/turn-attachments.d.ts +91 -80
- package/dist/core/runner/turn-attachments.js +62 -37
- package/dist/core/runner-deps.d.ts +42 -42
- package/dist/core/runtime-caps.d.ts +4 -4
- 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 +26 -2
- package/dist/core/same-plain-value.d.ts +40 -0
- package/dist/core/same-plain-value.js +49 -0
- package/dist/core/scheduler.d.ts +1 -1
- package/dist/core/secret-env.d.ts +26 -3
- package/dist/core/secret-env.js +44 -8
- package/dist/core/select-model.js +3 -3
- package/dist/core/sensitive-path-policy.d.ts +1 -1
- package/dist/core/sensitive-path-policy.js +1 -1
- package/dist/core/session-policy-store.d.ts +102 -35
- package/dist/core/session-policy-store.js +210 -48
- package/dist/core/session-reconcile.d.ts +2 -2
- package/dist/core/session-store.d.ts +106 -37
- package/dist/core/session-store.js +165 -91
- package/dist/core/session.d.ts +101 -57
- package/dist/core/session.js +53 -0
- package/dist/core/shared-memory/tools.js +3 -1
- package/dist/core/shared-memory/types.d.ts +1 -1
- 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.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.d.ts +10 -0
- package/dist/core/side-query.js +15 -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/checkpoint-store-contract.d.ts +11 -1
- package/dist/core/store-contracts/checkpoint-store-contract.js +168 -3
- package/dist/core/store-contracts/file-history-store-contract.js +74 -4
- 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-policy-store-contract.d.ts +7 -0
- package/dist/core/store-contracts/session-policy-store-contract.js +130 -0
- package/dist/core/store-contracts/session-repo-contract.js +176 -0
- package/dist/core/store-contracts/session-store-contract.d.ts +6 -8
- package/dist/core/store-contracts/session-store-contract.js +361 -51
- package/dist/core/store-contracts/workflow-journal-store-contract.js +26 -1
- package/dist/core/stub-env.d.ts +2 -0
- package/dist/core/stub-env.js +1 -0
- package/dist/core/surrogate-safe-slice.d.ts +3 -3
- package/dist/core/synthetic-read-verdict.js +3 -3
- package/dist/core/task-event.d.ts +42 -8
- package/dist/core/task-notification.d.ts +19 -15
- package/dist/core/task-registry-agent.d.ts +4 -4
- package/dist/core/task-registry-shared.d.ts +4 -4
- package/dist/core/task-registry-shared.js +1 -0
- package/dist/core/task-registry.d.ts +13 -4
- package/dist/core/task-registry.js +14 -2
- package/dist/core/task-result.d.ts +21 -3
- package/dist/core/task-spec.d.ts +69 -64
- package/dist/core/task-stream.d.ts +6 -6
- package/dist/core/task-tool-shape.d.ts +4 -4
- package/dist/core/tighten-task-spec.d.ts +1 -1
- package/dist/core/tighten-task-spec.js +2 -1
- package/dist/core/tool-catalog-entries.d.ts +36 -2
- package/dist/core/tool-catalog-entries.js +69 -43
- package/dist/core/tool-check-reading.d.ts +11 -0
- package/dist/core/tool-check-reading.js +11 -6
- package/dist/core/tool-conformance.js +1 -0
- package/dist/core/tool-errors.d.ts +2 -2
- package/dist/core/tool-face-reader.js +5 -3
- package/dist/core/tool-face.d.ts +21 -2
- package/dist/core/tool-face.js +1 -1
- package/dist/core/tool-model-gate.d.ts +5 -5
- package/dist/core/tool-name-aliases.d.ts +29 -8
- package/dist/core/tool-name-aliases.js +22 -4
- package/dist/core/tool-name-readings.d.ts +10 -43
- package/dist/core/tool-name-readings.js +2 -11
- package/dist/core/tool-policy.d.ts +85 -196
- package/dist/core/tool-policy.js +150 -175
- package/dist/core/tool-registry.d.ts +14 -7
- package/dist/core/tool-registry.js +17 -7
- package/dist/core/tool-result-store.js +5 -1
- package/dist/core/tool-roster.d.ts +57 -33
- package/dist/core/tool-roster.js +56 -68
- package/dist/core/tool-spec-members.js +8 -3
- package/dist/core/tool-spec.d.ts +53 -31
- package/dist/core/tools.js +51 -10
- package/dist/core/trace.d.ts +6 -2
- package/dist/core/types.d.ts +1 -1
- package/dist/core/untrusted-egress.d.ts +1 -1
- package/dist/core/untrusted-text.d.ts +1 -1
- package/dist/core/user-attachment.d.ts +8 -1
- package/dist/core/user-attachment.js +64 -4
- package/dist/core/warm-resume.d.ts +1 -1
- package/dist/core/wiring-manifest.d.ts +58 -0
- package/dist/core/wiring-manifest.js +14 -5
- package/dist/core/workflow-journal-store.d.ts +62 -0
- package/dist/core/workflow-journal-store.js +78 -2
- package/dist/core/workflow-run-store.d.ts +6 -0
- package/dist/core/workflow-run-store.js +2 -0
- package/dist/engine/compaction/compaction.d.ts +9 -9
- package/dist/engine/compaction/compaction.js +3 -2
- package/dist/engine/execution-env/node-execution-env.d.ts +26 -8
- package/dist/engine/execution-env/node-execution-env.js +54 -24
- package/dist/engine/harness/agent-harness.d.ts +39 -9
- package/dist/engine/harness/agent-harness.js +87 -33
- package/dist/engine/harness/types.d.ts +58 -9
- package/dist/engine/harness/types.js +12 -1
- package/dist/engine/llm/types.d.ts +36 -19
- package/dist/engine/llm/validation.d.ts +4 -1
- package/dist/engine/llm/validation.js +13 -1
- package/dist/engine/loop/agent-loop.d.ts +23 -1
- package/dist/engine/loop/agent-loop.js +26 -34
- package/dist/engine/loop/types.d.ts +31 -19
- package/dist/engine/lsp/node-lsp-manager.d.ts +2 -2
- package/dist/engine/session/memory-repo.d.ts +18 -12
- package/dist/engine/session/memory-repo.js +24 -9
- package/dist/engine/session/parent-chain-guard.d.ts +3 -2
- package/dist/engine/session/parent-chain-guard.js +1 -1
- package/dist/engine/session/repo-utils.d.ts +32 -3
- package/dist/engine/session/repo-utils.js +50 -5
- package/dist/index.d.ts +47 -23
- package/dist/index.js +35 -17
- package/dist/internal/harness-types.d.ts +1 -1
- package/dist/internal/harness.d.ts +3 -3
- package/dist/internal/harness.js +2 -2
- package/dist/internal/llm.d.ts +2 -2
- package/dist/internal/llm.js +1 -1
- package/dist/orchestration/goal.js +2 -2
- package/dist/orchestration/run-workflow-tool.d.ts +8 -6
- package/dist/orchestration/run-workflow-tool.js +10 -6
- package/dist/orchestration/workflow-size-guideline.d.ts +4 -4
- package/dist/orchestration/workflow-types.d.ts +18 -0
- package/dist/orchestration/workflow-types.js +6 -0
- package/dist/orchestration/workflow.d.ts +5 -13
- package/dist/orchestration/workflow.js +57 -49
- 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 +2 -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 +39 -2
- package/dist/prompt-assembly/tool-catalog.js +117 -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/prompts/default.d.ts +14 -14
- package/dist/scenarios/full-body.d.ts +15 -15
- package/dist/scenarios/full-body.js +4 -3
- package/dist/shell/lex.js +10 -1
- package/dist/stores/file/adoption/adopt.d.ts +4 -3
- package/dist/stores/file/adoption/adopt.js +27 -33
- package/dist/stores/file/adoption/marker.d.ts +6 -13
- package/dist/stores/file/adoption/marker.js +9 -17
- package/dist/stores/file/checkpoint-store.d.ts +24 -0
- package/dist/stores/file/checkpoint-store.js +45 -7
- package/dist/stores/file/file-history-store.d.ts +20 -19
- package/dist/stores/file/file-history-store.js +157 -141
- package/dist/stores/file/fs-atomic.d.ts +15 -0
- package/dist/stores/file/fs-atomic.js +89 -14
- package/dist/stores/file/index.d.ts +1 -1
- package/dist/stores/file/index.js +2 -1
- package/dist/stores/file/mailbox-store.d.ts +3 -0
- package/dist/stores/file/mailbox-store.js +3 -1
- package/dist/stores/file/permission-rule-adopt.d.ts +1 -1
- package/dist/stores/file/permission-rule-adopt.js +18 -18
- package/dist/stores/file/permission-rule-store.d.ts +18 -2
- package/dist/stores/file/permission-rule-store.js +31 -18
- package/dist/stores/file/session-policy-store.d.ts +3 -3
- package/dist/stores/file/session-store.d.ts +54 -16
- package/dist/stores/file/session-store.js +114 -85
- package/dist/stores/file/workflow-journal-store.d.ts +10 -4
- package/dist/stores/file/workflow-journal-store.js +28 -13
- package/dist/tools/artifact/artifact-text.d.ts +1 -1
- package/dist/tools/artifact/artifact-tool.js +5 -3
- 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 +3 -3
- package/dist/tools/fs/fs-bash.d.ts +2 -2
- package/dist/tools/fs/fs-bash.js +8 -6
- 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/fs-shared.d.ts +8 -8
- package/dist/tools/fs/gh-rate-limit.d.ts +1 -1
- package/dist/tools/fs/notebook.d.ts +2 -2
- package/dist/tools/fs/pattern-kill-guard.d.ts +22 -0
- package/dist/tools/fs/pattern-kill-guard.js +397 -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/read-deny.d.ts +29 -7
- package/dist/tools/fs/read-deny.js +63 -22
- package/dist/tools/fs/removal-targets.d.ts +18 -8
- package/dist/tools/fs/removal-targets.js +47 -20
- package/dist/tools/fs/safety.d.ts +9 -9
- package/dist/tools/fs/search.d.ts +16 -6
- 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.js +12 -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-judge.d.ts +4 -0
- package/dist/tools/fs/shell-read-judge.js +5 -2
- 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/loop-tick.d.ts +2 -2
- package/dist/tools/scheduler-tools.js +5 -1
- package/dist/tools/task-list.d.ts +7 -7
- package/dist/tools/task-list.js +5 -1
- package/dist/tools/todo.js +65 -64
- package/dist/tools/web.d.ts +20 -15
- package/dist/tools/web.js +55 -69
- package/dist/tools/worktree.d.ts +3 -3
- package/dist/tools/worktree.js +3 -1
- package/package.json +1 -1
- package/test/export-surface.snapshot.json +5894 -5638
- package/wire-changes/core@7.55.0.json +3318 -0
- package/wire-changes/core@7.56.0.json +3891 -0
- package/wire-changes/mods-kernel@7.56.0.json +303 -0
- package/dist/core/store-contracts/session-store-incarnation-contract.d.ts +0 -39
- package/dist/core/store-contracts/session-store-incarnation-contract.js +0 -95
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { snapshotActorAssertion } from "../../internal/llm.js";
|
|
2
|
-
import { ASK_USER_QUESTION_TOOL_NAME } from "../ask-question.js";
|
|
3
2
|
import { CheckpointError, remainingBudgetMicroUsd } from "../checkpoint-store.js";
|
|
4
3
|
import { chainPolicyOnLeg, chainTopAnchors } from "./child-tree.js";
|
|
5
4
|
import { mintHookInvocationIdentity } from "../hooks.js";
|
|
@@ -8,14 +7,15 @@ import { checkToolPolicyProjection, policyCannotAnswer, refuseOutOfContractDecis
|
|
|
8
7
|
import { callFaceSeat, parkedCallFaceOf } from "../tool-roster.js";
|
|
9
8
|
import { readCallTarget } from "../effective-path-target.js";
|
|
10
9
|
import { inlineUntrusted } from "../untrusted-text.js";
|
|
11
|
-
import {
|
|
10
|
+
import { describeSuppliedValue, mintDecideRecord } from "./decide-continuation.js";
|
|
11
|
+
import { editRewrittenSentence, readRejudge } from "../rewrite-rejudge.js";
|
|
12
12
|
import { orgVerdictBeforeClaim } from "./permission-rule-lanes.js";
|
|
13
13
|
import { chainCannotJudge } from "./call-hook-stations.js";
|
|
14
14
|
import { thrownText } from "../thrown-value.js";
|
|
15
|
-
import { wireOf } from "../tool-name-readings.js";
|
|
16
15
|
import { judgeApprovalObject } from "../approval-object.js";
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
16
|
+
import { SKILL_TOOL_NAME, normalizeSkills, skillsThatLoad } from "./synthetic-tools.js";
|
|
17
|
+
import { readSkillsSeat } from "./skills-seat.js";
|
|
18
|
+
import { frozenSkillScopesOf } from "../mods/spec-seats.js";
|
|
19
19
|
export async function resumeApply(input) {
|
|
20
20
|
const { cp, config, internals, outcomeGate, wakeMessage, resumeSignal, recheckGovernanceWindow, plainReviewOutcome, plainParkOutcome, runner, effectiveDelegationFacts } = input;
|
|
21
21
|
let plainPolicyOutcome = input.plainPolicyOutcome;
|
|
@@ -23,7 +23,7 @@ export async function resumeApply(input) {
|
|
|
23
23
|
let legMods;
|
|
24
24
|
if (outcomeGate === "wake" && wakeMessage !== undefined) {
|
|
25
25
|
if (resumeSignal?.aborted !== true) {
|
|
26
|
-
legMods = await admitLegMods({ spec: config, deps: runner.deps, sessionId: cp.sessionId });
|
|
26
|
+
legMods = await admitLegMods({ spec: config, deps: runner.deps, sessionId: cp.sessionId, skills: skillsThatLoad(readSkillsSeat(config.skills)), reopenedSkills: frozenSkillScopesOf(cp.state) });
|
|
27
27
|
}
|
|
28
28
|
if (legMods !== undefined && legMods.bus.hasHandlers("classic.UserPromptSubmit")) {
|
|
29
29
|
const screenedMessage = wakeMessage;
|
|
@@ -75,7 +75,7 @@ export async function resumeApply(input) {
|
|
|
75
75
|
});
|
|
76
76
|
};
|
|
77
77
|
if (plainPolicyOutcome?.decision === "allow" && cp.pendingAction.kind === "tool_approval") {
|
|
78
|
-
const servedSkills = normalizeSkills(config.skills)
|
|
78
|
+
const servedSkills = skillsThatLoad(normalizeSkills(config.skills));
|
|
79
79
|
const claimed = judgeApprovalObject(cp.pendingAction, { args: plainPolicyOutcome.updatedInput ?? cp.pendingAction.args, skills: servedSkills, skillToolName: SKILL_TOOL_NAME }, "claim");
|
|
80
80
|
if (claimed !== "match")
|
|
81
81
|
throw new CheckpointError("checkpoint.invalid_outcome", claimed.message, { field: "boundGrantDigest" });
|
|
@@ -83,8 +83,7 @@ export async function resumeApply(input) {
|
|
|
83
83
|
if (plainPolicyOutcome !== undefined &&
|
|
84
84
|
plainPolicyOutcome.decision === "allow" &&
|
|
85
85
|
plainPolicyOutcome.updatedInput !== undefined &&
|
|
86
|
-
cp.pendingAction.kind === "tool_approval"
|
|
87
|
-
wireOf("resume.editRecheckQuestionSkip", cp.pendingAction) !== ASK_USER_QUESTION_TOOL_NAME) {
|
|
86
|
+
cp.pendingAction.kind === "tool_approval") {
|
|
88
87
|
const editedArgs = plainPolicyOutcome.updatedInput;
|
|
89
88
|
const editBudget = {
|
|
90
89
|
resourceRemainingMicroUsd: remainingBudgetMicroUsd(cp.resourceLedger),
|
|
@@ -148,9 +147,9 @@ export async function resumeApply(input) {
|
|
|
148
147
|
}
|
|
149
148
|
if (policyCannotAnswer(rechecked, plainPolicyOutcome.hostDecision.decidedBy))
|
|
150
149
|
throw new CheckpointError("checkpoint.invalid_outcome", `the approver EDITED this call's input, the edited args raise a question that requires real approval, and the decision is the deployment's policy — a policy's answer is not a person's (decide the edit as "person", or approve the shown input); refusing pre-CAS, the checkpoint stays pending`, { field: "hostDecision" });
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
150
|
+
const reread = readRejudge(editedReq, editedArgs, rechecked);
|
|
151
|
+
if (reread.kind === "rewritten") {
|
|
152
|
+
throw new CheckpointError("resume.constraint_rejected", `${editRewrittenSentence(cp.pendingAction.toolName)} (detail.editRewritten) — refused pre-CAS, the checkpoint stays pending and decidable`, { editRewritten: { acceptableForm: reread.form } });
|
|
154
153
|
}
|
|
155
154
|
}
|
|
156
155
|
}
|
|
@@ -5,6 +5,7 @@ import { CHECKPOINT_FEATURES, CheckpointError, checkpointVersionOf, MAX_SUPPORTE
|
|
|
5
5
|
import { judgeCheckpointRequirements } from "../checkpoint-requirements.js";
|
|
6
6
|
import { constraintChainDigest, constraintChainEntryOfSuppliedLayer } from "../tool-policy.js";
|
|
7
7
|
import { readFrozenSkillGrants } from "../skill-grant.js";
|
|
8
|
+
import { readFrozenSkillScopes } from "../mods/spec-seats.js";
|
|
8
9
|
import { chainInstallationGaps, chainInstallationRefusal } from "./child-tree.js";
|
|
9
10
|
import { screeningInstallationsOf, unraisableGuardsOf } from "../mods/stations.js";
|
|
10
11
|
import { refusePersistedToolNames, refuseRenamedDelegationMounts } from "./sub-agent-deny-lists.js";
|
|
@@ -61,6 +62,8 @@ export function resumeCheckpointScreen(input) {
|
|
|
61
62
|
}
|
|
62
63
|
if (readFrozenSkillGrants(cp.state.skillGrants) === undefined)
|
|
63
64
|
throw new CheckpointError("checkpoint.invalid_outcome", "this checkpoint carries a skill-grant section (state.skillGrants) that does not read as grant rows under this engine — a damaged section, or a row an earlier release wrote whose entry this release reads as nothing (an entry with a surrounding space, say) — refusing to resume without the grant rows and refusals it carries; the checkpoint stays pending: finish it on a worker of the release that parked it, or expire it", { reason: "skill_grants_damaged" });
|
|
65
|
+
if (readFrozenSkillScopes(cp.state.skillScopes) === undefined)
|
|
66
|
+
throw new CheckpointError("checkpoint.invalid_outcome", "this checkpoint carries a skill-scope section (state.skillScopes) that does not read as a list of SkillSpec names — a damaged section — refusing to resume without the active skills' hooks it records; the checkpoint stays pending: finish it on a worker of the release that parked it, or expire it", { reason: "skill_scopes_damaged" });
|
|
64
67
|
for (const field of ["handsRoot", "handsHome", "handsCwd"]) {
|
|
65
68
|
const coordinate = cp.state[field];
|
|
66
69
|
if (coordinate !== undefined && validatePath(coordinate, { intent: "validate-coordinate" }) === undefined)
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* The resume ladder's CLAIM rung (E10), verbatim from `Runner.resumeStream`: the atomic
|
|
3
3
|
* CAS (`claimTerminal` when the store provides it — one round trip carrying the loser's truth — else the
|
|
4
4
|
* two-step `resolve` + diagnostic read), the same-Runner claim mark around it, and the loss classification
|
|
5
|
-
* (`reopened_concurrently` for a live row whose rev moved, `
|
|
6
|
-
* dead parked-constraint entry evicted). Winning is the SOLE trigger to execute
|
|
5
|
+
* (`reopened_concurrently` for a live row whose rev moved, `resume.holder_superseded` for the validated row a carried claim holder
|
|
6
|
+
* lost, `already_resolved` for a consumed one, with the dead parked-constraint entry evicted). Winning is the SOLE trigger to execute.
|
|
7
7
|
*
|
|
8
8
|
* Async (the CAS). It ends by handing off to the driver's post-claim rung (`next`) in its LAST continuation
|
|
9
9
|
* — the post-consume hook fires on the tick the win was read — and returns what that rung returns.
|
|
@@ -19,6 +19,8 @@ export interface ResumeClaimInput<R> {
|
|
|
19
19
|
store: CheckpointStore;
|
|
20
20
|
/** borrowed-readonly — the twin the store persists as the resolved outcome. */
|
|
21
21
|
outcomeForStore: ResumeRun["outcome"];
|
|
22
|
+
/** borrowed-readonly — the deployment's claim holder the resume acts under (`RunInternals.holder`), carried into the CAS. */
|
|
23
|
+
holder?: string | undefined;
|
|
22
24
|
/** borrowed-mutable — the Runner's same-Runner claim marks: opened with the resolve attempt, released on a loss. */
|
|
23
25
|
locallyClaimedTokens: Set<CheckpointToken>;
|
|
24
26
|
/** borrowed-mutable — the Runner's parked-constraint registry: a terminally consumed token's entry is evicted. */
|
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
import { CheckpointError } from "../checkpoint-store.js";
|
|
2
|
+
import { checkpointRevOf } from "../checkpoint-generation.js";
|
|
2
3
|
export async function resumeClaim(input) {
|
|
3
|
-
const { token, cp, store, outcomeForStore, locallyClaimedTokens, parentConstraintRegistry } = input;
|
|
4
|
+
const { token, cp, store, outcomeForStore, holder, locallyClaimedTokens, parentConstraintRegistry } = input;
|
|
5
|
+
const expect = { rev: checkpointRevOf(cp), ...(holder !== undefined ? { holder } : {}) };
|
|
4
6
|
locallyClaimedTokens.add(token);
|
|
5
|
-
let won;
|
|
6
|
-
let claimLossStatus;
|
|
7
|
+
let won, loss;
|
|
7
8
|
if (store.claimTerminal !== undefined) {
|
|
8
|
-
const claim = await store.claimTerminal(token, cp.scope, { kind: "resolve", outcome: outcomeForStore, expect
|
|
9
|
+
const claim = await store.claimTerminal(token, cp.scope, { kind: "resolve", outcome: outcomeForStore, expect });
|
|
9
10
|
won = claim.claimed;
|
|
10
11
|
if (!claim.claimed)
|
|
11
|
-
|
|
12
|
+
loss = { status: claim.current.status, rev: claim.current.status === "absent" ? undefined : claim.current.rev, sameRow: true };
|
|
12
13
|
}
|
|
13
14
|
else {
|
|
14
|
-
won = await store.resolve(token, cp.scope, outcomeForStore,
|
|
15
|
+
won = await store.resolve(token, cp.scope, outcomeForStore, expect);
|
|
15
16
|
}
|
|
16
17
|
if (!won)
|
|
17
18
|
locallyClaimedTokens.delete(token);
|
|
18
19
|
if (!won) {
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
if (loss === undefined) {
|
|
21
|
+
const row = await store.get(token);
|
|
22
|
+
loss = row ? { status: row.status, rev: checkpointRevOf(row), sameRow: row.scope === cp.scope } : { status: "absent", rev: undefined, sameRow: false };
|
|
23
|
+
}
|
|
24
|
+
if (loss.status === "pending") {
|
|
25
|
+
if (holder !== undefined && loss.sameRow && loss.rev === expect.rev) {
|
|
26
|
+
throw new CheckpointError("resume.holder_superseded", "the claim this resume acts under is no longer the deployment's current grant — nothing was applied and the checkpoint is unchanged by this resume; the run is superseded: do not retry it (the current holder delivers)");
|
|
27
|
+
}
|
|
21
28
|
throw new CheckpointError("checkpoint.reopened_concurrently", "checkpoint changed concurrently (its revision advanced via a resolve/reopen cycle since this resume validated) — not executed; re-resume against the current state");
|
|
22
29
|
}
|
|
23
30
|
parentConstraintRegistry.delete(token);
|
|
@@ -45,7 +45,7 @@ export function resumePolicyOutcome(input) {
|
|
|
45
45
|
const reason = decide.reason;
|
|
46
46
|
assertOutcomeText(reason, "reason");
|
|
47
47
|
const feedback = decide.feedback;
|
|
48
|
-
assertOutcomeText(feedback, "feedback");
|
|
48
|
+
assertOutcomeText(feedback, "feedback", { field: "feedback" });
|
|
49
49
|
plainPolicyOutcome = {
|
|
50
50
|
gate: "policy_ask",
|
|
51
51
|
boundCallId: decide.boundCallId,
|
|
@@ -7,7 +7,8 @@ const RETIRED_RUNNER_DEPS_KEYS = {
|
|
|
7
7
|
graderEnvFactory: "the grader env reaches the repair loop as `RepairLoopConfig.graderEnv`, minted by the trusted control plane (`assertOracleIsolation` / `GraderEnv` unchanged)",
|
|
8
8
|
"hands.readCyberReminder": "a Read result carries only the reminders about that read (an empty file, an offset past the end, a file already in context) — no standing content-safety tail, so there is nothing to switch; a deployment that wants that sentence states it in its own `appendSystemPrompt`",
|
|
9
9
|
promptProvider: "a deployment changes prompt text through overlays: register a `prompt.compose` handler on `RunnerDeps.mods` answering `{ overlays }` (role base `replace`, a brand line `add` to the role band, a behavior or scenario `add`, a core-behavior `replace` / `append` / `drop`), choose the role base per task with `TaskSpec.promptRole`, and dispose of an MCP server's instructions with a `prompt.section` registration answering `{ text }` / `{ text: null }`",
|
|
10
|
-
|
|
10
|
+
allowImageUrl: "a remote image URL is judged by the one egress guard (https, the private-network floor) and the deployment's host floor — declare a CDN list as `RunnerDeps.hostFloor.only` (it bounds every structured egress: the fetch tool, task images, MCP http, A2A, WebSearch's SearXNG backend), or send the image inline",
|
|
11
|
+
memorySessionIncarnation: "the occupant behind a session id is a cell of the session row now — `SessionMetadata.incarnation` on the metadata `Session.getMetadata()` returns (forks also `forkedFromIncarnation`), with `SessionStore.headOf` (its `incarnation`) for by-id readers; put the token the old seat answered on your sessions instead. A deployment that drops the seat without surfacing the cell loses the axis: records bind by session id alone",
|
|
11
12
|
};
|
|
12
13
|
export function assertNoRetiredRunnerDeps(deps) {
|
|
13
14
|
assertNoRetiredKeys(deps, RETIRED_RUNNER_DEPS_KEYS, "RunnerDeps");
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RewindFilesRequest, RewindFilesResult } from "../file-history-store.js";
|
|
2
|
+
import type { SessionStore } from "../session.js";
|
|
3
|
+
import type { RunnerDeps } from "../types.js";
|
|
4
|
+
import type { SessionReadFileStates } from "./session-read-file-states.js";
|
|
5
|
+
/** What the Runner lends the rewind: its current deps, its session store, its read-state seats, and its lock. */
|
|
6
|
+
export interface RewindFilesSeats {
|
|
7
|
+
deps: RunnerDeps;
|
|
8
|
+
sessions: SessionStore;
|
|
9
|
+
readStates: SessionReadFileStates;
|
|
10
|
+
/** Whether a leg of this Runner holds or awaits `sessionId`'s lock. */
|
|
11
|
+
sessionBusy(sessionId: string): boolean;
|
|
12
|
+
/** Take `sessionId`'s lock; called synchronously after `sessionBusy` answered false, so nothing slips in between. */
|
|
13
|
+
takeSessionLock(sessionId: string): Promise<() => void>;
|
|
14
|
+
}
|
|
15
|
+
export declare function rewindSessionFiles(seats: RewindFilesSeats, request: RewindFilesRequest): Promise<RewindFilesResult>;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { types } from "node:util";
|
|
2
|
+
import { isPlainRecord } from "../mods/kernel/receive.js";
|
|
3
|
+
import { hasDestroy } from "../remote-env.js";
|
|
4
|
+
import { readMember } from "../thrown-value.js";
|
|
5
|
+
import { resolveDeploymentFileHistory, storeUnconfiguredRefusal } from "./file-history-request.js";
|
|
6
|
+
import { prepareExecutionEnv } from "./prepare-execution-env.js";
|
|
7
|
+
import { noBoundaryRefusal, settleFileHistoryRestore } from "./file-history-restore.js";
|
|
8
|
+
import { adoptForkedFileHistory, resolveFileHistoryCoordinates } from "./prepare-file-history.js";
|
|
9
|
+
import { createRollbackStack } from "./rollback-stack.js";
|
|
10
|
+
import { settleTeardownLeg } from "./teardown-bounded.js";
|
|
11
|
+
const REQUEST_KEYS = new Set(["sessionId", "to", "dryRun", "signal"]);
|
|
12
|
+
export async function rewindSessionFiles(seats, request) {
|
|
13
|
+
const req = screenRewindFilesRequest(request);
|
|
14
|
+
const { deps } = seats;
|
|
15
|
+
const { wiredSeat, fileHistoryStore, captureStore } = resolveDeploymentFileHistory(deps);
|
|
16
|
+
if (fileHistoryStore === undefined)
|
|
17
|
+
throw storeUnconfiguredRefusal(wiredSeat, req.to);
|
|
18
|
+
if (seats.sessionBusy(req.sessionId))
|
|
19
|
+
throw sessionBusyRefusal(req.sessionId, req.to);
|
|
20
|
+
const lock = seats.takeSessionLock(req.sessionId);
|
|
21
|
+
const release = await lock;
|
|
22
|
+
try {
|
|
23
|
+
const session = await acquireExistingSession(seats.sessions, req.sessionId);
|
|
24
|
+
const report = (err) => {
|
|
25
|
+
try {
|
|
26
|
+
deps.onError?.(err, { phase: "config", sessionId: req.sessionId });
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const rollback = createRollbackStack(report);
|
|
32
|
+
let envPhase;
|
|
33
|
+
try {
|
|
34
|
+
envPhase = await prepareExecutionEnv({ deps, spec: {}, internals: undefined, resume: undefined, placementRootResolved: req.sessionId, sessionId: req.sessionId, forgetOnThrow: async () => { }, rollback });
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
await rollback.unwindAll();
|
|
38
|
+
throw err;
|
|
39
|
+
}
|
|
40
|
+
rollback.commit();
|
|
41
|
+
try {
|
|
42
|
+
return await rewindOnEnv(req, envPhase.executionEnv, envPhase.handsEnabled, envPhase.taskRootInitial, { store: fileHistoryStore, captureStore, session: session.session, seats });
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
const owned = envPhase.ownedEnvSeat.current;
|
|
46
|
+
if (owned !== undefined && hasDestroy(owned))
|
|
47
|
+
await settleTeardownLeg(() => owned.destroy(), "ownedEnv.destroy (rewindFiles)", report);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
release();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async function rewindOnEnv(req, env, handsEnabled, taskRoot, ctx) {
|
|
55
|
+
if (!handsEnabled)
|
|
56
|
+
throw filesEnvUnsupportedRefusal(req.sessionId, req.to);
|
|
57
|
+
const { historyRoot, historyScope } = await resolveFileHistoryCoordinates(true, env, taskRoot, undefined, req.sessionId);
|
|
58
|
+
if (ctx.captureStore !== undefined)
|
|
59
|
+
await adoptForkedFileHistory(ctx.captureStore, ctx.session, req.sessionId, ctx.seats.deps.onError);
|
|
60
|
+
if (req.dryRun) {
|
|
61
|
+
if (!(await ctx.store.canRestore(historyScope, req.to)))
|
|
62
|
+
throw noBoundaryRefusal(req.to, req.sessionId, true);
|
|
63
|
+
const preview = ctx.store.diffStats === undefined ? null : await ctx.store.diffStats(historyScope, req.to, env, historyRoot);
|
|
64
|
+
return { dryRun: true, preview: preview ?? null };
|
|
65
|
+
}
|
|
66
|
+
const restore = await settleFileHistoryRestore({ store: ctx.store, sessionId: req.sessionId, target: req.to, before: false, env, root: historyRoot, signal: req.signal, readStates: ctx.seats.readStates });
|
|
67
|
+
return { dryRun: false, restore };
|
|
68
|
+
}
|
|
69
|
+
function screenRewindFilesRequest(request) {
|
|
70
|
+
const bad = (what) => {
|
|
71
|
+
const e = new Error(`Runner.rewindFiles: ${what} — nothing was rewound. The request is { sessionId, to, dryRun?, signal? }.`);
|
|
72
|
+
e.code = "rewind.invalid_spec";
|
|
73
|
+
throw e;
|
|
74
|
+
};
|
|
75
|
+
if (typeof request !== "object" || request === null)
|
|
76
|
+
return bad(`the request must be a plain object, got ${request === null ? "null" : typeof request}`);
|
|
77
|
+
if (types.isProxy(request) || !isPlainRecord(request))
|
|
78
|
+
return bad("the request must be a plain data object (not a Proxy, and with no prototype that could supply a member)");
|
|
79
|
+
let descriptors;
|
|
80
|
+
try {
|
|
81
|
+
descriptors = Object.getOwnPropertyDescriptors(request);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return bad("the request could not be read");
|
|
85
|
+
}
|
|
86
|
+
const keys = Reflect.ownKeys(descriptors);
|
|
87
|
+
const unknown = keys.filter((k) => typeof k !== "string" || !REQUEST_KEYS.has(k));
|
|
88
|
+
if (unknown.length > 0)
|
|
89
|
+
return bad(`unknown key ${unknown.map((k) => JSON.stringify(String(k))).join(", ")}`);
|
|
90
|
+
const read = {};
|
|
91
|
+
for (const k of keys) {
|
|
92
|
+
const d = descriptors[k];
|
|
93
|
+
if (!("value" in d))
|
|
94
|
+
return bad(`member ${JSON.stringify(k)} is an accessor, not a value`);
|
|
95
|
+
read[k] = d.value;
|
|
96
|
+
}
|
|
97
|
+
const { sessionId, to, dryRun, signal } = read;
|
|
98
|
+
if (typeof sessionId !== "string" || sessionId === "")
|
|
99
|
+
return bad(`sessionId must be a non-empty string, got ${shown(sessionId)}`);
|
|
100
|
+
if (typeof to !== "string" || to === "")
|
|
101
|
+
return bad(`to must be a non-empty entry id, got ${shown(to)}`);
|
|
102
|
+
if (dryRun !== undefined && typeof dryRun !== "boolean")
|
|
103
|
+
return bad(`dryRun must be a boolean when given, got ${shown(dryRun)}`);
|
|
104
|
+
if (signal !== undefined && !(signal instanceof AbortSignal))
|
|
105
|
+
return bad(`signal must be an AbortSignal when given, got ${shown(signal)}`);
|
|
106
|
+
return { sessionId, to, dryRun: dryRun === true, signal };
|
|
107
|
+
}
|
|
108
|
+
function shown(v) {
|
|
109
|
+
return typeof v === "string" ? JSON.stringify(v.slice(0, 40)) : v === null || typeof v === "boolean" || typeof v === "number" ? String(v) : `a ${typeof v}`;
|
|
110
|
+
}
|
|
111
|
+
async function acquireExistingSession(sessions, sessionId) {
|
|
112
|
+
try {
|
|
113
|
+
return await sessions.acquire(sessionId, { requireExisting: true });
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
if (readMember(err, "code") !== "not_found")
|
|
117
|
+
throw err;
|
|
118
|
+
const e = new Error(`Runner.rewindFiles: session "${sessionId}" does not exist — nothing was rewound`);
|
|
119
|
+
e.code = "resume.session_not_found";
|
|
120
|
+
throw e;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function sessionBusyRefusal(sessionId, target) {
|
|
124
|
+
const e = new Error(`Runner.rewindFiles: a task is running or queued on session "${sessionId}" in this Runner — rewinding its files to entry "${target}" now would move them under that task, so nothing was rewound; retry once it has ended`);
|
|
125
|
+
e.code = "rewind.session_busy";
|
|
126
|
+
return e;
|
|
127
|
+
}
|
|
128
|
+
function filesEnvUnsupportedRefusal(sessionId, target) {
|
|
129
|
+
const e = new Error(`Runner.rewindFiles: this deployment mounts no filesystem-capable ExecutionEnv, so session "${sessionId}" has no working tree to rewind to entry "${target}" — nothing was rewound`);
|
|
130
|
+
e.code = "rewind.files_env_unsupported";
|
|
131
|
+
return e;
|
|
132
|
+
}
|
|
@@ -4,6 +4,7 @@ import { SKILLS_LISTING_PROBE_HEADER } from "./synthetic-tools.js";
|
|
|
4
4
|
import { AGENT_LISTING_REMOVED_HEADER, SKILLS_LISTING_DELTA_HEADER, SKILLS_LISTING_REMOVED_HEADER, agentListingDeltaHeader, agentListingInitialHeader, createAttachmentState, replayAnnouncedListing, replayAnnouncedModels } from "./turn-attachments.js";
|
|
5
5
|
import { wireOf } from "../tool-name-readings.js";
|
|
6
6
|
import { rosterToolName } from "../tool-roster.js";
|
|
7
|
+
import { rowNotExecuted } from "./tool-not-executed.js";
|
|
7
8
|
export async function runAttachmentSeats(input) {
|
|
8
9
|
const { spec, prepared, resume, rs, runner, next } = input;
|
|
9
10
|
rs.counters.wroteThisRun = false;
|
|
@@ -27,7 +28,6 @@ export async function runAttachmentSeats(input) {
|
|
|
27
28
|
? { announcedGuideline: prepared.workflowSizeGuideline.legGuideline, current: prepared.workflowSizeGuideline.current }
|
|
28
29
|
: undefined;
|
|
29
30
|
rs.counters.cadenceTurns = 0;
|
|
30
|
-
rs.turn.lastTurnHadToolCalls = false;
|
|
31
31
|
if (rs.attach.attachState !== undefined && (rs.attach.attachmentsCfg?.backgroundTasks ?? eventDefaultOn("background_tasks")) === true) {
|
|
32
32
|
try {
|
|
33
33
|
const branch = await prepared.session.getBranch();
|
|
@@ -176,7 +176,7 @@ export async function runAttachmentSeats(input) {
|
|
|
176
176
|
if ((fvMarked || text.includes("<system-reminder>[final verification]")) && rs.counters.finalVerifyInjections < 2)
|
|
177
177
|
rs.counters.finalVerifyInjections += 1;
|
|
178
178
|
}
|
|
179
|
-
else if (m.role === "toolResult" && !rs.counters.wroteThisRun && (prepared.toolEffects.get(wireOf("verify.wroteThisRunSeed", { toolName: rosterToolName(prepared.toolRosterDeltas.current, m.toolName) })) ?? "write") !== "read") {
|
|
179
|
+
else if (m.role === "toolResult" && !rs.counters.wroteThisRun && !rowNotExecuted(m.details) && (prepared.toolEffects.get(wireOf("verify.wroteThisRunSeed", { toolName: rosterToolName(prepared.toolRosterDeltas.current, m.toolName) })) ?? "write") !== "read") {
|
|
180
180
|
rs.counters.wroteThisRun = true;
|
|
181
181
|
}
|
|
182
182
|
}
|
|
@@ -3,6 +3,7 @@ import { type ExtraBodyDroppedSeatInput } from "./extra-body-dropped-seat.js";
|
|
|
3
3
|
import type { PushQueue } from "../push-queue.js";
|
|
4
4
|
import type { TaskEvent } from "../types.js";
|
|
5
5
|
import type { RunInternals, RunState } from "./contracts.js";
|
|
6
|
+
import { type CapabilityWithheldRecord } from "./capability-withheld-seat.js";
|
|
6
7
|
export interface RunBrainSinksInput {
|
|
7
8
|
/** borrowed-mutable — the run's event queue: the `status` frames. */
|
|
8
9
|
queue: PushQueue<TaskEvent>;
|
|
@@ -20,11 +21,13 @@ export interface RunBrainSinksInput {
|
|
|
20
21
|
observeReasoningWireFacts: (facts: ReasoningWireFacts) => void;
|
|
21
22
|
/** borrowed-readonly — the notice sink and the leg's ids; the fourth and fifth sinks' announcers are minted from them. */
|
|
22
23
|
notice: ExtraBodyDroppedSeatInput;
|
|
24
|
+
/** borrowed-mutable — the session's announced record: the sixth sink's announcer says a withheld capability once per session. */
|
|
25
|
+
announced: CapabilityWithheldRecord;
|
|
23
26
|
}
|
|
24
27
|
export interface RunBrainSinksResult {
|
|
25
28
|
/** Compose the three brain ALS sinks around a brain-driving call. */
|
|
26
29
|
withBrainSinks: <T>(fn: () => Promise<T>) => Promise<T>;
|
|
27
|
-
/** Compose the
|
|
30
|
+
/** Compose the three leg-wide request sinks (the extraBody strip, the credential-origin refusal, the withheld capability) around the whole leg. */
|
|
28
31
|
withLegRequestSinks: <T>(fn: () => Promise<T>) => Promise<T>;
|
|
29
32
|
}
|
|
30
33
|
export declare function runBrainSinks(input: RunBrainSinksInput): RunBrainSinksResult;
|
|
@@ -3,8 +3,9 @@ import { createExtraBodyDroppedScope } from "./extra-body-dropped-seat.js";
|
|
|
3
3
|
import { createCredentialOriginRefusalScope } from "./credential-origin-seat.js";
|
|
4
4
|
import { createSafeNotifier, observeThenableRejection } from "../safe-notify.js";
|
|
5
5
|
import { emitTrace } from "../trace.js";
|
|
6
|
+
import { createCapabilityWithheldScope } from "./capability-withheld-seat.js";
|
|
6
7
|
export function runBrainSinks(input) {
|
|
7
|
-
const { queue, internals, rs, ident, observeReasoningWireFacts, notice } = input;
|
|
8
|
+
const { queue, internals, rs, ident, observeReasoningWireFacts, notice, announced } = input;
|
|
8
9
|
const statusSinkNotifier = createSafeNotifier({
|
|
9
10
|
onError: (f) => console.warn(`[sema-core] ${f.site}: run-internals status sink threw (contained; further failures counted, not re-disclosed): ${f.error.message}`),
|
|
10
11
|
});
|
|
@@ -63,6 +64,7 @@ export function runBrainSinks(input) {
|
|
|
63
64
|
const withBrainSinks = (fn) => runWithStatusSink(statusEmit, () => runWithBrainTelemetry(telemetryEmit, () => runWithReasoningWireFacts(observeReasoningWireFacts, fn)));
|
|
64
65
|
const withExtraBodyDropped = createExtraBodyDroppedScope(notice);
|
|
65
66
|
const withCredentialOriginRefusals = createCredentialOriginRefusalScope(notice);
|
|
66
|
-
const
|
|
67
|
+
const withCapabilityWithheld = createCapabilityWithheldScope(notice, announced);
|
|
68
|
+
const withLegRequestSinks = (fn) => withExtraBodyDropped(() => withCredentialOriginRefusals(() => withCapabilityWithheld(fn)));
|
|
67
69
|
return { withBrainSinks, withLegRequestSinks };
|
|
68
70
|
}
|
|
@@ -24,7 +24,7 @@ export interface RunCompactionMachineryInput {
|
|
|
24
24
|
runner: RunnerDepsSeat;
|
|
25
25
|
}
|
|
26
26
|
export interface RunCompactionMachineryResult {
|
|
27
|
-
/** The accounted compaction brain
|
|
27
|
+
/** The accounted compaction brain ({@link derivedLegBrain} on the `compaction` lane). */
|
|
28
28
|
compactionBrain: Brain;
|
|
29
29
|
/** Whether ROUTINE turn-boundary compaction runs for this task, asked AT THE BOUNDARY. The request's own
|
|
30
30
|
* `compaction` is fixed for the leg, but the deployment's per-model overlay is a live seat — an operator
|
|
@@ -4,22 +4,12 @@ import { compactionEnabled, contextOverlayFor } from "../context-settings.js";
|
|
|
4
4
|
import { sanitizeCompactionSettings } from "../auto-compaction.js";
|
|
5
5
|
import { modelCostToPricing } from "../pricing.js";
|
|
6
6
|
import { emitTrace } from "../trace.js";
|
|
7
|
-
import {
|
|
8
|
-
import { sideCallBookOf } from "./side-call-account.js";
|
|
7
|
+
import { derivedLegBrain, sideCallBookOf } from "./side-call-account.js";
|
|
9
8
|
export function runCompactionMachinery(input) {
|
|
10
9
|
const { spec, prepared, rs, stats, noteUnevaluablePriceTable, modelCatalog, runner } = input;
|
|
11
10
|
const bookSideCall = sideCallBookOf(stats, { telemetry: rs.telemetry, pricing: () => runner.deps.pricing, noteUnevaluablePriceTable, catalog: modelCatalog });
|
|
12
11
|
prepared.sideCallBookRef.book = bookSideCall;
|
|
13
|
-
const compactionBrain =
|
|
14
|
-
stream: runner.deps.brain.stream,
|
|
15
|
-
complete: async (m, c, o) => {
|
|
16
|
-
const msg = await runWithStatusSink(() => { }, async () => await runWithReasoningWireFacts(() => { }, async () => runner.deps.brain.complete
|
|
17
|
-
? await runner.deps.brain.complete(m, c, o)
|
|
18
|
-
: await (await Promise.resolve(runner.deps.brain.stream(m, c, o))).result()));
|
|
19
|
-
bookSideCall("compaction", m, msg);
|
|
20
|
-
return msg;
|
|
21
|
-
},
|
|
22
|
-
};
|
|
12
|
+
const compactionBrain = derivedLegBrain(() => runner.deps.brain, "compaction", bookSideCall);
|
|
23
13
|
const legOverlay = () => contextOverlayFor(runner.deps.contextSettings, prepared.harness.getModelRef(), runner.deps);
|
|
24
14
|
const withinTaskCompaction = () => compactionEnabled(spec.compaction?.enabled, legOverlay()) && (spec.compaction?.withinTask ?? true);
|
|
25
15
|
const compactionBreaker = { failures: 0 };
|
|
@@ -47,6 +47,7 @@ export interface RunGitLaneInput {
|
|
|
47
47
|
* so a pending announcement is re-asserted into the session ahead of the boundary's own context work. */
|
|
48
48
|
onTurnBoundary: (event: {
|
|
49
49
|
model: Model;
|
|
50
|
+
continues: boolean;
|
|
50
51
|
}) => Promise<undefined>;
|
|
51
52
|
/** borrowed-readonly — the Runner's deployment deps, read LIVE inside the closures (`onError`). */
|
|
52
53
|
runner: RunnerDepsSeat;
|
|
@@ -5,17 +5,19 @@ import { emitTrace } from "../trace.js";
|
|
|
5
5
|
import { primaryActivityArg } from "../arg-summary.js";
|
|
6
6
|
import { egressText } from "../untrusted-egress.js";
|
|
7
7
|
import { readDegradation } from "../../brain/degrading.js";
|
|
8
|
-
import { OUTPUT_TOOL_NAME } from "
|
|
8
|
+
import { OUTPUT_TOOL_NAME } from "../tool-catalog-entries.js";
|
|
9
9
|
import { usageCostMicroUsd } from "./usage-accounting.js";
|
|
10
10
|
import { advanceCadenceClock, reduceToolEnd } from "./turn-attachments.js";
|
|
11
11
|
import { gatedCallIdOf } from "./park-commit.js";
|
|
12
12
|
import { hasVerifiableStructureSignal } from "./grounding-signal.js";
|
|
13
13
|
import { announceToolCall, batchResponseDigest, emitSettled } from "./tool-end-body.js";
|
|
14
|
-
import { stampRowNotExecuted } from "./tool-not-executed.js";
|
|
14
|
+
import { neverExecuted, stampRowNotExecuted } from "./tool-not-executed.js";
|
|
15
|
+
import { extensionCallOf, noteExtensionCallDenied, requesterOf } from "../mods/extension-call.js";
|
|
15
16
|
import { createResponseModelSeat } from "./response-model-seat.js";
|
|
16
17
|
import { createToolCallIdFoldSeat } from "./tool-call-id-fold-seat.js";
|
|
17
18
|
import { createFinishReasonSeat } from "./finish-reason-seat.js";
|
|
18
|
-
import { createToolTurnIncompleteSeat
|
|
19
|
+
import { createToolTurnIncompleteSeat } from "./tool-turn-repair-seat.js";
|
|
20
|
+
import { createWithheldShellEnvSeat } from "./shell-env-withheld.js";
|
|
19
21
|
import { wireOf } from "../tool-name-readings.js";
|
|
20
22
|
import { rosterToolName } from "../tool-roster.js";
|
|
21
23
|
export function createHarnessHandlers(input) {
|
|
@@ -24,11 +26,12 @@ export function createHarnessHandlers(input) {
|
|
|
24
26
|
const toolCallIdFoldSeat = createToolCallIdFoldSeat(deps.runnerHooks.onNotice, { sessionId: prepared.sessionId, runId: prepared.runId });
|
|
25
27
|
const toolTurnIncompleteSeat = createToolTurnIncompleteSeat(deps.runnerHooks.onNotice, { sessionId: prepared.sessionId, runId: prepared.runId });
|
|
26
28
|
const finishReasonSeat = createFinishReasonSeat(deps.runnerHooks.onNotice, { sessionId: prepared.sessionId, runId: prepared.runId });
|
|
29
|
+
const withheldShellEnvSeat = createWithheldShellEnvSeat(prepared, deps.runnerHooks.onNotice);
|
|
27
30
|
const { spec, queue, internals, ident, pushContent, emitCommitted, startedToolCallIds, toolStartAt, toolProgress, writeFamilyOf, toolLabels, postToolBatchArmed, batchArgs, internalsNotifier, mediaByteCapBytes } = deps;
|
|
28
31
|
const frames = { push: (f) => pushContent({ ...f, ...ident() }), structured: prepared.structuredProjector, mediaByteCapBytes };
|
|
29
32
|
const startOf = (e) => {
|
|
30
33
|
const label = toolLabels.get(e.toolName);
|
|
31
|
-
return { toolCallId: e.toolCallId, spelledName: e.toolName, wireName: rosterToolName(prepared.toolRosterDeltas.current, e.toolName), ...(label !== undefined ? { label } : {}), args: e.args };
|
|
34
|
+
return { toolCallId: e.toolCallId, spelledName: e.toolName, wireName: rosterToolName(prepared.toolRosterDeltas.current, e.toolName), ...(label !== undefined ? { label } : {}), args: e.args, ...requesterOf(prepared.modBus, e.toolCallId) };
|
|
32
35
|
};
|
|
33
36
|
let lastWorkspaceCwd = prepared.cwdRef?.current;
|
|
34
37
|
const announceWorkspaceMove = () => {
|
|
@@ -201,7 +204,6 @@ export function createHarnessHandlers(input) {
|
|
|
201
204
|
const content = m.content;
|
|
202
205
|
if (rs.attach.attachState !== undefined)
|
|
203
206
|
rs.counters.cadenceTurns = advanceCadenceClock(rs.attach.attachState, rs.counters.cadenceTurns, content, writeFamilyOf);
|
|
204
|
-
rs.turn.lastTurnHadToolCalls = turnCarriesToolCall(content);
|
|
205
207
|
}
|
|
206
208
|
rs.turn.callStartAt = undefined;
|
|
207
209
|
rs.turn.firstTokenAt = undefined;
|
|
@@ -223,12 +225,15 @@ export function createHarnessHandlers(input) {
|
|
|
223
225
|
const activityArg = primaryActivityArg(event.args);
|
|
224
226
|
internalsNotifier.notify(() => observeThenableRejection(internals?.onActivity?.({ phase: "start", toolCallId: event.toolCallId, toolName: event.toolName, at: startAt, ...(activityArg !== undefined ? { arg: activityArg } : {}) }), internalsNotifier, "runtask.onActivity.start"), "runtask.onActivity.start");
|
|
225
227
|
announceToolCall(prepared.toolOccurrences, startOf(event), frames);
|
|
228
|
+
withheldShellEnvSeat.onToolStart(event.toolName);
|
|
226
229
|
};
|
|
227
230
|
const onToolEnd = (event) => {
|
|
228
231
|
const toolStarted = toolStartAt.get(event.toolCallId);
|
|
229
232
|
toolStartAt.delete(event.toolCallId);
|
|
230
233
|
const toolNow = Date.now();
|
|
231
|
-
|
|
234
|
+
const occ = prepared.toolOccurrences.get(event.toolCallId);
|
|
235
|
+
const ran = event.notExecuted !== true && !(occ !== undefined && neverExecuted(occ));
|
|
236
|
+
if (ran && !rs.counters.wroteThisRun && (prepared.toolEffects.get(wireOf("verify.wroteThisRun", { toolName: rosterToolName(prepared.toolRosterDeltas.current, event.toolName) })) ?? "write") !== "read") {
|
|
232
237
|
rs.counters.wroteThisRun = true;
|
|
233
238
|
}
|
|
234
239
|
if (rs.attach.attachState !== undefined && !event.isError) {
|
|
@@ -237,7 +242,7 @@ export function createHarnessHandlers(input) {
|
|
|
237
242
|
reduceToolEnd(rs.attach.attachState, det);
|
|
238
243
|
}
|
|
239
244
|
if (postToolBatchArmed) {
|
|
240
|
-
if (prepared.blockedToolCalls.delete(event.toolCallId) || event.
|
|
245
|
+
if (prepared.blockedToolCalls.delete(event.toolCallId) || !ran || extensionCallOf(prepared.modBus, event.toolCallId) !== undefined) {
|
|
241
246
|
batchArgs?.delete(event.toolCallId);
|
|
242
247
|
}
|
|
243
248
|
else {
|
|
@@ -267,6 +272,8 @@ export function createHarnessHandlers(input) {
|
|
|
267
272
|
...(event.notExecuted === true ? { notExecuted: true } : {}),
|
|
268
273
|
...(() => { const id = prepared.abortController.signal.aborted ? gatedCallIdOf(prepared) : undefined; return id !== undefined ? { gatedCallIdOfRun: id } : {}; })(),
|
|
269
274
|
}, frames);
|
|
275
|
+
if (settled.gate?.disposition.kind === "denied")
|
|
276
|
+
noteExtensionCallDenied(prepared.modBus, event.toolCallId);
|
|
270
277
|
stampRowNotExecuted(event.result, settled.notExecuted === true);
|
|
271
278
|
emitTrace(rs.telemetry.tracer, () => ({
|
|
272
279
|
kind: "tool.call",
|
|
@@ -82,7 +82,7 @@ export interface RunLegInput<R> {
|
|
|
82
82
|
unsubBoundary: () => void;
|
|
83
83
|
/** borrowed-readonly — the git lane's harness-event release, called third. */
|
|
84
84
|
unsub: () => void;
|
|
85
|
-
/** borrowed-readonly — the Runner's deployment deps, read LIVE (`onError`, `hooks`, `onNotice`, `
|
|
85
|
+
/** borrowed-readonly — the Runner's deployment deps, read LIVE (`onError`, `hooks`, `onNotice`, `mediaByteCapBytes`; the resumed
|
|
86
86
|
* decision's resolver files its execution record's word through `onNotice` too); the one home of why it is a seat and not a
|
|
87
87
|
* captured object is {@link RunnerDepsSeat}. */
|
|
88
88
|
runner: RunnerDepsSeat;
|