@sema-agent/core 7.54.1 → 7.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +950 -0
- package/dist/agents/agent-transcript-tool.js +2 -1
- package/dist/agents/builtin-agents.d.ts +12 -14
- package/dist/agents/cascade.js +1 -1
- package/dist/agents/cc-peer-directory.d.ts +36 -0
- package/dist/agents/cc-peer-directory.js +139 -0
- package/dist/agents/cc-peer-wire.d.ts +105 -0
- package/dist/agents/cc-peer-wire.js +98 -0
- package/dist/agents/cc-uds-peer-channel.d.ts +40 -0
- package/dist/agents/cc-uds-peer-channel.js +457 -0
- package/dist/agents/child-model-seat.d.ts +0 -11
- package/dist/agents/child-model-seat.js +0 -3
- package/dist/agents/cross-session-envelope.d.ts +4 -1
- package/dist/agents/cross-session-envelope.js +8 -1
- package/dist/agents/cross-session-judge.d.ts +2 -2
- package/dist/agents/list-agents-tool.d.ts +3 -1
- package/dist/agents/list-agents-tool.js +9 -8
- package/dist/agents/observer.d.ts +4 -5
- package/dist/agents/observer.js +2 -1
- package/dist/agents/peer-admission.d.ts +6 -0
- package/dist/agents/peer-admission.js +4 -1
- package/dist/agents/peer-directory.d.ts +65 -13
- package/dist/agents/peer-directory.js +90 -25
- package/dist/agents/peer-notices.d.ts +1 -1
- package/dist/agents/peer-session-drain.d.ts +3 -1
- package/dist/agents/peer-session-drain.js +3 -2
- package/dist/agents/read-inbox-tool.js +2 -1
- package/dist/agents/repair-loop.js +2 -2
- package/dist/agents/retain-ledger.d.ts +1 -1
- package/dist/agents/roster-store.d.ts +1 -1
- package/dist/agents/send-message-tool.d.ts +10 -0
- package/dist/agents/send-message-tool.js +37 -8
- package/dist/agents/subagent.d.ts +39 -82
- package/dist/agents/subagent.js +109 -106
- package/dist/agents/tool-filter.d.ts +31 -46
- package/dist/agents/tool-filter.js +13 -33
- package/dist/agents/verify.d.ts +6 -5
- package/dist/agents/verify.js +3 -3
- package/dist/brain/anthropic.js +43 -81
- package/dist/brain/errors.d.ts +15 -0
- package/dist/brain/errors.js +10 -0
- package/dist/brain/media-degrade.d.ts +18 -7
- package/dist/brain/media-degrade.js +13 -2
- package/dist/brain/model-capability.d.ts +37 -0
- package/dist/brain/model-capability.js +34 -0
- package/dist/brain/model-presets.d.ts +6 -12
- package/dist/brain/model-presets.js +1 -6
- package/dist/brain/open-responses.js +27 -35
- package/dist/brain/openai.js +30 -98
- package/dist/brain/provider-dialect.d.ts +39 -3
- package/dist/brain/provider-dialect.js +28 -0
- package/dist/brain/reasoning-request.d.ts +96 -0
- package/dist/brain/reasoning-request.js +174 -0
- package/dist/brain/reasoning.d.ts +12 -12
- package/dist/brain/reasoning.js +4 -3
- package/dist/brain/request-params.d.ts +62 -9
- package/dist/brain/request-params.js +42 -7
- package/dist/brain/retry.d.ts +1 -1
- package/dist/brain/route-adjudicator.d.ts +15 -0
- package/dist/brain/route-adjudicator.js +15 -0
- package/dist/brain/status-sink.d.ts +20 -0
- package/dist/brain/status-sink.js +7 -0
- package/dist/brain/stream-engine.js +6 -5
- package/dist/brain/stream-shared.d.ts +1 -1
- package/dist/core/a2a.d.ts +2 -1
- package/dist/core/a2a.js +19 -13
- package/dist/core/advisor-verdict.d.ts +120 -0
- package/dist/core/advisor-verdict.js +92 -0
- package/dist/core/agent-definition.d.ts +17 -8
- package/dist/core/allow-entry.d.ts +69 -36
- package/dist/core/allow-entry.js +81 -52
- package/dist/core/allow-rule-shadow.d.ts +10 -3
- package/dist/core/approval-object.d.ts +2 -1
- package/dist/core/approval-object.js +6 -6
- package/dist/core/ask-origin.d.ts +127 -29
- package/dist/core/ask-origin.js +87 -25
- package/dist/core/ask-question.d.ts +51 -8
- package/dist/core/ask-question.js +12 -7
- package/dist/core/ask-unresolvable-notice.d.ts +8 -3
- package/dist/core/ask-unresolvable-notice.js +16 -2
- package/dist/core/auto-compaction.d.ts +11 -8
- package/dist/core/auto-compaction.js +4 -2
- package/dist/core/auto-mode-arming.d.ts +2 -2
- package/dist/core/auto-mode-defaults.d.ts +8 -8
- package/dist/core/auto-mode-prompt-assets.d.ts +3 -3
- package/dist/core/auto-mode-prompt.d.ts +1 -1
- package/dist/core/auto-mode.d.ts +17 -9
- package/dist/core/auto-mode.js +9 -6
- package/dist/core/background-agent-store.d.ts +3 -3
- package/dist/core/canonical-json.d.ts +1 -1
- package/dist/core/canonical-json.js +2 -2
- package/dist/core/checkpoint-generation.d.ts +53 -0
- package/dist/core/checkpoint-generation.js +35 -0
- package/dist/core/checkpoint-queries.d.ts +180 -0
- package/dist/core/checkpoint-queries.js +272 -0
- package/dist/core/checkpoint-requirements.d.ts +19 -4
- package/dist/core/checkpoint-requirements.js +8 -14
- package/dist/core/checkpoint-store.d.ts +165 -72
- package/dist/core/checkpoint-store.js +79 -82
- package/dist/core/child-clamp-seats.d.ts +6 -0
- package/dist/core/child-clamp-seats.js +3 -16
- package/dist/core/compliance.d.ts +2 -2
- package/dist/core/context-edit.d.ts +6 -7
- package/dist/core/cross-boundary-taint.d.ts +11 -4
- package/dist/core/cross-boundary-taint.js +3 -3
- package/dist/core/decision-receipt.d.ts +37 -3
- package/dist/core/decision-receipt.js +19 -19
- package/dist/core/delegation-not-started.d.ts +6 -0
- package/dist/core/delegation-not-started.js +17 -0
- package/dist/core/effective-path-target.d.ts +1 -1
- package/dist/core/engine-attestation.d.ts +93 -0
- package/dist/core/engine-attestation.js +70 -0
- package/dist/core/engine-capabilities.d.ts +4 -1
- package/dist/core/engine-capabilities.js +1 -1
- package/dist/core/engine-notice.d.ts +45 -12
- package/dist/core/exec-output-tail.d.ts +1 -1
- package/dist/core/file-history-retention.d.ts +1 -1
- package/dist/core/file-history-store.d.ts +147 -21
- package/dist/core/file-history-store.js +58 -32
- package/dist/core/gate-fold.d.ts +1 -1
- package/dist/core/gate-fold.js +24 -11
- package/dist/core/gate-lanes.js +81 -68
- package/dist/core/gate-outcome.d.ts +40 -6
- package/dist/core/gate-outcome.js +56 -0
- package/dist/core/governance-codes.d.ts +17 -3
- package/dist/core/governance-codes.js +16 -0
- package/dist/core/hands-band.d.ts +1 -1
- package/dist/core/hooks.d.ts +21 -20
- package/dist/core/hooks.js +3 -1
- package/dist/core/host-floor.d.ts +128 -0
- package/dist/core/host-floor.js +206 -0
- package/dist/core/host-target.d.ts +84 -0
- package/dist/core/host-target.js +92 -0
- package/dist/core/image-downsample.d.ts +1 -1
- package/dist/core/lsp-diagnostics.d.ts +4 -4
- package/dist/core/lsp.d.ts +3 -3
- package/dist/core/mailbox-store.d.ts +4 -0
- package/dist/core/mcp-connection-pool.d.ts +18 -2
- package/dist/core/mcp-connection-pool.js +53 -6
- package/dist/core/mcp-failure.d.ts +23 -4
- package/dist/core/mcp-failure.js +26 -11
- package/dist/core/mcp-listing-drift.d.ts +10 -0
- package/dist/core/mcp-listing-drift.js +6 -0
- package/dist/core/mcp-server-link.d.ts +173 -0
- package/dist/core/mcp-server-link.js +127 -0
- package/dist/core/mcp-server-spec.d.ts +4 -2
- package/dist/core/mcp-session-end.d.ts +26 -0
- package/dist/core/mcp-session-end.js +29 -0
- package/dist/core/mcp-startup-request.d.ts +17 -0
- package/dist/core/mcp-startup-request.js +17 -0
- package/dist/core/mcp.d.ts +17 -13
- package/dist/core/mcp.js +240 -189
- package/dist/core/media-byte-cap.d.ts +1 -1
- package/dist/core/memory-engine/delegation-settlement.js +15 -24
- package/dist/core/memory-engine/engine.d.ts +9 -9
- package/dist/core/memory-engine/engine.js +4 -4
- package/dist/core/memory-engine/layout.d.ts +60 -8
- package/dist/core/memory-engine/layout.js +65 -6
- package/dist/core/memory-engine/provenance-wording.d.ts +1 -1
- package/dist/core/memory-engine/tools.js +4 -1
- package/dist/core/mode-policy.d.ts +1 -1
- package/dist/core/model-seat.d.ts +10 -3
- package/dist/core/mods/classic-events.d.ts +67 -0
- package/dist/core/mods/classic-events.js +1 -0
- package/dist/core/mods/dollar.d.ts +13 -0
- package/dist/core/mods/extension-call.d.ts +31 -0
- package/dist/core/mods/extension-call.js +43 -0
- package/dist/core/mods/kernel/dispatch.d.ts +20 -3
- package/dist/core/mods/kernel/dispatch.js +140 -69
- package/dist/core/mods/kernel/events.d.ts +47 -11
- package/dist/core/mods/kernel/events.js +66 -42
- package/dist/core/mods/kernel/index.d.ts +4 -4
- package/dist/core/mods/kernel/index.js +2 -2
- package/dist/core/mods/kernel/receive.d.ts +39 -5
- package/dist/core/mods/kernel/receive.js +290 -17
- package/dist/core/mods/kernel/registration.d.ts +33 -2
- package/dist/core/mods/kernel/registration.js +6 -7
- package/dist/core/mods/kernel/site-rules.d.ts +44 -16
- package/dist/core/mods/kernel/site-rules.js +24 -42
- package/dist/core/mods/spec-seats.d.ts +69 -0
- package/dist/core/mods/spec-seats.js +114 -0
- package/dist/core/mods/stations.d.ts +28 -8
- package/dist/core/mods/stations.js +29 -13
- package/dist/core/mods/tool-call.d.ts +79 -0
- package/dist/core/mods/tool-call.js +152 -0
- package/dist/core/namespaced-rule-name.d.ts +44 -24
- package/dist/core/namespaced-rule-name.js +50 -43
- package/dist/core/output-style.d.ts +1 -1
- package/dist/core/param-rule-reach.d.ts +15 -0
- package/dist/core/param-rule-reach.js +30 -0
- package/dist/core/parent-spec-seat.d.ts +13 -1
- package/dist/core/parent-spec-seat.js +6 -0
- package/dist/core/park-selfcheck.js +1 -0
- package/dist/core/pause-registry.d.ts +16 -5
- package/dist/core/pause-registry.js +6 -2
- package/dist/core/peer-channel.d.ts +70 -0
- package/dist/core/peer-channel.js +1 -0
- package/dist/core/permission-rule-consent.d.ts +30 -5
- package/dist/core/permission-rule-consent.js +147 -50
- package/dist/core/permission-rule-model.d.ts +245 -65
- package/dist/core/permission-rule-model.js +421 -107
- package/dist/core/permission-rule-org.d.ts +6 -2
- package/dist/core/permission-rule-org.js +7 -3
- package/dist/core/permission-rule-provider.d.ts +6 -2
- package/dist/core/permission-rule-provider.js +41 -11
- package/dist/core/permission-rule-store.d.ts +22 -26
- package/dist/core/permission-rule-store.js +12 -6
- package/dist/core/permission-rule-sync.d.ts +11 -2
- package/dist/core/permission-rule-sync.js +11 -3
- package/dist/core/permission-rule-syntax.d.ts +5 -4
- package/dist/core/permission-rule-syntax.js +2 -2
- package/dist/core/permission-rules.d.ts +53 -15
- package/dist/core/permission-rules.js +125 -100
- package/dist/core/persisted-rule-arms.d.ts +6 -4
- package/dist/core/persisted-rule-arms.js +10 -12
- package/dist/core/present-plan-tool.js +3 -1
- package/dist/core/principal-name.d.ts +20 -0
- package/dist/core/principal-name.js +22 -0
- package/dist/core/prompt-section-seat.js +4 -6
- package/dist/core/protocol-http-auth.d.ts +26 -5
- package/dist/core/protocol-http-auth.js +137 -4
- package/dist/core/protocol-naming.d.ts +2 -2
- package/dist/core/read-only-shell-table.d.ts +1 -1
- package/dist/core/read-only-shell.d.ts +1 -1
- package/dist/core/retired-keys.d.ts +16 -0
- package/dist/core/retired-keys.js +16 -4
- package/dist/core/rewrite-rejudge.d.ts +60 -0
- package/dist/core/rewrite-rejudge.js +36 -0
- package/dist/core/roles.d.ts +34 -3
- package/dist/core/roles.js +66 -53
- package/dist/core/rule-lane-reads.d.ts +20 -15
- package/dist/core/rule-lane-reads.js +45 -17
- package/dist/core/rule-offer-read.d.ts +53 -0
- package/dist/core/rule-offer-read.js +146 -0
- package/dist/core/rule-owner.d.ts +46 -0
- package/dist/core/rule-owner.js +29 -0
- package/dist/core/runner/advisor-instructions.d.ts +70 -0
- package/dist/core/runner/advisor-instructions.js +61 -0
- package/dist/core/runner/advisor-tool.d.ts +33 -0
- package/dist/core/runner/advisor-tool.js +112 -0
- package/dist/core/runner/announce-once-ledger.d.ts +18 -26
- package/dist/core/runner/announce-once-ledger.js +19 -46
- package/dist/core/runner/approval-feedback.js +6 -3
- package/dist/core/runner/assemble-result.d.ts +2 -1
- package/dist/core/runner/assemble-result.js +1 -1
- package/dist/core/runner/call-hook-stations.d.ts +3 -2
- package/dist/core/runner/caller-roster.d.ts +21 -2
- package/dist/core/runner/caller-roster.js +38 -0
- package/dist/core/runner/capability-withheld-seat.d.ts +5 -0
- package/dist/core/runner/capability-withheld-seat.js +24 -0
- package/dist/core/runner/classifier-ladder.d.ts +33 -13
- package/dist/core/runner/classifier-ladder.js +15 -14
- package/dist/core/runner/compaction-restate.d.ts +10 -6
- package/dist/core/runner/compaction-restate.js +9 -3
- package/dist/core/runner/construction-doors.js +3 -0
- package/dist/core/runner/contracts.d.ts +40 -33
- package/dist/core/runner/conversation-segment.d.ts +28 -0
- package/dist/core/runner/conversation-segment.js +42 -0
- package/dist/core/runner/cross-boundary-lane.d.ts +21 -16
- package/dist/core/runner/cross-boundary-lane.js +58 -34
- package/dist/core/runner/decide-continuation.d.ts +7 -4
- package/dist/core/runner/decide-continuation.js +2 -2
- package/dist/core/runner/denial-limit-arms.d.ts +4 -4
- package/dist/core/runner/denial-limit-arms.js +1 -1
- package/dist/core/runner/derived-route-fallback.d.ts +24 -24
- package/dist/core/runner/derived-route-fallback.js +9 -7
- package/dist/core/runner/file-history-request.d.ts +18 -0
- package/dist/core/runner/file-history-request.js +21 -13
- package/dist/core/runner/file-history-restore.d.ts +45 -0
- package/dist/core/runner/file-history-restore.js +46 -0
- package/dist/core/runner/gate-exit.d.ts +9 -3
- package/dist/core/runner/gate-exit.js +11 -5
- package/dist/core/runner/image.d.ts +7 -17
- package/dist/core/runner/image.js +9 -60
- package/dist/core/runner/initial-run-state.js +1 -1
- package/dist/core/runner/permission-rule-lanes.d.ts +6 -6
- package/dist/core/runner/permission-rule-lanes.js +38 -15
- package/dist/core/runner/person-path-rows.d.ts +12 -9
- package/dist/core/runner/person-path-rows.js +19 -8
- package/dist/core/runner/prepare-advisor.d.ts +63 -0
- package/dist/core/runner/prepare-advisor.js +77 -0
- package/dist/core/runner/prepare-ask-lane.d.ts +2 -2
- package/dist/core/runner/prepare-ask-lane.js +5 -2
- package/dist/core/runner/prepare-caps-and-workflow.d.ts +4 -6
- package/dist/core/runner/prepare-caps-and-workflow.js +5 -4
- package/dist/core/runner/prepare-config-doors.d.ts +31 -38
- package/dist/core/runner/prepare-config-doors.js +57 -34
- package/dist/core/runner/prepare-defer-classify.d.ts +4 -3
- package/dist/core/runner/prepare-defer-classify.js +7 -8
- package/dist/core/runner/prepare-delegation-surface.d.ts +2 -2
- package/dist/core/runner/prepare-delegation-surface.js +1 -1
- package/dist/core/runner/prepare-file-history.d.ts +48 -8
- package/dist/core/runner/prepare-file-history.js +41 -73
- package/dist/core/runner/prepare-gate-stations.d.ts +2 -5
- package/dist/core/runner/prepare-gate-stations.js +12 -8
- package/dist/core/runner/prepare-hands-readface.d.ts +2 -8
- package/dist/core/runner/prepare-hands-readface.js +15 -14
- package/dist/core/runner/prepare-inherited-gate.d.ts +11 -7
- package/dist/core/runner/prepare-inherited-gate.js +8 -6
- package/dist/core/runner/prepare-memory-engine-session.js +1 -1
- package/dist/core/runner/prepare-park-ask.js +12 -12
- package/dist/core/runner/prepare-policy-chain.d.ts +7 -4
- package/dist/core/runner/prepare-policy-chain.js +68 -81
- package/dist/core/runner/prepare-project-context.d.ts +5 -2
- package/dist/core/runner/prepare-project-context.js +6 -3
- package/dist/core/runner/prepare-prompt-assembly.d.ts +5 -7
- package/dist/core/runner/prepare-prompt-assembly.js +10 -8
- package/dist/core/runner/prepare-prompt-inputs.d.ts +11 -9
- package/dist/core/runner/prepare-prompt-inputs.js +4 -6
- package/dist/core/runner/prepare-protocol-tools.d.ts +4 -2
- package/dist/core/runner/prepare-protocol-tools.js +5 -4
- package/dist/core/runner/prepare-safety-scan.d.ts +9 -12
- package/dist/core/runner/prepare-safety-scan.js +8 -23
- package/dist/core/runner/prepare-suspend-saga.d.ts +2 -0
- package/dist/core/runner/prepare-suspend-saga.js +5 -6
- package/dist/core/runner/prepare-task.d.ts +1 -1
- package/dist/core/runner/prepare-task.js +41 -35
- package/dist/core/runner/prepare-tool-disclosure-mount.d.ts +7 -4
- package/dist/core/runner/prepare-tool-disclosure-mount.js +24 -18
- package/dist/core/runner/prepare-turn-wiring.d.ts +0 -4
- package/dist/core/runner/prepare-turn-wiring.js +2 -7
- package/dist/core/runner/prepare-wiring-manifest.d.ts +11 -4
- package/dist/core/runner/prepare-wiring-manifest.js +3 -3
- package/dist/core/runner/resume-admission.js +1 -1
- package/dist/core/runner/resume-apply.js +11 -12
- package/dist/core/runner/resume-checkpoint-screen.js +3 -0
- package/dist/core/runner/resume-claim.d.ts +4 -2
- package/dist/core/runner/resume-claim.js +15 -8
- package/dist/core/runner/resume-policy-outcome.js +1 -1
- package/dist/core/runner/retired-runner-deps.js +2 -1
- package/dist/core/runner/rewind-files.d.ts +15 -0
- package/dist/core/runner/rewind-files.js +132 -0
- package/dist/core/runner/run-attachment-seats.js +2 -2
- package/dist/core/runner/run-brain-sinks.d.ts +4 -1
- package/dist/core/runner/run-brain-sinks.js +4 -2
- package/dist/core/runner/run-compaction-machinery.d.ts +1 -1
- package/dist/core/runner/run-compaction-machinery.js +2 -12
- package/dist/core/runner/run-git-lane.d.ts +1 -0
- package/dist/core/runner/run-harness-handlers.js +14 -7
- package/dist/core/runner/run-leg.d.ts +1 -1
- package/dist/core/runner/run-leg.js +43 -18
- package/dist/core/runner/run-settle-and-teardown.js +3 -2
- package/dist/core/runner/run-telemetry-and-budget-seats.js +1 -1
- package/dist/core/runner/run-turn-boundary.d.ts +1 -0
- package/dist/core/runner/run-turn-boundary.js +15 -22
- package/dist/core/runner/runtask.d.ts +3 -0
- package/dist/core/runner/runtask.js +8 -9
- package/dist/core/runner/session-read-file-states.d.ts +15 -0
- package/dist/core/runner/session-read-file-states.js +28 -0
- package/dist/core/runner/session-rule-policy.d.ts +22 -21
- package/dist/core/runner/session-rule-policy.js +17 -31
- package/dist/core/runner/shell-env-withheld.d.ts +33 -0
- package/dist/core/runner/shell-env-withheld.js +51 -0
- package/dist/core/runner/side-call-account.d.ts +32 -8
- package/dist/core/runner/side-call-account.js +23 -1
- package/dist/core/runner/skills-seat.js +6 -2
- package/dist/core/runner/stream-settle-backstop.js +1 -1
- package/dist/core/runner/strict-output-schema.d.ts +1 -1
- package/dist/core/runner/sub-agent-deny-lists.js +4 -6
- package/dist/core/runner/synthetic-tools.d.ts +16 -13
- package/dist/core/runner/synthetic-tools.js +8 -3
- package/dist/core/runner/tool-disclosure.d.ts +10 -12
- package/dist/core/runner/tool-disclosure.js +3 -4
- package/dist/core/runner/tool-end-body.d.ts +1 -1
- package/dist/core/runner/tool-end-body.js +10 -9
- package/dist/core/runner/tool-face-overlay.d.ts +2 -1
- package/dist/core/runner/tool-face-overlay.js +17 -1
- package/dist/core/runner/tool-not-executed.d.ts +5 -0
- package/dist/core/runner/tool-not-executed.js +11 -0
- package/dist/core/runner/tool-occurrence.d.ts +8 -0
- package/dist/core/runner/tool-occurrence.js +7 -0
- package/dist/core/runner/tool-progress-lane.d.ts +2 -2
- package/dist/core/runner/tool-turn-repair-seat.d.ts +3 -2
- package/dist/core/runner/turn-attachments.d.ts +91 -80
- package/dist/core/runner/turn-attachments.js +62 -37
- package/dist/core/runner-deps.d.ts +42 -42
- package/dist/core/runtime-caps.d.ts +4 -4
- package/dist/core/safety-axis-vocab.d.ts +6 -4
- package/dist/core/safety-axis-vocab.js +6 -5
- package/dist/core/safety-merge-corpus.js +26 -2
- package/dist/core/same-plain-value.d.ts +40 -0
- package/dist/core/same-plain-value.js +49 -0
- package/dist/core/scheduler.d.ts +1 -1
- package/dist/core/secret-env.d.ts +26 -3
- package/dist/core/secret-env.js +44 -8
- package/dist/core/select-model.js +3 -3
- package/dist/core/sensitive-path-policy.d.ts +1 -1
- package/dist/core/sensitive-path-policy.js +1 -1
- package/dist/core/session-policy-store.d.ts +102 -35
- package/dist/core/session-policy-store.js +210 -48
- package/dist/core/session-reconcile.d.ts +2 -2
- package/dist/core/session-store.d.ts +106 -37
- package/dist/core/session-store.js +165 -91
- package/dist/core/session.d.ts +101 -57
- package/dist/core/session.js +53 -0
- package/dist/core/shared-memory/tools.js +3 -1
- package/dist/core/shared-memory/types.d.ts +1 -1
- package/dist/core/shell-read-silence.d.ts +11 -12
- package/dist/core/shell-read-silence.js +9 -5
- package/dist/core/shell-run-candidates.js +3 -1
- package/dist/core/shell-wrapper-projection.js +1 -1
- package/dist/core/shell-wrapper-table.d.ts +14 -7
- package/dist/core/shell-wrapper-table.js +5 -4
- package/dist/core/side-query.d.ts +10 -0
- package/dist/core/side-query.js +15 -1
- package/dist/core/skill-grant.d.ts +7 -2
- package/dist/core/skill-grant.js +5 -0
- package/dist/core/skills-directory.js +6 -2
- package/dist/core/store-contracts/checkpoint-store-contract.d.ts +11 -1
- package/dist/core/store-contracts/checkpoint-store-contract.js +168 -3
- package/dist/core/store-contracts/file-history-store-contract.js +74 -4
- package/dist/core/store-contracts/peer-directory-contract.d.ts +7 -2
- package/dist/core/store-contracts/peer-directory-contract.js +14 -2
- package/dist/core/store-contracts/session-policy-store-contract.d.ts +7 -0
- package/dist/core/store-contracts/session-policy-store-contract.js +130 -0
- package/dist/core/store-contracts/session-repo-contract.js +176 -0
- package/dist/core/store-contracts/session-store-contract.d.ts +6 -8
- package/dist/core/store-contracts/session-store-contract.js +361 -51
- package/dist/core/store-contracts/workflow-journal-store-contract.js +26 -1
- package/dist/core/stub-env.d.ts +2 -0
- package/dist/core/stub-env.js +1 -0
- package/dist/core/surrogate-safe-slice.d.ts +3 -3
- package/dist/core/synthetic-read-verdict.js +3 -3
- package/dist/core/task-event.d.ts +42 -8
- package/dist/core/task-notification.d.ts +19 -15
- package/dist/core/task-registry-agent.d.ts +4 -4
- package/dist/core/task-registry-shared.d.ts +4 -4
- package/dist/core/task-registry-shared.js +1 -0
- package/dist/core/task-registry.d.ts +13 -4
- package/dist/core/task-registry.js +14 -2
- package/dist/core/task-result.d.ts +21 -3
- package/dist/core/task-spec.d.ts +69 -64
- package/dist/core/task-stream.d.ts +6 -6
- package/dist/core/task-tool-shape.d.ts +4 -4
- package/dist/core/tighten-task-spec.d.ts +1 -1
- package/dist/core/tighten-task-spec.js +2 -1
- package/dist/core/tool-catalog-entries.d.ts +36 -2
- package/dist/core/tool-catalog-entries.js +69 -43
- package/dist/core/tool-check-reading.d.ts +11 -0
- package/dist/core/tool-check-reading.js +11 -6
- package/dist/core/tool-conformance.js +1 -0
- package/dist/core/tool-errors.d.ts +2 -2
- package/dist/core/tool-face-reader.js +5 -3
- package/dist/core/tool-face.d.ts +21 -2
- package/dist/core/tool-face.js +1 -1
- package/dist/core/tool-model-gate.d.ts +5 -5
- package/dist/core/tool-name-aliases.d.ts +29 -8
- package/dist/core/tool-name-aliases.js +22 -4
- package/dist/core/tool-name-readings.d.ts +10 -43
- package/dist/core/tool-name-readings.js +2 -11
- package/dist/core/tool-policy.d.ts +85 -196
- package/dist/core/tool-policy.js +150 -175
- package/dist/core/tool-registry.d.ts +14 -7
- package/dist/core/tool-registry.js +17 -7
- package/dist/core/tool-result-store.js +5 -1
- package/dist/core/tool-roster.d.ts +57 -33
- package/dist/core/tool-roster.js +56 -68
- package/dist/core/tool-spec-members.js +8 -3
- package/dist/core/tool-spec.d.ts +53 -31
- package/dist/core/tools.js +51 -10
- package/dist/core/trace.d.ts +6 -2
- package/dist/core/types.d.ts +1 -1
- package/dist/core/untrusted-egress.d.ts +1 -1
- package/dist/core/untrusted-text.d.ts +1 -1
- package/dist/core/user-attachment.d.ts +8 -1
- package/dist/core/user-attachment.js +64 -4
- package/dist/core/warm-resume.d.ts +1 -1
- package/dist/core/wiring-manifest.d.ts +58 -0
- package/dist/core/wiring-manifest.js +14 -5
- package/dist/core/workflow-journal-store.d.ts +62 -0
- package/dist/core/workflow-journal-store.js +78 -2
- package/dist/core/workflow-run-store.d.ts +6 -0
- package/dist/core/workflow-run-store.js +2 -0
- package/dist/engine/compaction/compaction.d.ts +9 -9
- package/dist/engine/compaction/compaction.js +3 -2
- package/dist/engine/execution-env/node-execution-env.d.ts +26 -8
- package/dist/engine/execution-env/node-execution-env.js +54 -24
- package/dist/engine/harness/agent-harness.d.ts +39 -9
- package/dist/engine/harness/agent-harness.js +87 -33
- package/dist/engine/harness/types.d.ts +58 -9
- package/dist/engine/harness/types.js +12 -1
- package/dist/engine/llm/types.d.ts +36 -19
- package/dist/engine/llm/validation.d.ts +4 -1
- package/dist/engine/llm/validation.js +13 -1
- package/dist/engine/loop/agent-loop.d.ts +23 -1
- package/dist/engine/loop/agent-loop.js +26 -34
- package/dist/engine/loop/types.d.ts +31 -19
- package/dist/engine/lsp/node-lsp-manager.d.ts +2 -2
- package/dist/engine/session/memory-repo.d.ts +18 -12
- package/dist/engine/session/memory-repo.js +24 -9
- package/dist/engine/session/parent-chain-guard.d.ts +3 -2
- package/dist/engine/session/parent-chain-guard.js +1 -1
- package/dist/engine/session/repo-utils.d.ts +32 -3
- package/dist/engine/session/repo-utils.js +50 -5
- package/dist/index.d.ts +47 -23
- package/dist/index.js +35 -17
- package/dist/internal/harness-types.d.ts +1 -1
- package/dist/internal/harness.d.ts +3 -3
- package/dist/internal/harness.js +2 -2
- package/dist/internal/llm.d.ts +2 -2
- package/dist/internal/llm.js +1 -1
- package/dist/orchestration/goal.js +2 -2
- package/dist/orchestration/run-workflow-tool.d.ts +8 -6
- package/dist/orchestration/run-workflow-tool.js +10 -6
- package/dist/orchestration/workflow-size-guideline.d.ts +4 -4
- package/dist/orchestration/workflow-types.d.ts +18 -0
- package/dist/orchestration/workflow-types.js +6 -0
- package/dist/orchestration/workflow.d.ts +5 -13
- package/dist/orchestration/workflow.js +57 -49
- package/dist/prompt-assembly/artifact.d.ts +2 -2
- package/dist/prompt-assembly/artifact.js +5 -3
- package/dist/prompt-assembly/assemble.d.ts +3 -2
- package/dist/prompt-assembly/assemble.js +1 -1
- package/dist/prompt-assembly/catalog/schema.d.ts +43 -12
- package/dist/prompt-assembly/catalog/schema.js +34 -2
- package/dist/prompt-assembly/catalog/sections.js +0 -1
- package/dist/prompt-assembly/composer.d.ts +3 -1
- package/dist/prompt-assembly/composer.js +1 -1
- package/dist/prompt-assembly/event-registry.js +2 -0
- package/dist/prompt-assembly/overlay.js +3 -3
- package/dist/prompt-assembly/renderers.d.ts +1 -1
- package/dist/prompt-assembly/renderers.js +0 -3
- package/dist/prompt-assembly/role-base.d.ts +15 -0
- package/dist/prompt-assembly/role-base.js +9 -0
- package/dist/prompt-assembly/select.d.ts +39 -14
- package/dist/prompt-assembly/select.js +47 -16
- package/dist/prompt-assembly/sugar.d.ts +17 -11
- package/dist/prompt-assembly/sugar.js +8 -3
- package/dist/prompt-assembly/tool-catalog.d.ts +39 -2
- package/dist/prompt-assembly/tool-catalog.js +117 -4
- package/dist/prompt-assembly/turn-snapshot.d.ts +4 -10
- package/dist/prompt-assembly/turn-snapshot.js +0 -3
- package/dist/prompt-assembly/types.d.ts +0 -7
- package/dist/prompts/default.d.ts +14 -14
- package/dist/scenarios/full-body.d.ts +15 -15
- package/dist/scenarios/full-body.js +4 -3
- package/dist/shell/lex.js +10 -1
- package/dist/stores/file/adoption/adopt.d.ts +4 -3
- package/dist/stores/file/adoption/adopt.js +27 -33
- package/dist/stores/file/adoption/marker.d.ts +6 -13
- package/dist/stores/file/adoption/marker.js +9 -17
- package/dist/stores/file/checkpoint-store.d.ts +24 -0
- package/dist/stores/file/checkpoint-store.js +45 -7
- package/dist/stores/file/file-history-store.d.ts +20 -19
- package/dist/stores/file/file-history-store.js +157 -141
- package/dist/stores/file/fs-atomic.d.ts +15 -0
- package/dist/stores/file/fs-atomic.js +89 -14
- package/dist/stores/file/index.d.ts +1 -1
- package/dist/stores/file/index.js +2 -1
- package/dist/stores/file/mailbox-store.d.ts +3 -0
- package/dist/stores/file/mailbox-store.js +3 -1
- package/dist/stores/file/permission-rule-adopt.d.ts +1 -1
- package/dist/stores/file/permission-rule-adopt.js +18 -18
- package/dist/stores/file/permission-rule-store.d.ts +18 -2
- package/dist/stores/file/permission-rule-store.js +31 -18
- package/dist/stores/file/session-policy-store.d.ts +3 -3
- package/dist/stores/file/session-store.d.ts +54 -16
- package/dist/stores/file/session-store.js +114 -85
- package/dist/stores/file/workflow-journal-store.d.ts +10 -4
- package/dist/stores/file/workflow-journal-store.js +28 -13
- package/dist/tools/artifact/artifact-text.d.ts +1 -1
- package/dist/tools/artifact/artifact-tool.js +5 -3
- package/dist/tools/fs/bash-program-position.d.ts +19 -2
- package/dist/tools/fs/bash-program-position.js +56 -9
- package/dist/tools/fs/bash-readonly-classifier.d.ts +3 -3
- package/dist/tools/fs/fs-bash.d.ts +2 -2
- package/dist/tools/fs/fs-bash.js +8 -6
- package/dist/tools/fs/fs-glob.d.ts +86 -0
- package/dist/tools/fs/fs-glob.js +226 -0
- package/dist/tools/fs/fs-read.js +14 -14
- package/dist/tools/fs/fs-search-tools.js +7 -7
- package/dist/tools/fs/fs-shared.d.ts +8 -8
- package/dist/tools/fs/gh-rate-limit.d.ts +1 -1
- package/dist/tools/fs/notebook.d.ts +2 -2
- package/dist/tools/fs/pattern-kill-guard.d.ts +22 -0
- package/dist/tools/fs/pattern-kill-guard.js +397 -0
- package/dist/tools/fs/pdf.d.ts +9 -6
- package/dist/tools/fs/pdf.js +3 -3
- package/dist/tools/fs/program-read-model.d.ts +57 -7
- package/dist/tools/fs/program-read-model.js +11 -1
- package/dist/tools/fs/program-read-model.rows.js +78 -21
- package/dist/tools/fs/read-deny-home.js +3 -2
- package/dist/tools/fs/read-deny.d.ts +29 -7
- package/dist/tools/fs/read-deny.js +63 -22
- package/dist/tools/fs/removal-targets.d.ts +18 -8
- package/dist/tools/fs/removal-targets.js +47 -20
- package/dist/tools/fs/safety.d.ts +9 -9
- package/dist/tools/fs/search.d.ts +16 -6
- package/dist/tools/fs/search.js +20 -26
- package/dist/tools/fs/shell-read-argv.js +89 -12
- package/dist/tools/fs/shell-read-bindings.d.ts +31 -0
- package/dist/tools/fs/shell-read-bindings.js +41 -0
- package/dist/tools/fs/shell-read-check.js +12 -20
- package/dist/tools/fs/shell-read-environment.d.ts +5 -1
- package/dist/tools/fs/shell-read-environment.js +3 -2
- package/dist/tools/fs/shell-read-establish.d.ts +15 -0
- package/dist/tools/fs/shell-read-establish.js +19 -20
- package/dist/tools/fs/shell-read-judge.d.ts +4 -0
- package/dist/tools/fs/shell-read-judge.js +5 -2
- package/dist/tools/fs/shell-read-plan.js +24 -16
- package/dist/tools/fs/shell-read-start.d.ts +6 -1
- package/dist/tools/fs/shell-read-write-targets.d.ts +5 -1
- package/dist/tools/fs/shell-read-write-targets.js +2 -3
- package/dist/tools/fs/shell-reentry-text.d.ts +9 -0
- package/dist/tools/fs/shell-reentry-text.js +40 -2
- package/dist/tools/loop-tick.d.ts +2 -2
- package/dist/tools/scheduler-tools.js +5 -1
- package/dist/tools/task-list.d.ts +7 -7
- package/dist/tools/task-list.js +5 -1
- package/dist/tools/todo.js +65 -64
- package/dist/tools/web.d.ts +20 -15
- package/dist/tools/web.js +55 -69
- package/dist/tools/worktree.d.ts +3 -3
- package/dist/tools/worktree.js +3 -1
- package/package.json +1 -1
- package/test/export-surface.snapshot.json +5894 -5638
- package/wire-changes/core@7.55.0.json +3318 -0
- package/wire-changes/core@7.56.0.json +3891 -0
- package/wire-changes/mods-kernel@7.56.0.json +303 -0
- package/dist/core/store-contracts/session-store-incarnation-contract.d.ts +0 -39
- package/dist/core/store-contracts/session-store-incarnation-contract.js +0 -95
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { BrainRetryErrClass, BrainStatus } from "../core/types.js";
|
|
2
2
|
import type { ReasoningWireFacts } from "./reasoning.js";
|
|
3
|
+
import type { CapabilityDeclaration, ModelCapability } from "./model-capability.js";
|
|
3
4
|
/** Run `fn` with a per-task brain-status sink in scope. ALS propagates it through the async brain calls
|
|
4
5
|
* inside `fn` (the harness's prompt → brain.stream → connect/retry loop), so {@link emitBrainStatus}
|
|
5
6
|
* reaches THIS task's sink and nothing else. */
|
|
@@ -168,3 +169,22 @@ export declare function runWithCredentialOriginRefusals<T>(observe: (r: Credenti
|
|
|
168
169
|
* `routeRefusalError`; a judgment that only advises reports nothing). The
|
|
169
170
|
* observer is the Runner's own seat, whose one delivery is the guarded `deliverEngineNotice` — nothing is swallowed here. */
|
|
170
171
|
export declare function reportCredentialOriginRefusal(report: CredentialOriginRefusalReport): void;
|
|
172
|
+
/** A request that withheld a capability from the model it was sent to: the model, the capability, the model's declaration
|
|
173
|
+
* that withheld it (`capabilityOf`), and how many blocks it replaced. */
|
|
174
|
+
export interface CapabilityWithheldReport {
|
|
175
|
+
modelId: string;
|
|
176
|
+
capability: ModelCapability;
|
|
177
|
+
cause: Exclude<CapabilityDeclaration, "declared_on">;
|
|
178
|
+
count: number;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Run `fn` with a per-run withheld-capability sink in scope — the SIXTH brain→runner ALS channel, with the fourth's shape
|
|
182
|
+
* and for its reasons: the WHOLE leg (the end-of-task compaction runs after the leg's prompt, and a child leg running
|
|
183
|
+
* inside its parent's tool call must report to its own leg, not to the scope it inherited), not shielded around the leg's
|
|
184
|
+
* internal calls, not revoked on settlement, no-op outside the scope.
|
|
185
|
+
*/
|
|
186
|
+
export declare function runWithCapabilityWithheld<T>(observe: (r: CapabilityWithheldReport) => void, fn: () => Promise<T>): Promise<T>;
|
|
187
|
+
/** Report a withheld capability to the active per-run sink, if any (called by the message assemblers' one emit,
|
|
188
|
+
* `reportImagesWithheld`). The observer is the Runner's own seat, whose one delivery is the guarded `deliverEngineNotice`
|
|
189
|
+
* — nothing is swallowed here: a seat that fails otherwise fails the request build, never the person's notice in silence. */
|
|
190
|
+
export declare function reportCapabilityWithheld(report: CapabilityWithheldReport): void;
|
|
@@ -75,3 +75,10 @@ export function runWithCredentialOriginRefusals(observe, fn) {
|
|
|
75
75
|
export function reportCredentialOriginRefusal(report) {
|
|
76
76
|
credentialOriginRefusalSinkStore.getStore()?.observe(report);
|
|
77
77
|
}
|
|
78
|
+
const capabilityWithheldSinkStore = new AsyncLocalStorage();
|
|
79
|
+
export function runWithCapabilityWithheld(observe, fn) {
|
|
80
|
+
return capabilityWithheldSinkStore.run({ observe }, fn);
|
|
81
|
+
}
|
|
82
|
+
export function reportCapabilityWithheld(report) {
|
|
83
|
+
capabilityWithheldSinkStore.getStore()?.observe(report);
|
|
84
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createAssistantMessageEventStream, } from "../internal/llm.js";
|
|
2
2
|
import { STREAM_TORN_WARNING } from "./stream-shared.js";
|
|
3
3
|
import { FLOOR_OUTPUT_TOKENS, parseContextOverflow, planOutputCapAdjustment } from "./context-overflow.js";
|
|
4
|
-
import { abortLikeName, BrainError, brainErrorCodeOf, classifyFetchThrow, classifyHttp, describeNetworkError, isProviderEchoShape, namesTheFailure, proxyTunnelRefusedSentence, readConnectFailure, readProviderErrorCode, readProviderRequestId, refusedTheRequest } from "./errors.js";
|
|
4
|
+
import { abortLikeName, BrainError, brainErrorCodeOf, classifyFetchThrow, classifyHttp, describeNetworkError, isProviderEchoShape, namesTheFailure, proxyTunnelRefusedSentence, readConnectFailure, readProviderErrorCode, readProviderRequestId, refusedTheRequest, thrownBrainFailure } from "./errors.js";
|
|
5
5
|
import { stripUrlCredentials } from "./route-adjudicator.js";
|
|
6
6
|
import { admittedRequestRoute } from "./request-route.js";
|
|
7
7
|
import { isTransientStatus, isProviderCondition, isProviderConditionSource, judgeHttpFailure, PROVIDER_CONDITION_TRAITS, resolveProviderDialect, } from "./provider-dialect.js";
|
|
@@ -314,10 +314,11 @@ export function runStreamingBrain(args) {
|
|
|
314
314
|
}
|
|
315
315
|
errorMsg.stopReason = aborted ? "aborted" : "error";
|
|
316
316
|
errorMsg.errorMessage = thrownText(err);
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
317
|
+
const failure = aborted ? {} : thrownBrainFailure(err);
|
|
318
|
+
if (failure.code !== undefined) {
|
|
319
|
+
if (failure.errorKind !== undefined)
|
|
320
|
+
errorMsg.errorKind = failure.errorKind;
|
|
321
|
+
else if (failure.inputTooLongRuledOut === true)
|
|
321
322
|
errorMsg.inputTooLongRuledOut = true;
|
|
322
323
|
if (readMember(err, "errorBodyIncomplete") === true)
|
|
323
324
|
errorMsg.errorBodyIncomplete = true;
|
|
@@ -14,7 +14,7 @@ import { type AssistantMessage, type ModelOutputInvalid, type StreamDropCause }
|
|
|
14
14
|
*
|
|
15
15
|
* Internal module: not re-exported from `src/index.ts`.
|
|
16
16
|
*/
|
|
17
|
-
/** The warning (
|
|
17
|
+
/** The warning (the reference's former words; later replaced by a resume request) stamped beside `partialFinalized` when a stream ended before its close — by the
|
|
18
18
|
* mid-stream promotion (the body threw) and by the parsers' own finalize (content arrived, no finish frame). */
|
|
19
19
|
export declare const STREAM_TORN_WARNING = "Connection closed mid-response. The response above may be incomplete.";
|
|
20
20
|
/** A provider word as a stream-end seat carries it: the word in the provider echo shape, else `?` — the fact that a
|
package/dist/core/a2a.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AgentTool } from "../internal/harness-types.js";
|
|
2
|
+
import { type HostFloor } from "./host-floor.js";
|
|
2
3
|
import type { A2aServerSpec, ToolEffect } from "./types.js";
|
|
3
4
|
/** The hard per-skill description bound (ruled 2026-08-03: ~2KiB). */
|
|
4
5
|
export declare const A2A_SKILL_DESCRIPTION_MAX_CHARS = 2048;
|
|
@@ -96,4 +97,4 @@ export declare class A2aRpcError extends Error {
|
|
|
96
97
|
* `allSettled` keeps it fail-open: one unreachable peer is a skipped peer with a warning, never a task
|
|
97
98
|
* that cannot start.
|
|
98
99
|
*/
|
|
99
|
-
export declare function materializeA2aTools(specs: readonly A2aServerSpec[], principal?: string, signal?: AbortSignal): Promise<MaterializedA2a>;
|
|
100
|
+
export declare function materializeA2aTools(specs: readonly A2aServerSpec[], principal?: string, signal?: AbortSignal, hostFloor?: HostFloor): Promise<MaterializedA2a>;
|
package/dist/core/a2a.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { Type } from "typebox";
|
|
3
3
|
import { A2A_TASK_STATES } from "./a2a-task-state.js";
|
|
4
|
-
import { assertEndpointBound,
|
|
4
|
+
import { assertEndpointBound, carriesDeclaredHeaders, resolveProtocolHttpHeaders, underDeclaredHeaders } from "./protocol-http-auth.js";
|
|
5
|
+
import { fetchFollowing, hopRefusal, HOST_FLOOR_REFUSED_CODE } from "./host-floor.js";
|
|
5
6
|
import { describeHttpTransportFailure } from "./mcp-failure.js";
|
|
6
7
|
import { findNamespacePrefixCollision, mintNamespacePrefix, mintNamespacedToolName } from "./protocol-naming.js";
|
|
7
8
|
import { A2A_NAMESPACE } from "./protocol-table.js";
|
|
@@ -77,6 +78,7 @@ function safeId(v) {
|
|
|
77
78
|
return undefined;
|
|
78
79
|
return inlineUntrusted(s, A2A_ID_MAX_CHARS);
|
|
79
80
|
}
|
|
81
|
+
const A2A_MAX_REDIRECTS = 20;
|
|
80
82
|
function withRequestDeadline(outer, timeoutMs) {
|
|
81
83
|
const controller = new AbortController();
|
|
82
84
|
let timedOut = false;
|
|
@@ -144,21 +146,25 @@ async function readBoundedText(res, what) {
|
|
|
144
146
|
async function requestJson(t, what, init) {
|
|
145
147
|
const doFetch = resolveFetch();
|
|
146
148
|
const deadline = withRequestDeadline(init.signal, init.timeoutMs);
|
|
149
|
+
const peerLabel = inlineUntrusted(t.peer, A2A_ID_MAX_CHARS);
|
|
147
150
|
try {
|
|
148
|
-
const
|
|
151
|
+
const followed = await fetchFollowing(doFetch, new URL(init.url), {
|
|
149
152
|
method: init.method,
|
|
150
|
-
signal: deadline.signal,
|
|
151
|
-
redirect: redirectPolicy(t.headers),
|
|
152
153
|
headers: underDeclaredHeaders({ accept: "application/json", "a2a-version": A2A_PROTOCOL_VERSION, ...(init.body !== undefined ? { "content-type": "application/json" } : {}) }, t.headers),
|
|
153
154
|
...(init.body !== undefined ? { body: init.body } : {}),
|
|
154
|
-
|
|
155
|
-
|
|
155
|
+
signal: deadline.signal,
|
|
156
|
+
}, { refusal: (url) => hopRefusal(url, t.floor, false), follows: () => !carriesDeclaredHeaders(t.headers), maxRedirects: A2A_MAX_REDIRECTS });
|
|
157
|
+
if (followed.kind === "refused")
|
|
158
|
+
throw Object.assign(new Error(`a2a: ${what} on peer "${peerLabel}" is not sent — ${followed.reason}`), { code: HOST_FLOOR_REFUSED_CODE });
|
|
159
|
+
if (followed.kind === "too_many")
|
|
160
|
+
throw new Error(`a2a: ${what} on peer "${peerLabel}" was redirected more than ${A2A_MAX_REDIRECTS} times`);
|
|
161
|
+
const res = followed.res;
|
|
162
|
+
const text = await readBoundedText(res, `${what} from A2A peer "${peerLabel}"`);
|
|
156
163
|
return { status: res.status, text };
|
|
157
164
|
}
|
|
158
165
|
catch (err) {
|
|
159
166
|
if (init.signal?.aborted === true)
|
|
160
167
|
throw err;
|
|
161
|
-
const peerLabel = inlineUntrusted(t.peer, A2A_ID_MAX_CHARS);
|
|
162
168
|
if (deadline.timedOut()) {
|
|
163
169
|
throw new Error(`a2a: ${what} on peer "${peerLabel}" got no answer within ${init.timeoutMs}ms. The client stopped waiting — the peer may still be acting on the request, so treat the outcome as UNKNOWN and verify before retrying.`, { cause: err });
|
|
164
170
|
}
|
|
@@ -553,16 +559,16 @@ function declaredPeerOf(declared, index) {
|
|
|
553
559
|
const judged = judgeEntryToolAxes(snapshot, "a2a");
|
|
554
560
|
return judged.ok ? { spec: judged.entry } : { spec: snapshot, refusal: judged.error };
|
|
555
561
|
}
|
|
556
|
-
async function materializePeer(peer, principal, lifecycle, signal) {
|
|
562
|
+
async function materializePeer(peer, principal, lifecycle, signal, floor) {
|
|
557
563
|
if ("refusal" in peer)
|
|
558
564
|
throw peer.refusal;
|
|
559
565
|
const { spec } = peer;
|
|
560
566
|
const declaredAxes = spec.toolAxes;
|
|
561
567
|
const headers = resolveProtocolHttpHeaders(A2A_NAMESPACE.id, spec, principal);
|
|
562
|
-
const discovery = { peer: spec.name, endpoint: spec.url, headers };
|
|
568
|
+
const discovery = { peer: spec.name, endpoint: spec.url, headers, floor };
|
|
563
569
|
const card = readCard(spec.name, await discoverCardBody(spec, discovery, signal), spec.url);
|
|
564
570
|
assertEndpointBound(A2A_NAMESPACE.id, spec.name, card.endpoint, spec.cardUrl === undefined ? [spec.url] : [spec.url, spec.cardUrl], headers);
|
|
565
|
-
const transport = { peer: spec.name, endpoint: card.endpoint, headers };
|
|
571
|
+
const transport = { peer: spec.name, endpoint: card.endpoint, headers, floor };
|
|
566
572
|
const tools = [];
|
|
567
573
|
const skillAxes = [];
|
|
568
574
|
for (const skill of card.skills) {
|
|
@@ -592,7 +598,7 @@ function asPeerWarning(spec, err) {
|
|
|
592
598
|
warning.code = "a2a.peer_unavailable";
|
|
593
599
|
return warning;
|
|
594
600
|
}
|
|
595
|
-
export async function materializeA2aTools(specs, principal, signal) {
|
|
601
|
+
export async function materializeA2aTools(specs, principal, signal, hostFloor) {
|
|
596
602
|
const peers = specs.map((spec, index) => declaredPeerOf(spec, index));
|
|
597
603
|
if (peers.length > 0) {
|
|
598
604
|
const collision = findNamespacePrefixCollision(A2A_NAMESPACE, peers.map((p) => p.spec.name));
|
|
@@ -610,7 +616,7 @@ export async function materializeA2aTools(specs, principal, signal) {
|
|
|
610
616
|
const toolAxes = [];
|
|
611
617
|
const warnings = [];
|
|
612
618
|
const statuses = [];
|
|
613
|
-
const settled = await Promise.allSettled(peers.map((peer) => materializePeer(peer, principal, lifecycle, signal)));
|
|
619
|
+
const settled = await Promise.allSettled(peers.map((peer) => materializePeer(peer, principal, lifecycle, signal, hostFloor)));
|
|
614
620
|
for (let i = 0; i < peers.length; i++) {
|
|
615
621
|
const spec = peers[i].spec;
|
|
616
622
|
const outcome = settled[i];
|
|
@@ -645,7 +651,7 @@ export async function materializeA2aTools(specs, principal, signal) {
|
|
|
645
651
|
}
|
|
646
652
|
const previous = statuses.find((s) => s.name === spec.name)?.toolNames ?? [];
|
|
647
653
|
try {
|
|
648
|
-
const fresh = await materializePeer(target, principal, lifecycle, signal);
|
|
654
|
+
const fresh = await materializePeer(target, principal, lifecycle, signal, hostFloor);
|
|
649
655
|
const names = fresh.tools.map((t) => t.name);
|
|
650
656
|
results.push({
|
|
651
657
|
peer: spec.name,
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The advisor seat's two answers, each minted here once and read by every reader: whether the advisor tool attaches for
|
|
3
|
+
* a (main model, advisor model) pair on a deployment ({@link advisorAttachVerdict} — the prepare mount, a host's advisor
|
|
4
|
+
* query and its echo all ask this one function), and whether a conversation has switched the advisor off
|
|
5
|
+
* ({@link advisorHoldOf} — read off the transcript, its only source of truth, at the mount, at every call and by a host).
|
|
6
|
+
* The closed sets the answers are spelled in live beside them.
|
|
7
|
+
*/
|
|
8
|
+
import type { SessionTreeEntry } from "../internal/harness-types.js";
|
|
9
|
+
import { type BrainErrorCode } from "../brain/errors.js";
|
|
10
|
+
import type { AssertAllKeysHandled } from "./ask-origin.js";
|
|
11
|
+
import type { EngineNotice, Model, ModelRef, RunnerDeps } from "./types.js";
|
|
12
|
+
/** The tool's wire name. */
|
|
13
|
+
export declare const ADVISOR_TOOL_NAME = "advisor";
|
|
14
|
+
/** What a fork is told when it inherits the advisor tool with its parent's prefix — the reference's sentence. */
|
|
15
|
+
export declare const ADVISOR_FORK_SENTENCE = "Never consult the advisor tool.";
|
|
16
|
+
/** Why the advisor tool is not attached on a leg whose spec names an advisor model. The first six are the static verdict's
|
|
17
|
+
* answers; the last three are the mount's (the tool selector unmounted it, its route cannot pair, the transcript could
|
|
18
|
+
* not be read). */
|
|
19
|
+
export declare const ADVISOR_NOT_ATTACHED_REASONS: readonly ["disabled", "unknown_model", "advisor_unranked", "weakest_tier", "main_unranked", "pairing", "route_refused", "excluded", "hold_unknown"];
|
|
20
|
+
export type AdvisorNotAttachedReason = (typeof ADVISOR_NOT_ATTACHED_REASONS)[number];
|
|
21
|
+
/**
|
|
22
|
+
* Each reason's sentence to the person (`advisor.not_attached`, once per conversation per pair) — `null` for a reason that
|
|
23
|
+
* tells nobody: the deployment switched the advisor off (it is ignored), the deployment's tool selector unmounted it
|
|
24
|
+
* (`excluded`), or its route cannot pair with the deployment's credentials (`route_refused`, told to the operator by
|
|
25
|
+
* `route.seat_detached` — only an operator can fix it).
|
|
26
|
+
*/
|
|
27
|
+
declare const NOT_ATTACHED_SENTENCE: {
|
|
28
|
+
readonly disabled: null;
|
|
29
|
+
readonly unknown_model: (a: string) => string;
|
|
30
|
+
readonly advisor_unranked: (a: string) => string;
|
|
31
|
+
readonly weakest_tier: (a: string) => string;
|
|
32
|
+
readonly main_unranked: (_a: string, m: string) => string;
|
|
33
|
+
readonly pairing: (a: string, m: string) => string;
|
|
34
|
+
readonly route_refused: null;
|
|
35
|
+
readonly excluded: null;
|
|
36
|
+
readonly hold_unknown: () => string;
|
|
37
|
+
};
|
|
38
|
+
export type NotAttachedSentenceCoversEveryReason = AssertAllKeysHandled<Exclude<AdvisorNotAttachedReason, keyof typeof NOT_ATTACHED_SENTENCE>>;
|
|
39
|
+
/** The shape door of `TaskSpec.advisorModel` (read only while the deployment switch is on): absent, a non-empty ref, or a
|
|
40
|
+
* Model object; anything else refuses (`config.advisor_model_invalid`) — a model the engine cannot read names no advisor. */
|
|
41
|
+
export declare function assertAdvisorModelShape(ref: unknown): void;
|
|
42
|
+
/** The three faces of one advisor call: guidance came back, the advisor model refused, or no guidance could be had. */
|
|
43
|
+
export declare const ADVISOR_OUTCOMES: readonly ["reviewed", "declined", "unavailable"];
|
|
44
|
+
export type AdvisorOutcome = (typeof ADVISOR_OUTCOMES)[number];
|
|
45
|
+
/** The static verdict: the advisor attaches on `model`, or does not and says why. */
|
|
46
|
+
export type AdvisorAttachVerdict = {
|
|
47
|
+
readonly state: "on";
|
|
48
|
+
readonly model: Model;
|
|
49
|
+
} | {
|
|
50
|
+
readonly state: "not_attached";
|
|
51
|
+
readonly reason: Exclude<AdvisorNotAttachedReason, "route_refused" | "excluded" | "hold_unknown">;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Whether the advisor tool attaches for `advisor` beside the run's `main` model, in command order: the deployment switch,
|
|
55
|
+
* then the advisor itself (a model the catalog cannot resolve, one on no declared tier, one on the weakest tier — `lite`,
|
|
56
|
+
* the tier the `haiku` alias names), then the main model (on no declared tier, or on a WEAKER tier than the advisor's:
|
|
57
|
+
* an advisor at least as capable as the main model attaches). Tiers are read by the classifier seat's own reading
|
|
58
|
+
* ({@link tierIndexOf}) over a catalog {@link normalizeSeatDeps} expanded, so a host holding raw deps gets the engine's
|
|
59
|
+
* answer. No tiers declared ⇒ no ranks ⇒ not attached.
|
|
60
|
+
*/
|
|
61
|
+
export declare function advisorAttachVerdict(args: {
|
|
62
|
+
deps: Pick<RunnerDeps, "models" | "tiers" | "advisorTool">;
|
|
63
|
+
main: Model;
|
|
64
|
+
advisor: ModelRef;
|
|
65
|
+
}): AdvisorAttachVerdict;
|
|
66
|
+
/**
|
|
67
|
+
* Which failure of an advisor request switches the advisor off for the conversation: the advisor model's credential refused
|
|
68
|
+
* (`auth`), or a provider 400 / 422 its minter ruled out as an over-window request (`invalid_request` with
|
|
69
|
+
* `inputTooLongRuledOut`) — deterministic client faults that repeat until the conversation is compacted. Every other code,
|
|
70
|
+
* an over-window refusal and an unclassified 400 pass (the next call may succeed). Total over the brain codes by its fence.
|
|
71
|
+
*/
|
|
72
|
+
export declare const ADVISOR_HOLD_CAUSES: Readonly<{
|
|
73
|
+
readonly auth: "hold";
|
|
74
|
+
readonly invalid_request: "hold_unless_window";
|
|
75
|
+
readonly rate_limit: "pass";
|
|
76
|
+
readonly server: "pass";
|
|
77
|
+
readonly network: "pass";
|
|
78
|
+
readonly http: "pass";
|
|
79
|
+
readonly stream_torn: "pass";
|
|
80
|
+
readonly refusal: "pass";
|
|
81
|
+
readonly length_empty: "pass";
|
|
82
|
+
}>;
|
|
83
|
+
/** What one failure's code does to the conversation's advisor ({@link ADVISOR_HOLD_CAUSES}). */
|
|
84
|
+
export type AdvisorHoldDisposition = "hold" | "hold_unless_window" | "pass";
|
|
85
|
+
export type HoldCausesCoverEveryBrainCode = AssertAllKeysHandled<Exclude<BrainErrorCode, keyof typeof ADVISOR_HOLD_CAUSES>>;
|
|
86
|
+
/** What a failed advisor request said about itself — the fields the hold reads and the card carries. */
|
|
87
|
+
export interface AdvisorFailure {
|
|
88
|
+
readonly code?: BrainErrorCode;
|
|
89
|
+
readonly errorKind?: "input_too_long" | "degenerate" | "length_empty";
|
|
90
|
+
readonly inputTooLongRuledOut?: true;
|
|
91
|
+
}
|
|
92
|
+
/** Whether this failure switches the advisor off for the conversation ({@link ADVISOR_HOLD_CAUSES}). */
|
|
93
|
+
export declare function advisorFailureHolds(f: AdvisorFailure): boolean;
|
|
94
|
+
/** The conversation's advisor switch-off, with the cause of the call that switched it. */
|
|
95
|
+
export interface AdvisorHold {
|
|
96
|
+
readonly code?: BrainErrorCode;
|
|
97
|
+
readonly errorKind?: AdvisorFailure["errorKind"];
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Whether the conversation on this branch has switched the advisor off, read off the transcript: an advisor tool result
|
|
101
|
+
* recorded after the latest compaction whose card says `hold: true` — the latest such card's cause. A compaction clears it
|
|
102
|
+
* (the card lands before it); a new conversation has none; a fork copies its parent's branch and with it the hold.
|
|
103
|
+
* `undefined` = not held. Members of a recorded card outside their closed sets are not carried.
|
|
104
|
+
*/
|
|
105
|
+
export declare function advisorHoldOf(entries: ReadonlyArray<SessionTreeEntry>): AdvisorHold | undefined;
|
|
106
|
+
/** A not-attached reason the person is told about — its own fact or one they can act on — as a type. */
|
|
107
|
+
export type AdvisorToldReason = {
|
|
108
|
+
[R in AdvisorNotAttachedReason]: (typeof NOT_ATTACHED_SENTENCE)[R] extends null ? never : R;
|
|
109
|
+
}[AdvisorNotAttachedReason];
|
|
110
|
+
/** Whether the person is told about this reason ({@link NOT_ATTACHED_SENTENCE}: the reasons with a sentence). */
|
|
111
|
+
export declare function advisorReasonTold(reason: AdvisorNotAttachedReason): reason is AdvisorToldReason;
|
|
112
|
+
/** The `advisor.not_attached` notice for a reason the person is told about. */
|
|
113
|
+
export declare function advisorNotAttachedNotice(args: {
|
|
114
|
+
reason: AdvisorToldReason;
|
|
115
|
+
advisorModel: string;
|
|
116
|
+
mainModel: string;
|
|
117
|
+
sessionId: string;
|
|
118
|
+
runId?: string;
|
|
119
|
+
}): EngineNotice;
|
|
120
|
+
export {};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { ALL_BRAIN_ERROR_CODES } from "../brain/errors.js";
|
|
2
|
+
import { DEFAULT_TIER_ORDER, resolveModel } from "./roles.js";
|
|
3
|
+
import { normalizeSeatDeps, tierIndexOf } from "./runner/classifier-ladder.js";
|
|
4
|
+
export const ADVISOR_TOOL_NAME = "advisor";
|
|
5
|
+
export const ADVISOR_FORK_SENTENCE = "Never consult the advisor tool.";
|
|
6
|
+
export const ADVISOR_NOT_ATTACHED_REASONS = Object.freeze(["disabled", "unknown_model", "advisor_unranked", "weakest_tier", "main_unranked", "pairing", "route_refused", "excluded", "hold_unknown"]);
|
|
7
|
+
const NOT_ATTACHED_SENTENCE = {
|
|
8
|
+
disabled: null,
|
|
9
|
+
unknown_model: (a) => `The advisor model "${a}" is not in this deployment's model catalog, so the advisor is off.`,
|
|
10
|
+
advisor_unranked: (a) => `"${a}" cannot be used as an advisor: the deployment declares no tier for it (declare RunnerDeps.tiers so the engine knows which model is stronger).`,
|
|
11
|
+
weakest_tier: (a) => `"${a}" cannot be used as an advisor: it is on the weakest tier.`,
|
|
12
|
+
main_unranked: (_a, m) => `The advisor will not activate on the main model (${m}): the deployment declares no tier for it (declare RunnerDeps.tiers). Subagents may still use it.`,
|
|
13
|
+
pairing: (a, m) => `${a} is less capable than the current main model (${m}), so the advisor will not activate. Choose a more capable advisor, or switch to a smaller main model.`,
|
|
14
|
+
route_refused: null,
|
|
15
|
+
excluded: null,
|
|
16
|
+
hold_unknown: () => `The advisor is off for this run: whether this conversation had switched it off could not be read.`,
|
|
17
|
+
};
|
|
18
|
+
export function assertAdvisorModelShape(ref) {
|
|
19
|
+
if (ref === undefined || (typeof ref === "string" ? ref !== "" : typeof ref === "object" && ref !== null && typeof ref.id === "string"))
|
|
20
|
+
return;
|
|
21
|
+
const shown = typeof ref === "string" ? "an empty string" : ref === null ? "null" : Array.isArray(ref) ? "an array" : typeof ref;
|
|
22
|
+
throw Object.assign(new Error(`TaskSpec.advisorModel must be a non-empty model ref or a Model (got ${shown}) — a model the engine cannot read names no advisor.`), { code: "config.advisor_model_invalid" });
|
|
23
|
+
}
|
|
24
|
+
export const ADVISOR_OUTCOMES = Object.freeze(["reviewed", "declined", "unavailable"]);
|
|
25
|
+
export function advisorAttachVerdict(args) {
|
|
26
|
+
if (args.deps.advisorTool === "disabled")
|
|
27
|
+
return { state: "not_attached", reason: "disabled" };
|
|
28
|
+
const deps = normalizeSeatDeps(args.deps);
|
|
29
|
+
let advisor;
|
|
30
|
+
try {
|
|
31
|
+
advisor = resolveModel(args.advisor, deps.models);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return { state: "not_attached", reason: "unknown_model" };
|
|
35
|
+
}
|
|
36
|
+
const advisorTier = tierIndexOf(deps, advisor);
|
|
37
|
+
if (advisorTier === undefined)
|
|
38
|
+
return { state: "not_attached", reason: "advisor_unranked" };
|
|
39
|
+
if (advisorTier === DEFAULT_TIER_ORDER.indexOf("lite"))
|
|
40
|
+
return { state: "not_attached", reason: "weakest_tier" };
|
|
41
|
+
const mainTier = tierIndexOf(deps, args.main);
|
|
42
|
+
if (mainTier === undefined)
|
|
43
|
+
return { state: "not_attached", reason: "main_unranked" };
|
|
44
|
+
if (advisorTier > mainTier)
|
|
45
|
+
return { state: "not_attached", reason: "pairing" };
|
|
46
|
+
return { state: "on", model: advisor };
|
|
47
|
+
}
|
|
48
|
+
export const ADVISOR_HOLD_CAUSES = Object.freeze({
|
|
49
|
+
auth: "hold",
|
|
50
|
+
invalid_request: "hold_unless_window",
|
|
51
|
+
rate_limit: "pass",
|
|
52
|
+
server: "pass",
|
|
53
|
+
network: "pass",
|
|
54
|
+
http: "pass",
|
|
55
|
+
stream_torn: "pass",
|
|
56
|
+
refusal: "pass",
|
|
57
|
+
length_empty: "pass",
|
|
58
|
+
});
|
|
59
|
+
export function advisorFailureHolds(f) {
|
|
60
|
+
if (f.code === undefined)
|
|
61
|
+
return false;
|
|
62
|
+
const row = ADVISOR_HOLD_CAUSES[f.code];
|
|
63
|
+
return row === "hold" || (row === "hold_unless_window" && f.errorKind !== "input_too_long" && f.inputTooLongRuledOut === true);
|
|
64
|
+
}
|
|
65
|
+
const ERROR_KINDS = new Set(["input_too_long", "degenerate", "length_empty"]);
|
|
66
|
+
export function advisorHoldOf(entries) {
|
|
67
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
68
|
+
const e = entries[i];
|
|
69
|
+
if (e.type === "compaction")
|
|
70
|
+
return undefined;
|
|
71
|
+
if (e.type !== "message" || e.message.role !== "toolResult" || e.message.toolName !== ADVISOR_TOOL_NAME)
|
|
72
|
+
continue;
|
|
73
|
+
const d = e.message.details;
|
|
74
|
+
if (d === null || typeof d !== "object" || d.type !== "advisor" || d.hold !== true)
|
|
75
|
+
continue;
|
|
76
|
+
const code = ALL_BRAIN_ERROR_CODES.find((c) => c === d.code);
|
|
77
|
+
const errorKind = typeof d.errorKind === "string" && ERROR_KINDS.has(d.errorKind) ? d.errorKind : undefined;
|
|
78
|
+
return { ...(code !== undefined ? { code } : {}), ...(errorKind !== undefined ? { errorKind } : {}) };
|
|
79
|
+
}
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
export function advisorReasonTold(reason) {
|
|
83
|
+
return NOT_ATTACHED_SENTENCE[reason] !== null;
|
|
84
|
+
}
|
|
85
|
+
export function advisorNotAttachedNotice(args) {
|
|
86
|
+
const sentence = NOT_ATTACHED_SENTENCE[args.reason];
|
|
87
|
+
return {
|
|
88
|
+
code: "advisor.not_attached",
|
|
89
|
+
message: sentence(args.advisorModel, args.mainModel),
|
|
90
|
+
detail: { advisorModel: args.advisorModel, mainModel: args.mainModel, reason: args.reason, sessionId: args.sessionId, ...(args.runId !== undefined ? { runId: args.runId } : {}) },
|
|
91
|
+
};
|
|
92
|
+
}
|
|
@@ -19,8 +19,7 @@ export interface AgentDefinition {
|
|
|
19
19
|
/** Guidance shown to the model for WHEN to pick this agent (listed in the delegation tool's description). */
|
|
20
20
|
whenToUse?: string;
|
|
21
21
|
/**
|
|
22
|
-
* F4 (
|
|
23
|
-
* `(lean && e.whenToUseLean) || e.whenToUse`): a SHORT variant of {@link whenToUse} preferred on
|
|
22
|
+
* F4 (`whenToUseLean`): a SHORT variant of {@link whenToUse} preferred on
|
|
24
23
|
* lean-prompt surfaces. sema posture: the engine runs the CC lean-prompt arm wholesale (web.ts
|
|
25
24
|
* lean-card precedent), so roster listings/descriptions prefer this text whenever present;
|
|
26
25
|
* {@link whenToUse} remains the fallback. Optional — a single-text agent behaves exactly as before.
|
|
@@ -36,7 +35,7 @@ export interface AgentDefinition {
|
|
|
36
35
|
/** Tool denylist (a deny always wins), tool NAMES: `Tool(content)` hides the whole `Tool`. See {@link allowTools} for the per-agent delegation-tool note. */
|
|
37
36
|
denyTools?: string[];
|
|
38
37
|
/**
|
|
39
|
-
* F7 (
|
|
38
|
+
* F7 (per-agent `skills`:
|
|
40
39
|
* CC preloads each named skill's prompt content into the child's opening messages, warning on misses).
|
|
41
40
|
* sema shape: full {@link SkillSpec} objects (sema has no ambient skill registry to resolve bare names
|
|
42
41
|
* against) threaded into the chosen child's `TaskSpec.skills` — disclosed in its `<skills>` block +
|
|
@@ -44,7 +43,7 @@ export interface AgentDefinition {
|
|
|
44
43
|
*/
|
|
45
44
|
skills?: SkillSpec[];
|
|
46
45
|
/**
|
|
47
|
-
* F7 (
|
|
46
|
+
* F7 (per-agent `background`, OR-ed into
|
|
48
47
|
* the background predicate, GA/ungated): `true` = this agent ALWAYS launches on the background lane
|
|
49
48
|
* (an omitted `run_in_background` no longer means sync, and the per-call parameter cannot force sync —
|
|
50
49
|
* CC-same OR semantics). Requires the delegation tool's `background` surface; without one the child
|
|
@@ -52,7 +51,7 @@ export interface AgentDefinition {
|
|
|
52
51
|
*/
|
|
53
52
|
background?: boolean;
|
|
54
53
|
/**
|
|
55
|
-
* F7 (
|
|
54
|
+
* F7 (per-agent `isolation`):
|
|
56
55
|
* default isolation for this agent; an explicit per-call `isolation` argument wins. sema supports
|
|
57
56
|
* `"worktree"` (CC's `"remote"` arm is a claude.ai-session concern, not ported).
|
|
58
57
|
*/
|
|
@@ -86,8 +85,8 @@ export interface AgentDefinition {
|
|
|
86
85
|
*/
|
|
87
86
|
memoryPersistenceCapable?: boolean;
|
|
88
87
|
/**
|
|
89
|
-
* Observer agents (
|
|
90
|
-
* 面 C
|
|
88
|
+
* Observer agents (schema
|
|
89
|
+
* 面 C): "Agent type auto-spawned as a background observer whenever this agent runs.
|
|
91
90
|
* The observer receives read-only activity digests and reports via the ObserverReport tool; it
|
|
92
91
|
* never participates in the task." Resolution is warn-and-unobserved on an unknown type and
|
|
93
92
|
* refuses chaining (an observer's own `observer` declaration is ignored). Gated by
|
|
@@ -116,7 +115,7 @@ export interface SkillSpec {
|
|
|
116
115
|
* either list asks once (`Execute skill: <name>`, the card listing what it releases); a skill the person invoked by
|
|
117
116
|
* name ({@link import("./task-spec.js").TaskSpec.userInvokedSkills}) grants without asking. The grant holds for that
|
|
118
117
|
* run (a steer it takes in does not end it) and the next runTask starts without it. An entry this grammar reads as nothing — `*` (it voids an allow list; on a deny list it is inert and the rest of the
|
|
119
|
-
* list still refuses), `mcp__
|
|
118
|
+
* list still refuses), `mcp__*` / `mcp__*__*` (an allow entry names a peer), a write path, a domain — grants nothing and is announced at the start of the run (`permission.allowed_tool_not_granted`). A table whose value is not a list (a string, an object…) reads as one such entry; `null` is no table.
|
|
120
119
|
*/
|
|
121
120
|
allowedTools?: string[];
|
|
122
121
|
/** The tools refused for the rest of the run this skill is activated in — the frontmatter `disallowed-tools` list,
|
|
@@ -158,4 +157,14 @@ export interface SkillSpec {
|
|
|
158
157
|
* byte-identical result; a placeholder with no directory stays verbatim.
|
|
159
158
|
*/
|
|
160
159
|
baseDir?: string;
|
|
160
|
+
/**
|
|
161
|
+
* The hooks this skill carries — registrations on the mods bus (the `TaskSpec.mods` form: user tier, a name unique in the
|
|
162
|
+
* run), whose handlers take part only while the skill is ACTIVE on the leg that loads it: from its activation (the `Skill`
|
|
163
|
+
* tool's success, or prepare for a skill the person invoked by name; a resumed run reopens the skills its park recorded
|
|
164
|
+
* active) to the end of that run. A host compiles a frontmatter `hooks:` table into one such registration; the engine
|
|
165
|
+
* reads no hook grammar. Each hangs `classic.*` events only (any other event refuses the prepare, `config.mods_invalid`).
|
|
166
|
+
* They are admitted with the leg's other registrations at its prepare (so a skill never activated still counts as a hook
|
|
167
|
+
* the leg may run) and stay the leg's own: a delegated child neither dispatches them nor is screened by them.
|
|
168
|
+
*/
|
|
169
|
+
mods?: readonly import("./mods/classic-events.js").EngineModRegistration[];
|
|
161
170
|
}
|