@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
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* same defect has been found and fixed one site at a time (RB-122 in `clipWithFilePointer`, then
|
|
10
10
|
* `truncateError`, then the three siblings above), which is exactly the shape a shared primitive prevents.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
12
|
+
* Head / tail helpers: drop the straddling code point WHOLE
|
|
13
13
|
* rather than emit half of it. Zero imports, so any module in the repo may depend on it without risking an
|
|
14
14
|
* import cycle.
|
|
15
15
|
*
|
|
@@ -25,7 +25,7 @@ export declare const isHighSurrogate: (c: number) => boolean;
|
|
|
25
25
|
export declare const isLowSurrogate: (c: number) => boolean;
|
|
26
26
|
/**
|
|
27
27
|
* Head-keep of at most `keep` code UNITS that never ends on a lone high surrogate — a code point straddling
|
|
28
|
-
* the cut is dropped whole
|
|
28
|
+
* the cut is dropped whole.
|
|
29
29
|
*
|
|
30
30
|
* Callers must derive any "how much was dropped" count from the RETURNED length, never from `keep`: when
|
|
31
31
|
* the rollback fires the result is one unit SHORTER than the budget, and a count computed from `keep`
|
|
@@ -33,7 +33,7 @@ export declare const isLowSurrogate: (c: number) => boolean;
|
|
|
33
33
|
*/
|
|
34
34
|
export declare function sliceHeadSafe(s: string, keep: number): string;
|
|
35
35
|
/**
|
|
36
|
-
* Tail-keep counterpart: at most `keep` code units, never STARTING on a lone low surrogate (
|
|
36
|
+
* Tail-keep counterpart: at most `keep` code units, never STARTING on a lone low surrogate (the reference's
|
|
37
37
|
* `_W`). Same rule for the caller's dropped-count arithmetic — read it off the returned length.
|
|
38
38
|
*/
|
|
39
39
|
export declare function sliceTailSafe(s: string, keep: number): string;
|
|
@@ -134,7 +134,7 @@ function createProbeJudge(layers, kind) {
|
|
|
134
134
|
}
|
|
135
135
|
let read;
|
|
136
136
|
try {
|
|
137
|
-
read = refuseOutOfContractDecision(d);
|
|
137
|
+
read = refuseOutOfContractDecision(d, { call: req });
|
|
138
138
|
}
|
|
139
139
|
catch (err) {
|
|
140
140
|
cannot(layer, "threw", describeThrown(err));
|
|
@@ -144,7 +144,7 @@ function createProbeJudge(layers, kind) {
|
|
|
144
144
|
cannot(layer, "rewritten", "the layer would rewrite the call's arguments, so its answer is not about this call");
|
|
145
145
|
}
|
|
146
146
|
if (read.action === "ask") {
|
|
147
|
-
ask(layer, read.message, ancestorOwned || ruleClearanceOf(ownedClearanceFacts(read), {}).mandated);
|
|
147
|
+
ask(layer, read.message, ancestorOwned || ruleClearanceOf(ownedClearanceFacts(read, req), {}).mandated);
|
|
148
148
|
return undefined;
|
|
149
149
|
}
|
|
150
150
|
if (read.action !== "deny")
|
|
@@ -182,7 +182,7 @@ function createProbeJudge(layers, kind) {
|
|
|
182
182
|
}
|
|
183
183
|
if (layers.persistedRuleLane !== undefined && !spent("persisted_rules")) {
|
|
184
184
|
const read = await readPersistedRuleLane(layers.persistedRuleLane, req, layers.signal, left());
|
|
185
|
-
const tightened = applyPersistedTightening({ action: "allow" }, read).tightened;
|
|
185
|
+
const tightened = applyPersistedTightening({ action: "allow" }, read, req).tightened;
|
|
186
186
|
if (tightened === "deny")
|
|
187
187
|
return { verdict: "deny", layer: "persisted_rules", ...judged };
|
|
188
188
|
if (tightened === "ask")
|
|
@@ -269,6 +269,15 @@ export type HumanInputDelivery = "applied" | "queued" | "parked_for_wake" | "blo
|
|
|
269
269
|
* re-listing is what keeps the two faces from drifting into two vocabularies.
|
|
270
270
|
*/
|
|
271
271
|
export type DelegationTaskType = Extract<TaskNotificationPayload["task_type"], "background_agent" | "workflow">;
|
|
272
|
+
/**
|
|
273
|
+
* Who asked for a tool call no model message carried: an extension's own call (`$.tool.call`), by its registration name.
|
|
274
|
+
* A display and audit fact only — the call runs under the run's principal, rules, mode and approver, and the name decides
|
|
275
|
+
* nothing. Carried by the call's `tool_start` / `tool_end` and by the approval card an ask for it puts to the person.
|
|
276
|
+
*/
|
|
277
|
+
export interface ExtensionRequester {
|
|
278
|
+
readonly kind: "extension";
|
|
279
|
+
readonly name: string;
|
|
280
|
+
}
|
|
272
281
|
/** Streaming events surfaced from a running task (for live UIs). */
|
|
273
282
|
export type TaskEvent = ({
|
|
274
283
|
type: "text_delta";
|
|
@@ -282,9 +291,12 @@ export type TaskEvent = ({
|
|
|
282
291
|
* the provider's `content_block_stop`), and this event is that same boundary surfaced on the TaskEvent
|
|
283
292
|
* wire.
|
|
284
293
|
*
|
|
285
|
-
* `content` = the
|
|
286
|
-
* segment
|
|
287
|
-
*
|
|
294
|
+
* `content` = the FULL text of the completed segment as the brain closed it — a consumer commits
|
|
295
|
+
* the segment from it instead of trusting its own delta stitching. It is not a promise about the
|
|
296
|
+
* committed message: when the turn finalizes the brain may still trim a degenerate cut's looped tail,
|
|
297
|
+
* add engine notes as blocks of their own, or (opt-in) rewrite text it read as tool calls. The final
|
|
298
|
+
* answer's one authority is `TaskResult.result`, and `TaskResult.resultEntryIds` names the committed
|
|
299
|
+
* messages it was read from. UNTRUSTED model output for
|
|
288
300
|
* display only, same contract as `text_delta`. Emitted only for a segment that holds bytes: an
|
|
289
301
|
* empty text block closes silently (a boundary with no segment would render phantom rows).
|
|
290
302
|
*
|
|
@@ -315,6 +327,9 @@ export type TaskEvent = ({
|
|
|
315
327
|
* ran is the paired `tool_end.notExecuted`); absent on every start the loop announced itself.
|
|
316
328
|
*/
|
|
317
329
|
recovered?: true;
|
|
330
|
+
/** An extension's own call (`$.tool.call`): who asked for it. Absent on every call a model message carried. The call is
|
|
331
|
+
* not part of the conversation — no tool-result message follows it into the transcript. */
|
|
332
|
+
requestedBy?: ExtensionRequester;
|
|
318
333
|
} & TaskEventIdentity) | ({
|
|
319
334
|
/**
|
|
320
335
|
* A LIVENESS TICK for a tool call that is still running. Emitted on the run's own queue between this
|
|
@@ -322,7 +337,7 @@ export type TaskEvent = ({
|
|
|
322
337
|
* forwarded to a parent's display sink under the SAME opt-in as those two
|
|
323
338
|
* (`TaskSpec.forwardSubagentEvents`).
|
|
324
339
|
*
|
|
325
|
-
* ONE FRAME, not two:
|
|
340
|
+
* ONE FRAME, not two: the reference splits this into a per-tool `tool_heartbeat` plus Bash's own
|
|
326
341
|
* `bash_progress`; this engine mints the single shape and lets the OUTPUT KEYS be what is conditional.
|
|
327
342
|
* Registered divergence.
|
|
328
343
|
*
|
|
@@ -413,7 +428,7 @@ export type TaskEvent = ({
|
|
|
413
428
|
* document/worktree/todo/task/task-list/task-output/task-stop/agent/fork/workflow-run/web-fetch/
|
|
414
429
|
* web-search/cron-create/cron-delete/cron-list/tool-search/repo-map/monitor-start/
|
|
415
430
|
* enter-plan-mode/exit-plan-mode/report-findings/schedule-wakeup/send-message/agent-transcript/
|
|
416
|
-
* a2a/path_not_in_root/readonly_out_of_root/read_unestablished), surfaced on the live wire so a CC-faithful shell
|
|
431
|
+
* a2a/path_not_in_root/readonly_out_of_root/read_unestablished/advisor), surfaced on the live wire so a CC-faithful shell
|
|
417
432
|
* renders rich cards (red/green diff, stdout panes, file cards) without re-parsing the
|
|
418
433
|
* model-facing string. Absent when the tool carries no card shape or when the serialized card
|
|
419
434
|
* exceeds the size bound (omitted whole; a consumer falls back to `output`).
|
|
@@ -427,13 +442,19 @@ export type TaskEvent = ({
|
|
|
427
442
|
* memory-saved / memory-recall, three words with no producer anywhere in core (a batch MultiEdit
|
|
428
443
|
* replay mints `type:"edit"` with an `edits[]` array; core mounts no memory tool at all).
|
|
429
444
|
*
|
|
445
|
+
* The **advisor** card (`type:"advisor"`, the advisor tool's every call) carries closed words, numbers and catalog ids
|
|
446
|
+
* only — `outcome` (`reviewed` / `declined` / `unavailable`, and `isError` ⇔ `unavailable`), `model`, `servedModel?`,
|
|
447
|
+
* `stopReason?`, `code?` / `errorKind?` (the failure's own words), `hold?: true` (this failure's cause switches the
|
|
448
|
+
* advisor off for the conversation until it is compacted — a classification, not a promise: the transcript says so once
|
|
449
|
+
* the result is recorded) and `usage?`. The guidance, a refusal's reason and an error's message ride {@link output}.
|
|
450
|
+
*
|
|
430
451
|
* **Leak boundary**: the allowlist gates by `type`, so what rides is whatever the minting tool put
|
|
431
452
|
* in the object — which makes each mint site responsible for its own field set. The Agent family's
|
|
432
453
|
* completed card is therefore built from an EXPLICIT whitelist rather than a child-`TaskResult`
|
|
433
454
|
* spread: a `TaskResult` can carry `checkpointToken` (the resume CAPABILITY) on the
|
|
434
455
|
* `unexpected.suspended` terminal, and that field, with `checkpointGate`, never leaves the process.
|
|
435
456
|
*
|
|
436
|
-
* **双面契约(
|
|
457
|
+
* **双面契约(`tool_use_result` describe;P2-3)** — a tool
|
|
437
458
|
* result has TWO faces that never substitute for each other:
|
|
438
459
|
* - **模型面** = {@link output} / the tool_result text: the string the MODEL reads. It may carry
|
|
439
460
|
* model-directed framing — e.g. a delegation tool's trailer (agentId / usage lines the model uses to
|
|
@@ -558,8 +579,18 @@ export type TaskEvent = ({
|
|
|
558
579
|
* ABSENT means only that no such evidence exists — never "it ran": a call closed with its outcome unknown
|
|
559
580
|
* (a reconcile at the next process start, a call interrupted mid-execution) carries no mark, because
|
|
560
581
|
* telling a consumer it did not run could invite a replay of a write that already took effect.
|
|
582
|
+
* One more source of that evidence: an extension at `tool.call` answered for the call in place of its body (its own
|
|
583
|
+
* result, or its refusal) — the body was never called; {@link answeredBy} names it.
|
|
561
584
|
*/
|
|
562
585
|
notExecuted?: true;
|
|
586
|
+
/**
|
|
587
|
+
* The extension (its registration name) that answered for this call at `tool.call` in place of the tool's body — a
|
|
588
|
+
* result of its own, or a refusal — so the body never ran (`notExecuted` is set beside it). Absent on every call
|
|
589
|
+
* whose body ran or that no extension answered.
|
|
590
|
+
*/
|
|
591
|
+
answeredBy?: string;
|
|
592
|
+
/** The same member as the paired `tool_start`'s: an extension's own call, and who asked for it. */
|
|
593
|
+
requestedBy?: ExtensionRequester;
|
|
563
594
|
/**
|
|
564
595
|
* design/99 §E1 — `true` exactly when {@link output} is not the content the tool returned: text was cut at the cap
|
|
565
596
|
* (the string, or the block at the cut, carries the marker; the stream's later blocks left), a media block was
|
|
@@ -825,6 +856,9 @@ export type TaskEvent = ({
|
|
|
825
856
|
* on the model lane). [c209-C]: the listing family's FIRST-FRAME deliveries (initial roster /
|
|
826
857
|
* `<skills>` block riding the first user message, not a steer) emit the same echo frames.
|
|
827
858
|
*
|
|
859
|
+
* `mcp_unavailable`: the declared MCP servers that did not connect for this message — echoed where the notice rides
|
|
860
|
+
* (a fresh leg's first user message; a resumed leg's continuation). It used to ride `tools_delta`.
|
|
861
|
+
*
|
|
828
862
|
* `git_status` (env-tail migration, additive member): the git-status frame — the turn-dynamic
|
|
829
863
|
* git facts' carrier since they left the system prompt. Emitted at the frame's append RECEIPT
|
|
830
864
|
* (first-frame / resume-continuation / compaction re-assert deliveries alike). Its `preview`
|
|
@@ -837,11 +871,11 @@ export type TaskEvent = ({
|
|
|
837
871
|
* echo; the retired `plan_mode` member was the echo of the opt-in planning reminder they replaced.
|
|
838
872
|
*/
|
|
839
873
|
type: "steering_injected";
|
|
840
|
-
source: "limit_approach" | "todo_reminder" | "task_reminder" | "tool_search_usage_reminder" | "changed_files" | "output_style" | "date_change" | "instructions_change" | "workflow_size_guideline_change" | "budget_usd" | "total_tokens_reminder" | "background_tasks" | "tools_delta" | "agent_listing" | "skills_listing" | "mcp_instructions" | "mcp_dropped_tools" | "final_verification" | "git_status";
|
|
874
|
+
source: "limit_approach" | "todo_reminder" | "task_reminder" | "tool_search_usage_reminder" | "changed_files" | "output_style" | "date_change" | "instructions_change" | "workflow_size_guideline_change" | "budget_usd" | "total_tokens_reminder" | "background_tasks" | "tools_delta" | "mcp_unavailable" | "agent_listing" | "skills_listing" | "mcp_instructions" | "mcp_dropped_tools" | "final_verification" | "git_status";
|
|
841
875
|
preview: string;
|
|
842
876
|
} & TaskEventIdentity) | ({
|
|
843
877
|
/**
|
|
844
|
-
* design/121 (
|
|
878
|
+
* design/121 (`<new-diagnostics>`): NEW LSP diagnostics that appeared after the
|
|
845
879
|
* agent's edits, drained at a turn boundary. The SAME data was injected into the model as a
|
|
846
880
|
* `<new-diagnostics>` context message; this frame is the shell's render source (CC's collapsed
|
|
847
881
|
* `Found N new diagnostic issues in M files (ctrl+o to expand)` row). UNTRUSTED RAW (language-
|
|
@@ -26,7 +26,7 @@ export declare function isNotificationInjectionOutcome(value: unknown): value is
|
|
|
26
26
|
export type NotificationDisposition = Exclude<NotificationInjectionOutcome, "dropped_duplicate">;
|
|
27
27
|
/** The closed value set of {@link SystemInjectionPriority}, as data — the wire-facing entries validate
|
|
28
28
|
* against THIS rather than against three inline string literals, so widening the type widens the guard.
|
|
29
|
-
* (Names taken
|
|
29
|
+
* (Names taken from the reference; see the semantics note on
|
|
30
30
|
* {@link SystemInjection.priority} for which of CC's behaviors this engine implements.) */
|
|
31
31
|
export declare const SYSTEM_INJECTION_PRIORITIES: readonly SystemInjectionPriority[];
|
|
32
32
|
/** backlog #389 伴生 (D-3, bad-value loudness) — is this a priority this engine knows at all? A value
|
|
@@ -265,8 +265,9 @@ export interface TaskNotificationPayload {
|
|
|
265
265
|
* `[Cross-session idle notice] …` as a plain user-frame line) — never a `<task-notification>` shell,
|
|
266
266
|
* never the peer-message envelope (a notice is engine speech about a peer, not a peer's words; the
|
|
267
267
|
* envelope would put it past the parity judgment as a peer's request). `text` is rendered by the
|
|
268
|
-
* drain from the record's TYPED `peerMeta.notice` (the authority
|
|
269
|
-
*
|
|
268
|
+
* drain from the record's TYPED `peerMeta.notice` (the authority, which rides THIS frame once, at
|
|
269
|
+
* `_sema_provenance.peerMeta.notice` — a host renders a card from there, never by parsing `text`); the
|
|
270
|
+
* record's own `content` mirror is never what reaches the model. Minted ONLY by the engine's session-box drain.
|
|
270
271
|
*/
|
|
271
272
|
crossSessionNotice?: {
|
|
272
273
|
kind: "delivery_notice" | "idle_notice";
|
|
@@ -275,29 +276,32 @@ export interface TaskNotificationPayload {
|
|
|
275
276
|
/**
|
|
276
277
|
* design/385 §1.4 d1 / §4.1 — the engine-minted PROVENANCE side record of an engine-injected peer
|
|
277
278
|
* frame, a typed key (never model text) so a host can attribute and correlate the injection on the
|
|
278
|
-
* wire. Present exactly when {@link agentMessage}
|
|
279
|
-
*
|
|
279
|
+
* wire. Present exactly when one of the four peer carriers is ({@link agentMessage}, {@link crossSessionMessage},
|
|
280
|
+
* {@link crossSessionNotice}, {@link inboxNotice}) — one record per frame, `kind` naming which. Its fields are read per `kind` (see {@link SemaProvenance}):
|
|
280
281
|
* on the agent-message lane `from` is the sender label the frame's attribute spells, `taskId` the
|
|
281
282
|
* sender's run/agent id, `seq` the producer's per-frame counter (= this payload's `seq`) and
|
|
282
|
-
* `agentType` the sender's resolved agent type when the producer knows it; on the
|
|
283
|
-
*
|
|
284
|
-
* and the typed peer
|
|
283
|
+
* `agentType` the sender's resolved agent type when the producer knows it; on the two box-record
|
|
284
|
+
* lanes `from` is the sender's ADDRESS, `taskId` the recipient's own box handle, `seq` the box seq,
|
|
285
|
+
* and the record's typed peer metadata rides in `peerMeta` (on a notice frame its `notice` is THE typed notice).
|
|
285
286
|
*/
|
|
286
287
|
_sema_provenance?: SemaProvenance;
|
|
287
288
|
}
|
|
288
289
|
/** design/385 §1.4 d1 / §4.1 — see {@link TaskNotificationPayload._sema_provenance}. `kind` is a
|
|
289
|
-
* closed set of the
|
|
290
|
+
* closed set of the engine carriers that mint the record; a future carrier adds a member, never a
|
|
290
291
|
* second key. */
|
|
291
292
|
export interface SemaProvenance {
|
|
292
|
-
/** `agent_message` = the same-process uplink (§1.4 d1); `cross_session_message`
|
|
293
|
-
* drain (§4.1) — `from` is then the sender's ADDRESS, `taskId` the
|
|
294
|
-
* `seq` the box seq, and the typed
|
|
293
|
+
/** `agent_message` = the same-process uplink (§1.4 d1); `cross_session_message` / `cross_session_notice` =
|
|
294
|
+
* the session-box drain over a box record (§4.1 / §4.4) — `from` is then the sender's ADDRESS, `taskId` the
|
|
295
|
+
* recipient's own box handle, `seq` the box seq, and the record's typed meta rides in `peerMeta`;
|
|
296
|
+
* `inbox_notice` = the drain's own line about its box (no record behind it: its facts are the carrier's). */
|
|
295
297
|
kind: "agent_message" | "cross_session_message" | "cross_session_notice" | "inbox_notice";
|
|
296
298
|
from: string;
|
|
297
299
|
taskId: string;
|
|
298
300
|
seq: number;
|
|
299
301
|
agentType?: string;
|
|
300
|
-
/** cross_session_message
|
|
302
|
+
/** The two box-record kinds (`cross_session_message`, `cross_session_notice`) — the store record's typed peer
|
|
303
|
+
* metadata, verbatim (authority; a notice frame's `peerMeta.notice` is the typed notice, its carrier holds only
|
|
304
|
+
* the rendered line). Absent on `agent_message` / `inbox_notice`, and on a record that carried no peerMeta. */
|
|
301
305
|
peerMeta?: import("./mailbox-store.js").MailboxPeerMeta;
|
|
302
306
|
}
|
|
303
307
|
/**
|
|
@@ -327,8 +331,8 @@ export interface ExternalNotificationInput {
|
|
|
327
331
|
export interface SystemInjection<TPayload = unknown> {
|
|
328
332
|
kind: "task_notification";
|
|
329
333
|
/**
|
|
330
|
-
* design/373 — the injection ladder is LIVE (all three values carry delivery semantics, the
|
|
331
|
-
*
|
|
334
|
+
* design/373 — the injection ladder is LIVE (all three values carry delivery semantics, the reference's
|
|
335
|
+
* form; the flat "every priority delivers at the next boundary" era ended with this
|
|
332
336
|
* design — its H-1 anchor-correction note is preserved in the design archive, and the ruled
|
|
333
337
|
* changes it named are exactly what landed here):
|
|
334
338
|
*
|
|
@@ -282,12 +282,12 @@ export declare function abortBackgroundAgentsForOwnerLane(core: DurableAgentCore
|
|
|
282
282
|
skipSessionScoped?: boolean;
|
|
283
283
|
sessionScopedOnly?: boolean;
|
|
284
284
|
}): number;
|
|
285
|
-
/**
|
|
286
|
-
*
|
|
285
|
+
/** Name resolution over the caller-visible background_agent rows
|
|
286
|
+
* (sema's single-lane subset: no teammate/name-registry branches).
|
|
287
287
|
*
|
|
288
288
|
* [c209-D] PUBLIC + explicit-name layer 0: the single resolver both TaskStop (:1839 leg) and
|
|
289
289
|
* SendMessage consume, so the two verbs can never drift. Ladder:
|
|
290
|
-
* 0a.
|
|
290
|
+
* 0a. exact `handle.name` match — LATEST-WINS (the reference's SendMessage doc: "a newer agent took the name
|
|
291
291
|
* (latest wins)"; older rows stay task_id-addressable), any status (names keep working after
|
|
292
292
|
* completion — the resume face is the CC "resumes it from its transcript" counterpart).
|
|
293
293
|
* **Latest-wins is RESOLUTION, not permission to redirect a conversation**: CC pairs the same
|
|
@@ -446,7 +446,7 @@ export declare function deliverToRunningAgentLane(core: DurableAgentCore, id: st
|
|
|
446
446
|
* very rows a retry needs. The task faces' split lives in `runningAgentFooterLane` (RB-332). */
|
|
447
447
|
export declare function runningBackgroundAgentLabelsLane(core: DurableAgentCore, access: TaskAccess): string[];
|
|
448
448
|
/**
|
|
449
|
-
* The not-found FOOTER's two rows, split the way
|
|
449
|
+
* The not-found FOOTER's two rows, split the way the reference assembles them:
|
|
450
450
|
* - `named` = CC `uG_` (220:467941-467953): the agentNameRegistry's KEYS whose task is a running local
|
|
451
451
|
* agent, listed as BARE NAMES — the string a retry should pass verbatim. sema's counterpart
|
|
452
452
|
* of "has a registry entry" is the handle carrying an explicit `name` (spawn-time label),
|
|
@@ -590,10 +590,10 @@ export declare const MONITOR_DEFAULT_TIMEOUT_MS = 300000;
|
|
|
590
590
|
export declare const MONITOR_MAX_TIMEOUT_MS = 3600000;
|
|
591
591
|
export declare const MONITOR_MAX_BATCHES_PER_MINUTE = 50;
|
|
592
592
|
/** Burst capacity of the storm token bucket — how many batches may fire
|
|
593
|
-
* back-to-back before the SUPPRESSION level engages.
|
|
593
|
+
* back-to-back before the SUPPRESSION level engages. Adopted from the reference. */
|
|
594
594
|
export declare const MONITOR_STORM_BURST = 10;
|
|
595
595
|
/** How long a monitor must stay CONTINUOUSLY over budget before the
|
|
596
|
-
* second level (kill) fires.
|
|
596
|
+
* second level (kill) fires. Adopted from the reference. */
|
|
597
597
|
export declare const MONITOR_STORM_KILL_AFTER_MS = 30000;
|
|
598
598
|
/** The partial-line accumulator bound. sema's `lineBuf` had NO bound —
|
|
599
599
|
* a monitored process emitting megabytes without a single newline grew it without limit (the spool's
|
|
@@ -789,7 +789,7 @@ export declare function firstDropNote(spool: {
|
|
|
789
789
|
/** ONE wording for "you stopped nothing" across every already-terminal stop face —
|
|
790
790
|
* the in-process bash/monitor/agent arms and the durable-row fallback previously split: the durable
|
|
791
791
|
* arm answered honestly while the in-process arms claimed `Terminated <id>.` over work that finished
|
|
792
|
-
* (or was killed) on its own.
|
|
792
|
+
* (or was killed) on its own. The reference refuses the call outright (`Task X is not running (status: …)`,
|
|
793
793
|
* 220:468231-468236); sema keeps the idempotent no-op posture (stopWorkflow / durable-arm precedent,
|
|
794
794
|
* no isError) but the receipt must tell the truth. */
|
|
795
795
|
export declare function alreadyTerminalStopNote(id: string, status: string): string;
|
|
@@ -840,7 +840,7 @@ export declare const DURABLE_AGENT_HANDLE_RE: RegExp;
|
|
|
840
840
|
* real child error — settleBackgroundAgent never stores it (status "killed" + stoppedBy already say
|
|
841
841
|
* it); exported so the subagent call sites and the registry agree on the exact sentinel. */
|
|
842
842
|
export declare const BG_AGENT_REAP_STOP_ERROR = "stopped (parent task ended or TaskStop)";
|
|
843
|
-
/**
|
|
843
|
+
/** TaskStop name addressing: NFKC-normalize, strip
|
|
844
844
|
* control/format chars (whitespace-class ones survive), trim, lowercase, whitespace runs → hyphens. Both
|
|
845
845
|
* the query and the candidate label go through this, so "Fix Tests" addresses "fix tests".
|
|
846
846
|
* [c209-D]: EXPORTED — SendMessage's "main" reserved lane must use the SAME canonicalization
|
|
@@ -217,6 +217,7 @@ export function formatWorkflowRun(run) {
|
|
|
217
217
|
runId: run.id,
|
|
218
218
|
type: "workflow",
|
|
219
219
|
status: run.status,
|
|
220
|
+
...(summary.parked ? { parked: true } : {}),
|
|
220
221
|
...(summary.name ? { name: summary.name } : {}),
|
|
221
222
|
...(summary.currentPhase ? { currentPhase: summary.currentPhase } : {}),
|
|
222
223
|
agents: { done, total: run.agents.length, failed },
|
|
@@ -33,7 +33,7 @@ export interface RegisterBackgroundBashInput extends TaskAccess {
|
|
|
33
33
|
* rolling bound) and fires ONE completion task-notification at the terminal state — the background-bash
|
|
34
34
|
* half of CC's LocalShellTask completion notify. Also flips TaskOutput to re-readable spool reads. */
|
|
35
35
|
onTerminal?: (notification: TaskNotificationPayload) => void;
|
|
36
|
-
/**
|
|
36
|
+
/** The task's OUTPUT FILE — the launch receipt advertises it and the watcher
|
|
37
37
|
* mirrors every polled increment into it (append-only, unbounded — unlike the rolling in-memory
|
|
38
38
|
* spool), so "Read the output file path" is a real alternative to TaskOutput. Terminal
|
|
39
39
|
* task-notifications carry the same path (`output_file`). Primarily meaningful with `onTerminal`
|
|
@@ -66,9 +66,9 @@ export interface TaskPollOptions {
|
|
|
66
66
|
filter?: string;
|
|
67
67
|
/** design/116 W3 (CC TaskOutput `block`): wait until the task reaches a terminal state (or `timeoutMs`)
|
|
68
68
|
* instead of returning the instantaneous snapshot — saves the model blind re-poll turns. The TOOL layer
|
|
69
|
-
* defaults this to TRUE (
|
|
69
|
+
* defaults this to TRUE (裁定 2026-07-02); registry callers pass it explicitly. */
|
|
70
70
|
block?: boolean;
|
|
71
|
-
/** Max wait for `block` (ms). Default 30s, capped at 600s
|
|
71
|
+
/** Max wait for `block` (ms). Default 30s, capped at 600s. */
|
|
72
72
|
timeoutMs?: number;
|
|
73
73
|
/** Abort signal — a blocked wait must stop when the tool call is cancelled. */
|
|
74
74
|
signal?: AbortSignal;
|
|
@@ -101,7 +101,7 @@ export interface TaskToolOptions extends TaskAccess {
|
|
|
101
101
|
* foreground clamp (design/130 P2b). When present, a BLOCKING TaskOutput wait is clamped so it
|
|
102
102
|
* cannot eat the write-out window: the model gets an honest, visible clamp note instead of a
|
|
103
103
|
* silent 10-minute blind wait into the finalize wall (TB rs**: 9.1min poll = the exact tax).
|
|
104
|
-
* CC posture note
|
|
104
|
+
* CC posture note: CC classifies WIND-DOWN waits, and its
|
|
105
105
|
* block cap rides per-query budgets — a deadline-aware wait is the sema equivalent on the tool face. */
|
|
106
106
|
deadlineMs?: () => number | undefined;
|
|
107
107
|
/** design/157 B17 S2 (fable 终判 D4) — whether a terminal <task-notification> is actually wired for
|
|
@@ -645,6 +645,9 @@ export declare class TaskRegistry {
|
|
|
645
645
|
* agent of another tree, a workflow run, an id no live handle answers (a durable row read back) — is content from beyond the
|
|
646
646
|
* boundary on a poll and nothing on a stop. */
|
|
647
647
|
boundaryLegsOf(id: string, access: TaskAccess, verb: "output" | "stop", tree: object): BoundaryLegsGiven;
|
|
648
|
+
/** What a session is still owed when one of its legs ends: each of its {@link liveTasks} delivers into a LATER leg of the session —
|
|
649
|
+
* another tree — so each is read as that leg's poll of it ({@link boundaryLegsOf}, `"output"`, under a tree no handle recorded). */
|
|
650
|
+
owedDeliveries(access: TaskAccess): BoundaryLegsGiven[];
|
|
648
651
|
pollTask(id: string, access: TaskAccess, opts?: TaskPollOptions): Promise<UnifiedTaskResult>;
|
|
649
652
|
stopTask(id: string, access: TaskAccess, opts?: TaskStopOptions): Promise<UnifiedTaskResult>;
|
|
650
653
|
/** S2b — bounded delivery-confirmation wait (see deliverToRunningAgent). Test-tunable. */
|
|
@@ -677,6 +680,12 @@ export declare class TaskRegistry {
|
|
|
677
680
|
createdAt: number;
|
|
678
681
|
updatedAt: number;
|
|
679
682
|
}>;
|
|
683
|
+
/** The tasks `access` reaches that have not finished (`pending`, `running` or `parked`), newest first — EVERY one, with no display
|
|
684
|
+
* cap ({@link list}'s): the one reading of a leg's live background tasks (its end's {@link owedDeliveries}, the post-compaction
|
|
685
|
+
* listing and the resume's orphan diff, the suspend's snapshot), each consumer projecting its own columns from it. */
|
|
686
|
+
liveTasks(access: TaskAccess): ReturnType<TaskRegistry["list"]>;
|
|
687
|
+
/** Every row `access` reaches, newest first, in {@link list}'s projection — the one walk both readings take. */
|
|
688
|
+
private rowsUnder;
|
|
680
689
|
/** Throttled {@link gc} for hot-path callers (design/115 review B5): prepare-task runs once per task,
|
|
681
690
|
* and a full-map sweep per prepare is pure overhead — sweep at most once per minute. */
|
|
682
691
|
maybeGc(now?: number): number;
|
|
@@ -12,7 +12,7 @@ import { mintCompletionId, canAccessWorkflowRun, formatWorkflowRun, clipTaskOutp
|
|
|
12
12
|
export { normalizeAgentName, DURABLE_AGENT_HEARTBEAT_MS, DURABLE_AGENT_HANDLE_RE, BG_AGENT_REAP_STOP_ERROR } from "./task-registry-shared.js";
|
|
13
13
|
import { TASK_OUTPUT_TOOL_NAME, TASK_STOP_TOOL_NAME, TASK_OUTPUT_MISSING_ID_MESSAGE, TASK_STOP_MISSING_ID_MESSAGE, TASK_STOP_PARAMS, resolveTaskIdArg, REGISTRY_TASK_TOOL_CAPS, composeTaskOutputDescription, composeTaskOutputParams, composeTaskStopDescription, } from "./task-tool-shape.js";
|
|
14
14
|
import { durableAgentArmedLane, durableAgentRowProbeLane, beginDurableClaimLane, endDurableClaimLane, reapDurableAgentsLane, noteBackgroundAgentActivityLane, reapStaleSessionBackgroundAgentsLane, releaseDurableTranscriptAnchorLane, bindBackgroundAgentSessionLane, registerBackgroundAgentLane, recordBackgroundAgentOrgAdmissionLane, parkBackgroundAgentLane, reconcileParkedAgentsLane, claimParkedAgentLane, rollbackParkedClaimLane, consumeParkedFlipLane, finalizeParkedResumeLane, settleBackgroundAgentLane, abortBackgroundAgentsForOwnerLane, serveDurableAgentRowLane, resolveBackgroundAgentByNameLane, backgroundAgentCycleSeqLane, activeDelegationHandlesLane, markRetainedContinuationLane, reviveBackgroundAgentLane, settleRevivedAgentLane, unmarkRetainedContinuationLane, attachAgentNotifyLane, deliverToRunningAgentLane, runningBackgroundAgentLabelsLane, runningAgentFooterLane, notFoundRunningAgentsTail, pollBackgroundAgentLane, stopBackgroundAgentLane, } from "./task-registry-agent.js";
|
|
15
|
-
import { toolFace } from "./tool-catalog-entries.js";
|
|
15
|
+
import { mountRuleFace, toolFace } from "./tool-catalog-entries.js";
|
|
16
16
|
import { thrownText } from "./thrown-value.js";
|
|
17
17
|
import { agentStateSourceOfHandle, agentStateSourceOfRecord, agentStateSummary, readAgentState } from "./agent-state.js";
|
|
18
18
|
export { canAccessWorkflowRun, clipTaskOutput, MONITOR_BATCH_WINDOW_MS, MONITOR_DEFAULT_TIMEOUT_MS, MONITOR_MAX_TIMEOUT_MS, MONITOR_MAX_BATCHES_PER_MINUTE };
|
|
@@ -32,6 +32,7 @@ const TASK_PREFIX = {
|
|
|
32
32
|
background_agent: "a",
|
|
33
33
|
monitor: "m",
|
|
34
34
|
};
|
|
35
|
+
const A_LATER_LEG = Object.freeze({});
|
|
35
36
|
function noTask(taskId, runningAgents) {
|
|
36
37
|
return {
|
|
37
38
|
content: `No task found with ID: ${taskId}${runningAgents ? notFoundRunningAgentsTail(runningAgents) : ""}`,
|
|
@@ -871,6 +872,9 @@ export class TaskRegistry {
|
|
|
871
872
|
return { legs: [] };
|
|
872
873
|
return { legs: verb === "output" ? ["outside_read"] : [] };
|
|
873
874
|
}
|
|
875
|
+
owedDeliveries(access) {
|
|
876
|
+
return this.liveTasks(access).map((t) => this.boundaryLegsOf(t.task_id, access, "output", A_LATER_LEG));
|
|
877
|
+
}
|
|
874
878
|
async pollTask(id, access, opts = {}) {
|
|
875
879
|
const taskId = id.trim();
|
|
876
880
|
const deadline = opts.block ? blockDeadline(opts.timeoutMs, Date.now()) : undefined;
|
|
@@ -1017,6 +1021,12 @@ The durable record is still marked running (last update ${new Date(row.updatedAt
|
|
|
1017
1021
|
lastGcAt = 0;
|
|
1018
1022
|
list(access, opts = {}) {
|
|
1019
1023
|
const limit = Math.min(500, Math.max(1, Math.floor(opts.limit ?? 50)));
|
|
1024
|
+
return this.rowsUnder(access).slice(0, limit);
|
|
1025
|
+
}
|
|
1026
|
+
liveTasks(access) {
|
|
1027
|
+
return this.rowsUnder(access).filter((t) => t.status === "pending" || t.status === "running" || t.status === "parked");
|
|
1028
|
+
}
|
|
1029
|
+
rowsUnder(access) {
|
|
1020
1030
|
const out = [];
|
|
1021
1031
|
for (const h of this.handles.values()) {
|
|
1022
1032
|
if (!canAccess(h, access))
|
|
@@ -1034,7 +1044,7 @@ The durable record is still marked running (last update ${new Date(row.updatedAt
|
|
|
1034
1044
|
});
|
|
1035
1045
|
}
|
|
1036
1046
|
out.sort((a, b) => b.createdAt - a.createdAt);
|
|
1037
|
-
return out
|
|
1047
|
+
return out;
|
|
1038
1048
|
}
|
|
1039
1049
|
maybeGc(now = Date.now()) {
|
|
1040
1050
|
if (now - this.lastGcAt < 60_000)
|
|
@@ -1307,6 +1317,7 @@ export function createTaskOutputTool(opts) {
|
|
|
1307
1317
|
return defineTool({
|
|
1308
1318
|
name: TASK_OUTPUT_TOOL_NAME,
|
|
1309
1319
|
...toolFace("task-output"),
|
|
1320
|
+
ruleFace: mountRuleFace("task-output"),
|
|
1310
1321
|
description: composeTaskOutputDescription(caps),
|
|
1311
1322
|
parameters: composeTaskOutputParams(caps),
|
|
1312
1323
|
boundaryLegsFor: (rawArgs, at) => {
|
|
@@ -1360,6 +1371,7 @@ export function createTaskStopTool(opts) {
|
|
|
1360
1371
|
return defineTool({
|
|
1361
1372
|
name: TASK_STOP_TOOL_NAME,
|
|
1362
1373
|
...toolFace("task-stop"),
|
|
1374
|
+
ruleFace: mountRuleFace("task-stop"),
|
|
1363
1375
|
description: composeTaskStopDescription(REGISTRY_TASK_TOOL_CAPS),
|
|
1364
1376
|
parameters: TASK_STOP_PARAMS,
|
|
1365
1377
|
boundaryLegsFor: (rawArgs, at) => {
|
|
@@ -247,6 +247,24 @@ export interface TaskResult {
|
|
|
247
247
|
effectiveReasoning?: import("../brain/reasoning.js").ResolvedReasoning;
|
|
248
248
|
/** Final assistant text. */
|
|
249
249
|
result: string;
|
|
250
|
+
/**
|
|
251
|
+
* Where {@link result} was read from: the session-tree entry ids of the committed assistant messages the engine selected
|
|
252
|
+
* as the answer's source, in conversation order — the ids `message_committed.entryId` carries on the stream. One id for
|
|
253
|
+
* an ordinary answer; every member of the continuation chain when a cut answer was continued (`result` is their texts,
|
|
254
|
+
* joined). `result` is the answer's one authority: a committed message can differ from what streamed (engine notes
|
|
255
|
+
* placed at finalize, a degenerate cut trimmed), so a consumer that rendered the stream replaces the named messages'
|
|
256
|
+
* text rows with `result` instead of comparing; one that cannot bind an id (it lost that `message_committed`) reads the
|
|
257
|
+
* named entries from the session rather than guessing which rows they were.
|
|
258
|
+
*
|
|
259
|
+
* EMPTY when `result` was read from no committed message (the run produced no assistant message, or only one that was
|
|
260
|
+
* never appended — an empty failure). A named message may contribute no text (a tool-calling message a park or a stop
|
|
261
|
+
* ended on; a thinking-only head of a continuation chain), so `result` may be empty beside a non-empty list. ABSENT when
|
|
262
|
+
* the provenance is unknown: a record an older engine wrote, a result rebuilt from a checkpoint row alone, or an answer
|
|
263
|
+
* a leg read from a message committed before it began (whose append that leg never saw).
|
|
264
|
+
*
|
|
265
|
+
* Not yet byte-equal: `result` alone drops inline `<think>…</think>` blocks and is trimmed; the named messages keep both.
|
|
266
|
+
*/
|
|
267
|
+
resultEntryIds?: readonly string[];
|
|
250
268
|
/**
|
|
251
269
|
* Best-effort salvaged assistant text from a terminal FAILURE. Consumption recipe: on a non-`completed`
|
|
252
270
|
* status read `result` FIRST — most failure terminals (max-turns, budget, tool errors, …) still carry
|
|
@@ -863,7 +881,7 @@ export interface TaskResult {
|
|
|
863
881
|
*/
|
|
864
882
|
costBreakdown?: {
|
|
865
883
|
/** Root-agent LLM cost (micro-USD) = `costMicroUsd − compactionMicroUsd` (the sub-category folded into
|
|
866
|
-
* it). NOT minus nested — nested cost is never folded into `costMicroUsd` (it lands in `nested`).
|
|
884
|
+
* it): the advisor consultations the root agent made are in it. NOT minus nested — nested cost is never folded into `costMicroUsd` (it lands in `nested`).
|
|
867
885
|
* ⚠️ APPROXIMATE on a multi-slice `resource_limit` RESUME (design/80 D-E-core): the
|
|
868
886
|
* durable resource ledger persists only the AGGREGATE prior spend, not its compaction subtotal, so
|
|
869
887
|
* prior slices' compaction folds in HERE rather than into `compactionMicroUsd`. The TOTAL (`costMicroUsd`)
|
|
@@ -881,8 +899,8 @@ export interface TaskResult {
|
|
|
881
899
|
/** Within-task compaction LLM cost (micro-USD) — part of `costMicroUsd`, so subtracted from root.
|
|
882
900
|
* ⚠️ See {@link llmRootMicroUsd}: under-reports prior slices' compaction on a multi-slice resource resume. */
|
|
883
901
|
compactionMicroUsd: number;
|
|
884
|
-
/** The model calls made beside the main loop — the permission classifier's
|
|
885
|
-
* micro-USD. An **"of which" line**, not a partition member: this cost is part of `costMicroUsd` and stays INSIDE
|
|
902
|
+
/** The model calls made beside the main loop — the permission classifier's, mods' `$.model.complete` and the advisor
|
|
903
|
+
* tool's consultations — in micro-USD. An **"of which" line**, not a partition member: this cost is part of `costMicroUsd` and stays INSIDE
|
|
886
904
|
* {@link llmRootMicroUsd}, so `llmRootMicroUsd + compactionMicroUsd === costMicroUsd` keeps holding. Present once
|
|
887
905
|
* at least one such call was booked this leg (absent ⇒ none; a result with no such call is unchanged). A call
|
|
888
906
|
* whose reply carried no usage marks `stats.usageMissing` instead of adding here.
|