@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
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { valveLeaves } from "../../agents/tool-filter.js";
|
|
2
|
+
import { ADVISOR_TOOL_NAME, advisorAttachVerdict, advisorHoldOf, advisorNotAttachedNotice, advisorReasonTold } from "../advisor-verdict.js";
|
|
3
|
+
import { deliverEngineNotice } from "../types.js";
|
|
4
|
+
import { advisorInstructionFrame } from "./advisor-instructions.js";
|
|
5
|
+
import { createAdvisorTool } from "./advisor-tool.js";
|
|
6
|
+
import { announceDigest } from "./announce-once-ledger.js";
|
|
7
|
+
import { conversationSegmentOf } from "./conversation-segment.js";
|
|
8
|
+
import { derivedRouteFallsBack } from "./derived-route-fallback.js";
|
|
9
|
+
import { derivedLegBrain } from "./side-call-account.js";
|
|
10
|
+
import { withBrainCallGuardrail } from "../../brain/timeout.js";
|
|
11
|
+
export async function prepareAdvisor(input) {
|
|
12
|
+
const { spec, deps, model, onceLedger, sessionId, runId } = input;
|
|
13
|
+
const told = onceLedger.arms().advisor;
|
|
14
|
+
if (spec.advisorModel === undefined && told === undefined)
|
|
15
|
+
return { manifest: undefined, instruction: undefined };
|
|
16
|
+
const requested = spec.advisorModel === undefined || input.advisorTool === "disabled" ? undefined : typeof spec.advisorModel === "string" ? spec.advisorModel : spec.advisorModel.id;
|
|
17
|
+
const fact = (f) => ({ ...(requested !== undefined ? { requested } : {}), main: model.id, ...f });
|
|
18
|
+
const notAttached = (reason, extra = {}) => {
|
|
19
|
+
if (input.rootLeg && requested !== undefined && advisorReasonTold(reason)) {
|
|
20
|
+
onceLedger.oncePerSession(announceDigest("advisor.not_attached", `${reason}\n${requested}\n${model.id}`), () => deliverEngineNotice(deps.onNotice, advisorNotAttachedNotice({ reason, advisorModel: requested, mainModel: model.id, sessionId, ...(runId !== undefined ? { runId } : {}) })));
|
|
21
|
+
}
|
|
22
|
+
return fact({ state: "not_attached", reason, ...extra });
|
|
23
|
+
};
|
|
24
|
+
let branch;
|
|
25
|
+
const readBranch = async () => (branch ??= await input.session.getBranch().catch(() => undefined));
|
|
26
|
+
let mounted = false;
|
|
27
|
+
const mount = async (advisor) => {
|
|
28
|
+
if ((spec.tools ?? []).some((t) => t.name === ADVISOR_TOOL_NAME)) {
|
|
29
|
+
const e = new Error(`Tool name "${ADVISOR_TOOL_NAME}" is reserved when TaskSpec.advisorModel attaches the advisor tool.`);
|
|
30
|
+
e.code = "config.reserved_tool_name";
|
|
31
|
+
throw e;
|
|
32
|
+
}
|
|
33
|
+
if (!valveLeaves(spec, input.selector)({ name: ADVISOR_TOOL_NAME }))
|
|
34
|
+
return fact({ state: "not_attached", reason: "excluded" });
|
|
35
|
+
const entries = await readBranch();
|
|
36
|
+
if (entries === undefined)
|
|
37
|
+
return notAttached("hold_unknown");
|
|
38
|
+
const held = advisorHoldOf(entries);
|
|
39
|
+
if (held !== undefined)
|
|
40
|
+
return fact({ state: "held", model: advisor.id, hold: held });
|
|
41
|
+
const route = await derivedRouteFallsBack({ seat: "advisor", derived: advisor, primary: model, brain: deps.brain, getApiKeyAndHeaders: spec.getApiKeyAndHeaders, onNotice: deps.onNotice, sessionId, ...(runId !== undefined ? { runId } : {}), onBrokenPairing: "detach" });
|
|
42
|
+
if (route.action === "detach")
|
|
43
|
+
return notAttached("route_refused", { routeCode: route.cause });
|
|
44
|
+
input.roster.mount(createAdvisorTool(advisorSeat(input, advisor)), { source: "builtin", mountedBy: "optional" });
|
|
45
|
+
mounted = true;
|
|
46
|
+
return fact({ state: "on", model: advisor.id });
|
|
47
|
+
};
|
|
48
|
+
let manifest;
|
|
49
|
+
if (spec.advisorModel !== undefined) {
|
|
50
|
+
const verdict = advisorAttachVerdict({ deps: { ...deps, ...(input.advisorTool !== undefined ? { advisorTool: input.advisorTool } : {}) }, main: model, advisor: spec.advisorModel });
|
|
51
|
+
manifest = verdict.state === "on" ? await mount(verdict.model) : notAttached(verdict.reason);
|
|
52
|
+
}
|
|
53
|
+
const entries = told !== undefined || mounted ? await readBranch() : undefined;
|
|
54
|
+
if (entries === undefined)
|
|
55
|
+
return { manifest, instruction: undefined };
|
|
56
|
+
const segment = conversationSegmentOf(entries);
|
|
57
|
+
const owed = advisorInstructionFrame(told !== undefined && told.segment === segment ? told.state : undefined, mounted);
|
|
58
|
+
return { manifest, instruction: { ...(owed !== undefined ? { owed } : {}), segment, mounted } };
|
|
59
|
+
}
|
|
60
|
+
function advisorSeat(input, model) {
|
|
61
|
+
const book = (lane, m, reply) => {
|
|
62
|
+
const door = input.sideCallBookRef.book;
|
|
63
|
+
if (door === undefined)
|
|
64
|
+
throw new Error("the advisor was consulted before the run body bound the leg's usage account, which it does before any tool call");
|
|
65
|
+
door(lane, m, reply);
|
|
66
|
+
};
|
|
67
|
+
const ms = input.brainCallGuardrailMs;
|
|
68
|
+
const guarded = (b) => (ms === undefined ? b : { ...b, stream: withBrainCallGuardrail((m, c, o) => b.stream(m, c, o), ms, {}) });
|
|
69
|
+
return {
|
|
70
|
+
model,
|
|
71
|
+
brain: derivedLegBrain(() => guarded(input.deps.brain), "advisor", book),
|
|
72
|
+
lastSentRequest: input.lastSentRequest,
|
|
73
|
+
readBranch: () => input.session.getBranch(),
|
|
74
|
+
getApiKeyAndHeaders: input.spec.getApiKeyAndHeaders,
|
|
75
|
+
markUsageUnknown: () => book("advisor", model, undefined),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
@@ -38,8 +38,8 @@ export interface PrepareAskLaneInput {
|
|
|
38
38
|
advertisedWritableDirs: Pick<AdvertisedWritableDirs, "roots"> | undefined;
|
|
39
39
|
/** borrowed-readonly — the leg's ONE exempt root, stamped on every request a policy judges (`ToolCallRequest.exemptRoots`). */
|
|
40
40
|
exemptRoots: readonly string[];
|
|
41
|
-
/** borrowed-readonly — the shared mount roster; read at RUN time by the approval-preview projection (
|
|
42
|
-
*
|
|
41
|
+
/** borrowed-readonly — the shared mount roster; read at RUN time by the approval-preview projection (the dispatcher's
|
|
42
|
+
* resolution over whatever the roster holds when the ask is minted). Never mutated here. */
|
|
43
43
|
tools: readonly AgentTool[];
|
|
44
44
|
/** borrowed-mutable — the inherited-unavailable marker set. Writer here: `resolveAskBound` consumes (`delete`) a
|
|
45
45
|
* marked call at its fail-closed intercept; the policy-chain phase records, the gate station sweeps. */
|
|
@@ -6,9 +6,11 @@ import { exactBoundInputHashOf } from "../canonical-json.js";
|
|
|
6
6
|
import { composeCallSignal, raceSettlementAgainstSignal } from "./abort-race.js";
|
|
7
7
|
import { failedJudgmentDeny, policyCheckAbortedDeny } from "./policy-throw.js";
|
|
8
8
|
import { askMandateMember } from "../ask-origin.js";
|
|
9
|
-
import { approvalCardMemberOf } from "../tool-roster.js";
|
|
9
|
+
import { approvalCardMemberOf, survivorsByName } from "../tool-roster.js";
|
|
10
|
+
import { toolNameIndex } from "../../internal/llm.js";
|
|
10
11
|
import { gateAskCarry, lateAskSettlementObserver } from "./denial-limit-arms.js";
|
|
11
12
|
import { consumeInheritedAskGrant } from "./inherited-ask-grants.js";
|
|
13
|
+
import { requesterOf } from "../mods/extension-call.js";
|
|
12
14
|
import { settleReadRootGrant } from "./read-root-grant.js";
|
|
13
15
|
function createDenyObserverNotifier(bus, signal) {
|
|
14
16
|
if (bus === undefined || !bus.hasHandlers("classic.PermissionDenied"))
|
|
@@ -32,7 +34,7 @@ const sanitizePreview = (node, depth = 0) => {
|
|
|
32
34
|
return out;
|
|
33
35
|
};
|
|
34
36
|
function resolveApprovalPreview(tools, toolName, args) {
|
|
35
|
-
const t =
|
|
37
|
+
const t = toolNameIndex([...survivorsByName(tools).values()])(toolName);
|
|
36
38
|
if (t?.approvalPreview === undefined)
|
|
37
39
|
return {};
|
|
38
40
|
try {
|
|
@@ -106,6 +108,7 @@ export function prepareAskLane(input) {
|
|
|
106
108
|
...askSourceIdentity(),
|
|
107
109
|
...riskAxesOf(req),
|
|
108
110
|
...approvalCardMemberOf(req),
|
|
111
|
+
...requesterOf(modBus, req.toolCallId),
|
|
109
112
|
...(decision.action === "ask" && decision.requiresRealApproval === true ? { requiresRealApproval: true } : {}),
|
|
110
113
|
...(decision.action === "ask" ? askMandateMember(decision) : {}),
|
|
111
114
|
...(decision.action === "ask" ? gateAskCarry(decision, isLiveApproverSeat(onAsk), autoModeDenialTracking.current) : {}),
|
|
@@ -36,7 +36,7 @@ import type { AssertAllKeysHandled } from "../ask-origin.js";
|
|
|
36
36
|
import { type ChildClampSource } from "../child-clamp-seats.js";
|
|
37
37
|
import type { InheritedGate, Prepared, RunInternals, RunnerSelfSeat, ToolFaceSnapshot } from "./contracts.js";
|
|
38
38
|
import { type BlockedRef } from "./synthetic-tools.js";
|
|
39
|
-
import { RosterBuilder
|
|
39
|
+
import { RosterBuilder } from "../tool-roster.js";
|
|
40
40
|
import type { ParentSpecSeat } from "../parent-spec-seat.js";
|
|
41
41
|
import { type RosterSpec } from "./caller-roster.js";
|
|
42
42
|
export interface PrepareCapsAndWorkflowInput {
|
|
@@ -56,7 +56,7 @@ export interface PrepareCapsAndWorkflowInput {
|
|
|
56
56
|
/** borrowed-readonly — the trusted spawn-side channel; the Workflow mount forwards `rootSessionId`, `placementRoot`,
|
|
57
57
|
* `onTaskNotification`, `workflowDepth`, the capture-floor getter reads `memoryCaptureAncestors`, and the arming reads
|
|
58
58
|
* the chain's auto-mode face (`inheritedGate.autoModeFace`). */
|
|
59
|
-
internals: Pick<RunInternals, "rootSessionId" | "placementRoot" | "onTaskNotification" | "workflowDepth" | "memoryCaptureAncestors" | "workflowParkedResume" | "questionFaceStripped" | "inheritedGate"> | undefined;
|
|
59
|
+
internals: Pick<RunInternals, "rootSessionId" | "placementRoot" | "onTaskNotification" | "workflowDepth" | "memoryCaptureAncestors" | "workflowParkedResume" | "holder" | "questionFaceStripped" | "inheritedGate"> | undefined;
|
|
60
60
|
/** borrowed-readonly — the tree's cross-boundary token (inherited or minted), which the Workflow mount hands to its children. */ crossBoundaryTree: import("../cross-boundary-taint.js").CrossBoundaryTreeToken;
|
|
61
61
|
/** borrowed-readonly — the acquired session; the classifier leg rebuilds its transcript window from `buildContext`. */
|
|
62
62
|
session: Pick<StoredSession, "buildContext">;
|
|
@@ -78,12 +78,10 @@ export interface PrepareCapsAndWorkflowInput {
|
|
|
78
78
|
lockedPreflight: Pick<LockedPreflight, "mcp">;
|
|
79
79
|
/** borrowed-mutable — the effect collection (`Prepared.toolEffects`): the safety scan's caller entries, then the mounts' writes. */
|
|
80
80
|
toolEffects: Prepared["toolEffects"];
|
|
81
|
-
/** borrowed-mutable — the scan's axis tables, so the builder moves an alias's axes with its member (a phase test may omit them). */
|
|
82
|
-
safetyAxes?: RosterAxisTables;
|
|
83
81
|
/** borrowed-readonly — the frozen tool-face snapshot the Workflow mount forwards (exclude / defer / alwaysLoad / restoreGated). */
|
|
84
82
|
toolFaceSnapshot: ToolFaceSnapshot;
|
|
85
|
-
/** borrowed-readonly — the
|
|
86
|
-
|
|
83
|
+
/** borrowed-readonly — the task-level lean switch (the Workflow mount's parentPromptLean; absent ⇒ no key). */
|
|
84
|
+
promptLean: ToolExecuteContext["promptLean"];
|
|
87
85
|
/** borrowed-readonly — the resolved interaction posture (the Workflow mount's parentInteractionPosture; absent ⇒ no key). */
|
|
88
86
|
resolvedInteractionPosture: ToolExecuteContext["interactionPosture"];
|
|
89
87
|
/** borrowed-readonly — the harness seat; the Workflow mount's parentModel / parentThinking getters read it call-time. */
|
|
@@ -117,8 +117,8 @@ function autoModeArmReasonOf(intent, facePresent, caps, capsFaulted) {
|
|
|
117
117
|
return { armed: true, reason: "armed" };
|
|
118
118
|
}
|
|
119
119
|
export async function prepareCapsAndWorkflow(input) {
|
|
120
|
-
const { spec, deps, parentSpecSeat, checkpointSeat, internals, session, sessionId, runId, hostTaskId, taskScope, taskRootFinal, model, thinking, lockedPreflight, toolEffects,
|
|
121
|
-
const roster = new RosterBuilder(toolEffects
|
|
120
|
+
const { spec, deps, parentSpecSeat, checkpointSeat, internals, session, sessionId, runId, hostTaskId, taskScope, taskRootFinal, model, thinking, lockedPreflight, toolEffects, toolFaceSnapshot, promptLean, resolvedInteractionPosture, harnessRef, askSeat, runClampSource, forwardEvent, inheritedGateForChildren, enrichSpecToolCtx, maybeOffload, requestReview, enterPlanMode, permissionMode, readDenyEntries, peerLaneActive, peerSendMessageBuiltIn, runnerSelf, delegated, sideCallBookRef } = input;
|
|
121
|
+
const roster = new RosterBuilder(toolEffects);
|
|
122
122
|
for (const t of spec.tools ?? []) {
|
|
123
123
|
const mounted = mountCallerTool(t);
|
|
124
124
|
roster.mount(mounted, { source: callerMountSource(mounted), mountedBy: "scenario" });
|
|
@@ -223,7 +223,7 @@ export async function prepareCapsAndWorkflow(input) {
|
|
|
223
223
|
const am = autoModeFace;
|
|
224
224
|
const classifierSeat = classifierSeatModel({ deps, main: model });
|
|
225
225
|
let classifierModel = classifierSeat.model;
|
|
226
|
-
if (await derivedRouteFallsBack({ seat: "auto-mode-classifier", derived: classifierModel, primary: model, brain: deps.brain, getApiKeyAndHeaders: spec.getApiKeyAndHeaders, onNotice: deps.onNotice, sessionId, runId, onBrokenPairing: autoModeClassifierFallbackOf(am.classifierFallback) === "none" ? "refuse" : "fall_back" })) {
|
|
226
|
+
if ((await derivedRouteFallsBack({ seat: "auto-mode-classifier", derived: classifierModel, primary: model, brain: deps.brain, getApiKeyAndHeaders: spec.getApiKeyAndHeaders, onNotice: deps.onNotice, sessionId, runId, onBrokenPairing: autoModeClassifierFallbackOf(am.classifierFallback) === "none" ? "refuse" : "fall_back" })).action === "fall_back") {
|
|
227
227
|
classifierModel = model;
|
|
228
228
|
}
|
|
229
229
|
announceClassifierRoleDefaulted({ onNotice: deps.onNotice, seat: { ...classifierSeat, model: classifierModel }, ...(sessionId !== undefined ? { sessionId } : {}), ...(runId !== undefined ? { runId } : {}) });
|
|
@@ -317,7 +317,7 @@ export async function prepareCapsAndWorkflow(input) {
|
|
|
317
317
|
parentDeferTools: toolFaceSnapshot.defer,
|
|
318
318
|
parentAlwaysLoadTools: toolFaceSnapshot.alwaysLoad,
|
|
319
319
|
...(toolFaceSnapshot.restoreGated !== undefined ? { parentRestoreGatedTools: toolFaceSnapshot.restoreGated } : {}),
|
|
320
|
-
|
|
320
|
+
...(promptLean !== undefined ? { parentPromptLean: promptLean } : {}),
|
|
321
321
|
models: deps.models,
|
|
322
322
|
agents: deps.agents,
|
|
323
323
|
builtinAgents: deps.builtinAgents,
|
|
@@ -352,6 +352,7 @@ export async function prepareCapsAndWorkflow(input) {
|
|
|
352
352
|
return mine.length > 0 ? mine : undefined;
|
|
353
353
|
} }
|
|
354
354
|
: {}),
|
|
355
|
+
...(internals?.holder !== undefined ? { holder: internals.holder } : {}),
|
|
355
356
|
parentSpecSeat, ...(internals?.questionFaceStripped === true ? { parentQuestionFaceStripped: true } : {}),
|
|
356
357
|
...(resolvedInteractionPosture !== undefined ? { parentInteractionPosture: resolvedInteractionPosture } : {}),
|
|
357
358
|
parentMemoryCaptureState: () => {
|
|
@@ -23,6 +23,7 @@ import type { Model } from "../../internal/llm.js";
|
|
|
23
23
|
import type { ThinkingLevel } from "../../internal/harness.js";
|
|
24
24
|
import { type MicroCompactMachine } from "../context-edit.js";
|
|
25
25
|
import { type CrossBoundaryPosture } from "../cross-boundary-taint.js";
|
|
26
|
+
import { type HostFloor } from "../host-floor.js";
|
|
26
27
|
import { recordedModeSeed } from "../checkpoint-store.js";
|
|
27
28
|
import { type ConfigDoorEntry, type LockedPreflight } from "../locked-config.js";
|
|
28
29
|
import { type ResolvedRole } from "../roles.js";
|
|
@@ -33,10 +34,18 @@ import { type UsageWindow } from "../usage-window-store.js";
|
|
|
33
34
|
import { type AskSeat } from "../wiring-manifest.js";
|
|
34
35
|
import type { PrepareResume, RunInternals, ToolFaceLists } from "./contracts.js";
|
|
35
36
|
import { resolveHost } from "../../prompt-assembly/select.js";
|
|
37
|
+
import type { PromptTraitName } from "../../prompt-assembly/catalog/schema.js";
|
|
36
38
|
import { type RosterSpec } from "./caller-roster.js";
|
|
37
39
|
export declare function limitConfigError(code: string, message: string): Error & {
|
|
38
40
|
code?: string;
|
|
39
41
|
};
|
|
42
|
+
/**
|
|
43
|
+
* `TaskSpec.principal`: absent (omitted, or the empty string the engine has always read as no principal) or a principal name. A
|
|
44
|
+
* principal that was PROVIDED and is no name (white space, an invisible or control character, a non-string) is refused at the task, on
|
|
45
|
+
* every leg a resume's re-supplied config included — read as "no principal" it would reach the unauthenticated floor, or, on a
|
|
46
|
+
* deployment that declared local-owner rules, the machine owner's standing approvals.
|
|
47
|
+
*/
|
|
48
|
+
export declare function assertPrincipalValue(raw: unknown): void;
|
|
40
49
|
/**
|
|
41
50
|
* Validate `TaskSpec.limits` at the door and return it unchanged.
|
|
42
51
|
*
|
|
@@ -52,8 +61,9 @@ export declare function limitConfigError(code: string, message: string): Error &
|
|
|
52
61
|
*/
|
|
53
62
|
export declare function resolveTaskLimits(limits: TaskLimits | undefined): TaskLimits | undefined;
|
|
54
63
|
/**
|
|
55
|
-
* Validate the
|
|
56
|
-
* config unchanged. Today that is
|
|
64
|
+
* Validate the members of `TaskSpec.attachments` that refuse a value they cannot read at the same door, and return the
|
|
65
|
+
* config unchanged. Today that is two: the mode-valued `totalTokensReminderMode` and the boolean switch `mcpUnavailable`
|
|
66
|
+
* (read by its own reader, `mcpUnavailableOn`, which the leg asks as well).
|
|
57
67
|
*
|
|
58
68
|
* WHY A DOOR AT ALL (坏值响亮度律): a knob whose bad value silently folds to the default is a knob the
|
|
59
69
|
* deployment believes is armed. `totalTokensReminderMode: "padded_countdown"` (underscore) or
|
|
@@ -86,36 +96,13 @@ export declare function resolveTaskLimits(limits: TaskLimits | undefined): TaskL
|
|
|
86
96
|
*/
|
|
87
97
|
export declare function resolveAttachmentsConfig(attachments: TaskSpec["attachments"]): TaskSpec["attachments"];
|
|
88
98
|
/**
|
|
89
|
-
*
|
|
90
|
-
* `
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
* as fable), case-normalized. Recognition set = CC's _Nr (startsWith "claude-fable-") + b9e
|
|
95
|
-
* (mythos-5). R3 system sections fork on the resulting fact.
|
|
96
|
-
*/
|
|
97
|
-
export declare function isFableFamilyModelId(id: string): boolean;
|
|
98
|
-
/**
|
|
99
|
-
* The SINGLE decision point for the two prompt-shape axes.
|
|
100
|
-
* Both were resolved in separate places with different mechanisms — `promptProfile` off a TaskSpec field,
|
|
101
|
-
* `fableMitigations` off a raw model-id prefix test — so "which shape does this task speak" had no one
|
|
102
|
-
* place to read. CC 2.1.220's counterpart is a model-registry `capabilities` array (one table drives
|
|
103
|
-
* `lean_prompt` + `fable_5_mitigations` alike; anchors/2.1.220/CC-218-220-DIFF.md §2).
|
|
104
|
-
*
|
|
105
|
-
* sema stays BYOM: we cannot key off a capability table for arbitrary model ids, so the RESOLUTION RULES
|
|
106
|
-
* are unchanged — profile: spec > inherited internals > "simple"; mitigations: model family. This is a
|
|
107
|
-
* consolidation, not a behavior change (the axes stay ORTHOGONAL: neither rewrites the other).
|
|
99
|
+
* The run's prompt traits — the one place prepare forms them: the model's declared set (`Model.promptTraits`, read
|
|
100
|
+
* through the model door: a retired `promptGuidance` or a name that is no trait refuses the task by name) with the
|
|
101
|
+
* task's switch on `lean_prompt` (`promptLean`, as the spec writes it — an engine-built child's spec carries its
|
|
102
|
+
* parent's), bundles expanded ({@link effectiveTraitsOf}). The reference's counterpart is a model registry's capability list; sema is
|
|
103
|
+
* BYOM, so the model entry carries the list and no model id is read.
|
|
108
104
|
*/
|
|
109
|
-
export declare function
|
|
110
|
-
id: string;
|
|
111
|
-
}, spec: {
|
|
112
|
-
promptProfile?: "simple" | "classic";
|
|
113
|
-
}, internals?: {
|
|
114
|
-
promptProfile?: "simple" | "classic";
|
|
115
|
-
}): {
|
|
116
|
-
promptProfile: "simple" | "classic";
|
|
117
|
-
fableMitigations: boolean;
|
|
118
|
-
};
|
|
105
|
+
export declare function resolvePromptTraits(model: Model, promptLean: boolean | undefined): ReadonlySet<PromptTraitName>;
|
|
119
106
|
export interface PrepareConfigDoorsInput {
|
|
120
107
|
/** borrowed-readonly — the snapshot spec (its roster is faces). NEVER mutated here: the per-task agents rebind returns a
|
|
121
108
|
* SHALLOW COPY on {@link PrepareConfigDoorsResult.spec} (only `tools` replaced, each rebuilt entry through the snapshot). */
|
|
@@ -130,7 +117,7 @@ export interface PrepareConfigDoorsInput {
|
|
|
130
117
|
/** borrowed-readonly — presence gates the resumeAt-conflict door and exempts the empty-objective
|
|
131
118
|
* door (a checkpoint resume passes `objective: ""` by design). */
|
|
132
119
|
resume?: PrepareResume | undefined;
|
|
133
|
-
/** borrowed-readonly — trusted engine channel:
|
|
120
|
+
/** borrowed-readonly — trusted engine channel: the spawning run's
|
|
134
121
|
* interaction posture, the engine question-strip flag. */
|
|
135
122
|
internals?: RunInternals | undefined;
|
|
136
123
|
}
|
|
@@ -142,8 +129,12 @@ export interface PrepareConfigDoorsResult {
|
|
|
142
129
|
/** owned — the frozen task-start copies of the caller's tool-face control arrays; the driver compiles the leg's selector
|
|
143
130
|
* from them, and the selector (with the disclosure lists) is the ONLY thing later face reads consult. Frozen-immutable. */
|
|
144
131
|
toolFaceLists: ToolFaceLists;
|
|
145
|
-
/** owned — the
|
|
146
|
-
|
|
132
|
+
/** owned — the task-level switch on the lean shape (`TaskSpec.promptLean`, validated; an engine-built child's spec
|
|
133
|
+
* carries its parent's): what the run hands its children and workflow agents, never its effective traits. */
|
|
134
|
+
promptLean: boolean | undefined;
|
|
135
|
+
/** owned, frozen-by-contract — the run's effective prompt traits ({@link resolvePromptTraits}): the catalog's
|
|
136
|
+
* variants, every overlay's `when.traits` and each tool's description variants select on them. */
|
|
137
|
+
promptTraits: ReadonlySet<PromptTraitName>;
|
|
147
138
|
/** owned — the host selector values (`TaskSpec.promptRole` / `TaskSpec.promptForm`, validated) the assembly selects on. */
|
|
148
139
|
promptHost: ReturnType<typeof resolveHost>;
|
|
149
140
|
/** owned — the run's binding (`TaskSpec.promptBinding`, validated): the selector value every overlay's `when.binding` reads. */
|
|
@@ -170,8 +161,6 @@ export interface PrepareConfigDoorsResult {
|
|
|
170
161
|
/** owned — the compaction model: explicit wins, else the `summarize` role, else undefined (main
|
|
171
162
|
* model fallback inside maybeCompact). NOT derivable from {@link resolvedRole}. */
|
|
172
163
|
compModel: Model | undefined;
|
|
173
|
-
/** owned — the mitigations half of the decision point (model-family fact). */
|
|
174
|
-
fableMitigations: boolean;
|
|
175
164
|
/** owned, frozen — model-gate DISCLOSURE data (the application itself already
|
|
176
165
|
* happened on {@link spec}: its `tools` is the survivor rebind when anything was removed).
|
|
177
166
|
* prepareTask emits the notices from this after the doors return (the onNotice station);
|
|
@@ -213,6 +202,8 @@ export interface PrepareConfigDoorsResult {
|
|
|
213
202
|
brainCallGuardrailMs: number | undefined;
|
|
214
203
|
/** owned — the screened cross-boundary posture: the deps seat read ONCE, a bad value refused; absent stays `undefined` (undeclared is its own fact). */
|
|
215
204
|
crossBoundaryPosture: CrossBoundaryPosture | undefined;
|
|
205
|
+
advisorTool: "disabled" | undefined;
|
|
206
|
+
hostFloor: HostFloor | undefined;
|
|
216
207
|
}
|
|
217
208
|
/** The microCompact knob door (坏值响亮度默认律, the sibling knob doors' form:
|
|
218
209
|
* interactionPosture / toolModelGate / staleToolResultOffload). Placement is load-bearing:
|
|
@@ -237,12 +228,13 @@ export declare const checkpointStoreSeat: (spec: {
|
|
|
237
228
|
export declare function assertResumeConfigRecord(config: unknown): void;
|
|
238
229
|
/** The spec the value doors read: a prepare's (its roster is faces) or a resume's re-supplied config (no objective, no session id). */
|
|
239
230
|
type ValueDoorSpec = Omit<TaskSpec, "tools" | "objective" | "sessionId" | "userAttachments"> & Partial<Pick<TaskSpec, "objective" | "sessionId">>;
|
|
240
|
-
type ConfigValueDoorsResult = Pick<PrepareConfigDoorsResult, "toolFaceLists" | "promptHost" | "promptBinding" | "lockedPreflight" | "microCompactKnob" | "memoryDelegationEvidence" | "memoryProvenance" | "memoryCapturePolicy" | "usageWindows" | "brainCallGuardrailMs" | "crossBoundaryPosture"> & {
|
|
231
|
+
type ConfigValueDoorsResult = Pick<PrepareConfigDoorsResult, "toolFaceLists" | "promptHost" | "promptBinding" | "lockedPreflight" | "microCompactKnob" | "memoryDelegationEvidence" | "memoryProvenance" | "memoryCapturePolicy" | "usageWindows" | "brainCallGuardrailMs" | "crossBoundaryPosture" | "advisorTool" | "promptLean" | "hostFloor"> & {
|
|
241
232
|
skillListingSeats: {
|
|
242
233
|
fraction: unknown;
|
|
243
234
|
maxDescChars: unknown;
|
|
244
235
|
};
|
|
245
236
|
skills: TaskSpec["skills"];
|
|
237
|
+
projectMemory: TaskSpec["projectMemory"];
|
|
246
238
|
};
|
|
247
239
|
/**
|
|
248
240
|
* The phase's VALUE doors as ONE function with two callers — each judges a declared value against its own vocabulary, reading only the
|
|
@@ -257,6 +249,7 @@ export declare function configValueDoors(input: {
|
|
|
257
249
|
deps: RunnerDeps;
|
|
258
250
|
resumeLeg: boolean;
|
|
259
251
|
sessions: SessionStore;
|
|
252
|
+
holder?: string | undefined;
|
|
260
253
|
}, enter?: ConfigDoorEntry): ConfigValueDoorsResult;
|
|
261
254
|
/**
|
|
262
255
|
* The doors a RESUMED leg's prepare refuses at, run as one screen BEFORE the claim — prepare's own functions, so a refusal carries
|
|
@@ -271,6 +264,6 @@ export declare function configValueDoors(input: {
|
|
|
271
264
|
* corrected resume redeems the same token. A throw that is none of prepare's codes leaves as it was thrown. Returns the config the
|
|
272
265
|
* leg is handed: the caller's, its MCP servers and A2A peers the frozen entries the lock layer judged (read once, dialed as judged).
|
|
273
266
|
*/
|
|
274
|
-
export declare function refuseResumeDoors<C extends ValueDoorSpec & Pick<TaskSpec, "userAttachments">>(config: C, recordedGate: Parameters<typeof recordedModeSeed>[0], deps: RunnerDeps, sessions: SessionStore): C;
|
|
267
|
+
export declare function refuseResumeDoors<C extends ValueDoorSpec & Pick<TaskSpec, "userAttachments">>(config: C, recordedGate: Parameters<typeof recordedModeSeed>[0], deps: RunnerDeps, sessions: SessionStore, holder?: string): C;
|
|
275
268
|
export declare function prepareConfigDoors(input: PrepareConfigDoorsInput): PrepareConfigDoorsResult;
|
|
276
269
|
export {};
|
|
@@ -3,8 +3,10 @@ import { assertContainmentFaceValue } from "../../tools/fs/index.js";
|
|
|
3
3
|
import { MICRO_COMPACT_MACHINES } from "../context-edit.js";
|
|
4
4
|
import { assertAddOnlySeats } from "../child-clamp-seats.js";
|
|
5
5
|
import { CROSS_BOUNDARY_POSTURES } from "../cross-boundary-taint.js";
|
|
6
|
+
import { compileHostFloor } from "../host-floor.js";
|
|
6
7
|
import { assertNoRetiredRunnerDeps } from "./retired-runner-deps.js";
|
|
7
8
|
import { recordedModeSeed, resolveCheckpointStore } from "../checkpoint-store.js";
|
|
9
|
+
import { assertCheckpointStoreJudgesHolder, assertHolderValue } from "../checkpoint-generation.js";
|
|
8
10
|
import { asResumeConfigRefusal, refusePermissionModeDoors } from "../mode-policy.js";
|
|
9
11
|
import { resolveOutputStyleFrame } from "../output-style.js";
|
|
10
12
|
import { screenUserAttachments } from "../user-attachment.js";
|
|
@@ -15,20 +17,24 @@ import { assertAutoConsolidationWirable } from "./memory-consolidation-driver.js
|
|
|
15
17
|
import { isModelPriced, malformedPricingField, modelCostToPricing } from "../pricing.js";
|
|
16
18
|
import { ENTER_AS_IS, preflightLockedConfig } from "../locked-config.js";
|
|
17
19
|
import { assertRetentionCapability } from "../retention.js";
|
|
18
|
-
import { resolveModel, resolveTaskModel, roleModelIfSet } from "../roles.js";
|
|
20
|
+
import { resolveModel, resolveTaskModel, roleModelIfSet, screenRoleMap } from "../roles.js";
|
|
19
21
|
import { resolveSkillListingBudget } from "../skill-listing-budget.js";
|
|
20
22
|
import { describeRejectedValue } from "../tool-search-setting.js";
|
|
21
|
-
import {
|
|
23
|
+
import { assertAdvisorModelShape } from "../advisor-verdict.js";
|
|
24
|
+
import { applyToolModelGate, assertRestoreGatedToolsValue } from "../tool-model-gate.js";
|
|
22
25
|
import { resolveUsageWindows } from "../usage-window-store.js";
|
|
23
26
|
import { deriveAskEffective, resolveAskSeat, resolveQuestionSeam, screenApprovalReach } from "../wiring-manifest.js";
|
|
24
|
-
import { resolveHost } from "../../prompt-assembly/select.js";
|
|
27
|
+
import { effectiveTraitsOf, readModelPromptTraits, resolveHost, resolvePromptLean } from "../../prompt-assembly/select.js";
|
|
28
|
+
import { assertNoRetiredKeys, RETIRED_MODEL_KEYS } from "../retired-keys.js";
|
|
25
29
|
import { resolvePromptBinding } from "../../prompt-assembly/overlay.js";
|
|
26
30
|
import { assertPeerPresenceValue } from "../../agents/peer-directory.js";
|
|
27
31
|
import { snapshotDefinitionLists } from "../../agents/tool-filter.js";
|
|
28
|
-
import { TOTAL_TOKENS_REMINDER_MODES } from "./turn-attachments.js";
|
|
29
|
-
import { rosterFaceOf } from "./caller-roster.js";
|
|
32
|
+
import { mcpUnavailableOn, TOTAL_TOKENS_REMINDER_MODES } from "./turn-attachments.js";
|
|
33
|
+
import { refuseRetiredMember, rosterFaceOf } from "./caller-roster.js";
|
|
30
34
|
import { assertToolBoundaryLegs } from "../tool-roster.js";
|
|
35
|
+
import { assertToolCardDeclarations } from "../../prompt-assembly/tool-catalog.js";
|
|
31
36
|
import { refuseRenamedDelegationMounts } from "./sub-agent-deny-lists.js";
|
|
37
|
+
import { readPrincipal } from "../principal-name.js";
|
|
32
38
|
const TASK_LIMIT_KEY_DICT = {
|
|
33
39
|
maxTokens: true,
|
|
34
40
|
maxCostUsd: true,
|
|
@@ -53,6 +59,12 @@ export function limitConfigError(code, message) {
|
|
|
53
59
|
e.code = code;
|
|
54
60
|
return e;
|
|
55
61
|
}
|
|
62
|
+
export function assertPrincipalValue(raw) {
|
|
63
|
+
const reading = readPrincipal(raw);
|
|
64
|
+
if (reading.kind === "invalid") {
|
|
65
|
+
throw limitConfigError("config.invalid_argument", `TaskSpec.principal must be a principal name when present (got ${reading.fault}) — omit the key for a task with no principal; a provided value that names nobody is refused, never read as "no principal".`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
56
68
|
export function resolveTaskLimits(limits) {
|
|
57
69
|
if (limits === undefined)
|
|
58
70
|
return undefined;
|
|
@@ -98,6 +110,7 @@ export function resolveTaskLimits(limits) {
|
|
|
98
110
|
export function resolveAttachmentsConfig(attachments) {
|
|
99
111
|
if (attachments === null || (typeof attachments !== "object" && typeof attachments !== "function"))
|
|
100
112
|
return attachments;
|
|
113
|
+
mcpUnavailableOn(attachments);
|
|
101
114
|
const mode = attachments.totalTokensReminderMode;
|
|
102
115
|
if (mode !== undefined) {
|
|
103
116
|
const legal = TOTAL_TOKENS_REMINDER_MODES;
|
|
@@ -108,15 +121,9 @@ export function resolveAttachmentsConfig(attachments) {
|
|
|
108
121
|
}
|
|
109
122
|
return attachments;
|
|
110
123
|
}
|
|
111
|
-
export function
|
|
112
|
-
|
|
113
|
-
return
|
|
114
|
-
}
|
|
115
|
-
export function resolveModelPromptTraits(model, spec, internals) {
|
|
116
|
-
return {
|
|
117
|
-
promptProfile: spec.promptProfile ?? internals?.promptProfile ?? "simple",
|
|
118
|
-
fableMitigations: isFableFamilyModelId(model.id),
|
|
119
|
-
};
|
|
124
|
+
export function resolvePromptTraits(model, promptLean) {
|
|
125
|
+
assertNoRetiredKeys(model, RETIRED_MODEL_KEYS, "Model");
|
|
126
|
+
return effectiveTraitsOf(readModelPromptTraits(model), promptLean);
|
|
120
127
|
}
|
|
121
128
|
function microCompactConfigError(field, value, legal) {
|
|
122
129
|
let shown;
|
|
@@ -155,7 +162,7 @@ function resolveClearOnRejection(bag) {
|
|
|
155
162
|
}
|
|
156
163
|
return declared ?? true;
|
|
157
164
|
}
|
|
158
|
-
function
|
|
165
|
+
function closedWord(raw, seat, words, absent, code, why) {
|
|
159
166
|
if (raw === undefined)
|
|
160
167
|
return absent;
|
|
161
168
|
const word = words.find((w) => w === raw);
|
|
@@ -163,7 +170,7 @@ function deploymentWord(raw, seat, words, absent, code, why) {
|
|
|
163
170
|
return word;
|
|
164
171
|
const got = typeof raw === "string" ? JSON.stringify(raw.length > 64 ? `${raw.slice(0, 64)}…` : raw) : raw === null ? "null" : Array.isArray(raw) ? "an array" : typeof raw;
|
|
165
172
|
const spelled = words.map((w) => `"${w}"`);
|
|
166
|
-
throw limitConfigError(code,
|
|
173
|
+
throw limitConfigError(code, `${seat} must be ${spelled.length > 1 ? `${spelled.slice(0, -1).join(", ")} or ` : ""}${spelled.at(-1)} when present (got ${got}) — ${why}`);
|
|
167
174
|
}
|
|
168
175
|
export const checkpointStoreSeat = (spec) => (spec.checkpointStore !== undefined ? "taskConfig" : "deps");
|
|
169
176
|
export function assertResumeConfigRecord(config) {
|
|
@@ -172,8 +179,9 @@ export function assertResumeConfigRecord(config) {
|
|
|
172
179
|
}
|
|
173
180
|
}
|
|
174
181
|
export function configValueDoors(input, enter = ENTER_AS_IS) {
|
|
175
|
-
const { spec, deps, resumeLeg, sessions } = input;
|
|
182
|
+
const { spec, deps, resumeLeg, sessions, holder } = input;
|
|
176
183
|
enter("deps", () => assertNoRetiredRunnerDeps(deps));
|
|
184
|
+
enter("taskConfig", () => assertPrincipalValue(spec.principal));
|
|
177
185
|
enter("taskConfig", () => assertPeerPresenceValue(spec.peerPresence));
|
|
178
186
|
enter("taskConfig", () => assertRestoreGatedToolsValue(spec.restoreGatedTools));
|
|
179
187
|
const microCompactKnob = enter("deps", () => resolveMicroCompactKnob(deps.microCompact));
|
|
@@ -212,7 +220,10 @@ export function configValueDoors(input, enter = ENTER_AS_IS) {
|
|
|
212
220
|
: undefined,
|
|
213
221
|
};
|
|
214
222
|
const promptHost = enter("taskConfig", () => resolveHost(spec));
|
|
223
|
+
enter("deps", () => screenRoleMap(deps.roles, "RunnerDeps.roles"));
|
|
224
|
+
enter("taskConfig", () => screenRoleMap(spec.roles, "TaskSpec.roles"));
|
|
215
225
|
const promptBinding = enter("taskConfig", () => resolvePromptBinding(spec));
|
|
226
|
+
const promptLean = enter("taskConfig", () => resolvePromptLean(spec));
|
|
216
227
|
if (spec.resumeAt !== undefined)
|
|
217
228
|
enter("taskConfig", () => {
|
|
218
229
|
if (resumeLeg) {
|
|
@@ -231,10 +242,15 @@ export function configValueDoors(input, enter = ENTER_AS_IS) {
|
|
|
231
242
|
enter("taskConfig", () => assertContainmentFaceValue(spec.writeFace, "write", "spec"));
|
|
232
243
|
enter("deps", () => assertContainmentFaceValue(deps.writeFace, "write", "deps"));
|
|
233
244
|
enter("taskConfig", () => assertAddOnlySeats(spec));
|
|
234
|
-
const memoryDelegationEvidence = enter("deps", () =>
|
|
235
|
-
const memoryProvenance = enter("deps", () =>
|
|
236
|
-
const memoryCapturePolicy = enter("deps", () =>
|
|
237
|
-
const crossBoundaryPosture = enter("deps", () =>
|
|
245
|
+
const memoryDelegationEvidence = enter("deps", () => closedWord(deps.memoryDelegationEvidence, "RunnerDeps.memoryDelegationEvidence", ["static-face", "attested-only"], "static-face", "config.memory_delegation_evidence", "an unevaluable evidence standard is refused loudly, never folded to either standard."));
|
|
246
|
+
const memoryProvenance = enter("deps", () => closedWord(deps.memoryProvenance, "RunnerDeps.memoryProvenance", ["off", "carry"], "carry", "config.memory_provenance", "an unevaluable provenance mode is refused loudly, never folded to either mode."));
|
|
247
|
+
const memoryCapturePolicy = enter("deps", () => closedWord(deps.memoryCapturePolicy, "RunnerDeps.memoryCapturePolicy", ["open", "governed", "capture-required"], "open", "config.memory_capture_policy", "an unevaluable capture posture is refused loudly, never folded to any posture (the fault arms differ per posture, so a guess would pick a polarity nobody configured)."));
|
|
248
|
+
const crossBoundaryPosture = enter("deps", () => closedWord(deps.crossBoundaryPosture, "RunnerDeps.crossBoundaryPosture", CROSS_BOUNDARY_POSTURES, undefined, "config.cross_boundary_posture", "an unevaluable posture is refused loudly, never folded to either word (an absent seat is undeclared, which is its own fact)."));
|
|
249
|
+
const hostFloor = enter("deps", () => compileHostFloor(deps.hostFloor));
|
|
250
|
+
const advisorTool = enter("deps", () => closedWord(deps.advisorTool, "RunnerDeps.advisorTool", ["disabled"], undefined, "config.advisor_tool_invalid", "the switch has one word; anything else is refused, never read as either state."));
|
|
251
|
+
if (advisorTool === undefined)
|
|
252
|
+
enter("taskConfig", () => assertAdvisorModelShape(spec.advisorModel));
|
|
253
|
+
const projectMemory = enter("taskConfig", () => closedWord(spec.projectMemory, "TaskSpec.projectMemory", ["disabled"], undefined, "config.invalid_argument", "the switch has one word; omit the key to leave the deployment's project context in force."));
|
|
238
254
|
enter("deps", () => assertAutoConsolidationWirable(deps));
|
|
239
255
|
if (spec.resumeAtMode !== undefined)
|
|
240
256
|
enter("taskConfig", () => {
|
|
@@ -305,6 +321,8 @@ export function configValueDoors(input, enter = ENTER_AS_IS) {
|
|
|
305
321
|
const taskGuardrail = spec.limits?.brainCallGuardrailMs;
|
|
306
322
|
const brainCallGuardrailMs = enter(taskGuardrail != null ? "taskConfig" : "deps", () => resolveBrainCallGuardrailMs(taskGuardrail ?? deps.brainCallGuardrailMs));
|
|
307
323
|
const checkpointStore = enter(checkpointStoreSeat(spec), () => resolveCheckpointStore(spec, deps));
|
|
324
|
+
enter("deps", () => assertHolderValue(holder));
|
|
325
|
+
enter(checkpointStoreSeat(spec), () => assertCheckpointStoreJudgesHolder(checkpointStoreSeat(spec) === "taskConfig" ? "TaskSpec.checkpointStore" : "RunnerDeps.checkpointStore", checkpointStore, holder));
|
|
308
326
|
const taskStore = checkpointStoreSeat(spec) === "taskConfig" ? checkpointStore : undefined;
|
|
309
327
|
const retention = { policy: deps.retentionPolicy, locked: lockedPreflight.lockedKeys.has("retentionPolicy") };
|
|
310
328
|
enter("deps", () => assertRetentionCapability({
|
|
@@ -317,9 +335,9 @@ export function configValueDoors(input, enter = ENTER_AS_IS) {
|
|
|
317
335
|
}));
|
|
318
336
|
if (taskStore !== undefined)
|
|
319
337
|
enter("taskConfig", () => assertRetentionCapability({ ...retention, stores: [{ name: "checkpointStore", store: taskStore }] }));
|
|
320
|
-
return { toolFaceLists, promptHost, promptBinding, lockedPreflight, skillListingSeats, skills, microCompactKnob, memoryDelegationEvidence, memoryProvenance, memoryCapturePolicy, usageWindows, brainCallGuardrailMs, crossBoundaryPosture };
|
|
338
|
+
return { toolFaceLists, promptHost, promptBinding, promptLean, lockedPreflight, skillListingSeats, skills, projectMemory, microCompactKnob, memoryDelegationEvidence, memoryProvenance, memoryCapturePolicy, usageWindows, brainCallGuardrailMs, crossBoundaryPosture, advisorTool, hostFloor };
|
|
321
339
|
}
|
|
322
|
-
export function refuseResumeDoors(config, recordedGate, deps, sessions) {
|
|
340
|
+
export function refuseResumeDoors(config, recordedGate, deps, sessions, holder) {
|
|
323
341
|
asResumeConfigRefusal("taskConfig", () => {
|
|
324
342
|
refusePermissionModeDoors(config);
|
|
325
343
|
resolveOutputStyleFrame(config.outputStyle);
|
|
@@ -327,18 +345,20 @@ export function refuseResumeDoors(config, recordedGate, deps, sessions) {
|
|
|
327
345
|
screenUserInvokedSkills(config);
|
|
328
346
|
screenUserAttachments(config.userAttachments, { resumeLeg: true });
|
|
329
347
|
assertToolBoundaryLegs(config.tools);
|
|
348
|
+
assertToolCardDeclarations(config.tools);
|
|
330
349
|
});
|
|
331
|
-
const { lockedPreflight, skills } = configValueDoors({ spec: config, deps, resumeLeg: true, sessions }, asResumeConfigRefusal);
|
|
350
|
+
const { lockedPreflight, skills } = configValueDoors({ spec: config, deps, resumeLeg: true, sessions, holder }, asResumeConfigRefusal);
|
|
332
351
|
asResumeConfigRefusal("inheritedGate", () => void recordedModeSeed(recordedGate));
|
|
333
352
|
return { ...config, ...(config.mcp !== undefined ? { mcp: lockedPreflight.mcp ?? [] } : {}), ...(config.a2a !== undefined ? { a2a: lockedPreflight.a2a ?? [] } : {}), skills };
|
|
334
353
|
}
|
|
335
354
|
export function prepareConfigDoors(input) {
|
|
336
355
|
const { deps, sessions, resume, internals } = input;
|
|
337
356
|
assertToolBoundaryLegs(input.spec.tools);
|
|
357
|
+
assertToolCardDeclarations(input.spec.tools);
|
|
338
358
|
let spec = input.spec;
|
|
339
|
-
const { toolFaceLists, promptHost, promptBinding, lockedPreflight, skillListingSeats, skills, microCompactKnob, memoryDelegationEvidence, memoryProvenance, memoryCapturePolicy, usageWindows, brainCallGuardrailMs, crossBoundaryPosture } = configValueDoors({ spec, deps, resumeLeg: resume !== undefined, sessions });
|
|
340
|
-
|
|
341
|
-
|
|
359
|
+
const { toolFaceLists, promptHost, promptBinding, promptLean, lockedPreflight, skillListingSeats, skills, projectMemory, microCompactKnob, memoryDelegationEvidence, memoryProvenance, memoryCapturePolicy, usageWindows, brainCallGuardrailMs, crossBoundaryPosture, advisorTool, hostFloor } = configValueDoors({ spec, deps, resumeLeg: resume !== undefined, sessions, holder: internals?.holder });
|
|
360
|
+
const doorRead = (value) => ({ value, enumerable: value !== undefined, writable: false, configurable: false });
|
|
361
|
+
spec = Object.create(Object.getPrototypeOf(spec), { ...Object.getOwnPropertyDescriptors(spec), skills: doorRead(skills), projectMemory: doorRead(projectMemory) });
|
|
342
362
|
const resolvedInteractionPosture = spec.interactionPosture ?? internals?.parentInteractionPosture ?? deps.interactionPosture;
|
|
343
363
|
const askSeat = resolveAskSeat(spec, deps);
|
|
344
364
|
{
|
|
@@ -404,7 +424,10 @@ export function prepareConfigDoors(input) {
|
|
|
404
424
|
if (typeof t.withAgents !== "function")
|
|
405
425
|
return t;
|
|
406
426
|
const rebuilt = t.withAgents(perTask);
|
|
407
|
-
|
|
427
|
+
const restamp = t.modelGate !== undefined && rebuilt.modelGate === undefined;
|
|
428
|
+
if (restamp)
|
|
429
|
+
refuseRetiredMember(rebuilt, index);
|
|
430
|
+
return rosterFaceOf(restamp ? { ...rebuilt, modelGate: t.modelGate } : rebuilt, index);
|
|
408
431
|
}),
|
|
409
432
|
};
|
|
410
433
|
}
|
|
@@ -441,7 +464,7 @@ export function prepareConfigDoors(input) {
|
|
|
441
464
|
throw limitConfigError("config.limit_invalid", `TaskSpec.${dollarCeiling} is a money ceiling, but the price table for model ${JSON.stringify(model.id)} declares an unevaluable ${bad} — every rate must be a finite, non-negative number of USD per 1M tokens. A table like this prices every turn at zero (or below), so the ceiling would never trip: refused rather than enforced in name only.`);
|
|
442
465
|
}
|
|
443
466
|
}
|
|
444
|
-
const
|
|
467
|
+
const promptTraits = resolvePromptTraits(model, promptLean);
|
|
445
468
|
const gateDecision = applyToolModelGate({
|
|
446
469
|
tools: spec.tools,
|
|
447
470
|
modelId: model.id,
|
|
@@ -459,13 +482,14 @@ export function prepareConfigDoors(input) {
|
|
|
459
482
|
discardedEnvRaw: gateDecision.discardedEnvRaw,
|
|
460
483
|
});
|
|
461
484
|
const thinking = spec.thinking ?? resolvedRole.thinking ?? model.defaultThinking;
|
|
462
|
-
const compModel = spec.compactionModel
|
|
463
|
-
? resolveModel(spec.compactionModel, deps.models)
|
|
485
|
+
const compModel = spec.compactionModel !== undefined
|
|
486
|
+
? resolveModel(spec.compactionModel, deps.models, "TaskSpec.compactionModel")
|
|
464
487
|
: roleModelIfSet("summarize", spec, deps);
|
|
465
488
|
return {
|
|
466
489
|
spec,
|
|
467
490
|
toolFaceLists,
|
|
468
|
-
|
|
491
|
+
promptLean,
|
|
492
|
+
promptTraits,
|
|
469
493
|
promptHost,
|
|
470
494
|
promptBinding,
|
|
471
495
|
lockedPreflight,
|
|
@@ -476,12 +500,11 @@ export function prepareConfigDoors(input) {
|
|
|
476
500
|
model,
|
|
477
501
|
thinking,
|
|
478
502
|
compModel,
|
|
479
|
-
fableMitigations,
|
|
480
503
|
modelGate,
|
|
481
504
|
memoryDelegationEvidence,
|
|
482
505
|
skillListingBudget,
|
|
483
506
|
memoryProvenance,
|
|
484
|
-
memoryCapturePolicy, crossBoundaryPosture,
|
|
507
|
+
memoryCapturePolicy, crossBoundaryPosture, advisorTool, hostFloor,
|
|
485
508
|
usageWindows,
|
|
486
509
|
brainCallGuardrailRef,
|
|
487
510
|
brainCallGuardrailMs,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Model } from "../../internal/llm.js";
|
|
2
|
+
import type { PromptTraitName } from "../../prompt-assembly/catalog/schema.js";
|
|
2
3
|
import type { MaterializedA2a } from "../a2a.js";
|
|
3
4
|
import type { MaterializedMcp } from "../mcp.js";
|
|
4
5
|
import type { RunnerDeps, TaskSpec } from "../types.js";
|
|
@@ -11,7 +12,7 @@ export interface PrepareDeferClassifyInput {
|
|
|
11
12
|
deps: Pick<RunnerDeps, "deferMode" | "toolSearch">;
|
|
12
13
|
/** borrowed-mutable — the shared mount array (later refs alias it; in-place contract, never
|
|
13
14
|
* re-created). Mutated here, in order: `splice` of every excluded name; element REPLACEMENT with a
|
|
14
|
-
* shallow copy for the
|
|
15
|
+
* shallow copy for a description variant chosen by the run's traits (the caller's ToolSpec object is never
|
|
15
16
|
* mutated); `splice` of a retracted memory group. After this phase: the content-origin wrap
|
|
16
17
|
* (element replacement with the wrapped object), the disclosure mount, the MCP refresh re-splice. Since
|
|
17
18
|
* Every one of those writes is a builder verb (`unmountWhere` / `replaceAt`). */
|
|
@@ -22,8 +23,8 @@ export interface PrepareDeferClassifyInput {
|
|
|
22
23
|
handsEnabled: boolean;
|
|
23
24
|
/** borrowed-readonly — the spec-time precomputation the invariant checks the post-exclusion roster against: a mismatch is an engine bug, thrown. */
|
|
24
25
|
fullShellReachable: boolean;
|
|
25
|
-
/** borrowed-readonly — the
|
|
26
|
-
|
|
26
|
+
/** borrowed-readonly — the run's effective prompt traits (each tool's description variants are chosen on them). */
|
|
27
|
+
promptTraits: ReadonlySet<PromptTraitName>;
|
|
27
28
|
/** borrowed-readonly — the resolved model (the deferral gate's threshold reads its context window). */
|
|
28
29
|
model: Model;
|
|
29
30
|
/** borrowed-readonly — the materialized MCP roster; only `tools` is read (protocol names; `mcpAlwaysLoad` self-declarations lose to an operator defer). */
|