@sema-agent/core 7.54.1 → 7.55.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 +437 -0
- package/dist/agents/agent-transcript-tool.js +2 -1
- package/dist/agents/builtin-agents.d.ts +12 -14
- package/dist/agents/cc-peer-directory.d.ts +36 -0
- package/dist/agents/cc-peer-directory.js +138 -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/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.js +2 -1
- 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 +43 -9
- package/dist/agents/peer-directory.js +66 -23
- 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 +1 -0
- package/dist/agents/read-inbox-tool.js +2 -1
- 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 +34 -5
- package/dist/agents/subagent.d.ts +34 -79
- package/dist/agents/subagent.js +45 -46
- package/dist/agents/tool-filter.d.ts +29 -46
- package/dist/agents/tool-filter.js +8 -31
- package/dist/agents/verify.d.ts +3 -3
- package/dist/brain/anthropic.js +14 -9
- package/dist/brain/errors.d.ts +15 -0
- package/dist/brain/errors.js +10 -0
- package/dist/brain/model-presets.d.ts +4 -4
- package/dist/brain/open-responses.js +15 -10
- package/dist/brain/openai.js +17 -12
- package/dist/brain/provider-dialect.d.ts +39 -3
- package/dist/brain/provider-dialect.js +28 -0
- package/dist/brain/reasoning.d.ts +1 -1
- package/dist/brain/request-params.d.ts +55 -5
- package/dist/brain/request-params.js +35 -3
- 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/stream-engine.js +6 -5
- package/dist/brain/stream-shared.d.ts +1 -1
- package/dist/core/advisor-verdict.d.ts +120 -0
- package/dist/core/advisor-verdict.js +92 -0
- package/dist/core/agent-definition.d.ts +7 -8
- package/dist/core/allow-entry.d.ts +49 -23
- package/dist/core/allow-entry.js +57 -32
- package/dist/core/allow-rule-shadow.d.ts +7 -0
- package/dist/core/approval-object.d.ts +2 -1
- package/dist/core/approval-object.js +6 -6
- package/dist/core/ask-origin.d.ts +63 -11
- package/dist/core/ask-origin.js +27 -5
- package/dist/core/ask-question.js +10 -4
- 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-requirements.d.ts +6 -3
- package/dist/core/checkpoint-requirements.js +4 -14
- package/dist/core/checkpoint-store.d.ts +80 -51
- package/dist/core/checkpoint-store.js +56 -74
- 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 +9 -3
- package/dist/core/cross-boundary-taint.js +5 -3
- package/dist/core/decision-receipt.js +2 -2
- package/dist/core/effective-path-target.d.ts +1 -1
- package/dist/core/engine-notice.d.ts +19 -5
- 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 +59 -9
- package/dist/core/file-history-store.js +35 -17
- package/dist/core/gate-fold.js +3 -2
- package/dist/core/gate-lanes.js +12 -8
- package/dist/core/gate-outcome.d.ts +17 -4
- package/dist/core/gate-outcome.js +30 -0
- package/dist/core/governance-codes.d.ts +13 -3
- package/dist/core/governance-codes.js +10 -0
- package/dist/core/hands-band.d.ts +1 -1
- package/dist/core/hooks.d.ts +4 -4
- package/dist/core/host-target.d.ts +49 -0
- package/dist/core/host-target.js +59 -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 +13 -13
- package/dist/core/mcp.js +187 -162
- package/dist/core/media-byte-cap.d.ts +1 -1
- package/dist/core/memory-engine/engine.d.ts +9 -9
- 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/namespaced-rule-name.d.ts +33 -7
- package/dist/core/namespaced-rule-name.js +39 -25
- 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 +8 -1
- package/dist/core/parent-spec-seat.js +4 -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 +11 -5
- package/dist/core/permission-rule-consent.js +37 -30
- package/dist/core/permission-rule-model.d.ts +233 -64
- package/dist/core/permission-rule-model.js +384 -85
- package/dist/core/permission-rule-provider.d.ts +2 -1
- package/dist/core/permission-rule-store.d.ts +20 -25
- package/dist/core/permission-rule-store.js +1 -4
- package/dist/core/permission-rule-sync.d.ts +11 -2
- package/dist/core/permission-rule-sync.js +8 -1
- package/dist/core/permission-rules.d.ts +49 -11
- package/dist/core/permission-rules.js +123 -89
- package/dist/core/persisted-rule-arms.d.ts +4 -2
- package/dist/core/present-plan-tool.js +3 -1
- 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/roles.d.ts +6 -2
- package/dist/core/roles.js +45 -44
- 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 +28 -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 +4 -26
- package/dist/core/runner/announce-once-ledger.js +14 -46
- package/dist/core/runner/approval-feedback.js +6 -3
- package/dist/core/runner/assemble-result.d.ts +1 -1
- package/dist/core/runner/caller-roster.d.ts +7 -0
- package/dist/core/runner/caller-roster.js +11 -0
- package/dist/core/runner/classifier-ladder.d.ts +27 -5
- package/dist/core/runner/classifier-ladder.js +12 -11
- package/dist/core/runner/compaction-restate.d.ts +10 -6
- package/dist/core/runner/compaction-restate.js +9 -3
- package/dist/core/runner/contracts.d.ts +13 -9
- 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 +6 -5
- package/dist/core/runner/cross-boundary-lane.js +26 -15
- 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 +2 -2
- 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/gate-exit.d.ts +6 -0
- package/dist/core/runner/gate-exit.js +7 -2
- package/dist/core/runner/initial-run-state.js +1 -1
- package/dist/core/runner/permission-rule-lanes.d.ts +2 -2
- package/dist/core/runner/permission-rule-lanes.js +14 -7
- package/dist/core/runner/person-path-rows.js +1 -1
- package/dist/core/runner/prepare-advisor.d.ts +63 -0
- package/dist/core/runner/prepare-advisor.js +77 -0
- package/dist/core/runner/prepare-caps-and-workflow.js +1 -1
- package/dist/core/runner/prepare-config-doors.d.ts +6 -4
- package/dist/core/runner/prepare-config-doors.js +18 -12
- 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.js +39 -39
- package/dist/core/runner/prepare-gate-stations.d.ts +1 -4
- package/dist/core/runner/prepare-gate-stations.js +2 -7
- package/dist/core/runner/prepare-inherited-gate.d.ts +5 -4
- package/dist/core/runner/prepare-inherited-gate.js +3 -3
- package/dist/core/runner/prepare-park-ask.js +7 -7
- package/dist/core/runner/prepare-policy-chain.d.ts +1 -1
- package/dist/core/runner/prepare-policy-chain.js +4 -10
- 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-inputs.js +1 -1
- package/dist/core/runner/prepare-protocol-tools.d.ts +2 -2
- package/dist/core/runner/prepare-protocol-tools.js +3 -2
- package/dist/core/runner/prepare-safety-scan.d.ts +9 -12
- package/dist/core/runner/prepare-safety-scan.js +8 -6
- package/dist/core/runner/prepare-task.js +15 -18
- package/dist/core/runner/prepare-tool-disclosure-mount.js +6 -4
- package/dist/core/runner/prepare-wiring-manifest.d.ts +6 -3
- package/dist/core/runner/prepare-wiring-manifest.js +2 -2
- package/dist/core/runner/resume-policy-outcome.js +1 -1
- package/dist/core/runner/retired-runner-deps.js +1 -1
- package/dist/core/runner/run-attachment-seats.js +0 -1
- 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 +2 -3
- package/dist/core/runner/run-leg.js +13 -0
- package/dist/core/runner/run-settle-and-teardown.js +1 -1
- 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 +14 -12
- package/dist/core/runner/session-rule-policy.d.ts +22 -21
- package/dist/core/runner/session-rule-policy.js +13 -28
- 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/strict-output-schema.d.ts +1 -1
- package/dist/core/runner/sub-agent-deny-lists.js +4 -3
- package/dist/core/runner/synthetic-tools.d.ts +10 -13
- package/dist/core/runner/synthetic-tools.js +4 -2
- package/dist/core/runner/tool-disclosure.js +2 -1
- 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-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 +60 -67
- package/dist/core/runner-deps.d.ts +37 -37
- package/dist/core/runtime-caps.d.ts +4 -4
- package/dist/core/safety-merge-corpus.js +17 -1
- 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/sensitive-path-policy.d.ts +1 -1
- package/dist/core/sensitive-path-policy.js +1 -1
- package/dist/core/session-policy-store.d.ts +77 -22
- package/dist/core/session-policy-store.js +56 -14
- package/dist/core/session-reconcile.d.ts +2 -2
- package/dist/core/session-store.d.ts +80 -30
- package/dist/core/session-store.js +118 -76
- package/dist/core/session.d.ts +24 -46
- package/dist/core/shared-memory/tools.js +3 -1
- package/dist/core/shared-memory/types.d.ts +1 -1
- package/dist/core/side-query.d.ts +10 -0
- package/dist/core/side-query.js +5 -0
- package/dist/core/store-contracts/checkpoint-store-contract.js +29 -2
- package/dist/core/store-contracts/file-history-store-contract.js +43 -3
- 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 +125 -0
- package/dist/core/store-contracts/session-store-contract.d.ts +4 -7
- package/dist/core/store-contracts/session-store-contract.js +215 -41
- package/dist/core/store-contracts/workflow-journal-store-contract.js +26 -1
- package/dist/core/surrogate-safe-slice.d.ts +3 -3
- package/dist/core/task-event.d.ts +10 -4
- package/dist/core/task-notification.d.ts +3 -3
- 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 +4 -4
- package/dist/core/task-registry.js +3 -1
- package/dist/core/task-result.d.ts +3 -3
- package/dist/core/task-spec.d.ts +52 -52
- 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/tool-catalog-entries.d.ts +19 -2
- package/dist/core/tool-catalog-entries.js +57 -42
- 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 +3 -3
- package/dist/core/tool-name-aliases.d.ts +29 -8
- package/dist/core/tool-name-aliases.js +27 -3
- package/dist/core/tool-name-readings.d.ts +5 -8
- package/dist/core/tool-name-readings.js +1 -2
- package/dist/core/tool-policy.d.ts +24 -5
- package/dist/core/tool-policy.js +34 -10
- package/dist/core/tool-registry.d.ts +14 -7
- package/dist/core/tool-registry.js +17 -7
- package/dist/core/tool-result-store.js +2 -1
- package/dist/core/tool-roster.d.ts +47 -18
- package/dist/core/tool-roster.js +53 -32
- package/dist/core/tool-spec-members.js +1 -1
- package/dist/core/tool-spec.d.ts +35 -21
- package/dist/core/tools.js +3 -2
- package/dist/core/trace.d.ts +4 -0
- package/dist/core/untrusted-egress.d.ts +1 -1
- package/dist/core/untrusted-text.d.ts +1 -1
- package/dist/core/warm-resume.d.ts +1 -1
- package/dist/core/wiring-manifest.d.ts +49 -0
- package/dist/core/wiring-manifest.js +13 -5
- package/dist/core/workflow-journal-store.d.ts +62 -0
- package/dist/core/workflow-journal-store.js +77 -1
- 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/execution-env/node-execution-env.d.ts +19 -5
- package/dist/engine/execution-env/node-execution-env.js +43 -22
- package/dist/engine/harness/agent-harness.d.ts +14 -8
- package/dist/engine/harness/agent-harness.js +33 -26
- package/dist/engine/harness/types.d.ts +29 -7
- package/dist/engine/harness/types.js +12 -1
- package/dist/engine/llm/types.d.ts +9 -9
- 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 +1 -1
- package/dist/engine/loop/agent-loop.js +10 -8
- package/dist/engine/loop/types.d.ts +15 -13
- package/dist/engine/lsp/node-lsp-manager.d.ts +2 -2
- package/dist/engine/session/memory-repo.d.ts +10 -11
- package/dist/engine/session/memory-repo.js +13 -8
- 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 +31 -3
- package/dist/engine/session/repo-utils.js +42 -5
- package/dist/index.d.ts +27 -15
- package/dist/index.js +21 -11
- 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 +1 -1
- package/dist/internal/llm.js +1 -1
- package/dist/orchestration/goal.js +2 -2
- package/dist/orchestration/run-workflow-tool.d.ts +2 -2
- package/dist/orchestration/run-workflow-tool.js +5 -3
- 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 +2 -13
- package/dist/orchestration/workflow.js +21 -31
- package/dist/prompt-assembly/event-registry.js +1 -0
- package/dist/prompt-assembly/tool-catalog.d.ts +3 -0
- package/dist/prompt-assembly/tool-catalog.js +3 -0
- package/dist/prompts/default.d.ts +14 -14
- package/dist/scenarios/full-body.d.ts +4 -4
- package/dist/stores/file/adoption/adopt.d.ts +4 -3
- package/dist/stores/file/adoption/adopt.js +24 -31
- package/dist/stores/file/adoption/marker.d.ts +6 -13
- package/dist/stores/file/adoption/marker.js +6 -15
- package/dist/stores/file/checkpoint-store.d.ts +3 -0
- package/dist/stores/file/checkpoint-store.js +9 -3
- package/dist/stores/file/file-history-store.d.ts +20 -19
- package/dist/stores/file/file-history-store.js +152 -135
- 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/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 +15 -16
- package/dist/stores/file/permission-rule-store.d.ts +18 -2
- package/dist/stores/file/permission-rule-store.js +21 -14
- package/dist/stores/file/session-policy-store.d.ts +3 -3
- package/dist/stores/file/session-store.d.ts +26 -11
- package/dist/stores/file/session-store.js +77 -40
- 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 +2 -1
- 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 +3 -1
- 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/read-deny.d.ts +29 -7
- package/dist/tools/fs/read-deny.js +63 -22
- package/dist/tools/fs/removal-targets.d.ts +1 -1
- package/dist/tools/fs/safety.d.ts +9 -9
- package/dist/tools/fs/search.d.ts +6 -6
- package/dist/tools/fs/shell-read-check.js +6 -1
- package/dist/tools/fs/shell-read-judge.d.ts +4 -0
- package/dist/tools/fs/shell-read-judge.js +5 -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 +2 -1
- package/dist/tools/web.d.ts +1 -1
- package/dist/tools/web.js +40 -37
- 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 +5756 -5638
- package/wire-changes/core@7.55.0.json +3318 -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
|
@@ -13,8 +13,9 @@ export interface PrepareProjectContextInput {
|
|
|
13
13
|
deps: Pick<RunnerDeps, "loadProjectMemory" | "onError" | "sharedMemoryStores" | "onNotice" | "allowedTools">;
|
|
14
14
|
/** borrowed-readonly — the REBOUND spec (`spec′`). Read: `sessionId` (phase derivation + the
|
|
15
15
|
* continuation projections), `skills` (the roster), `userInvokedSkills` (the person's invoked skills — their
|
|
16
|
-
* rows are written here), `principal` (the shared-memory tools' trusted identity)
|
|
17
|
-
|
|
16
|
+
* rows are written here), `principal` (the shared-memory tools' trusted identity), `projectMemory` (the request's
|
|
17
|
+
* off switch for the seam — the config door's one reading). Never mutated. */
|
|
18
|
+
spec: Pick<TaskSpec, "sessionId" | "skills" | "userInvokedSkills" | "principal" | "excludeAllTools" | "projectMemory">;
|
|
18
19
|
/** borrowed-readonly — trusted internals: `agentName` (seam ctx), `inheritedSkillGrants` (the parent's captured
|
|
19
20
|
* skill grant rows, seeded as `inherited`), `inheritedAllowedTools` (the parent's request entries, seeded as this leg's
|
|
20
21
|
* own). `undefined` on a standalone prepare. */
|
|
@@ -95,6 +96,8 @@ export interface PrepareProjectContextResult {
|
|
|
95
96
|
path: string;
|
|
96
97
|
contentHash: string | null;
|
|
97
98
|
}> | undefined;
|
|
99
|
+
/** owned — `"on"` iff this phase called the deployment's seam, `"disabled"` the request turned a wired one off, `"absent"` none is wired. */
|
|
100
|
+
projectMemoryFact: NonNullable<import("../wiring-manifest.js").WiringManifest["projectMemory"]>;
|
|
98
101
|
/** owned — the RAW snapshot text (pre-compose) for the compaction lanes' instruction-file seat
|
|
99
102
|
* (`Prepared.projectInstructionContent`). */
|
|
100
103
|
projectInstructionContent: string | undefined;
|
|
@@ -22,7 +22,10 @@ export async function prepareProjectContext(input) {
|
|
|
22
22
|
let memoryBlock = memoryBlockFromEngine;
|
|
23
23
|
let instructionSources;
|
|
24
24
|
let projectInstructionContent;
|
|
25
|
-
|
|
25
|
+
const seam = deps.loadProjectMemory;
|
|
26
|
+
const loadProjectMemory = seam && spec.projectMemory === undefined ? seam : undefined;
|
|
27
|
+
const projectMemoryFact = loadProjectMemory ? "on" : seam ? "disabled" : "absent";
|
|
28
|
+
if (loadProjectMemory) {
|
|
26
29
|
let projectMemoryPhase = spec.sessionId ? "resume" : "fresh";
|
|
27
30
|
if (spec.sessionId) {
|
|
28
31
|
try {
|
|
@@ -47,7 +50,7 @@ export async function prepareProjectContext(input) {
|
|
|
47
50
|
}
|
|
48
51
|
let loaded = null;
|
|
49
52
|
try {
|
|
50
|
-
loaded = await Promise.resolve(
|
|
53
|
+
loaded = await Promise.resolve(loadProjectMemory.call(deps, {
|
|
51
54
|
cwd: taskRootFinal,
|
|
52
55
|
handsEnabled,
|
|
53
56
|
isSubagent: delegation.isNonForkChild,
|
|
@@ -158,5 +161,5 @@ export async function prepareProjectContext(input) {
|
|
|
158
161
|
?
|
|
159
162
|
{ entries: [], seedAnnounced: true, budget: skillListingBudget }
|
|
160
163
|
: undefined;
|
|
161
|
-
return { memoryBlock, instructionSources, projectInstructionContent, skillSpecs, skillSeatOf, skillsListing, sharedMemoryPairMounted, memoryEnginePairMounted };
|
|
164
|
+
return { memoryBlock, instructionSources, projectMemoryFact, projectInstructionContent, skillSpecs, skillSeatOf, skillsListing, sharedMemoryPairMounted, memoryEnginePairMounted };
|
|
162
165
|
}
|
|
@@ -3,7 +3,7 @@ import { sugarOverlays } from "../../prompt-assembly/sugar.js";
|
|
|
3
3
|
import { valveLeaves } from "../../agents/tool-filter.js";
|
|
4
4
|
import { instructionsTaught, toldAtStart } from "../mounted-mcp.js";
|
|
5
5
|
import { isIsolated } from "../remote-env.js";
|
|
6
|
-
import { readDateAnchor } from "./
|
|
6
|
+
import { readDateAnchor } from "./conversation-segment.js";
|
|
7
7
|
import { probeGitStatusLane } from "./git-status-frame.js";
|
|
8
8
|
import { renderMcpInstructionsEntry } from "./turn-attachments.js";
|
|
9
9
|
const ULTRA_REASONING_TIERS = new Set(["xhigh", "max"]);
|
|
@@ -38,8 +38,8 @@ export interface PrepareProtocolToolsInput {
|
|
|
38
38
|
lockedPreflight: Pick<LockedPreflight, "mcp" | "a2a">;
|
|
39
39
|
/** borrowed-readonly — the REBOUND spec. Read: `principal` (the MCP header / the A2A identity), `tools`
|
|
40
40
|
* (the caller names both reserved-name guards check against), `excludeAllTools` (the valve's whole-face switch: the live roster lane's
|
|
41
|
-
* reading, and the first-dial gate). */
|
|
42
|
-
spec: Pick<TaskSpec, "principal" | "tools" | "excludeAllTools">;
|
|
41
|
+
* reading, and the first-dial gate), `signal` (the host's abort, which stops an MCP dial). */
|
|
42
|
+
spec: Pick<TaskSpec, "principal" | "tools" | "excludeAllTools" | "signal">;
|
|
43
43
|
/** borrowed-readonly — the deployment seats the materializers and their operator faces read: `onElicit`
|
|
44
44
|
* and `mcpImageResizer` ride into the MCP intake; `onError` takes the A2A warnings (no ledger — a peer is
|
|
45
45
|
* re-read every prepare); `mcpRevocations` + `onNotice` make the revocation wiring. */
|
|
@@ -7,7 +7,7 @@ import { materializeA2aTools } from "../a2a.js";
|
|
|
7
7
|
import { deliverEngineNotice } from "../types.js";
|
|
8
8
|
import { RosterBuilder } from "../tool-roster.js";
|
|
9
9
|
import { TOOL_WIRE_NAME_MAX_CHARS } from "../tool-face.js";
|
|
10
|
-
import { REFRESH_MCP_TOOLS_TOOL_NAME, toolFace } from "../tool-catalog-entries.js";
|
|
10
|
+
import { REFRESH_MCP_TOOLS_TOOL_NAME, mountRuleFace, toolFace } from "../tool-catalog-entries.js";
|
|
11
11
|
import { MCP_NAMESPACE, A2A_NAMESPACE } from "../protocol-table.js";
|
|
12
12
|
import { mintNamespacePrefix } from "../protocol-naming.js";
|
|
13
13
|
import { applyMcpToolFaces } from "./tool-face-overlay.js";
|
|
@@ -30,7 +30,7 @@ export async function prepareProtocolTools(input) {
|
|
|
30
30
|
const leaves = valveLeaves(spec, toolFaceSnapshot.selector);
|
|
31
31
|
const resourcesReached = resourceFacesLeft(leaves);
|
|
32
32
|
const mcp = lockedPreflight.mcp?.length
|
|
33
|
-
? await materializeMcpTools(lockedPreflight.mcp, spec.principal, deps.onElicit, deps.mcpImageResizer, { reminderMark, counts: reminderDisclosureCounts }, mcpRevocationWiring(deps, runId), mcpPool === undefined ? undefined : { pool: mcpPool.pool, ownsPool: mcpPool.owned }, sectionDisposerOf(input.modBus, abortController.signal), (entry) => resourcesReached || serverReached(mintNamespacePrefix(MCP_NAMESPACE, entry.name)))
|
|
33
|
+
? await materializeMcpTools(lockedPreflight.mcp, spec.principal, deps.onElicit, deps.mcpImageResizer, { reminderMark, counts: reminderDisclosureCounts }, mcpRevocationWiring(deps, runId), mcpPool === undefined ? undefined : { pool: mcpPool.pool, ownsPool: mcpPool.owned }, sectionDisposerOf(input.modBus, abortController.signal), (entry) => resourcesReached || serverReached(mintNamespacePrefix(MCP_NAMESPACE, entry.name)), AbortSignal.any([abortController.signal, ...(spec.signal !== undefined ? [spec.signal] : [])]))
|
|
34
34
|
:
|
|
35
35
|
{ tools: [], toolAxes: [], warnings: [], serverInstructions: [], instructionsDelta: { pendingAdds: [], pendingRemovals: [] }, droppedTools: [], statuses: [], refresh: async () => [], reconnect: async (server) => ({ server, prefix: mintNamespacePrefix(MCP_NAMESPACE, server), outcome: "not_declared", reason: "this task declared no MCP servers", toolCount: 0, added: [], removed: [] }), dispose: async () => { } };
|
|
36
36
|
if (lockedPreflight.mcp?.length)
|
|
@@ -81,6 +81,7 @@ export async function prepareProtocolTools(input) {
|
|
|
81
81
|
if (lockedPreflight.mcp?.length) {
|
|
82
82
|
roster.mount({
|
|
83
83
|
...toolFace("refresh-mcp-tools"),
|
|
84
|
+
...{ ruleFace: mountRuleFace("refresh-mcp-tools") },
|
|
84
85
|
name: REFRESH_MCP_TOOLS_TOOL_NAME,
|
|
85
86
|
label: REFRESH_MCP_TOOLS_TOOL_NAME,
|
|
86
87
|
description: "Refresh the tool list of connected MCP servers. Never dials or re-dials connections — it only re-reads the tool list over the existing connection. The refreshed tools are available immediately; you can call them on your next step. Use when a server's expected tool is missing, or the tool list looks stale after a connection recovered. Omit `server` to refresh every connected server.",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RunnerDeps, ToolEffect } from "../types.js";
|
|
2
2
|
import type { IrreversibilityTier, ReversibilityProbes } from "./contracts.js";
|
|
3
3
|
import type { ToolMarkSource } from "../ask-origin.js";
|
|
4
|
-
import type
|
|
4
|
+
import { type RosterSpec } from "./caller-roster.js";
|
|
5
5
|
export interface PrepareSafetyScanInput {
|
|
6
6
|
/** borrowed-readonly — the REBOUND spec (`spec′`, the config-doors result). The scan reads
|
|
7
7
|
* `tools`, `handsReadOnly` and `enablePlanMode`; it never mutates. Typed as a spec whose roster is snapshot faces. */
|
|
@@ -16,22 +16,19 @@ export interface PrepareSafetyScanInput {
|
|
|
16
16
|
* The six collections are **borrowed-mutable**: the driver and later phases fold into them IN
|
|
17
17
|
* PLACE (identity is part of the contract — closures alias these exact objects). Mutation owners
|
|
18
18
|
* after this phase, in driver order:
|
|
19
|
-
* · the
|
|
20
|
-
* · the MCP/A2A materialize fold + the runtime refresh seam (protocol-axis tighten registration;
|
|
19
|
+
* · the roster builder (`toolEffects`: every mount and unmount; the aliases' axes on a non-caller mount and on an unmount);
|
|
20
|
+
* · the MCP/A2A materialize fold + the runtime refresh seam (protocol-axis tighten registration and a protocol tool's effect;
|
|
21
21
|
* on refresh, `toolEffects.delete` resets a replaced tool's effect record for the fresh fold —
|
|
22
22
|
* the irreversible/egress sets deliberately KEEP their entries, the tighten-only residue);
|
|
23
|
-
* · the hands/read-face block's shellGate fold (Bash/Monitor tier escalation + probe seeding)
|
|
24
|
-
* · the background-task / Monitor / worktree mounts (fixed-name effect registration);
|
|
25
|
-
* · the prepare-final effect sync (fills MISSING entries from the final tool set — never
|
|
26
|
-
* overrides a scanned value).
|
|
23
|
+
* · the hands/read-face block's shellGate fold (Bash/Monitor tier escalation + probe seeding).
|
|
27
24
|
*/
|
|
28
25
|
export interface PrepareSafetyScanResult {
|
|
29
|
-
/** borrowed-mutable — per-tool effect registry (alias-complete), the path-policy / gate read.
|
|
30
|
-
*
|
|
31
|
-
* defect #2107 (7.55.0, design ticket): a selector that keeps a caller instance under a name and unmounts only the engine's leaves the engine's entry. */
|
|
26
|
+
/** borrowed-mutable — per-tool effect registry (alias-complete), the path-policy / gate read. Minted EMPTY here: the roster
|
|
27
|
+
* builder writes every entry, a caller tool's included, from the member that answers to the name after each mount or unmount. */
|
|
32
28
|
toolEffects: Map<string, ToolEffect>;
|
|
33
|
-
/** owned, read once — the wake reconcile's reading (`wakeEffectsOf`):
|
|
34
|
-
* definition this leg may still mount (`engineCandidatesOf`) folded
|
|
29
|
+
/** owned, read once — the wake reconcile's reading (`wakeEffectsOf`): the caller tools' own declarations (each name's kept
|
|
30
|
+
* instance, each alias's first claimer), with every catalog definition this leg may still mount (`engineCandidatesOf`) folded
|
|
31
|
+
* in as a candidate. Built before any mount; no later phase writes it. */
|
|
35
32
|
wakeEffects: Map<string, ToolEffect>;
|
|
36
33
|
/** borrowed-mutable — egress-marked tools (external writes; the gate never auto-allows them). */
|
|
37
34
|
egressTools: Set<string>;
|
|
@@ -2,6 +2,7 @@ import { callerToolNameProblem } from "../caller-tool-name.js";
|
|
|
2
2
|
import { describeToolCatalog } from "../tool-registry.js";
|
|
3
3
|
import { callerCardIdOf, rosterMemberBoundProblem, schemaKeyBoundProblem, survivorsByName } from "../tool-roster.js";
|
|
4
4
|
import { toolFaceProblem } from "./tool-face-overlay.js";
|
|
5
|
+
import { callerEngineContractProblem } from "./caller-roster.js";
|
|
5
6
|
const REPEAT_RISK = { read: 0, idempotent: 1, write: 2 };
|
|
6
7
|
const leastRepeatSafe = (a, b) => (REPEAT_RISK[a] >= REPEAT_RISK[b] ? a : b);
|
|
7
8
|
function engineCandidatesOf(spec, deps) {
|
|
@@ -31,7 +32,7 @@ function wakeEffectsOf(table, claimed, candidates) {
|
|
|
31
32
|
const tierOf = (t) => t.irreversibility ?? (t.reversibilityProbe ? "maybe" : undefined);
|
|
32
33
|
export function prepareSafetyScan(input) {
|
|
33
34
|
const { spec, deps } = input;
|
|
34
|
-
const
|
|
35
|
+
const declared = new Map();
|
|
35
36
|
const survivors = survivorsByName(spec.tools ?? []);
|
|
36
37
|
const claimedAliases = new Set();
|
|
37
38
|
const aliasClaims = [];
|
|
@@ -55,7 +56,7 @@ export function prepareSafetyScan(input) {
|
|
|
55
56
|
aliases: t.aliases,
|
|
56
57
|
...(t.contract !== undefined ? { contractId: t.contract.contractId, implementationRevision: t.contract.implementationRevision } : {}),
|
|
57
58
|
...(typeof t.modelGate === "string" ? { modelGate: t.modelGate } : {}),
|
|
58
|
-
});
|
|
59
|
+
}) ?? callerEngineContractProblem(t);
|
|
59
60
|
if (bound !== undefined) {
|
|
60
61
|
const e = new Error(`A caller tool cannot ride a roster row: ${bound.message}.`);
|
|
61
62
|
e.code = bound.code;
|
|
@@ -72,6 +73,7 @@ export function prepareSafetyScan(input) {
|
|
|
72
73
|
const declared = {
|
|
73
74
|
...(t.family !== undefined ? { family: t.family } : {}),
|
|
74
75
|
...(t.pathTarget !== undefined ? { pathTarget: t.pathTarget } : {}),
|
|
76
|
+
...(t.hostTarget !== undefined ? { hostTarget: t.hostTarget } : {}),
|
|
75
77
|
...(t.ruleFace !== undefined ? { ruleFace: t.ruleFace } : {}),
|
|
76
78
|
...(t.renderHints !== undefined ? { renderHints: t.renderHints } : {}),
|
|
77
79
|
};
|
|
@@ -91,7 +93,7 @@ export function prepareSafetyScan(input) {
|
|
|
91
93
|
throw e;
|
|
92
94
|
}
|
|
93
95
|
if (t.effect && survivors.get(t.name) === t) {
|
|
94
|
-
|
|
96
|
+
declared.set(t.name, t.effect);
|
|
95
97
|
}
|
|
96
98
|
const tier = tierOf(t);
|
|
97
99
|
if (tier !== undefined) {
|
|
@@ -125,7 +127,7 @@ export function prepareSafetyScan(input) {
|
|
|
125
127
|
continue;
|
|
126
128
|
claimedAliases.add(alias);
|
|
127
129
|
if (t.effect)
|
|
128
|
-
|
|
130
|
+
declared.set(alias, t.effect);
|
|
129
131
|
if (engineNames.has(alias))
|
|
130
132
|
continue;
|
|
131
133
|
if (tier !== undefined) {
|
|
@@ -144,8 +146,8 @@ export function prepareSafetyScan(input) {
|
|
|
144
146
|
}
|
|
145
147
|
}
|
|
146
148
|
return {
|
|
147
|
-
toolEffects,
|
|
148
|
-
wakeEffects: wakeEffectsOf(
|
|
149
|
+
toolEffects: new Map(),
|
|
150
|
+
wakeEffects: wakeEffectsOf(declared, [...claimedAliases, ...survivors.keys()], [...aliasClaims, ...candidates]),
|
|
149
151
|
egressTools,
|
|
150
152
|
irreversibleTools,
|
|
151
153
|
irreversibilityTier,
|
|
@@ -22,8 +22,10 @@ import { recordedModeSeed } from "../checkpoint-store.js";
|
|
|
22
22
|
import { emitTrace } from "../trace.js";
|
|
23
23
|
import { personPathRowsOfTask, ruleRowsDroppedNotice, ruleStoreUnreadableNotice } from "./person-path-rows.js";
|
|
24
24
|
import { STALL_FIRST_BYTE_MS, STALL_FIRST_TOKEN_MS, STALL_IDLE_MS, withBrainCallGuardrail } from "../../brain/timeout.js";
|
|
25
|
+
import { judgeExtraBody } from "../../brain/request-params.js";
|
|
25
26
|
import { OFFLOAD_TOOL_NAME } from "../tool-result-store.js";
|
|
26
|
-
import {
|
|
27
|
+
import { SKILL_TOOL_NAME, createOutputTool } from "./synthetic-tools.js";
|
|
28
|
+
import { OUTPUT_TOOL_NAME } from "../tool-catalog-entries.js";
|
|
27
29
|
import { compileSkillGrant, skillGateWiring } from "../skill-grant.js";
|
|
28
30
|
import { legCallTargetStamp, validatePath } from "../effective-path-target.js";
|
|
29
31
|
import { AllowEntryTable, screenAllowedToolsValue } from "../allow-entry.js";
|
|
@@ -72,6 +74,7 @@ import { checkpointScopeOf, placementValueOrAbsent } from "./checkpoint-scope.js
|
|
|
72
74
|
export { DEFAULT_IRREVERSIBLE_SCOPE, checkpointScopeOf, placementValueOrAbsent } from "./checkpoint-scope.js";
|
|
73
75
|
export { mcpManifestEntries } from "./prepare-wiring-manifest.js";
|
|
74
76
|
import { derivedRouteFallsBack } from "./derived-route-fallback.js";
|
|
77
|
+
import { prepareAdvisor } from "./prepare-advisor.js";
|
|
75
78
|
import { prepareProtocolTools } from "./prepare-protocol-tools.js";
|
|
76
79
|
import { prepareQuestionFace } from "./prepare-question-face.js";
|
|
77
80
|
import { prepareLsp } from "./prepare-lsp.js";
|
|
@@ -311,13 +314,9 @@ export async function prepareTask(request, deps, sessions, resume, internals, ru
|
|
|
311
314
|
refuseRequireExistingWithoutSession(spec);
|
|
312
315
|
refuseRegistryScopeMismatch(spec, internals);
|
|
313
316
|
const ownToolLists = boundOwnToolLists(internals?.ownToolLists ?? resume?.seed.ownToolLists, toolFaceLists);
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
`every retry). Set the cap via limits.maxOutputTokens (per request) or model.maxTokens instead.`);
|
|
318
|
-
e.code = "config.extra_body_output_cap";
|
|
319
|
-
throw e;
|
|
320
|
-
}
|
|
317
|
+
const extraBodyRefusal = judgeExtraBody(model.extraBody, model.id).refused;
|
|
318
|
+
if (extraBodyRefusal !== undefined)
|
|
319
|
+
throw Object.assign(new Error(extraBodyRefusal.sentence), { code: extraBodyRefusal.code, ...(extraBodyRefusal.field !== undefined ? { detail: { field: extraBodyRefusal.field } } : {}) });
|
|
321
320
|
const fileHistoryRequest = resolveFileHistoryRequest(spec, deps);
|
|
322
321
|
const { acquired, session, conflictRef, wakeRecovered, branch } = await prepareAcquireReconcile({ sessions, spec, resume, wakeEffects, report: (e, id) => deps.onError?.(e, { phase: "config", sessionId: id }), ...(internals?.sessionPlacement !== undefined ? { placement: internals.sessionPlacement } : {}), ...(() => { const g = durableParkGapFor(deps, spec); return g !== undefined ? { durableParkGap: g } : {}; })() });
|
|
323
322
|
const sessionId = acquired.sessionId;
|
|
@@ -344,7 +343,7 @@ export async function prepareTask(request, deps, sessions, resume, internals, ru
|
|
|
344
343
|
let effectiveCompModel = compModel;
|
|
345
344
|
if (spec.compactionModel === undefined &&
|
|
346
345
|
compModel !== undefined &&
|
|
347
|
-
(await derivedRouteFallsBack({ seat: "compaction-summary", derived: compModel, primary: model, brain: deps.brain, getApiKeyAndHeaders: spec.getApiKeyAndHeaders, onNotice: deps.onNotice, sessionId, runId }))) {
|
|
346
|
+
(await derivedRouteFallsBack({ seat: "compaction-summary", derived: compModel, primary: model, brain: deps.brain, getApiKeyAndHeaders: spec.getApiKeyAndHeaders, onNotice: deps.onNotice, sessionId, runId })).action === "fall_back") {
|
|
348
347
|
effectiveCompModel = undefined;
|
|
349
348
|
}
|
|
350
349
|
warnCompactionWindowHazard(deps.tracer, spec, model, effectiveCompModel, hostTaskId, runnerSelf?.contextOverlayOf?.(resolvedRole.modelRef));
|
|
@@ -673,8 +672,9 @@ export async function prepareTask(request, deps, sessions, resume, internals, ru
|
|
|
673
672
|
}
|
|
674
673
|
}
|
|
675
674
|
const projectContext = await prepareProjectContext({ deps, spec, internals, session, sessionId, runId, hostTaskId, taskRootFinal, handsEnabled, delegation, seedContextFiles, memoryBlockFromEngine, skillGrants, allowedTools, allowedToolTables, roster, toolFaceSnapshot, onceLedger, memoryTools, memoryEngineSession, memorySearchToolsPlanned, memoryPairExcludedName, memoryPairOccupiedName, resume, skillListingBudget: doors.skillListingBudget });
|
|
676
|
-
const { memoryBlock: memoryBlockWithProject, instructionSources, projectInstructionContent, skillSpecs, skillSeatOf, skillsListing, sharedMemoryPairMounted, memoryEnginePairMounted } = projectContext;
|
|
675
|
+
const { memoryBlock: memoryBlockWithProject, instructionSources, projectMemoryFact, projectInstructionContent, skillSpecs, skillSeatOf, skillsListing, sharedMemoryPairMounted, memoryEnginePairMounted } = projectContext;
|
|
677
676
|
const { featureFlags, sugar, mcpInstructionsBlock, envFacts, tzValid, userTz, dateAnchor, gitStatusRef } = await preparePromptInputs({ modBus: legMods.bus, spec, deps, contextOverlay: legContextOverlay(), failClosedReason: selfOrchestrationFailClosedReason(spec, deps), lockedPreflight, selfOrchestrationActive, executionEnv, reminderMark, resolvedReadFace, resolvedWriteFace: resolvedWriteFace?.inForce(), toolFaceSnapshot, promptProfile, fableMitigations, internals, thinking, ownedEnv, delegation, resolvedRole, mcp, roster, model, externalContentTargetActive, resume, handsEnabled, taskRootFinal, additionalRootsCanonical, additionalReadRootsCanonical: (await readRoots.ready().then(readRoots)).filter((r) => !additionalRootsCanonical.includes(r)), sessionId, session, ...(advertisedWritableDirs !== undefined ? { advertisedWritableDirs } : {}) });
|
|
677
|
+
const advisor = await prepareAdvisor({ spec, advisorTool: doors.advisorTool, deps, model, roster, selector: toolFaceSnapshot.selector, session, onceLedger, rootLeg: !delegation.isDelegatedChild, sessionId, runId, sideCallBookRef, lastSentRequest: () => lastBrainContextRef.current, brainCallGuardrailMs });
|
|
678
678
|
judgeRunToolLists({ spec, tools: roster.tools, declaredPeers: { mcp: lockedPreflight.mcp, a2a: a2a.statuses }, own: { allow: toolFaceLists.allow, exclude: toolFaceLists.exclude }, layers: toolFaceSnapshot.selector.layers, legs: toolLegs, judgedUpstream: toolListsJudged !== undefined, toldUpstream: internals?.ownToolLists !== undefined && ownToolLists !== undefined && toolCeiling !== undefined, ownBy: ownToolLists, onceLedger, sessionId });
|
|
679
679
|
const { deferred, memoryBlock, toolSearch: toolSearchPolicy } = prepareDeferClassify({ spec, deps, roster, toolFaceSnapshot, handsEnabled, fullShellReachable, promptProfile, model, mcp, a2a, sharedMemoryPairMounted, memoryEnginePairMounted, memoryBlock: memoryBlockWithProject, memoryRecallSegment, onceLedger, sessionId });
|
|
680
680
|
prepareMemoryEngineSession({ memoryEngineSession, internals, memoryDelegationEvidence, externalContentTargetActive, lockedPreflight, ...(mountedMcpNow !== undefined ? { mountedMcp: mountedMcpNow } : {}), sessionId, runId, deps, provenanceForChildrenRef, delegationSettlementRef, spec, envHandToolNames, roster, contentOriginWrapRef });
|
|
@@ -693,12 +693,9 @@ export async function prepareTask(request, deps, sessions, resume, internals, ru
|
|
|
693
693
|
const lastBrainContextRef = {};
|
|
694
694
|
const requestLossyRef = { current: false };
|
|
695
695
|
const staleOffloadWrittenRefs = new Set();
|
|
696
|
-
const lastBrainContext = () => lastBrainContextRef.current;
|
|
696
|
+
const lastBrainContext = () => (lastBrainContextRef.lossy === true ? undefined : lastBrainContextRef.current);
|
|
697
697
|
const recordBrainContext = (servedModelId, c) => {
|
|
698
|
-
|
|
699
|
-
lastBrainContextRef.current = undefined;
|
|
700
|
-
return;
|
|
701
|
-
}
|
|
698
|
+
lastBrainContextRef.lossy = requestLossyRef.current;
|
|
702
699
|
lastBrainContextRef.current = {
|
|
703
700
|
...(c.systemPrompt !== undefined ? { systemPrompt: c.systemPrompt } : {}),
|
|
704
701
|
...(c.systemBlocks !== undefined ? { systemBlocks: [...c.systemBlocks] } : {}),
|
|
@@ -789,7 +786,7 @@ export async function prepareTask(request, deps, sessions, resume, internals, ru
|
|
|
789
786
|
}
|
|
790
787
|
}
|
|
791
788
|
const { basePolicyForResumeEdit, denyNarrowingPolicy, skillGrantLane, allowEntryLanes, policyLayers, effectivePolicy, inheritedUnavailableAsks, inheritedAskGrants, askSourceIdentity, riskAxesOf, ruleOffersOf, grantBindingOf, permissionRuleLane, ruleLaneFacts, permissionRuleOrgLane, sandboxAdmissionArmed, sandboxBoundaryCapable, emitSandboxAdmitted, foldAskClasses, ancestorSandboxAdmissions, ancestorArbitrations, inheritedToolChecks } = await preparePolicyChain({ spec, deps, internals, sessionId, runId, hostTaskId, taskRootFinal, additionalRootsCanonical, executionEnv, lockedPreflight: installedPreflight, pathRuleAnchors: { leg: legAnchors, chainTop }, headLeads, tools, harnessTools, selector: toolFaceSnapshot.selector, toolEffects, egressTools, irreversibilityTier, axisExplicitNegatives, shellGatedTools, toolMarkSources, envHandToolNames, handsCwdRef, readDenyMatcher, personRows, questionToolMounted, runtimeCaps, inheritedAncestorRules, ancestorSessionRulesRef, inheritedParentConstraints, seedInheritedGate, skillGrants, skillSpecs, allowedToolTables, frozenOnAsk, hookEnvSource, notifyOwnHookCrash, modBus: legMods.bus, ownModChain, autoModeDecider: () => autoModeDeciderRef.current, readFace: () => resolvedReadFace, permissionMode, scratchpadDir: spec.envFacts?.scratchpadDir, toolRosterDeltas: rosterSeat, stopForDenialLimit, delegation, abortController, now, ownSessionRulesRef });
|
|
792
|
-
const { onAsk, preToolContexts, blockedToolCalls, batchHaltRef, blockedTracked, incompleteSuspendAdapter, durableSuspendInfraReady, resourceSuspendEligible, usageGovernance, durableApproval, wiringManifest, writeProtection, parkLaneArmed, gateMachineryActive, hookIdentity, hookEnvFace, sessionBoxBound } = prepareWiringManifest({ spec, deps, askSeat: doors.askSeat, crossBoundaryStationEngaged: crossBoundary.stationEngaged, internals, resume, sessionId, runId, hostTaskId, taskScope, modBus: legMods.bus, policyLayers, effectivePolicy, handsEnabled, taskRootFinal, legWriteGuard, mcp, irreversibleTools, egressTools, shellReadStationArmed: handsReadFace.shellReadStationArmed, toolEffects, ownedEnv, executionEnv, offloadStore, onceLedger, usageWindows, envLifetimeSuspendAt, runtimeCaps, resolvedInteractionPosture, durableQuestionFace, liveQuestionFace, checkpointStore, sessions, modelGateManifest, autoModeArmReason, permissionMode, lockedPreflight, peerLaneRefs, frameSettlement, harness, pausedRef, liveInheritedGate, delegation, toolRoster, readDenyBuiltinTiersActive: handsReadFace.readDenyBuiltinTiersActive, lspManagerWired, lspDiagnosticsLive: lspDiagnostics !== undefined, fileHistoryFact, sessionBox, checkpointScope, memoryPollution: () => memoryEngineSession?.pollution });
|
|
789
|
+
const { onAsk, preToolContexts, blockedToolCalls, batchHaltRef, blockedTracked, incompleteSuspendAdapter, durableSuspendInfraReady, resourceSuspendEligible, usageGovernance, durableApproval, wiringManifest, writeProtection, parkLaneArmed, gateMachineryActive, hookIdentity, hookEnvFace, sessionBoxBound } = prepareWiringManifest({ spec, deps, askSeat: doors.askSeat, crossBoundaryStationEngaged: crossBoundary.stationEngaged, internals, resume, sessionId, runId, hostTaskId, taskScope, modBus: legMods.bus, policyLayers, effectivePolicy, handsEnabled, taskRootFinal, legWriteGuard, mcp, irreversibleTools, egressTools, shellReadStationArmed: handsReadFace.shellReadStationArmed, toolEffects, ownedEnv, executionEnv, offloadStore, onceLedger, usageWindows, envLifetimeSuspendAt, runtimeCaps, resolvedInteractionPosture, durableQuestionFace, liveQuestionFace, checkpointStore, sessions, modelGateManifest, autoModeArmReason, permissionMode, lockedPreflight, peerLaneRefs, frameSettlement, harness, pausedRef, liveInheritedGate, delegation, toolRoster, readDenyBuiltinTiersActive: handsReadFace.readDenyBuiltinTiersActive, lspManagerWired, lspDiagnosticsLive: lspDiagnostics !== undefined, fileHistoryFact, projectMemoryFact, sessionRulesChildrenReadLive: ownSessionRulesRef.current !== undefined, sessionBox, checkpointScope, memoryPollution: () => memoryEngineSession?.pollution, advisorFact: advisor.manifest });
|
|
793
790
|
const writeProtectionCheck = writeProtection.mount?.check;
|
|
794
791
|
writeTargetJudgeRef.current = writeProtection.judgeWriteTarget;
|
|
795
792
|
if (fileHistoryBoundary !== undefined) {
|
|
@@ -806,13 +803,13 @@ export async function prepareTask(request, deps, sessions, resume, internals, ru
|
|
|
806
803
|
const { suspendForResource, suspendForPlatformLimit, suspendForReview } = prepareBoundaryParks({ saga, spec, checkpointStore, checkpointScope, abortController, harness, session, sessions, sessionId, deps, priorLedger, maxSlices, maxSuspends, resourceTotal, priorSuspendCount, suspendChainBase, humanReviewRef, liveSpendRef, now, pausedRef, remoteEnvFailures, resourceSuspendEligible, durableSuspendInfraReady, incompleteSuspendAdapter });
|
|
807
804
|
const { parkAsk } = prepareParkAsk({ askLane, saga, spec, deps, sessionId, checkpointStore, checkpointScope, toolRosterDeltas: rosterSeat, parkLaneArmed, contentAskRoutable, liveQuestionFace, mountedQuestionTool, contentAskBindings, lateStrandedAnswers, discloseStrandedAnswers, onAsk, runtimeCaps, inheritedUnavailableAsks, basePolicyForResumeEdit, budgetSnapshot, handsCwdRef, handsRoot: attachmentRootCanonical, stampCallTarget, advertisedWritableDirs, exemptRoots: legExemptRoots, offloadStore, ownedEnv, incompleteSuspendAdapter, session, sessions, suspendChainBase, maxSuspends, remoteEnvFailures, shellGatedTools, irreversibilityTier, toolMarkSources, effectiveShellGate, durableApproval, priorLedger, liveSpendRef, resourceTotal, ruleOffersOf, grantBindingOf, now, humanReviewRef, abortController, harness, pausedRef });
|
|
808
805
|
const seatInputsFor = skillGateWiring({ tools, skillToolName: SKILL_TOOL_NAME, seatOf: skillSeatOf, mode: () => permissionMode.current, lane: skillGrantLane, onAllowed: (info) => emitTrace(deps.tracer, () => ({ kind: "permission.skill_allowed", version: 1, taskId: hostTaskId, ...info, entries: [...info.entries], ts: Date.now() })), allowEntries: { deploymentAllows: { ...allowEntryLanes.deployment, onAllowed: (info) => emitTrace(deps.tracer, () => ({ kind: "permission.allowed_tools_allowed", version: 1, taskId: hostTaskId, source: "deployment", ...info, entries: [...info.entries], ts: Date.now() })) }, requestAllows: { ...allowEntryLanes.request, onAllowed: (info) => emitTrace(deps.tracer, () => ({ kind: "permission.allowed_tools_allowed", version: 1, taskId: hostTaskId, source: "request", ...info, entries: [...info.entries], ts: Date.now() })) } } });
|
|
809
|
-
const { approvedCallScreen } = prepareGateStations({ askLane, parkAsk, tools, toolRosterDeltas: rosterSeat, crossBoundaryCheck: crossBoundary.seat({ tools, roster: rosterSeat }),
|
|
806
|
+
const { approvedCallScreen } = prepareGateStations({ askLane, parkAsk, tools, toolRosterDeltas: rosterSeat, crossBoundaryCheck: crossBoundary.seat({ tools, roster: rosterSeat }), deps, toolCallGateArmedRef, effectivePolicy, modBus: legMods.bus, inheritedToolChecks, egressTools, irreversibleTools, spec, complianceDenies, harness, blockedToolCalls, inheritedAskGrants, inheritedUnavailableAsks, foldAskClasses, ancestorSandboxAdmissions, preToolContexts, toolOccurrences, batchHaltRef, blockedTracked, hookIdentity, reminderMark, hostTaskId, sessionId, handsCwdRef, stampCallTarget, readDenyInForce: (toolCallId) => ({ tiers: handsReadFace.readDenyBuiltinTiersActive, rows: [...readDenyAdditionsNormalized.map((e) => e.pattern), ...(pathTables?.forCall(toolCallId).ruleRows ?? handsReadFaceInput.denyRuleRows).filter((r) => r.faces.includes("read")).map((r) => r.rule)] }), hookEnvFace, writeProtectionCheck, shellReadCheck, readFace: () => resolvedReadFace, irreversibilityTier, reversibilityProbes, abortController, shellGatedTools, autoModeDecider: autoModeDeciderRef, autoModeDenialTracking: autoModeDenialTrackingRef, askRoute: { ...wiringManifest.ask, effective: askSeatEffective(wiringManifest) }, permissionMode, toolMarkSources, ...(deps.a2a?.isolatePeers === true ? { a2aIsolatePeers: true } : {}), ancestorArbitrations, runId, stopForDenialLimit, permissionRuleLane, seatInputsFor, permissionRuleOrgLane, questionToolMounted, sandboxAdmissionArmed, sandboxBoundaryCapable, emitSandboxAdmitted, delegation, frameSettlement });
|
|
810
807
|
const postureFrameRef = { report: (err) => deps.onError?.(err, { phase: "degraded", sessionId }) };
|
|
811
808
|
const { microCompact, charsPerToken } = prepareContextLane({ model, deps, sessionId, runId, hostTaskId, offloadStore, toolRosterDeltas: rosterSeat, microCompactKnob, harness, batchHaltRef, gitStatusRef, postureFrameRef, requestLossyRef, trimPressureRef, contextOverlay: legContextOverlay, ...(readFileStateForCheckpoint !== undefined ? { readFileState: readFileStateForCheckpoint } : {}) });
|
|
812
809
|
const preparedHolder = {};
|
|
813
810
|
const { cacheBreakDetector, cacheFingerprint, promptOverheadTokens, compactionRestore, normalizeAttachmentPath, isDedupStubResult, recentlyReadFiles, onCompactionApplied, detectExternalChanges, syntheticReadVerdict, consolidationWriteJudge, listBackgroundTasks, centerCompactionCandidate, effectiveReadFaceObserved, effectiveWriteFaceObserved, effectiveReadDenyObserved } = prepareTurnWiring({ deps, systemPromptSeat, harnessTools, fpRef, model, promptIdentityDigest: promptManifest.identity.artifact, promptProfile, fableMitigations, systemBlocks, thinking, spec, sessionId, turnSnapshotRef, promptManifest, charsPerToken, handsEnabled, executionEnv, attachmentRootCanonical, readRoots, modelFileReader: modelFileReaderSeat.current, reminderMark, reminderDisclosureCounts, resolvedReadFace, handsCwdRef, readFileStateForCheckpoint, denyNarrowingPolicy, skillGrants: skillGrantLane, callerPolicy: installedToolPolicy, inheritedPolicies: (inheritedParentConstraints ?? []).map((c) => c.policy), persistedRuleLane: permissionRuleLane, ruleLaneFacts, personRowsBeyondRun, orgRuleLane: permissionRuleOrgLane, stampCallTarget, abortController, hostTaskId, taskScope, buildAssembleInputs, identityFor, adoptsCandidates, centerAdoptionRef, harnessRef, carrierReadFace, carrierWriteFace, readDenyAdditionsNormalized, preparedHolder });
|
|
814
811
|
await onceLedger.settle(session, announcedListingsRef);
|
|
815
|
-
const buildPrepared = () => ({ harness, session, sessionId, runId, crossBoundary, registryAccess: { owner: hostTaskId, scope: taskScope }, reminderMark, reminderDisclosureCounts, fullShellReachable, approvalPosture: { get mode() { return permissionMode.current; }, askEffective: askSeatEffective(wiringManifest) }, ...(outputStyleFrame !== undefined ? { outputStyleFrame } : {}), permissionMode, editedFilesSnapshot, taskRootPath: taskRootFinal, model, thinking, compModel: effectiveCompModel, mcp, ...(mcpRedial !== undefined ? { mcpRedial } : {}), ...(a2a.tools.length > 0 ? { a2a } : {}), blockedRef, outputRef, abortController, conflictRef, blockedToolCalls, toolOccurrences, batchHaltRef, nestedStats, ...(rewindNotes.length > 0 ? { rewindNotes } : {}), ...(fileHistoryBoundary !== undefined ? { fileHistoryBoundary } : {}), ...(effectiveReadFaceObserved !== undefined ? { effectiveReadFace: effectiveReadFaceObserved, effectiveWriteFace: effectiveWriteFaceObserved } : {}), ...(effectiveReadDenyObserved !== undefined ? { effectiveReadDenyPatterns: effectiveReadDenyObserved } : {}), effectiveMemoryScopes: memoryEffectiveScopes, cwdRef: handsCwdRef, ...(attachmentRootCanonical !== undefined ? { handsRoot: attachmentRootCanonical } : {}), ...(stampCallTarget !== undefined ? { stampCallTarget } : {}), toolProgressRef, ...(advertisedWritableDirs !== undefined ? { advertisedWritableDirs } : {}), exemptRoots: legExemptRoots, ...(worktreeSessionRef !== undefined ? { worktreeSessionRef } : {}), ...(workspaceStateSettle !== undefined ? { workspaceStateSettle } : {}), ...(sealReadStateSeat !== undefined ? { sealReadStateSeat } : {}), denyNarrowingPolicy, skillGrants: skillGrantLane, skillSpecs, ...(permissionRuleLane !== undefined ? { persistedRuleLane: permissionRuleLane } : {}), ...(basePolicyForResumeEdit !== undefined ? { basePolicyForResumeEdit } : {}), consolidationWriteJudge, ...(permissionRuleOrgLane !== undefined ? { permissionRuleOrg: permissionRuleOrgLane } : {}), releaseSignal, endModeCeiling, settleContentAskBindings, cacheBreakDetector, cacheFingerprint, wiringManifest, promptManifest, promptIdentity, activeTools, ...(deferred.size > 0 ? { deferredToolNames: deferred } : {}), toolMaterializeStatic, deferDirectCall, ...(staticFaceForRef.current !== undefined ? { staticFaceFor: staticFaceForRef.current } : {}), ownedEnv, pausedRef, undeliveredContinuationRef, suspendProgressRef, remoteEnvFailures, reviewRequestRef, suspendLoopRef, suspendForResource, ...(suspendForPlatformLimit !== undefined ? { suspendForPlatformLimit } : {}), ...(envLifetimeSuspendAt !== undefined ? { envLifetimeSuspendAt } : {}), ...(usageGovernance !== undefined ? { usageGovernance } : {}), callIssuedAtRef, workCutRef, brainCallGuardrailRef, gateStopRef, stopForDenialLimit, suspendForReview, ...(readFileStateForCheckpoint !== undefined ? { readFileState: readFileStateForCheckpoint } : {}), resourceLedger: priorLedger, liveSpendRef, humanReviewRef, now, tools, toolRoster, toolRosterDeltas: rosterSeat, structuredProjector, toolEffects, wakeRecovered, promptOverheadTokens, lastBrainContext, ...(compactionRestore !== undefined ? { compactionRestore } : {}), recentlyReadFiles, normalizeAttachmentPath, isDedupStubResult, ...(onCompactionApplied ? { onCompactionApplied } : {}), compactionReuseRef, trimPressureRef, microCompact, ...(memoryEngineSession ? { memoryEngineSession } : {}), ...(subagentRetain ? { subagentRetain } : {}), ...(lspDiagnostics && nudgeLspOnEdit && withheldDiagnosticsOf ? { lspDiagnostics: { registry: lspDiagnostics, nudge: nudgeLspOnEdit, runIdent: lspRunIdent, withheldOf: withheldDiagnosticsOf } } : {}), stopRequestedRef, announcedSnapshotRecovered: onceLedger.recovered, ...(dateChange ? { dateChange } : {}), ...(instructionSources ? { instructionSources } : {}), ...(projectInstructionContent !== undefined ? { projectInstructionContent } : {}), ...(workflowSizeGuideline ? { workflowSizeGuideline } : {}), ...(detectExternalChanges ? { detectExternalChanges } : {}), ...(toolsDeltaRef ? { toolsDeltaRef } : {}), ...(agentListing ? { agentListing } : {}), ...(skillsListing ? { skillsListing } : {}), announcedListingsRef, frameReceipts: { pending: [], listingSnapshotOwed: false }, frameSettlement, ...(userAttachmentsSeat !== undefined ? { userAttachments: userAttachmentsSeat } : {}), attachmentDelivery: createAttachmentDelivery(), ...(modelFileReaderSeat.current !== undefined ? { modelFileReader: modelFileReaderSeat.current } : {}), syntheticReadVerdict, ...(peerLaneRefs.boundaryRound !== undefined ? { peerBoundaryRound: peerLaneRefs.boundaryRound } : {}), gitStatusRef, postureFrameRef, listBackgroundTasks, hookIdentity, modBus: legMods.bus, sideCallBookRef, ...(sessionBoxBound !== undefined ? { sessionBox: sessionBoxBound } : {}), ...(turnSnapshotRef.current !== undefined ? { turnSnapshot: turnSnapshotRef.current } : {}), ...(centerCompactionCandidate !== undefined ? { centerCompactionCandidate } : {}), ...(shellReadCheck !== undefined ? { shellReadCheck } : {}), ...(toolDisclosureSeat !== undefined ? { toolDisclosure: toolDisclosureSeat } : {}), ...(approvedCallScreen !== undefined ? { approvedCallScreen } : {}) });
|
|
812
|
+
const buildPrepared = () => ({ harness, session, sessionId, runId, crossBoundary, registryAccess: { owner: hostTaskId, scope: taskScope }, reminderMark, reminderDisclosureCounts, fullShellReachable, approvalPosture: { get mode() { return permissionMode.current; }, askEffective: askSeatEffective(wiringManifest) }, ...(outputStyleFrame !== undefined ? { outputStyleFrame } : {}), permissionMode, editedFilesSnapshot, taskRootPath: taskRootFinal, model, thinking, compModel: effectiveCompModel, mcp, ...(mcpRedial !== undefined ? { mcpRedial } : {}), ...(a2a.tools.length > 0 ? { a2a } : {}), blockedRef, outputRef, abortController, conflictRef, blockedToolCalls, toolOccurrences, batchHaltRef, nestedStats, ...(rewindNotes.length > 0 ? { rewindNotes } : {}), ...(fileHistoryBoundary !== undefined ? { fileHistoryBoundary } : {}), ...(effectiveReadFaceObserved !== undefined ? { effectiveReadFace: effectiveReadFaceObserved, effectiveWriteFace: effectiveWriteFaceObserved } : {}), ...(effectiveReadDenyObserved !== undefined ? { effectiveReadDenyPatterns: effectiveReadDenyObserved } : {}), effectiveMemoryScopes: memoryEffectiveScopes, cwdRef: handsCwdRef, ...(attachmentRootCanonical !== undefined ? { handsRoot: attachmentRootCanonical } : {}), ...(stampCallTarget !== undefined ? { stampCallTarget } : {}), toolProgressRef, ...(advertisedWritableDirs !== undefined ? { advertisedWritableDirs } : {}), exemptRoots: legExemptRoots, ...(worktreeSessionRef !== undefined ? { worktreeSessionRef } : {}), ...(workspaceStateSettle !== undefined ? { workspaceStateSettle } : {}), ...(sealReadStateSeat !== undefined ? { sealReadStateSeat } : {}), denyNarrowingPolicy, skillGrants: skillGrantLane, skillSpecs, ...(permissionRuleLane !== undefined ? { persistedRuleLane: permissionRuleLane } : {}), ...(basePolicyForResumeEdit !== undefined ? { basePolicyForResumeEdit } : {}), consolidationWriteJudge, ...(permissionRuleOrgLane !== undefined ? { permissionRuleOrg: permissionRuleOrgLane } : {}), releaseSignal, endModeCeiling, settleContentAskBindings, cacheBreakDetector, cacheFingerprint, wiringManifest, promptManifest, promptIdentity, activeTools, ...(deferred.size > 0 ? { deferredToolNames: deferred } : {}), toolMaterializeStatic, deferDirectCall, ...(staticFaceForRef.current !== undefined ? { staticFaceFor: staticFaceForRef.current } : {}), ownedEnv, pausedRef, undeliveredContinuationRef, suspendProgressRef, remoteEnvFailures, reviewRequestRef, suspendLoopRef, suspendForResource, ...(suspendForPlatformLimit !== undefined ? { suspendForPlatformLimit } : {}), ...(envLifetimeSuspendAt !== undefined ? { envLifetimeSuspendAt } : {}), ...(usageGovernance !== undefined ? { usageGovernance } : {}), callIssuedAtRef, workCutRef, brainCallGuardrailRef, gateStopRef, stopForDenialLimit, suspendForReview, ...(readFileStateForCheckpoint !== undefined ? { readFileState: readFileStateForCheckpoint } : {}), resourceLedger: priorLedger, liveSpendRef, humanReviewRef, now, tools, toolRoster, toolRosterDeltas: rosterSeat, structuredProjector, toolEffects, wakeRecovered, promptOverheadTokens, lastBrainContext, lastSentRequest: () => lastBrainContextRef.current, ...(advisor.instruction !== undefined ? { advisorInstruction: advisor.instruction } : {}), ...(compactionRestore !== undefined ? { compactionRestore } : {}), recentlyReadFiles, normalizeAttachmentPath, isDedupStubResult, ...(onCompactionApplied ? { onCompactionApplied } : {}), compactionReuseRef, trimPressureRef, microCompact, ...(memoryEngineSession ? { memoryEngineSession } : {}), ...(subagentRetain ? { subagentRetain } : {}), ...(lspDiagnostics && nudgeLspOnEdit && withheldDiagnosticsOf ? { lspDiagnostics: { registry: lspDiagnostics, nudge: nudgeLspOnEdit, runIdent: lspRunIdent, withheldOf: withheldDiagnosticsOf } } : {}), stopRequestedRef, announcedSnapshotRecovered: onceLedger.recovered, ...(dateChange ? { dateChange } : {}), ...(instructionSources ? { instructionSources } : {}), ...(projectInstructionContent !== undefined ? { projectInstructionContent } : {}), ...(workflowSizeGuideline ? { workflowSizeGuideline } : {}), ...(detectExternalChanges ? { detectExternalChanges } : {}), ...(toolsDeltaRef ? { toolsDeltaRef } : {}), ...(agentListing ? { agentListing } : {}), ...(skillsListing ? { skillsListing } : {}), announcedListingsRef, frameReceipts: { pending: [], listingSnapshotOwed: false }, frameSettlement, ...(userAttachmentsSeat !== undefined ? { userAttachments: userAttachmentsSeat } : {}), attachmentDelivery: createAttachmentDelivery(), ...(modelFileReaderSeat.current !== undefined ? { modelFileReader: modelFileReaderSeat.current } : {}), syntheticReadVerdict, ...(peerLaneRefs.boundaryRound !== undefined ? { peerBoundaryRound: peerLaneRefs.boundaryRound } : {}), gitStatusRef, postureFrameRef, listBackgroundTasks, hookIdentity, modBus: legMods.bus, sideCallBookRef, ...(sessionBoxBound !== undefined ? { sessionBox: sessionBoxBound } : {}), ...(turnSnapshotRef.current !== undefined ? { turnSnapshot: turnSnapshotRef.current } : {}), ...(centerCompactionCandidate !== undefined ? { centerCompactionCandidate } : {}), ...(shellReadCheck !== undefined ? { shellReadCheck } : {}), ...(toolDisclosureSeat !== undefined ? { toolDisclosure: toolDisclosureSeat } : {}), ...(approvedCallScreen !== undefined ? { approvedCallScreen } : {}) });
|
|
816
813
|
refuseLateRosterChanges(callerRoster.roster);
|
|
817
814
|
rollback.commit();
|
|
818
815
|
commitModeSeats(abortController.signal);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { readCompactionActiveTools } from "../../internal/harness.js";
|
|
2
2
|
import { toolsToFingerprintInputs } from "../cache-break-detector.js";
|
|
3
|
+
import { survivorsByName } from "../tool-roster.js";
|
|
3
4
|
import { deliverEngineNotice } from "../types.js";
|
|
4
5
|
import { TOOL_SEARCH_NAME, buildDeferredRegistry, extractDiscoveredToolNames, createPlaceholderTool, createToolSearchTool, staticSchemaRenderable } from "./tool-disclosure.js";
|
|
5
6
|
import { createDeferralCensus } from "./deferral-census.js";
|
|
@@ -83,12 +84,13 @@ export async function prepareToolDisclosureMount(input) {
|
|
|
83
84
|
toolDisclosureSeat = census.seat;
|
|
84
85
|
const publishCensus = () => census.publish(activeTools);
|
|
85
86
|
const everExempt = new Set();
|
|
87
|
+
const answering = (name) => survivorsByName(tools).get(name);
|
|
86
88
|
const staticFaceFor = (name) => {
|
|
87
89
|
if (!materializeStatic)
|
|
88
90
|
return false;
|
|
89
91
|
if (everExempt.has(name))
|
|
90
92
|
return false;
|
|
91
|
-
if (staticSchemaRenderable(
|
|
93
|
+
if (staticSchemaRenderable(answering(name)?.parameters))
|
|
92
94
|
return true;
|
|
93
95
|
everExempt.add(name);
|
|
94
96
|
return false;
|
|
@@ -103,10 +105,10 @@ export async function prepareToolDisclosureMount(input) {
|
|
|
103
105
|
const directCallFor = (name) => {
|
|
104
106
|
if (spec.deferSelfResolve === false)
|
|
105
107
|
return undefined;
|
|
106
|
-
const executionMode =
|
|
108
|
+
const executionMode = answering(name)?.executionMode;
|
|
107
109
|
return {
|
|
108
110
|
resolveReal: () => {
|
|
109
|
-
const real =
|
|
111
|
+
const real = answering(name);
|
|
110
112
|
if (real === undefined)
|
|
111
113
|
return undefined;
|
|
112
114
|
return {
|
|
@@ -206,7 +208,7 @@ export async function prepareToolDisclosureMount(input) {
|
|
|
206
208
|
directCallEnabled: spec.deferSelfResolve !== false,
|
|
207
209
|
isMounted: (name) => tools.some((t) => t.name === name),
|
|
208
210
|
...(materializeStatic
|
|
209
|
-
? { staticSchemaFor: (name) => (staticFaceFor(name) ?
|
|
211
|
+
? { staticSchemaFor: (name) => (staticFaceFor(name) ? answering(name)?.parameters : undefined) }
|
|
210
212
|
: {}),
|
|
211
213
|
onActivationCommitted: publishCensus,
|
|
212
214
|
serializeActivation,
|
|
@@ -121,9 +121,12 @@ export interface PrepareWiringManifestInput {
|
|
|
121
121
|
* resolution materially activated; relayed onto the manifest (present iff non-empty), never
|
|
122
122
|
* re-derived from `deps` here (which by this phase sits past that phase's await). */
|
|
123
123
|
readDenyBuiltinTiersActive: readonly string[];
|
|
124
|
-
/** borrowed-readonly — from the LSP phase's manager fold: gates the manifest's LSP section (absent ⇒ byte-identical manifest). */ lspManagerWired: boolean;
|
|
125
|
-
|
|
126
|
-
/** borrowed-readonly — from the file-history phase's one fold of the two off switches: the manifest's word, relayed. */ fileHistoryFact: NonNullable<WiringManifest["fileHistory"]>;
|
|
124
|
+
/** borrowed-readonly — from the LSP phase's manager fold: gates the manifest's LSP section (absent ⇒ byte-identical manifest). */ lspManagerWired: boolean; /** borrowed-readonly — from the LSP phase: is the diagnostics lane live? The `lane` word's only input. */
|
|
125
|
+
lspDiagnosticsLive: boolean;
|
|
126
|
+
/** borrowed-readonly — from the file-history phase's one fold of the two off switches: the manifest's word, relayed. */ fileHistoryFact: NonNullable<WiringManifest["fileHistory"]>; /** borrowed-readonly — from the project-context phase: did it call the deployment's seam (the arm's own predicate), relayed. */
|
|
127
|
+
projectMemoryFact: NonNullable<WiringManifest["projectMemory"]>;
|
|
128
|
+
/** borrowed-readonly — from the policy-chain phase: this leg's own session-rule layer published its key for the children's chain (`ownSessionRulesRef.current !== undefined`), relayed as `sessionRules.childrenReadLive`. */ sessionRulesChildrenReadLive: boolean;
|
|
129
|
+
/** borrowed-readonly — the advisor phase's answer, relayed. */ advisorFact?: WiringManifest["advisor"];
|
|
127
130
|
/** borrowed-readonly — the arming outcome the caps phase reads live (the manifest's auto-mode face at this leg's start). */
|
|
128
131
|
autoModeArmReason: () => AutoModeArmFact;
|
|
129
132
|
/** borrowed-readonly — the leg's live permission-mode seat: its receipt at this leg's start rides the manifest, and the
|
|
@@ -117,7 +117,7 @@ function announceDurableGateUnavailable(args) {
|
|
|
117
117
|
});
|
|
118
118
|
}
|
|
119
119
|
export function prepareWiringManifest(input) {
|
|
120
|
-
const { spec, deps, internals, resume, sessionId, runId, hostTaskId, taskScope, modBus, checkpointScope, policyLayers, effectivePolicy, handsEnabled, taskRootFinal, legWriteGuard, mcp, irreversibleTools, egressTools, toolEffects, ownedEnv, executionEnv, offloadStore, onceLedger, usageWindows, envLifetimeSuspendAt, runtimeCaps, resolvedInteractionPosture, durableQuestionFace, liveQuestionFace, checkpointStore, sessions, modelGateManifest, autoModeArmReason, permissionMode, lockedPreflight, peerLaneRefs, frameSettlement, sessionBox, harness, pausedRef, askSeat, liveInheritedGate, delegation, toolRoster, readDenyBuiltinTiersActive, lspManagerWired, shellReadStationArmed, crossBoundaryStationEngaged, lspDiagnosticsLive, fileHistoryFact, memoryPollution } = input;
|
|
120
|
+
const { spec, deps, internals, resume, sessionId, runId, hostTaskId, taskScope, modBus, checkpointScope, policyLayers, effectivePolicy, handsEnabled, taskRootFinal, legWriteGuard, mcp, irreversibleTools, egressTools, toolEffects, ownedEnv, executionEnv, offloadStore, onceLedger, usageWindows, envLifetimeSuspendAt, runtimeCaps, resolvedInteractionPosture, durableQuestionFace, liveQuestionFace, checkpointStore, sessions, modelGateManifest, autoModeArmReason, permissionMode, lockedPreflight, peerLaneRefs, frameSettlement, sessionBox, harness, pausedRef, askSeat, liveInheritedGate, delegation, toolRoster, readDenyBuiltinTiersActive, lspManagerWired, shellReadStationArmed, crossBoundaryStationEngaged, lspDiagnosticsLive, fileHistoryFact, projectMemoryFact, sessionRulesChildrenReadLive, memoryPollution, advisorFact } = input;
|
|
121
121
|
const onAsk = askSeat.value;
|
|
122
122
|
const handWriteTools = toolRoster.entries.filter((e) => e.mountedBy === "hands" && (e.effect === "write" || e.effect === "idempotent")).map((e) => e.name);
|
|
123
123
|
const hasEffectAwareGate = policyLayers.length > 0 || chainJudges(modBus);
|
|
@@ -223,7 +223,7 @@ export function prepareWiringManifest(input) {
|
|
|
223
223
|
mods: modBus.records,
|
|
224
224
|
...(lspManagerWired ? { lsp: deriveLspSeam(toolRoster.entries.some((e) => e.contract.contractId === LSP_CONTRACT_ID), lspDiagnosticsLive) } : {}),
|
|
225
225
|
hands: deriveHandsSeam(handsEnabled),
|
|
226
|
-
fileHistory: fileHistoryFact,
|
|
226
|
+
fileHistory: fileHistoryFact, projectMemory: projectMemoryFact, sessionRulesChildrenReadLive, ...(advisorFact !== undefined ? { advisor: advisorFact } : {}),
|
|
227
227
|
});
|
|
228
228
|
peerLaneRefs.askEffective = askSeatEffective(wiringManifest);
|
|
229
229
|
peerLaneRefs.permissionMode = () => permissionMode.current;
|
|
@@ -45,7 +45,7 @@ export function resumePolicyOutcome(input) {
|
|
|
45
45
|
const reason = decide.reason;
|
|
46
46
|
assertOutcomeText(reason, "reason");
|
|
47
47
|
const feedback = decide.feedback;
|
|
48
|
-
assertOutcomeText(feedback, "feedback");
|
|
48
|
+
assertOutcomeText(feedback, "feedback", { field: "feedback" });
|
|
49
49
|
plainPolicyOutcome = {
|
|
50
50
|
gate: "policy_ask",
|
|
51
51
|
boundCallId: decide.boundCallId,
|
|
@@ -7,7 +7,7 @@ const RETIRED_RUNNER_DEPS_KEYS = {
|
|
|
7
7
|
graderEnvFactory: "the grader env reaches the repair loop as `RepairLoopConfig.graderEnv`, minted by the trusted control plane (`assertOracleIsolation` / `GraderEnv` unchanged)",
|
|
8
8
|
"hands.readCyberReminder": "a Read result carries only the reminders about that read (an empty file, an offset past the end, a file already in context) — no standing content-safety tail, so there is nothing to switch; a deployment that wants that sentence states it in its own `appendSystemPrompt`",
|
|
9
9
|
promptProvider: "a deployment changes prompt text through overlays: register a `prompt.compose` handler on `RunnerDeps.mods` answering `{ overlays }` (role base `replace`, a brand line `add` to the role band, a behavior or scenario `add`, a core-behavior `replace` / `append` / `drop`), choose the role base per task with `TaskSpec.promptRole`, and dispose of an MCP server's instructions with a `prompt.section` registration answering `{ text }` / `{ text: null }`",
|
|
10
|
-
memorySessionIncarnation: "the occupant behind a session id is a cell of the session row now — `SessionMetadata.incarnation` on the metadata `Session.getMetadata()` returns (forks also `forkedFromIncarnation`), with `SessionStore.
|
|
10
|
+
memorySessionIncarnation: "the occupant behind a session id is a cell of the session row now — `SessionMetadata.incarnation` on the metadata `Session.getMetadata()` returns (forks also `forkedFromIncarnation`), with `SessionStore.headOf` (its `incarnation`) for by-id readers; put the token the old seat answered on your sessions instead. A deployment that drops the seat without surfacing the cell loses the axis: records bind by session id alone",
|
|
11
11
|
};
|
|
12
12
|
export function assertNoRetiredRunnerDeps(deps) {
|
|
13
13
|
assertNoRetiredKeys(deps, RETIRED_RUNNER_DEPS_KEYS, "RunnerDeps");
|
|
@@ -27,7 +27,6 @@ export async function runAttachmentSeats(input) {
|
|
|
27
27
|
? { announcedGuideline: prepared.workflowSizeGuideline.legGuideline, current: prepared.workflowSizeGuideline.current }
|
|
28
28
|
: undefined;
|
|
29
29
|
rs.counters.cadenceTurns = 0;
|
|
30
|
-
rs.turn.lastTurnHadToolCalls = false;
|
|
31
30
|
if (rs.attach.attachState !== undefined && (rs.attach.attachmentsCfg?.backgroundTasks ?? eventDefaultOn("background_tasks")) === true) {
|
|
32
31
|
try {
|
|
33
32
|
const branch = await prepared.session.getBranch();
|
|
@@ -24,7 +24,7 @@ export interface RunCompactionMachineryInput {
|
|
|
24
24
|
runner: RunnerDepsSeat;
|
|
25
25
|
}
|
|
26
26
|
export interface RunCompactionMachineryResult {
|
|
27
|
-
/** The accounted compaction brain
|
|
27
|
+
/** The accounted compaction brain ({@link derivedLegBrain} on the `compaction` lane). */
|
|
28
28
|
compactionBrain: Brain;
|
|
29
29
|
/** Whether ROUTINE turn-boundary compaction runs for this task, asked AT THE BOUNDARY. The request's own
|
|
30
30
|
* `compaction` is fixed for the leg, but the deployment's per-model overlay is a live seat — an operator
|
|
@@ -4,22 +4,12 @@ import { compactionEnabled, contextOverlayFor } from "../context-settings.js";
|
|
|
4
4
|
import { sanitizeCompactionSettings } from "../auto-compaction.js";
|
|
5
5
|
import { modelCostToPricing } from "../pricing.js";
|
|
6
6
|
import { emitTrace } from "../trace.js";
|
|
7
|
-
import {
|
|
8
|
-
import { sideCallBookOf } from "./side-call-account.js";
|
|
7
|
+
import { derivedLegBrain, sideCallBookOf } from "./side-call-account.js";
|
|
9
8
|
export function runCompactionMachinery(input) {
|
|
10
9
|
const { spec, prepared, rs, stats, noteUnevaluablePriceTable, modelCatalog, runner } = input;
|
|
11
10
|
const bookSideCall = sideCallBookOf(stats, { telemetry: rs.telemetry, pricing: () => runner.deps.pricing, noteUnevaluablePriceTable, catalog: modelCatalog });
|
|
12
11
|
prepared.sideCallBookRef.book = bookSideCall;
|
|
13
|
-
const compactionBrain =
|
|
14
|
-
stream: runner.deps.brain.stream,
|
|
15
|
-
complete: async (m, c, o) => {
|
|
16
|
-
const msg = await runWithStatusSink(() => { }, async () => await runWithReasoningWireFacts(() => { }, async () => runner.deps.brain.complete
|
|
17
|
-
? await runner.deps.brain.complete(m, c, o)
|
|
18
|
-
: await (await Promise.resolve(runner.deps.brain.stream(m, c, o))).result()));
|
|
19
|
-
bookSideCall("compaction", m, msg);
|
|
20
|
-
return msg;
|
|
21
|
-
},
|
|
22
|
-
};
|
|
12
|
+
const compactionBrain = derivedLegBrain(() => runner.deps.brain, "compaction", bookSideCall);
|
|
23
13
|
const legOverlay = () => contextOverlayFor(runner.deps.contextSettings, prepared.harness.getModelRef(), runner.deps);
|
|
24
14
|
const withinTaskCompaction = () => compactionEnabled(spec.compaction?.enabled, legOverlay()) && (spec.compaction?.withinTask ?? true);
|
|
25
15
|
const compactionBreaker = { failures: 0 };
|
|
@@ -47,6 +47,7 @@ export interface RunGitLaneInput {
|
|
|
47
47
|
* so a pending announcement is re-asserted into the session ahead of the boundary's own context work. */
|
|
48
48
|
onTurnBoundary: (event: {
|
|
49
49
|
model: Model;
|
|
50
|
+
continues: boolean;
|
|
50
51
|
}) => Promise<undefined>;
|
|
51
52
|
/** borrowed-readonly — the Runner's deployment deps, read LIVE inside the closures (`onError`). */
|
|
52
53
|
runner: RunnerDepsSeat;
|
|
@@ -5,7 +5,7 @@ import { emitTrace } from "../trace.js";
|
|
|
5
5
|
import { primaryActivityArg } from "../arg-summary.js";
|
|
6
6
|
import { egressText } from "../untrusted-egress.js";
|
|
7
7
|
import { readDegradation } from "../../brain/degrading.js";
|
|
8
|
-
import { OUTPUT_TOOL_NAME } from "
|
|
8
|
+
import { OUTPUT_TOOL_NAME } from "../tool-catalog-entries.js";
|
|
9
9
|
import { usageCostMicroUsd } from "./usage-accounting.js";
|
|
10
10
|
import { advanceCadenceClock, reduceToolEnd } from "./turn-attachments.js";
|
|
11
11
|
import { gatedCallIdOf } from "./park-commit.js";
|
|
@@ -15,7 +15,7 @@ import { stampRowNotExecuted } from "./tool-not-executed.js";
|
|
|
15
15
|
import { createResponseModelSeat } from "./response-model-seat.js";
|
|
16
16
|
import { createToolCallIdFoldSeat } from "./tool-call-id-fold-seat.js";
|
|
17
17
|
import { createFinishReasonSeat } from "./finish-reason-seat.js";
|
|
18
|
-
import { createToolTurnIncompleteSeat
|
|
18
|
+
import { createToolTurnIncompleteSeat } from "./tool-turn-repair-seat.js";
|
|
19
19
|
import { wireOf } from "../tool-name-readings.js";
|
|
20
20
|
import { rosterToolName } from "../tool-roster.js";
|
|
21
21
|
export function createHarnessHandlers(input) {
|
|
@@ -201,7 +201,6 @@ export function createHarnessHandlers(input) {
|
|
|
201
201
|
const content = m.content;
|
|
202
202
|
if (rs.attach.attachState !== undefined)
|
|
203
203
|
rs.counters.cadenceTurns = advanceCadenceClock(rs.attach.attachState, rs.counters.cadenceTurns, content, writeFamilyOf);
|
|
204
|
-
rs.turn.lastTurnHadToolCalls = turnCarriesToolCall(content);
|
|
205
204
|
}
|
|
206
205
|
rs.turn.callStartAt = undefined;
|
|
207
206
|
rs.turn.firstTokenAt = undefined;
|
|
@@ -28,6 +28,7 @@ import { errorCodeOf } from "./terminal-account.js";
|
|
|
28
28
|
import { DEFAULT_PRECALL_OUTPUT_TOKENS, platformLimitTerminal } from "./clock-and-limits.js";
|
|
29
29
|
import { legContextOverlayOption } from "./compaction-call-options.js";
|
|
30
30
|
import { mintOutputStyleReminder, owedPostureText } from "./compaction-restate.js";
|
|
31
|
+
import { advisorFrameText, registerAdvisorReceipt } from "./advisor-instructions.js";
|
|
31
32
|
import { deepJsonEqual, resumeContinuation } from "./decide-continuation.js";
|
|
32
33
|
import { approvalWordsOf, owedApprovalWords, withApprovalWords } from "./approval-feedback.js";
|
|
33
34
|
import { chainCannotJudge } from "./call-hook-stations.js";
|
|
@@ -163,6 +164,9 @@ export async function runLeg(input) {
|
|
|
163
164
|
const outputStyleWrapped = mintOutputStyleReminder(prepared);
|
|
164
165
|
if (outputStyleWrapped !== undefined)
|
|
165
166
|
continuation += "\n\n" + outputStyleWrapped;
|
|
167
|
+
const advisorResumeFrame = advisorFrameText(prepared);
|
|
168
|
+
if (advisorResumeFrame !== undefined)
|
|
169
|
+
continuation += "\n\n" + advisorResumeFrame;
|
|
166
170
|
const engineSegments = continuation.length > 0 ? [{ start: 0, end: continuation.length }] : [];
|
|
167
171
|
const parkedSteers = readPendingSteerQueue(resume.cp.state);
|
|
168
172
|
const resumeFrames = [
|
|
@@ -254,6 +258,7 @@ export async function runLeg(input) {
|
|
|
254
258
|
if (!prepared.abortController.signal.aborted) {
|
|
255
259
|
if (resume !== undefined)
|
|
256
260
|
resume.decisionDelivered = true;
|
|
261
|
+
registerAdvisorReceipt(prepared, continuation);
|
|
257
262
|
if (gitResumeDelivered !== undefined) {
|
|
258
263
|
const delivered = gitResumeDelivered;
|
|
259
264
|
prepared.gitStatusRef.protectedText = delivered.wrapped;
|
|
@@ -272,6 +277,8 @@ export async function runLeg(input) {
|
|
|
272
277
|
const preview = redactThenCut(prepared.outputStyleFrame, 220);
|
|
273
278
|
prepared.frameReceipts.pending.push({ source: "output_style", text: continuation, commit: () => void (queue.push({ type: "steering_injected", source: "output_style", preview, ...ident() }), (rs.attach.attachmentsInjected += 1)) });
|
|
274
279
|
}
|
|
280
|
+
if (postureText !== undefined)
|
|
281
|
+
prepared.frameReceipts.pending.push({ source: "posture", text: continuation, commit: () => undefined });
|
|
275
282
|
if (approvalFrames.length > 0) {
|
|
276
283
|
prepared.frameReceipts.pending.push({
|
|
277
284
|
source: "approval_feedback",
|
|
@@ -396,6 +403,9 @@ export async function runLeg(input) {
|
|
|
396
403
|
if (firstFrames.length > 0) {
|
|
397
404
|
effectiveObjective = `${firstFrames.map((f) => mintSystemReminder(sanitizeUntrustedText(f.body, attachmentEnvelopeTags(f.source)), prepared.reminderMark)).join("\n")}\n${effectiveObjective}`;
|
|
398
405
|
}
|
|
406
|
+
const advisorFrame = advisorFrameText(prepared);
|
|
407
|
+
if (advisorFrame !== undefined)
|
|
408
|
+
effectiveObjective = `${advisorFrame}\n${effectiveObjective}`;
|
|
399
409
|
const postureText = await owedPostureText(prepared, "always");
|
|
400
410
|
if (postureText !== undefined)
|
|
401
411
|
effectiveObjective = `${postureText}\n${effectiveObjective}`;
|
|
@@ -470,6 +480,9 @@ export async function runLeg(input) {
|
|
|
470
480
|
},
|
|
471
481
|
});
|
|
472
482
|
}
|
|
483
|
+
if (postureText !== undefined)
|
|
484
|
+
prepared.frameReceipts.pending.push({ source: "posture", text: effectiveObjective, commit: () => undefined });
|
|
485
|
+
registerAdvisorReceipt(prepared, effectiveObjective);
|
|
473
486
|
const enginePrefixChars = effectiveObjective.length - projectedObjective.length;
|
|
474
487
|
if (!prepared.abortController.signal.aborted) {
|
|
475
488
|
prepared.attachmentDelivery.stage(objectiveInputId, attachmentFrames);
|
|
@@ -21,7 +21,7 @@ import { resumeDecisionWasNegative } from "./decide-continuation.js";
|
|
|
21
21
|
import { drainForwardedFramesBeforeDone, forwardsSubagentEvents } from "./prepare-run-refs.js";
|
|
22
22
|
import { generatePromptSuggestions } from "./prompt-suggestions.js";
|
|
23
23
|
import { settleTeardownLeg } from "./teardown-bounded.js";
|
|
24
|
-
import { owedDateAnchor } from "./
|
|
24
|
+
import { owedDateAnchor } from "./conversation-segment.js";
|
|
25
25
|
import { autoRunConsolidationFromRecommendation, autoRunOnRecommendationEffective, scopeHasUnconsumedRecommendation } from "./memory-consolidation-driver.js";
|
|
26
26
|
import { amendTerminal, terminalProjection } from "./terminal-projection.js";
|
|
27
27
|
import { mintCompactedEvent } from "../auto-compaction.js";
|