@caupulican/pi-adaptative 0.94.0 → 0.95.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +55 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/README.md +32 -13
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts +7 -4
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +173 -293
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +247 -392
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.d.ts +52 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.d.ts.map +1 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.js +118 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.js.map +1 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.ts +169 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/templates/builder-validator.json +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/templates/provider-prompt-smoke.json +1 -1
- package/dist/bundled-resources/skills/pi-harness-learning/SKILL.md +13 -7
- package/dist/bundled-resources/skills/worker-profile-writer/SKILL.md +11 -11
- package/dist/core/agent-paths.d.ts +2 -0
- package/dist/core/agent-paths.d.ts.map +1 -1
- package/dist/core/agent-paths.js +7 -0
- package/dist/core/agent-paths.js.map +1 -1
- package/dist/core/agent-session.d.ts +11 -41
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +98 -161
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/autonomy/envelope-enforcement.d.ts +6 -1
- package/dist/core/autonomy/envelope-enforcement.d.ts.map +1 -1
- package/dist/core/autonomy/envelope-enforcement.js +26 -25
- package/dist/core/autonomy/envelope-enforcement.js.map +1 -1
- package/dist/core/autonomy/lane-private-paths.d.ts.map +1 -1
- package/dist/core/autonomy/lane-private-paths.js +2 -1
- package/dist/core/autonomy/lane-private-paths.js.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.d.ts +8 -8
- package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.js +45 -30
- package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
- package/dist/core/autonomy/worker-session-private-scope.d.ts +12 -0
- package/dist/core/autonomy/worker-session-private-scope.d.ts.map +1 -0
- package/dist/core/autonomy/worker-session-private-scope.js +42 -0
- package/dist/core/autonomy/worker-session-private-scope.js.map +1 -0
- package/dist/core/autonomy/worker-tool-adapter-registry.d.ts +65 -0
- package/dist/core/autonomy/worker-tool-adapter-registry.d.ts.map +1 -0
- package/dist/core/autonomy/worker-tool-adapter-registry.js +145 -0
- package/dist/core/autonomy/worker-tool-adapter-registry.js.map +1 -0
- package/dist/core/background-lane-controller.d.ts +9 -1
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +76 -6
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/background-tool-task-controller.d.ts +23 -2
- package/dist/core/background-tool-task-controller.d.ts.map +1 -1
- package/dist/core/background-tool-task-controller.js +132 -17
- package/dist/core/background-tool-task-controller.js.map +1 -1
- package/dist/core/context/long-term-memory-trigger.d.ts +3 -1
- package/dist/core/context/long-term-memory-trigger.d.ts.map +1 -1
- package/dist/core/context/long-term-memory-trigger.js +1 -1
- package/dist/core/context/long-term-memory-trigger.js.map +1 -1
- package/dist/core/context/okf-memory-provider.d.ts +3 -0
- package/dist/core/context/okf-memory-provider.d.ts.map +1 -1
- package/dist/core/context/okf-memory-provider.js +66 -31
- package/dist/core/context/okf-memory-provider.js.map +1 -1
- package/dist/core/context/okf-memory.d.ts +18 -1
- package/dist/core/context/okf-memory.d.ts.map +1 -1
- package/dist/core/context/okf-memory.js +48 -0
- package/dist/core/context/okf-memory.js.map +1 -1
- package/dist/core/cost-guard-controller.d.ts +37 -0
- package/dist/core/cost-guard-controller.d.ts.map +1 -0
- package/dist/core/cost-guard-controller.js +71 -0
- package/dist/core/cost-guard-controller.js.map +1 -0
- package/dist/core/cost-guard.d.ts +9 -4
- package/dist/core/cost-guard.d.ts.map +1 -1
- package/dist/core/cost-guard.js +7 -3
- package/dist/core/cost-guard.js.map +1 -1
- package/dist/core/delegation/worker-agent-control.d.ts +4 -0
- package/dist/core/delegation/worker-agent-control.d.ts.map +1 -1
- package/dist/core/delegation/worker-agent-control.js.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.js +0 -1
- package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
- package/dist/core/delegation/worker-authority-resolver.d.ts +16 -3
- package/dist/core/delegation/worker-authority-resolver.d.ts.map +1 -1
- package/dist/core/delegation/worker-authority-resolver.js +114 -55
- package/dist/core/delegation/worker-authority-resolver.js.map +1 -1
- package/dist/core/delegation/worker-claim.d.ts +1 -2
- 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-delegation-controller.d.ts +19 -6
- package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.js +125 -40
- package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
- package/dist/core/delegation/worker-delegation-request.d.ts +3 -3
- package/dist/core/delegation/worker-delegation-request.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-request.js +13 -19
- package/dist/core/delegation/worker-delegation-request.js.map +1 -1
- package/dist/core/delegation/worker-execution-policy.d.ts +3 -2
- package/dist/core/delegation/worker-execution-policy.d.ts.map +1 -1
- package/dist/core/delegation/worker-execution-policy.js +54 -39
- package/dist/core/delegation/worker-execution-policy.js.map +1 -1
- package/dist/core/delegation/worker-fleet-limits.d.ts +3 -3
- package/dist/core/delegation/worker-fleet-limits.d.ts.map +1 -1
- package/dist/core/delegation/worker-fleet-limits.js +7 -7
- package/dist/core/delegation/worker-fleet-limits.js.map +1 -1
- package/dist/core/delegation/worker-machine-scope.d.ts +12 -0
- package/dist/core/delegation/worker-machine-scope.d.ts.map +1 -0
- package/dist/core/delegation/worker-machine-scope.js +38 -0
- package/dist/core/delegation/worker-machine-scope.js.map +1 -0
- package/dist/core/delegation/worker-notification-coordinator.d.ts +10 -0
- package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-notification-coordinator.js +69 -3
- package/dist/core/delegation/worker-notification-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-recovery-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-recovery-coordinator.js +6 -1
- package/dist/core/delegation/worker-recovery-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-runner.d.ts +5 -7
- package/dist/core/delegation/worker-runner.d.ts.map +1 -1
- package/dist/core/delegation/worker-runner.js +1 -4
- package/dist/core/delegation/worker-runner.js.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts +3 -2
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.js +50 -25
- package/dist/core/delegation/worker-write-reservation-coordinator.js.map +1 -1
- package/dist/core/durable-custom-message-turn-controller.d.ts +6 -0
- package/dist/core/durable-custom-message-turn-controller.d.ts.map +1 -1
- package/dist/core/durable-custom-message-turn-controller.js +38 -15
- package/dist/core/durable-custom-message-turn-controller.js.map +1 -1
- package/dist/core/extension-binding-controller.d.ts +5 -1
- package/dist/core/extension-binding-controller.d.ts.map +1 -1
- package/dist/core/extension-binding-controller.js +15 -0
- package/dist/core/extension-binding-controller.js.map +1 -1
- package/dist/core/extensions/factory-runtime.d.ts.map +1 -1
- package/dist/core/extensions/factory-runtime.js +5 -0
- package/dist/core/extensions/factory-runtime.js.map +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +1 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +8 -4
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.d.ts +31 -0
- package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.js +239 -55
- package/dist/core/foreground-terminal-handoff-controller.js.map +1 -1
- package/dist/core/goals/goal-session-controller.d.ts +2 -0
- package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-session-controller.js +8 -0
- package/dist/core/goals/goal-session-controller.js.map +1 -1
- package/dist/core/goals/goal-tool-core.d.ts +5 -4
- package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
- package/dist/core/goals/goal-tool-core.js +23 -19
- package/dist/core/goals/goal-tool-core.js.map +1 -1
- package/dist/core/learning/auto-learn-settings.d.ts +84 -0
- package/dist/core/learning/auto-learn-settings.d.ts.map +1 -0
- package/dist/core/learning/auto-learn-settings.js +66 -0
- package/dist/core/learning/auto-learn-settings.js.map +1 -0
- package/dist/core/learning/learning-audit.d.ts +5 -1
- package/dist/core/learning/learning-audit.d.ts.map +1 -1
- package/dist/core/learning/learning-audit.js +32 -1
- package/dist/core/learning/learning-audit.js.map +1 -1
- package/dist/core/learning/reflection-engine.d.ts +24 -0
- package/dist/core/learning/reflection-engine.d.ts.map +1 -1
- package/dist/core/learning/reflection-engine.js +104 -8
- package/dist/core/learning/reflection-engine.js.map +1 -1
- package/dist/core/local-prefix-warm-controller.d.ts +24 -0
- package/dist/core/local-prefix-warm-controller.d.ts.map +1 -0
- package/dist/core/local-prefix-warm-controller.js +79 -0
- package/dist/core/local-prefix-warm-controller.js.map +1 -0
- package/dist/core/memory/okf-project-memory-store.d.ts +28 -0
- package/dist/core/memory/okf-project-memory-store.d.ts.map +1 -0
- package/dist/core/memory/okf-project-memory-store.js +111 -0
- package/dist/core/memory/okf-project-memory-store.js.map +1 -0
- package/dist/core/memory/providers/file-store.d.ts +44 -1
- package/dist/core/memory/providers/file-store.d.ts.map +1 -1
- package/dist/core/memory/providers/file-store.js +341 -24
- package/dist/core/memory/providers/file-store.js.map +1 -1
- package/dist/core/memory/worker-memory-tools.d.ts +5 -0
- package/dist/core/memory/worker-memory-tools.d.ts.map +1 -0
- package/dist/core/memory/worker-memory-tools.js +5 -0
- package/dist/core/memory/worker-memory-tools.js.map +1 -0
- package/dist/core/memory-controller.d.ts +10 -1
- package/dist/core/memory-controller.d.ts.map +1 -1
- package/dist/core/memory-controller.js +72 -8
- package/dist/core/memory-controller.js.map +1 -1
- package/dist/core/model-capability.d.ts +7 -0
- package/dist/core/model-capability.d.ts.map +1 -1
- package/dist/core/model-capability.js +12 -0
- package/dist/core/model-capability.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +2 -10
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-router-controller.d.ts +3 -2
- package/dist/core/model-router-controller.d.ts.map +1 -1
- package/dist/core/model-router-controller.js +3 -2
- package/dist/core/model-router-controller.js.map +1 -1
- package/dist/core/orchestration/contracts.d.ts +16 -12
- package/dist/core/orchestration/contracts.d.ts.map +1 -1
- package/dist/core/orchestration/contracts.js +2 -2
- package/dist/core/orchestration/contracts.js.map +1 -1
- package/dist/core/orchestration/lane-tool-manifests.d.ts +2 -2
- package/dist/core/orchestration/lane-tool-manifests.d.ts.map +1 -1
- package/dist/core/orchestration/lane-tool-manifests.js +6 -1
- package/dist/core/orchestration/lane-tool-manifests.js.map +1 -1
- package/dist/core/orchestration/profile-registry.d.ts.map +1 -1
- package/dist/core/orchestration/profile-registry.js +14 -0
- package/dist/core/orchestration/profile-registry.js.map +1 -1
- package/dist/core/orchestration/task-profile-writer.d.ts +7 -4
- package/dist/core/orchestration/task-profile-writer.d.ts.map +1 -1
- package/dist/core/orchestration/task-profile-writer.js +71 -59
- package/dist/core/orchestration/task-profile-writer.js.map +1 -1
- package/dist/core/orchestration/thinking-level-schema.d.ts +7 -0
- package/dist/core/orchestration/thinking-level-schema.d.ts.map +1 -0
- package/dist/core/orchestration/thinking-level-schema.js +19 -0
- package/dist/core/orchestration/thinking-level-schema.js.map +1 -0
- package/dist/core/orchestration/worker-execution-contract.d.ts.map +1 -1
- package/dist/core/orchestration/worker-execution-contract.js +12 -5
- package/dist/core/orchestration/worker-execution-contract.js.map +1 -1
- package/dist/core/provider-prompt-contracts.d.ts +1 -4
- package/dist/core/provider-prompt-contracts.d.ts.map +1 -1
- package/dist/core/provider-prompt-contracts.js +13 -29
- package/dist/core/provider-prompt-contracts.js.map +1 -1
- package/dist/core/provider-request-context-controller.d.ts +2 -0
- package/dist/core/provider-request-context-controller.d.ts.map +1 -1
- package/dist/core/provider-request-context-controller.js +10 -3
- package/dist/core/provider-request-context-controller.js.map +1 -1
- package/dist/core/reflection-controller.d.ts +63 -27
- package/dist/core/reflection-controller.d.ts.map +1 -1
- package/dist/core/reflection-controller.js +300 -132
- package/dist/core/reflection-controller.js.map +1 -1
- package/dist/core/runtime-builder.d.ts +1 -0
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +25 -14
- package/dist/core/runtime-builder.js.map +1 -1
- package/dist/core/secrets/credential-exposure-guard.d.ts.map +1 -1
- package/dist/core/secrets/credential-exposure-guard.js +55 -10
- package/dist/core/secrets/credential-exposure-guard.js.map +1 -1
- package/dist/core/session-role.d.ts +6 -8
- package/dist/core/session-role.d.ts.map +1 -1
- package/dist/core/session-role.js +8 -18
- package/dist/core/session-role.js.map +1 -1
- package/dist/core/settings-manager.d.ts +13 -16
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +53 -50
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skill-vault.d.ts +15 -0
- package/dist/core/skill-vault.d.ts.map +1 -1
- package/dist/core/skill-vault.js +79 -45
- package/dist/core/skill-vault.js.map +1 -1
- package/dist/core/skills.d.ts +3 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +6 -6
- package/dist/core/skills.js.map +1 -1
- package/dist/core/system-prompt-builder.d.ts +2 -0
- package/dist/core/system-prompt-builder.d.ts.map +1 -1
- package/dist/core/system-prompt-builder.js +52 -12
- package/dist/core/system-prompt-builder.js.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tool-capability-policy.d.ts +3 -0
- package/dist/core/tool-capability-policy.d.ts.map +1 -1
- package/dist/core/tool-capability-policy.js +13 -2
- package/dist/core/tool-capability-policy.js.map +1 -1
- package/dist/core/toolkit/script-runner.d.ts +2 -1
- package/dist/core/toolkit/script-runner.d.ts.map +1 -1
- package/dist/core/toolkit/script-runner.js +10 -2
- package/dist/core/toolkit/script-runner.js.map +1 -1
- package/dist/core/tools/delegate-status.d.ts +3 -1
- package/dist/core/tools/delegate-status.d.ts.map +1 -1
- package/dist/core/tools/delegate-status.js +5 -1
- package/dist/core/tools/delegate-status.js.map +1 -1
- package/dist/core/tools/delegate.d.ts +4 -13
- package/dist/core/tools/delegate.d.ts.map +1 -1
- package/dist/core/tools/delegate.js +173 -73
- package/dist/core/tools/delegate.js.map +1 -1
- package/dist/core/tools/goal.d.ts +3 -4
- package/dist/core/tools/goal.d.ts.map +1 -1
- package/dist/core/tools/goal.js +24 -7
- package/dist/core/tools/goal.js.map +1 -1
- package/dist/core/tools/profile-writer.d.ts +2 -8
- package/dist/core/tools/profile-writer.d.ts.map +1 -1
- package/dist/core/tools/profile-writer.js +6 -18
- package/dist/core/tools/profile-writer.js.map +1 -1
- package/dist/core/tools/run-toolkit-script.d.ts +1 -1
- package/dist/core/tools/run-toolkit-script.d.ts.map +1 -1
- package/dist/core/tools/run-toolkit-script.js +2 -2
- package/dist/core/tools/run-toolkit-script.js.map +1 -1
- package/dist/core/tools/skill-audit.d.ts +28 -1
- package/dist/core/tools/skill-audit.d.ts.map +1 -1
- package/dist/core/tools/skill-audit.js +56 -12
- package/dist/core/tools/skill-audit.js.map +1 -1
- package/dist/core/tools/skill.d.ts +12 -1
- package/dist/core/tools/skill.d.ts.map +1 -1
- package/dist/core/tools/skill.js +52 -0
- package/dist/core/tools/skill.js.map +1 -1
- package/dist/core/tools/skillify.d.ts.map +1 -1
- package/dist/core/tools/skillify.js +16 -7
- package/dist/core/tools/skillify.js.map +1 -1
- package/dist/core/tools/task-steps.js +1 -1
- package/dist/core/tools/task-steps.js.map +1 -1
- package/dist/core/tools/tmux-dispatch.d.ts +4 -16
- package/dist/core/tools/tmux-dispatch.d.ts.map +1 -1
- package/dist/core/tools/tmux-dispatch.js +5 -20
- package/dist/core/tools/tmux-dispatch.js.map +1 -1
- package/dist/core/tools/tool-task.d.ts +1 -0
- package/dist/core/tools/tool-task.d.ts.map +1 -1
- package/dist/core/tools/tool-task.js +13 -8
- package/dist/core/tools/tool-task.js.map +1 -1
- package/dist/core/util/atomic-file.d.ts +2 -0
- package/dist/core/util/atomic-file.d.ts.map +1 -1
- package/dist/core/util/atomic-file.js +4 -0
- package/dist/core/util/atomic-file.js.map +1 -1
- package/dist/core/worktree-sync/codes.d.ts +1 -2
- package/dist/core/worktree-sync/codes.d.ts.map +1 -1
- package/dist/core/worktree-sync/codes.js +1 -2
- package/dist/core/worktree-sync/codes.js.map +1 -1
- package/dist/core/worktree-sync/lane-gate.d.ts +4 -8
- package/dist/core/worktree-sync/lane-gate.d.ts.map +1 -1
- package/dist/core/worktree-sync/lane-gate.js +5 -51
- package/dist/core/worktree-sync/lane-gate.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.d.ts +6 -7
- package/dist/modes/interactive/auto-learn-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.js +32 -207
- package/dist/modes/interactive/auto-learn-controller.js.map +1 -1
- package/dist/modes/interactive/autonomy-commands.js +2 -2
- package/dist/modes/interactive/autonomy-commands.js.map +1 -1
- package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -1
- package/dist/modes/interactive/components/activity-lane.js +12 -23
- package/dist/modes/interactive/components/activity-lane.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +142 -1
- package/dist/modes/interactive/components/custom-message.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 +2 -2
- package/dist/modes/interactive/components/fitness-role-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +150 -73
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/report-commands.d.ts.map +1 -1
- package/dist/modes/interactive/report-commands.js +8 -4
- package/dist/modes/interactive/report-commands.js.map +1 -1
- package/dist/modes/interactive/settings-selector-flow.d.ts.map +1 -1
- package/dist/modes/interactive/settings-selector-flow.js +10 -0
- package/dist/modes/interactive/settings-selector-flow.js.map +1 -1
- package/docs/extensions.md +8 -0
- package/docs/harness-architecture.md +28 -32
- package/docs/index.md +1 -1
- package/docs/process-matrix.md +8 -6
- package/docs/resources.md +1 -1
- package/docs/settings.md +61 -51
- package/docs/tmux-agent-manager.md +47 -40
- package/docs/usage.md +1 -1
- package/docs/worker-profiles.md +8 -6
- package/docs/worktree-sync.md +26 -20
- 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 +12 -12
- package/package.json +4 -4
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts +0 -133
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts.map +0 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js +0 -199
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js.map +0 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.ts +0 -312
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foreground-terminal-handoff-controller.d.ts","sourceRoot":"","sources":["../../src/core/foreground-terminal-handoff-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EACN,KAAK,wBAAwB,EAE7B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iDAAiD,CAAC;AAGnG,OAAO,KAAK,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AACnH,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,uBAAuB,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAE3F,UAAU,uCAAuC;IAChD,UAAU,EAAE,4BAA4B,CAAC;IACzC,UAAU,IAAI,OAAO,CAAC;IACtB,oBAAoB,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC,GAAG,SAAS,CAAC;IACzE,sBAAsB,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,0BAA0B,GAAG,SAAS,CAAC;IAChF,eAAe,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC;IACtF,sBAAsB,CACrB,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,EACvF,KAAK,EAAE,yBAAyB,EAChC,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC,CAAC;IAC1C,iBAAiB,CAChB,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,EACvF,OAAO,EAAE;QAAE,WAAW,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,EACtD,KAAK,EAAE,yBAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;
|
|
1
|
+
{"version":3,"file":"foreground-terminal-handoff-controller.d.ts","sourceRoot":"","sources":["../../src/core/foreground-terminal-handoff-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,46 @@ import { createBackgroundToolTerminalMessage, } from "./background-tool-task-con
|
|
|
2
2
|
import { WORKER_COMPLETION_ERROR_CAVEMAN_GUIDANCE } from "./delegation/worker-terminal-handoff-coordinator.js";
|
|
3
3
|
import { workerTerminalOutputArtifact } from "./delegation/worker-terminal-output-artifact.js";
|
|
4
4
|
import { isGoalExecutionActive } from "./goals/goal-state.js";
|
|
5
|
+
export function createBackgroundActivitySummaryContract(kind, items) {
|
|
6
|
+
return {
|
|
7
|
+
kind,
|
|
8
|
+
totalCount: items.length,
|
|
9
|
+
attentionCount: items.filter((item) => item.status === "attention").length,
|
|
10
|
+
failedCount: items.filter((item) => item.status === "failed").length,
|
|
11
|
+
canceledCount: items.filter((item) => item.status === "canceled").length,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function isBackgroundActivitySummaryContract(value) {
|
|
15
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
16
|
+
return false;
|
|
17
|
+
const summary = value;
|
|
18
|
+
const counts = ["totalCount", "attentionCount", "failedCount", "canceledCount"];
|
|
19
|
+
if (summary.kind !== "agent" && summary.kind !== "task")
|
|
20
|
+
return false;
|
|
21
|
+
if (counts.some((field) => typeof summary[field] !== "number" ||
|
|
22
|
+
!Number.isSafeInteger(summary[field]) ||
|
|
23
|
+
summary[field] < 0)) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
const totalCount = summary.totalCount;
|
|
27
|
+
return (totalCount > 0 &&
|
|
28
|
+
summary.attentionCount + summary.failedCount + summary.canceledCount <=
|
|
29
|
+
totalCount);
|
|
30
|
+
}
|
|
31
|
+
function workerSummaryStatus(record, claimNeedsReview) {
|
|
32
|
+
if (record.status === "failed" || record.status === "timeout" || record.status === "budget_exhausted") {
|
|
33
|
+
return "failed";
|
|
34
|
+
}
|
|
35
|
+
if (record.status === "canceled")
|
|
36
|
+
return "canceled";
|
|
37
|
+
if (claimNeedsReview || record.status === "partial" || record.status === "blocked")
|
|
38
|
+
return "attention";
|
|
39
|
+
return "success";
|
|
40
|
+
}
|
|
41
|
+
const MAX_DELIVERED_TERMINAL_IDENTITIES = 512;
|
|
5
42
|
export function buildForegroundWorkerTerminalHandoffContent(records, options) {
|
|
6
43
|
const included = records.slice(0, 8);
|
|
7
|
-
const omitted = records.length - included.length;
|
|
44
|
+
const omitted = Math.max(0, (options?.totalCount ?? records.length) - included.length);
|
|
8
45
|
const wakeParent = options?.wakeParent ?? true;
|
|
9
46
|
const sanitize = (value) => value.replace(/[\r\n]+/g, " ").slice(0, 120);
|
|
10
47
|
return [
|
|
@@ -55,78 +92,225 @@ export function buildForegroundWorkerTerminalHandoffContent(records, options) {
|
|
|
55
92
|
/** Serializes durable background terminal delivery through the foreground submission owner. */
|
|
56
93
|
export class ForegroundTerminalHandoffController {
|
|
57
94
|
constructor(deps) {
|
|
95
|
+
this.pending = new Set();
|
|
96
|
+
this.terminalDeliveries = new Map();
|
|
97
|
+
this.deliveredTerminalIdentities = new Set();
|
|
58
98
|
this.deps = deps;
|
|
59
99
|
}
|
|
60
100
|
async notifyWorkers(records) {
|
|
61
|
-
if (records.
|
|
101
|
+
if (records.every((record) => record.observedAt !== undefined))
|
|
62
102
|
return;
|
|
63
103
|
this.assertLive("worker terminal handoff was persisted");
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
: {}),
|
|
88
|
-
};
|
|
89
|
-
});
|
|
90
|
-
const goal = this.deps.getGoalStateSnapshot();
|
|
91
|
-
const wakeParent = records.some((record) => !record.goalId || (goal?.goalId === record.goalId && isGoalExecutionActive(goal.status)));
|
|
92
|
-
const message = {
|
|
93
|
-
customType: "background-worker-completion",
|
|
94
|
-
content: buildForegroundWorkerTerminalHandoffContent(included, { wakeParent }),
|
|
95
|
-
display: true,
|
|
96
|
-
details: { records: included },
|
|
97
|
-
};
|
|
98
|
-
if (wakeParent) {
|
|
99
|
-
const goalId = records.find((record) => record.goalId === goal?.goalId)?.goalId;
|
|
100
|
-
const started = await this.deps.startCustomMessageTurn(message, lease, goalId);
|
|
101
|
-
this.releaseAfterTurn(started.completion, lease, "worker terminal handoff turn");
|
|
102
|
-
releaseLease = false;
|
|
104
|
+
await this.scheduleUnique(records, (record) => ["worker", record.laneId, record.completedAt ?? "", record.status, record.reasonCode ?? ""].join("\0"), (uniqueRecords) => this.prepareWorkerDelivery(uniqueRecords));
|
|
105
|
+
}
|
|
106
|
+
async notifyTools(records, wakeParent) {
|
|
107
|
+
if (!wakeParent || records.every((record) => record.observedAt !== undefined))
|
|
108
|
+
return;
|
|
109
|
+
this.assertLive("background tool terminal handoff was delivered");
|
|
110
|
+
await this.scheduleUnique(records, (record) => ["tool", record.sessionId, record.taskId, record.completedAt ?? "", record.status].join("\0"), (uniqueRecords) => this.prepareToolDelivery(uniqueRecords));
|
|
111
|
+
}
|
|
112
|
+
/** Deliver queued terminals immediately before the agent loop polls its steering inbox. */
|
|
113
|
+
flushProviderBoundary() {
|
|
114
|
+
for (const pending of [...this.pending]) {
|
|
115
|
+
try {
|
|
116
|
+
this.assertLive("terminal handoff reached a provider boundary");
|
|
117
|
+
const plan = pending.prepare();
|
|
118
|
+
if (!plan) {
|
|
119
|
+
this.pending.delete(pending);
|
|
120
|
+
pending.resolve();
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (!plan.wakeParent)
|
|
124
|
+
continue;
|
|
125
|
+
this.pending.delete(pending);
|
|
126
|
+
void this.deps.enqueueCustomMessageTurn(plan.message).then(pending.resolve, pending.reject);
|
|
103
127
|
}
|
|
104
|
-
|
|
105
|
-
|
|
128
|
+
catch (error) {
|
|
129
|
+
this.pending.delete(pending);
|
|
130
|
+
pending.reject(error);
|
|
106
131
|
}
|
|
107
132
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
133
|
+
}
|
|
134
|
+
schedule(prepare) {
|
|
135
|
+
return new Promise((resolve, reject) => {
|
|
136
|
+
const pending = { prepare, resolve, reject };
|
|
137
|
+
this.pending.add(pending);
|
|
138
|
+
void this.deliverWhenIdle(pending);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
async scheduleUnique(records, identity, prepare) {
|
|
142
|
+
const receipts = new Set();
|
|
143
|
+
const uniqueRecords = [];
|
|
144
|
+
const uniqueIdentities = [];
|
|
145
|
+
for (const record of records) {
|
|
146
|
+
const key = identity(record);
|
|
147
|
+
if (this.deliveredTerminalIdentities.has(key))
|
|
148
|
+
continue;
|
|
149
|
+
const inFlight = this.terminalDeliveries.get(key);
|
|
150
|
+
if (inFlight) {
|
|
151
|
+
receipts.add(inFlight);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
uniqueRecords.push(record);
|
|
155
|
+
uniqueIdentities.push(key);
|
|
111
156
|
}
|
|
157
|
+
if (uniqueRecords.length > 0) {
|
|
158
|
+
const delivery = this.schedule(() => prepare(uniqueRecords));
|
|
159
|
+
for (const key of uniqueIdentities)
|
|
160
|
+
this.terminalDeliveries.set(key, delivery);
|
|
161
|
+
receipts.add(delivery);
|
|
162
|
+
void delivery.then(() => {
|
|
163
|
+
for (const key of uniqueIdentities) {
|
|
164
|
+
if (this.terminalDeliveries.get(key) === delivery)
|
|
165
|
+
this.terminalDeliveries.delete(key);
|
|
166
|
+
this.rememberDeliveredTerminal(key);
|
|
167
|
+
}
|
|
168
|
+
}, () => {
|
|
169
|
+
for (const key of uniqueIdentities) {
|
|
170
|
+
if (this.terminalDeliveries.get(key) === delivery)
|
|
171
|
+
this.terminalDeliveries.delete(key);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
await Promise.all(receipts);
|
|
112
176
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
this.
|
|
117
|
-
|
|
177
|
+
rememberDeliveredTerminal(identity) {
|
|
178
|
+
this.deliveredTerminalIdentities.delete(identity);
|
|
179
|
+
this.deliveredTerminalIdentities.add(identity);
|
|
180
|
+
while (this.deliveredTerminalIdentities.size > MAX_DELIVERED_TERMINAL_IDENTITIES) {
|
|
181
|
+
const oldest = this.deliveredTerminalIdentities.values().next().value;
|
|
182
|
+
if (oldest === undefined)
|
|
183
|
+
break;
|
|
184
|
+
this.deliveredTerminalIdentities.delete(oldest);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async deliverWhenIdle(pending) {
|
|
188
|
+
try {
|
|
189
|
+
while (this.pending.has(pending)) {
|
|
190
|
+
await this.deps.foreground.waitForIdle();
|
|
191
|
+
if (!this.pending.has(pending))
|
|
192
|
+
return;
|
|
193
|
+
this.assertLive("terminal handoff was waiting for foreground idle");
|
|
194
|
+
const lease = this.deps.foreground.tryAcquireSubmission();
|
|
195
|
+
if (!lease)
|
|
196
|
+
continue;
|
|
197
|
+
if (!this.pending.delete(pending)) {
|
|
198
|
+
this.deps.foreground.releaseSubmission(lease);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
await this.deliverWithLease(pending.prepare(), lease);
|
|
203
|
+
pending.resolve();
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
pending.reject(error);
|
|
207
|
+
}
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
if (this.pending.delete(pending))
|
|
213
|
+
pending.reject(error);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
async deliverWithLease(plan, lease) {
|
|
118
217
|
let releaseLease = true;
|
|
119
218
|
try {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
219
|
+
if (!plan)
|
|
220
|
+
return;
|
|
221
|
+
if (plan.wakeParent) {
|
|
222
|
+
const started = await this.deps.startCustomMessageTurn(plan.message, lease, plan.goalId);
|
|
223
|
+
this.releaseAfterTurn(started.completion, lease, "background terminal handoff turn");
|
|
224
|
+
releaseLease = false;
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
await this.deps.sendCustomMessage(plan.message, { triggerTurn: false, deliverAs: "followUp" }, lease);
|
|
124
228
|
}
|
|
125
229
|
finally {
|
|
126
230
|
if (releaseLease)
|
|
127
231
|
this.deps.foreground.releaseSubmission(lease);
|
|
128
232
|
}
|
|
129
233
|
}
|
|
234
|
+
prepareWorkerDelivery(records) {
|
|
235
|
+
const unread = records.filter((record) => record.observedAt === undefined);
|
|
236
|
+
if (unread.length === 0)
|
|
237
|
+
return undefined;
|
|
238
|
+
const prepared = unread.map((record, index) => {
|
|
239
|
+
const snapshot = this.deps.getWorkerClaimSnapshot?.(record.laneId);
|
|
240
|
+
const claim = snapshot?.claim;
|
|
241
|
+
const outputArtifact = index < 8 ? workerTerminalOutputArtifact(this.deps.getWorkerResult?.(record.laneId)) : undefined;
|
|
242
|
+
return {
|
|
243
|
+
summaryItem: {
|
|
244
|
+
id: record.laneId,
|
|
245
|
+
status: workerSummaryStatus(record, claim?.parentReviewRequired === true),
|
|
246
|
+
},
|
|
247
|
+
laneId: record.laneId,
|
|
248
|
+
status: record.status,
|
|
249
|
+
...(record.reasonCode ? { reasonCode: record.reasonCode } : {}),
|
|
250
|
+
...(outputArtifact ? { outputArtifact } : {}),
|
|
251
|
+
...(claim
|
|
252
|
+
? {
|
|
253
|
+
claim: {
|
|
254
|
+
status: claim.status,
|
|
255
|
+
summary: claim.summary.slice(0, 1000),
|
|
256
|
+
changedFiles: claim.changedFiles,
|
|
257
|
+
...(claim.blockers ? { blockers: claim.blockers } : {}),
|
|
258
|
+
...(claim.parentReviewRequired ? { parentReviewRequired: true } : {}),
|
|
259
|
+
},
|
|
260
|
+
}
|
|
261
|
+
: {}),
|
|
262
|
+
};
|
|
263
|
+
});
|
|
264
|
+
const included = prepared.slice(0, 8).map(({ summaryItem: _summaryItem, ...record }) => record);
|
|
265
|
+
const wake = this.resolveWake(unread);
|
|
266
|
+
return {
|
|
267
|
+
message: {
|
|
268
|
+
customType: "background-worker-completion",
|
|
269
|
+
content: buildForegroundWorkerTerminalHandoffContent(included, {
|
|
270
|
+
wakeParent: wake.wakeParent,
|
|
271
|
+
totalCount: unread.length,
|
|
272
|
+
}),
|
|
273
|
+
display: true,
|
|
274
|
+
details: {
|
|
275
|
+
records: included,
|
|
276
|
+
summary: createBackgroundActivitySummaryContract("agent", prepared.map((entry) => entry.summaryItem)),
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
...wake,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
prepareToolDelivery(records) {
|
|
283
|
+
const unread = records.filter((record) => record.observedAt === undefined);
|
|
284
|
+
if (unread.length === 0)
|
|
285
|
+
return undefined;
|
|
286
|
+
const wake = this.resolveWake(unread);
|
|
287
|
+
const toolMessage = createBackgroundToolTerminalMessage(unread, { wakeParent: wake.wakeParent });
|
|
288
|
+
return {
|
|
289
|
+
message: {
|
|
290
|
+
...toolMessage,
|
|
291
|
+
details: {
|
|
292
|
+
...toolMessage.details,
|
|
293
|
+
summary: createBackgroundActivitySummaryContract("task", unread.map((record) => ({
|
|
294
|
+
id: record.taskId,
|
|
295
|
+
status: record.status === "failed"
|
|
296
|
+
? "failed"
|
|
297
|
+
: record.status === "canceled"
|
|
298
|
+
? "canceled"
|
|
299
|
+
: "success",
|
|
300
|
+
}))),
|
|
301
|
+
},
|
|
302
|
+
},
|
|
303
|
+
...wake,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
resolveWake(records) {
|
|
307
|
+
const goal = this.deps.getGoalStateSnapshot();
|
|
308
|
+
const wakeParent = records.some((record) => !record.goalId || (goal?.goalId === record.goalId && isGoalExecutionActive(goal.status)));
|
|
309
|
+
return {
|
|
310
|
+
wakeParent,
|
|
311
|
+
...(wakeParent ? { goalId: records.find((record) => record.goalId === goal?.goalId)?.goalId } : {}),
|
|
312
|
+
};
|
|
313
|
+
}
|
|
130
314
|
releaseAfterTurn(completion, lease, label) {
|
|
131
315
|
void completion.then(() => this.deps.foreground.releaseSubmission(lease), (error) => {
|
|
132
316
|
this.deps.foreground.releaseSubmission(lease);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foreground-terminal-handoff-controller.js","sourceRoot":"","sources":["../../src/core/foreground-terminal-handoff-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CustomMessage } from \"@caupulican/pi-agent-core\";\nimport type { LaneTerminalStatus } from \"./autonomy/lane-tracker.ts\";\nimport {\n\ttype BackgroundToolTaskRecord,\n\tcreateBackgroundToolTerminalMessage,\n} from \"./background-tool-task-controller.ts\";\nimport type { WorkerClaimSnapshotPayload } from \"./delegation/session-worker-claim.ts\";\nimport type { WorkerTerminalHandoffRecord } from \"./delegation/worker-notification-coordinator.ts\";\nimport { WORKER_COMPLETION_ERROR_CAVEMAN_GUIDANCE } from \"./delegation/worker-terminal-handoff-coordinator.ts\";\nimport { workerTerminalOutputArtifact } from \"./delegation/worker-terminal-output-artifact.ts\";\nimport type { ForegroundRecoveryController, ForegroundSubmissionLease } from \"./foreground-recovery-controller.ts\";\nimport { type GoalState, isGoalExecutionActive } from \"./goals/goal-state.ts\";\nimport type { ArtifactContract, WorkerResultContract } from \"./orchestration/contracts.ts\";\n\ninterface ForegroundTerminalHandoffControllerDeps {\n\tforeground: ForegroundRecoveryController;\n\tisDisposed(): boolean;\n\tgetGoalStateSnapshot(): Pick<GoalState, \"goalId\" | \"status\"> | undefined;\n\tgetWorkerClaimSnapshot?(laneId: string): WorkerClaimSnapshotPayload | undefined;\n\tgetWorkerResult?(laneId: string): Pick<WorkerResultContract, \"artifacts\"> | undefined;\n\tstartCustomMessageTurn(\n\t\tmessage: Pick<CustomMessage<unknown>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\tlease: ForegroundSubmissionLease,\n\t\tgoalId?: string,\n\t): Promise<{ completion: Promise<void> }>;\n\tsendCustomMessage(\n\t\tmessage: Pick<CustomMessage<unknown>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions: { triggerTurn: false; deliverAs: \"followUp\" },\n\t\tlease: ForegroundSubmissionLease,\n\t): Promise<void>;\n\twarn(message: string): void;\n}\n\nexport function buildForegroundWorkerTerminalHandoffContent(\n\trecords: readonly {\n\t\tlaneId: string;\n\t\tstatus: LaneTerminalStatus;\n\t\treasonCode?: string;\n\t\toutputArtifact?: ArtifactContract;\n\t\tclaim?: {\n\t\t\tsummary?: string;\n\t\t\tstatus?: string;\n\t\t\tchangedFiles?: readonly string[];\n\t\t\tblockers?: readonly string[];\n\t\t\tparentReviewRequired?: boolean;\n\t\t};\n\t}[],\n\toptions?: { wakeParent?: boolean },\n): string {\n\tconst included = records.slice(0, 8);\n\tconst omitted = records.length - included.length;\n\tconst wakeParent = options?.wakeParent ?? true;\n\tconst sanitize = (value: string): string => value.replace(/[\\r\\n]+/g, \" \").slice(0, 120);\n\treturn [\n\t\t\"Background worker terminal handoff:\",\n\t\t...included.flatMap((record) => {\n\t\t\tconst reason = record.reasonCode ? ` reason=${sanitize(record.reasonCode)}` : \"\";\n\t\t\tconst lines = [`- ${record.laneId}: ${record.status}${reason}`];\n\t\t\tif (record.outputArtifact) {\n\t\t\t\tlines.push(\n\t\t\t\t\t` Full Output: ${record.outputArtifact.uri}${record.outputArtifact.sizeBytes === undefined ? \"\" : ` (${record.outputArtifact.sizeBytes} bytes)`}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (record.claim?.summary) {\n\t\t\t\tlines.push(` Claim Status: ${record.claim.status || record.status}`);\n\t\t\t\tlines.push(` Claim Summary: ${sanitize(record.claim.summary)}`);\n\t\t\t\tif (record.claim.changedFiles && record.claim.changedFiles.length > 0) {\n\t\t\t\t\tlines.push(` Changed Files: ${record.claim.changedFiles.map((f) => sanitize(f)).join(\", \")}`);\n\t\t\t\t}\n\t\t\t\tif (record.claim.blockers && record.claim.blockers.length > 0) {\n\t\t\t\t\tlines.push(` Blockers: ${record.claim.blockers.map((b) => sanitize(b)).join(\"; \")}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn lines;\n\t\t}),\n\t\t...(omitted > 0 ? [`- ${omitted} additional terminal worker(s) omitted.`] : []),\n\t\t\"CAVEMAN MODE - MANDATORY: this event proves terminal persistence and delivery. Do not report missed completion or lost worker state from these records.\",\n\t\t...(wakeParent\n\t\t\t? [\"Read each lane with delegate status, verify the claim, then continue or replan the parent task.\"]\n\t\t\t: [\n\t\t\t\t\t\"The owning parent is no longer eligible for automatic continuation. Persist this handoff, but do not continue or replan automatically.\",\n\t\t\t\t]),\n\t\t...(records.some((record) => record.reasonCode === \"worker_blocked\")\n\t\t\t? [\"worker_blocked is a task claim with blockers, not harness failure.\"]\n\t\t\t: []),\n\t\t...(records.some((record) => record.status === \"budget_exhausted\")\n\t\t\t? [\n\t\t\t\t\t\"CAVEMAN MODE - MANDATORY: budget_exhausted means an admitted limit ended work, not harness failure. Terminal reason is authoritative; never replace it with earlier transcript errors. Read evidence, then replan only within remaining authority.\",\n\t\t\t\t]\n\t\t\t: []),\n\t\t...(records.some((record) => record.reasonCode === \"completion_error\")\n\t\t\t? [WORKER_COMPLETION_ERROR_CAVEMAN_GUIDANCE]\n\t\t\t: []),\n\t\t...(wakeParent\n\t\t\t? [\n\t\t\t\t\t'Parent woke. Evaluated terminal claim payload above. Use delegate { action: \"status\", laneId } for deep view if needed.',\n\t\t\t\t]\n\t\t\t: [\"Parent was not woken. Wait for explicit user input before reading a lane or starting more work.\"]),\n\t].join(\"\\n\");\n}\n\n/** Serializes durable background terminal delivery through the foreground submission owner. */\nexport class ForegroundTerminalHandoffController {\n\tprivate readonly deps: ForegroundTerminalHandoffControllerDeps;\n\n\tconstructor(deps: ForegroundTerminalHandoffControllerDeps) {\n\t\tthis.deps = deps;\n\t}\n\n\tasync notifyWorkers(records: readonly WorkerTerminalHandoffRecord[]): Promise<void> {\n\t\tif (records.length === 0) return;\n\t\tthis.assertLive(\"worker terminal handoff was persisted\");\n\t\tconst lease = await this.deps.foreground.acquireSubmission();\n\t\tlet releaseLease = true;\n\t\ttry {\n\t\t\tthis.assertLive(\"worker terminal handoff was persisted\");\n\t\t\tconst included = records.slice(0, 8).map((record) => {\n\t\t\t\tconst snapshot = this.deps.getWorkerClaimSnapshot?.(record.laneId);\n\t\t\t\tconst claim = snapshot?.claim;\n\t\t\t\tconst outputArtifact = workerTerminalOutputArtifact(this.deps.getWorkerResult?.(record.laneId));\n\t\t\t\treturn {\n\t\t\t\t\tlaneId: record.laneId,\n\t\t\t\t\tstatus: record.status,\n\t\t\t\t\t...(record.reasonCode ? { reasonCode: record.reasonCode } : {}),\n\t\t\t\t\t...(outputArtifact ? { outputArtifact } : {}),\n\t\t\t\t\t...(claim\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tclaim: {\n\t\t\t\t\t\t\t\t\tstatus: claim.status,\n\t\t\t\t\t\t\t\t\tsummary: claim.summary.slice(0, 1000),\n\t\t\t\t\t\t\t\t\tchangedFiles: claim.changedFiles,\n\t\t\t\t\t\t\t\t\t...(claim.blockers ? { blockers: claim.blockers } : {}),\n\t\t\t\t\t\t\t\t\t...(claim.parentReviewRequired ? { parentReviewRequired: true } : {}),\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};\n\t\t\t});\n\t\t\tconst goal = this.deps.getGoalStateSnapshot();\n\t\t\tconst wakeParent = records.some(\n\t\t\t\t(record) => !record.goalId || (goal?.goalId === record.goalId && isGoalExecutionActive(goal.status)),\n\t\t\t);\n\t\t\tconst message = {\n\t\t\t\tcustomType: \"background-worker-completion\",\n\t\t\t\tcontent: buildForegroundWorkerTerminalHandoffContent(included, { wakeParent }),\n\t\t\t\tdisplay: true,\n\t\t\t\tdetails: { records: included },\n\t\t\t};\n\t\t\tif (wakeParent) {\n\t\t\t\tconst goalId = records.find((record) => record.goalId === goal?.goalId)?.goalId;\n\t\t\t\tconst started = await this.deps.startCustomMessageTurn(message, lease, goalId);\n\t\t\t\tthis.releaseAfterTurn(started.completion, lease, \"worker terminal handoff turn\");\n\t\t\t\treleaseLease = false;\n\t\t\t} else {\n\t\t\t\tawait this.deps.sendCustomMessage(message, { triggerTurn: false, deliverAs: \"followUp\" }, lease);\n\t\t\t}\n\t\t} finally {\n\t\t\tif (releaseLease) this.deps.foreground.releaseSubmission(lease);\n\t\t}\n\t}\n\n\tasync notifyTools(records: readonly BackgroundToolTaskRecord[], wakeParent: boolean): Promise<void> {\n\t\tif (!wakeParent) return;\n\t\tthis.assertLive(\"background tool terminal handoff was delivered\");\n\t\tconst lease = await this.deps.foreground.acquireSubmission();\n\t\tlet releaseLease = true;\n\t\ttry {\n\t\t\tthis.assertLive(\"background tool terminal handoff was delivered\");\n\t\t\tconst started = await this.deps.startCustomMessageTurn(createBackgroundToolTerminalMessage(records), lease);\n\t\t\tthis.releaseAfterTurn(started.completion, lease, \"background tool terminal handoff turn\");\n\t\t\treleaseLease = false;\n\t\t} finally {\n\t\t\tif (releaseLease) this.deps.foreground.releaseSubmission(lease);\n\t\t}\n\t}\n\n\tprivate releaseAfterTurn(completion: Promise<void>, lease: ForegroundSubmissionLease, label: string): void {\n\t\tvoid completion.then(\n\t\t\t() => this.deps.foreground.releaseSubmission(lease),\n\t\t\t(error: unknown) => {\n\t\t\t\tthis.deps.foreground.releaseSubmission(lease);\n\t\t\t\tthis.deps.warn(\n\t\t\t\t\t`${label} failed after durable delivery: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t}\n\n\tprivate assertLive(action: string): void {\n\t\tif (this.deps.isDisposed()) throw new Error(`Session disposed before ${action}`);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"foreground-terminal-handoff-controller.js","sourceRoot":"","sources":["../../src/core/foreground-terminal-handoff-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CustomMessage } from \"@caupulican/pi-agent-core\";\nimport type { LaneTerminalStatus } from \"./autonomy/lane-tracker.ts\";\nimport {\n\ttype BackgroundToolTaskRecord,\n\tcreateBackgroundToolTerminalMessage,\n} from \"./background-tool-task-controller.ts\";\nimport type { WorkerClaimSnapshotPayload } from \"./delegation/session-worker-claim.ts\";\nimport type { WorkerTerminalHandoffRecord } from \"./delegation/worker-notification-coordinator.ts\";\nimport { WORKER_COMPLETION_ERROR_CAVEMAN_GUIDANCE } from \"./delegation/worker-terminal-handoff-coordinator.ts\";\nimport { workerTerminalOutputArtifact } from \"./delegation/worker-terminal-output-artifact.ts\";\nimport type { ForegroundRecoveryController, ForegroundSubmissionLease } from \"./foreground-recovery-controller.ts\";\nimport { type GoalState, isGoalExecutionActive } from \"./goals/goal-state.ts\";\nimport type { ArtifactContract, WorkerResultContract } from \"./orchestration/contracts.ts\";\n\nexport type BackgroundActivitySummaryKind = \"agent\" | \"task\";\nexport type BackgroundActivitySummaryStatus = \"success\" | \"attention\" | \"failed\" | \"canceled\";\n\nexport interface BackgroundActivitySummaryItem {\n\tid: string;\n\tstatus: BackgroundActivitySummaryStatus;\n}\n\n/** Provider-neutral counts retained when the detailed handoff is bounded. */\nexport interface BackgroundActivitySummaryContract {\n\tkind: BackgroundActivitySummaryKind;\n\ttotalCount: number;\n\tattentionCount: number;\n\tfailedCount: number;\n\tcanceledCount: number;\n}\n\nexport function createBackgroundActivitySummaryContract(\n\tkind: BackgroundActivitySummaryKind,\n\titems: readonly BackgroundActivitySummaryItem[],\n): BackgroundActivitySummaryContract {\n\treturn {\n\t\tkind,\n\t\ttotalCount: items.length,\n\t\tattentionCount: items.filter((item) => item.status === \"attention\").length,\n\t\tfailedCount: items.filter((item) => item.status === \"failed\").length,\n\t\tcanceledCount: items.filter((item) => item.status === \"canceled\").length,\n\t};\n}\n\nexport function isBackgroundActivitySummaryContract(value: unknown): value is BackgroundActivitySummaryContract {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n\tconst summary = value as Record<string, unknown>;\n\tconst counts = [\"totalCount\", \"attentionCount\", \"failedCount\", \"canceledCount\"] as const;\n\tif (summary.kind !== \"agent\" && summary.kind !== \"task\") return false;\n\tif (\n\t\tcounts.some(\n\t\t\t(field) =>\n\t\t\t\ttypeof summary[field] !== \"number\" ||\n\t\t\t\t!Number.isSafeInteger(summary[field]) ||\n\t\t\t\t(summary[field] as number) < 0,\n\t\t)\n\t) {\n\t\treturn false;\n\t}\n\tconst totalCount = summary.totalCount as number;\n\treturn (\n\t\ttotalCount > 0 &&\n\t\t(summary.attentionCount as number) + (summary.failedCount as number) + (summary.canceledCount as number) <=\n\t\t\ttotalCount\n\t);\n}\n\nfunction workerSummaryStatus(\n\trecord: Pick<WorkerTerminalHandoffRecord, \"status\">,\n\tclaimNeedsReview: boolean,\n): BackgroundActivitySummaryStatus {\n\tif (record.status === \"failed\" || record.status === \"timeout\" || record.status === \"budget_exhausted\") {\n\t\treturn \"failed\";\n\t}\n\tif (record.status === \"canceled\") return \"canceled\";\n\tif (claimNeedsReview || record.status === \"partial\" || record.status === \"blocked\") return \"attention\";\n\treturn \"success\";\n}\n\ninterface ForegroundTerminalHandoffControllerDeps {\n\tforeground: ForegroundRecoveryController;\n\tisDisposed(): boolean;\n\tgetGoalStateSnapshot(): Pick<GoalState, \"goalId\" | \"status\"> | undefined;\n\tgetWorkerClaimSnapshot?(laneId: string): WorkerClaimSnapshotPayload | undefined;\n\tgetWorkerResult?(laneId: string): Pick<WorkerResultContract, \"artifacts\"> | undefined;\n\tstartCustomMessageTurn(\n\t\tmessage: Pick<CustomMessage<unknown>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\tlease: ForegroundSubmissionLease,\n\t\tgoalId?: string,\n\t): Promise<{ completion: Promise<void> }>;\n\tenqueueCustomMessageTurn(\n\t\tmessage: Pick<CustomMessage<unknown>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t): Promise<void>;\n\tsendCustomMessage(\n\t\tmessage: Pick<CustomMessage<unknown>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions: { triggerTurn: false; deliverAs: \"followUp\" },\n\t\tlease: ForegroundSubmissionLease,\n\t): Promise<void>;\n\twarn(message: string): void;\n}\n\ntype TerminalCustomMessage = Pick<CustomMessage<unknown>, \"customType\" | \"content\" | \"display\" | \"details\">;\n\ninterface TerminalDeliveryPlan {\n\tmessage: TerminalCustomMessage;\n\twakeParent: boolean;\n\tgoalId?: string;\n}\n\ninterface PendingTerminalDelivery {\n\tprepare(): TerminalDeliveryPlan | undefined;\n\tresolve(): void;\n\treject(error: unknown): void;\n}\n\nconst MAX_DELIVERED_TERMINAL_IDENTITIES = 512;\n\nexport function buildForegroundWorkerTerminalHandoffContent(\n\trecords: readonly {\n\t\tlaneId: string;\n\t\tstatus: LaneTerminalStatus;\n\t\treasonCode?: string;\n\t\toutputArtifact?: ArtifactContract;\n\t\tclaim?: {\n\t\t\tsummary?: string;\n\t\t\tstatus?: string;\n\t\t\tchangedFiles?: readonly string[];\n\t\t\tblockers?: readonly string[];\n\t\t\tparentReviewRequired?: boolean;\n\t\t};\n\t}[],\n\toptions?: { wakeParent?: boolean; totalCount?: number },\n): string {\n\tconst included = records.slice(0, 8);\n\tconst omitted = Math.max(0, (options?.totalCount ?? records.length) - included.length);\n\tconst wakeParent = options?.wakeParent ?? true;\n\tconst sanitize = (value: string): string => value.replace(/[\\r\\n]+/g, \" \").slice(0, 120);\n\treturn [\n\t\t\"Background worker terminal handoff:\",\n\t\t...included.flatMap((record) => {\n\t\t\tconst reason = record.reasonCode ? ` reason=${sanitize(record.reasonCode)}` : \"\";\n\t\t\tconst lines = [`- ${record.laneId}: ${record.status}${reason}`];\n\t\t\tif (record.outputArtifact) {\n\t\t\t\tlines.push(\n\t\t\t\t\t` Full Output: ${record.outputArtifact.uri}${record.outputArtifact.sizeBytes === undefined ? \"\" : ` (${record.outputArtifact.sizeBytes} bytes)`}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (record.claim?.summary) {\n\t\t\t\tlines.push(` Claim Status: ${record.claim.status || record.status}`);\n\t\t\t\tlines.push(` Claim Summary: ${sanitize(record.claim.summary)}`);\n\t\t\t\tif (record.claim.changedFiles && record.claim.changedFiles.length > 0) {\n\t\t\t\t\tlines.push(` Changed Files: ${record.claim.changedFiles.map((f) => sanitize(f)).join(\", \")}`);\n\t\t\t\t}\n\t\t\t\tif (record.claim.blockers && record.claim.blockers.length > 0) {\n\t\t\t\t\tlines.push(` Blockers: ${record.claim.blockers.map((b) => sanitize(b)).join(\"; \")}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn lines;\n\t\t}),\n\t\t...(omitted > 0 ? [`- ${omitted} additional terminal worker(s) omitted.`] : []),\n\t\t\"CAVEMAN MODE - MANDATORY: this event proves terminal persistence and delivery. Do not report missed completion or lost worker state from these records.\",\n\t\t...(wakeParent\n\t\t\t? [\"Read each lane with delegate status, verify the claim, then continue or replan the parent task.\"]\n\t\t\t: [\n\t\t\t\t\t\"The owning parent is no longer eligible for automatic continuation. Persist this handoff, but do not continue or replan automatically.\",\n\t\t\t\t]),\n\t\t...(records.some((record) => record.reasonCode === \"worker_blocked\")\n\t\t\t? [\"worker_blocked is a task claim with blockers, not harness failure.\"]\n\t\t\t: []),\n\t\t...(records.some((record) => record.status === \"budget_exhausted\")\n\t\t\t? [\n\t\t\t\t\t\"CAVEMAN MODE - MANDATORY: budget_exhausted means an admitted limit ended work, not harness failure. Terminal reason is authoritative; never replace it with earlier transcript errors. Read evidence, then replan only within remaining authority.\",\n\t\t\t\t]\n\t\t\t: []),\n\t\t...(records.some((record) => record.reasonCode === \"completion_error\")\n\t\t\t? [WORKER_COMPLETION_ERROR_CAVEMAN_GUIDANCE]\n\t\t\t: []),\n\t\t...(wakeParent\n\t\t\t? [\n\t\t\t\t\t'Parent woke. Evaluated terminal claim payload above. Use delegate { action: \"status\", laneId } for deep view if needed.',\n\t\t\t\t]\n\t\t\t: [\"Parent was not woken. Wait for explicit user input before reading a lane or starting more work.\"]),\n\t].join(\"\\n\");\n}\n\n/** Serializes durable background terminal delivery through the foreground submission owner. */\nexport class ForegroundTerminalHandoffController {\n\tprivate readonly deps: ForegroundTerminalHandoffControllerDeps;\n\tprivate readonly pending = new Set<PendingTerminalDelivery>();\n\tprivate readonly terminalDeliveries = new Map<string, Promise<void>>();\n\tprivate readonly deliveredTerminalIdentities = new Set<string>();\n\n\tconstructor(deps: ForegroundTerminalHandoffControllerDeps) {\n\t\tthis.deps = deps;\n\t}\n\n\tasync notifyWorkers(records: readonly WorkerTerminalHandoffRecord[]): Promise<void> {\n\t\tif (records.every((record) => record.observedAt !== undefined)) return;\n\t\tthis.assertLive(\"worker terminal handoff was persisted\");\n\t\tawait this.scheduleUnique(\n\t\t\trecords,\n\t\t\t(record) =>\n\t\t\t\t[\"worker\", record.laneId, record.completedAt ?? \"\", record.status, record.reasonCode ?? \"\"].join(\"\\0\"),\n\t\t\t(uniqueRecords) => this.prepareWorkerDelivery(uniqueRecords),\n\t\t);\n\t}\n\n\tasync notifyTools(records: readonly BackgroundToolTaskRecord[], wakeParent: boolean): Promise<void> {\n\t\tif (!wakeParent || records.every((record) => record.observedAt !== undefined)) return;\n\t\tthis.assertLive(\"background tool terminal handoff was delivered\");\n\t\tawait this.scheduleUnique(\n\t\t\trecords,\n\t\t\t(record) => [\"tool\", record.sessionId, record.taskId, record.completedAt ?? \"\", record.status].join(\"\\0\"),\n\t\t\t(uniqueRecords) => this.prepareToolDelivery(uniqueRecords),\n\t\t);\n\t}\n\n\t/** Deliver queued terminals immediately before the agent loop polls its steering inbox. */\n\tflushProviderBoundary(): void {\n\t\tfor (const pending of [...this.pending]) {\n\t\t\ttry {\n\t\t\t\tthis.assertLive(\"terminal handoff reached a provider boundary\");\n\t\t\t\tconst plan = pending.prepare();\n\t\t\t\tif (!plan) {\n\t\t\t\t\tthis.pending.delete(pending);\n\t\t\t\t\tpending.resolve();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!plan.wakeParent) continue;\n\t\t\t\tthis.pending.delete(pending);\n\t\t\t\tvoid this.deps.enqueueCustomMessageTurn(plan.message).then(pending.resolve, pending.reject);\n\t\t\t} catch (error) {\n\t\t\t\tthis.pending.delete(pending);\n\t\t\t\tpending.reject(error);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate schedule(prepare: () => TerminalDeliveryPlan | undefined): Promise<void> {\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tconst pending: PendingTerminalDelivery = { prepare, resolve, reject };\n\t\t\tthis.pending.add(pending);\n\t\t\tvoid this.deliverWhenIdle(pending);\n\t\t});\n\t}\n\n\tprivate async scheduleUnique<T>(\n\t\trecords: readonly T[],\n\t\tidentity: (record: T) => string,\n\t\tprepare: (records: readonly T[]) => TerminalDeliveryPlan | undefined,\n\t): Promise<void> {\n\t\tconst receipts = new Set<Promise<void>>();\n\t\tconst uniqueRecords: T[] = [];\n\t\tconst uniqueIdentities: string[] = [];\n\t\tfor (const record of records) {\n\t\t\tconst key = identity(record);\n\t\t\tif (this.deliveredTerminalIdentities.has(key)) continue;\n\t\t\tconst inFlight = this.terminalDeliveries.get(key);\n\t\t\tif (inFlight) {\n\t\t\t\treceipts.add(inFlight);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tuniqueRecords.push(record);\n\t\t\tuniqueIdentities.push(key);\n\t\t}\n\t\tif (uniqueRecords.length > 0) {\n\t\t\tconst delivery = this.schedule(() => prepare(uniqueRecords));\n\t\t\tfor (const key of uniqueIdentities) this.terminalDeliveries.set(key, delivery);\n\t\t\treceipts.add(delivery);\n\t\t\tvoid delivery.then(\n\t\t\t\t() => {\n\t\t\t\t\tfor (const key of uniqueIdentities) {\n\t\t\t\t\t\tif (this.terminalDeliveries.get(key) === delivery) this.terminalDeliveries.delete(key);\n\t\t\t\t\t\tthis.rememberDeliveredTerminal(key);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tfor (const key of uniqueIdentities) {\n\t\t\t\t\t\tif (this.terminalDeliveries.get(key) === delivery) this.terminalDeliveries.delete(key);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tawait Promise.all(receipts);\n\t}\n\n\tprivate rememberDeliveredTerminal(identity: string): void {\n\t\tthis.deliveredTerminalIdentities.delete(identity);\n\t\tthis.deliveredTerminalIdentities.add(identity);\n\t\twhile (this.deliveredTerminalIdentities.size > MAX_DELIVERED_TERMINAL_IDENTITIES) {\n\t\t\tconst oldest = this.deliveredTerminalIdentities.values().next().value;\n\t\t\tif (oldest === undefined) break;\n\t\t\tthis.deliveredTerminalIdentities.delete(oldest);\n\t\t}\n\t}\n\n\tprivate async deliverWhenIdle(pending: PendingTerminalDelivery): Promise<void> {\n\t\ttry {\n\t\t\twhile (this.pending.has(pending)) {\n\t\t\t\tawait this.deps.foreground.waitForIdle();\n\t\t\t\tif (!this.pending.has(pending)) return;\n\t\t\t\tthis.assertLive(\"terminal handoff was waiting for foreground idle\");\n\t\t\t\tconst lease = this.deps.foreground.tryAcquireSubmission();\n\t\t\t\tif (!lease) continue;\n\t\t\t\tif (!this.pending.delete(pending)) {\n\t\t\t\t\tthis.deps.foreground.releaseSubmission(lease);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.deliverWithLease(pending.prepare(), lease);\n\t\t\t\t\tpending.resolve();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tpending.reject(error);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (this.pending.delete(pending)) pending.reject(error);\n\t\t}\n\t}\n\n\tprivate async deliverWithLease(\n\t\tplan: TerminalDeliveryPlan | undefined,\n\t\tlease: ForegroundSubmissionLease,\n\t): Promise<void> {\n\t\tlet releaseLease = true;\n\t\ttry {\n\t\t\tif (!plan) return;\n\t\t\tif (plan.wakeParent) {\n\t\t\t\tconst started = await this.deps.startCustomMessageTurn(plan.message, lease, plan.goalId);\n\t\t\t\tthis.releaseAfterTurn(started.completion, lease, \"background terminal handoff turn\");\n\t\t\t\treleaseLease = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.deps.sendCustomMessage(plan.message, { triggerTurn: false, deliverAs: \"followUp\" }, lease);\n\t\t} finally {\n\t\t\tif (releaseLease) this.deps.foreground.releaseSubmission(lease);\n\t\t}\n\t}\n\n\tprivate prepareWorkerDelivery(records: readonly WorkerTerminalHandoffRecord[]): TerminalDeliveryPlan | undefined {\n\t\tconst unread = records.filter((record) => record.observedAt === undefined);\n\t\tif (unread.length === 0) return undefined;\n\t\tconst prepared = unread.map((record, index) => {\n\t\t\tconst snapshot = this.deps.getWorkerClaimSnapshot?.(record.laneId);\n\t\t\tconst claim = snapshot?.claim;\n\t\t\tconst outputArtifact =\n\t\t\t\tindex < 8 ? workerTerminalOutputArtifact(this.deps.getWorkerResult?.(record.laneId)) : undefined;\n\t\t\treturn {\n\t\t\t\tsummaryItem: {\n\t\t\t\t\tid: record.laneId,\n\t\t\t\t\tstatus: workerSummaryStatus(record, claim?.parentReviewRequired === true),\n\t\t\t\t},\n\t\t\t\tlaneId: record.laneId,\n\t\t\t\tstatus: record.status,\n\t\t\t\t...(record.reasonCode ? { reasonCode: record.reasonCode } : {}),\n\t\t\t\t...(outputArtifact ? { outputArtifact } : {}),\n\t\t\t\t...(claim\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tclaim: {\n\t\t\t\t\t\t\t\tstatus: claim.status,\n\t\t\t\t\t\t\t\tsummary: claim.summary.slice(0, 1000),\n\t\t\t\t\t\t\t\tchangedFiles: claim.changedFiles,\n\t\t\t\t\t\t\t\t...(claim.blockers ? { blockers: claim.blockers } : {}),\n\t\t\t\t\t\t\t\t...(claim.parentReviewRequired ? { parentReviewRequired: true } : {}),\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\t});\n\t\tconst included = prepared.slice(0, 8).map(({ summaryItem: _summaryItem, ...record }) => record);\n\t\tconst wake = this.resolveWake(unread);\n\t\treturn {\n\t\t\tmessage: {\n\t\t\t\tcustomType: \"background-worker-completion\",\n\t\t\t\tcontent: buildForegroundWorkerTerminalHandoffContent(included, {\n\t\t\t\t\twakeParent: wake.wakeParent,\n\t\t\t\t\ttotalCount: unread.length,\n\t\t\t\t}),\n\t\t\t\tdisplay: true,\n\t\t\t\tdetails: {\n\t\t\t\t\trecords: included,\n\t\t\t\t\tsummary: createBackgroundActivitySummaryContract(\n\t\t\t\t\t\t\"agent\",\n\t\t\t\t\t\tprepared.map((entry) => entry.summaryItem),\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t},\n\t\t\t...wake,\n\t\t};\n\t}\n\n\tprivate prepareToolDelivery(records: readonly BackgroundToolTaskRecord[]): TerminalDeliveryPlan | undefined {\n\t\tconst unread = records.filter((record) => record.observedAt === undefined);\n\t\tif (unread.length === 0) return undefined;\n\t\tconst wake = this.resolveWake(unread);\n\t\tconst toolMessage = createBackgroundToolTerminalMessage(unread, { wakeParent: wake.wakeParent });\n\t\treturn {\n\t\t\tmessage: {\n\t\t\t\t...toolMessage,\n\t\t\t\tdetails: {\n\t\t\t\t\t...toolMessage.details,\n\t\t\t\t\tsummary: createBackgroundActivitySummaryContract(\n\t\t\t\t\t\t\"task\",\n\t\t\t\t\t\tunread.map((record) => ({\n\t\t\t\t\t\t\tid: record.taskId,\n\t\t\t\t\t\t\tstatus:\n\t\t\t\t\t\t\t\trecord.status === \"failed\"\n\t\t\t\t\t\t\t\t\t? (\"failed\" as const)\n\t\t\t\t\t\t\t\t\t: record.status === \"canceled\"\n\t\t\t\t\t\t\t\t\t\t? (\"canceled\" as const)\n\t\t\t\t\t\t\t\t\t\t: (\"success\" as const),\n\t\t\t\t\t\t})),\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t},\n\t\t\t...wake,\n\t\t};\n\t}\n\n\tprivate resolveWake(records: readonly { goalId?: string }[]): Pick<TerminalDeliveryPlan, \"wakeParent\" | \"goalId\"> {\n\t\tconst goal = this.deps.getGoalStateSnapshot();\n\t\tconst wakeParent = records.some(\n\t\t\t(record) => !record.goalId || (goal?.goalId === record.goalId && isGoalExecutionActive(goal.status)),\n\t\t);\n\t\treturn {\n\t\t\twakeParent,\n\t\t\t...(wakeParent ? { goalId: records.find((record) => record.goalId === goal?.goalId)?.goalId } : {}),\n\t\t};\n\t}\n\n\tprivate releaseAfterTurn(completion: Promise<void>, lease: ForegroundSubmissionLease, label: string): void {\n\t\tvoid completion.then(\n\t\t\t() => this.deps.foreground.releaseSubmission(lease),\n\t\t\t(error: unknown) => {\n\t\t\t\tthis.deps.foreground.releaseSubmission(lease);\n\t\t\t\tthis.deps.warn(\n\t\t\t\t\t`${label} failed after durable delivery: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t}\n\n\tprivate assertLive(action: string): void {\n\t\tif (this.deps.isDisposed()) throw new Error(`Session disposed before ${action}`);\n\t}\n}\n"]}
|
|
@@ -85,6 +85,8 @@ export declare class GoalSessionController {
|
|
|
85
85
|
provisionalTokenBudget?: number;
|
|
86
86
|
}): GoalExecutionLease | undefined;
|
|
87
87
|
endExecution(lease: GoalExecutionLease | undefined): void;
|
|
88
|
+
/** Goal identity authoritatively owned by the current foreground execution, if one was adopted. */
|
|
89
|
+
getExecutionGoalId(): string | undefined;
|
|
88
90
|
/** Charge one observed assistant response exactly once, including routed responses buffered from persistence. */
|
|
89
91
|
recordExecutionUsage(message: AssistantMessage): void;
|
|
90
92
|
private chargeExecutionUsage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goal-session-controller.d.ts","sourceRoot":"","sources":["../../../src/core/goals/goal-session-controller.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"goal-session-controller.d.ts","sourceRoot":"","sources":["../../../src/core/goals/goal-session-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -222,6 +222,14 @@ export class GoalSessionController {
|
|
|
222
222
|
this.flushPendingExecutionUsage(this.executionLease);
|
|
223
223
|
this.executionLease = undefined;
|
|
224
224
|
}
|
|
225
|
+
/** Goal identity authoritatively owned by the current foreground execution, if one was adopted. */
|
|
226
|
+
getExecutionGoalId() {
|
|
227
|
+
const lease = this.executionLease;
|
|
228
|
+
if (!lease)
|
|
229
|
+
return undefined;
|
|
230
|
+
this.resolveExecutionState(lease);
|
|
231
|
+
return lease.goalId;
|
|
232
|
+
}
|
|
225
233
|
/** Charge one observed assistant response exactly once, including routed responses buffered from persistence. */
|
|
226
234
|
recordExecutionUsage(message) {
|
|
227
235
|
const lease = this.executionLease;
|