@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
|
@@ -5,6 +5,7 @@ import type { ProviderCondition, ProviderConditionSource } from "../../brain/pro
|
|
|
5
5
|
import type { RequestRoute, RouteCarrierBag, RouteCredentialSource } from "../../brain/request-route.js";
|
|
6
6
|
export type { RouteCredentialSource } from "../../brain/request-route.js";
|
|
7
7
|
import type { ModelOutputInvalidCause } from "./tool-turns.js";
|
|
8
|
+
import type { PromptTraitName, TraitCondition } from "../../prompt-assembly/catalog/schema.js";
|
|
8
9
|
export type KnownApi = "openai-completions" | "mistral-conversations" | "openai-responses" | "azure-openai-responses" | "openai-chatgpt-responses" | "anthropic-messages" | "bedrock-converse-stream" | "google-generative-ai" | "google-vertex";
|
|
9
10
|
export type Api = KnownApi | (string & {});
|
|
10
11
|
export type KnownImagesApi = "openrouter-images";
|
|
@@ -611,10 +612,10 @@ export interface AssistantMessage {
|
|
|
611
612
|
/**
|
|
612
613
|
* design/124 tier A: this final message was PARTIALLY FINALIZED after a mid-stream connection
|
|
613
614
|
* loss/stall — the substantive streamed prefix (text and/or completed tool calls) was promoted to
|
|
614
|
-
* final content instead of failing the turn (
|
|
615
|
+
* final content instead of failing the turn (avoid re-billing +
|
|
615
616
|
* keep the displayed content consistent with the result). `stopReason` is synthesized from the
|
|
616
617
|
* content ("toolUse" when a completed tool call streamed, else "stop"); `errorMessage` carries the
|
|
617
|
-
* warning in
|
|
618
|
+
* warning in the reference's former words ("Response stalled mid-stream." / "Connection closed mid-response."), visible
|
|
618
619
|
* to the model in the transcript. Downstream semantics (agent-loop): `partialFinalized &&
|
|
619
620
|
* stopReason==="stop"` gets a BOUNDED continue nudge (an unattended run must not book the cut as an
|
|
620
621
|
* incomplete success); `partialFinalized && stopReason==="toolUse"` executes normally (a truncated
|
|
@@ -697,11 +698,24 @@ export interface Tool<TParameters extends TSchema = TSchema> {
|
|
|
697
698
|
/** VENDORED EDIT (design/115 P0): canonical tool renames keep old model/SDK wire names as aliases. */
|
|
698
699
|
aliases?: string[];
|
|
699
700
|
description: string;
|
|
700
|
-
/**
|
|
701
|
-
*
|
|
702
|
-
|
|
701
|
+
/** The description's conditional variants (see ToolSpec.descriptionVariants): at mount, the first whose traits
|
|
702
|
+
* condition holds over the run's traits replaces `description`; none holds ⇒ `description`. */
|
|
703
|
+
descriptionVariants?: readonly ToolDescriptionVariant[];
|
|
703
704
|
parameters: TParameters;
|
|
704
705
|
}
|
|
706
|
+
/**
|
|
707
|
+
* One conditional variant of a tool's description — the tool card's variant table is these, first match wins, with
|
|
708
|
+
* `description` as the unconditional last entry. Chosen by the run's prompt traits through the same trait reading the
|
|
709
|
+
* prompt catalog's variants use; the variant chosen is reported in the tool's `cardId` (`<card>#<id>`).
|
|
710
|
+
*/
|
|
711
|
+
export interface ToolDescriptionVariant {
|
|
712
|
+
/** The variant's name in the tool's card id: non-empty, at most 64 characters of `[A-Za-z0-9._-]`, unique per tool. */
|
|
713
|
+
readonly id: string;
|
|
714
|
+
/** The trait condition (`allOf` / `noneOf`, trait names) under which this text replaces `description`. */
|
|
715
|
+
readonly traits: TraitCondition;
|
|
716
|
+
/** The description text (non-blank). */
|
|
717
|
+
readonly text: string;
|
|
718
|
+
}
|
|
705
719
|
export interface Context {
|
|
706
720
|
systemPrompt?: string;
|
|
707
721
|
/**
|
|
@@ -877,7 +891,7 @@ export interface OpenAIResponsesCompat {
|
|
|
877
891
|
*/
|
|
878
892
|
export interface AnthropicMessagesCompat {
|
|
879
893
|
/**
|
|
880
|
-
* How this endpoint takes extended thinking (
|
|
894
|
+
* How this endpoint takes extended thinking (design/119).
|
|
881
895
|
* - `"budget"` (default, pre-Fable models): `thinking: { type: "enabled", budget_tokens }`.
|
|
882
896
|
* - `"adaptive"` (Fable 5 / Opus 4.8/4.7 class): `thinking: { type: "adaptive" }` — NO
|
|
883
897
|
* `budget_tokens` (these models 400 on a budget), no max_tokens bump; the intensity is carried
|
|
@@ -886,7 +900,7 @@ export interface AnthropicMessagesCompat {
|
|
|
886
900
|
*/
|
|
887
901
|
thinkingMode?: "budget" | "adaptive";
|
|
888
902
|
/**
|
|
889
|
-
* Effort tiers this endpoint accepts via `output_config.effort` (
|
|
903
|
+
* Effort tiers this endpoint accepts via `output_config.effort` (the reference's `effort` /
|
|
890
904
|
* `xhigh_effort` / `max_effort` capability bits collapsed into one declared set, matching the
|
|
891
905
|
* `reasoningEffortLevels` pattern on {@link OpenAICompletionsCompat}). Present ⇒ the brain sends
|
|
892
906
|
* `output_config: { effort }` plus the `effort-2025-11-24` beta header, clamping the requested
|
|
@@ -896,14 +910,14 @@ export interface AnthropicMessagesCompat {
|
|
|
896
910
|
*/
|
|
897
911
|
effortLevels?: ThinkingLevel[];
|
|
898
912
|
/**
|
|
899
|
-
* Whether the endpoint accepts `temperature` at all.
|
|
913
|
+
* Whether the endpoint accepts `temperature` at all. The reference sends temperature only to a
|
|
900
914
|
* legacy allowlist — Fable-5-class models NEVER receive it (400 risk), independent of thinking
|
|
901
915
|
* state. Default true (existing models unchanged); `false` drops a caller temperature
|
|
902
916
|
* unconditionally, not just under extended thinking.
|
|
903
917
|
*/
|
|
904
918
|
supportsTemperature?: boolean;
|
|
905
919
|
/**
|
|
906
|
-
* design/119 S4 (
|
|
920
|
+
* design/119 S4 (`context_management` capability): when thinking is enabled, send
|
|
907
921
|
* `context_management: { edits: [{ type: "clear_thinking_20251015", keep: "all" }] }` plus the
|
|
908
922
|
* `context-management-2025-06-27` beta — an explicit opt-OUT of the server's default
|
|
909
923
|
* thinking-clearing, preserving cross-turn reasoning continuity (what CC sends on first-party
|
|
@@ -912,7 +926,7 @@ export interface AnthropicMessagesCompat {
|
|
|
912
926
|
*/
|
|
913
927
|
contextManagement?: boolean;
|
|
914
928
|
/**
|
|
915
|
-
* design/119 S4
|
|
929
|
+
* design/119 S4: attach the `interleaved-thinking-2025-05-14` beta on tool-enabled
|
|
916
930
|
* requests with thinking on (thinking blocks may interleave with tool_use). Declare per endpoint;
|
|
917
931
|
* absent = no beta (pre-119 behavior; a deployment could already do this via static `headers`).
|
|
918
932
|
*/
|
|
@@ -924,7 +938,9 @@ export interface Model<TApi extends Api = Api> {
|
|
|
924
938
|
api: TApi;
|
|
925
939
|
provider: Provider;
|
|
926
940
|
baseUrl: string;
|
|
927
|
-
reasoning:
|
|
941
|
+
/** Declares reasoning (thinking keys): `true` / `false`, absent = not declared. Read only through `capabilityOf`
|
|
942
|
+
* (`brain/model-capability.ts`), which also says what an undeclared capability means. */
|
|
943
|
+
reasoning?: boolean;
|
|
928
944
|
/**
|
|
929
945
|
* design/111 — this model's DEFAULT thinking level (per-model preset). The thinking-resolution chain is
|
|
930
946
|
* `spec.thinking ?? role.thinking ?? model.defaultThinking` (prepare-task) — a caller/role still overrides, but
|
|
@@ -940,7 +956,8 @@ export interface Model<TApi extends Api = Api> {
|
|
|
940
956
|
* Missing keys use provider defaults. null marks a level as unsupported.
|
|
941
957
|
*/
|
|
942
958
|
thinkingLevelMap?: ThinkingLevelMap;
|
|
943
|
-
input:
|
|
959
|
+
/** Declares image input: a list with `"image"` = on, without = off, absent = not declared (same reader as `reasoning`). */
|
|
960
|
+
input?: ("text" | "image")[];
|
|
944
961
|
cost?: {
|
|
945
962
|
input: number;
|
|
946
963
|
output: number;
|
|
@@ -957,7 +974,7 @@ export interface Model<TApi extends Api = Api> {
|
|
|
957
974
|
/**
|
|
958
975
|
* Optional AUTOCOMPACT window — the window the compaction trigger and the clearStale frontier
|
|
959
976
|
* are derived from when it differs from the physical request window (dual-window semantics).
|
|
960
|
-
*
|
|
977
|
+
* The reference's posture: its 1M sonnet keeps the PHYSICAL window at 1M while a per-model dynamic
|
|
961
978
|
* config lowers only the autocompact window to 967000, so the reactive trigger lands at 934000
|
|
962
979
|
* (= 967000 − 33000); a single window value cannot express both. Consumed by the trigger-side
|
|
963
980
|
* geometry only (`editBudget`/`sanitizeCompactionSettings`/`shouldCompact` window); the request
|
|
@@ -996,13 +1013,13 @@ export interface Model<TApi extends Api = Api> {
|
|
|
996
1013
|
/** Extra request HEADERS merged into the provider call. Cannot override auth / content-type / version. */
|
|
997
1014
|
headers?: Record<string, string>;
|
|
998
1015
|
/**
|
|
999
|
-
*
|
|
1000
|
-
*
|
|
1001
|
-
*
|
|
1002
|
-
*
|
|
1003
|
-
*
|
|
1016
|
+
* The prompt traits this model has: the reference's capability names that gate prompt text (`PROMPT_TRAITS`), its
|
|
1017
|
+
* bundle names (`PROMPT_TRAIT_BUNDLES`, expanded to their members), or a deployment's own `x-<namespace>-<name>`.
|
|
1018
|
+
* The prompt catalog and every overlay's `when.traits` select on them; the engine never derives them from `id`. An
|
|
1019
|
+
* EXACT set — nothing is added to what it lists (declare `lean_prompt` for the lean shape). Absent ⇒
|
|
1020
|
+
* `["lean_prompt"]`. A name that is none of these refuses the task (`config.prompt_trait_unknown`).
|
|
1004
1021
|
*/
|
|
1005
|
-
|
|
1022
|
+
promptTraits?: readonly PromptTraitName[];
|
|
1006
1023
|
/** Compatibility overrides for OpenAI-compatible APIs. If not set, auto-detected from baseUrl. */
|
|
1007
1024
|
compat?: TApi extends "openai-completions" ? OpenAICompletionsCompat : TApi extends "openai-responses" ? OpenAIResponsesCompat : TApi extends "anthropic-messages" ? AnthropicMessagesCompat : never;
|
|
1008
1025
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { Tool, ToolCall } from "./types.js";
|
|
2
2
|
/** Finds the target tool and validates/coerces a model-emitted tool call. */
|
|
3
3
|
export declare function validateToolCall(tools: Tool[], toolCall: ToolCall): unknown;
|
|
4
|
-
/**
|
|
4
|
+
/** The dispatcher's name resolution over one tool list, indexed once (for a caller resolving many names over the same list):
|
|
5
|
+
* canonical names first, then aliases (design/115 P0 order) — the first tool carrying a name, or an alias, owns it. */
|
|
6
|
+
export declare function toolNameIndex<T extends Tool>(tools: readonly T[] | undefined): (name: string) => T | undefined;
|
|
7
|
+
/** VENDORED EDIT (design/115 P0): resolve canonical tool names first, then legacy aliases ({@link toolNameIndex} for one name). */
|
|
5
8
|
export declare function findToolByName<T extends Tool>(tools: readonly T[] | undefined, name: string): T | undefined;
|
|
6
9
|
/** Validates tool arguments against TypeBox or plain JSON-schema parameters. */
|
|
7
10
|
export declare function validateToolArguments(tool: Tool, toolCall: ToolCall): unknown;
|
|
@@ -378,8 +378,20 @@ export function validateToolCall(tools, toolCall) {
|
|
|
378
378
|
}
|
|
379
379
|
return validateToolArguments(tool, toolCall);
|
|
380
380
|
}
|
|
381
|
+
export function toolNameIndex(tools) {
|
|
382
|
+
const byName = new Map();
|
|
383
|
+
const byAlias = new Map();
|
|
384
|
+
for (const t of tools ?? []) {
|
|
385
|
+
if (!byName.has(t.name))
|
|
386
|
+
byName.set(t.name, t);
|
|
387
|
+
for (const a of t.aliases ?? [])
|
|
388
|
+
if (!byAlias.has(a))
|
|
389
|
+
byAlias.set(a, t);
|
|
390
|
+
}
|
|
391
|
+
return (name) => byName.get(name) ?? byAlias.get(name);
|
|
392
|
+
}
|
|
381
393
|
export function findToolByName(tools, name) {
|
|
382
|
-
return
|
|
394
|
+
return toolNameIndex(tools)(name);
|
|
383
395
|
}
|
|
384
396
|
export function validateToolArguments(tool, toolCall) {
|
|
385
397
|
const args = structuredClone(toolCall.arguments);
|
|
@@ -61,7 +61,7 @@ export type LoopTerminalReason =
|
|
|
61
61
|
* loop ended cleanly at a manufactured boundary, no reconcile owed), and which consult caught
|
|
62
62
|
* it is timing, not semantics. */
|
|
63
63
|
| "stop_requested"
|
|
64
|
-
/** RB-206 (
|
|
64
|
+
/** RB-206 (the reference buckets it
|
|
65
65
|
* with budget_exhausted/api_error/model_error/turn_setup_failed, explicitly NOT `"completed"`): every
|
|
66
66
|
* tool call in the turn was dropped as malformed AND the bounded `malformed_tool_use_retry` nudge
|
|
67
67
|
* budget is used up — the model believes it acted, nothing ran, and there is no more recovery budget
|
|
@@ -154,11 +154,33 @@ type ExecutedToolCallBatch = {
|
|
|
154
154
|
messages: ToolResultMessage[];
|
|
155
155
|
terminate: boolean;
|
|
156
156
|
};
|
|
157
|
+
/**
|
|
158
|
+
* ONE call through the loop's per-call pipeline — announced, prepared (the gate included), executed through the execution
|
|
159
|
+
* seat, finalized, closed. The sequential lane runs each call through it and adds the call's tool-result message; a host's
|
|
160
|
+
* own call (`AgentHarness.callTool`) runs it with no model message and adds nothing. The partitioned and streaming lanes run
|
|
161
|
+
* the same steps in two phases.
|
|
162
|
+
*/
|
|
163
|
+
export declare function runToolCall(currentContext: AgentContext, assistantMessage: AssistantMessage | undefined, toolCall: AgentToolCall, config: AgentLoopConfig, signal: AbortSignal | undefined, emit: AgentEventSink): Promise<{
|
|
164
|
+
finalized: FinalizedToolCallOutcome;
|
|
165
|
+
halt?: HaltRemainingDirective;
|
|
166
|
+
}>;
|
|
167
|
+
/**
|
|
168
|
+
* Partition rule: a call is batch-safe ONLY if its arguments
|
|
169
|
+
* VALIDATE against the tool's schema (CC `safeParse` — a malformed call never rides a parallel batch;
|
|
170
|
+
* it stays a singleton and surfaces its validation error at execution) AND the tool/hook opts in.
|
|
171
|
+
* The hook sees the validated+coerced args — same as CC handing `parsed.data` to `isConcurrencySafe`.
|
|
172
|
+
*/
|
|
173
|
+
export declare function isBatchSafeToolCall(tool: AgentTool | undefined, toolCall: AgentToolCall): boolean;
|
|
157
174
|
/** An executed call's raw outcome, before (and, from {@link finalizeToolOutcome}, after) the post-execution half. */
|
|
158
175
|
export type ExecutedToolCallOutcome = {
|
|
159
176
|
result: AgentToolResult<unknown>;
|
|
160
177
|
isError: boolean;
|
|
161
178
|
};
|
|
179
|
+
type FinalizedToolCallOutcome = {
|
|
180
|
+
toolCall: AgentToolCall;
|
|
181
|
+
result: AgentToolResult<unknown>;
|
|
182
|
+
isError: boolean;
|
|
183
|
+
};
|
|
162
184
|
/**
|
|
163
185
|
* THE reading a value gets on its way to becoming a call's arguments: the tool's own preparation (`prepareArguments` —
|
|
164
186
|
* a default filled in, an alias folded), then the schema's coercions ({@link validateToolArguments}). The loop reads the
|
|
@@ -118,11 +118,12 @@ async function settleTrailingBatchTurn(state, signal, emit, settle) {
|
|
|
118
118
|
terminalEmitted = ended;
|
|
119
119
|
}
|
|
120
120
|
else if (!ended) {
|
|
121
|
+
state.hasMoreToolCalls = !batch.terminate;
|
|
121
122
|
const boundary = { message: tail, toolResults: batch.messages, context: state.context, newMessages: state.newMessages };
|
|
122
|
-
adoptNextTurnSnapshot(state, await state.config.prepareNextTurn?.(boundary));
|
|
123
|
+
adoptNextTurnSnapshot(state, await state.config.prepareNextTurn?.({ ...boundary, continues: state.hasMoreToolCalls }));
|
|
123
124
|
ended = (await state.config.shouldStopAfterTurn?.(boundary)) === true || signal?.aborted === true;
|
|
124
125
|
if (!ended)
|
|
125
|
-
state.pendingMessages.push(...((await state.config.getSteeringMessages?.()) || []));
|
|
126
|
+
state.pendingMessages.push(...((await state.config.getSteeringMessages?.(state.hasMoreToolCalls)) || []));
|
|
126
127
|
}
|
|
127
128
|
settle.report({ assistantMessage: tail, settled: batch.messages.length, aborted: ended });
|
|
128
129
|
if (ended && !terminalEmitted)
|
|
@@ -242,7 +243,7 @@ async function createLoopState(context, config, newMessages) {
|
|
|
242
243
|
config,
|
|
243
244
|
newMessages,
|
|
244
245
|
firstTurn: true,
|
|
245
|
-
pendingMessages: (await config.getSteeringMessages?.()) || [],
|
|
246
|
+
pendingMessages: (await config.getSteeringMessages?.(true)) || [],
|
|
246
247
|
hasMoreToolCalls: true,
|
|
247
248
|
truncatedOutputContinues: 0,
|
|
248
249
|
staticReasoningCutRecoveries: context.messages.filter((m) => m.role === "assistant" && m.staticReasoningCut === true).length,
|
|
@@ -258,7 +259,7 @@ async function runLoop(state, signal, emit, streamFn, runtime, trace) {
|
|
|
258
259
|
const followUpMessages = (await state.config.getFollowUpMessages?.()) || [];
|
|
259
260
|
if (followUpMessages.length === 0) {
|
|
260
261
|
if ((state.config.pendingInjectionCount?.() ?? 0) > 0) {
|
|
261
|
-
state.pendingMessages = (await state.config.getSteeringMessages?.()) || [];
|
|
262
|
+
state.pendingMessages = (await state.config.getSteeringMessages?.(false)) || [];
|
|
262
263
|
if (state.pendingMessages.length > 0) {
|
|
263
264
|
trace?.({ kind: "continue", reason: "steer_injected" });
|
|
264
265
|
}
|
|
@@ -448,7 +449,7 @@ async function runTurnPhases(state, signal, turnController, publishSeat, retract
|
|
|
448
449
|
retractSeat();
|
|
449
450
|
state.degenerateContinues++;
|
|
450
451
|
await emit({ type: "turn_end", message, toolResults: [] });
|
|
451
|
-
const drained = (await state.config.getSteeringMessages?.()) || [];
|
|
452
|
+
const drained = (await state.config.getSteeringMessages?.(false)) || [];
|
|
452
453
|
state.pendingMessages = drained.length > 0 ? drained : [createDegenerateRecoveryNudge()];
|
|
453
454
|
return { kind: "ran", recovered: "degenerate_output_recovery" };
|
|
454
455
|
}
|
|
@@ -493,7 +494,7 @@ async function runTurnPhases(state, signal, turnController, publishSeat, retract
|
|
|
493
494
|
context: state.context,
|
|
494
495
|
newMessages: state.newMessages,
|
|
495
496
|
};
|
|
496
|
-
const nextTurnSnapshot = await state.config.prepareNextTurn?.(nextTurnContext);
|
|
497
|
+
const nextTurnSnapshot = await state.config.prepareNextTurn?.({ ...nextTurnContext, continues: state.hasMoreToolCalls });
|
|
497
498
|
adoptNextTurnSnapshot(state, nextTurnSnapshot);
|
|
498
499
|
if (await state.config.shouldStopAfterTurn?.({
|
|
499
500
|
message,
|
|
@@ -504,7 +505,7 @@ async function runTurnPhases(state, signal, turnController, publishSeat, retract
|
|
|
504
505
|
await emit({ type: "agent_end", messages: state.newMessages });
|
|
505
506
|
return { kind: "terminal", reason: "stop_requested" };
|
|
506
507
|
}
|
|
507
|
-
state.pendingMessages = (await state.config.getSteeringMessages?.()) || [];
|
|
508
|
+
state.pendingMessages = (await state.config.getSteeringMessages?.(state.hasMoreToolCalls)) || [];
|
|
508
509
|
const truncated = state.config.recovery?.truncatedOutput;
|
|
509
510
|
if (message.stopReason === "length") {
|
|
510
511
|
if (truncated && toolCalls.length === 0 && state.pendingMessages.length === 0) {
|
|
@@ -653,6 +654,7 @@ async function settleInterruptedTurn(state, message, executor, committedResults,
|
|
|
653
654
|
toolResults,
|
|
654
655
|
context: state.context,
|
|
655
656
|
newMessages: state.newMessages,
|
|
657
|
+
continues: state.hasMoreToolCalls,
|
|
656
658
|
});
|
|
657
659
|
adoptNextTurnSnapshot(state, nextTurnSnapshot);
|
|
658
660
|
if (await state.config.shouldStopAfterTurn?.({
|
|
@@ -664,7 +666,7 @@ async function settleInterruptedTurn(state, message, executor, committedResults,
|
|
|
664
666
|
await emit({ type: "agent_end", messages: state.newMessages });
|
|
665
667
|
return { kind: "terminal", reason: "stop_requested" };
|
|
666
668
|
}
|
|
667
|
-
state.pendingMessages = (await state.config.getSteeringMessages?.()) || [];
|
|
669
|
+
state.pendingMessages = (await state.config.getSteeringMessages?.(state.hasMoreToolCalls)) || [];
|
|
668
670
|
return { kind: "ran" };
|
|
669
671
|
}
|
|
670
672
|
async function streamAssistantResponse(context, config, signal, emit, streamFn, runtime, executor, staticReasoningCutDowngrade) {
|
|
@@ -800,27 +802,7 @@ async function executeToolCallsSequential(currentContext, assistantMessage, tool
|
|
|
800
802
|
const messages = [];
|
|
801
803
|
for (let i = 0; i < toolCalls.length; i++) {
|
|
802
804
|
const toolCall = toolCalls[i];
|
|
803
|
-
await emit
|
|
804
|
-
type: "tool_execution_start",
|
|
805
|
-
toolCallId: toolCall.id,
|
|
806
|
-
toolName: toolCall.name,
|
|
807
|
-
args: toolCall.arguments,
|
|
808
|
-
});
|
|
809
|
-
const preparation = await prepareToolCall(currentContext, assistantMessage, toolCall, config, signal);
|
|
810
|
-
let finalized;
|
|
811
|
-
let halt;
|
|
812
|
-
if (preparation.kind === "immediate") {
|
|
813
|
-
finalized = {
|
|
814
|
-
toolCall,
|
|
815
|
-
result: preparation.result,
|
|
816
|
-
isError: preparation.isError,
|
|
817
|
-
};
|
|
818
|
-
halt = preparation.halt;
|
|
819
|
-
}
|
|
820
|
-
else {
|
|
821
|
-
finalized = await executePreparedWithDisclosure(currentContext, assistantMessage, preparation, config, signal, emit);
|
|
822
|
-
}
|
|
823
|
-
await emitToolExecutionEnd(finalized, emit);
|
|
805
|
+
const { finalized, halt } = await runToolCall(currentContext, assistantMessage, toolCall, config, signal, emit);
|
|
824
806
|
const toolResultMessage = createToolResultMessage(finalized);
|
|
825
807
|
await emitToolResultMessage(toolResultMessage, emit);
|
|
826
808
|
finalizedCalls.push(finalized);
|
|
@@ -844,6 +826,15 @@ async function executeToolCallsSequential(currentContext, assistantMessage, tool
|
|
|
844
826
|
terminate: shouldTerminateToolBatch(finalizedCalls),
|
|
845
827
|
};
|
|
846
828
|
}
|
|
829
|
+
export async function runToolCall(currentContext, assistantMessage, toolCall, config, signal, emit) {
|
|
830
|
+
await emit({ type: "tool_execution_start", toolCallId: toolCall.id, toolName: toolCall.name, args: toolCall.arguments });
|
|
831
|
+
const preparation = await prepareToolCall(currentContext, assistantMessage, toolCall, config, signal);
|
|
832
|
+
const finalized = preparation.kind === "immediate"
|
|
833
|
+
? { toolCall, result: preparation.result, isError: preparation.isError }
|
|
834
|
+
: await executePreparedWithDisclosure(currentContext, assistantMessage, preparation, config, signal, emit);
|
|
835
|
+
await emitToolExecutionEnd(finalized, emit);
|
|
836
|
+
return { finalized, ...(preparation.kind === "immediate" && preparation.halt !== undefined ? { halt: preparation.halt } : {}) };
|
|
837
|
+
}
|
|
847
838
|
async function settleHaltedToolCall(toolCall, halt, emit) {
|
|
848
839
|
await emit({
|
|
849
840
|
type: "tool_execution_start",
|
|
@@ -885,7 +876,7 @@ function isCallConcurrencySafe(tool, args) {
|
|
|
885
876
|
return false;
|
|
886
877
|
}
|
|
887
878
|
}
|
|
888
|
-
function isBatchSafeToolCall(tool, toolCall) {
|
|
879
|
+
export function isBatchSafeToolCall(tool, toolCall) {
|
|
889
880
|
if (!tool)
|
|
890
881
|
return false;
|
|
891
882
|
let args;
|
|
@@ -1106,7 +1097,7 @@ class StreamToolExecutor {
|
|
|
1106
1097
|
return;
|
|
1107
1098
|
}
|
|
1108
1099
|
entry.prepared = preparation;
|
|
1109
|
-
entry.executed = await executePreparedToolCall(preparation, this.signal, this.emit, this.config.abortResultDetails, (error) => this.retainCancellation(error));
|
|
1100
|
+
entry.executed = await executePreparedToolCall(preparation, this.signal, this.emit, this.config.executeTool, this.config.abortResultDetails, (error) => this.retainCancellation(error));
|
|
1110
1101
|
}
|
|
1111
1102
|
catch (error) {
|
|
1112
1103
|
if (isAbortSemanticsError(error))
|
|
@@ -1393,7 +1384,7 @@ async function prepareToolCall(currentContext, assistantMessage, toolCall, confi
|
|
|
1393
1384
|
};
|
|
1394
1385
|
}
|
|
1395
1386
|
}
|
|
1396
|
-
async function executePreparedToolCall(prepared, signal, emit, abortResultDetails, onLateCancellation) {
|
|
1387
|
+
async function executePreparedToolCall(prepared, signal, emit, executeTool, abortResultDetails, onLateCancellation) {
|
|
1397
1388
|
const updateEvents = [];
|
|
1398
1389
|
let acceptingUpdates = true;
|
|
1399
1390
|
if (signal?.aborted) {
|
|
@@ -1402,7 +1393,7 @@ async function executePreparedToolCall(prepared, signal, emit, abortResultDetail
|
|
|
1402
1393
|
const work = (async () => {
|
|
1403
1394
|
let outcome;
|
|
1404
1395
|
try {
|
|
1405
|
-
const
|
|
1396
|
+
const body = () => prepared.tool.execute(prepared.toolCall.id, prepared.args, signal, (partialResult) => {
|
|
1406
1397
|
if (!acceptingUpdates) {
|
|
1407
1398
|
return;
|
|
1408
1399
|
}
|
|
@@ -1425,6 +1416,7 @@ async function executePreparedToolCall(prepared, signal, emit, abortResultDetail
|
|
|
1425
1416
|
});
|
|
1426
1417
|
updateEvents.push(delivery);
|
|
1427
1418
|
});
|
|
1419
|
+
const result = executeTool !== undefined ? await executeTool({ toolCall: prepared.toolCall, tool: prepared.tool, args: prepared.args }, body, signal) : await body();
|
|
1428
1420
|
outcome = { result, isError: result.isError === true };
|
|
1429
1421
|
}
|
|
1430
1422
|
catch (error) {
|
|
@@ -1505,7 +1497,7 @@ function raiseFatalCancellation(executor) {
|
|
|
1505
1497
|
async function executePreparedWithDisclosure(currentContext, assistantMessage, prepared, config, signal, emit) {
|
|
1506
1498
|
let executed;
|
|
1507
1499
|
try {
|
|
1508
|
-
executed = await executePreparedToolCall(prepared, signal, emit, config.abortResultDetails);
|
|
1500
|
+
executed = await executePreparedToolCall(prepared, signal, emit, config.executeTool, config.abortResultDetails);
|
|
1509
1501
|
}
|
|
1510
1502
|
catch (error) {
|
|
1511
1503
|
if (isAbortSemanticsError(error))
|
|
@@ -127,9 +127,9 @@ export interface AfterToolCallResult {
|
|
|
127
127
|
}
|
|
128
128
|
/** Context passed to `beforeToolCall`. */
|
|
129
129
|
export interface BeforeToolCallContext {
|
|
130
|
-
/** The assistant message that requested the tool call. */
|
|
131
|
-
assistantMessage
|
|
132
|
-
/** The raw tool call block from `assistantMessage.content
|
|
130
|
+
/** The assistant message that requested the tool call — absent for a host's own call (an extension's `$.tool.call`), which no model message carried. */
|
|
131
|
+
assistantMessage?: AssistantMessage;
|
|
132
|
+
/** The raw tool call block (from `assistantMessage.content` when a model message carried it). */
|
|
133
133
|
toolCall: AgentToolCall;
|
|
134
134
|
/** Validated tool arguments for the target tool schema. */
|
|
135
135
|
args: unknown;
|
|
@@ -142,9 +142,9 @@ export interface BeforeToolCallContext {
|
|
|
142
142
|
}
|
|
143
143
|
/** Context passed to `afterToolCall`. */
|
|
144
144
|
export interface AfterToolCallContext {
|
|
145
|
-
/** The assistant message that requested the tool call. */
|
|
146
|
-
assistantMessage
|
|
147
|
-
/** The raw tool call block from `assistantMessage.content
|
|
145
|
+
/** The assistant message that requested the tool call — absent for a host's own call (an extension's `$.tool.call`), which no model message carried. */
|
|
146
|
+
assistantMessage?: AssistantMessage;
|
|
147
|
+
/** The raw tool call block (from `assistantMessage.content` when a model message carried it). */
|
|
148
148
|
toolCall: AgentToolCall;
|
|
149
149
|
/** Validated tool arguments for the target tool schema. */
|
|
150
150
|
args: unknown;
|
|
@@ -176,6 +176,8 @@ export interface AgentLoopTurnUpdate {
|
|
|
176
176
|
thinkingLevel?: ThinkingLevel;
|
|
177
177
|
}
|
|
178
178
|
export interface PrepareNextTurnContext extends ShouldStopAfterTurnContext {
|
|
179
|
+
/** `hasMoreToolCalls`: the turn's tool results go back to the model as the next request (its batch neither ended the run nor was cut by an interjection; a recovery nudge is not one). */
|
|
180
|
+
continues: boolean;
|
|
179
181
|
}
|
|
180
182
|
/**
|
|
181
183
|
* Prompt-too-long recovery seam (design/118 ④b, the CC reactive-compact chain adapted to sema's
|
|
@@ -214,8 +216,8 @@ export interface LoopPromptTooLongRecovery {
|
|
|
214
216
|
maxRetries?: number;
|
|
215
217
|
/**
|
|
216
218
|
* M1 (docs/PARITY-CONTEXT-TRANSACTIONS-2026-07-10 §4): withhold the failed assistant's
|
|
217
|
-
* message_start/message_end stream events while a recovery attempt is pending —
|
|
218
|
-
* these errors inside its stream decoder
|
|
219
|
+
* message_start/message_end stream events while a recovery attempt is pending — the reference holds
|
|
220
|
+
* these errors inside its stream decoder and only
|
|
219
221
|
* leaks them once recovery's outcome is known. Recovery succeeded ⇒ the failure stays invisible
|
|
220
222
|
* to event consumers; failed/declined ⇒ the events leak at that point (terminal truth unchanged).
|
|
221
223
|
* Default true (CC-aligned). `false` restores the pre-M1 live leak of the interim error.
|
|
@@ -239,7 +241,7 @@ export interface LoopTruncatedOutputRecovery {
|
|
|
239
241
|
maxContinues?: number;
|
|
240
242
|
}
|
|
241
243
|
/**
|
|
242
|
-
* Malformed-tool-use retry (design/119 S2
|
|
244
|
+
* Malformed-tool-use retry (design/119 S2). A turn that stops with
|
|
243
245
|
* `toolUse` but carries ZERO parseable tool calls (the brain dropped truncated/invalid ones) used to
|
|
244
246
|
* end the run silently mid-task. When enabled, inject a synthetic retry nudge and run another turn,
|
|
245
247
|
* up to `maxRetries` per run (CC: once). Absent ⇒ OFF (pre-S2 behavior).
|
|
@@ -249,7 +251,7 @@ export interface LoopMalformedToolUseRecovery {
|
|
|
249
251
|
maxRetries?: number;
|
|
250
252
|
}
|
|
251
253
|
/**
|
|
252
|
-
* Thinking-only retry (design/119 S2
|
|
254
|
+
* Thinking-only retry (design/119 S2 — the adaptive-thinking era
|
|
253
255
|
* companion). A turn that stops normally with thinking block(s) but NO visible text and NO tool
|
|
254
256
|
* calls used to end the run as a silent empty success. When enabled, inject a "respond with visible
|
|
255
257
|
* output" nudge and run another turn, up to `maxRetries` per run (CC: once). Absent ⇒ OFF.
|
|
@@ -345,7 +347,7 @@ export interface AgentLoopConfig extends SimpleStreamOptions {
|
|
|
345
347
|
*/
|
|
346
348
|
stallTimeoutsPerCall?: () => import("../llm/types.js").StallTimeouts | undefined;
|
|
347
349
|
/**
|
|
348
|
-
* design/120 P1: concurrency cap inside a parallel tool batch. Default 10 (
|
|
350
|
+
* design/120 P1: concurrency cap inside a parallel tool batch. Default 10 (the reference's production
|
|
349
351
|
* default — its knob is the CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY env; sema takes config).
|
|
350
352
|
*/
|
|
351
353
|
maxToolConcurrency?: number;
|
|
@@ -473,11 +475,11 @@ export interface AgentLoopConfig extends SimpleStreamOptions {
|
|
|
473
475
|
* If messages are returned, they are added to the context before the next LLM call.
|
|
474
476
|
* Tool calls from the current assistant message are not skipped.
|
|
475
477
|
*
|
|
476
|
-
* Use this for "steering" the agent while it's working.
|
|
478
|
+
* Use this for "steering" the agent while it's working. `continuing`: {@link PrepareNextTurnContext.continues} here.
|
|
477
479
|
*
|
|
478
480
|
* Contract: must not throw or reject. Return [] when no steering messages are available.
|
|
479
481
|
*/
|
|
480
|
-
getSteeringMessages?: () => Promise<AgentMessage[]>;
|
|
482
|
+
getSteeringMessages?: (continuing: boolean) => Promise<AgentMessage[]>;
|
|
481
483
|
/**
|
|
482
484
|
* Returns follow-up messages to process after the agent would otherwise stop.
|
|
483
485
|
*
|
|
@@ -520,7 +522,7 @@ export interface AgentLoopConfig extends SimpleStreamOptions {
|
|
|
520
522
|
/**
|
|
521
523
|
* design/373 S1 — the FINAL COMMIT POINT's synchronous double-check: how many queued injection
|
|
522
524
|
* frames a boundary drain could deliver right now (steer + follow-up, excluding frames a live
|
|
523
|
-
* hold
|
|
525
|
+
* hold, an unwinding run or the advisory rule would refuse to drain). Consulted SYNCHRONOUSLY after the follow-up
|
|
524
526
|
* drain (and stop gate) answered empty, with zero awaits between the check and the terminal
|
|
525
527
|
* commit — a frame that arrived during the stop gate's await window is therefore served by this
|
|
526
528
|
* run instead of being stranded behind an already-decided terminal. Absent ⇒ the pre-373 commit
|
|
@@ -562,6 +564,16 @@ export interface AgentLoopConfig extends SimpleStreamOptions {
|
|
|
562
564
|
* signal re-check, which has always minted its abort result with no details.
|
|
563
565
|
*/
|
|
564
566
|
abortResultDetails?: () => Record<string, unknown> | undefined;
|
|
567
|
+
/**
|
|
568
|
+
* The host's station around every tool execution, between the gate's allow and the body: `run` runs the body as the loop
|
|
569
|
+
* would (at most once), and what the station returns is the result the loop finalizes — it may answer without running it,
|
|
570
|
+
* and honors `signal`. Absent ⇒ the loop runs the body itself.
|
|
571
|
+
*/
|
|
572
|
+
executeTool?: (call: {
|
|
573
|
+
readonly toolCall: AgentToolCall;
|
|
574
|
+
readonly tool: AgentTool;
|
|
575
|
+
readonly args: unknown;
|
|
576
|
+
}, run: () => Promise<AgentToolResult<unknown>>, signal: AbortSignal | undefined) => Promise<AgentToolResult<unknown>>;
|
|
565
577
|
/**
|
|
566
578
|
* Fault seat for a THROWING {@link AgentTool.validateInput}: the loop reads the throw as "no
|
|
567
579
|
* verdict" (the call proceeds to the gate as if the tool had no validator) and reports the fault
|
|
@@ -759,17 +771,17 @@ export interface AgentTool<TParameters extends TSchema = TSchema, TDetails = unk
|
|
|
759
771
|
* - "parallel": this tool can execute concurrently with other tool calls.
|
|
760
772
|
*
|
|
761
773
|
* If omitted, the tool is treated as NOT concurrency-safe unless its input-level
|
|
762
|
-
* `isConcurrencySafe` hook opts a call in (fail-closed
|
|
774
|
+
* `isConcurrencySafe` hook opts a call in (fail-closed).
|
|
763
775
|
*/
|
|
764
776
|
executionMode?: ToolExecutionMode;
|
|
765
777
|
/**
|
|
766
|
-
* MCP server self-declared result-size threshold (
|
|
767
|
-
*
|
|
778
|
+
* MCP server self-declared result-size threshold (`_meta["anthropic/maxResultSizeChars"]`,
|
|
779
|
+
* consumer caps at 500K). Set by the MCP materializer when the server
|
|
768
780
|
* declares it; consulted by the offload mount in prepare-task. Absent on non-MCP tools.
|
|
769
781
|
*/
|
|
770
782
|
mcpMaxResultSizeChars?: number;
|
|
771
783
|
/**
|
|
772
|
-
* RB-400-a — MCP server-declared inline pin (
|
|
784
|
+
* RB-400-a — MCP server-declared inline pin (`_meta["anthropic/alwaysLoad"]`): set by the
|
|
773
785
|
* MCP materializer when the server's tools/list entry declares it; prepare-task folds these names
|
|
774
786
|
* into the defer classification's exemption set, ahead of the MCP constant-defer arm — the
|
|
775
787
|
* server's own channel for keeping one tool's full schema inlined. Absent on non-MCP tools.
|
|
@@ -803,7 +815,7 @@ export interface AgentTool<TParameters extends TSchema = TSchema, TDetails = unk
|
|
|
803
815
|
* partitioner for every tool WITHOUT an explicit `executionMode:"parallel"` (a statically-parallel
|
|
804
816
|
* tool needs no refinement); `true` = treat THIS CALL as concurrency-safe. A throw = false
|
|
805
817
|
* (fail-closed, CC same). The partitioner validates the call's args against the tool schema FIRST
|
|
806
|
-
* (schema-invalid ⇒ unsafe
|
|
818
|
+
* (schema-invalid ⇒ unsafe) and hands the hook the validated+coerced
|
|
807
819
|
* args — still treat defensively (a direct caller may pass raw args). Omitted ⇒ the static mode stands.
|
|
808
820
|
*/
|
|
809
821
|
isConcurrencySafe?: (args: unknown) => boolean;
|
|
@@ -127,12 +127,12 @@ export declare class NodeLspManager implements LspServerManager {
|
|
|
127
127
|
}
|
|
128
128
|
/** Resolve a file path to a languageId via its extension (undefined = no mapping → degrade). */
|
|
129
129
|
export declare function languageFor(filePath: string): string | undefined;
|
|
130
|
-
/**
|
|
130
|
+
/** The LSP file cap — single-sourced in core (`src/core/lsp.ts`), where the tool-layer check
|
|
131
131
|
* enforces it model-visibly; re-exported here so engine-path importers keep working. */
|
|
132
132
|
export { MAX_LSP_FILE_BYTES } from "../../core/lsp.js";
|
|
133
133
|
/**
|
|
134
134
|
* RB-232: the local default {@link LspReadText}, hardened with a stat-first precondition (CC
|
|
135
|
-
*
|
|
135
|
+
* the reference's validateInput does the same before ever reading — "Path is not a file").
|
|
136
136
|
* The stat check is the LOAD-BEARING part, do not "simplify" it away: a plain `readFile` on a FIFO/socket
|
|
137
137
|
* blocks forever on the FIRST read and PINS a libuv threadpool thread (default pool = 4) for the process
|
|
138
138
|
* lifetime — measured: `readFile(fifo, { signal })` with an abort fired at 2s was still unsettled at 10s,
|
|
@@ -1,22 +1,28 @@
|
|
|
1
|
-
import { type Session, type SessionForkOptions, type SessionMetadata, type SessionRepo, type SessionTreeEntry } from "../harness/types.js";
|
|
2
|
-
export declare class InMemorySessionRepo implements SessionRepo<SessionMetadata, {
|
|
3
|
-
id?: string;
|
|
4
|
-
}> {
|
|
1
|
+
import { type Session, type SessionCreateOptions, type SessionForkOptions, type SessionHead, type SessionMetadata, type SessionRepo, type SessionRow, type SessionTreeEntry } from "../harness/types.js";
|
|
2
|
+
export declare class InMemorySessionRepo implements SessionRepo<SessionMetadata, SessionCreateOptions> {
|
|
5
3
|
private sessions;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
/** Each row's last touch (epoch ms). */
|
|
5
|
+
private touched;
|
|
6
|
+
create(options?: SessionCreateOptions): Promise<Session>;
|
|
9
7
|
open(metadata: SessionMetadata): Promise<Session>;
|
|
10
|
-
|
|
8
|
+
/** The row's head off the one session object that IS the row: every cell comes from that object, so a delete and re-create of the
|
|
9
|
+
* id while this reads cannot mix two generations. */
|
|
10
|
+
headOf(sessionId: string): Promise<SessionHead | undefined>;
|
|
11
|
+
/** Every row, with its last {@link touch} as its activity time where it has one. This repo hands its sessions' storages out and never
|
|
12
|
+
* sees their writes (an entry's own `timestamp` is the writer's data, not the time of the write), so a row never touched carries none
|
|
13
|
+
* and a reader takes its `createdAt`. */
|
|
14
|
+
list(): Promise<SessionRow[]>;
|
|
15
|
+
/** Record activity on the row now (a missing row: nothing to record). The time lives and dies with the row: `delete` drops it. */
|
|
16
|
+
touch(sessionId: string): Promise<void>;
|
|
11
17
|
delete(metadata: SessionMetadata): Promise<void>;
|
|
12
|
-
fork(sourceMetadata: SessionMetadata, options: SessionForkOptions): Promise<Session>;
|
|
18
|
+
fork(sourceMetadata: SessionMetadata, options: SessionForkOptions & SessionCreateOptions): Promise<Session>;
|
|
13
19
|
/** 2c session-sync: the FULL log for export. InMemory holds everything (no F3 floor), so
|
|
14
20
|
* `getEntries()` IS the full oldest-first log with `id`/`parentId` verbatim. */
|
|
15
21
|
exportEntries(sessionId: string): Promise<SessionTreeEntry[]>;
|
|
16
22
|
/** 2c session-sync: import a verbatim log into `sessionId`. The single invariant gate runs first
|
|
17
|
-
* ({@link validateEntriesForImport}, fail-closed); `owner
|
|
18
|
-
*
|
|
19
|
-
*
|
|
23
|
+
* ({@link validateEntriesForImport}, fail-closed); a new row records `owner`, an existing row keeps its metadata whole.
|
|
24
|
+
* design/171: the operator's trusted-import flag is forwarded to the gate that persists — see
|
|
25
|
+
* SessionRepo.importEntries. */
|
|
20
26
|
importEntries(sessionId: string, owner: string | undefined, entries: SessionTreeEntry[], options?: {
|
|
21
27
|
preserveActorAssertions?: boolean;
|
|
22
28
|
}): Promise<void>;
|