@caupulican/pi-adaptative 0.81.42 → 0.81.43
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 +37 -0
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/register-bedrock.d.ts.map +1 -1
- package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
- package/dist/bun/restore-sandbox-env.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +52 -49
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +62 -57
- package/dist/bundled-resources/prompts/skillify.md +1 -1
- package/dist/bundled-resources/runtimes/pi-shell-engine/commands/fs.py +16 -19
- package/dist/bundled-resources/runtimes/pi-shell-engine/commands/search.py +12 -26
- package/dist/bundled-resources/runtimes/pi-shell-engine/commands/strings.py +15 -121
- package/dist/bundled-resources/runtimes/pi-shell-engine/commands/text.py +52 -79
- package/dist/bundled-resources/runtimes/pi-shell-engine/escapes.py +70 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/exec.py +110 -61
- package/dist/bundled-resources/runtimes/pi-shell-engine/main.py +106 -23
- package/dist/bundled-resources/runtimes/pi-shell-engine/paths.py +10 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/proc.py +12 -4
- package/dist/bundled-resources/runtimes/pi-shell-engine/shell_args.py +22 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/state.py +9 -2
- package/dist/bundled-resources/runtimes/pi-shell-engine/tokens.py +129 -259
- package/dist/bundled-resources/skills/authorized-web-security-audit/SKILL.md +187 -0
- package/dist/bundled-resources/skills/authorized-web-security-audit/references/assessment-contract.md +92 -0
- package/dist/bundled-resources/skills/deduplicate-by-evidence/SKILL.md +134 -0
- package/dist/bundled-resources/skills/evidence-gated-tdd/SKILL.md +93 -0
- package/dist/bundled-resources/skills/evidence-gated-tdd/references/evidence-model.md +27 -0
- package/dist/bundled-resources/skills/evidence-gated-tdd/references/security-scanners.md +24 -0
- package/dist/bundled-resources/skills/harness-self-adaptation/SKILL.md +4 -2
- package/dist/bundled-resources/skills/secure-agent-tool-surfaces/SKILL.md +217 -0
- package/dist/bundled-resources/skills/secure-agent-tool-surfaces/references/defensive-exploit-catalogue.md +175 -0
- package/dist/bundled-resources/skills/secure-agent-tool-surfaces/references/tool-boundary-checklist.md +87 -0
- package/dist/bundled-resources/skills/skill-architect/SKILL.md +2 -2
- package/dist/bundled-resources/skills/skill-creator/SKILL.md +188 -0
- package/dist/bundled-resources/skills/skill-creator/references/pi-skill-contract.md +73 -0
- package/dist/bundled-resources/skills/skill-creator/scripts/init-skill.mjs +142 -0
- package/dist/bundled-resources/skills/skill-creator/scripts/validate-skill.mjs +122 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +8 -8
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/piped-stdin.d.ts +4 -0
- package/dist/cli/piped-stdin.d.ts.map +1 -0
- package/dist/cli/piped-stdin.js +13 -0
- package/dist/cli/piped-stdin.js.map +1 -0
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -14
- package/dist/config.js.map +1 -1
- package/dist/core/agent-directory-layout.d.ts.map +1 -1
- package/dist/core/agent-directory-layout.js.map +1 -1
- package/dist/core/agent-paths.d.ts.map +1 -1
- package/dist/core/agent-paths.js.map +1 -1
- package/dist/core/agent-session-contracts.d.ts +5 -9
- package/dist/core/agent-session-contracts.d.ts.map +1 -1
- package/dist/core/agent-session-contracts.js +1 -12
- package/dist/core/agent-session-contracts.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +10 -25
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +24 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +210 -237
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage.d.ts +4 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +13 -39
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/autonomy/approval-gate.d.ts.map +1 -1
- package/dist/core/autonomy/approval-gate.js.map +1 -1
- package/dist/core/autonomy/bounded-completion.d.ts.map +1 -1
- package/dist/core/autonomy/bounded-completion.js.map +1 -1
- package/dist/core/autonomy/contracts.d.ts.map +1 -1
- package/dist/core/autonomy/envelope-enforcement.d.ts.map +1 -1
- package/dist/core/autonomy/envelope-enforcement.js.map +1 -1
- package/dist/core/autonomy/evidence-finding-projection.d.ts +11 -0
- package/dist/core/autonomy/evidence-finding-projection.d.ts.map +1 -0
- package/dist/core/autonomy/evidence-finding-projection.js +37 -0
- package/dist/core/autonomy/evidence-finding-projection.js.map +1 -0
- package/dist/core/autonomy/foreground-envelope.d.ts.map +1 -1
- package/dist/core/autonomy/foreground-envelope.js.map +1 -1
- package/dist/core/autonomy/gates.d.ts.map +1 -1
- package/dist/core/autonomy/gates.js.map +1 -1
- package/dist/core/autonomy/lane-private-paths.d.ts.map +1 -1
- package/dist/core/autonomy/lane-private-paths.js.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
- package/dist/core/autonomy/lane-tracker.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tracker.js +2 -3
- package/dist/core/autonomy/lane-tracker.js.map +1 -1
- package/dist/core/autonomy/path-scope.d.ts.map +1 -1
- package/dist/core/autonomy/path-scope.js.map +1 -1
- package/dist/core/autonomy/risk-assessment.d.ts.map +1 -1
- package/dist/core/autonomy/session-lane-record.d.ts.map +1 -1
- package/dist/core/autonomy/session-lane-record.js.map +1 -1
- package/dist/core/autonomy/status.d.ts.map +1 -1
- package/dist/core/autonomy/status.js.map +1 -1
- package/dist/core/autonomy/subagent-prompt.d.ts.map +1 -1
- package/dist/core/autonomy/subagent-prompt.js.map +1 -1
- package/dist/core/autonomy/telemetry-events.d.ts.map +1 -1
- package/dist/core/autonomy/telemetry-events.js.map +1 -1
- package/dist/core/autonomy-telemetry.d.ts.map +1 -1
- package/dist/core/autonomy-telemetry.js +2 -4
- package/dist/core/autonomy-telemetry.js.map +1 -1
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +2 -15
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/background-tool-task-controller.d.ts +88 -0
- package/dist/core/background-tool-task-controller.d.ts.map +1 -0
- package/dist/core/background-tool-task-controller.js +470 -0
- package/dist/core/background-tool-task-controller.js.map +1 -0
- package/dist/core/bash-execution-controller.d.ts +1 -0
- package/dist/core/bash-execution-controller.d.ts.map +1 -1
- package/dist/core/bash-execution-controller.js +5 -4
- package/dist/core/bash-execution-controller.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/bedrock-sso-login.d.ts.map +1 -1
- package/dist/core/bedrock-sso-login.js.map +1 -1
- package/dist/core/billing-failover-controller.d.ts.map +1 -1
- package/dist/core/billing-failover-controller.js +3 -3
- package/dist/core/billing-failover-controller.js.map +1 -1
- package/dist/core/billing-failover.d.ts.map +1 -1
- package/dist/core/billing-failover.js.map +1 -1
- package/dist/core/capability-contract.d.ts.map +1 -1
- package/dist/core/catalog-manager.d.ts.map +1 -1
- package/dist/core/catalog-manager.js +0 -0
- package/dist/core/catalog-manager.js.map +1 -1
- package/dist/core/compaction-controller.d.ts +2 -0
- package/dist/core/compaction-controller.d.ts.map +1 -1
- package/dist/core/compaction-controller.js +21 -8
- package/dist/core/compaction-controller.js.map +1 -1
- package/dist/core/compaction-support.d.ts +8 -0
- package/dist/core/compaction-support.d.ts.map +1 -1
- package/dist/core/compaction-support.js +0 -2
- package/dist/core/compaction-support.js.map +1 -1
- package/dist/core/context/artifact-retrieval.d.ts.map +1 -1
- package/dist/core/context/artifact-retrieval.js.map +1 -1
- package/dist/core/context/brain-curator.d.ts.map +1 -1
- package/dist/core/context/brain-curator.js +14 -33
- package/dist/core/context/brain-curator.js.map +1 -1
- package/dist/core/context/context-artifacts.d.ts.map +1 -1
- package/dist/core/context/context-artifacts.js +16 -24
- package/dist/core/context/context-artifacts.js.map +1 -1
- package/dist/core/context/context-audit.d.ts.map +1 -1
- package/dist/core/context/context-audit.js +3 -17
- package/dist/core/context/context-audit.js.map +1 -1
- package/dist/core/context/context-composition.d.ts.map +1 -1
- package/dist/core/context/context-composition.js.map +1 -1
- package/dist/core/context/context-item.d.ts.map +1 -1
- package/dist/core/context/context-item.js.map +1 -1
- package/dist/core/context/context-prompt-enforcement.d.ts.map +1 -1
- package/dist/core/context/context-prompt-enforcement.js +3 -16
- package/dist/core/context/context-prompt-enforcement.js.map +1 -1
- package/dist/core/context/context-prompt-policy.d.ts.map +1 -1
- package/dist/core/context/context-prompt-policy.js.map +1 -1
- package/dist/core/context/context-retention.d.ts.map +1 -1
- package/dist/core/context/context-retention.js.map +1 -1
- package/dist/core/context/context-store-retention.d.ts.map +1 -1
- package/dist/core/context/context-store-retention.js.map +1 -1
- package/dist/core/context/context-store.d.ts.map +1 -1
- package/dist/core/context/context-store.js.map +1 -1
- package/dist/core/context/context-tool-result.d.ts +4 -0
- package/dist/core/context/context-tool-result.d.ts.map +1 -0
- package/dist/core/context/context-tool-result.js +15 -0
- package/dist/core/context/context-tool-result.js.map +1 -0
- package/dist/core/context/current-work-memory.d.ts.map +1 -1
- package/dist/core/context/current-work-memory.js.map +1 -1
- package/dist/core/context/file-store-memory-provider.d.ts.map +1 -1
- package/dist/core/context/file-store-memory-provider.js +7 -28
- package/dist/core/context/file-store-memory-provider.js.map +1 -1
- package/dist/core/context/local-memory-search.d.ts +11 -0
- package/dist/core/context/local-memory-search.d.ts.map +1 -0
- package/dist/core/context/local-memory-search.js +37 -0
- package/dist/core/context/local-memory-search.js.map +1 -0
- package/dist/core/context/long-term-memory-trigger.d.ts.map +1 -1
- package/dist/core/context/long-term-memory-trigger.js.map +1 -1
- package/dist/core/context/memory-diagnostics.d.ts.map +1 -1
- package/dist/core/context/memory-diagnostics.js.map +1 -1
- package/dist/core/context/memory-index-store.d.ts.map +1 -1
- package/dist/core/context/memory-index-store.js.map +1 -1
- package/dist/core/context/memory-prompt-block.d.ts.map +1 -1
- package/dist/core/context/memory-prompt-block.js.map +1 -1
- package/dist/core/context/memory-prompt-budget.d.ts.map +1 -1
- package/dist/core/context/memory-prompt-budget.js.map +1 -1
- package/dist/core/context/memory-provider-contract.d.ts.map +1 -1
- package/dist/core/context/memory-provider-contract.js.map +1 -1
- package/dist/core/context/memory-retrieval.d.ts.map +1 -1
- package/dist/core/context/memory-retrieval.js.map +1 -1
- package/dist/core/context/memory-tier-composer.d.ts.map +1 -1
- package/dist/core/context/memory-tier-composer.js.map +1 -1
- package/dist/core/context/message-text.d.ts +7 -0
- package/dist/core/context/message-text.d.ts.map +1 -0
- package/dist/core/context/message-text.js +68 -0
- package/dist/core/context/message-text.js.map +1 -0
- package/dist/core/context/okf-memory-provider.d.ts.map +1 -1
- package/dist/core/context/okf-memory-provider.js +4 -30
- package/dist/core/context/okf-memory-provider.js.map +1 -1
- package/dist/core/context/okf-memory.d.ts.map +1 -1
- package/dist/core/context/okf-memory.js.map +1 -1
- package/dist/core/context/policy-engine.d.ts.map +1 -1
- package/dist/core/context/policy-engine.js.map +1 -1
- package/dist/core/context/policy-types.d.ts.map +1 -1
- package/dist/core/context/sqlite-runtime-index.d.ts.map +1 -1
- package/dist/core/context/sqlite-runtime-index.js.map +1 -1
- package/dist/core/context/storage-authority.d.ts.map +1 -1
- package/dist/core/context/tool-output-packer.d.ts.map +1 -1
- package/dist/core/context/tool-output-packer.js.map +1 -1
- package/dist/core/context-gc.d.ts.map +1 -1
- package/dist/core/context-gc.js +14 -21
- package/dist/core/context-gc.js.map +1 -1
- package/dist/core/context-pipeline.d.ts +1 -3
- package/dist/core/context-pipeline.d.ts.map +1 -1
- package/dist/core/context-pipeline.js +64 -145
- package/dist/core/context-pipeline.js.map +1 -1
- package/dist/core/cost/cost-summary.d.ts.map +1 -1
- package/dist/core/cost/cost-summary.js.map +1 -1
- package/dist/core/cost/daily-usage.d.ts.map +1 -1
- package/dist/core/cost/daily-usage.js.map +1 -1
- package/dist/core/cost/session-usage.d.ts.map +1 -1
- package/dist/core/cost/session-usage.js.map +1 -1
- package/dist/core/cost-guard.d.ts.map +1 -1
- package/dist/core/cost-guard.js.map +1 -1
- package/dist/core/default-tool-surface.d.ts.map +1 -1
- package/dist/core/default-tool-surface.js +1 -0
- package/dist/core/default-tool-surface.js.map +1 -1
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/delegation/managed-lane-controller.d.ts.map +1 -1
- package/dist/core/delegation/managed-lane-controller.js +2 -6
- package/dist/core/delegation/managed-lane-controller.js.map +1 -1
- package/dist/core/delegation/session-worker-claim.d.ts.map +1 -1
- package/dist/core/delegation/session-worker-claim.js.map +1 -1
- package/dist/core/delegation/worker-action-journal.d.ts.map +1 -1
- package/dist/core/delegation/worker-action-journal.js +0 -4
- package/dist/core/delegation/worker-action-journal.js.map +1 -1
- package/dist/core/delegation/worker-actions.d.ts.map +1 -1
- package/dist/core/delegation/worker-actions.js.map +1 -1
- package/dist/core/delegation/worker-agent-control-coordinator.d.ts +1 -0
- package/dist/core/delegation/worker-agent-control-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-agent-control-coordinator.js +13 -15
- package/dist/core/delegation/worker-agent-control-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-agent-control.d.ts.map +1 -1
- package/dist/core/delegation/worker-agent-control.js +1 -4
- package/dist/core/delegation/worker-agent-control.js.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
- package/dist/core/delegation/worker-claim.d.ts.map +1 -1
- package/dist/core/delegation/worker-claim.js.map +1 -1
- package/dist/core/delegation/worker-conversation-store.d.ts.map +1 -1
- package/dist/core/delegation/worker-conversation-store.js +0 -2
- package/dist/core/delegation/worker-conversation-store.js.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.js +5 -14
- package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
- package/dist/core/delegation/worker-delegation-request.d.ts.map +1 -1
- package/dist/core/delegation/worker-dispatch-scheduler.d.ts.map +1 -1
- package/dist/core/delegation/worker-dispatch-scheduler.js +5 -6
- package/dist/core/delegation/worker-dispatch-scheduler.js.map +1 -1
- package/dist/core/delegation/worker-execution-policy.d.ts.map +1 -1
- package/dist/core/delegation/worker-execution-policy.js.map +1 -1
- package/dist/core/delegation/worker-lane-projection.d.ts.map +1 -1
- package/dist/core/delegation/worker-lane-projection.js.map +1 -1
- package/dist/core/delegation/worker-lifecycle.d.ts.map +1 -1
- package/dist/core/delegation/worker-lifecycle.js +0 -3
- package/dist/core/delegation/worker-lifecycle.js.map +1 -1
- package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-notification-coordinator.js +4 -5
- package/dist/core/delegation/worker-notification-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-process-owner.d.ts.map +1 -1
- package/dist/core/delegation/worker-process-owner.js.map +1 -1
- package/dist/core/delegation/worker-profile-resolver.d.ts.map +1 -1
- package/dist/core/delegation/worker-profile-resolver.js +1 -2
- package/dist/core/delegation/worker-profile-resolver.js.map +1 -1
- package/dist/core/delegation/worker-recovery-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-recovery-coordinator.js +3 -4
- package/dist/core/delegation/worker-recovery-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-resource-catalog.d.ts.map +1 -1
- package/dist/core/delegation/worker-resource-catalog.js.map +1 -1
- package/dist/core/delegation/worker-resource-materializer.d.ts.map +1 -1
- package/dist/core/delegation/worker-resource-materializer.js +1 -4
- package/dist/core/delegation/worker-resource-materializer.js.map +1 -1
- package/dist/core/delegation/worker-runner.d.ts +2 -4
- package/dist/core/delegation/worker-runner.d.ts.map +1 -1
- package/dist/core/delegation/worker-runner.js +6 -18
- package/dist/core/delegation/worker-runner.js.map +1 -1
- package/dist/core/delegation/worker-task-label.d.ts.map +1 -1
- package/dist/core/delegation/worker-task-label.js.map +1 -1
- package/dist/core/delegation/worker-terminal-finalizer.d.ts.map +1 -1
- package/dist/core/delegation/worker-terminal-finalizer.js.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.js +1 -4
- package/dist/core/delegation/worker-write-reservation-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-write-reservation.d.ts.map +1 -1
- package/dist/core/delegation/worker-write-reservation.js +0 -2
- package/dist/core/delegation/worker-write-reservation.js.map +1 -1
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/doctor.d.ts.map +1 -1
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js +26 -7
- package/dist/core/exec.js.map +1 -1
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/dist/core/export-html/ansi-to-html.js +21 -74
- package/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +4 -0
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/session-tree-foundations.d.mts +67 -0
- package/dist/core/export-html/session-tree-foundations.mjs +313 -0
- package/dist/core/export-html/template.css +14 -41
- package/dist/core/export-html/template.html +3 -1
- package/dist/core/export-html/template.js +26 -435
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extension-import-authority.d.ts.map +1 -1
- package/dist/core/extension-import-authority.js.map +1 -1
- package/dist/core/extension-metadata.d.ts.map +1 -1
- package/dist/core/extension-metadata.js.map +1 -1
- package/dist/core/extensions/builtin.d.ts +17 -0
- package/dist/core/extensions/builtin.d.ts.map +1 -1
- package/dist/core/extensions/builtin.js +18 -54
- package/dist/core/extensions/builtin.js.map +1 -1
- package/dist/core/extensions/entry-resolution.d.ts +3 -0
- package/dist/core/extensions/entry-resolution.d.ts.map +1 -0
- package/dist/core/extensions/entry-resolution.js +17 -0
- package/dist/core/extensions/entry-resolution.js.map +1 -0
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +76 -21
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +2 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +41 -112
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/stale-context.d.ts.map +1 -1
- package/dist/core/extensions/storage.d.ts.map +1 -1
- package/dist/core/extensions/storage.js.map +1 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/failure-corpus.d.ts.map +1 -1
- package/dist/core/failure-corpus.js +2 -5
- package/dist/core/failure-corpus.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +27 -33
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/foreground-recovery-controller.d.ts.map +1 -1
- package/dist/core/foreground-recovery-controller.js +0 -4
- package/dist/core/foreground-recovery-controller.js.map +1 -1
- package/dist/core/gateways/channel-provider.d.ts.map +1 -1
- package/dist/core/gateways/channel-provider.js +7 -5
- package/dist/core/gateways/channel-provider.js.map +1 -1
- package/dist/core/goal-loop-controller.d.ts.map +1 -1
- package/dist/core/goal-loop-controller.js +0 -1
- package/dist/core/goal-loop-controller.js.map +1 -1
- package/dist/core/goals/compact-goal-context.d.ts.map +1 -1
- package/dist/core/goals/compact-goal-context.js +2 -4
- package/dist/core/goals/compact-goal-context.js.map +1 -1
- package/dist/core/goals/goal-acceptance.d.ts.map +1 -1
- package/dist/core/goals/goal-acceptance.js.map +1 -1
- package/dist/core/goals/goal-auto-continue-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-auto-continue-controller.js +1 -3
- package/dist/core/goals/goal-auto-continue-controller.js.map +1 -1
- package/dist/core/goals/goal-continuation-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-controller.js.map +1 -1
- package/dist/core/goals/goal-continuation-defaults.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-prompt.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-prompt.js.map +1 -1
- package/dist/core/goals/goal-lifecycle.d.ts.map +1 -1
- package/dist/core/goals/goal-lifecycle.js.map +1 -1
- package/dist/core/goals/goal-record.d.ts.map +1 -1
- package/dist/core/goals/goal-record.js.map +1 -1
- package/dist/core/goals/goal-runtime-snapshot.d.ts.map +1 -1
- package/dist/core/goals/goal-runtime-snapshot.js.map +1 -1
- package/dist/core/goals/goal-session-controller.d.ts +15 -0
- package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-session-controller.js +27 -3
- package/dist/core/goals/goal-session-controller.js.map +1 -1
- package/dist/core/goals/goal-state.d.ts.map +1 -1
- package/dist/core/goals/goal-state.js +35 -51
- package/dist/core/goals/goal-state.js.map +1 -1
- package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
- package/dist/core/goals/goal-tool-core.js.map +1 -1
- package/dist/core/goals/natural-language-goal.d.ts +9 -0
- package/dist/core/goals/natural-language-goal.d.ts.map +1 -0
- package/dist/core/goals/natural-language-goal.js +23 -0
- package/dist/core/goals/natural-language-goal.js.map +1 -0
- package/dist/core/goals/session-goal-state.d.ts.map +1 -1
- package/dist/core/goals/session-goal-state.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/human-input-controller.d.ts.map +1 -1
- package/dist/core/human-input-controller.js +2 -3
- package/dist/core/human-input-controller.js.map +1 -1
- package/dist/core/human-input.d.ts.map +1 -1
- package/dist/core/human-input.js.map +1 -1
- package/dist/core/improvement-loop.d.ts.map +1 -1
- package/dist/core/improvement-loop.js +11 -11
- package/dist/core/improvement-loop.js.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/install-telemetry.d.ts.map +1 -1
- package/dist/core/install-telemetry.js.map +1 -1
- package/dist/core/isolated-text-completion.d.ts +17 -0
- package/dist/core/isolated-text-completion.d.ts.map +1 -0
- package/dist/core/isolated-text-completion.js +15 -0
- package/dist/core/isolated-text-completion.js.map +1 -0
- package/dist/core/keybindings.d.ts +47 -2
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +12 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/learning/learning-audit.d.ts.map +1 -1
- package/dist/core/learning/learning-audit.js.map +1 -1
- package/dist/core/learning/learning-gate.d.ts.map +1 -1
- package/dist/core/learning/learning-gate.js.map +1 -1
- package/dist/core/learning/observation-store.d.ts.map +1 -1
- package/dist/core/learning/observation-store.js +0 -2
- package/dist/core/learning/observation-store.js.map +1 -1
- package/dist/core/learning/reflection-engine.d.ts +1 -1
- package/dist/core/learning/reflection-engine.d.ts.map +1 -1
- package/dist/core/learning/reflection-engine.js +3 -0
- package/dist/core/learning/reflection-engine.js.map +1 -1
- package/dist/core/learning/reflection-turn-analysis.d.ts +20 -0
- package/dist/core/learning/reflection-turn-analysis.d.ts.map +1 -0
- package/dist/core/learning/reflection-turn-analysis.js +136 -0
- package/dist/core/learning/reflection-turn-analysis.js.map +1 -0
- package/dist/core/learning/session-learning-decision.d.ts.map +1 -1
- package/dist/core/learning/session-learning-decision.js.map +1 -1
- package/dist/core/learning/skill-curator.d.ts.map +1 -1
- package/dist/core/learning/skill-curator.js +0 -3
- package/dist/core/learning/skill-curator.js.map +1 -1
- package/dist/core/local-runtime-controller.d.ts +39 -0
- package/dist/core/local-runtime-controller.d.ts.map +1 -1
- package/dist/core/local-runtime-controller.js +41 -62
- package/dist/core/local-runtime-controller.js.map +1 -1
- package/dist/core/memory/effectiveness-tracker.d.ts.map +1 -1
- package/dist/core/memory/effectiveness-tracker.js +4 -2
- package/dist/core/memory/effectiveness-tracker.js.map +1 -1
- package/dist/core/memory/memory-manager.d.ts.map +1 -1
- package/dist/core/memory/memory-manager.js +7 -7
- package/dist/core/memory/memory-manager.js.map +1 -1
- package/dist/core/memory/memory-provider.d.ts.map +1 -1
- package/dist/core/memory/providers/file-store.d.ts +7 -0
- package/dist/core/memory/providers/file-store.d.ts.map +1 -1
- package/dist/core/memory/providers/file-store.js +48 -13
- package/dist/core/memory/providers/file-store.js.map +1 -1
- package/dist/core/memory/providers/transcript-recall-worker-protocol.d.ts +47 -0
- package/dist/core/memory/providers/transcript-recall-worker-protocol.d.ts.map +1 -0
- package/dist/core/memory/providers/transcript-recall-worker-protocol.js +50 -0
- package/dist/core/memory/providers/transcript-recall-worker-protocol.js.map +1 -0
- package/dist/core/memory/providers/transcript-recall-worker.d.ts +2 -0
- package/dist/core/memory/providers/transcript-recall-worker.d.ts.map +1 -0
- package/dist/core/memory/providers/transcript-recall-worker.js +143 -0
- package/dist/core/memory/providers/transcript-recall-worker.js.map +1 -0
- package/dist/core/memory/providers/transcript-recall.d.ts +24 -13
- package/dist/core/memory/providers/transcript-recall.d.ts.map +1 -1
- package/dist/core/memory/providers/transcript-recall.js +143 -141
- package/dist/core/memory/providers/transcript-recall.js.map +1 -1
- package/dist/core/memory/providers/user-memory-archive.d.ts +39 -0
- package/dist/core/memory/providers/user-memory-archive.d.ts.map +1 -0
- package/dist/core/memory/providers/user-memory-archive.js +258 -0
- package/dist/core/memory/providers/user-memory-archive.js.map +1 -0
- package/dist/core/memory/transcript-index.d.ts.map +1 -1
- package/dist/core/memory/transcript-index.js +1 -1
- package/dist/core/memory/transcript-index.js.map +1 -1
- package/dist/core/memory-controller.d.ts +9 -0
- package/dist/core/memory-controller.d.ts.map +1 -1
- package/dist/core/memory-controller.js +57 -16
- package/dist/core/memory-controller.js.map +1 -1
- package/dist/core/model-capability.d.ts.map +1 -1
- package/dist/core/model-capability.js.map +1 -1
- package/dist/core/model-output-json.d.ts +10 -0
- package/dist/core/model-output-json.d.ts.map +1 -0
- package/dist/core/model-output-json.js +43 -0
- package/dist/core/model-output-json.js.map +1 -0
- package/dist/core/model-registry.d.ts +8 -8
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +29 -52
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-router/config-diagnostics.d.ts.map +1 -1
- package/dist/core/model-router/config-diagnostics.js.map +1 -1
- package/dist/core/model-router/executor-route.d.ts.map +1 -1
- package/dist/core/model-router/executor-route.js.map +1 -1
- package/dist/core/model-router/fitness-gate.d.ts.map +1 -1
- package/dist/core/model-router/fitness-gate.js.map +1 -1
- package/dist/core/model-router/intent-classifier.d.ts.map +1 -1
- package/dist/core/model-router/route-judge.d.ts.map +1 -1
- package/dist/core/model-router/route-judge.js +18 -36
- package/dist/core/model-router/route-judge.js.map +1 -1
- package/dist/core/model-router/session-buffer.d.ts.map +1 -1
- package/dist/core/model-router/session-buffer.js.map +1 -1
- package/dist/core/model-router/status.d.ts.map +1 -1
- package/dist/core/model-router/status.js.map +1 -1
- package/dist/core/model-router/tool-escalation.d.ts.map +1 -1
- package/dist/core/model-router/tool-escalation.js.map +1 -1
- package/dist/core/model-router-controller.d.ts +1 -0
- package/dist/core/model-router-controller.d.ts.map +1 -1
- package/dist/core/model-router-controller.js +25 -56
- package/dist/core/model-router-controller.js.map +1 -1
- package/dist/core/model-selection-controller.d.ts +10 -0
- package/dist/core/model-selection-controller.d.ts.map +1 -1
- package/dist/core/model-selection-controller.js +0 -1
- package/dist/core/model-selection-controller.js.map +1 -1
- package/dist/core/model-tool-protocol.d.ts.map +1 -1
- package/dist/core/model-tool-protocol.js.map +1 -1
- package/dist/core/models/adaptation-store.d.ts.map +1 -1
- package/dist/core/models/adaptation-store.js +0 -1
- package/dist/core/models/adaptation-store.js.map +1 -1
- package/dist/core/models/context-sizing.d.ts.map +1 -1
- package/dist/core/models/context-sizing.js.map +1 -1
- package/dist/core/models/default-model-suggestions.d.ts.map +1 -1
- package/dist/core/models/default-model-suggestions.js.map +1 -1
- package/dist/core/models/fitness-store.d.ts.map +1 -1
- package/dist/core/models/fitness-store.js +0 -1
- package/dist/core/models/fitness-store.js.map +1 -1
- package/dist/core/models/host-state-store.d.ts.map +1 -1
- package/dist/core/models/host-state-store.js +1 -6
- package/dist/core/models/host-state-store.js.map +1 -1
- package/dist/core/models/llamacpp-runtime.d.ts +4 -19
- package/dist/core/models/llamacpp-runtime.d.ts.map +1 -1
- package/dist/core/models/llamacpp-runtime.js +32 -136
- package/dist/core/models/llamacpp-runtime.js.map +1 -1
- package/dist/core/models/local-registration.d.ts.map +1 -1
- package/dist/core/models/local-registration.js +82 -115
- package/dist/core/models/local-registration.js.map +1 -1
- package/dist/core/models/local-runtime.d.ts +12 -18
- package/dist/core/models/local-runtime.d.ts.map +1 -1
- package/dist/core/models/local-runtime.js +60 -204
- package/dist/core/models/local-runtime.js.map +1 -1
- package/dist/core/models/model-endpoint.d.ts.map +1 -1
- package/dist/core/models/model-endpoint.js.map +1 -1
- package/dist/core/models/model-ref.d.ts.map +1 -1
- package/dist/core/models/model-ref.js.map +1 -1
- package/dist/core/models/needle-runtime.d.ts +7 -3
- package/dist/core/models/needle-runtime.d.ts.map +1 -1
- package/dist/core/models/needle-runtime.js +16 -92
- package/dist/core/models/needle-runtime.js.map +1 -1
- package/dist/core/models/perf-profile.d.ts +1 -1
- package/dist/core/models/perf-profile.d.ts.map +1 -1
- package/dist/core/models/perf-profile.js +6 -13
- package/dist/core/models/perf-profile.js.map +1 -1
- package/dist/core/models/prism-llamacpp-lifecycle.d.ts.map +1 -1
- package/dist/core/models/prism-llamacpp-lifecycle.js.map +1 -1
- package/dist/core/models/runtime-arbiter.d.ts.map +1 -1
- package/dist/core/models/runtime-arbiter.js +3 -15
- package/dist/core/models/runtime-arbiter.js.map +1 -1
- package/dist/core/models/runtime-process.d.ts +100 -0
- package/dist/core/models/runtime-process.d.ts.map +1 -0
- package/dist/core/models/runtime-process.js +183 -0
- package/dist/core/models/runtime-process.js.map +1 -0
- package/dist/core/orchestration/agent-resume.d.ts.map +1 -1
- package/dist/core/orchestration/agent-resume.js.map +1 -1
- package/dist/core/orchestration/attempt-usage.d.ts.map +1 -1
- package/dist/core/orchestration/attempt-usage.js.map +1 -1
- package/dist/core/orchestration/capability-gateway.d.ts.map +1 -1
- package/dist/core/orchestration/capability-gateway.js +0 -14
- package/dist/core/orchestration/capability-gateway.js.map +1 -1
- package/dist/core/orchestration/contracts.d.ts.map +1 -1
- package/dist/core/orchestration/contracts.js.map +1 -1
- package/dist/core/orchestration/delegation-ledger.d.ts.map +1 -1
- package/dist/core/orchestration/delegation-ledger.js +0 -2
- package/dist/core/orchestration/delegation-ledger.js.map +1 -1
- package/dist/core/orchestration/event-store.d.ts.map +1 -1
- package/dist/core/orchestration/event-store.js +1 -14
- package/dist/core/orchestration/event-store.js.map +1 -1
- package/dist/core/orchestration/lane-tool-manifests.d.ts.map +1 -1
- package/dist/core/orchestration/lane-tool-manifests.js.map +1 -1
- package/dist/core/orchestration/model-binding.d.ts.map +1 -1
- package/dist/core/orchestration/model-binding.js.map +1 -1
- package/dist/core/orchestration/policy-compiler.d.ts.map +1 -1
- package/dist/core/orchestration/policy-compiler.js +0 -3
- package/dist/core/orchestration/policy-compiler.js.map +1 -1
- package/dist/core/orchestration/policy-gate.d.ts.map +1 -1
- package/dist/core/orchestration/policy-gate.js +0 -2
- package/dist/core/orchestration/policy-gate.js.map +1 -1
- package/dist/core/orchestration/profile-registry.d.ts.map +1 -1
- package/dist/core/orchestration/profile-registry.js +1 -1
- package/dist/core/orchestration/profile-registry.js.map +1 -1
- package/dist/core/orchestration/profile-store.d.ts.map +1 -1
- package/dist/core/orchestration/profile-store.js +0 -3
- package/dist/core/orchestration/profile-store.js.map +1 -1
- package/dist/core/orchestration/risk-budget.d.ts.map +1 -1
- package/dist/core/orchestration/risk-budget.js.map +1 -1
- package/dist/core/orchestration/task-runtime.d.ts +1 -0
- package/dist/core/orchestration/task-runtime.d.ts.map +1 -1
- package/dist/core/orchestration/task-runtime.js +27 -42
- package/dist/core/orchestration/task-runtime.js.map +1 -1
- package/dist/core/orchestration/work-state-projection.d.ts.map +1 -1
- package/dist/core/orchestration/work-state-projection.js.map +1 -1
- package/dist/core/orchestration/worker-execution-contract.d.ts.map +1 -1
- package/dist/core/orchestration/worker-execution-contract.js.map +1 -1
- package/dist/core/orchestration/worker-result-adapter.d.ts.map +1 -1
- package/dist/core/orchestration/worker-result-adapter.js.map +1 -1
- package/dist/core/output-guard.d.ts.map +1 -1
- package/dist/core/output-guard.js.map +1 -1
- package/dist/core/package-manager.d.ts +3 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +88 -353
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/process-identity.d.ts.map +1 -1
- package/dist/core/process-identity.js.map +1 -1
- package/dist/core/process-liveness.d.ts +3 -0
- package/dist/core/process-liveness.d.ts.map +1 -0
- package/dist/core/process-liveness.js +17 -0
- package/dist/core/process-liveness.js.map +1 -0
- package/dist/core/process-matrix/codes.d.ts.map +1 -1
- package/dist/core/process-matrix/resume-launcher.d.ts.map +1 -1
- package/dist/core/process-matrix/resume-launcher.js.map +1 -1
- package/dist/core/process-matrix/runtime.d.ts.map +1 -1
- package/dist/core/process-matrix/runtime.js.map +1 -1
- package/dist/core/process-matrix/store.d.ts.map +1 -1
- package/dist/core/process-matrix/store.js.map +1 -1
- package/dist/core/process-matrix/supervisor.d.ts.map +1 -1
- package/dist/core/process-matrix/supervisor.js.map +1 -1
- package/dist/core/profile-filter-controller.d.ts.map +1 -1
- package/dist/core/profile-filter-controller.js +7 -8
- package/dist/core/profile-filter-controller.js.map +1 -1
- package/dist/core/profile-registry.d.ts.map +1 -1
- package/dist/core/profile-registry.js +1 -2
- package/dist/core/profile-registry.js.map +1 -1
- package/dist/core/profile-resource-selection.d.ts.map +1 -1
- package/dist/core/profile-resource-selection.js +18 -59
- package/dist/core/profile-resource-selection.js.map +1 -1
- package/dist/core/prompt-markup.d.ts +3 -0
- package/dist/core/prompt-markup.d.ts.map +1 -0
- package/dist/core/prompt-markup.js +7 -0
- package/dist/core/prompt-markup.js.map +1 -0
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +13 -39
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/python-runtime.d.ts.map +1 -1
- package/dist/core/python-runtime.js.map +1 -1
- package/dist/core/reflection-controller.d.ts +22 -1
- package/dist/core/reflection-controller.d.ts.map +1 -1
- package/dist/core/reflection-controller.js +143 -25
- package/dist/core/reflection-controller.js.map +1 -1
- package/dist/core/reload-blockers.d.ts +2 -1
- package/dist/core/reload-blockers.d.ts.map +1 -1
- package/dist/core/reload-blockers.js +4 -14
- package/dist/core/reload-blockers.js.map +1 -1
- package/dist/core/request-auth.d.ts.map +1 -1
- package/dist/core/request-auth.js.map +1 -1
- package/dist/core/research/automata-provider.d.ts.map +1 -1
- package/dist/core/research/automata-provider.js.map +1 -1
- package/dist/core/research/evidence-bundle.d.ts.map +1 -1
- package/dist/core/research/evidence-bundle.js.map +1 -1
- package/dist/core/research/lane-model-resolver.d.ts.map +1 -1
- package/dist/core/research/lane-model-resolver.js +0 -1
- package/dist/core/research/lane-model-resolver.js.map +1 -1
- package/dist/core/research/model-fitness-controller.d.ts.map +1 -1
- package/dist/core/research/model-fitness-controller.js +17 -33
- package/dist/core/research/model-fitness-controller.js.map +1 -1
- package/dist/core/research/model-fitness.d.ts.map +1 -1
- package/dist/core/research/model-fitness.js +4 -25
- package/dist/core/research/model-fitness.js.map +1 -1
- package/dist/core/research/research-gate.d.ts.map +1 -1
- package/dist/core/research/research-gate.js.map +1 -1
- package/dist/core/research/research-lane-controller.d.ts.map +1 -1
- package/dist/core/research/research-lane-controller.js +5 -10
- package/dist/core/research/research-lane-controller.js.map +1 -1
- package/dist/core/research/research-runner.d.ts +2 -4
- package/dist/core/research/research-runner.d.ts.map +1 -1
- package/dist/core/research/research-runner.js +17 -48
- package/dist/core/research/research-runner.js.map +1 -1
- package/dist/core/research/session-evidence-bundle.d.ts.map +1 -1
- package/dist/core/research/session-evidence-bundle.js.map +1 -1
- package/dist/core/research/workspace-collector.d.ts.map +1 -1
- package/dist/core/research/workspace-collector.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-ignore.d.ts +6 -0
- package/dist/core/resource-ignore.d.ts.map +1 -0
- package/dist/core/resource-ignore.js +44 -0
- package/dist/core/resource-ignore.js.map +1 -0
- package/dist/core/resource-loader.d.ts +0 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +52 -187
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/resource-profile-blocks.d.ts +3 -1
- package/dist/core/resource-profile-blocks.d.ts.map +1 -1
- package/dist/core/resource-profile-blocks.js +8 -5
- package/dist/core/resource-profile-blocks.js.map +1 -1
- package/dist/core/resource-profile-equality.d.ts.map +1 -1
- package/dist/core/resource-profile-equality.js.map +1 -1
- package/dist/core/resource-traversal.d.ts +43 -0
- package/dist/core/resource-traversal.d.ts.map +1 -0
- package/dist/core/resource-traversal.js +84 -0
- package/dist/core/resource-traversal.js.map +1 -0
- package/dist/core/risk-classifier.d.ts.map +1 -1
- package/dist/core/risk-classifier.js.map +1 -1
- package/dist/core/runtime-builder.d.ts +4 -1
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +25 -50
- package/dist/core/runtime-builder.js.map +1 -1
- package/dist/core/scout-controller.d.ts.map +1 -1
- package/dist/core/scout-controller.js +0 -1
- package/dist/core/scout-controller.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/secrets/credential-exposure-guard.d.ts.map +1 -1
- package/dist/core/secrets/credential-exposure-guard.js +70 -44
- package/dist/core/secrets/credential-exposure-guard.js.map +1 -1
- package/dist/core/secrets/secret-dotenv.d.ts.map +1 -1
- package/dist/core/secrets/secret-dotenv.js +0 -1
- package/dist/core/secrets/secret-dotenv.js.map +1 -1
- package/dist/core/secrets/secret-vault-format.d.ts.map +1 -1
- package/dist/core/secrets/secret-vault-format.js +0 -1
- package/dist/core/secrets/secret-vault-format.js.map +1 -1
- package/dist/core/secrets/secret-vault.d.ts.map +1 -1
- package/dist/core/secrets/secret-vault.js +2 -10
- package/dist/core/secrets/secret-vault.js.map +1 -1
- package/dist/core/security/secret-text.d.ts.map +1 -1
- package/dist/core/security/secret-text.js.map +1 -1
- package/dist/core/security/untrusted-boundary.d.ts.map +1 -1
- package/dist/core/security/untrusted-boundary.js.map +1 -1
- package/dist/core/session-analytics.d.ts.map +1 -1
- package/dist/core/session-analytics.js +18 -50
- package/dist/core/session-analytics.js.map +1 -1
- package/dist/core/session-artifact-bundle.d.ts.map +1 -1
- package/dist/core/session-artifact-bundle.js.map +1 -1
- package/dist/core/session-cwd.d.ts.map +1 -1
- package/dist/core/session-cwd.js +0 -1
- package/dist/core/session-cwd.js.map +1 -1
- package/dist/core/session-entry-index.d.ts +8 -0
- package/dist/core/session-entry-index.d.ts.map +1 -0
- package/dist/core/session-entry-index.js +16 -0
- package/dist/core/session-entry-index.js.map +1 -0
- package/dist/core/session-image-store.d.ts.map +1 -1
- package/dist/core/session-image-store.js +0 -3
- package/dist/core/session-image-store.js.map +1 -1
- package/dist/core/session-jsonl-writer.d.ts +3 -0
- package/dist/core/session-jsonl-writer.d.ts.map +1 -0
- package/dist/core/session-jsonl-writer.js +38 -0
- package/dist/core/session-jsonl-writer.js.map +1 -0
- package/dist/core/session-manager-factory.d.ts.map +1 -1
- package/dist/core/session-manager-factory.js.map +1 -1
- package/dist/core/session-role.d.ts.map +1 -1
- package/dist/core/session-role.js.map +1 -1
- package/dist/core/session-snapshot.d.ts.map +1 -1
- package/dist/core/session-snapshot.js.map +1 -1
- package/dist/core/session-supervision-runtime.d.ts.map +1 -1
- package/dist/core/session-supervision-runtime.js +1 -4
- package/dist/core/session-supervision-runtime.js.map +1 -1
- package/dist/core/session-tree-navigator.d.ts.map +1 -1
- package/dist/core/session-tree-navigator.js +0 -1
- package/dist/core/session-tree-navigator.js.map +1 -1
- package/dist/core/settings-manager.d.ts +2 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +64 -162
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skill-block.d.mts +8 -0
- package/dist/core/skill-block.mjs +52 -0
- package/dist/core/skill-discovery.d.ts +5 -0
- package/dist/core/skill-discovery.d.ts.map +1 -0
- package/dist/core/skill-discovery.js +34 -0
- package/dist/core/skill-discovery.js.map +1 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +23 -159
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/source-info.d.ts.map +1 -1
- package/dist/core/source-info.js.map +1 -1
- package/dist/core/spawned-usage.d.ts +21 -0
- package/dist/core/spawned-usage.d.ts.map +1 -0
- package/dist/core/spawned-usage.js +29 -0
- package/dist/core/spawned-usage.js.map +1 -0
- package/dist/core/system-prompt-builder.d.ts +4 -0
- package/dist/core/system-prompt-builder.d.ts.map +1 -1
- package/dist/core/system-prompt-builder.js +15 -8
- package/dist/core/system-prompt-builder.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +52 -35
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tasks/session-task-state.d.ts.map +1 -1
- package/dist/core/tasks/session-task-state.js.map +1 -1
- package/dist/core/tasks/task-command.d.ts.map +1 -1
- package/dist/core/tasks/task-command.js.map +1 -1
- package/dist/core/tasks/task-contract-monitor.d.ts.map +1 -1
- package/dist/core/tasks/task-contract-monitor.js.map +1 -1
- package/dist/core/tasks/task-projection.d.ts.map +1 -1
- package/dist/core/tasks/task-projection.js.map +1 -1
- package/dist/core/tasks/task-state.d.ts.map +1 -1
- package/dist/core/tasks/task-state.js.map +1 -1
- package/dist/core/text-preview.d.ts +4 -0
- package/dist/core/text-preview.d.ts.map +1 -0
- package/dist/core/text-preview.js +33 -0
- package/dist/core/text-preview.js.map +1 -0
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tool-capability-policy.d.ts.map +1 -1
- package/dist/core/tool-capability-policy.js.map +1 -1
- package/dist/core/tool-gate-controller.d.ts.map +1 -1
- package/dist/core/tool-gate-controller.js +86 -87
- package/dist/core/tool-gate-controller.js.map +1 -1
- package/dist/core/tool-protocol-controller.d.ts +4 -1
- package/dist/core/tool-protocol-controller.d.ts.map +1 -1
- package/dist/core/tool-protocol-controller.js +19 -23
- package/dist/core/tool-protocol-controller.js.map +1 -1
- package/dist/core/tool-recovery-log-records.d.ts.map +1 -1
- package/dist/core/tool-recovery-log-records.js.map +1 -1
- package/dist/core/tool-recovery-log-worker.d.ts.map +1 -1
- package/dist/core/tool-recovery-log-worker.js.map +1 -1
- package/dist/core/tool-recovery-logger.d.ts.map +1 -1
- package/dist/core/tool-recovery-logger.js +12 -24
- package/dist/core/tool-recovery-logger.js.map +1 -1
- package/dist/core/tool-recovery-stats.d.ts.map +1 -1
- package/dist/core/tool-recovery-stats.js +16 -22
- package/dist/core/tool-recovery-stats.js.map +1 -1
- package/dist/core/tool-repair-health.d.ts.map +1 -1
- package/dist/core/tool-repair-health.js.map +1 -1
- package/dist/core/tool-repair-settings.d.ts.map +1 -1
- package/dist/core/tool-repair-settings.js.map +1 -1
- package/dist/core/tool-selection/expected-utility.d.ts.map +1 -1
- package/dist/core/tool-selection/expected-utility.js.map +1 -1
- package/dist/core/tool-selection/promotion.d.ts.map +1 -1
- package/dist/core/tool-selection/promotion.js.map +1 -1
- package/dist/core/tool-selection/tool-performance-store.d.ts +2 -0
- package/dist/core/tool-selection/tool-performance-store.d.ts.map +1 -1
- package/dist/core/tool-selection/tool-performance-store.js +49 -7
- package/dist/core/tool-selection/tool-performance-store.js.map +1 -1
- package/dist/core/tool-selection/tool-phase-timing.d.ts +19 -0
- package/dist/core/tool-selection/tool-phase-timing.d.ts.map +1 -0
- package/dist/core/tool-selection/tool-phase-timing.js +63 -0
- package/dist/core/tool-selection/tool-phase-timing.js.map +1 -0
- package/dist/core/tool-selection/tool-selection-controller.d.ts +2 -5
- package/dist/core/tool-selection/tool-selection-controller.d.ts.map +1 -1
- package/dist/core/tool-selection/tool-selection-controller.js +50 -30
- package/dist/core/tool-selection/tool-selection-controller.js.map +1 -1
- package/dist/core/toolkit/reflex-interpreter.d.ts +16 -0
- package/dist/core/toolkit/reflex-interpreter.d.ts.map +1 -1
- package/dist/core/toolkit/reflex-interpreter.js +21 -0
- package/dist/core/toolkit/reflex-interpreter.js.map +1 -1
- package/dist/core/toolkit/script-registry.d.ts.map +1 -1
- package/dist/core/toolkit/script-registry.js.map +1 -1
- package/dist/core/toolkit/script-runner.d.ts.map +1 -1
- package/dist/core/toolkit/script-runner.js.map +1 -1
- package/dist/core/tools/artifact-retrieve.d.ts.map +1 -1
- package/dist/core/tools/artifact-retrieve.js.map +1 -1
- package/dist/core/tools/ask-question.d.ts +2 -3
- package/dist/core/tools/ask-question.d.ts.map +1 -1
- package/dist/core/tools/ask-question.js +14 -40
- package/dist/core/tools/ask-question.js.map +1 -1
- package/dist/core/tools/bash.d.ts +2 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +83 -30
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/context-scout.d.ts.map +1 -1
- package/dist/core/tools/context-scout.js.map +1 -1
- package/dist/core/tools/delegate-status.d.ts.map +1 -1
- package/dist/core/tools/delegate-status.js +9 -7
- package/dist/core/tools/delegate-status.js.map +1 -1
- package/dist/core/tools/delegate.d.ts.map +1 -1
- package/dist/core/tools/delegate.js +6 -6
- package/dist/core/tools/delegate.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/extensionify.d.ts.map +1 -1
- package/dist/core/tools/extensionify.js.map +1 -1
- package/dist/core/tools/fff-search-backend.d.ts +19 -0
- package/dist/core/tools/fff-search-backend.d.ts.map +1 -1
- package/dist/core/tools/fff-search-backend.js +28 -2
- package/dist/core/tools/fff-search-backend.js.map +1 -1
- package/dist/core/tools/file-encoding-policy.d.ts.map +1 -1
- package/dist/core/tools/file-encoding-policy.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/find.d.ts +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +44 -108
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/git-filter.d.ts.map +1 -1
- package/dist/core/tools/git-filter.js.map +1 -1
- package/dist/core/tools/goal.d.ts.map +1 -1
- package/dist/core/tools/goal.js +7 -7
- package/dist/core/tools/goal.js.map +1 -1
- package/dist/core/tools/grep.d.ts +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +42 -102
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +20 -36
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/model-fitness.d.ts.map +1 -1
- package/dist/core/tools/model-fitness.js.map +1 -1
- package/dist/core/tools/orchestration-panel.d.ts +5 -0
- package/dist/core/tools/orchestration-panel.d.ts.map +1 -1
- package/dist/core/tools/orchestration-panel.js +5 -5
- package/dist/core/tools/orchestration-panel.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +2 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +24 -36
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/path-utils.d.ts.map +1 -1
- package/dist/core/tools/path-utils.js.map +1 -1
- package/dist/core/tools/persistent-process-coordinator.d.ts +31 -0
- package/dist/core/tools/persistent-process-coordinator.d.ts.map +1 -0
- package/dist/core/tools/persistent-process-coordinator.js +123 -0
- package/dist/core/tools/persistent-process-coordinator.js.map +1 -0
- package/dist/core/tools/python.d.ts.map +1 -1
- package/dist/core/tools/python.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +14 -13
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +29 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +31 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/run-process.d.ts.map +1 -1
- package/dist/core/tools/run-process.js.map +1 -1
- package/dist/core/tools/run-toolkit-script.d.ts.map +1 -1
- package/dist/core/tools/run-toolkit-script.js.map +1 -1
- package/dist/core/tools/search-command-guard.d.ts +10 -0
- package/dist/core/tools/search-command-guard.d.ts.map +1 -1
- package/dist/core/tools/search-command-guard.js +118 -31
- package/dist/core/tools/search-command-guard.js.map +1 -1
- package/dist/core/tools/search-router.d.ts.map +1 -1
- package/dist/core/tools/search-router.js.map +1 -1
- package/dist/core/tools/search-tool-runtime.d.ts +19 -0
- package/dist/core/tools/search-tool-runtime.d.ts.map +1 -0
- package/dist/core/tools/search-tool-runtime.js +12 -0
- package/dist/core/tools/search-tool-runtime.js.map +1 -0
- package/dist/core/tools/secret-store.d.ts.map +1 -1
- package/dist/core/tools/secret-store.js.map +1 -1
- package/dist/core/tools/shell-command-parser.d.ts.map +1 -1
- package/dist/core/tools/shell-command-parser.js.map +1 -1
- package/dist/core/tools/shell-contract-router.d.ts.map +1 -1
- package/dist/core/tools/shell-contract-router.js +4 -1
- package/dist/core/tools/shell-contract-router.js.map +1 -1
- package/dist/core/tools/shell-execution-session.d.ts +4 -0
- package/dist/core/tools/shell-execution-session.d.ts.map +1 -0
- package/dist/core/tools/shell-execution-session.js +11 -0
- package/dist/core/tools/shell-execution-session.js.map +1 -0
- package/dist/core/tools/shell-output-projection.d.ts +49 -0
- package/dist/core/tools/shell-output-projection.d.ts.map +1 -0
- package/dist/core/tools/shell-output-projection.js +381 -0
- package/dist/core/tools/shell-output-projection.js.map +1 -0
- package/dist/core/tools/shell-session.d.ts +2 -13
- package/dist/core/tools/shell-session.d.ts.map +1 -1
- package/dist/core/tools/shell-session.js +36 -136
- package/dist/core/tools/shell-session.js.map +1 -1
- package/dist/core/tools/skill-audit.d.ts.map +1 -1
- package/dist/core/tools/skill-audit.js.map +1 -1
- package/dist/core/tools/skillify.d.ts.map +1 -1
- package/dist/core/tools/skillify.js.map +1 -1
- package/dist/core/tools/task-steps.d.ts +8 -8
- package/dist/core/tools/task-steps.d.ts.map +1 -1
- package/dist/core/tools/task-steps.js +17 -18
- package/dist/core/tools/task-steps.js.map +1 -1
- package/dist/core/tools/tmux-dispatch.d.ts.map +1 -1
- package/dist/core/tools/tmux-dispatch.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/tool-task.d.ts +23 -0
- package/dist/core/tools/tool-task.d.ts.map +1 -0
- package/dist/core/tools/tool-task.js +93 -0
- package/dist/core/tools/tool-task.js.map +1 -0
- package/dist/core/tools/windows-shell-engine.d.ts +17 -11
- package/dist/core/tools/windows-shell-engine.d.ts.map +1 -1
- package/dist/core/tools/windows-shell-engine.js +339 -117
- package/dist/core/tools/windows-shell-engine.js.map +1 -1
- package/dist/core/tools/windows-shell-state.d.ts.map +1 -1
- package/dist/core/tools/windows-shell-state.js.map +1 -1
- package/dist/core/tools/worktree-sync.d.ts.map +1 -1
- package/dist/core/tools/worktree-sync.js +8 -12
- package/dist/core/tools/worktree-sync.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +0 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +7 -40
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/util/atomic-file.d.ts +19 -0
- package/dist/core/util/atomic-file.d.ts.map +1 -1
- package/dist/core/util/atomic-file.js +50 -15
- package/dist/core/util/atomic-file.js.map +1 -1
- package/dist/core/util/bounded-file.d.ts.map +1 -1
- package/dist/core/util/bounded-file.js.map +1 -1
- package/dist/core/util/bounded-jsonl.d.ts.map +1 -1
- package/dist/core/util/bounded-jsonl.js +2 -9
- package/dist/core/util/bounded-jsonl.js.map +1 -1
- package/dist/core/util/bounded-value.d.ts.map +1 -1
- package/dist/core/util/bounded-value.js.map +1 -1
- package/dist/core/util/json-size.d.ts +3 -0
- package/dist/core/util/json-size.d.ts.map +1 -0
- package/dist/core/util/json-size.js +95 -0
- package/dist/core/util/json-size.js.map +1 -0
- package/dist/core/util/minimatch-cache.d.ts.map +1 -1
- package/dist/core/util/minimatch-cache.js.map +1 -1
- package/dist/core/util/value-guards.d.ts.map +1 -1
- package/dist/core/util/value-guards.js.map +1 -1
- package/dist/core/worktree-sync/codes.d.ts.map +1 -1
- package/dist/core/worktree-sync/git-engine.d.ts.map +1 -1
- package/dist/core/worktree-sync/git-engine.js +20 -36
- package/dist/core/worktree-sync/git-engine.js.map +1 -1
- package/dist/core/worktree-sync/lane-gate.d.ts.map +1 -1
- package/dist/core/worktree-sync/lane-gate.js +1 -4
- package/dist/core/worktree-sync/lane-gate.js.map +1 -1
- package/dist/core/worktree-sync/runtime.d.ts.map +1 -1
- package/dist/core/worktree-sync/runtime.js.map +1 -1
- package/dist/core/worktree-sync/store.d.ts.map +1 -1
- package/dist/core/worktree-sync/store.js.map +1 -1
- package/dist/core/worktree-sync/watcher.d.ts.map +1 -1
- package/dist/core/worktree-sync/watcher.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +10 -32
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +6 -19
- package/dist/migrations.js.map +1 -1
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.d.ts +3 -0
- package/dist/modes/interactive/auth-dialogs-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.js +96 -132
- package/dist/modes/interactive/auth-dialogs-controller.js.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.d.ts +1 -31
- package/dist/modes/interactive/auto-learn-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.js +86 -307
- package/dist/modes/interactive/auto-learn-controller.js.map +1 -1
- package/dist/modes/interactive/autocomplete-provider.d.ts.map +1 -1
- package/dist/modes/interactive/autocomplete-provider.js.map +1 -1
- package/dist/modes/interactive/autonomy-commands.d.ts.map +1 -1
- package/dist/modes/interactive/autonomy-commands.js +2 -8
- package/dist/modes/interactive/autonomy-commands.js.map +1 -1
- package/dist/modes/interactive/clipboard-input.d.ts +5 -1
- package/dist/modes/interactive/clipboard-input.d.ts.map +1 -1
- package/dist/modes/interactive/clipboard-input.js +17 -0
- package/dist/modes/interactive/clipboard-input.js.map +1 -1
- package/dist/modes/interactive/compaction-queue.d.ts.map +1 -1
- package/dist/modes/interactive/compaction-queue.js +13 -18
- package/dist/modes/interactive/compaction-queue.js.map +1 -1
- package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -1
- package/dist/modes/interactive/components/activity-lane.js +6 -10
- package/dist/modes/interactive/components/activity-lane.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts +1 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js +10 -21
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +1 -6
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +4 -9
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +0 -3
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +3 -8
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +13 -35
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +3 -8
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +14 -36
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +20 -43
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js +0 -5
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +2 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +4 -8
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -6
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js +6 -8
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js +0 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
- package/dist/modes/interactive/components/expandable-markdown-message.d.ts +21 -0
- package/dist/modes/interactive/components/expandable-markdown-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/expandable-markdown-message.js +48 -0
- package/dist/modes/interactive/components/expandable-markdown-message.js.map +1 -0
- package/dist/modes/interactive/components/expandable-text.d.ts.map +1 -1
- package/dist/modes/interactive/components/expandable-text.js +0 -2
- package/dist/modes/interactive/components/expandable-text.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -9
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +2 -8
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +5 -20
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/fitness-role-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/fitness-role-selector.js +0 -1
- package/dist/modes/interactive/components/fitness-role-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -5
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +4 -10
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +2 -2
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +21 -44
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/model-suggestion-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-suggestion-selector.js +0 -1
- package/dist/modes/interactive/components/model-suggestion-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +16 -32
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/profile-resource-editor.d.ts +3 -4
- package/dist/modes/interactive/components/profile-resource-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/profile-resource-editor.js +34 -93
- package/dist/modes/interactive/components/profile-resource-editor.js.map +1 -1
- package/dist/modes/interactive/components/profile-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/profile-selector.js +0 -1
- package/dist/modes/interactive/components/profile-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +3 -4
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +34 -79
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/selector-list.d.ts +63 -0
- package/dist/modes/interactive/components/selector-list.d.ts.map +1 -0
- package/dist/modes/interactive/components/selector-list.js +186 -0
- package/dist/modes/interactive/components/selector-list.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +34 -59
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +40 -138
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts +2 -4
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +9 -28
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +3 -8
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +12 -40
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts +2 -5
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +11 -37
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +2 -4
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +9 -31
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +9 -28
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-group.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-group.js +2 -3
- package/dist/modes/interactive/components/tool-group.js.map +1 -1
- package/dist/modes/interactive/components/tool-panel-registry.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-panel-registry.js +5 -3
- package/dist/modes/interactive/components/tool-panel-registry.js.map +1 -1
- package/dist/modes/interactive/components/tool-title.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-title.js +0 -4
- package/dist/modes/interactive/components/tool-title.js.map +1 -1
- package/dist/modes/interactive/components/transcript-pager.d.ts +26 -0
- package/dist/modes/interactive/components/transcript-pager.d.ts.map +1 -0
- package/dist/modes/interactive/components/transcript-pager.js +81 -0
- package/dist/modes/interactive/components/transcript-pager.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +1 -12
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +42 -402
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/trust-selector.js +4 -16
- package/dist/modes/interactive/components/trust-selector.js.map +1 -1
- package/dist/modes/interactive/components/usage-action-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/usage-action-selector.js +2 -10
- package/dist/modes/interactive/components/usage-action-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +3 -6
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +0 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/config-backup.d.ts.map +1 -1
- package/dist/modes/interactive/config-backup.js.map +1 -1
- package/dist/modes/interactive/editor-overlay-host.d.ts.map +1 -1
- package/dist/modes/interactive/editor-overlay-host.js +0 -3
- package/dist/modes/interactive/editor-overlay-host.js.map +1 -1
- package/dist/modes/interactive/extension-ui-host.d.ts +2 -0
- package/dist/modes/interactive/extension-ui-host.d.ts.map +1 -1
- package/dist/modes/interactive/extension-ui-host.js +51 -72
- package/dist/modes/interactive/extension-ui-host.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +2 -15
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/history-reload-math.d.ts.map +1 -1
- package/dist/modes/interactive/history-reload-math.js.map +1 -1
- package/dist/modes/interactive/interactive-event-controller.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-event-controller.js +23 -16
- package/dist/modes/interactive/interactive-event-controller.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +13 -4
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +123 -204
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/interactive-selection-prompts.d.ts +20 -0
- package/dist/modes/interactive/interactive-selection-prompts.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-selection-prompts.js +43 -0
- package/dist/modes/interactive/interactive-selection-prompts.js.map +1 -0
- package/dist/modes/interactive/key-handlers.d.ts +2 -1
- package/dist/modes/interactive/key-handlers.d.ts.map +1 -1
- package/dist/modes/interactive/key-handlers.js +4 -2
- package/dist/modes/interactive/key-handlers.js.map +1 -1
- package/dist/modes/interactive/loaded-resources-view.d.ts.map +1 -1
- package/dist/modes/interactive/loaded-resources-view.js.map +1 -1
- package/dist/modes/interactive/local-model-commands.d.ts.map +1 -1
- package/dist/modes/interactive/local-model-commands.js +4 -9
- package/dist/modes/interactive/local-model-commands.js.map +1 -1
- package/dist/modes/interactive/model-fitness-presentation.d.ts +21 -0
- package/dist/modes/interactive/model-fitness-presentation.d.ts.map +1 -0
- package/dist/modes/interactive/model-fitness-presentation.js +13 -0
- package/dist/modes/interactive/model-fitness-presentation.js.map +1 -0
- package/dist/modes/interactive/profile-menu-controller.d.ts +2 -0
- package/dist/modes/interactive/profile-menu-controller.d.ts.map +1 -1
- package/dist/modes/interactive/profile-menu-controller.js +79 -171
- package/dist/modes/interactive/profile-menu-controller.js.map +1 -1
- package/dist/modes/interactive/report-commands.d.ts +2 -0
- package/dist/modes/interactive/report-commands.d.ts.map +1 -1
- package/dist/modes/interactive/report-commands.js +12 -6
- package/dist/modes/interactive/report-commands.js.map +1 -1
- package/dist/modes/interactive/resource-display.d.ts.map +1 -1
- package/dist/modes/interactive/resource-display.js.map +1 -1
- package/dist/modes/interactive/resource-shell-commands.d.ts.map +1 -1
- package/dist/modes/interactive/resource-shell-commands.js +6 -23
- package/dist/modes/interactive/resource-shell-commands.js.map +1 -1
- package/dist/modes/interactive/session-flow-commands.d.ts.map +1 -1
- package/dist/modes/interactive/session-flow-commands.js +21 -25
- package/dist/modes/interactive/session-flow-commands.js.map +1 -1
- package/dist/modes/interactive/session-io-commands.d.ts.map +1 -1
- package/dist/modes/interactive/session-io-commands.js.map +1 -1
- package/dist/modes/interactive/session-replacement-errors.d.ts.map +1 -1
- package/dist/modes/interactive/session-replacement-errors.js.map +1 -1
- package/dist/modes/interactive/settings-selector-flow.d.ts.map +1 -1
- package/dist/modes/interactive/settings-selector-flow.js.map +1 -1
- package/dist/modes/interactive/signal-lifecycle.d.ts.map +1 -1
- package/dist/modes/interactive/signal-lifecycle.js.map +1 -1
- package/dist/modes/interactive/startup-checks.d.ts.map +1 -1
- package/dist/modes/interactive/startup-checks.js +12 -8
- package/dist/modes/interactive/startup-checks.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +10 -76
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive/usage-commands.d.ts.map +1 -1
- package/dist/modes/interactive/usage-commands.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +5 -22
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/jsonl.d.ts.map +1 -1
- package/dist/modes/rpc/jsonl.js +1 -1
- package/dist/modes/rpc/jsonl.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +7 -8
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +5 -20
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/termination-signals.d.ts +4 -0
- package/dist/modes/termination-signals.d.ts.map +1 -0
- package/dist/modes/termination-signals.js +21 -0
- package/dist/modes/termination-signals.js.map +1 -0
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/ansi-colors.d.ts +5 -0
- package/dist/utils/ansi-colors.d.ts.map +1 -0
- package/dist/utils/ansi-colors.js +38 -0
- package/dist/utils/ansi-colors.js.map +1 -0
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js.map +1 -1
- package/dist/utils/changelog.d.ts.map +1 -1
- package/dist/utils/changelog.js.map +1 -1
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard-native.d.ts.map +1 -1
- package/dist/utils/clipboard-native.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/deprecation.d.ts.map +1 -1
- package/dist/utils/deprecation.js.map +1 -1
- package/dist/utils/exif-orientation.d.ts.map +1 -1
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/external-editor-command.d.ts.map +1 -1
- package/dist/utils/external-editor-command.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js.map +1 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +20 -28
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/highlight-js-languages.d.ts.map +1 -1
- package/dist/utils/html.d.ts.map +1 -1
- package/dist/utils/html.js.map +1 -1
- package/dist/utils/image-convert.d.ts.map +1 -1
- package/dist/utils/image-convert.js.map +1 -1
- package/dist/utils/image-resize-core.d.ts.map +1 -1
- package/dist/utils/image-resize-core.js.map +1 -1
- package/dist/utils/image-resize-worker.d.ts.map +1 -1
- package/dist/utils/image-resize-worker.js.map +1 -1
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js.map +1 -1
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/mime.d.ts.map +1 -1
- package/dist/utils/mime.js.map +1 -1
- package/dist/utils/open-browser.d.ts.map +1 -1
- package/dist/utils/open-browser.js.map +1 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/photon.d.ts.map +1 -1
- package/dist/utils/photon.js.map +1 -1
- package/dist/utils/pi-user-agent.d.ts.map +1 -1
- package/dist/utils/pi-user-agent.js.map +1 -1
- package/dist/utils/platform.d.ts.map +1 -1
- package/dist/utils/platform.js.map +1 -1
- package/dist/utils/process-memory.d.ts.map +1 -1
- package/dist/utils/process-memory.js.map +1 -1
- package/dist/utils/safe-write-stream.d.ts.map +1 -1
- package/dist/utils/safe-write-stream.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/sleep.d.ts.map +1 -1
- package/dist/utils/sleep.js +2 -15
- package/dist/utils/sleep.js.map +1 -1
- package/dist/utils/stdin-events.d.ts +8 -0
- package/dist/utils/stdin-events.d.ts.map +1 -0
- package/dist/utils/stdin-events.js +19 -0
- package/dist/utils/stdin-events.js.map +1 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js +20 -13
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/dist/utils/windows-self-update.d.ts.map +1 -1
- package/dist/utils/windows-self-update.js.map +1 -1
- package/dist/utils/work-directory.d.ts.map +1 -1
- package/dist/utils/work-directory.js.map +1 -1
- package/docs/compaction.md +11 -3
- package/docs/sessions.md +6 -0
- package/docs/settings.md +1 -1
- package/docs/windows.md +26 -1
- package/docs/work-directory.md +9 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +16 -16
- package/package.json +10 -10
- package/dist/utils/streaming-lines.d.ts +0 -20
- package/dist/utils/streaming-lines.d.ts.map +0 -1
- package/dist/utils/streaming-lines.js +0 -79
- package/dist/utils/streaming-lines.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-conversation-store.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-conversation-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { basename, dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport { convertToLlm } from \"@caupulican/pi-agent-core\";\nimport {\n\tassertValidSessionId,\n\ttype CompactionPreparation,\n\ttype CompactionResult,\n\tcreateDeterministicCompaction,\n\testimateContextTokens,\n\tprepareCompaction,\n\ttype SessionContext,\n\tSessionManager,\n} from \"@caupulican/pi-agent-core/node\";\nimport type { Message, Usage } from \"@caupulican/pi-ai\";\nimport { orchestrationSessionsDir, workerConversationSessionsDir } from \"../agent-paths.ts\";\nimport { sameAgentResumeIdentity } from \"../orchestration/agent-resume.ts\";\nimport { validateAttemptUsageSnapshot } from \"../orchestration/attempt-usage.ts\";\nimport type { AgentResumeContext, AttemptUsageSnapshot, ResourcePointer } from \"../orchestration/contracts.ts\";\nimport { withFileLockSync, writeFileAtomicSync } from \"../util/atomic-file.ts\";\nimport { readBoundedTextFileSync } from \"../util/bounded-file.ts\";\nimport {\n\tcollectBoundedWorkerClaimChangedFiles,\n\tMAX_WORKER_CLAIM_CHANGED_FILES,\n\tMAX_WORKER_CLAIM_TERMINAL_ATTEMPT_ID_CHARS,\n} from \"./worker-claim.ts\";\n\nconst MAX_WORKER_CONVERSATION_METADATA_BYTES = 256 * 1024;\nconst WORKER_CHANGED_FILE_CUSTOM_TYPE = \"worker-changed-file\";\n\nexport interface CreateWorkerConversationOptions {\n\tagentDir: string;\n\tparentSessionId: string;\n\t/** Durable logical identity for the worker/lane. It never becomes a path segment directly. */\n\tlogicalAgentId: string;\n\tcwd: string;\n\torchestrationProfileId?: string;\n\tmodelRef?: string;\n\tresourceProfileNames: readonly string[];\n\tcontextPointers: readonly ResourcePointer[];\n}\n\nexport interface OpenWorkerConversationOptions {\n\tagentDir: string;\n\tresumeContext: AgentResumeContext;\n\texpectedLogicalAgentId?: string;\n}\n\n/**\n * Explicit, token-based retention for a durable worker transcript.\n *\n * This deliberately has no default: the worker model/context policy belongs to orchestration, not\n * the transcript store. Call only at a safe worker turn boundary, after all messages from that turn\n * have been durably committed. The execution controller provides `generateVerifiedCompaction`\n * through the shared model-aware pipeline; this store owns only preparation, append-only apply,\n * and its deterministic verified fallback.\n */\nexport interface WorkerConversationRetentionPolicy {\n\t/** Maximum provider-visible context tokens after a checkpoint is applied. */\n\tmaxContextTokens: number;\n\t/** Shared compaction's retained recent-context target. Must be lower than the maximum. */\n\tkeepRecentTokens: number;\n\t/**\n\t * Generate a verified shared compaction result. Failures, malformed results, and omitted\n\t * generators fall back to `createDeterministicCompaction`; raw transcript entries are never\n\t * replaced or removed.\n\t */\n\tgenerateVerifiedCompaction?: (preparation: CompactionPreparation) => Promise<CompactionResult>;\n\t/**\n\t * Cumulative provider usage spent by the current verified generation if it failed before it\n\t * could return a CompactionResult. This usage is attached to the deterministic checkpoint so\n\t * recovery never loses rejected-summary spend.\n\t */\n\tgetFailedCompactionUsage?: () => Usage | undefined;\n}\n\nexport interface WorkerConversationRetentionOutcome {\n\tstatus: \"within_limit\" | \"compacted_verified\" | \"compacted_deterministic\" | \"cannot_compact\";\n\tcontext: SessionContext;\n\tcontextUsage: ReturnType<typeof estimateContextTokens>;\n}\n\ninterface WorkerConversationMetadata {\n\tlogicalAgentId: string;\n\tresumeContext: AgentResumeContext;\n}\n\nfunction stableWorkerSessionId(parentSessionId: string, logicalAgentId: string): string {\n\tconst normalizedAgentId = logicalAgentId.trim();\n\tif (!normalizedAgentId) throw new TypeError(\"A logical worker agent id is required.\");\n\tconst digest = createHash(\"sha256\")\n\t\t.update(\"pi-worker-conversation-v1\")\n\t\t.update(\"\\0\")\n\t\t.update(parentSessionId)\n\t\t.update(\"\\0\")\n\t\t.update(normalizedAgentId)\n\t\t.digest(\"hex\")\n\t\t.slice(0, 32);\n\treturn `worker-${digest}`;\n}\n\nfunction cloneResumeContext(context: AgentResumeContext): AgentResumeContext {\n\treturn structuredClone(context);\n}\n\nfunction expectedResumeContext(options: CreateWorkerConversationOptions): AgentResumeContext {\n\tconst sessionDir = workerConversationSessionsDir(options.agentDir, options.parentSessionId);\n\tconst sessionId = stableWorkerSessionId(options.parentSessionId, options.logicalAgentId);\n\tassertValidSessionId(sessionId);\n\tif (!options.cwd.trim()) throw new TypeError(\"A worker conversation working directory is required.\");\n\treturn {\n\t\tprovider: \"pi\",\n\t\tsessionId,\n\t\tsessionDir,\n\t\tsessionFile: joinWorkerSessionFile(sessionDir, sessionId),\n\t\tcwd: resolve(options.cwd),\n\t\t...(options.orchestrationProfileId ? { orchestrationProfileId: options.orchestrationProfileId } : {}),\n\t\t...(options.modelRef ? { modelRef: options.modelRef } : {}),\n\t\tresourceProfileNames: [...options.resourceProfileNames],\n\t\tcontextPointers: structuredClone(options.contextPointers),\n\t};\n}\n\nfunction metadataFromFile(metadataFile: string): WorkerConversationMetadata {\n\tlet metadata: unknown;\n\ttry {\n\t\tmetadata = JSON.parse(\n\t\t\treadBoundedTextFileSync(\n\t\t\t\tmetadataFile,\n\t\t\t\tMAX_WORKER_CONVERSATION_METADATA_BYTES,\n\t\t\t\t\"Worker conversation metadata durable size bound\",\n\t\t\t),\n\t\t);\n\t} catch {\n\t\tthrow new Error(\n\t\t\texistsSync(metadataFile)\n\t\t\t\t? \"Worker conversation metadata is invalid or exceeds its durable size bound.\"\n\t\t\t\t: \"Worker conversation metadata is missing or invalid.\",\n\t\t);\n\t}\n\tif (!metadata || typeof metadata !== \"object\" || Array.isArray(metadata)) {\n\t\tthrow new Error(\"Worker conversation metadata is invalid.\");\n\t}\n\tconst logicalAgentId = (metadata as { logicalAgentId?: unknown }).logicalAgentId;\n\tconst resumeContext = (metadata as { resumeContext?: unknown }).resumeContext;\n\tif (typeof logicalAgentId !== \"string\" || !logicalAgentId.trim() || !resumeContext) {\n\t\tthrow new Error(\"Worker conversation metadata is invalid.\");\n\t}\n\treturn { logicalAgentId, resumeContext: cloneResumeContext(resumeContext as AgentResumeContext) };\n}\n\nfunction assertExactConversationMetadata(\n\tmetadataFile: string,\n\texpected: AgentResumeContext,\n\tlogicalAgentId?: string,\n): void {\n\tconst metadata = metadataFromFile(metadataFile);\n\tif (logicalAgentId && metadata.logicalAgentId !== logicalAgentId) {\n\t\tthrow new Error(\"Worker conversation logical agent identity conflicts with the persisted transcript.\");\n\t}\n\tif (!sameAgentResumeIdentity(metadata.resumeContext, expected)) {\n\t\tthrow new Error(\"Worker conversation resume context conflicts with the persisted transcript.\");\n\t}\n}\n\nfunction assertWorkerConversationFile(agentDir: string, sessionFile: string, sessionId: string): string {\n\tconst workersRoot = resolve(orchestrationSessionsDir(agentDir));\n\tconst resolvedFile = resolve(sessionFile);\n\tconst fileRelativeToWorkersRoot = relative(workersRoot, resolvedFile);\n\tif (\n\t\tfileRelativeToWorkersRoot === \"\" ||\n\t\tfileRelativeToWorkersRoot.startsWith(\"..\") ||\n\t\tisAbsolute(fileRelativeToWorkersRoot)\n\t) {\n\t\tthrow new Error(\"Worker conversation session file must remain under the canonical worker sessions directory.\");\n\t}\n\tconst segments = fileRelativeToWorkersRoot.split(/[\\\\/]/);\n\tif (segments.length !== 3 || segments[1] !== \"worker-conversations\") {\n\t\tthrow new Error(\"Worker conversation session file must remain under the canonical worker sessions directory.\");\n\t}\n\tif (basename(resolvedFile) !== `${sessionId}.jsonl`) {\n\t\tthrow new Error(\"Worker conversation session file does not match its durable session id.\");\n\t}\n\treturn resolvedFile;\n}\n\n/**\n * Durable SessionManager-backed transcript for exactly one logical worker lane.\n *\n * Single-writer invariant: orchestration must ensure that no two live processes append to the same\n * conversation. This store deliberately does not merge branches or lock competing writers; a\n * complete child transcript is committed only after it proves the current provider-visible context\n * is its exact prefix.\n */\nexport class WorkerConversation {\n\tprivate readonly sessionManager: SessionManager;\n\tprivate readonly resumeContext: AgentResumeContext;\n\n\tconstructor(sessionManager: SessionManager, resumeContext: AgentResumeContext) {\n\t\tthis.sessionManager = sessionManager;\n\t\tthis.resumeContext = cloneResumeContext(resumeContext);\n\t}\n\n\t/** Resolve current provider-visible messages lazily through SessionManager. */\n\tgetProviderContext(): SessionContext {\n\t\treturn this.sessionManager.buildSessionContext();\n\t}\n\n\t/** Convert the current compacted projection at its transcript owner, never at each consumer. */\n\tgetProviderMessages(): Message[] {\n\t\treturn convertToLlm(this.getProviderContext().messages);\n\t}\n\n\t/** True when provider context is a compacted projection rather than the raw transcript prefix. */\n\thasProviderCompaction(): boolean {\n\t\treturn this.sessionManager.getBranch().some((entry) => entry.type === \"compaction\");\n\t}\n\n\t/**\n\t * The immutable, append-only raw worker messages, including messages compacted out of provider\n\t * context. This is recovery/audit data; it is never loaded into a provider request implicitly.\n\t */\n\tgetRawTranscript(): Message[] {\n\t\tconst messages: Message[] = [];\n\t\tfor (const entry of this.sessionManager.getEntries()) {\n\t\t\tif (\n\t\t\t\tentry.type === \"message\" &&\n\t\t\t\t(entry.message.role === \"user\" || entry.message.role === \"assistant\" || entry.message.role === \"toolResult\")\n\t\t\t) {\n\t\t\t\tmessages.push(structuredClone(entry.message));\n\t\t\t}\n\t\t}\n\t\treturn messages;\n\t}\n\n\t/** Durable host-observed mutation progress. Custom entries never enter provider context. */\n\trecordChangedFile(attemptId: string, filePath: string): void {\n\t\tif (!attemptId.trim() || attemptId.length > MAX_WORKER_CLAIM_TERMINAL_ATTEMPT_ID_CHARS) {\n\t\t\tthrow new TypeError(\"Worker changed-file progress attempt id is invalid or exceeds its durable bound.\");\n\t\t}\n\t\tconst candidate = collectBoundedWorkerClaimChangedFiles([filePath]);\n\t\tif (candidate.overflowed || candidate.values.length !== 1) {\n\t\t\tthrow new TypeError(\"Worker changed-file progress path is invalid or exceeds its durable bound.\");\n\t\t}\n\t\tconst path = candidate.values[0]!;\n\t\tconst existing = this.getChangedFiles(attemptId);\n\t\tif (existing.includes(path)) return;\n\t\tif (existing.length >= MAX_WORKER_CLAIM_CHANGED_FILES) {\n\t\t\tthrow new Error(\"Worker changed-file progress exceeds its durable entry bound.\");\n\t\t}\n\t\tthis.sessionManager.appendCustomEntry(WORKER_CHANGED_FILE_CUSTOM_TYPE, { attemptId, path });\n\t}\n\n\t/** Rehydrate the bounded mutation set across owner-session disposal and worker resume. */\n\tgetChangedFiles(attemptId: string): string[] {\n\t\tconst paths: string[] = [];\n\t\tfor (const entry of this.sessionManager.getEntries()) {\n\t\t\tif (entry.type !== \"custom\" || entry.customType !== WORKER_CHANGED_FILE_CUSTOM_TYPE) continue;\n\t\t\tconst data = entry.data;\n\t\t\tif (!data || typeof data !== \"object\" || Array.isArray(data)) continue;\n\t\t\tconst attemptDescriptor = Object.getOwnPropertyDescriptor(data, \"attemptId\");\n\t\t\tconst pathDescriptor = Object.getOwnPropertyDescriptor(data, \"path\");\n\t\t\tif (\n\t\t\t\tattemptDescriptor &&\n\t\t\t\t\"value\" in attemptDescriptor &&\n\t\t\t\tattemptDescriptor.value === attemptId &&\n\t\t\t\tpathDescriptor &&\n\t\t\t\t\"value\" in pathDescriptor &&\n\t\t\t\ttypeof pathDescriptor.value === \"string\"\n\t\t\t) {\n\t\t\t\tpaths.push(pathDescriptor.value);\n\t\t\t}\n\t\t}\n\t\treturn collectBoundedWorkerClaimChangedFiles(paths).values;\n\t}\n\n\t/**\n\t * Recover cumulative accounting from raw entry metadata without cloning or resolving message\n\t * payloads that compaction deliberately moved out of the provider-visible working set.\n\t */\n\tgetRawTranscriptUsage(): AttemptUsageSnapshot {\n\t\tconst usage: AttemptUsageSnapshot = {\n\t\t\ttoolCalls: 0,\n\t\t\tinputTokens: 0,\n\t\t\toutputTokens: 0,\n\t\t\tcacheReadTokens: 0,\n\t\t\tcacheWriteTokens: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcostUsd: 0,\n\t\t\tactiveWallClockMs: 0,\n\t\t};\n\t\tfor (const entry of this.sessionManager.getEntries()) {\n\t\t\tif (entry.type === \"compaction\" && entry.usage) {\n\t\t\t\tusage.inputTokens += entry.usage.input;\n\t\t\t\tusage.outputTokens += entry.usage.output;\n\t\t\t\tusage.cacheReadTokens += entry.usage.cacheRead;\n\t\t\t\tusage.cacheWriteTokens += entry.usage.cacheWrite;\n\t\t\t\tusage.totalTokens += entry.usage.totalTokens;\n\t\t\t\tusage.costUsd += entry.usage.cost.total;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (entry.type !== \"message\") continue;\n\t\t\tif (entry.message.role === \"toolResult\") {\n\t\t\t\tusage.toolCalls += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (entry.message.role !== \"assistant\") continue;\n\t\t\tusage.inputTokens += entry.message.usage.input;\n\t\t\tusage.outputTokens += entry.message.usage.output;\n\t\t\tusage.cacheReadTokens += entry.message.usage.cacheRead;\n\t\t\tusage.cacheWriteTokens += entry.message.usage.cacheWrite;\n\t\t\tusage.totalTokens += entry.message.usage.totalTokens;\n\t\t\tusage.costUsd += entry.message.usage.cost.total;\n\t\t}\n\t\treturn validateAttemptUsageSnapshot(usage, \"legacy worker transcript usage\");\n\t}\n\n\t/**\n\t * Locate a bounded set of durable mailbox delivery commits without materializing or cloning the\n\t * complete raw transcript. Recovery uses this only to close the narrow crash window after a\n\t * control message was appended but before its mailbox acknowledgement was persisted.\n\t */\n\tfindDeliveredWorkerControlMessageIds(pendingMessageIds: readonly string[]): Set<string> {\n\t\tconst unresolved = new Set(pendingMessageIds);\n\t\tconst delivered = new Set<string>();\n\t\tif (unresolved.size === 0) return delivered;\n\t\tconst entries = this.sessionManager.getEntries();\n\t\tfor (let index = entries.length - 1; index >= 0; index--) {\n\t\t\tconst entry = entries[index];\n\t\t\tif (!entry) continue;\n\t\t\tif (entry.type !== \"message\" || entry.message.role !== \"user\" || typeof entry.message.content !== \"string\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst messageId = /^\\[Worker control (worker-message-[^\\]]+)\\]\\n/.exec(entry.message.content)?.[1];\n\t\t\tif (!messageId || !unresolved.delete(messageId)) continue;\n\t\t\tdelivered.add(messageId);\n\t\t\tif (unresolved.size === 0) break;\n\t\t}\n\t\treturn delivered;\n\t}\n\n\t/**\n\t * Append one shared-compaction checkpoint when the current provider-visible context exceeds the\n\t * explicit worker policy. The source transcript remains append-only; only the projection sent to\n\t * the next provider call changes. The method is idempotent while no new messages are appended.\n\t */\n\tasync compactProviderContext(\n\t\tpolicy: WorkerConversationRetentionPolicy,\n\t\tsignal?: AbortSignal,\n\t): Promise<WorkerConversationRetentionOutcome> {\n\t\tassertRetentionPolicy(policy);\n\t\tsignal?.throwIfAborted();\n\t\tconst before = this.getProviderContext();\n\t\tconst beforeUsage = estimateContextTokens(before.messages);\n\t\tif (beforeUsage.tokens <= policy.maxContextTokens) {\n\t\t\treturn { status: \"within_limit\", context: before, contextUsage: beforeUsage };\n\t\t}\n\n\t\tconst preparation = prepareCompaction(this.sessionManager.getBranch(), {\n\t\t\tenabled: true,\n\t\t\t// The store does not choose a model or invoke a provider. This is only the shared cut-point\n\t\t\t// input required by deterministic fallback; a controller-provided verified generator owns\n\t\t\t// the model-specific reserve and retry policy.\n\t\t\treserveTokens: Math.max(1, Math.floor(policy.maxContextTokens / 4)),\n\t\t\tkeepRecentTokens: policy.keepRecentTokens,\n\t\t\ttriggerPercent: 0,\n\t\t});\n\t\tif (!preparation) {\n\t\t\treturn { status: \"cannot_compact\", context: before, contextUsage: beforeUsage };\n\t\t}\n\n\t\tlet result: CompactionResult;\n\t\tlet status: WorkerConversationRetentionOutcome[\"status\"] = \"compacted_deterministic\";\n\t\tif (policy.generateVerifiedCompaction) {\n\t\t\ttry {\n\t\t\t\tconst verified = await policy.generateVerifiedCompaction(preparation);\n\t\t\t\tsignal?.throwIfAborted();\n\t\t\t\tassertApplicableCompactionResult(verified, preparation);\n\t\t\t\tresult = verified;\n\t\t\t\tstatus = \"compacted_verified\";\n\t\t\t} catch {\n\t\t\t\t// Cancellation/suspension transfers transcript ownership. The retiring owner must\n\t\t\t\t// not append a fallback after its execution fence has been released.\n\t\t\t\tsignal?.throwIfAborted();\n\t\t\t\tconst failedUsage = policy.getFailedCompactionUsage?.();\n\t\t\t\tresult = {\n\t\t\t\t\t...createDeterministicCompaction(preparation),\n\t\t\t\t\t...(failedUsage ? { usage: structuredClone(failedUsage) } : {}),\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tresult = createDeterministicCompaction(preparation);\n\t\t}\n\n\t\tsignal?.throwIfAborted();\n\t\tthis.sessionManager.appendCompaction(\n\t\t\tresult.summary,\n\t\t\tresult.firstKeptEntryId,\n\t\t\tresult.tokensBefore,\n\t\t\tresult.details,\n\t\t\tfalse,\n\t\t\tresult.usage,\n\t\t);\n\t\tconst context = this.getProviderContext();\n\t\treturn { status, context, contextUsage: estimateContextTokens(context.messages) };\n\t}\n\n\t/** Append one already-authorized worker message to the canonical transcript. */\n\tappendMessage(message: Message): string {\n\t\treturn this.sessionManager.appendMessage(structuredClone(message));\n\t}\n\n\t/**\n\t * Commit one complete child-owned transcript without replaying its persisted prefix.\n\t *\n\t * Any mismatch is a divergence: appending would duplicate or reorder provider context, so the\n\t * caller must resolve it rather than silently branching this logical worker conversation.\n\t */\n\tcommitTranscript(transcript: readonly Message[]): number {\n\t\t// Compare against the append-only source transcript, not the provider projection: once a\n\t\t// compaction checkpoint exists, buildSessionContext() begins with its synthetic summary and is\n\t\t// intentionally no longer an exact prefix of the child loop's raw message sequence.\n\t\tconst persisted = this.getRawTranscript();\n\t\tif (transcript.length < persisted.length) {\n\t\t\tthrow new Error(\"Worker conversation transcript is shorter than its persisted raw context.\");\n\t\t}\n\t\tfor (let index = 0; index < persisted.length; index++) {\n\t\t\tif (!isDeepStrictEqual(persisted[index], transcript[index])) {\n\t\t\t\tthrow new Error(`Worker conversation transcript diverges from persisted context at message ${index}.`);\n\t\t\t}\n\t\t}\n\t\tfor (const message of transcript.slice(persisted.length)) {\n\t\t\tthis.appendMessage(message);\n\t\t}\n\t\treturn transcript.length - persisted.length;\n\t}\n\n\t/** Return an isolated copy suitable for durable orchestration/process-resume state. */\n\tgetResumeContext(): AgentResumeContext {\n\t\treturn cloneResumeContext(this.resumeContext);\n\t}\n}\n\nfunction assertRetentionPolicy(policy: WorkerConversationRetentionPolicy): void {\n\tif (!Number.isSafeInteger(policy.maxContextTokens) || policy.maxContextTokens < 2) {\n\t\tthrow new TypeError(\"Worker conversation maximum context tokens must be an integer of at least 2.\");\n\t}\n\tif (\n\t\t!Number.isSafeInteger(policy.keepRecentTokens) ||\n\t\tpolicy.keepRecentTokens < 1 ||\n\t\tpolicy.keepRecentTokens >= policy.maxContextTokens\n\t) {\n\t\tthrow new TypeError(\"Worker conversation retained context tokens must be an integer below the maximum.\");\n\t}\n}\n\nfunction assertApplicableCompactionResult(result: CompactionResult, preparation: CompactionPreparation): void {\n\tif (\n\t\t!result ||\n\t\ttypeof result.summary !== \"string\" ||\n\t\tresult.firstKeptEntryId !== preparation.firstKeptEntryId ||\n\t\tresult.tokensBefore !== preparation.tokensBefore\n\t) {\n\t\tthrow new Error(\"Worker verified compaction result does not match the prepared durable transcript.\");\n\t}\n}\n\n/** Creates and reopens canonical SessionManager transcripts for logical Pi worker lanes. */\nexport class WorkerConversationStore {\n\tcreate(options: CreateWorkerConversationOptions): WorkerConversation {\n\t\tconst resumeContext = expectedResumeContext(options);\n\t\tconst sessionFile = resumeContext.sessionFile!;\n\t\treturn withFileLockSync(sessionFile, () => this.createLocked(options, resumeContext));\n\t}\n\n\tprivate createLocked(\n\t\toptions: CreateWorkerConversationOptions,\n\t\tresumeContext: AgentResumeContext,\n\t): WorkerConversation {\n\t\tconst sessionDir = resumeContext.sessionDir!;\n\t\tconst sessionFile = resumeContext.sessionFile!;\n\t\tconst metadataFile = workerConversationMetadataFile(sessionFile);\n\t\tif (existsSync(sessionFile)) {\n\t\t\tthrow new Error(`Worker conversation already exists for logical agent '${options.logicalAgentId}'.`);\n\t\t}\n\n\t\t// SessionManager intentionally defers a brand-new header until its first assistant message.\n\t\t// A worker must be resumable after its first user/tool message, so atomically seed the exact\n\t\t// SessionManager header and immediately reopen it through SessionManager for all later writes.\n\t\tconst seed = SessionManager.create(resumeContext.cwd, options.agentDir, sessionDir, {\n\t\t\tid: resumeContext.sessionId,\n\t\t});\n\t\tconst header = seed.getHeader();\n\t\tif (!header) throw new Error(\"Unable to create a worker conversation session header.\");\n\t\tif (existsSync(metadataFile)) {\n\t\t\tassertExactConversationMetadata(metadataFile, resumeContext, options.logicalAgentId);\n\t\t} else {\n\t\t\t// Metadata lands first: a crash leaves no visible conversation until the ordinary session\n\t\t\t// header is atomically published, while a later ensure can validate the exact intended identity.\n\t\t\twriteFileAtomicSync(\n\t\t\t\tmetadataFile,\n\t\t\t\t`${JSON.stringify({ logicalAgentId: options.logicalAgentId, resumeContext })}\\n`,\n\t\t\t);\n\t\t}\n\t\twriteFileAtomicSync(sessionFile, `${JSON.stringify(header)}\\n`);\n\n\t\treturn this.open({\n\t\t\tagentDir: options.agentDir,\n\t\t\tresumeContext,\n\t\t\texpectedLogicalAgentId: options.logicalAgentId,\n\t\t});\n\t}\n\n\t/** Open the one canonical transcript or atomically create it with the exact same durable identity. */\n\tensure(options: CreateWorkerConversationOptions): WorkerConversation {\n\t\tconst resumeContext = expectedResumeContext(options);\n\t\tconst sessionFile = resumeContext.sessionFile!;\n\t\treturn withFileLockSync(sessionFile, () => {\n\t\t\tif (!existsSync(sessionFile)) return this.createLocked(options, resumeContext);\n\t\t\treturn this.open({\n\t\t\t\tagentDir: options.agentDir,\n\t\t\t\tresumeContext,\n\t\t\t\texpectedLogicalAgentId: options.logicalAgentId,\n\t\t\t});\n\t\t});\n\t}\n\n\topen(options: OpenWorkerConversationOptions): WorkerConversation {\n\t\tconst context = cloneResumeContext(options.resumeContext);\n\t\tif (context.provider !== \"pi\") throw new TypeError(\"Only Pi worker conversations can be reopened.\");\n\t\tif (!context.sessionFile)\n\t\t\tthrow new TypeError(\"A persisted worker session file is required to reopen a conversation.\");\n\t\tif (!context.cwd.trim()) throw new TypeError(\"A worker conversation working directory is required.\");\n\t\tassertValidSessionId(context.sessionId);\n\n\t\tconst sessionFile = assertWorkerConversationFile(options.agentDir, context.sessionFile, context.sessionId);\n\t\tif (!existsSync(sessionFile)) throw new Error(`Worker conversation session file does not exist: ${sessionFile}`);\n\t\tconst sessionDir = dirname(sessionFile);\n\t\tif (context.sessionDir && resolve(context.sessionDir) !== sessionDir) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Worker conversation resume context has a session directory that disagrees with its session file.\",\n\t\t\t);\n\t\t}\n\n\t\tconst sessionManager = SessionManager.open(sessionFile, options.agentDir, sessionDir);\n\t\tif (sessionManager.getSessionId() !== context.sessionId) {\n\t\t\tthrow new Error(\"Worker conversation session file does not contain the requested durable session id.\");\n\t\t}\n\t\tif (sessionManager.getCwd() !== resolve(context.cwd)) {\n\t\t\tthrow new Error(\"Worker conversation resume context working directory disagrees with the persisted session.\");\n\t\t}\n\t\tassertExactConversationMetadata(\n\t\t\tworkerConversationMetadataFile(sessionFile),\n\t\t\tcontext,\n\t\t\toptions.expectedLogicalAgentId,\n\t\t);\n\n\t\treturn new WorkerConversation(sessionManager, {\n\t\t\t...context,\n\t\t\tsessionDir,\n\t\t\tsessionFile,\n\t\t\tcwd: sessionManager.getCwd(),\n\t\t});\n\t}\n}\n\nfunction joinWorkerSessionFile(sessionDir: string, sessionId: string): string {\n\treturn resolve(sessionDir, `${sessionId}.jsonl`);\n}\n\nfunction workerConversationMetadataFile(sessionFile: string): string {\n\treturn `${sessionFile}.worker.json`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"worker-conversation-store.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-conversation-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { basename, dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport { convertToLlm } from \"@caupulican/pi-agent-core\";\nimport {\n\tassertValidSessionId,\n\ttype CompactionPreparation,\n\ttype CompactionResult,\n\tcreateDeterministicCompaction,\n\testimateContextTokens,\n\tprepareCompaction,\n\ttype SessionContext,\n\tSessionManager,\n} from \"@caupulican/pi-agent-core/node\";\nimport type { Message, Usage } from \"@caupulican/pi-ai\";\nimport { orchestrationSessionsDir, workerConversationSessionsDir } from \"../agent-paths.ts\";\nimport { sameAgentResumeIdentity } from \"../orchestration/agent-resume.ts\";\nimport { validateAttemptUsageSnapshot } from \"../orchestration/attempt-usage.ts\";\nimport type { AgentResumeContext, AttemptUsageSnapshot, ResourcePointer } from \"../orchestration/contracts.ts\";\nimport { withFileLockSync, writeFileAtomicSync } from \"../util/atomic-file.ts\";\nimport { readBoundedTextFileSync } from \"../util/bounded-file.ts\";\nimport {\n\tcollectBoundedWorkerClaimChangedFiles,\n\tMAX_WORKER_CLAIM_CHANGED_FILES,\n\tMAX_WORKER_CLAIM_TERMINAL_ATTEMPT_ID_CHARS,\n} from \"./worker-claim.ts\";\n\nconst MAX_WORKER_CONVERSATION_METADATA_BYTES = 256 * 1024;\nconst WORKER_CHANGED_FILE_CUSTOM_TYPE = \"worker-changed-file\";\n\nexport interface CreateWorkerConversationOptions {\n\tagentDir: string;\n\tparentSessionId: string;\n\t/** Durable logical identity for the worker/lane. It never becomes a path segment directly. */\n\tlogicalAgentId: string;\n\tcwd: string;\n\torchestrationProfileId?: string;\n\tmodelRef?: string;\n\tresourceProfileNames: readonly string[];\n\tcontextPointers: readonly ResourcePointer[];\n}\n\nexport interface OpenWorkerConversationOptions {\n\tagentDir: string;\n\tresumeContext: AgentResumeContext;\n\texpectedLogicalAgentId?: string;\n}\n\n/**\n * Explicit, token-based retention for a durable worker transcript.\n *\n * This deliberately has no default: the worker model/context policy belongs to orchestration, not\n * the transcript store. Call only at a safe worker turn boundary, after all messages from that turn\n * have been durably committed. The execution controller provides `generateVerifiedCompaction`\n * through the shared model-aware pipeline; this store owns only preparation, append-only apply,\n * and its deterministic verified fallback.\n */\nexport interface WorkerConversationRetentionPolicy {\n\t/** Maximum provider-visible context tokens after a checkpoint is applied. */\n\tmaxContextTokens: number;\n\t/** Shared compaction's retained recent-context target. Must be lower than the maximum. */\n\tkeepRecentTokens: number;\n\t/**\n\t * Generate a verified shared compaction result. Failures, malformed results, and omitted\n\t * generators fall back to `createDeterministicCompaction`; raw transcript entries are never\n\t * replaced or removed.\n\t */\n\tgenerateVerifiedCompaction?: (preparation: CompactionPreparation) => Promise<CompactionResult>;\n\t/**\n\t * Cumulative provider usage spent by the current verified generation if it failed before it\n\t * could return a CompactionResult. This usage is attached to the deterministic checkpoint so\n\t * recovery never loses rejected-summary spend.\n\t */\n\tgetFailedCompactionUsage?: () => Usage | undefined;\n}\n\nexport interface WorkerConversationRetentionOutcome {\n\tstatus: \"within_limit\" | \"compacted_verified\" | \"compacted_deterministic\" | \"cannot_compact\";\n\tcontext: SessionContext;\n\tcontextUsage: ReturnType<typeof estimateContextTokens>;\n}\n\ninterface WorkerConversationMetadata {\n\tlogicalAgentId: string;\n\tresumeContext: AgentResumeContext;\n}\n\nfunction stableWorkerSessionId(parentSessionId: string, logicalAgentId: string): string {\n\tconst normalizedAgentId = logicalAgentId.trim();\n\tif (!normalizedAgentId) throw new TypeError(\"A logical worker agent id is required.\");\n\tconst digest = createHash(\"sha256\")\n\t\t.update(\"pi-worker-conversation-v1\")\n\t\t.update(\"\\0\")\n\t\t.update(parentSessionId)\n\t\t.update(\"\\0\")\n\t\t.update(normalizedAgentId)\n\t\t.digest(\"hex\")\n\t\t.slice(0, 32);\n\treturn `worker-${digest}`;\n}\n\nfunction cloneResumeContext(context: AgentResumeContext): AgentResumeContext {\n\treturn structuredClone(context);\n}\n\nfunction expectedResumeContext(options: CreateWorkerConversationOptions): AgentResumeContext {\n\tconst sessionDir = workerConversationSessionsDir(options.agentDir, options.parentSessionId);\n\tconst sessionId = stableWorkerSessionId(options.parentSessionId, options.logicalAgentId);\n\tassertValidSessionId(sessionId);\n\tif (!options.cwd.trim()) throw new TypeError(\"A worker conversation working directory is required.\");\n\treturn {\n\t\tprovider: \"pi\",\n\t\tsessionId,\n\t\tsessionDir,\n\t\tsessionFile: joinWorkerSessionFile(sessionDir, sessionId),\n\t\tcwd: resolve(options.cwd),\n\t\t...(options.orchestrationProfileId ? { orchestrationProfileId: options.orchestrationProfileId } : {}),\n\t\t...(options.modelRef ? { modelRef: options.modelRef } : {}),\n\t\tresourceProfileNames: [...options.resourceProfileNames],\n\t\tcontextPointers: structuredClone(options.contextPointers),\n\t};\n}\n\nfunction metadataFromFile(metadataFile: string): WorkerConversationMetadata {\n\tlet metadata: unknown;\n\ttry {\n\t\tmetadata = JSON.parse(\n\t\t\treadBoundedTextFileSync(\n\t\t\t\tmetadataFile,\n\t\t\t\tMAX_WORKER_CONVERSATION_METADATA_BYTES,\n\t\t\t\t\"Worker conversation metadata durable size bound\",\n\t\t\t),\n\t\t);\n\t} catch {\n\t\tthrow new Error(\n\t\t\texistsSync(metadataFile)\n\t\t\t\t? \"Worker conversation metadata is invalid or exceeds its durable size bound.\"\n\t\t\t\t: \"Worker conversation metadata is missing or invalid.\",\n\t\t);\n\t}\n\tif (!metadata || typeof metadata !== \"object\" || Array.isArray(metadata)) {\n\t\tthrow new Error(\"Worker conversation metadata is invalid.\");\n\t}\n\tconst logicalAgentId = (metadata as { logicalAgentId?: unknown }).logicalAgentId;\n\tconst resumeContext = (metadata as { resumeContext?: unknown }).resumeContext;\n\tif (typeof logicalAgentId !== \"string\" || !logicalAgentId.trim() || !resumeContext) {\n\t\tthrow new Error(\"Worker conversation metadata is invalid.\");\n\t}\n\treturn { logicalAgentId, resumeContext: cloneResumeContext(resumeContext as AgentResumeContext) };\n}\n\nfunction assertExactConversationMetadata(\n\tmetadataFile: string,\n\texpected: AgentResumeContext,\n\tlogicalAgentId?: string,\n): void {\n\tconst metadata = metadataFromFile(metadataFile);\n\tif (logicalAgentId && metadata.logicalAgentId !== logicalAgentId) {\n\t\tthrow new Error(\"Worker conversation logical agent identity conflicts with the persisted transcript.\");\n\t}\n\tif (!sameAgentResumeIdentity(metadata.resumeContext, expected)) {\n\t\tthrow new Error(\"Worker conversation resume context conflicts with the persisted transcript.\");\n\t}\n}\n\nfunction assertWorkerConversationFile(agentDir: string, sessionFile: string, sessionId: string): string {\n\tconst workersRoot = resolve(orchestrationSessionsDir(agentDir));\n\tconst resolvedFile = resolve(sessionFile);\n\tconst fileRelativeToWorkersRoot = relative(workersRoot, resolvedFile);\n\tif (\n\t\tfileRelativeToWorkersRoot === \"\" ||\n\t\tfileRelativeToWorkersRoot.startsWith(\"..\") ||\n\t\tisAbsolute(fileRelativeToWorkersRoot)\n\t) {\n\t\tthrow new Error(\"Worker conversation session file must remain under the canonical worker sessions directory.\");\n\t}\n\tconst segments = fileRelativeToWorkersRoot.split(/[\\\\/]/);\n\tif (segments.length !== 3 || segments[1] !== \"worker-conversations\") {\n\t\tthrow new Error(\"Worker conversation session file must remain under the canonical worker sessions directory.\");\n\t}\n\tif (basename(resolvedFile) !== `${sessionId}.jsonl`) {\n\t\tthrow new Error(\"Worker conversation session file does not match its durable session id.\");\n\t}\n\treturn resolvedFile;\n}\n\n/**\n * Durable SessionManager-backed transcript for exactly one logical worker lane.\n *\n * Single-writer invariant: orchestration must ensure that no two live processes append to the same\n * conversation. This store deliberately does not merge branches or lock competing writers; a\n * complete child transcript is committed only after it proves the current provider-visible context\n * is its exact prefix.\n */\nexport class WorkerConversation {\n\tprivate readonly sessionManager: SessionManager;\n\tprivate readonly resumeContext: AgentResumeContext;\n\n\tconstructor(sessionManager: SessionManager, resumeContext: AgentResumeContext) {\n\t\tthis.sessionManager = sessionManager;\n\t\tthis.resumeContext = cloneResumeContext(resumeContext);\n\t}\n\n\t/** Resolve current provider-visible messages lazily through SessionManager. */\n\tgetProviderContext(): SessionContext {\n\t\treturn this.sessionManager.buildSessionContext();\n\t}\n\n\t/** Convert the current compacted projection at its transcript owner, never at each consumer. */\n\tgetProviderMessages(): Message[] {\n\t\treturn convertToLlm(this.getProviderContext().messages);\n\t}\n\n\t/** True when provider context is a compacted projection rather than the raw transcript prefix. */\n\thasProviderCompaction(): boolean {\n\t\treturn this.sessionManager.getBranch().some((entry) => entry.type === \"compaction\");\n\t}\n\n\t/**\n\t * The immutable, append-only raw worker messages, including messages compacted out of provider\n\t * context. This is recovery/audit data; it is never loaded into a provider request implicitly.\n\t */\n\tgetRawTranscript(): Message[] {\n\t\tconst messages: Message[] = [];\n\t\tfor (const entry of this.sessionManager.getEntries()) {\n\t\t\tif (\n\t\t\t\tentry.type === \"message\" &&\n\t\t\t\t(entry.message.role === \"user\" || entry.message.role === \"assistant\" || entry.message.role === \"toolResult\")\n\t\t\t) {\n\t\t\t\tmessages.push(structuredClone(entry.message));\n\t\t\t}\n\t\t}\n\t\treturn messages;\n\t}\n\n\t/** Durable host-observed mutation progress. Custom entries never enter provider context. */\n\trecordChangedFile(attemptId: string, filePath: string): void {\n\t\tif (!attemptId.trim() || attemptId.length > MAX_WORKER_CLAIM_TERMINAL_ATTEMPT_ID_CHARS) {\n\t\t\tthrow new TypeError(\"Worker changed-file progress attempt id is invalid or exceeds its durable bound.\");\n\t\t}\n\t\tconst candidate = collectBoundedWorkerClaimChangedFiles([filePath]);\n\t\tif (candidate.overflowed || candidate.values.length !== 1) {\n\t\t\tthrow new TypeError(\"Worker changed-file progress path is invalid or exceeds its durable bound.\");\n\t\t}\n\t\tconst path = candidate.values[0]!;\n\t\tconst existing = this.getChangedFiles(attemptId);\n\t\tif (existing.includes(path)) return;\n\t\tif (existing.length >= MAX_WORKER_CLAIM_CHANGED_FILES) {\n\t\t\tthrow new Error(\"Worker changed-file progress exceeds its durable entry bound.\");\n\t\t}\n\t\tthis.sessionManager.appendCustomEntry(WORKER_CHANGED_FILE_CUSTOM_TYPE, { attemptId, path });\n\t}\n\n\t/** Rehydrate the bounded mutation set across owner-session disposal and worker resume. */\n\tgetChangedFiles(attemptId: string): string[] {\n\t\tconst paths: string[] = [];\n\t\tfor (const entry of this.sessionManager.getEntries()) {\n\t\t\tif (entry.type !== \"custom\" || entry.customType !== WORKER_CHANGED_FILE_CUSTOM_TYPE) continue;\n\t\t\tconst data = entry.data;\n\t\t\tif (!data || typeof data !== \"object\" || Array.isArray(data)) continue;\n\t\t\tconst attemptDescriptor = Object.getOwnPropertyDescriptor(data, \"attemptId\");\n\t\t\tconst pathDescriptor = Object.getOwnPropertyDescriptor(data, \"path\");\n\t\t\tif (\n\t\t\t\tattemptDescriptor &&\n\t\t\t\t\"value\" in attemptDescriptor &&\n\t\t\t\tattemptDescriptor.value === attemptId &&\n\t\t\t\tpathDescriptor &&\n\t\t\t\t\"value\" in pathDescriptor &&\n\t\t\t\ttypeof pathDescriptor.value === \"string\"\n\t\t\t) {\n\t\t\t\tpaths.push(pathDescriptor.value);\n\t\t\t}\n\t\t}\n\t\treturn collectBoundedWorkerClaimChangedFiles(paths).values;\n\t}\n\n\t/**\n\t * Recover cumulative accounting from raw entry metadata without cloning or resolving message\n\t * payloads that compaction deliberately moved out of the provider-visible working set.\n\t */\n\tgetRawTranscriptUsage(): AttemptUsageSnapshot {\n\t\tconst usage: AttemptUsageSnapshot = {\n\t\t\ttoolCalls: 0,\n\t\t\tinputTokens: 0,\n\t\t\toutputTokens: 0,\n\t\t\tcacheReadTokens: 0,\n\t\t\tcacheWriteTokens: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcostUsd: 0,\n\t\t\tactiveWallClockMs: 0,\n\t\t};\n\t\tfor (const entry of this.sessionManager.getEntries()) {\n\t\t\tif (entry.type === \"compaction\" && entry.usage) {\n\t\t\t\tusage.inputTokens += entry.usage.input;\n\t\t\t\tusage.outputTokens += entry.usage.output;\n\t\t\t\tusage.cacheReadTokens += entry.usage.cacheRead;\n\t\t\t\tusage.cacheWriteTokens += entry.usage.cacheWrite;\n\t\t\t\tusage.totalTokens += entry.usage.totalTokens;\n\t\t\t\tusage.costUsd += entry.usage.cost.total;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (entry.type !== \"message\") continue;\n\t\t\tif (entry.message.role === \"toolResult\") {\n\t\t\t\tusage.toolCalls += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (entry.message.role !== \"assistant\") continue;\n\t\t\tusage.inputTokens += entry.message.usage.input;\n\t\t\tusage.outputTokens += entry.message.usage.output;\n\t\t\tusage.cacheReadTokens += entry.message.usage.cacheRead;\n\t\t\tusage.cacheWriteTokens += entry.message.usage.cacheWrite;\n\t\t\tusage.totalTokens += entry.message.usage.totalTokens;\n\t\t\tusage.costUsd += entry.message.usage.cost.total;\n\t\t}\n\t\treturn validateAttemptUsageSnapshot(usage, \"legacy worker transcript usage\");\n\t}\n\n\t/**\n\t * Locate a bounded set of durable mailbox delivery commits without materializing or cloning the\n\t * complete raw transcript. Recovery uses this only to close the narrow crash window after a\n\t * control message was appended but before its mailbox acknowledgement was persisted.\n\t */\n\tfindDeliveredWorkerControlMessageIds(pendingMessageIds: readonly string[]): Set<string> {\n\t\tconst unresolved = new Set(pendingMessageIds);\n\t\tconst delivered = new Set<string>();\n\t\tif (unresolved.size === 0) return delivered;\n\t\tconst entries = this.sessionManager.getEntries();\n\t\tfor (let index = entries.length - 1; index >= 0; index--) {\n\t\t\tconst entry = entries[index];\n\t\t\tif (!entry) continue;\n\t\t\tif (entry.type !== \"message\" || entry.message.role !== \"user\" || typeof entry.message.content !== \"string\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst messageId = /^\\[Worker control (worker-message-[^\\]]+)\\]\\n/.exec(entry.message.content)?.[1];\n\t\t\tif (!messageId || !unresolved.delete(messageId)) continue;\n\t\t\tdelivered.add(messageId);\n\t\t\tif (unresolved.size === 0) break;\n\t\t}\n\t\treturn delivered;\n\t}\n\n\t/**\n\t * Append one shared-compaction checkpoint when the current provider-visible context exceeds the\n\t * explicit worker policy. The source transcript remains append-only; only the projection sent to\n\t * the next provider call changes. The method is idempotent while no new messages are appended.\n\t */\n\tasync compactProviderContext(\n\t\tpolicy: WorkerConversationRetentionPolicy,\n\t\tsignal?: AbortSignal,\n\t): Promise<WorkerConversationRetentionOutcome> {\n\t\tassertRetentionPolicy(policy);\n\t\tsignal?.throwIfAborted();\n\t\tconst before = this.getProviderContext();\n\t\tconst beforeUsage = estimateContextTokens(before.messages);\n\t\tif (beforeUsage.tokens <= policy.maxContextTokens) {\n\t\t\treturn { status: \"within_limit\", context: before, contextUsage: beforeUsage };\n\t\t}\n\n\t\tconst preparation = prepareCompaction(this.sessionManager.getBranch(), {\n\t\t\tenabled: true,\n\t\t\t// The store does not choose a model or invoke a provider. This is only the shared cut-point\n\t\t\t// input required by deterministic fallback; a controller-provided verified generator owns\n\t\t\t// the model-specific reserve and retry policy.\n\t\t\treserveTokens: Math.max(1, Math.floor(policy.maxContextTokens / 4)),\n\t\t\tkeepRecentTokens: policy.keepRecentTokens,\n\t\t\ttriggerPercent: 0,\n\t\t});\n\t\tif (!preparation) {\n\t\t\treturn { status: \"cannot_compact\", context: before, contextUsage: beforeUsage };\n\t\t}\n\n\t\tlet result: CompactionResult;\n\t\tlet status: WorkerConversationRetentionOutcome[\"status\"] = \"compacted_deterministic\";\n\t\tif (policy.generateVerifiedCompaction) {\n\t\t\ttry {\n\t\t\t\tconst verified = await policy.generateVerifiedCompaction(preparation);\n\t\t\t\tsignal?.throwIfAborted();\n\t\t\t\tassertApplicableCompactionResult(verified, preparation);\n\t\t\t\tresult = verified;\n\t\t\t\tstatus = \"compacted_verified\";\n\t\t\t} catch {\n\t\t\t\t// Cancellation/suspension transfers transcript ownership. The retiring owner must\n\t\t\t\t// not append a fallback after its execution fence has been released.\n\t\t\t\tsignal?.throwIfAborted();\n\t\t\t\tconst failedUsage = policy.getFailedCompactionUsage?.();\n\t\t\t\tresult = {\n\t\t\t\t\t...createDeterministicCompaction(preparation),\n\t\t\t\t\t...(failedUsage ? { usage: structuredClone(failedUsage) } : {}),\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tresult = createDeterministicCompaction(preparation);\n\t\t}\n\n\t\tsignal?.throwIfAborted();\n\t\tthis.sessionManager.appendCompaction(\n\t\t\tresult.summary,\n\t\t\tresult.firstKeptEntryId,\n\t\t\tresult.tokensBefore,\n\t\t\tresult.details,\n\t\t\tfalse,\n\t\t\tresult.usage,\n\t\t);\n\t\tconst context = this.getProviderContext();\n\t\treturn { status, context, contextUsage: estimateContextTokens(context.messages) };\n\t}\n\n\t/** Append one already-authorized worker message to the canonical transcript. */\n\tappendMessage(message: Message): string {\n\t\treturn this.sessionManager.appendMessage(structuredClone(message));\n\t}\n\n\t/**\n\t * Commit one complete child-owned transcript without replaying its persisted prefix.\n\t *\n\t * Any mismatch is a divergence: appending would duplicate or reorder provider context, so the\n\t * caller must resolve it rather than silently branching this logical worker conversation.\n\t */\n\tcommitTranscript(transcript: readonly Message[]): number {\n\t\t// Compare against the append-only source transcript, not the provider projection: once a\n\t\t// compaction checkpoint exists, buildSessionContext() begins with its synthetic summary and is\n\t\t// intentionally no longer an exact prefix of the child loop's raw message sequence.\n\t\tconst persisted = this.getRawTranscript();\n\t\tif (transcript.length < persisted.length) {\n\t\t\tthrow new Error(\"Worker conversation transcript is shorter than its persisted raw context.\");\n\t\t}\n\t\tfor (let index = 0; index < persisted.length; index++) {\n\t\t\tif (!isDeepStrictEqual(persisted[index], transcript[index])) {\n\t\t\t\tthrow new Error(`Worker conversation transcript diverges from persisted context at message ${index}.`);\n\t\t\t}\n\t\t}\n\t\tfor (const message of transcript.slice(persisted.length)) {\n\t\t\tthis.appendMessage(message);\n\t\t}\n\t\treturn transcript.length - persisted.length;\n\t}\n\n\t/** Return an isolated copy suitable for durable orchestration/process-resume state. */\n\tgetResumeContext(): AgentResumeContext {\n\t\treturn cloneResumeContext(this.resumeContext);\n\t}\n}\n\nfunction assertRetentionPolicy(policy: WorkerConversationRetentionPolicy): void {\n\tif (!Number.isSafeInteger(policy.maxContextTokens) || policy.maxContextTokens < 2) {\n\t\tthrow new TypeError(\"Worker conversation maximum context tokens must be an integer of at least 2.\");\n\t}\n\tif (\n\t\t!Number.isSafeInteger(policy.keepRecentTokens) ||\n\t\tpolicy.keepRecentTokens < 1 ||\n\t\tpolicy.keepRecentTokens >= policy.maxContextTokens\n\t) {\n\t\tthrow new TypeError(\"Worker conversation retained context tokens must be an integer below the maximum.\");\n\t}\n}\n\nfunction assertApplicableCompactionResult(result: CompactionResult, preparation: CompactionPreparation): void {\n\tif (\n\t\t!result ||\n\t\ttypeof result.summary !== \"string\" ||\n\t\tresult.firstKeptEntryId !== preparation.firstKeptEntryId ||\n\t\tresult.tokensBefore !== preparation.tokensBefore\n\t) {\n\t\tthrow new Error(\"Worker verified compaction result does not match the prepared durable transcript.\");\n\t}\n}\n\n/** Creates and reopens canonical SessionManager transcripts for logical Pi worker lanes. */\nexport class WorkerConversationStore {\n\tcreate(options: CreateWorkerConversationOptions): WorkerConversation {\n\t\tconst resumeContext = expectedResumeContext(options);\n\t\tconst sessionFile = resumeContext.sessionFile!;\n\t\treturn withFileLockSync(sessionFile, () => this.createLocked(options, resumeContext));\n\t}\n\n\tprivate createLocked(\n\t\toptions: CreateWorkerConversationOptions,\n\t\tresumeContext: AgentResumeContext,\n\t): WorkerConversation {\n\t\tconst sessionDir = resumeContext.sessionDir!;\n\t\tconst sessionFile = resumeContext.sessionFile!;\n\t\tconst metadataFile = workerConversationMetadataFile(sessionFile);\n\t\tif (existsSync(sessionFile)) {\n\t\t\tthrow new Error(`Worker conversation already exists for logical agent '${options.logicalAgentId}'.`);\n\t\t}\n\n\t\t// SessionManager intentionally defers a brand-new header until its first assistant message.\n\t\t// A worker must be resumable after its first user/tool message, so atomically seed the exact\n\t\t// SessionManager header and immediately reopen it through SessionManager for all later writes.\n\t\tconst seed = SessionManager.create(resumeContext.cwd, options.agentDir, sessionDir, {\n\t\t\tid: resumeContext.sessionId,\n\t\t});\n\t\tconst header = seed.getHeader();\n\t\tif (!header) throw new Error(\"Unable to create a worker conversation session header.\");\n\t\tif (existsSync(metadataFile)) {\n\t\t\tassertExactConversationMetadata(metadataFile, resumeContext, options.logicalAgentId);\n\t\t} else {\n\t\t\t// Metadata lands first: a crash leaves no visible conversation until the ordinary session\n\t\t\t// header is atomically published, while a later ensure can validate the exact intended identity.\n\t\t\twriteFileAtomicSync(\n\t\t\t\tmetadataFile,\n\t\t\t\t`${JSON.stringify({ logicalAgentId: options.logicalAgentId, resumeContext })}\\n`,\n\t\t\t);\n\t\t}\n\t\twriteFileAtomicSync(sessionFile, `${JSON.stringify(header)}\\n`);\n\n\t\treturn this.open({\n\t\t\tagentDir: options.agentDir,\n\t\t\tresumeContext,\n\t\t\texpectedLogicalAgentId: options.logicalAgentId,\n\t\t});\n\t}\n\n\t/** Open the one canonical transcript or atomically create it with the exact same durable identity. */\n\tensure(options: CreateWorkerConversationOptions): WorkerConversation {\n\t\tconst resumeContext = expectedResumeContext(options);\n\t\tconst sessionFile = resumeContext.sessionFile!;\n\t\treturn withFileLockSync(sessionFile, () => {\n\t\t\tif (!existsSync(sessionFile)) return this.createLocked(options, resumeContext);\n\t\t\treturn this.open({\n\t\t\t\tagentDir: options.agentDir,\n\t\t\t\tresumeContext,\n\t\t\t\texpectedLogicalAgentId: options.logicalAgentId,\n\t\t\t});\n\t\t});\n\t}\n\n\topen(options: OpenWorkerConversationOptions): WorkerConversation {\n\t\tconst context = cloneResumeContext(options.resumeContext);\n\t\tif (context.provider !== \"pi\") throw new TypeError(\"Only Pi worker conversations can be reopened.\");\n\t\tif (!context.sessionFile)\n\t\t\tthrow new TypeError(\"A persisted worker session file is required to reopen a conversation.\");\n\t\tif (!context.cwd.trim()) throw new TypeError(\"A worker conversation working directory is required.\");\n\t\tassertValidSessionId(context.sessionId);\n\n\t\tconst sessionFile = assertWorkerConversationFile(options.agentDir, context.sessionFile, context.sessionId);\n\t\tif (!existsSync(sessionFile)) throw new Error(`Worker conversation session file does not exist: ${sessionFile}`);\n\t\tconst sessionDir = dirname(sessionFile);\n\t\tif (context.sessionDir && resolve(context.sessionDir) !== sessionDir) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Worker conversation resume context has a session directory that disagrees with its session file.\",\n\t\t\t);\n\t\t}\n\n\t\tconst sessionManager = SessionManager.open(sessionFile, options.agentDir, sessionDir);\n\t\tif (sessionManager.getSessionId() !== context.sessionId) {\n\t\t\tthrow new Error(\"Worker conversation session file does not contain the requested durable session id.\");\n\t\t}\n\t\tif (sessionManager.getCwd() !== resolve(context.cwd)) {\n\t\t\tthrow new Error(\"Worker conversation resume context working directory disagrees with the persisted session.\");\n\t\t}\n\t\tassertExactConversationMetadata(\n\t\t\tworkerConversationMetadataFile(sessionFile),\n\t\t\tcontext,\n\t\t\toptions.expectedLogicalAgentId,\n\t\t);\n\n\t\treturn new WorkerConversation(sessionManager, {\n\t\t\t...context,\n\t\t\tsessionDir,\n\t\t\tsessionFile,\n\t\t\tcwd: sessionManager.getCwd(),\n\t\t});\n\t}\n}\n\nfunction joinWorkerSessionFile(sessionDir: string, sessionId: string): string {\n\treturn resolve(sessionDir, `${sessionId}.jsonl`);\n}\n\nfunction workerConversationMetadataFile(sessionFile: string): string {\n\treturn `${sessionFile}.worker.json`;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-delegation-controller.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-delegation-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { SessionManager } from \"@caupulican/pi-agent-core/node\";\nimport type { Api, Model, Usage } from \"@caupulican/pi-ai\";\nimport type {\n\tAgentSessionEvent,\n\tIsolatedCompletionOptions,\n\tIsolatedCompletionResult,\n\tWorkerDelegationRunOutcome,\n} from \"../agent-session-contracts.ts\";\nimport type { CapabilityEnvelope, WorkerClaim, WorkerRequest } from \"../autonomy/contracts.ts\";\nimport { getPrivateLaneDeniedPaths } from \"../autonomy/lane-private-paths.ts\";\nimport { createLaneToolSurface } from \"../autonomy/lane-tool-surface.ts\";\nimport type { LaneRecord, LaneTerminalStatus } from \"../autonomy/lane-tracker.ts\";\nimport { appendLaneRecordSnapshot } from \"../autonomy/session-lane-record.ts\";\nimport { AUTONOMY_TELEMETRY_EVENT_TYPES, type AutonomyTelemetryEvent } from \"../autonomy/telemetry-events.ts\";\nimport type { GoalState } from \"../goals/goal-state.ts\";\nimport { deriveModelCapabilityProfile, type ModelCapabilityProfile } from \"../model-capability.ts\";\nimport type { ModelRegistry } from \"../model-registry.ts\";\nimport { isLoopbackModelEndpoint } from \"../models/model-endpoint.ts\";\nimport { providerUsageFromAttemptUsage } from \"../orchestration/attempt-usage.ts\";\nimport type {\n\tAttemptUsageSnapshot,\n\tExecutionGrant,\n\tOrchestrationProfile,\n\tWorkerExecutionContract,\n} from \"../orchestration/contracts.ts\";\nimport type { StartedDelegationAttempt } from \"../orchestration/delegation-ledger.ts\";\nimport type { AttemptRuntimeState, TaskRuntimeProjection } from \"../orchestration/task-runtime.ts\";\nimport {\n\tcreateWorkerExecutionContract,\n\tverifierWorkerExecutionContract,\n} from \"../orchestration/worker-execution-contract.ts\";\nimport { registerInFlightWork } from \"../reload-blockers.ts\";\nimport type { ResourceLoader } from \"../resource-loader.ts\";\nimport type { ResolvedWorkerDelegationSettings, SettingsManager } from \"../settings-manager.ts\";\nimport { applyWorkerActions } from \"./worker-actions.ts\";\nimport type { WorkerAgentControlPort } from \"./worker-agent-control.ts\";\nimport { WorkerAgentControlCoordinator } from \"./worker-agent-control-coordinator.ts\";\nimport { createWorkerAttemptExecutor } from \"./worker-attempt-executor.ts\";\nimport {\n\ttype WorkerConversation,\n\ttype WorkerConversationRetentionPolicy,\n\tWorkerConversationStore,\n} from \"./worker-conversation-store.ts\";\nimport type { WorkerDelegationRequest } from \"./worker-delegation-request.ts\";\nimport { type WorkerDispatchAdmission, WorkerDispatchScheduler } from \"./worker-dispatch-scheduler.ts\";\nimport {\n\tbuildWorkerExecutionPlan,\n\tcompileWorkerExecutionGrant,\n\tnarrowWorkerExecutionPlan,\n\ttype WorkerExecutionPlan,\n\tworkerExecutionAuthorityFromPlan,\n} from \"./worker-execution-policy.ts\";\nimport type { PendingVerificationRecovery, WorkerLifecycle } from \"./worker-lifecycle.ts\";\nimport type { WorkerNotificationCoordinator } from \"./worker-notification-coordinator.ts\";\nimport { createLocalWorkerProcessOwnerId } from \"./worker-process-owner.ts\";\nimport { type ResolvedWorkerProfile, WorkerProfileResolver } from \"./worker-profile-resolver.ts\";\nimport { WorkerRecoveryCoordinator, type WorkerRecoveryDispatchResult } from \"./worker-recovery-coordinator.ts\";\nimport { selectWorkerResourcePointers } from \"./worker-resource-catalog.ts\";\nimport { materializeWorkerResourceBundle } from \"./worker-resource-materializer.ts\";\nimport { finalizeWorkerClaim } from \"./worker-terminal-finalizer.ts\";\nimport { WorkerWriteReservationCoordinator } from \"./worker-write-reservation-coordinator.ts\";\n\nexport function isLocalExecutionModel(model: Pick<Model<Api>, \"provider\" | \"baseUrl\">): boolean {\n\tif (model.provider === \"ollama\" || model.provider === \"transformers\" || model.provider === \"llama-cpp\") {\n\t\treturn true;\n\t}\n\treturn isLoopbackModelEndpoint(model.baseUrl);\n}\n\nfunction workerConversationRetentionPolicy(\n\tmodel: Model<Api>,\n\tsettingsManager: SettingsManager,\n): WorkerConversationRetentionPolicy | undefined {\n\tconst settings = settingsManager.getCompactionSettings();\n\tconst contextWindow = Math.floor(model.contextWindow ?? 0);\n\tif (!settings.enabled || contextWindow < 4) return undefined;\n\tconst reserveTokens = Math.min(settings.reserveTokens, Math.floor(contextWindow * 0.25));\n\tconst reserveTrigger = contextWindow - reserveTokens;\n\tconst fractionalTrigger =\n\t\tsettings.triggerPercent > 0 && settings.triggerPercent < 1\n\t\t\t? Math.floor(contextWindow * settings.triggerPercent)\n\t\t\t: reserveTrigger;\n\tconst modelTrigger =\n\t\tmodel.autoCompactionTriggerTokens && model.autoCompactionTriggerTokens > 0\n\t\t\t? Math.floor(model.autoCompactionTriggerTokens)\n\t\t\t: reserveTrigger;\n\tconst maxContextTokens = Math.min(reserveTrigger, fractionalTrigger, modelTrigger);\n\tif (maxContextTokens < 2) return undefined;\n\treturn {\n\t\tmaxContextTokens,\n\t\tkeepRecentTokens: Math.max(\n\t\t\t1,\n\t\t\tMath.min(settings.keepRecentTokens, Math.floor(contextWindow * 0.5), maxContextTokens - 1),\n\t\t),\n\t};\n}\n\nexport interface WorkerDelegationControllerDeps {\n\tisDisposed(): boolean;\n\tgetSessionId(): string;\n\tgetCwd(): string;\n\tgetAgentDir(): string;\n\tgetSessionManager(): SessionManager;\n\tgetSettingsManager(): SettingsManager;\n\tgetResourceLoader(): ResourceLoader;\n\tgetActiveOrchestrationProfile?(): OrchestrationProfile | undefined;\n\tgetModelRegistry(): ModelRegistry;\n\tisModelExhausted(model: Model<Api>): boolean;\n\tgetModel(): Model<Api> | undefined;\n\tisDelegateToolActive(): boolean;\n\tgetCapabilityEnvelope(): CapabilityEnvelope | undefined;\n\temit(event: AgentSessionEvent): void;\n\tnotifyWorkerTerminalHandoff(\n\t\trecords: readonly { laneId: string; status: LaneTerminalStatus; reasonCode?: string }[],\n\t): Promise<void>;\n\temitAutonomyTelemetry(event: AutonomyTelemetryEvent): void;\n\tgetGoalStateSnapshot(): GoalState | undefined;\n\tsaveWorkerClaimSnapshot(claim: WorkerClaim, request?: WorkerRequest): string;\n\tqueueWorkerHumanInput(request: { workerRequestId: string; message: string; blockers: readonly string[] }): void;\n\treadMemoryForLane(query: string): Promise<string>;\n\taddSpawnedUsage(\n\t\tusage: Usage,\n\t\topts: { label?: string; sourceSessionId?: string; reportId: string },\n\t): string | undefined;\n\trunIsolatedCompletion(opts: IsolatedCompletionOptions): Promise<IsolatedCompletionResult>;\n}\n\ntype WorkerAdmission =\n\t| {\n\t\t\tok: true;\n\t\t\tinstructions: string;\n\t\t\tsettings: ResolvedWorkerDelegationSettings;\n\t\t\tshipment: ResolvedWorkerProfile;\n\t\t\tverifierShipment?: ResolvedWorkerProfile;\n\t\t\t/** Exact pointer selection persisted when this request is admitted. */\n\t\t\tresourcePointerIds: readonly string[];\n\t\t\texecutionContract: WorkerExecutionContract;\n\t\t\texecutionPlan: WorkerExecutionPlan;\n\t }\n\t| { ok: false; skipReason: string };\n\ninterface PreparedWorkerAttempt {\n\texecutionPlan: WorkerExecutionPlan;\n\tlifecycle: WorkerLifecycle;\n\trecord: LaneRecord;\n\tattempt?: AttemptRuntimeState;\n}\n\nexport class WorkerDelegationController {\n\tprivate readonly deps: WorkerDelegationControllerDeps;\n\tprivate readonly workerAbort = new AbortController();\n\tprivate readonly lifecycle: WorkerLifecycle;\n\tprivate profileResolver: WorkerProfileResolver | undefined;\n\tprivate readonly recovery: WorkerRecoveryCoordinator;\n\tprivate readonly notifications: WorkerNotificationCoordinator;\n\tprivate readonly scheduler: WorkerDispatchScheduler;\n\tprivate readonly laneAbortControllers = new Map<string, AbortController>();\n\t/** Sole logical-agent control/mailbox owner; execution only calls its narrow delivery hooks. */\n\tprivate readonly agentControl: WorkerAgentControlCoordinator;\n\tprivate readonly publishedTerminalAttemptIds = new Set<string>();\n\tprivate readonly conversations = new WorkerConversationStore();\n\tprivate readonly writeReservations: WorkerWriteReservationCoordinator;\n\tprivate readonly inFlightLedgers = new Map<\n\t\tstring,\n\t\t{\n\t\t\tchangedFiles: Set<string>;\n\t\t\tgetUsage: () => AttemptUsageSnapshot;\n\t\t\trequest: WorkerRequest;\n\t\t\thandle: StartedDelegationAttempt;\n\t\t}\n\t>();\n\n\tconstructor(\n\t\tdeps: WorkerDelegationControllerDeps,\n\t\tnotifications: WorkerNotificationCoordinator,\n\t\tlifecycle: WorkerLifecycle,\n\t) {\n\t\tthis.deps = deps;\n\t\tthis.notifications = notifications;\n\t\tthis.lifecycle = lifecycle;\n\t\tthis.scheduler = new WorkerDispatchScheduler({\n\t\t\tagentDir: this.deps.getAgentDir?.() ?? \"\",\n\t\t\tisDisposed: () => this.deps.isDisposed(),\n\t\t\tadmit: (request, record) => this.workerDispatchAdmission(request, record),\n\t\t\tgetRecord: (laneId) => this.getWorkerLifecycle().getRecord(laneId),\n\t\t\trun: (request, record) => this.runOnce(request, undefined, record),\n\t\t\tcancel: (laneId, reasonCode) => {\n\t\t\t\ttry {\n\t\t\t\t\tthis.writeReservations.release(laneId);\n\t\t\t\t\tconst terminal = this.getWorkerLifecycle().cancel(laneId, reasonCode);\n\t\t\t\t\tif (terminal) this.publishTerminalRecord(terminal);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.safeWarn(\n\t\t\t\t\t\t`Failed to cancel durable worker ${laneId}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\twarn: (message) => this.safeWarn(message),\n\t\t});\n\t\tthis.recovery = new WorkerRecoveryCoordinator({\n\t\t\tlifecycle: this.lifecycle,\n\t\t\tscheduler: this.scheduler,\n\t\t\trecoverWriteReservations: () => this.writeReservations.recoverProvenStale(),\n\t\t\tpublishTerminalRecord: (record) => this.publishTerminalRecord(record),\n\t\t\tdispatchVerification: (recovery) => this.dispatchRecoveredVerification(recovery),\n\t\t\twarn: (message) => this.safeWarn(message),\n\t\t});\n\t\tthis.agentControl = new WorkerAgentControlCoordinator({\n\t\t\tagentDir: this.deps.getAgentDir(),\n\t\t\tparentSessionId: this.deps.getSessionId(),\n\t\t\tprocessOwnerId: createLocalWorkerProcessOwnerId(process.pid, randomUUID()),\n\t\t\tisControlAvailable: () => this.deps.isDelegateToolActive(),\n\t\t\tgetLifecycle: () => this.getWorkerLifecycle(),\n\t\t\trecoveredRequest: (attempt) => this.recovery.recoveredRequest(attempt),\n\t\t\trun: (request, record) => this.runOnce(request, undefined, record),\n\t\t\tscheduler: this.scheduler,\n\t\t\tstatusChanged: () => this.notifications.statusChanged(),\n\t\t\tabortLane: (laneId, reasonCode) => this.laneAbortControllers.get(laneId)?.abort(reasonCode),\n\t\t\tcancelLane: (laneId, reasonCode) => {\n\t\t\t\tthis.scheduler.dropQueued(laneId);\n\t\t\t\tthis.writeReservations.release(laneId);\n\t\t\t\tconst terminal = this.getWorkerLifecycle().cancel(laneId, reasonCode);\n\t\t\t\tif (terminal) this.publishTerminalRecord(terminal);\n\t\t\t\treturn terminal;\n\t\t\t},\n\t\t});\n\t\tthis.writeReservations = new WorkerWriteReservationCoordinator({\n\t\t\tagentDir: this.deps.getAgentDir(),\n\t\t\tgetCwd: () => this.deps.getCwd(),\n\t\t\tgetParentSessionId: () => this.deps.getSessionId(),\n\t\t\townerId: this.agentControl.getProcessOwnerId(),\n\t\t\tdrainQueuedWorkers: () => {\n\t\t\t\tif (!this.deps.isDisposed()) this.scheduler.drain(true);\n\t\t\t},\n\t\t\twarn: (message) => this.safeWarn(message),\n\t\t});\n\t}\n\n\tprivate safeWarn(message: string): void {\n\t\ttry {\n\t\t\tthis.deps.emit({ type: \"warning\", message });\n\t\t} catch {\n\t\t\t// Disposal and recovery diagnostics must never throw.\n\t\t}\n\t}\n\n\t/** Narrow model-facing control port. It owns control state; this controller only composes it. */\n\tgetAgentControl(): WorkerAgentControlPort {\n\t\treturn this.agentControl;\n\t}\n\n\t/** The coordinator's process identity is also the durable execution lease owner. */\n\tgetAgentControlProcessOwnerId(): string {\n\t\treturn this.agentControl.getProcessOwnerId();\n\t}\n\n\trecordTerminal(record: LaneRecord): void {\n\t\tif (record.status === \"queued\" || record.status === \"running\") return;\n\t\tif (record.type === \"worker\") {\n\t\t\tconst notification = this.lifecycle.getTerminalNotification(record.laneId);\n\t\t\tif (notification?.status === \"delivered\") return;\n\t\t\tif (notification) {\n\t\t\t\tthis.notifications.recordTerminal(record, notification.notificationId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tthis.notifications.recordTerminal(record);\n\t}\n\n\tgetRecords(): LaneRecord[] {\n\t\tif (this.deps.isDelegateToolActive?.()) this.recovery.recover();\n\t\treturn this.lifecycle.getRecords();\n\t}\n\n\t/** Process-local worker records for the shared terminal notifier; never triggers durable recovery. */\n\tgetLoadedRecords(): LaneRecord[] {\n\t\treturn this.lifecycle.getRecords();\n\t}\n\n\tmarkNotificationsDelivered(notificationIds: readonly string[]): void {\n\t\tthis.lifecycle.markNotificationsDelivered(notificationIds);\n\t}\n\n\tabort(): void {\n\t\tthis.workerAbort.abort();\n\t\t// Bound attempts have an authoritative transcript and agent identity. A normal owner-session\n\t\t// shutdown is an execution interruption, not an explicit worker cancellation: fence it into\n\t\t// suspended state before the abort continuation can observe the signal.\n\t\tconst suspendedAttemptIds = new Set(\n\t\t\tthis.lifecycle.suspendBoundInProcessAttemptsForRestart(this.agentControl.getProcessOwnerId()),\n\t\t);\n\t\tfor (const record of this.lifecycle.getRecords()) {\n\t\t\tif (record.status !== \"queued\" && record.status !== \"running\") continue;\n\t\t\tconst ledger = this.inFlightLedgers.get(record.laneId);\n\t\t\tif (ledger && suspendedAttemptIds.has(ledger.handle.attemptId)) {\n\t\t\t\tthis.inFlightLedgers.delete(record.laneId);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!ledger) {\n\t\t\t\ttry {\n\t\t\t\t\tconst canceled = this.lifecycle.cancel(record.laneId, \"session_disposed\");\n\t\t\t\t\tif (canceled) {\n\t\t\t\t\t\tthis.publishTerminalRecord(canceled);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.safeWarn(\n\t\t\t\t\t\t`Failed to cancel durable queued worker ${record.laneId}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.inFlightLedgers.delete(record.laneId);\n\t\t\ttry {\n\t\t\t\tconst usage = ledger.getUsage();\n\t\t\t\tconst reportedUsage = providerUsageFromAttemptUsage(usage);\n\t\t\t\tconst reportId = `worker:${this.deps.getSessionId()}:${record.laneId}`;\n\t\t\t\tconst claim: WorkerClaim = {\n\t\t\t\t\trequestId: ledger.request.id,\n\t\t\t\t\tstatus: \"cancelled\",\n\t\t\t\t\tsummary: \"canceled on session dispose\",\n\t\t\t\t\tchangedFiles: [...ledger.changedFiles],\n\t\t\t\t\tusageReportId: reportId,\n\t\t\t\t\tcreatedAt: new Date().toISOString(),\n\t\t\t\t};\n\t\t\t\tconst canceled = finalizeWorkerClaim(this.getWorkerLifecycle(), {\n\t\t\t\t\thandle: ledger.handle,\n\t\t\t\t\tclaim,\n\t\t\t\t\taccepted: false,\n\t\t\t\t\tcostUsd: usage.costUsd,\n\t\t\t\t\tcwd: this.deps.getCwd(),\n\t\t\t\t\tinputTokens: usage.inputTokens,\n\t\t\t\t\toutputTokens: usage.outputTokens,\n\t\t\t\t\ttotalTokens: reportedUsage.totalTokens,\n\t\t\t\t\twallClockMs: usage.activeWallClockMs,\n\t\t\t\t\ttoolCalls: usage.toolCalls,\n\t\t\t\t\treasonCode: \"session_disposed\",\n\t\t\t\t}).record;\n\t\t\t\tthis.publishTerminalRecord(canceled);\n\t\t\t\t// The terminal result and owner usage report share the same fenced cumulative snapshot.\n\t\t\t\tthis.deps.saveWorkerClaimSnapshot(claim, ledger.request);\n\t\t\t\tif (reportedUsage.cost.total > 0 || reportedUsage.totalTokens > 0) {\n\t\t\t\t\tthis.deps.addSpawnedUsage(reportedUsage, { label: \"worker-delegation\", reportId });\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.safeWarn(\n\t\t\t\t\t`Failed to persist canceled worker claim ${record.laneId}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.scheduler.cancelQueued();\n\t\tthis.writeReservations.dispose();\n\t}\n\n\tprivate getWorkerLifecycle(): WorkerLifecycle {\n\t\treturn this.lifecycle;\n\t}\n\n\tprivate getWorkerProfileResolver(): WorkerProfileResolver {\n\t\tif (this.profileResolver) return this.profileResolver;\n\t\tthis.profileResolver = new WorkerProfileResolver({\n\t\t\tagentDir: this.deps.getAgentDir(),\n\t\t\tcwd: this.deps.getCwd(),\n\t\t\tgetSettingsManager: () => this.deps.getSettingsManager(),\n\t\t\tgetResourceLoader: () => this.deps.getResourceLoader(),\n\t\t\tgetModelRegistry: () => this.deps.getModelRegistry(),\n\t\t\tisModelExhausted: (model) => this.deps.isModelExhausted(model),\n\t\t\tgetActiveOrchestrationProfile: () => this.deps.getActiveOrchestrationProfile?.(),\n\t\t\tonDiagnostic: (message) => this.safeWarn(message),\n\t\t});\n\t\treturn this.profileResolver;\n\t}\n\n\t/** Read-only durable worker projection. Undefined means the delegate capability never loaded. */\n\tgetTaskRuntimeSnapshot(): TaskRuntimeProjection | undefined {\n\t\treturn this.lifecycle.getTaskRuntimeSnapshot();\n\t}\n\n\t/** Reconcile the session goal into an already-loaded worker runtime without defeating lazy UAC. */\n\tsynchronizeGoalState(goal: GoalState): void {\n\t\tthis.publishGoalTerminalRecords(this.lifecycle.synchronizeGoalState(goal));\n\t}\n\n\tprivate publishGoalTerminalRecords(records: readonly LaneRecord[]): void {\n\t\tfor (const record of records) {\n\t\t\tthis.scheduler.dropQueued(record.laneId);\n\t\t\tthis.laneAbortControllers.get(record.laneId)?.abort(\"goal_terminal\");\n\t\t\tthis.publishTerminalRecord(record);\n\t\t}\n\t}\n\n\tprivate dispatchRecoveredVerification(\n\t\trecovery: Extract<PendingVerificationRecovery, { action: \"dispatch\" }>,\n\t): WorkerRecoveryDispatchResult {\n\t\tconst legacyImplementation = recovery.verifierExecutionContract\n\t\t\t? undefined\n\t\t\t: this.resolveWorkerAdmission({\n\t\t\t\t\tinstructions: recovery.summary,\n\t\t\t\t\tprofileId: recovery.implementationProfileId,\n\t\t\t\t});\n\t\tconst verifierProfileId =\n\t\t\trecovery.verifierExecutionContract?.worker.profile.profileId ??\n\t\t\t(legacyImplementation?.ok ? legacyImplementation.verifierShipment?.profile.profileId : undefined);\n\t\treturn verifierProfileId\n\t\t\t? this.startInternal(\n\t\t\t\t\tthis.buildVerifierRequest({\n\t\t\t\t\t\tsubjectTaskId: recovery.subjectTaskId,\n\t\t\t\t\t\tverifierProfileId,\n\t\t\t\t\t\tsummary: recovery.summary,\n\t\t\t\t\t\tartifactUris: recovery.artifactUris,\n\t\t\t\t\t}),\n\t\t\t\t\trecovery.verifierExecutionContract,\n\t\t\t\t)\n\t\t\t: { started: false, skipReason: \"independent_verifier_unavailable\" };\n\t}\n\n\tprivate laneCapabilityProfile(model: Model<Api>): ModelCapabilityProfile {\n\t\treturn deriveModelCapabilityProfile({\n\t\t\tcontextWindow: model.contextWindow,\n\t\t\tmode: this.deps.getSettingsManager().getModelCapabilitySettings().mode,\n\t\t});\n\t}\n\n\tgetProfileCatalog(): Array<{ profileId: string; role: string; description: string }> {\n\t\treturn this.getWorkerProfileResolver().catalog();\n\t}\n\n\tprivate resolveWorkerShipment(\n\t\trequest: WorkerDelegationRequest,\n\t\tsettings: ResolvedWorkerDelegationSettings,\n\t): { ok: true; shipment: ResolvedWorkerProfile } | { ok: false; skipReason: string } {\n\t\tconst resolved = this.getWorkerProfileResolver().resolve(request, settings.orchestrationProfile);\n\t\treturn resolved.ok ? { ok: true, shipment: resolved.resolved } : { ok: false, skipReason: resolved.reason };\n\t}\n\n\tprivate resolveRequiredVerifier(\n\t\tprofile: OrchestrationProfile,\n\t): { ok: true; shipment?: ResolvedWorkerProfile } | { ok: false; skipReason: string } {\n\t\tif (!profile.requireIndependentVerification) return { ok: true };\n\t\tconst resolved = this.getWorkerProfileResolver().resolveVerifier(profile);\n\t\treturn resolved.ok\n\t\t\t? { ok: true, shipment: resolved.resolved }\n\t\t\t: { ok: false, skipReason: `independent_verifier_unavailable:${resolved.reason}` };\n\t}\n\n\t/** Single admission contract shared by enqueue, scheduler revalidation, and execution. */\n\tprivate resolveWorkerAdmission(\n\t\trequest: WorkerDelegationRequest,\n\t\tpinnedContract?: WorkerExecutionContract,\n\t): WorkerAdmission {\n\t\tif (this.deps.isDisposed()) return { ok: false, skipReason: \"session_disposed\" };\n\t\tconst instructions = request.instructions.trim();\n\t\tif (!instructions) return { ok: false, skipReason: \"missing_instructions\" };\n\t\tif (!this.deps.isDelegateToolActive()) return { ok: false, skipReason: \"delegate_tool_inactive\" };\n\t\tconst settings = this.deps.getSettingsManager().getWorkerDelegationSettings();\n\t\tif (!settings.enabled) return { ok: false, skipReason: \"worker_delegation_disabled\" };\n\t\tif (pinnedContract && request.profileId && request.profileId !== pinnedContract.worker.profile.profileId) {\n\t\t\treturn { ok: false, skipReason: \"orchestration_execution_contract_mismatch\" };\n\t\t}\n\t\tconst resolved = pinnedContract\n\t\t\t? this.getWorkerProfileResolver().resolveContract(pinnedContract.worker)\n\t\t\t: this.resolveWorkerShipment(request, settings);\n\t\tif (!resolved.ok) {\n\t\t\treturn { ok: false, skipReason: \"skipReason\" in resolved ? resolved.skipReason : resolved.reason };\n\t\t}\n\t\tconst shipment = \"shipment\" in resolved ? resolved.shipment : resolved.resolved;\n\t\tif (request.verificationOfTaskId && shipment.profile.role !== \"verifier\") {\n\t\t\treturn { ok: false, skipReason: \"verification_profile_role_mismatch\" };\n\t\t}\n\t\tif (!request.verificationOfTaskId && shipment.profile.role === \"verifier\") {\n\t\t\treturn { ok: false, skipReason: \"verifier_profile_requires_runtime_dispatch\" };\n\t\t}\n\t\tlet verifierShipment: ResolvedWorkerProfile | undefined;\n\t\tif (pinnedContract?.verifier) {\n\t\t\tconst verifier = this.getWorkerProfileResolver().resolveContract(pinnedContract.verifier);\n\t\t\tif (!verifier.ok) {\n\t\t\t\treturn { ok: false, skipReason: `independent_verifier_unavailable:${verifier.reason}` };\n\t\t\t}\n\t\t\tverifierShipment = verifier.resolved;\n\t\t} else {\n\t\t\tconst verifier = this.resolveRequiredVerifier(shipment.profile);\n\t\t\tif (!verifier.ok) return verifier;\n\t\t\tverifierShipment = verifier.shipment;\n\t\t}\n\t\tif (!this.laneCapabilityProfile(shipment.model).backgroundLanesEnabled) {\n\t\t\treturn { ok: false, skipReason: \"model_delegation_unsupported\" };\n\t\t}\n\t\t// The model-facing delegate surface cannot name profile resources. An absent or empty\n\t\t// runtime selection therefore means \"use the owner-admitted profile set\", not \"drop it\".\n\t\t// Non-empty task metadata is an exact narrowing and remains fail-closed for unknown or\n\t\t// duplicate ids before any durable task or provider request is created.\n\t\tconst requestedResourcePointerIds = request.taskContext?.resourcePointerIds ?? [];\n\t\tconst selectedResources = selectWorkerResourcePointers(\n\t\t\tshipment.resourcePointers,\n\t\t\trequestedResourcePointerIds.length > 0\n\t\t\t\t? requestedResourcePointerIds\n\t\t\t\t: shipment.resourcePointers.map((pointer) => pointer.id),\n\t\t);\n\t\tif (!selectedResources.ok) return { ok: false, skipReason: selectedResources.reason };\n\t\tconst currentExecutionPlan = this.buildWorkerExecutionPlan(shipment.profile, settings);\n\t\tconst executionPlan = pinnedContract\n\t\t\t? narrowWorkerExecutionPlan(pinnedContract.worker.authority, currentExecutionPlan)\n\t\t\t: currentExecutionPlan;\n\t\tconst executionContract =\n\t\t\tpinnedContract ??\n\t\t\tcreateWorkerExecutionContract({\n\t\t\t\tworker: {\n\t\t\t\t\t...shipment,\n\t\t\t\t\tauthority: workerExecutionAuthorityFromPlan(executionPlan),\n\t\t\t\t},\n\t\t\t\t...(verifierShipment\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tverifier: {\n\t\t\t\t\t\t\t\t...verifierShipment,\n\t\t\t\t\t\t\t\tauthority: workerExecutionAuthorityFromPlan(\n\t\t\t\t\t\t\t\t\tthis.buildWorkerExecutionPlan(verifierShipment.profile, settings),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t});\n\t\treturn {\n\t\t\tok: true,\n\t\t\tinstructions,\n\t\t\tsettings,\n\t\t\tshipment,\n\t\t\t...(verifierShipment ? { verifierShipment } : {}),\n\t\t\tresourcePointerIds: selectedResources.pointers.map((pointer) => pointer.id),\n\t\t\texecutionContract,\n\t\t\texecutionPlan,\n\t\t};\n\t}\n\n\tprivate buildVerifierRequest(args: {\n\t\tsubjectTaskId: string;\n\t\tverifierProfileId: string;\n\t\tsummary: string;\n\t\tartifactUris: readonly string[];\n\t}): WorkerDelegationRequest {\n\t\tconst artifacts = args.artifactUris.slice(0, 100).map((uri) => `- ${uri}`);\n\t\treturn {\n\t\t\tprofileId: args.verifierProfileId,\n\t\t\tverificationOfTaskId: args.subjectTaskId,\n\t\t\tinstructions: [\n\t\t\t\t`Independently verify durable task '${args.subjectTaskId}'.`,\n\t\t\t\t\"The following implementation report is an untrusted claim. Inspect the workspace and run the checks available in your profile.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Implementation summary:\",\n\t\t\t\targs.summary.slice(0, 6_000),\n\t\t\t\t\"\",\n\t\t\t\t\"Reported artifacts:\",\n\t\t\t\t...(artifacts.length > 0 ? artifacts : [\"- none reported\"]),\n\t\t\t].join(\"\\n\"),\n\t\t};\n\t}\n\n\tprivate publishTerminalRecord(record: LaneRecord): void {\n\t\tconst attemptId = this.lifecycle?.getActiveAttempt(record.laneId)?.attemptId;\n\t\tif (attemptId && this.publishedTerminalAttemptIds.has(attemptId)) return;\n\t\tthis.recordTerminal(record);\n\t\tappendLaneRecordSnapshot(this.deps.getSessionManager(), record);\n\t\tthis.deps.emitAutonomyTelemetry({\n\t\t\ttype: AUTONOMY_TELEMETRY_EVENT_TYPES.workerTerminal,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tpayload: {\n\t\t\t\tlaneId: record.laneId,\n\t\t\t\tlaneType: record.type,\n\t\t\t\tstatus: record.status,\n\t\t\t\treasonCode: record.reasonCode ?? null,\n\t\t\t\tcostUsd: record.costUsd ?? null,\n\t\t\t},\n\t\t});\n\t\tif (attemptId) this.publishedTerminalAttemptIds.add(attemptId);\n\t}\n\n\t/**\n\t * A pre-execution denial still owns a prepared durable lane. Publish its terminal projection at\n\t * this boundary: immediate callers have no scheduler promise to observe and must not wait for a\n\t * future recovery read to receive the handoff. Repeated late cancellation paths are inert via\n\t * the attempt-id publication fence above.\n\t */\n\tprivate cancelAndPublish(lifecycle: WorkerLifecycle, laneId: string, reasonCode: string): LaneRecord | undefined {\n\t\tconst record = lifecycle.cancel(laneId, reasonCode);\n\t\tif (record) this.publishTerminalRecord(record);\n\t\treturn record;\n\t}\n\n\tprivate hasWorkerCapacity(settings: ResolvedWorkerDelegationSettings, profile: OrchestrationProfile): boolean {\n\t\tconst lifecycle = this.getWorkerLifecycle();\n\t\tif (lifecycle.getRunningCount() >= settings.maxConcurrent) return false;\n\t\treturn lifecycle.getRunningCount(profile.profileId) < profile.maxConcurrent;\n\t}\n\n\tprivate workerDispatchAdmission(request: WorkerDelegationRequest, record: LaneRecord): WorkerDispatchAdmission {\n\t\tconst contract = this.getWorkerLifecycle().getActiveAttempt(record.laneId)?.dispatch.executionContract;\n\t\tconst admission = this.resolveWorkerAdmission(request, contract);\n\t\tif (!admission.ok) return { action: \"cancel\", reasonCode: admission.skipReason };\n\t\tif (!this.hasWorkerCapacity(admission.settings, admission.shipment.profile))\n\t\t\treturn { action: \"wait\", reason: \"capacity\" };\n\t\tconst attempt = this.getWorkerLifecycle().getActiveAttempt(record.laneId);\n\t\tif (!attempt) return { action: \"cancel\", reasonCode: \"orchestration_attempt_missing\" };\n\t\tconst reservation = this.writeReservations.acquire(record.laneId, attempt, admission.executionPlan);\n\t\tif (reservation.kind === \"denied\") return { action: \"cancel\", reasonCode: reservation.reasonCode };\n\t\treturn reservation.kind === \"granted\" ? { action: \"start\" } : { action: \"wait\", reason: \"write_reservation\" };\n\t}\n\n\tprivate buildWorkerExecutionPlan(\n\t\tprofile: OrchestrationProfile,\n\t\tsettings: ResolvedWorkerDelegationSettings,\n\t): WorkerExecutionPlan {\n\t\treturn buildWorkerExecutionPlan({\n\t\t\tprofile,\n\t\t\tsettings,\n\t\t\tcwd: this.deps.getCwd(),\n\t\t\tdeniedPaths: getPrivateLaneDeniedPaths(this.deps.getCwd(), this.deps.getAgentDir()),\n\t\t\tforegroundMaxCostUsd: this.deps.getCapabilityEnvelope()?.maxEstimatedUsd,\n\t\t\tmemoryEnabled: this.deps.getSettingsManager().getMemoryRetrievalSettings().enabled,\n\t\t});\n\t}\n\n\t/** One durable preparation path for queued, immediate, and recovered execution. */\n\tprivate prepareWorkerAttempt(\n\t\trequest: WorkerDelegationRequest,\n\t\tadmission: Extract<WorkerAdmission, { ok: true }>,\n\t\texistingRecord?: LaneRecord,\n\t): PreparedWorkerAttempt {\n\t\tconst lifecycle = this.getWorkerLifecycle();\n\t\tif (existingRecord) {\n\t\t\treturn {\n\t\t\t\texecutionPlan: admission.executionPlan,\n\t\t\t\tlifecycle,\n\t\t\t\trecord: existingRecord,\n\t\t\t\tattempt: lifecycle.getActiveAttempt(existingRecord.laneId),\n\t\t\t};\n\t\t}\n\t\tconst goal = this.deps.getGoalStateSnapshot();\n\t\tconst prepared = lifecycle.prepare({\n\t\t\tinstructions: admission.instructions,\n\t\t\texecutionContract: admission.executionContract,\n\t\t\trequiredCapabilities: admission.executionPlan.requiredCapabilities,\n\t\t\t...(request.verificationOfTaskId ? { verificationOfTaskId: request.verificationOfTaskId } : {}),\n\t\t\ttaskContext: {\n\t\t\t\trequirementIds: request.taskContext?.requirementIds ?? [],\n\t\t\t\tdependsOnTaskIds: request.taskContext?.dependsOnTaskIds ?? [],\n\t\t\t\tacceptanceCriterionIds: request.taskContext?.acceptanceCriterionIds ?? [],\n\t\t\t\tresourcePointerIds: admission.resourcePointerIds,\n\t\t\t},\n\t\t\t...(goal ? { goal } : {}),\n\t\t});\n\t\treturn { executionPlan: admission.executionPlan, lifecycle, ...prepared };\n\t}\n\n\tstart(\n\t\trequest: WorkerDelegationRequest,\n\t): { started: false; skipReason: string } | { started: true; record: LaneRecord } {\n\t\treturn this.startInternal(request);\n\t}\n\n\tprivate startInternal(\n\t\trequest: WorkerDelegationRequest,\n\t\tpinnedContract?: WorkerExecutionContract,\n\t): { started: false; skipReason: string } | { started: true; record: LaneRecord } {\n\t\tconst admission = this.resolveWorkerAdmission(request, pinnedContract);\n\t\tif (!admission.ok) return { started: false, skipReason: admission.skipReason };\n\t\tif (!request.verificationOfTaskId) this.recovery.recover();\n\t\tconst { settings, shipment } = admission;\n\n\t\tconst foreground = this.deps.getModel();\n\t\tconst contendsWithLocalForeground =\n\t\t\tforeground !== undefined && isLocalExecutionModel(foreground) && isLocalExecutionModel(shipment.model);\n\t\tif (contendsWithLocalForeground || !this.hasWorkerCapacity(settings, shipment.profile)) {\n\t\t\t// A mandatory verifier is the continuation of an already admitted implementation, not a\n\t\t\t// new owner request. Reserve its queue admission so a burst of ordinary work cannot strand\n\t\t\t// the subject behind `independent_verification_required` with no terminal handoff.\n\t\t\tif (this.scheduler.queuedCount >= 8 && !request.verificationOfTaskId) {\n\t\t\t\treturn { started: false, skipReason: \"worker_delegation_queue_full\" };\n\t\t\t}\n\t\t\tlet record: LaneRecord;\n\t\t\ttry {\n\t\t\t\trecord = this.prepareWorkerAttempt(request, admission).record;\n\t\t\t} catch (error) {\n\t\t\t\tthis.safeWarn(\n\t\t\t\t\t`Worker dispatch was not persisted: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t);\n\t\t\t\treturn { started: false, skipReason: \"orchestration_ledger_error\" };\n\t\t\t}\n\t\t\tthis.scheduler.enqueue(\n\t\t\t\trecord,\n\t\t\t\t{ ...request, profileId: shipment.profile.profileId },\n\t\t\t\tfalse,\n\t\t\t\trequest.verificationOfTaskId !== undefined,\n\t\t\t);\n\t\t\tthis.notifications.statusChanged();\n\t\t\treturn { started: true, record };\n\t\t}\n\t\tlet startedRecord: LaneRecord | undefined;\n\t\tconst promise = this.runOnceWithAdmission(\n\t\t\trequest,\n\t\t\t(record) => {\n\t\t\t\tstartedRecord = record;\n\t\t\t},\n\t\t\tundefined,\n\t\t\tadmission,\n\t\t);\n\t\tif (!startedRecord) {\n\t\t\t// Preparation is synchronous up to the first isolated completion await. A promise that\n\t\t\t// rejected before producing a lane is still observed below, so it cannot become unhandled.\n\t\t\tvoid promise.catch(() => undefined);\n\t\t\treturn { started: false, skipReason: \"worker_not_started\" };\n\t\t}\n\t\tthis.scheduler.track(startedRecord.laneId, promise);\n\t\treturn { started: true, record: startedRecord };\n\t}\n\n\tasync runOnce(\n\t\trequest: WorkerDelegationRequest,\n\t\tonStarted?: (record: LaneRecord) => void,\n\t\texistingRecord?: LaneRecord,\n\t): Promise<WorkerDelegationRunOutcome> {\n\t\treturn this.runOnceWithAdmission(request, onStarted, existingRecord);\n\t}\n\n\tprivate async runOnceWithAdmission(\n\t\trequest: WorkerDelegationRequest,\n\t\tonStarted?: (record: LaneRecord) => void,\n\t\texistingRecord?: LaneRecord,\n\t\tpreparedAdmission?: Extract<WorkerAdmission, { ok: true }>,\n\t): Promise<WorkerDelegationRunOutcome> {\n\t\tconst pinnedContract = existingRecord\n\t\t\t? this.getWorkerLifecycle().getActiveAttempt(existingRecord.laneId)?.dispatch.executionContract\n\t\t\t: undefined;\n\t\tconst admission = preparedAdmission ?? this.resolveWorkerAdmission(request, pinnedContract);\n\t\tif (!admission.ok) return { started: false, skipReason: admission.skipReason };\n\t\tif (!request.verificationOfTaskId) this.recovery.recover();\n\t\tconst { instructions, settings, verifierShipment } = admission;\n\t\tconst { model, modelBinding, profile: orchestrationProfile, soul } = admission.shipment;\n\t\tif (!this.hasWorkerCapacity(settings, orchestrationProfile)) {\n\t\t\treturn { started: false, skipReason: \"worker_delegation_already_running\" };\n\t\t}\n\t\tconst laneCapability = this.laneCapabilityProfile(model);\n\t\tconst retentionPolicy = workerConversationRetentionPolicy(model, this.deps.getSettingsManager());\n\t\tconst prepared = this.prepareWorkerAttempt(request, admission, existingRecord);\n\t\tconst { executionPlan, lifecycle } = prepared;\n\t\tif (!prepared.attempt) return { started: false, skipReason: \"orchestration_attempt_missing\" };\n\t\tconst durableTask = lifecycle.getTask(prepared.record.laneId);\n\t\tif (!durableTask) return { started: false, skipReason: \"orchestration_task_missing\" };\n\t\tconst immutableWorker = prepared.attempt.dispatch.executionContract?.worker;\n\t\tif (!immutableWorker) return { started: false, skipReason: \"orchestration_execution_contract_missing\" };\n\t\tconst selectedResources = selectWorkerResourcePointers(\n\t\t\timmutableWorker.resourcePointers,\n\t\t\tprepared.attempt.dispatch.resourcePointerIds.length > 0\n\t\t\t\t? prepared.attempt.dispatch.resourcePointerIds\n\t\t\t\t: admission.resourcePointerIds,\n\t\t);\n\t\tif (!selectedResources.ok) {\n\t\t\tthis.cancelAndPublish(lifecycle, prepared.record.laneId, selectedResources.reason);\n\t\t\treturn { started: false, skipReason: selectedResources.reason };\n\t\t}\n\t\tlet grant: ExecutionGrant;\n\t\tlet workerResourceSystemPrompt: string;\n\t\tif (prepared.attempt.grant) {\n\t\t\tif (\n\t\t\t\t!this.recovery.durableGrantIsStillPermitted(\n\t\t\t\t\tprepared.attempt.grant,\n\t\t\t\t\texecutionPlan,\n\t\t\t\t\tselectedResources.pointers,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tthis.cancelAndPublish(lifecycle, prepared.record.laneId, \"recovered_grant_revoked\");\n\t\t\t\treturn { started: false, skipReason: \"recovered_grant_revoked\" };\n\t\t\t}\n\t\t\tgrant = prepared.attempt.grant;\n\t\t\tconst materialized = materializeWorkerResourceBundle(grant.resources);\n\t\t\tif (!materialized.ok) {\n\t\t\t\tconst reason = `worker_resource_materialization_${materialized.code}`;\n\t\t\t\tthis.cancelAndPublish(lifecycle, prepared.record.laneId, reason);\n\t\t\t\treturn { started: false, skipReason: reason };\n\t\t\t}\n\t\t\tworkerResourceSystemPrompt = materialized.systemPrompt;\n\t\t} else {\n\t\t\tconst materialized = materializeWorkerResourceBundle(selectedResources.pointers);\n\t\t\tif (!materialized.ok) {\n\t\t\t\tconst reason = `worker_resource_materialization_${materialized.code}`;\n\t\t\t\tthis.cancelAndPublish(lifecycle, prepared.record.laneId, reason);\n\t\t\t\treturn { started: false, skipReason: reason };\n\t\t\t}\n\t\t\tconst compiled = compileWorkerExecutionGrant({\n\t\t\t\ttarget: {\n\t\t\t\t\tobjectiveId: durableTask.task.objectiveId,\n\t\t\t\t\ttaskId: prepared.attempt.taskId,\n\t\t\t\t\tattemptId: prepared.attempt.attemptId,\n\t\t\t\t},\n\t\t\t\tprofile: orchestrationProfile,\n\t\t\t\tplan: executionPlan,\n\t\t\t\tresources: materialized.pointers,\n\t\t\t});\n\t\t\tif (!compiled.ok) {\n\t\t\t\tthis.cancelAndPublish(lifecycle, prepared.record.laneId, compiled.reasonCodes.join(\",\"));\n\t\t\t\treturn { started: false, skipReason: `execution_policy_denied:${compiled.reasonCodes.join(\",\")}` };\n\t\t\t}\n\t\t\tlifecycle.bindGrant(prepared.attempt.attemptId, compiled.grant);\n\t\t\tgrant = compiled.grant;\n\t\t\tworkerResourceSystemPrompt = materialized.systemPrompt;\n\t\t}\n\t\tconst immutableProfile = immutableWorker.profile;\n\t\t// Follow-up tasks deliberately receive unique task ids while retaining the original logical\n\t\t// agent id in dispatch metadata. Never derive a new agent identity from a follow-up task id.\n\t\tconst agentId = prepared.attempt.agentId ?? prepared.attempt.dispatch.logicalLaneId ?? prepared.record.laneId;\n\t\tconst registeredAgent = lifecycle.getAgent(agentId);\n\t\tif (prepared.attempt.agentId && !registeredAgent) {\n\t\t\tthis.cancelAndPublish(lifecycle, prepared.record.laneId, \"orchestration_agent_missing\");\n\t\t\treturn { started: false, skipReason: \"orchestration_agent_missing\" };\n\t\t}\n\t\tlet conversation: WorkerConversation;\n\t\ttry {\n\t\t\tif (registeredAgent) {\n\t\t\t\t// Recovery must trust only the registered resume context; reconstructing one here could\n\t\t\t\t// silently redirect a logical worker to a different transcript or resource scope.\n\t\t\t\tconversation = this.conversations.open({\n\t\t\t\t\tagentDir: this.deps.getAgentDir(),\n\t\t\t\t\tresumeContext: registeredAgent.resumeContext,\n\t\t\t\t\texpectedLogicalAgentId: registeredAgent.agentId,\n\t\t\t\t});\n\t\t\t\tif (prepared.attempt.status === \"suspended\") this.recovery.repairInterruptedToolResults(conversation);\n\t\t\t} else {\n\t\t\t\tconversation = this.conversations.ensure({\n\t\t\t\t\tagentDir: this.deps.getAgentDir(),\n\t\t\t\t\tparentSessionId: this.deps.getSessionId(),\n\t\t\t\t\tlogicalAgentId: agentId,\n\t\t\t\t\tcwd: this.deps.getCwd(),\n\t\t\t\t\torchestrationProfileId: immutableProfile.profileId,\n\t\t\t\t\tmodelRef: `${prepared.attempt.dispatch.executionContract!.worker.modelBinding.provider}/${prepared.attempt.dispatch.executionContract!.worker.modelBinding.modelId}`,\n\t\t\t\t\tresourceProfileNames: immutableProfile.resourceProfileNames,\n\t\t\t\t\tcontextPointers: grant.resources,\n\t\t\t\t});\n\t\t\t\tlifecycle.ensureAgent({\n\t\t\t\t\tagentId,\n\t\t\t\t\trole: immutableProfile.role,\n\t\t\t\t\tresumeContext: conversation.getResumeContext(),\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (prepared.attempt.status !== \"suspended\") {\n\t\t\t\tthis.cancelAndPublish(lifecycle, prepared.record.laneId, \"worker_conversation_unavailable\");\n\t\t\t}\n\t\t\tthis.safeWarn(`Worker conversation setup failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\treturn { started: false, skipReason: \"worker_conversation_unavailable\" };\n\t\t}\n\t\tconst reservation = this.writeReservations.acquire(prepared.record.laneId, prepared.attempt, executionPlan);\n\t\tif (reservation.kind === \"denied\") {\n\t\t\tthis.cancelAndPublish(lifecycle, prepared.record.laneId, reservation.reasonCode);\n\t\t\treturn { started: false, skipReason: reservation.reasonCode };\n\t\t}\n\t\tif (reservation.kind === \"blocked\") {\n\t\t\tthis.scheduler.enqueue(prepared.record, { ...request, profileId: admission.shipment.profile.profileId });\n\t\t\tthis.notifications.statusChanged();\n\t\t\tonStarted?.(prepared.record);\n\t\t\treturn { started: true, record: prepared.record };\n\t\t}\n\t\tlet durableHandle: StartedDelegationAttempt;\n\t\ttry {\n\t\t\tdurableHandle =\n\t\t\t\tregisteredAgent && prepared.attempt.status === \"suspended\"\n\t\t\t\t\t? lifecycle.resumeAgent(\n\t\t\t\t\t\t\tprepared.record.laneId,\n\t\t\t\t\t\t\tregisteredAgent.agentId,\n\t\t\t\t\t\t\timmutableProfile.leaseTtlMs,\n\t\t\t\t\t\t\tthis.agentControl.getProcessOwnerId(),\n\t\t\t\t\t\t)\n\t\t\t\t\t: lifecycle.startAgent(\n\t\t\t\t\t\t\tprepared.record.laneId,\n\t\t\t\t\t\t\tagentId,\n\t\t\t\t\t\t\timmutableProfile.leaseTtlMs,\n\t\t\t\t\t\t\tthis.agentControl.getProcessOwnerId(),\n\t\t\t\t\t\t);\n\t\t} catch (error) {\n\t\t\tthis.writeReservations.release(prepared.record.laneId);\n\t\t\tif (prepared.attempt.status !== \"suspended\")\n\t\t\t\tthis.cancelAndPublish(lifecycle, prepared.record.laneId, \"worker_start_unavailable\");\n\t\t\tthis.safeWarn(`Worker start failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\treturn { started: false, skipReason: \"worker_start_unavailable\" };\n\t\t}\n\t\tconst startedRecord = lifecycle.getRecord(prepared.record.laneId);\n\t\tif (!startedRecord) {\n\t\t\tthis.writeReservations.release(prepared.record.laneId);\n\t\t\treturn { started: false, skipReason: \"orchestration_projection_missing\" };\n\t\t}\n\t\tif (\n\t\t\tthis.writeReservations.hasFenceMismatch(\n\t\t\t\tstartedRecord.laneId,\n\t\t\t\tdurableHandle.attemptId,\n\t\t\t\tdurableHandle.fencingToken,\n\t\t\t)\n\t\t) {\n\t\t\tthis.writeReservations.release(startedRecord.laneId);\n\t\t\tconst record = this.cancelAndPublish(lifecycle, startedRecord.laneId, \"write_reservation_fence_mismatch\");\n\t\t\tthis.safeWarn(\"Worker write reservation fence did not match the durable attempt lease.\");\n\t\t\treturn { started: false, skipReason: record?.reasonCode ?? \"write_reservation_fence_mismatch\" };\n\t\t}\n\t\tconst recoveredTerminal =\n\t\t\tprepared.attempt.status === \"suspended\" ? this.recovery.recoveredTerminalCompletion(conversation) : undefined;\n\t\tconst checkpointUsage = lifecycle.getAttemptUsage(startedRecord.laneId);\n\t\tconst initialUsage = this.recovery.initialUsage(conversation, checkpointUsage);\n\t\tonStarted?.(startedRecord);\n\t\tconst maxUsd = grant.budget.maxCostUsd;\n\t\tconst executionPolicy = orchestrationProfile.executionPolicy;\n\t\tconst toolSurface = createLaneToolSurface({\n\t\t\tcwd: this.deps.getCwd(),\n\t\t\treadMemory: executionPlan.readMemory ? (query) => this.deps.readMemoryForLane(query) : undefined,\n\t\t\twriteEnabled: executionPlan.writeEnabled,\n\t\t\twritePaths: executionPlan.writePaths,\n\t\t\t...(executionPlan.processEnabled && executionPolicy ? { executionPolicy } : {}),\n\t\t\tprocessMaxWallClockMs: grant.budget.maxWallClockMs ?? 0,\n\t\t\tgrant,\n\t\t\ttoolManifests: executionPlan.toolManifests,\n\t\t\tinitialUsage,\n\t\t});\n\t\tconst writeGranted =\n\t\t\texecutionPlan.writeEnabled &&\n\t\t\ttoolSurface.gateway !== undefined &&\n\t\t\ttoolSurface.allowedTools.some((name) => name === \"write\" || name === \"edit\");\n\t\tconst workerRequest: WorkerRequest = {\n\t\t\tid: startedRecord.laneId,\n\t\t\tinstructions,\n\t\t\troute: {\n\t\t\t\ttier: \"cheap\",\n\t\t\t\trisk: writeGranted ? \"scoped-write\" : \"read-only\",\n\t\t\t\tconfidence: 1,\n\t\t\t\treasonCode: \"profile_worker\",\n\t\t\t\treasons: [writeGranted ? \"Path-scoped worker delegation\" : \"Read-only worker delegation\"],\n\t\t\t},\n\t\t\tenvelope: {\n\t\t\t\tid: `worker-${this.deps.getSessionId()}-${startedRecord.laneId}`,\n\t\t\t\tprofileId: orchestrationProfile.profileId,\n\t\t\t\t// filesystem.write requires BOTH the opt-in AND an explicit non-empty path scope —\n\t\t\t\t// an unscoped write grant is refused here, not discovered at validation time.\n\t\t\t\tcapabilities: [...grant.capabilities],\n\t\t\t\t...(writeGranted ? { allowedPaths: [...grant.writePaths] } : {}),\n\t\t\t\tdeniedPaths: [...grant.deniedPaths],\n\t\t\t\tallowedTools: [...toolSurface.allowedTools],\n\t\t\t\tdeniedTools: [...toolSurface.deniedTools],\n\t\t\t\t...(maxUsd !== undefined ? { maxEstimatedUsd: maxUsd } : {}),\n\t\t\t\tcreatedAt: new Date().toISOString(),\n\t\t\t},\n\t\t\t...(maxUsd !== undefined ? { maxEstimatedUsd: maxUsd } : {}),\n\t\t\tcreatedAt: new Date().toISOString(),\n\t\t};\n\t\t// Worker delegation START. Routing/scope codes + budget only — never the instructions text.\n\t\tthis.deps.emitAutonomyTelemetry({\n\t\t\ttype: AUTONOMY_TELEMETRY_EVENT_TYPES.workerRequest,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tpayload: {\n\t\t\t\tid: workerRequest.id,\n\t\t\t\ttier: workerRequest.route.tier,\n\t\t\t\tcapabilities: [...workerRequest.envelope.capabilities],\n\t\t\t\tmaxEstimatedUsd: workerRequest.maxEstimatedUsd ?? null,\n\t\t\t},\n\t\t});\n\t\tconst usageReportId = `worker:${this.deps.getSessionId()}:${startedRecord.laneId}`;\n\t\tconst laneAbortController = new AbortController();\n\t\tthis.laneAbortControllers.set(startedRecord.laneId, laneAbortController);\n\t\tconst workerSignal = AbortSignal.any([this.workerAbort.signal, laneAbortController.signal]);\n\n\t\t// Registered for the lane's full run so the reload gate waits it out; deregistered in the\n\t\t// finally below no matter how this lane terminates (success, disposal, or a thrown error).\n\t\t// registerInFlightWork is a pure sync map op (cannot throw), so placing it as the last\n\t\t// statement before `try` still guarantees the matching finally always runs.\n\t\tconst deregisterInFlight = registerInFlightWork(\n\t\t\tthis.deps.getAgentDir(),\n\t\t\t\"lane\",\n\t\t\t`worker:${startedRecord.laneId}`,\n\t\t);\n\t\tconst executor = createWorkerAttemptExecutor({\n\t\t\trequest: workerRequest,\n\t\t\tgrant,\n\t\t\texecutionPlan,\n\t\t\ttoolSurface,\n\t\t\tconversation,\n\t\t\tlifecycle,\n\t\t\tlaneId: startedRecord.laneId,\n\t\t\tagentId,\n\t\t\tdurableHandle,\n\t\t\tparentSessionId: this.deps.getSessionId(),\n\t\t\tagentDir: this.deps.getAgentDir(),\n\t\t\tcwd: this.deps.getCwd(),\n\t\t\tmodel,\n\t\t\tthinkingLevel: modelBinding.thinkingLevel,\n\t\t\tlaneCapability,\n\t\t\t...(soul ? { soul } : {}),\n\t\t\tworkerResourceSystemPrompt,\n\t\t\tinitialUsage,\n\t\t\thasPersistedUsageCheckpoint: checkpointUsage !== undefined,\n\t\t\tusageReportId,\n\t\t\tprocessCapable: executionPlan.processEnabled,\n\t\t\t...(request.verificationOfTaskId ? { verificationSubjectTaskId: request.verificationOfTaskId } : {}),\n\t\t\t...(recoveredTerminal ? { recoveredTerminal } : {}),\n\t\t\t...(retentionPolicy ? { retentionPolicy } : {}),\n\t\t\tsignal: workerSignal,\n\t\t\trunIsolatedCompletion: (options) => this.deps.runIsolatedCompletion(options),\n\t\t\tagentControl: this.agentControl,\n\t\t\tapplyActions: workerRequest.envelope.capabilities.includes(\"filesystem.write\")\n\t\t\t\t? (actions, actionJournal) =>\n\t\t\t\t\t\tapplyWorkerActions({\n\t\t\t\t\t\t\tactions,\n\t\t\t\t\t\t\tgateway: toolSurface.gateway!,\n\t\t\t\t\t\t\ttoolManifests: executionPlan.toolManifests,\n\t\t\t\t\t\t\tcwd: this.deps.getCwd(),\n\t\t\t\t\t\t\t...(actionJournal ? { actionJournal } : {}),\n\t\t\t\t\t\t})\n\t\t\t\t: undefined,\n\t\t\twarn: (message) => this.safeWarn(message),\n\t\t});\n\t\ttry {\n\t\t\t// Register before the first execution await: disposal sees the live mutable ledger.\n\t\t\tthis.inFlightLedgers.set(startedRecord.laneId, {\n\t\t\t\tchangedFiles: executor.ledger.changedFiles,\n\t\t\t\tgetUsage: executor.ledger.getUsage,\n\t\t\t\trequest: workerRequest,\n\t\t\t\thandle: durableHandle,\n\t\t\t});\n\t\t\tconst executionResult = await executor.run();\n\t\t\tconst rawOutcome = executionResult.rawOutcome;\n\t\t\tconst verificationRequired =\n\t\t\t\torchestrationProfile.requireIndependentVerification &&\n\t\t\t\torchestrationProfile.role !== \"verifier\" &&\n\t\t\t\trawOutcome.claim.status === \"completed\";\n\t\t\tconst outcome = verificationRequired\n\t\t\t\t? {\n\t\t\t\t\t\t...rawOutcome,\n\t\t\t\t\t\taccepted: false,\n\t\t\t\t\t\treasonCode: \"independent_verification_required\",\n\t\t\t\t\t\tacceptance: {\n\t\t\t\t\t\t\toutcome: \"ask-user\" as const,\n\t\t\t\t\t\t\tgate: \"independent_verification\",\n\t\t\t\t\t\t\treasonCode: \"independent_verification_required\",\n\t\t\t\t\t\t\tmessage: \"The owner-authored profile requires an independent verifier before acceptance.\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclaim: {\n\t\t\t\t\t\t\t...rawOutcome.claim,\n\t\t\t\t\t\t\tparentReviewRequired: true,\n\t\t\t\t\t\t\tblockers: [\n\t\t\t\t\t\t\t\t...(rawOutcome.claim.blockers ?? []),\n\t\t\t\t\t\t\t\t\"independent verification is required before acceptance\",\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: rawOutcome;\n\n\t\t\t// Never persist against a disposed session. When disposal raced this\n\t\t\t// await, `abortInFlightLanes()`'s synchronous cutoff already completed this lane, persisted\n\t\t\t// its durable lane record + bounded WorkerClaim, and consumed (deleted) the ledger —\n\t\t\t// `.complete()` below is then a no-op (the lane is already terminal, so it returns\n\t\t\t// undefined) and no double persistence or duplicate terminal notification can happen here.\n\t\t\tif (this.deps.isDisposed()) {\n\t\t\t\tconst record = lifecycle.getRecord(startedRecord.laneId);\n\t\t\t\treturn { started: true, record, outcome };\n\t\t\t}\n\n\t\t\tconst verificationSubject = request.verificationOfTaskId\n\t\t\t\t? lifecycle.getTask(request.verificationOfTaskId)\n\t\t\t\t: undefined;\n\t\t\tconst finalUsage = executionResult.usage;\n\t\t\tconst reportedUsage = providerUsageFromAttemptUsage(finalUsage);\n\t\t\tlet record = finalizeWorkerClaim(lifecycle, {\n\t\t\t\thandle: durableHandle,\n\t\t\t\tclaim: outcome.claim,\n\t\t\t\taccepted: outcome.accepted,\n\t\t\t\tcostUsd: finalUsage.costUsd,\n\t\t\t\treasonCode: outcome.reasonCode,\n\t\t\t\tcwd: this.deps.getCwd(),\n\t\t\t\tinputTokens: finalUsage.inputTokens,\n\t\t\t\toutputTokens: finalUsage.outputTokens,\n\t\t\t\ttotalTokens: reportedUsage.totalTokens,\n\t\t\t\twallClockMs: finalUsage.activeWallClockMs,\n\t\t\t\ttoolCalls: finalUsage.toolCalls,\n\t\t\t\tverificationRequired,\n\t\t\t\tverificationCriterionIds: verificationSubject?.task.acceptanceCriterionIds,\n\t\t\t\tnotify: !verificationRequired,\n\t\t\t}).record;\n\t\t\ttry {\n\t\t\t\tthis.deps.saveWorkerClaimSnapshot(outcome.claim, workerRequest);\n\t\t\t} catch (error) {\n\t\t\t\tthis.safeWarn(\n\t\t\t\t\t`Failed to persist worker claim ${startedRecord.laneId}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (reportedUsage.cost.total > 0 || reportedUsage.totalTokens > 0) {\n\t\t\t\tthis.deps.addSpawnedUsage(reportedUsage, { label: \"worker-delegation\", reportId: usageReportId });\n\t\t\t}\n\n\t\t\tconst terminalRecords: LaneRecord[] = [record];\n\t\t\tif (request.verificationOfTaskId) {\n\t\t\t\tconst decision = outcome.accepted ? outcome.claim.verification : undefined;\n\t\t\t\tconst subject = lifecycle.reconcileVerification({\n\t\t\t\t\tsubjectTaskId: request.verificationOfTaskId,\n\t\t\t\t\tverifierTaskId: startedRecord.laneId,\n\t\t\t\t\tverifierAttemptId: durableHandle.attemptId,\n\t\t\t\t\tverdict: decision?.verdict ?? \"inconclusive\",\n\t\t\t\t\treasonCode: decision\n\t\t\t\t\t\t? decision.verdict === \"accepted\"\n\t\t\t\t\t\t\t? \"independent_verification_accepted\"\n\t\t\t\t\t\t\t: `independent_verification_rejected:${decision.reasonCodes.join(\",\")}`\n\t\t\t\t\t\t: `independent_verification_inconclusive:${outcome.reasonCode}`,\n\t\t\t\t});\n\t\t\t\tterminalRecords.push(subject);\n\t\t\t} else if (verificationRequired) {\n\t\t\t\tconst verifierStart = verifierShipment\n\t\t\t\t\t? this.startInternal(\n\t\t\t\t\t\t\tthis.buildVerifierRequest({\n\t\t\t\t\t\t\t\tsubjectTaskId: startedRecord.laneId,\n\t\t\t\t\t\t\t\tverifierProfileId: verifierShipment.profile.profileId,\n\t\t\t\t\t\t\t\tsummary: rawOutcome.claim.summary,\n\t\t\t\t\t\t\t\tartifactUris: rawOutcome.claim.changedFiles,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tverifierWorkerExecutionContract(admission.executionContract),\n\t\t\t\t\t\t)\n\t\t\t\t\t: { started: false as const, skipReason: \"independent_verifier_unavailable\" };\n\t\t\t\tif (verifierStart.started) {\n\t\t\t\t\t// The durable verifier dispatch is now the terminal-work owner. The subject remains\n\t\t\t\t\t// blocked and emits no compatibility terminal snapshot until reconciliation.\n\t\t\t\t\tterminalRecords.length = 0;\n\t\t\t\t\tthis.scheduler.drain();\n\t\t\t\t} else {\n\t\t\t\t\tthis.safeWarn(\n\t\t\t\t\t\t`Independent verifier for ${startedRecord.laneId} did not start: ${verifierStart.skipReason}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (outcome.acceptance.outcome === \"ask-user\" && terminalRecords.length > 0) {\n\t\t\t\tthis.deps.queueWorkerHumanInput({\n\t\t\t\t\tworkerRequestId: startedRecord.laneId,\n\t\t\t\t\tmessage: outcome.acceptance.message ?? \"Worker output requires owner review.\",\n\t\t\t\t\tblockers: outcome.claim.blockers ?? [],\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (const terminalRecord of terminalRecords) {\n\t\t\t\tthis.publishTerminalRecord(terminalRecord);\n\t\t\t}\n\t\t\tif (request.verificationOfTaskId) {\n\t\t\t\trecord = lifecycle.getRecord(startedRecord.laneId) ?? record;\n\t\t\t}\n\t\t\treturn { started: true, record, outcome };\n\t\t} catch (error) {\n\t\t\tconst durableState = lifecycle.ledger.runtime.getSnapshot().attempts[durableHandle.attemptId];\n\t\t\tif (durableState?.status === \"suspended\") {\n\t\t\t\t// Disposal/reload fences agent-bound work before its aborted completion unwinds. Do not\n\t\t\t\t// convert that resumable interruption into a terminal claim or cancellation.\n\t\t\t\treturn { started: true, record: lifecycle.getRecord(startedRecord.laneId) };\n\t\t\t}\n\t\t\tif (durableState?.status === \"cancelled\" && (laneAbortController.signal.aborted || this.deps.isDisposed())) {\n\t\t\t\treturn { started: true, record: lifecycle.getRecord(startedRecord.laneId) };\n\t\t\t}\n\t\t\tif (durableState?.status === \"running\" || durableState?.status === \"leased\") {\n\t\t\t\tconst failureClaim: WorkerClaim = {\n\t\t\t\t\trequestId: startedRecord.laneId,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\tsummary: `Worker delegation failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\tchangedFiles: [],\n\t\t\t\t\tcreatedAt: new Date().toISOString(),\n\t\t\t\t};\n\t\t\t\ttry {\n\t\t\t\t\tconst failureUsage = executor.checkpointUsage(\n\t\t\t\t\t\t\"Persisted cumulative usage while recording worker failure.\",\n\t\t\t\t\t);\n\t\t\t\t\tconst reportedUsage = providerUsageFromAttemptUsage(failureUsage);\n\t\t\t\t\tfinalizeWorkerClaim(lifecycle, {\n\t\t\t\t\t\thandle: durableHandle,\n\t\t\t\t\t\tclaim: failureClaim,\n\t\t\t\t\t\taccepted: false,\n\t\t\t\t\t\tcostUsd: failureUsage.costUsd,\n\t\t\t\t\t\tcwd: this.deps.getCwd(),\n\t\t\t\t\t\tinputTokens: failureUsage.inputTokens,\n\t\t\t\t\t\toutputTokens: failureUsage.outputTokens,\n\t\t\t\t\t\ttotalTokens: reportedUsage.totalTokens,\n\t\t\t\t\t\twallClockMs: failureUsage.activeWallClockMs,\n\t\t\t\t\t\ttoolCalls: failureUsage.toolCalls,\n\t\t\t\t\t\treasonCode: \"worker_delegation_error\",\n\t\t\t\t\t});\n\t\t\t\t} catch (persistError) {\n\t\t\t\t\tthis.safeWarn(\n\t\t\t\t\t\t`Failed to persist durable worker failure ${startedRecord.laneId}: ${persistError instanceof Error ? persistError.message : String(persistError)}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet record = lifecycle.getRecord(startedRecord.laneId);\n\t\t\tif (record?.status === \"queued\" || record?.status === \"running\") {\n\t\t\t\trecord = this.cancelAndPublish(lifecycle, startedRecord.laneId, \"worker_delegation_error\");\n\t\t\t}\n\t\t\tif (record && !this.deps.isDisposed()) this.publishTerminalRecord(record);\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.deps.emit({ type: \"warning\", message: `Worker delegation failed: ${message}` });\n\t\t\treturn { started: true, record };\n\t\t} finally {\n\t\t\tthis.writeReservations.release(startedRecord.laneId, durableHandle.attemptId, durableHandle.fencingToken);\n\t\t\tthis.inFlightLedgers.delete(startedRecord.laneId);\n\t\t\tthis.laneAbortControllers.delete(startedRecord.laneId);\n\t\t\tthis.agentControl.signalStateChanged();\n\t\t\tderegisterInFlight();\n\t\t}\n\t}\n\n\t/** Start every capacity-eligible queued worker at the owner session's foreground-idle boundary. */\n\tdrain(): void {\n\t\tthis.recovery.recover();\n\t\tthis.scheduler.drain();\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"worker-delegation-controller.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-delegation-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,21 +49,12 @@ function workerConversationRetentionPolicy(model, settingsManager) {
|
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
51
|
export class WorkerDelegationController {
|
|
52
|
-
deps;
|
|
53
|
-
workerAbort = new AbortController();
|
|
54
|
-
lifecycle;
|
|
55
|
-
profileResolver;
|
|
56
|
-
recovery;
|
|
57
|
-
notifications;
|
|
58
|
-
scheduler;
|
|
59
|
-
laneAbortControllers = new Map();
|
|
60
|
-
/** Sole logical-agent control/mailbox owner; execution only calls its narrow delivery hooks. */
|
|
61
|
-
agentControl;
|
|
62
|
-
publishedTerminalAttemptIds = new Set();
|
|
63
|
-
conversations = new WorkerConversationStore();
|
|
64
|
-
writeReservations;
|
|
65
|
-
inFlightLedgers = new Map();
|
|
66
52
|
constructor(deps, notifications, lifecycle) {
|
|
53
|
+
this.workerAbort = new AbortController();
|
|
54
|
+
this.laneAbortControllers = new Map();
|
|
55
|
+
this.publishedTerminalAttemptIds = new Set();
|
|
56
|
+
this.conversations = new WorkerConversationStore();
|
|
57
|
+
this.inFlightLedgers = new Map();
|
|
67
58
|
this.deps = deps;
|
|
68
59
|
this.notifications = notifications;
|
|
69
60
|
this.lifecycle = lifecycle;
|