@caupulican/pi-adaptative 0.81.38 → 0.81.40
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 +131 -0
- package/README.md +2 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/README.md +18 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts +133 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts.map +1 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js +198 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js.map +1 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.ts +311 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts +31 -2
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +823 -79
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +1043 -86
- package/dist/bundled-resources/runtimes/pi-shell-engine/commands/__init__.py +43 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/commands/fs.py +270 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/commands/search.py +252 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/commands/strings.py +399 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/commands/text.py +575 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/context.py +52 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/errors.py +49 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/exec.py +734 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/expand.py +238 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/main.py +132 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/nodes.py +116 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/parser.py +287 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/proc.py +137 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/state.py +100 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/tokens.py +579 -0
- package/dist/bundled-resources/skills/tool-call-repair/SKILL.md +19 -9
- package/dist/bundled-resources/skills/tool-call-repair/references/failure-grammar.md +22 -5
- package/dist/bundled-resources/skills/tool-call-repair/references/repair-catalogue.md +7 -7
- package/dist/bundled-resources/skills/tool-call-repair/references/text-protocol-grammar.md +28 -7
- package/dist/cli/args.d.ts +5 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +24 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-directory-layout.d.ts +15 -0
- package/dist/core/agent-directory-layout.d.ts.map +1 -0
- package/dist/core/agent-directory-layout.js +72 -0
- package/dist/core/agent-directory-layout.js.map +1 -0
- package/dist/core/agent-paths.d.ts +66 -0
- package/dist/core/agent-paths.d.ts.map +1 -0
- package/dist/core/agent-paths.js +170 -0
- package/dist/core/agent-paths.js.map +1 -0
- package/dist/core/agent-session-runtime.d.ts +52 -8
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +397 -79
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +4 -3
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +255 -103
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +754 -1173
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/autonomy/approval-gate.d.ts +3 -2
- package/dist/core/autonomy/approval-gate.d.ts.map +1 -1
- package/dist/core/autonomy/approval-gate.js +6 -28
- package/dist/core/autonomy/approval-gate.js.map +1 -1
- package/dist/core/autonomy/bounded-completion.d.ts +1 -1
- package/dist/core/autonomy/bounded-completion.d.ts.map +1 -1
- package/dist/core/autonomy/bounded-completion.js +1 -1
- package/dist/core/autonomy/bounded-completion.js.map +1 -1
- package/dist/core/autonomy/contracts.d.ts +26 -9
- package/dist/core/autonomy/contracts.d.ts.map +1 -1
- package/dist/core/autonomy/contracts.js.map +1 -1
- package/dist/core/autonomy/foreground-envelope.d.ts +8 -2
- package/dist/core/autonomy/foreground-envelope.d.ts.map +1 -1
- package/dist/core/autonomy/foreground-envelope.js +8 -25
- 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 +8 -10
- package/dist/core/autonomy/gates.js.map +1 -1
- package/dist/core/autonomy/lane-private-paths.d.ts +2 -0
- package/dist/core/autonomy/lane-private-paths.d.ts.map +1 -0
- package/dist/core/autonomy/lane-private-paths.js +16 -0
- package/dist/core/autonomy/lane-private-paths.js.map +1 -0
- package/dist/core/autonomy/lane-tool-surface.d.ts +10 -0
- package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.js +46 -8
- package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
- package/dist/core/autonomy/lane-tracker.d.ts +24 -1
- package/dist/core/autonomy/lane-tracker.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tracker.js +43 -1
- package/dist/core/autonomy/lane-tracker.js.map +1 -1
- package/dist/core/autonomy/risk-assessment.d.ts +1 -2
- package/dist/core/autonomy/risk-assessment.d.ts.map +1 -1
- package/dist/core/autonomy/risk-assessment.js +1 -123
- package/dist/core/autonomy/risk-assessment.js.map +1 -1
- package/dist/core/autonomy/session-lane-record.d.ts +4 -4
- package/dist/core/autonomy/session-lane-record.d.ts.map +1 -1
- package/dist/core/autonomy/session-lane-record.js +16 -29
- package/dist/core/autonomy/session-lane-record.js.map +1 -1
- package/dist/core/autonomy/telemetry-events.d.ts +1 -1
- package/dist/core/autonomy/telemetry-events.d.ts.map +1 -1
- package/dist/core/autonomy/telemetry-events.js +1 -1
- package/dist/core/autonomy/telemetry-events.js.map +1 -1
- package/dist/core/autonomy-telemetry.d.ts +7 -7
- package/dist/core/autonomy-telemetry.d.ts.map +1 -1
- package/dist/core/autonomy-telemetry.js +9 -9
- package/dist/core/autonomy-telemetry.js.map +1 -1
- package/dist/core/background-lane-controller.d.ts +90 -156
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +192 -968
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/bash-execution-controller.d.ts +4 -0
- package/dist/core/bash-execution-controller.d.ts.map +1 -1
- package/dist/core/bash-execution-controller.js +7 -1
- package/dist/core/bash-execution-controller.js.map +1 -1
- package/dist/core/capability-contract.d.ts +4 -0
- package/dist/core/capability-contract.d.ts.map +1 -0
- package/dist/core/capability-contract.js +28 -0
- package/dist/core/capability-contract.js.map +1 -0
- package/dist/core/compaction-controller.d.ts +90 -0
- package/dist/core/compaction-controller.d.ts.map +1 -0
- package/dist/core/compaction-controller.js +452 -0
- package/dist/core/compaction-controller.js.map +1 -0
- package/dist/core/compaction-support.d.ts +24 -13
- package/dist/core/compaction-support.d.ts.map +1 -1
- package/dist/core/compaction-support.js +43 -7
- package/dist/core/compaction-support.js.map +1 -1
- package/dist/core/context/context-artifacts.d.ts +6 -2
- package/dist/core/context/context-artifacts.d.ts.map +1 -1
- package/dist/core/context/context-artifacts.js +34 -2
- package/dist/core/context/context-artifacts.js.map +1 -1
- package/dist/core/context/context-audit.d.ts +33 -1
- package/dist/core/context/context-audit.d.ts.map +1 -1
- package/dist/core/context/context-audit.js +31 -5
- package/dist/core/context/context-audit.js.map +1 -1
- package/dist/core/context/context-store-retention.d.ts +8 -2
- package/dist/core/context/context-store-retention.d.ts.map +1 -1
- package/dist/core/context/context-store-retention.js +158 -35
- package/dist/core/context/context-store-retention.js.map +1 -1
- package/dist/core/context/okf-memory.d.ts.map +1 -1
- package/dist/core/context/okf-memory.js +9 -11
- package/dist/core/context/okf-memory.js.map +1 -1
- package/dist/core/context/sqlite-runtime-index.d.ts.map +1 -1
- package/dist/core/context/sqlite-runtime-index.js +6 -8
- package/dist/core/context/sqlite-runtime-index.js.map +1 -1
- package/dist/core/context-gc.d.ts +3 -0
- package/dist/core/context-gc.d.ts.map +1 -1
- package/dist/core/context-gc.js +26 -6
- package/dist/core/context-gc.js.map +1 -1
- package/dist/core/context-pipeline.d.ts +26 -4
- package/dist/core/context-pipeline.d.ts.map +1 -1
- package/dist/core/context-pipeline.js +146 -18
- package/dist/core/context-pipeline.js.map +1 -1
- package/dist/core/cost-guard.d.ts +19 -3
- package/dist/core/cost-guard.d.ts.map +1 -1
- package/dist/core/cost-guard.js +18 -3
- 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/delegation/managed-lane-controller.d.ts +34 -0
- package/dist/core/delegation/managed-lane-controller.d.ts.map +1 -0
- package/dist/core/delegation/managed-lane-controller.js +217 -0
- package/dist/core/delegation/managed-lane-controller.js.map +1 -0
- package/dist/core/delegation/session-worker-claim.d.ts +44 -0
- package/dist/core/delegation/session-worker-claim.d.ts.map +1 -0
- package/dist/core/delegation/session-worker-claim.js +98 -0
- package/dist/core/delegation/session-worker-claim.js.map +1 -0
- package/dist/core/delegation/worker-actions.d.ts +7 -5
- package/dist/core/delegation/worker-actions.d.ts.map +1 -1
- package/dist/core/delegation/worker-actions.js +20 -4
- package/dist/core/delegation/worker-actions.js.map +1 -1
- package/dist/core/delegation/worker-claim.d.ts +56 -0
- package/dist/core/delegation/worker-claim.d.ts.map +1 -0
- package/dist/core/delegation/worker-claim.js +239 -0
- package/dist/core/delegation/worker-claim.js.map +1 -0
- package/dist/core/delegation/worker-delegation-controller.d.ts +110 -0
- package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -0
- package/dist/core/delegation/worker-delegation-controller.js +861 -0
- package/dist/core/delegation/worker-delegation-controller.js.map +1 -0
- package/dist/core/delegation/worker-delegation-request.d.ts +11 -0
- package/dist/core/delegation/worker-delegation-request.d.ts.map +1 -0
- package/dist/core/delegation/worker-delegation-request.js +2 -0
- package/dist/core/delegation/worker-delegation-request.js.map +1 -0
- package/dist/core/delegation/worker-dispatch-scheduler.d.ts +40 -0
- package/dist/core/delegation/worker-dispatch-scheduler.d.ts.map +1 -0
- package/dist/core/delegation/worker-dispatch-scheduler.js +93 -0
- package/dist/core/delegation/worker-dispatch-scheduler.js.map +1 -0
- package/dist/core/delegation/worker-execution-policy.d.ts +62 -0
- package/dist/core/delegation/worker-execution-policy.d.ts.map +1 -0
- package/dist/core/delegation/worker-execution-policy.js +160 -0
- package/dist/core/delegation/worker-execution-policy.js.map +1 -0
- package/dist/core/delegation/worker-lane-projection.d.ts +14 -0
- package/dist/core/delegation/worker-lane-projection.d.ts.map +1 -0
- package/dist/core/delegation/worker-lane-projection.js +100 -0
- package/dist/core/delegation/worker-lane-projection.js.map +1 -0
- package/dist/core/delegation/worker-lifecycle.d.ts +97 -0
- package/dist/core/delegation/worker-lifecycle.d.ts.map +1 -0
- package/dist/core/delegation/worker-lifecycle.js +339 -0
- package/dist/core/delegation/worker-lifecycle.js.map +1 -0
- package/dist/core/delegation/worker-notification-coordinator.d.ts +36 -0
- package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -0
- package/dist/core/delegation/worker-notification-coordinator.js +90 -0
- package/dist/core/delegation/worker-notification-coordinator.js.map +1 -0
- package/dist/core/delegation/worker-profile-resolver.d.ts +55 -0
- package/dist/core/delegation/worker-profile-resolver.d.ts.map +1 -0
- package/dist/core/delegation/worker-profile-resolver.js +113 -0
- package/dist/core/delegation/worker-profile-resolver.js.map +1 -0
- package/dist/core/delegation/worker-runner.d.ts +25 -14
- package/dist/core/delegation/worker-runner.d.ts.map +1 -1
- package/dist/core/delegation/worker-runner.js +122 -53
- package/dist/core/delegation/worker-runner.js.map +1 -1
- package/dist/core/delegation/worker-task-label.d.ts +3 -0
- package/dist/core/delegation/worker-task-label.d.ts.map +1 -0
- package/dist/core/delegation/worker-task-label.js +11 -0
- package/dist/core/delegation/worker-task-label.js.map +1 -0
- package/dist/core/doctor.d.ts +8 -0
- package/dist/core/doctor.d.ts.map +1 -1
- package/dist/core/doctor.js +32 -1
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +5 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +68 -13
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +7 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/storage.d.ts +8 -0
- package/dist/core/extensions/storage.d.ts.map +1 -0
- package/dist/core/extensions/storage.js +28 -0
- package/dist/core/extensions/storage.js.map +1 -0
- package/dist/core/extensions/types.d.ts +101 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/failure-corpus.d.ts +1 -15
- package/dist/core/failure-corpus.d.ts.map +1 -1
- package/dist/core/failure-corpus.js +9 -37
- package/dist/core/failure-corpus.js.map +1 -1
- package/dist/core/foreground-recovery-controller.d.ts +52 -0
- package/dist/core/foreground-recovery-controller.d.ts.map +1 -0
- package/dist/core/foreground-recovery-controller.js +111 -0
- package/dist/core/foreground-recovery-controller.js.map +1 -0
- package/dist/core/gateways/channel-provider.d.ts +3 -0
- package/dist/core/gateways/channel-provider.d.ts.map +1 -1
- package/dist/core/gateways/channel-provider.js +31 -6
- package/dist/core/gateways/channel-provider.js.map +1 -1
- package/dist/core/goal-loop-controller.d.ts +17 -1
- package/dist/core/goal-loop-controller.d.ts.map +1 -1
- package/dist/core/goal-loop-controller.js +79 -11
- package/dist/core/goal-loop-controller.js.map +1 -1
- package/dist/core/goals/goal-acceptance.d.ts +11 -0
- package/dist/core/goals/goal-acceptance.d.ts.map +1 -0
- package/dist/core/goals/goal-acceptance.js +25 -0
- package/dist/core/goals/goal-acceptance.js.map +1 -0
- package/dist/core/goals/goal-auto-continue-controller.d.ts +27 -0
- package/dist/core/goals/goal-auto-continue-controller.d.ts.map +1 -0
- package/dist/core/goals/goal-auto-continue-controller.js +93 -0
- package/dist/core/goals/goal-auto-continue-controller.js.map +1 -0
- package/dist/core/goals/goal-continuation-controller.d.ts +48 -2
- package/dist/core/goals/goal-continuation-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-controller.js +87 -0
- package/dist/core/goals/goal-continuation-controller.js.map +1 -1
- package/dist/core/goals/goal-continuation-defaults.d.ts +39 -0
- package/dist/core/goals/goal-continuation-defaults.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-defaults.js +42 -0
- package/dist/core/goals/goal-continuation-defaults.js.map +1 -1
- package/dist/core/goals/goal-continuation-prompt.d.ts +5 -1
- package/dist/core/goals/goal-continuation-prompt.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-prompt.js +56 -15
- package/dist/core/goals/goal-continuation-prompt.js.map +1 -1
- package/dist/core/goals/goal-lifecycle.d.ts +20 -0
- package/dist/core/goals/goal-lifecycle.d.ts.map +1 -0
- package/dist/core/goals/goal-lifecycle.js +17 -0
- package/dist/core/goals/goal-lifecycle.js.map +1 -0
- package/dist/core/goals/goal-runtime-snapshot.d.ts +105 -4
- package/dist/core/goals/goal-runtime-snapshot.d.ts.map +1 -1
- package/dist/core/goals/goal-runtime-snapshot.js +91 -6
- package/dist/core/goals/goal-runtime-snapshot.js.map +1 -1
- package/dist/core/goals/goal-state.d.ts +90 -1
- package/dist/core/goals/goal-state.d.ts.map +1 -1
- package/dist/core/goals/goal-state.js +78 -15
- package/dist/core/goals/goal-state.js.map +1 -1
- package/dist/core/goals/goal-tool-core.d.ts +58 -2
- package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
- package/dist/core/goals/goal-tool-core.js +82 -6
- package/dist/core/goals/goal-tool-core.js.map +1 -1
- package/dist/core/goals/session-goal-state.d.ts +13 -6
- package/dist/core/goals/session-goal-state.d.ts.map +1 -1
- package/dist/core/goals/session-goal-state.js +20 -28
- package/dist/core/goals/session-goal-state.js.map +1 -1
- package/dist/core/human-input.d.ts +100 -0
- package/dist/core/human-input.d.ts.map +1 -0
- package/dist/core/human-input.js +362 -0
- package/dist/core/human-input.js.map +1 -0
- package/dist/core/index.d.ts +9 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +9 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/{telemetry.d.ts → install-telemetry.d.ts} +1 -1
- package/dist/core/install-telemetry.d.ts.map +1 -0
- package/dist/core/{telemetry.js → install-telemetry.js} +1 -1
- package/dist/core/install-telemetry.js.map +1 -0
- package/dist/core/keybindings.d.ts +27 -1
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +34 -8
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/learning/learning-audit.d.ts +2 -4
- package/dist/core/learning/learning-audit.d.ts.map +1 -1
- package/dist/core/learning/learning-audit.js +9 -29
- 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 +1 -6
- package/dist/core/learning/learning-gate.js.map +1 -1
- package/dist/core/learning/observation-store.d.ts +12 -3
- package/dist/core/learning/observation-store.d.ts.map +1 -1
- package/dist/core/learning/observation-store.js +30 -15
- package/dist/core/learning/observation-store.js.map +1 -1
- package/dist/core/learning/session-learning-decision.d.ts +2 -4
- package/dist/core/learning/session-learning-decision.d.ts.map +1 -1
- package/dist/core/learning/session-learning-decision.js +9 -29
- package/dist/core/learning/session-learning-decision.js.map +1 -1
- package/dist/core/learning/skill-curator.d.ts +5 -1
- package/dist/core/learning/skill-curator.d.ts.map +1 -1
- package/dist/core/learning/skill-curator.js +21 -19
- package/dist/core/learning/skill-curator.js.map +1 -1
- package/dist/core/local-runtime-controller.d.ts +65 -3
- package/dist/core/local-runtime-controller.d.ts.map +1 -1
- package/dist/core/local-runtime-controller.js +186 -26
- package/dist/core/local-runtime-controller.js.map +1 -1
- package/dist/core/memory/providers/file-store.d.ts +1 -1
- package/dist/core/memory/providers/file-store.d.ts.map +1 -1
- package/dist/core/memory/providers/file-store.js +6 -6
- package/dist/core/memory/providers/file-store.js.map +1 -1
- package/dist/core/memory-controller.d.ts.map +1 -1
- package/dist/core/memory-controller.js +4 -4
- package/dist/core/memory-controller.js.map +1 -1
- package/dist/core/model-capability.d.ts +34 -0
- package/dist/core/model-capability.d.ts.map +1 -1
- package/dist/core/model-capability.js +43 -1
- package/dist/core/model-capability.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +6 -9
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-router/intent-classifier.d.ts +1 -4
- package/dist/core/model-router/intent-classifier.d.ts.map +1 -1
- package/dist/core/model-router/intent-classifier.js +1 -156
- package/dist/core/model-router/intent-classifier.js.map +1 -1
- package/dist/core/model-router/tool-escalation.d.ts +15 -0
- package/dist/core/model-router/tool-escalation.d.ts.map +1 -1
- package/dist/core/model-router/tool-escalation.js +23 -1
- package/dist/core/model-router/tool-escalation.js.map +1 -1
- package/dist/core/model-router-controller.d.ts +34 -7
- package/dist/core/model-router-controller.d.ts.map +1 -1
- package/dist/core/model-router-controller.js +95 -16
- package/dist/core/model-router-controller.js.map +1 -1
- package/dist/core/model-selection-controller.d.ts +4 -4
- package/dist/core/model-selection-controller.d.ts.map +1 -1
- package/dist/core/model-selection-controller.js.map +1 -1
- package/dist/core/model-tool-protocol.d.ts +23 -0
- package/dist/core/model-tool-protocol.d.ts.map +1 -0
- package/dist/core/model-tool-protocol.js +43 -0
- package/dist/core/model-tool-protocol.js.map +1 -0
- package/dist/core/models/adaptation-store.d.ts +10 -5
- package/dist/core/models/adaptation-store.d.ts.map +1 -1
- package/dist/core/models/adaptation-store.js +129 -81
- package/dist/core/models/adaptation-store.js.map +1 -1
- package/dist/core/models/default-model-suggestions.d.ts.map +1 -1
- package/dist/core/models/default-model-suggestions.js +17 -0
- package/dist/core/models/default-model-suggestions.js.map +1 -1
- package/dist/core/models/fitness-store.d.ts +4 -11
- package/dist/core/models/fitness-store.d.ts.map +1 -1
- package/dist/core/models/fitness-store.js +87 -51
- package/dist/core/models/fitness-store.js.map +1 -1
- package/dist/core/models/host-state-store.d.ts +34 -0
- package/dist/core/models/host-state-store.d.ts.map +1 -0
- package/dist/core/models/host-state-store.js +86 -0
- package/dist/core/models/host-state-store.js.map +1 -0
- package/dist/core/models/llamacpp-runtime.d.ts +180 -0
- package/dist/core/models/llamacpp-runtime.d.ts.map +1 -0
- package/dist/core/models/llamacpp-runtime.js +475 -0
- package/dist/core/models/llamacpp-runtime.js.map +1 -0
- package/dist/core/models/local-registration.d.ts +40 -0
- package/dist/core/models/local-registration.d.ts.map +1 -1
- package/dist/core/models/local-registration.js +94 -5
- package/dist/core/models/local-registration.js.map +1 -1
- package/dist/core/models/local-runtime.d.ts.map +1 -1
- package/dist/core/models/local-runtime.js +6 -5
- package/dist/core/models/local-runtime.js.map +1 -1
- package/dist/core/models/model-ref.d.ts +7 -0
- package/dist/core/models/model-ref.d.ts.map +1 -1
- package/dist/core/models/model-ref.js +26 -0
- package/dist/core/models/model-ref.js.map +1 -1
- package/dist/core/models/needle-runtime.d.ts +257 -0
- package/dist/core/models/needle-runtime.d.ts.map +1 -0
- package/dist/core/models/needle-runtime.js +519 -0
- package/dist/core/models/needle-runtime.js.map +1 -0
- package/dist/core/models/prism-llamacpp-lifecycle.d.ts +89 -0
- package/dist/core/models/prism-llamacpp-lifecycle.d.ts.map +1 -0
- package/dist/core/models/prism-llamacpp-lifecycle.js +121 -0
- package/dist/core/models/prism-llamacpp-lifecycle.js.map +1 -0
- package/dist/core/orchestration/agent-resume.d.ts +24 -0
- package/dist/core/orchestration/agent-resume.d.ts.map +1 -0
- package/dist/core/orchestration/agent-resume.js +90 -0
- package/dist/core/orchestration/agent-resume.js.map +1 -0
- package/dist/core/orchestration/capability-gateway.d.ts +61 -0
- package/dist/core/orchestration/capability-gateway.d.ts.map +1 -0
- package/dist/core/orchestration/capability-gateway.js +152 -0
- package/dist/core/orchestration/capability-gateway.js.map +1 -0
- package/dist/core/orchestration/contracts.d.ts +343 -0
- package/dist/core/orchestration/contracts.d.ts.map +1 -0
- package/dist/core/orchestration/contracts.js +135 -0
- package/dist/core/orchestration/contracts.js.map +1 -0
- package/dist/core/orchestration/delegation-ledger.d.ts +56 -0
- package/dist/core/orchestration/delegation-ledger.d.ts.map +1 -0
- package/dist/core/orchestration/delegation-ledger.js +197 -0
- package/dist/core/orchestration/delegation-ledger.js.map +1 -0
- package/dist/core/orchestration/event-store.d.ts +83 -0
- package/dist/core/orchestration/event-store.d.ts.map +1 -0
- package/dist/core/orchestration/event-store.js +560 -0
- package/dist/core/orchestration/event-store.js.map +1 -0
- package/dist/core/orchestration/lane-tool-manifests.d.ts +9 -0
- package/dist/core/orchestration/lane-tool-manifests.d.ts.map +1 -0
- package/dist/core/orchestration/lane-tool-manifests.js +37 -0
- package/dist/core/orchestration/lane-tool-manifests.js.map +1 -0
- package/dist/core/orchestration/model-binding.d.ts +15 -0
- package/dist/core/orchestration/model-binding.d.ts.map +1 -0
- package/dist/core/orchestration/model-binding.js +29 -0
- package/dist/core/orchestration/model-binding.js.map +1 -0
- package/dist/core/orchestration/policy-compiler.d.ts +49 -0
- package/dist/core/orchestration/policy-compiler.d.ts.map +1 -0
- package/dist/core/orchestration/policy-compiler.js +191 -0
- package/dist/core/orchestration/policy-compiler.js.map +1 -0
- package/dist/core/orchestration/policy-gate.d.ts +18 -0
- package/dist/core/orchestration/policy-gate.d.ts.map +1 -0
- package/dist/core/orchestration/policy-gate.js +24 -0
- package/dist/core/orchestration/policy-gate.js.map +1 -0
- package/dist/core/orchestration/profile-registry.d.ts +51 -0
- package/dist/core/orchestration/profile-registry.d.ts.map +1 -0
- package/dist/core/orchestration/profile-registry.js +393 -0
- package/dist/core/orchestration/profile-registry.js.map +1 -0
- package/dist/core/orchestration/profile-store.d.ts +31 -0
- package/dist/core/orchestration/profile-store.d.ts.map +1 -0
- package/dist/core/orchestration/profile-store.js +136 -0
- package/dist/core/orchestration/profile-store.js.map +1 -0
- package/dist/core/orchestration/risk-budget.d.ts +9 -0
- package/dist/core/orchestration/risk-budget.d.ts.map +1 -0
- package/dist/core/orchestration/risk-budget.js +48 -0
- package/dist/core/orchestration/risk-budget.js.map +1 -0
- package/dist/core/orchestration/task-runtime.d.ts +168 -0
- package/dist/core/orchestration/task-runtime.d.ts.map +1 -0
- package/dist/core/orchestration/task-runtime.js +1600 -0
- package/dist/core/orchestration/task-runtime.js.map +1 -0
- package/dist/core/orchestration/work-state-projection.d.ts +32 -0
- package/dist/core/orchestration/work-state-projection.d.ts.map +1 -0
- package/dist/core/orchestration/work-state-projection.js +116 -0
- package/dist/core/orchestration/work-state-projection.js.map +1 -0
- package/dist/core/orchestration/worker-execution-contract.d.ts +21 -0
- package/dist/core/orchestration/worker-execution-contract.d.ts.map +1 -0
- package/dist/core/orchestration/worker-execution-contract.js +179 -0
- package/dist/core/orchestration/worker-execution-contract.js.map +1 -0
- package/dist/core/orchestration/worker-result-adapter.d.ts +21 -0
- package/dist/core/orchestration/worker-result-adapter.d.ts.map +1 -0
- package/dist/core/orchestration/worker-result-adapter.js +109 -0
- package/dist/core/orchestration/worker-result-adapter.js.map +1 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +11 -10
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/process-identity.d.ts +11 -0
- package/dist/core/process-identity.d.ts.map +1 -0
- package/dist/core/process-identity.js +26 -0
- package/dist/core/process-identity.js.map +1 -0
- package/dist/core/process-matrix/codes.d.ts +83 -0
- package/dist/core/process-matrix/codes.d.ts.map +1 -0
- package/dist/core/process-matrix/codes.js +15 -0
- package/dist/core/process-matrix/codes.js.map +1 -0
- package/dist/core/process-matrix/resume-launcher.d.ts +26 -0
- package/dist/core/process-matrix/resume-launcher.d.ts.map +1 -0
- package/dist/core/process-matrix/resume-launcher.js +62 -0
- package/dist/core/process-matrix/resume-launcher.js.map +1 -0
- package/dist/core/process-matrix/runtime.d.ts +78 -0
- package/dist/core/process-matrix/runtime.d.ts.map +1 -0
- package/dist/core/process-matrix/runtime.js +633 -0
- package/dist/core/process-matrix/runtime.js.map +1 -0
- package/dist/core/process-matrix/store.d.ts +25 -0
- package/dist/core/process-matrix/store.d.ts.map +1 -0
- package/dist/core/process-matrix/store.js +189 -0
- package/dist/core/process-matrix/store.js.map +1 -0
- package/dist/core/process-matrix/supervisor.d.ts +75 -0
- package/dist/core/process-matrix/supervisor.d.ts.map +1 -0
- package/dist/core/process-matrix/supervisor.js +161 -0
- package/dist/core/process-matrix/supervisor.js.map +1 -0
- package/dist/core/profile-registry.d.ts +7 -0
- package/dist/core/profile-registry.d.ts.map +1 -1
- package/dist/core/profile-registry.js +25 -7
- package/dist/core/profile-registry.js.map +1 -1
- package/dist/core/python-runtime.d.ts.map +1 -1
- package/dist/core/python-runtime.js +3 -3
- package/dist/core/python-runtime.js.map +1 -1
- package/dist/core/reflection-controller.d.ts +33 -9
- package/dist/core/reflection-controller.d.ts.map +1 -1
- package/dist/core/reflection-controller.js +217 -127
- package/dist/core/reflection-controller.js.map +1 -1
- package/dist/core/reload-blockers.d.ts +36 -0
- package/dist/core/reload-blockers.d.ts.map +1 -1
- package/dist/core/reload-blockers.js +50 -8
- package/dist/core/reload-blockers.js.map +1 -1
- package/dist/core/research/evidence-bundle.d.ts.map +1 -1
- package/dist/core/research/evidence-bundle.js +1 -6
- package/dist/core/research/evidence-bundle.js.map +1 -1
- package/dist/core/research/lane-model-resolver.d.ts +33 -0
- package/dist/core/research/lane-model-resolver.d.ts.map +1 -0
- package/dist/core/research/lane-model-resolver.js +65 -0
- package/dist/core/research/lane-model-resolver.js.map +1 -0
- package/dist/core/research/model-fitness-controller.d.ts +38 -0
- package/dist/core/research/model-fitness-controller.d.ts.map +1 -0
- package/dist/core/research/model-fitness-controller.js +106 -0
- package/dist/core/research/model-fitness-controller.js.map +1 -0
- package/dist/core/research/model-fitness.d.ts +1 -1
- package/dist/core/research/model-fitness.d.ts.map +1 -1
- package/dist/core/research/model-fitness.js +4 -4
- 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 +7 -7
- package/dist/core/research/research-gate.js.map +1 -1
- package/dist/core/research/research-lane-controller.d.ts +62 -0
- package/dist/core/research/research-lane-controller.d.ts.map +1 -0
- package/dist/core/research/research-lane-controller.js +292 -0
- package/dist/core/research/research-lane-controller.js.map +1 -0
- package/dist/core/research/session-evidence-bundle.d.ts +2 -4
- package/dist/core/research/session-evidence-bundle.d.ts.map +1 -1
- package/dist/core/research/session-evidence-bundle.js +10 -46
- package/dist/core/research/session-evidence-bundle.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +15 -9
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/risk-classifier.d.ts +6 -0
- package/dist/core/risk-classifier.d.ts.map +1 -0
- package/dist/core/risk-classifier.js +225 -0
- package/dist/core/risk-classifier.js.map +1 -0
- package/dist/core/runtime-builder.d.ts +76 -17
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +367 -124
- package/dist/core/runtime-builder.js.map +1 -1
- package/dist/core/scout-controller.d.ts +6 -0
- package/dist/core/scout-controller.d.ts.map +1 -1
- package/dist/core/scout-controller.js +66 -52
- package/dist/core/scout-controller.js.map +1 -1
- package/dist/core/sdk.d.ts +6 -3
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +64 -27
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-analytics.d.ts.map +1 -1
- package/dist/core/session-analytics.js +28 -1
- package/dist/core/session-analytics.js.map +1 -1
- package/dist/core/session-image-store.d.ts +33 -0
- package/dist/core/session-image-store.d.ts.map +1 -0
- package/dist/core/session-image-store.js +283 -0
- package/dist/core/session-image-store.js.map +1 -0
- package/dist/core/session-role.d.ts +33 -0
- package/dist/core/session-role.d.ts.map +1 -0
- package/dist/core/session-role.js +58 -0
- package/dist/core/session-role.js.map +1 -0
- package/dist/core/session-snapshot.d.ts +34 -0
- package/dist/core/session-snapshot.d.ts.map +1 -0
- package/dist/core/session-snapshot.js +68 -0
- package/dist/core/session-snapshot.js.map +1 -0
- package/dist/core/session-supervision-runtime.d.ts +31 -0
- package/dist/core/session-supervision-runtime.d.ts.map +1 -0
- package/dist/core/session-supervision-runtime.js +97 -0
- package/dist/core/session-supervision-runtime.js.map +1 -0
- package/dist/core/settings-manager.d.ts +51 -7
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +168 -82
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt-builder.d.ts +12 -0
- package/dist/core/system-prompt-builder.d.ts.map +1 -1
- package/dist/core/system-prompt-builder.js +6 -0
- package/dist/core/system-prompt-builder.js.map +1 -1
- package/dist/core/system-prompt.d.ts +14 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +20 -3
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tasks/session-task-state.d.ts +13 -6
- package/dist/core/tasks/session-task-state.d.ts.map +1 -1
- package/dist/core/tasks/session-task-state.js +20 -22
- package/dist/core/tasks/session-task-state.js.map +1 -1
- package/dist/core/tasks/task-contract-monitor.d.ts +45 -0
- package/dist/core/tasks/task-contract-monitor.d.ts.map +1 -0
- package/dist/core/tasks/task-contract-monitor.js +56 -0
- package/dist/core/tasks/task-contract-monitor.js.map +1 -0
- package/dist/core/tasks/task-projection.d.ts +20 -0
- package/dist/core/tasks/task-projection.d.ts.map +1 -0
- package/dist/core/tasks/task-projection.js +47 -0
- package/dist/core/tasks/task-projection.js.map +1 -0
- package/dist/core/tasks/task-state.d.ts +12 -0
- package/dist/core/tasks/task-state.d.ts.map +1 -1
- package/dist/core/tasks/task-state.js +56 -12
- package/dist/core/tasks/task-state.js.map +1 -1
- package/dist/core/tool-capability-policy.d.ts +13 -0
- package/dist/core/tool-capability-policy.d.ts.map +1 -0
- package/dist/core/tool-capability-policy.js +85 -0
- package/dist/core/tool-capability-policy.js.map +1 -0
- package/dist/core/tool-gate-controller.d.ts.map +1 -1
- package/dist/core/tool-gate-controller.js +5 -0
- package/dist/core/tool-gate-controller.js.map +1 -1
- package/dist/core/tool-protocol-controller.d.ts +91 -0
- package/dist/core/tool-protocol-controller.d.ts.map +1 -0
- package/dist/core/tool-protocol-controller.js +512 -0
- package/dist/core/tool-protocol-controller.js.map +1 -0
- package/dist/core/tool-recovery-log-records.d.ts +6 -0
- package/dist/core/tool-recovery-log-records.d.ts.map +1 -1
- package/dist/core/tool-recovery-log-records.js +13 -31
- package/dist/core/tool-recovery-log-records.js.map +1 -1
- package/dist/core/tool-selection/promotion.d.ts +54 -0
- package/dist/core/tool-selection/promotion.d.ts.map +1 -0
- package/dist/core/tool-selection/promotion.js +81 -0
- package/dist/core/tool-selection/promotion.js.map +1 -0
- package/dist/core/tool-selection/tool-performance-store.d.ts +39 -6
- package/dist/core/tool-selection/tool-performance-store.d.ts.map +1 -1
- package/dist/core/tool-selection/tool-performance-store.js +153 -110
- package/dist/core/tool-selection/tool-performance-store.js.map +1 -1
- package/dist/core/tool-selection/tool-selection-controller.d.ts +45 -0
- package/dist/core/tool-selection/tool-selection-controller.d.ts.map +1 -1
- package/dist/core/tool-selection/tool-selection-controller.js +96 -0
- package/dist/core/tool-selection/tool-selection-controller.js.map +1 -1
- package/dist/core/tools/ask-question.d.ts +124 -0
- package/dist/core/tools/ask-question.d.ts.map +1 -0
- package/dist/core/tools/ask-question.js +693 -0
- package/dist/core/tools/ask-question.js.map +1 -0
- package/dist/core/tools/bash.d.ts +18 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +95 -16
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/delegate-status.d.ts +44 -2
- package/dist/core/tools/delegate-status.d.ts.map +1 -1
- package/dist/core/tools/delegate-status.js +214 -19
- package/dist/core/tools/delegate-status.js.map +1 -1
- package/dist/core/tools/delegate.d.ts +15 -13
- package/dist/core/tools/delegate.d.ts.map +1 -1
- package/dist/core/tools/delegate.js +124 -22
- package/dist/core/tools/delegate.js.map +1 -1
- package/dist/core/tools/extensionify.d.ts.map +1 -1
- package/dist/core/tools/extensionify.js +1 -0
- package/dist/core/tools/extensionify.js.map +1 -1
- package/dist/core/tools/goal.d.ts +94 -3
- package/dist/core/tools/goal.d.ts.map +1 -1
- package/dist/core/tools/goal.js +165 -15
- package/dist/core/tools/goal.js.map +1 -1
- package/dist/core/tools/model-fitness.d.ts +7 -0
- package/dist/core/tools/model-fitness.d.ts.map +1 -1
- package/dist/core/tools/model-fitness.js +4 -4
- package/dist/core/tools/model-fitness.js.map +1 -1
- package/dist/core/tools/orchestration-panel.d.ts +43 -0
- package/dist/core/tools/orchestration-panel.d.ts.map +1 -0
- package/dist/core/tools/orchestration-panel.js +168 -0
- package/dist/core/tools/orchestration-panel.js.map +1 -0
- package/dist/core/tools/run-process.d.ts +26 -0
- package/dist/core/tools/run-process.d.ts.map +1 -0
- package/dist/core/tools/run-process.js +138 -0
- package/dist/core/tools/run-process.js.map +1 -0
- package/dist/core/tools/shell-contract-router.d.ts +6 -1
- package/dist/core/tools/shell-contract-router.d.ts.map +1 -1
- package/dist/core/tools/shell-contract-router.js +23 -2
- package/dist/core/tools/shell-contract-router.js.map +1 -1
- package/dist/core/tools/shell-session.d.ts +89 -0
- package/dist/core/tools/shell-session.d.ts.map +1 -0
- package/dist/core/tools/shell-session.js +432 -0
- package/dist/core/tools/shell-session.js.map +1 -0
- package/dist/core/tools/task-steps.d.ts +6 -0
- package/dist/core/tools/task-steps.d.ts.map +1 -1
- package/dist/core/tools/task-steps.js +165 -8
- package/dist/core/tools/task-steps.js.map +1 -1
- package/dist/core/tools/tmux-dispatch.d.ts +84 -0
- package/dist/core/tools/tmux-dispatch.d.ts.map +1 -0
- package/dist/core/tools/tmux-dispatch.js +91 -0
- package/dist/core/tools/tmux-dispatch.js.map +1 -0
- package/dist/core/tools/windows-shell-engine.d.ts +42 -0
- package/dist/core/tools/windows-shell-engine.d.ts.map +1 -0
- package/dist/core/tools/windows-shell-engine.js +151 -0
- package/dist/core/tools/windows-shell-engine.js.map +1 -0
- package/dist/core/tools/windows-shell-state.d.ts +40 -0
- package/dist/core/tools/windows-shell-state.d.ts.map +1 -0
- package/dist/core/tools/windows-shell-state.js +59 -0
- package/dist/core/tools/windows-shell-state.js.map +1 -0
- package/dist/core/tools/worktree-sync.d.ts +24 -0
- package/dist/core/tools/worktree-sync.d.ts.map +1 -0
- package/dist/core/tools/worktree-sync.js +338 -0
- package/dist/core/tools/worktree-sync.js.map +1 -0
- package/dist/core/trust-manager.d.ts +4 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +20 -2
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/util/atomic-file.d.ts +55 -0
- package/dist/core/util/atomic-file.d.ts.map +1 -0
- package/dist/core/util/atomic-file.js +255 -0
- package/dist/core/util/atomic-file.js.map +1 -0
- package/dist/core/util/bounded-jsonl.d.ts +10 -0
- package/dist/core/util/bounded-jsonl.d.ts.map +1 -0
- package/dist/core/util/bounded-jsonl.js +75 -0
- package/dist/core/util/bounded-jsonl.js.map +1 -0
- package/dist/core/util/minimatch-cache.d.ts +33 -0
- package/dist/core/util/minimatch-cache.d.ts.map +1 -0
- package/dist/core/util/minimatch-cache.js +0 -0
- package/dist/core/util/minimatch-cache.js.map +1 -0
- package/dist/core/util/value-guards.d.ts +5 -0
- package/dist/core/util/value-guards.d.ts.map +1 -0
- package/dist/core/util/value-guards.js +12 -0
- package/dist/core/util/value-guards.js.map +1 -0
- package/dist/core/worktree-sync/codes.d.ts +227 -0
- package/dist/core/worktree-sync/codes.d.ts.map +1 -0
- package/dist/core/worktree-sync/codes.js +14 -0
- package/dist/core/worktree-sync/codes.js.map +1 -0
- package/dist/core/worktree-sync/git-engine.d.ts +156 -0
- package/dist/core/worktree-sync/git-engine.d.ts.map +1 -0
- package/dist/core/worktree-sync/git-engine.js +1191 -0
- package/dist/core/worktree-sync/git-engine.js.map +1 -0
- package/dist/core/worktree-sync/lane-gate.d.ts +75 -0
- package/dist/core/worktree-sync/lane-gate.d.ts.map +1 -0
- package/dist/core/worktree-sync/lane-gate.js +360 -0
- package/dist/core/worktree-sync/lane-gate.js.map +1 -0
- package/dist/core/worktree-sync/runtime.d.ts +47 -0
- package/dist/core/worktree-sync/runtime.d.ts.map +1 -0
- package/dist/core/worktree-sync/runtime.js +96 -0
- package/dist/core/worktree-sync/runtime.js.map +1 -0
- package/dist/core/worktree-sync/store.d.ts +69 -0
- package/dist/core/worktree-sync/store.d.ts.map +1 -0
- package/dist/core/worktree-sync/store.js +252 -0
- package/dist/core/worktree-sync/store.js.map +1 -0
- package/dist/core/worktree-sync/watcher.d.ts +29 -0
- package/dist/core/worktree-sync/watcher.d.ts.map +1 -0
- package/dist/core/worktree-sync/watcher.js +93 -0
- package/dist/core/worktree-sync/watcher.js.map +1 -0
- package/dist/index.d.ts +13 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +179 -1
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts +7 -0
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +197 -1
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.d.ts +16 -1
- package/dist/modes/interactive/auto-learn-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.js +50 -8
- package/dist/modes/interactive/auto-learn-controller.js.map +1 -1
- package/dist/modes/interactive/clipboard-input.d.ts +7 -1
- package/dist/modes/interactive/clipboard-input.d.ts.map +1 -1
- package/dist/modes/interactive/clipboard-input.js +44 -6
- package/dist/modes/interactive/clipboard-input.js.map +1 -1
- package/dist/modes/interactive/components/profile-resource-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/profile-resource-editor.js +23 -1
- package/dist/modes/interactive/components/profile-resource-editor.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +2 -2
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/config-backup.d.ts.map +1 -1
- package/dist/modes/interactive/config-backup.js +5 -4
- package/dist/modes/interactive/config-backup.js.map +1 -1
- package/dist/modes/interactive/extension-ui-host.d.ts +14 -0
- package/dist/modes/interactive/extension-ui-host.d.ts.map +1 -1
- package/dist/modes/interactive/extension-ui-host.js +76 -15
- package/dist/modes/interactive/extension-ui-host.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +4 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +67 -1
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/key-handlers.d.ts.map +1 -1
- package/dist/modes/interactive/key-handlers.js +1 -1
- package/dist/modes/interactive/key-handlers.js.map +1 -1
- package/dist/modes/interactive/local-model-commands.d.ts +43 -0
- package/dist/modes/interactive/local-model-commands.d.ts.map +1 -1
- package/dist/modes/interactive/local-model-commands.js +290 -3
- package/dist/modes/interactive/local-model-commands.js.map +1 -1
- package/dist/modes/interactive/profile-menu-controller.d.ts.map +1 -1
- package/dist/modes/interactive/profile-menu-controller.js +7 -7
- package/dist/modes/interactive/profile-menu-controller.js.map +1 -1
- package/dist/modes/interactive/report-commands.d.ts.map +1 -1
- package/dist/modes/interactive/report-commands.js +21 -0
- package/dist/modes/interactive/report-commands.js.map +1 -1
- package/dist/modes/interactive/session-flow-commands.d.ts +17 -2
- package/dist/modes/interactive/session-flow-commands.d.ts.map +1 -1
- package/dist/modes/interactive/session-flow-commands.js +74 -21
- 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 +16 -6
- package/dist/modes/interactive/session-io-commands.js.map +1 -1
- package/dist/modes/interactive/session-replacement-errors.d.ts +7 -0
- package/dist/modes/interactive/session-replacement-errors.d.ts.map +1 -0
- package/dist/modes/interactive/session-replacement-errors.js +15 -0
- package/dist/modes/interactive/session-replacement-errors.js.map +1 -0
- package/dist/modes/interactive/startup-checks.d.ts.map +1 -1
- package/dist/modes/interactive/startup-checks.js +1 -1
- package/dist/modes/interactive/startup-checks.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +82 -23
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +15 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js +138 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +2 -13
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard-native.d.ts +1 -0
- 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 +1 -0
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +52 -1
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/fs-watch.d.ts +11 -0
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js +20 -2
- package/dist/utils/fs-watch.js.map +1 -1
- package/dist/utils/highlight-js-languages.d.ts +4 -0
- package/dist/utils/highlight-js-languages.d.ts.map +1 -0
- package/dist/utils/highlight-js-languages.js +573 -0
- package/dist/utils/highlight-js-languages.js.map +1 -0
- package/dist/utils/platform.d.ts +3 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +8 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/shell.d.ts +7 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +21 -6
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js +53 -5
- 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 +112 -1
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/work-directory.d.ts +11 -0
- package/dist/utils/work-directory.d.ts.map +1 -1
- package/dist/utils/work-directory.js +30 -9
- package/dist/utils/work-directory.js.map +1 -1
- package/docs/UI_POLISH_ORCHESTRATION.md +44 -0
- package/docs/UI_QUALITY_ORCHESTRATION.md +30 -0
- package/docs/docs.json +4 -0
- package/docs/extensions.md +62 -2
- package/docs/harness-architecture.md +156 -0
- package/docs/keybindings.md +11 -1
- package/docs/process-matrix.md +153 -0
- package/docs/rpc.md +45 -2
- package/docs/sessions.md +15 -0
- package/docs/settings.md +128 -11
- package/docs/task-steps.md +8 -0
- package/docs/telemetry.md +19 -0
- package/docs/tmux-agent-manager.md +92 -2
- package/docs/ui-reference/README.md +9 -0
- package/docs/ui-reference/orchestration-after.txt +7 -0
- package/docs/ui-reference/orchestration-before.txt +7 -0
- package/docs/ui-reference/orchestration-reference.txt +6 -0
- package/docs/usage.md +14 -2
- package/docs/windows.md +52 -3
- package/docs/work-directory.md +42 -2
- package/docs/worktree-sync.md +250 -0
- 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/question.ts +34 -245
- package/examples/extensions/questionnaire.ts +41 -407
- 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 +10 -4
- package/dist/core/delegation/session-worker-result.d.ts +0 -16
- package/dist/core/delegation/session-worker-result.d.ts.map +0 -1
- package/dist/core/delegation/session-worker-result.js +0 -53
- package/dist/core/delegation/session-worker-result.js.map +0 -1
- package/dist/core/delegation/worker-result.d.ts +0 -15
- package/dist/core/delegation/worker-result.d.ts.map +0 -1
- package/dist/core/delegation/worker-result.js +0 -161
- package/dist/core/delegation/worker-result.js.map +0 -1
- package/dist/core/telemetry.d.ts.map +0 -1
- package/dist/core/telemetry.js.map +0 -1
- package/docs/integration-sweep-builder-blueprint-2026-07-09.md +0 -365
- package/docs/integration-sweep-resume-2026-07-09.md +0 -407
|
@@ -0,0 +1,633 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-matrix runtime composition: the pieces main.ts wires together for durable,
|
|
3
|
+
* restart-surviving master/worker process supervision.
|
|
4
|
+
*
|
|
5
|
+
* Contract:
|
|
6
|
+
* - A WORKER is any process launched with a known parent (`PI_PARENT_PID` -- set by the
|
|
7
|
+
* `--parent-pid` CLI flag, or directly by a launcher such as tmux dispatch). It self-registers
|
|
8
|
+
* its OWN entry (the single writer of that entry during normal operation) and watches its
|
|
9
|
+
* parent's liveness. On parent death it winds down GRACEFULLY -- never silently -- leaving a
|
|
10
|
+
* `resumable` payload, then exits on its own after a bounded grace window (during which it may
|
|
11
|
+
* instead be adopted by a new parent). "No new turns" after that point is automatic: a dead
|
|
12
|
+
* parent injects no further follow-ups, so the worker simply runs out of work to do.
|
|
13
|
+
* - A MASTER is everything else (no known parent). On startup it scans the matrix for orphaned
|
|
14
|
+
* workers (workers whose recorded parent is dead). Workers owned by this exact resumed session
|
|
15
|
+
* are restored automatically; foreign workers remain owner-gated interactively and report-only
|
|
16
|
+
* headlessly.
|
|
17
|
+
*
|
|
18
|
+
* Sanctioned exceptions to "a worker's entry is written only by that worker": an exact resumed
|
|
19
|
+
* parent may restore its recorded ownership, and an owner may explicitly approve adoption or
|
|
20
|
+
* cooperative cleanup of a foreign orphan. The worker later confirms/applies the directive via
|
|
21
|
+
* `pollWorkerDirective` and re-writes its own entry -- see `docs/process-matrix.md`. Outside these
|
|
22
|
+
* identity/approval-fenced handshakes, a master NEVER writes another session's entry, and nothing
|
|
23
|
+
* here ever kills a process directly.
|
|
24
|
+
*/
|
|
25
|
+
import { hostname as osHostname } from "node:os";
|
|
26
|
+
import { isAgentIdentity } from "../orchestration/agent-resume.js";
|
|
27
|
+
import { getParentPid, getParentSessionId, getProcessTaskRef } from "../process-identity.js";
|
|
28
|
+
import { getBoundWorktreeLaneKey } from "../worktree-sync/runtime.js";
|
|
29
|
+
import { buildEntryId, listEntries, readEntry, removeEntryIfUnchanged, writeEntry, writeEntryIfUnchanged, writeEntryIfUnchangedSync, } from "./store.js";
|
|
30
|
+
import { applyAdoption, applyHeartbeat, beginWindDown, buildMasterEntry, buildWorkerEntry, detectOrphanedWorkers, markClosed, markResumable, markTerminal, markTerminalNotificationDelivered, pollWorkerDirective, reconcileMatrix, } from "./supervisor.js";
|
|
31
|
+
export { getOrchestrationAgentId, getParentPid, getParentSessionId, getProcessTaskRef, PI_ORCHESTRATION_AGENT_ID_ENV, PI_PARENT_PID_ENV, PI_PARENT_SESSION_ENV, PI_TASK_REF_ENV, } from "../process-identity.js";
|
|
32
|
+
const NOOP_HANDLE = { stop: () => { } };
|
|
33
|
+
export const PROCESS_MATRIX_RESUMABLE_RETENTION_MS = 30 * 24 * 60 * 60_000;
|
|
34
|
+
function describeError(error) {
|
|
35
|
+
return error instanceof Error ? error.message : String(error);
|
|
36
|
+
}
|
|
37
|
+
function nowIso(now) {
|
|
38
|
+
return new Date(now()).toISOString();
|
|
39
|
+
}
|
|
40
|
+
function emitRuntimeNotice(config, text) {
|
|
41
|
+
try {
|
|
42
|
+
void Promise.resolve(config.notify(text)).catch((error) => {
|
|
43
|
+
config.onDiagnostic?.(`process-matrix: failed to notify session: ${describeError(error)}`);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
config.onDiagnostic?.(`process-matrix: failed to notify session: ${describeError(error)}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Start the per-session process-matrix runtime. No-op when disabled (byte-identical to not
|
|
52
|
+
* calling this at all). Never throws: a broken store must surface as a diagnostic, not a startup
|
|
53
|
+
* crash.
|
|
54
|
+
*/
|
|
55
|
+
export async function startProcessMatrixRuntime(config) {
|
|
56
|
+
if (!config.settings.enabled)
|
|
57
|
+
return NOOP_HANDLE;
|
|
58
|
+
const now = config.now ?? Date.now;
|
|
59
|
+
const parentPid = getParentPid();
|
|
60
|
+
try {
|
|
61
|
+
if (!isAgentIdentity(config.agent))
|
|
62
|
+
throw new TypeError("Process-matrix agent identity is invalid.");
|
|
63
|
+
if (parentPid !== undefined) {
|
|
64
|
+
return await startWorkerBranch(config, parentPid, now);
|
|
65
|
+
}
|
|
66
|
+
return await startMasterBranch(config, now);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
config.onDiagnostic?.(`process-matrix: runtime failed to start: ${describeError(error)}`);
|
|
70
|
+
return NOOP_HANDLE;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
// Master branch
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
async function startMasterBranch(config, now) {
|
|
77
|
+
let entry = buildMasterEntry({
|
|
78
|
+
agent: config.agent,
|
|
79
|
+
pid: process.pid,
|
|
80
|
+
hostname: osHostname(),
|
|
81
|
+
now: nowIso(now),
|
|
82
|
+
});
|
|
83
|
+
try {
|
|
84
|
+
await writeEntry(config.agentDir, entry);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
config.onDiagnostic?.(`process-matrix: failed to register master entry: ${describeError(error)}`);
|
|
88
|
+
}
|
|
89
|
+
let stopped = false;
|
|
90
|
+
let ownsEntry = true;
|
|
91
|
+
let heartbeatTask;
|
|
92
|
+
const lifetime = new AbortController();
|
|
93
|
+
const heartbeatTimer = setInterval(() => {
|
|
94
|
+
if (stopped || !ownsEntry || heartbeatTask)
|
|
95
|
+
return;
|
|
96
|
+
const expected = entry;
|
|
97
|
+
const next = applyHeartbeat(expected, nowIso(now));
|
|
98
|
+
heartbeatTask = writeEntryIfUnchanged(config.agentDir, expected.entryId, expected, next)
|
|
99
|
+
.then((written) => {
|
|
100
|
+
if (written) {
|
|
101
|
+
entry = next;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
ownsEntry = false;
|
|
105
|
+
lifetime.abort();
|
|
106
|
+
clearInterval(heartbeatTimer);
|
|
107
|
+
process.off("exit", closeOnExit);
|
|
108
|
+
config.onDiagnostic?.("process-matrix: master entry ownership moved to a newer process generation");
|
|
109
|
+
})
|
|
110
|
+
.catch((error) => {
|
|
111
|
+
config.onDiagnostic?.(`process-matrix: failed to write master heartbeat: ${describeError(error)}`);
|
|
112
|
+
})
|
|
113
|
+
.finally(() => {
|
|
114
|
+
heartbeatTask = undefined;
|
|
115
|
+
});
|
|
116
|
+
}, config.settings.heartbeatMs);
|
|
117
|
+
heartbeatTimer.unref?.();
|
|
118
|
+
// Best-effort close on process exit. A SIGKILLed master leaving "running" is fine -- reconcile's
|
|
119
|
+
// own dead-pid detection covers it; this only makes the common clean-exit case tidy.
|
|
120
|
+
const closeOnExit = () => {
|
|
121
|
+
if (!ownsEntry)
|
|
122
|
+
return;
|
|
123
|
+
try {
|
|
124
|
+
const closed = markClosed(entry, nowIso(now));
|
|
125
|
+
if (writeEntryIfUnchangedSync(config.agentDir, entry, closed))
|
|
126
|
+
entry = closed;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// Best-effort only -- see module doc.
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
process.once("exit", closeOnExit);
|
|
133
|
+
const maintenance = reconcileAndRunOrphanScan(config, now, lifetime.signal).catch((error) => {
|
|
134
|
+
config.onDiagnostic?.(`process-matrix: maintenance failed: ${describeError(error)}`);
|
|
135
|
+
});
|
|
136
|
+
return {
|
|
137
|
+
async stop() {
|
|
138
|
+
if (stopped)
|
|
139
|
+
return;
|
|
140
|
+
stopped = true;
|
|
141
|
+
lifetime.abort();
|
|
142
|
+
clearInterval(heartbeatTimer);
|
|
143
|
+
process.off("exit", closeOnExit);
|
|
144
|
+
await heartbeatTask;
|
|
145
|
+
if (ownsEntry) {
|
|
146
|
+
const closed = markClosed(entry, nowIso(now));
|
|
147
|
+
if (await writeEntryIfUnchanged(config.agentDir, entry.entryId, entry, closed))
|
|
148
|
+
entry = closed;
|
|
149
|
+
}
|
|
150
|
+
await maintenance;
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
async function reconcileAndRunOrphanScan(config, now, signal) {
|
|
155
|
+
let entries;
|
|
156
|
+
try {
|
|
157
|
+
entries = await listEntries(config.agentDir);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
config.onDiagnostic?.(`process-matrix: reconciliation failed to list entries: ${describeError(error)}`);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (signal.aborted)
|
|
164
|
+
return;
|
|
165
|
+
const reconciled = reconcileMatrix(entries, {
|
|
166
|
+
isPidAlive: (pid) => pid === process.pid || config.isProcessAlive(pid),
|
|
167
|
+
now: now(),
|
|
168
|
+
resumableTtlMs: PROCESS_MATRIX_RESUMABLE_RETENTION_MS,
|
|
169
|
+
});
|
|
170
|
+
const originalByEntryId = new Map(entries.map((entry) => [entry.entryId, entry]));
|
|
171
|
+
const recoveredEntryIdSet = new Set(reconciled.recoveredEntryIds);
|
|
172
|
+
const [prunedOutcomes, recoveredOutcomes] = await Promise.all([
|
|
173
|
+
Promise.all(reconciled.prunedEntryIds.map((entryId) => {
|
|
174
|
+
const original = originalByEntryId.get(entryId);
|
|
175
|
+
return original ? removeEntryIfUnchanged(config.agentDir, original) : false;
|
|
176
|
+
})),
|
|
177
|
+
Promise.all(reconciled.kept
|
|
178
|
+
.filter((entry) => recoveredEntryIdSet.has(entry.entryId))
|
|
179
|
+
.map((entry) => {
|
|
180
|
+
const original = originalByEntryId.get(entry.entryId);
|
|
181
|
+
return original ? writeEntryIfUnchanged(config.agentDir, entry.entryId, original, entry) : false;
|
|
182
|
+
})),
|
|
183
|
+
]);
|
|
184
|
+
if (signal.aborted)
|
|
185
|
+
return;
|
|
186
|
+
const recoveredCount = recoveredOutcomes.filter(Boolean).length;
|
|
187
|
+
const prunedCount = prunedOutcomes.filter(Boolean).length;
|
|
188
|
+
if (recoveredCount > 0) {
|
|
189
|
+
config.onDiagnostic?.(`process-matrix: recovered ${recoveredCount} interrupted Pi worker entr${recoveredCount === 1 ? "y" : "ies"}`);
|
|
190
|
+
}
|
|
191
|
+
if (prunedCount > 0) {
|
|
192
|
+
config.onDiagnostic?.(`process-matrix: pruned ${prunedCount} terminal or expired entr${prunedCount === 1 ? "y" : "ies"}`);
|
|
193
|
+
}
|
|
194
|
+
const currentEntries = await listEntries(config.agentDir);
|
|
195
|
+
await deliverTerminalNotifications(config, currentEntries, now, signal);
|
|
196
|
+
if (signal.aborted)
|
|
197
|
+
return;
|
|
198
|
+
await runOrphanScan(config, currentEntries, now, signal);
|
|
199
|
+
}
|
|
200
|
+
async function deliverTerminalNotifications(config, entries, now, signal) {
|
|
201
|
+
for (const entry of entries) {
|
|
202
|
+
if (signal.aborted ||
|
|
203
|
+
entry.status !== "closed" ||
|
|
204
|
+
!entry.terminal ||
|
|
205
|
+
entry.terminal.notificationDeliveredAt ||
|
|
206
|
+
entry.parentSessionId !== config.agent.resumeContext.sessionId)
|
|
207
|
+
continue;
|
|
208
|
+
try {
|
|
209
|
+
await config.notify(formatTerminalNotification(entry));
|
|
210
|
+
if (signal.aborted)
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
config.onDiagnostic?.(`process-matrix: failed to deliver terminal handoff for ${entry.entryId}: ${describeError(error)}`);
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
try {
|
|
218
|
+
const delivered = markTerminalNotificationDelivered(entry, nowIso(now));
|
|
219
|
+
if (!(await writeEntryIfUnchanged(config.agentDir, entry.entryId, entry, delivered))) {
|
|
220
|
+
config.onDiagnostic?.(`process-matrix: terminal handoff changed before acknowledgement for ${entry.entryId}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
config.onDiagnostic?.(`process-matrix: failed to acknowledge terminal handoff for ${entry.entryId}: ${describeError(error)}`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
function formatTerminalNotification(entry) {
|
|
229
|
+
const terminal = entry.terminal;
|
|
230
|
+
return `process-matrix: resumed agent ${entry.agent.agentId} reached a terminal process state (code ${terminal?.code ?? "none"}, signal ${terminal?.signal ?? "none"}). Inspect its persisted result before continuing.`;
|
|
231
|
+
}
|
|
232
|
+
async function runOrphanScan(config, entries, now, signal) {
|
|
233
|
+
const orphans = detectOrphanedWorkers(entries, {
|
|
234
|
+
isPidAlive: config.isProcessAlive,
|
|
235
|
+
ownSessionId: config.agent.resumeContext.sessionId,
|
|
236
|
+
});
|
|
237
|
+
if (orphans.length === 0)
|
|
238
|
+
return;
|
|
239
|
+
for (const orphan of orphans) {
|
|
240
|
+
if (signal.aborted)
|
|
241
|
+
return;
|
|
242
|
+
const recoveryBoundary = getAutomaticRecoveryBoundary(config, orphan);
|
|
243
|
+
const exactResumedParent = recoveryBoundary === undefined;
|
|
244
|
+
if (!config.isProcessAlive(orphan.pid)) {
|
|
245
|
+
if (!exactResumedParent) {
|
|
246
|
+
if (!config.hasUI) {
|
|
247
|
+
reportOwnerGatedOrphan(config, orphan, recoveryBoundary);
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
const payload = orphan.resumable;
|
|
251
|
+
if (!payload) {
|
|
252
|
+
config.onDiagnostic?.(`process-matrix: dead worker ${orphan.entryId} is not resumable because its launch context is unavailable`);
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
const resume = await config.promptConfirm(`resume agent ${payload.agent.agentId} from its persisted session?`);
|
|
256
|
+
if (!resume || signal.aborted)
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
await resumeDeadOrphan(config, orphan, signal);
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
if (exactResumedParent) {
|
|
263
|
+
await adoptLiveOrphan(config, orphan, signal);
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
if (!config.hasUI) {
|
|
267
|
+
reportOwnerGatedOrphan(config, orphan, recoveryBoundary);
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
const adopt = await config.promptConfirm(`adopt worker ${orphan.entryId} (lane ${orphan.agent.resumeContext.worktreeLaneKey ?? "none"})?`);
|
|
271
|
+
if (signal.aborted)
|
|
272
|
+
return;
|
|
273
|
+
if (adopt) {
|
|
274
|
+
await adoptLiveOrphan(config, orphan, signal);
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
const cleanup = await config.promptConfirm(`clean up worker ${orphan.entryId} gracefully?`);
|
|
278
|
+
if (!cleanup || signal.aborted)
|
|
279
|
+
continue;
|
|
280
|
+
const windingDown = beginWindDown(orphan, "user_cleanup", nowIso(now));
|
|
281
|
+
try {
|
|
282
|
+
if (!(await writeEntryIfUnchanged(config.agentDir, orphan.entryId, orphan, windingDown))) {
|
|
283
|
+
config.onDiagnostic?.(`process-matrix: cleanup skipped because ${orphan.entryId} changed`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
config.onDiagnostic?.(`process-matrix: failed to write cleanup for ${orphan.entryId}: ${describeError(error)}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
function getAutomaticRecoveryBoundary(config, orphan) {
|
|
292
|
+
if (orphan.parentSessionId !== config.agent.resumeContext.sessionId)
|
|
293
|
+
return "foreign parent session";
|
|
294
|
+
const entryTaskRef = orphan.taskRef;
|
|
295
|
+
const payloadTaskRef = orphan.resumable?.taskRef;
|
|
296
|
+
if (entryTaskRef !== undefined && payloadTaskRef !== undefined && entryTaskRef !== payloadTaskRef) {
|
|
297
|
+
return "inconsistent persisted task identity";
|
|
298
|
+
}
|
|
299
|
+
if ((payloadTaskRef ?? entryTaskRef) !== config.taskRef)
|
|
300
|
+
return "task identity does not match the current goal";
|
|
301
|
+
if (config.allowAutomaticRecovery === false)
|
|
302
|
+
return "current goal state does not permit automatic recovery";
|
|
303
|
+
return undefined;
|
|
304
|
+
}
|
|
305
|
+
function reportOwnerGatedOrphan(config, orphan, reason) {
|
|
306
|
+
config.onDiagnostic?.(`process-matrix: found owner-gated orphan ${orphan.entryId} (${reason}; report-only, non-interactive; nothing written, nothing killed)`);
|
|
307
|
+
}
|
|
308
|
+
async function adoptLiveOrphan(config, orphan, signal) {
|
|
309
|
+
if (signal.aborted)
|
|
310
|
+
return;
|
|
311
|
+
const adopted = applyAdoption(orphan, {
|
|
312
|
+
parentPid: process.pid,
|
|
313
|
+
parentSessionId: config.agent.resumeContext.sessionId,
|
|
314
|
+
});
|
|
315
|
+
try {
|
|
316
|
+
if (!(await writeEntryIfUnchanged(config.agentDir, orphan.entryId, orphan, adopted)))
|
|
317
|
+
return;
|
|
318
|
+
if (signal.aborted)
|
|
319
|
+
await writeEntryIfUnchanged(config.agentDir, orphan.entryId, adopted, orphan);
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
config.onDiagnostic?.(`process-matrix: failed to write adoption for ${orphan.entryId}: ${describeError(error)}`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
async function resumeDeadOrphan(config, orphan, signal) {
|
|
326
|
+
if (signal.aborted)
|
|
327
|
+
return;
|
|
328
|
+
const payload = orphan.resumable;
|
|
329
|
+
if (!payload || !config.resumeWorker) {
|
|
330
|
+
config.onDiagnostic?.(`process-matrix: dead worker ${orphan.entryId} is not resumable because its launch context or resume launcher is unavailable`);
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
const claimed = applyAdoption(orphan, {
|
|
334
|
+
parentPid: process.pid,
|
|
335
|
+
parentSessionId: config.agent.resumeContext.sessionId,
|
|
336
|
+
});
|
|
337
|
+
let launched;
|
|
338
|
+
try {
|
|
339
|
+
if (!(await writeEntryIfUnchanged(config.agentDir, orphan.entryId, orphan, claimed)))
|
|
340
|
+
return;
|
|
341
|
+
if (signal.aborted) {
|
|
342
|
+
await writeEntryIfUnchanged(config.agentDir, orphan.entryId, claimed, orphan);
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
const launchOutcome = await config.resumeWorker(payload);
|
|
346
|
+
if (!launchOutcome.started) {
|
|
347
|
+
await writeEntryIfUnchanged(config.agentDir, orphan.entryId, claimed, orphan);
|
|
348
|
+
config.onDiagnostic?.(`process-matrix: failed to resume ${orphan.entryId}: ${launchOutcome.reason}`);
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
launched = launchOutcome;
|
|
352
|
+
}
|
|
353
|
+
catch (error) {
|
|
354
|
+
try {
|
|
355
|
+
await writeEntryIfUnchanged(config.agentDir, orphan.entryId, claimed, orphan);
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
// The original resumable record remains the intended recovery state.
|
|
359
|
+
}
|
|
360
|
+
config.onDiagnostic?.(`process-matrix: failed to resume ${orphan.entryId}: ${describeError(error)}`);
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
const launchedEntry = { ...claimed, pid: launched.pid };
|
|
364
|
+
if (!signal.aborted) {
|
|
365
|
+
try {
|
|
366
|
+
// Bridge the interval before the replacement can self-register. Without its real PID here, a
|
|
367
|
+
// restarted master can mistake this live replacement for the original dead process and spawn
|
|
368
|
+
// a duplicate.
|
|
369
|
+
await writeEntryIfUnchanged(config.agentDir, claimed.entryId, claimed, launchedEntry);
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
config.onDiagnostic?.(`process-matrix: failed to record resumed worker pid for ${orphan.entryId}: ${describeError(error)}`);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
config.onDiagnostic?.(`process-matrix: resumed worker ${orphan.entryId} launched after owner shutdown; preserving its terminal handoff only`);
|
|
377
|
+
}
|
|
378
|
+
void launched.completion.then((result) => persistResumedWorkerTerminal(config, launchedEntry, claimed, result, signal), (error) => {
|
|
379
|
+
config.onDiagnostic?.(`process-matrix: resumed agent ${payload.agent.agentId} terminal signal failed: ${describeError(error)}`);
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
async function persistResumedWorkerTerminal(config, claimed, preLaunchClaim, result, lifetime) {
|
|
383
|
+
try {
|
|
384
|
+
const observedAt = new Date().toISOString();
|
|
385
|
+
const terminal = markTerminal(claimed, result, observedAt);
|
|
386
|
+
if (await writeEntryIfUnchanged(config.agentDir, claimed.entryId, claimed, terminal)) {
|
|
387
|
+
if (lifetime.aborted)
|
|
388
|
+
return;
|
|
389
|
+
await notifyResumedWorkerTerminal(config, terminal, lifetime);
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
const selfRegistered = await readEntry(config.agentDir, claimed.entryId);
|
|
393
|
+
if (selfRegistered?.pid === claimed.pid) {
|
|
394
|
+
const registeredTerminal = markTerminal(selfRegistered, result, observedAt);
|
|
395
|
+
if (await writeEntryIfUnchanged(config.agentDir, claimed.entryId, selfRegistered, registeredTerminal)) {
|
|
396
|
+
if (lifetime.aborted)
|
|
397
|
+
return;
|
|
398
|
+
await notifyResumedWorkerTerminal(config, registeredTerminal, lifetime);
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
// If recording the spawned PID failed (or shutdown won the race immediately after spawn), the
|
|
403
|
+
// untouched pre-launch claim proves no newer process has taken this logical entry. Upgrade it
|
|
404
|
+
// to the actual exited process before persisting its terminal handoff.
|
|
405
|
+
const fallbackTerminal = markTerminal({ ...preLaunchClaim, pid: claimed.pid }, result, observedAt);
|
|
406
|
+
if (await writeEntryIfUnchanged(config.agentDir, claimed.entryId, preLaunchClaim, fallbackTerminal)) {
|
|
407
|
+
if (lifetime.aborted)
|
|
408
|
+
return;
|
|
409
|
+
await notifyResumedWorkerTerminal(config, fallbackTerminal, lifetime);
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
if (await writeEntryIfUnchanged(config.agentDir, claimed.entryId, undefined, terminal)) {
|
|
413
|
+
if (lifetime.aborted)
|
|
414
|
+
return;
|
|
415
|
+
await notifyResumedWorkerTerminal(config, terminal, lifetime);
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
config.onDiagnostic?.(`process-matrix: ignored stale terminal handoff for ${claimed.entryId}`);
|
|
419
|
+
}
|
|
420
|
+
catch (error) {
|
|
421
|
+
config.onDiagnostic?.(`process-matrix: failed to persist terminal handoff for ${claimed.entryId}: ${describeError(error)}`);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
async function notifyResumedWorkerTerminal(config, terminal, lifetime) {
|
|
425
|
+
if (lifetime.aborted)
|
|
426
|
+
return;
|
|
427
|
+
try {
|
|
428
|
+
await config.notify(formatTerminalNotification(terminal));
|
|
429
|
+
if (lifetime.aborted)
|
|
430
|
+
return;
|
|
431
|
+
const delivered = markTerminalNotificationDelivered(terminal, new Date().toISOString());
|
|
432
|
+
if (!(await writeEntryIfUnchanged(config.agentDir, terminal.entryId, terminal, delivered))) {
|
|
433
|
+
config.onDiagnostic?.(`process-matrix: terminal handoff changed before acknowledgement for ${terminal.entryId}`);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
catch (error) {
|
|
437
|
+
config.onDiagnostic?.(`process-matrix: failed to deliver terminal handoff for ${terminal.entryId}: ${describeError(error)}`);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
// ---------------------------------------------------------------------------
|
|
441
|
+
// Worker branch
|
|
442
|
+
// ---------------------------------------------------------------------------
|
|
443
|
+
async function startWorkerBranch(config, initialParentPid, now) {
|
|
444
|
+
const parentSessionId = getParentSessionId();
|
|
445
|
+
const taskRef = (getProcessTaskRef() ?? config.taskRef)?.trim().slice(0, 512) || undefined;
|
|
446
|
+
const taskSummary = config.taskSummary?.trim().slice(0, 2_000) || undefined;
|
|
447
|
+
const laneKey = getBoundWorktreeLaneKey();
|
|
448
|
+
const contextLaneKey = config.agent.resumeContext.worktreeLaneKey;
|
|
449
|
+
if (laneKey !== contextLaneKey) {
|
|
450
|
+
throw new TypeError(`Process-matrix agent lane '${contextLaneKey ?? "none"}' does not match active lane '${laneKey ?? "none"}'.`);
|
|
451
|
+
}
|
|
452
|
+
let entry = buildWorkerEntry({
|
|
453
|
+
agent: config.agent,
|
|
454
|
+
pid: process.pid,
|
|
455
|
+
hostname: osHostname(),
|
|
456
|
+
now: nowIso(now),
|
|
457
|
+
parentPid: initialParentPid,
|
|
458
|
+
...(parentSessionId !== undefined ? { parentSessionId } : {}),
|
|
459
|
+
...(taskRef !== undefined ? { taskRef } : {}),
|
|
460
|
+
...(taskSummary !== undefined ? { taskSummary } : {}),
|
|
461
|
+
});
|
|
462
|
+
try {
|
|
463
|
+
await writeEntry(config.agentDir, entry);
|
|
464
|
+
}
|
|
465
|
+
catch (error) {
|
|
466
|
+
config.onDiagnostic?.(`process-matrix: failed to register worker entry: ${describeError(error)}`);
|
|
467
|
+
}
|
|
468
|
+
let currentParentPid = initialParentPid;
|
|
469
|
+
let currentParentSessionId = parentSessionId;
|
|
470
|
+
let stopped = false;
|
|
471
|
+
let timer;
|
|
472
|
+
let ticking = false;
|
|
473
|
+
let preserveResumableOnExit = false;
|
|
474
|
+
const closeOnExit = (code = null) => {
|
|
475
|
+
if (preserveResumableOnExit)
|
|
476
|
+
return;
|
|
477
|
+
try {
|
|
478
|
+
const terminal = markTerminal(entry, { code, signal: null }, nowIso(now));
|
|
479
|
+
if (writeEntryIfUnchangedSync(config.agentDir, entry, terminal))
|
|
480
|
+
entry = terminal;
|
|
481
|
+
}
|
|
482
|
+
catch {
|
|
483
|
+
// Best-effort. Dead-pid reconciliation remains authoritative.
|
|
484
|
+
}
|
|
485
|
+
};
|
|
486
|
+
process.once("exit", closeOnExit);
|
|
487
|
+
const stop = () => {
|
|
488
|
+
if (stopped)
|
|
489
|
+
return;
|
|
490
|
+
stopped = true;
|
|
491
|
+
if (timer)
|
|
492
|
+
clearInterval(timer);
|
|
493
|
+
timer = undefined;
|
|
494
|
+
if (!preserveResumableOnExit)
|
|
495
|
+
closeOnExit();
|
|
496
|
+
process.off("exit", closeOnExit);
|
|
497
|
+
};
|
|
498
|
+
const persist = async (expected, next, failureContext) => {
|
|
499
|
+
try {
|
|
500
|
+
if (await writeEntryIfUnchanged(config.agentDir, expected.entryId, expected, next)) {
|
|
501
|
+
entry = next;
|
|
502
|
+
return true;
|
|
503
|
+
}
|
|
504
|
+
const current = await readEntry(config.agentDir, expected.entryId);
|
|
505
|
+
if (current?.pid === process.pid)
|
|
506
|
+
entry = current;
|
|
507
|
+
else {
|
|
508
|
+
stopped = true;
|
|
509
|
+
if (timer)
|
|
510
|
+
clearInterval(timer);
|
|
511
|
+
timer = undefined;
|
|
512
|
+
process.off("exit", closeOnExit);
|
|
513
|
+
config.onDiagnostic?.("process-matrix: worker entry ownership moved to a newer process generation");
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
catch (error) {
|
|
517
|
+
config.onDiagnostic?.(`process-matrix: ${failureContext}: ${describeError(error)}`);
|
|
518
|
+
}
|
|
519
|
+
return false;
|
|
520
|
+
};
|
|
521
|
+
const startHealthyWatch = () => {
|
|
522
|
+
timer = setInterval(() => {
|
|
523
|
+
if (ticking)
|
|
524
|
+
return;
|
|
525
|
+
ticking = true;
|
|
526
|
+
void healthyTick().finally(() => {
|
|
527
|
+
ticking = false;
|
|
528
|
+
});
|
|
529
|
+
}, config.settings.watcherPollMs);
|
|
530
|
+
timer.unref?.();
|
|
531
|
+
};
|
|
532
|
+
const declaredParentIsAlive = async () => {
|
|
533
|
+
// PID liveness alone is not process identity: a reused PID could otherwise keep a worker
|
|
534
|
+
// attached to an unrelated process forever. The parent session's own fresh master entry binds
|
|
535
|
+
// PID to a durable identity and proves that that exact session is still heartbeating.
|
|
536
|
+
if (!currentParentSessionId || !config.isProcessAlive(currentParentPid))
|
|
537
|
+
return false;
|
|
538
|
+
const parent = await readEntry(config.agentDir, buildEntryId("master", currentParentSessionId));
|
|
539
|
+
if (!parent || parent.role !== "master" || parent.agent.resumeContext.sessionId !== currentParentSessionId)
|
|
540
|
+
return false;
|
|
541
|
+
if (parent.pid !== currentParentPid || parent.status !== "running")
|
|
542
|
+
return false;
|
|
543
|
+
const heartbeatAt = Date.parse(parent.heartbeatAt);
|
|
544
|
+
const maxAge = config.settings.heartbeatMs * 2 + config.settings.watcherPollMs;
|
|
545
|
+
return Number.isFinite(heartbeatAt) && now() - heartbeatAt <= maxAge;
|
|
546
|
+
};
|
|
547
|
+
const healthyTick = async () => {
|
|
548
|
+
if (stopped)
|
|
549
|
+
return;
|
|
550
|
+
if (!(await declaredParentIsAlive())) {
|
|
551
|
+
await enterWindDown();
|
|
552
|
+
return;
|
|
553
|
+
}
|
|
554
|
+
// Still healthy: also poll for a master-initiated cooperative-cleanup directive.
|
|
555
|
+
const fresh = await readEntry(config.agentDir, entry.entryId);
|
|
556
|
+
if (!fresh)
|
|
557
|
+
return;
|
|
558
|
+
const directive = pollWorkerDirective(fresh, currentParentPid, { isPidAlive: config.isProcessAlive });
|
|
559
|
+
if (directive.code !== "user_cleanup")
|
|
560
|
+
return;
|
|
561
|
+
if (!(await persist(fresh, beginWindDown(fresh, "user_cleanup", nowIso(now)), "failed to write a master-requested worker wind-down")))
|
|
562
|
+
return;
|
|
563
|
+
emitRuntimeNotice(config, "process-matrix: the parent session requested a cooperative cleanup. Winding down.");
|
|
564
|
+
stop();
|
|
565
|
+
config.requestExit();
|
|
566
|
+
};
|
|
567
|
+
const enterWindDown = async () => {
|
|
568
|
+
const windDownAt = nowIso(now);
|
|
569
|
+
const expected = entry;
|
|
570
|
+
const resumable = { lastCode: "resumable", agent: structuredClone(config.agent) };
|
|
571
|
+
if (expected.taskRef !== undefined)
|
|
572
|
+
resumable.taskRef = expected.taskRef;
|
|
573
|
+
if (expected.taskSummary !== undefined)
|
|
574
|
+
resumable.taskSummary = expected.taskSummary;
|
|
575
|
+
const woundDown = markResumable(beginWindDown(expected, "parent_lost", windDownAt), resumable, windDownAt);
|
|
576
|
+
if (!(await persist(expected, woundDown, "failed to write worker wind-down")))
|
|
577
|
+
return;
|
|
578
|
+
if (timer)
|
|
579
|
+
clearInterval(timer);
|
|
580
|
+
timer = undefined;
|
|
581
|
+
preserveResumableOnExit = true;
|
|
582
|
+
emitRuntimeNotice(config, `process-matrix: parent process (pid ${currentParentPid}) is gone. Winding down gracefully; this task is resumable.`);
|
|
583
|
+
startGraceWatch();
|
|
584
|
+
};
|
|
585
|
+
const startGraceWatch = () => {
|
|
586
|
+
const graceDeadline = now() + config.settings.adoptionGraceMs;
|
|
587
|
+
timer = setInterval(() => {
|
|
588
|
+
if (ticking)
|
|
589
|
+
return;
|
|
590
|
+
ticking = true;
|
|
591
|
+
void graceTick(graceDeadline).finally(() => {
|
|
592
|
+
ticking = false;
|
|
593
|
+
});
|
|
594
|
+
}, config.settings.watcherPollMs);
|
|
595
|
+
timer.unref?.();
|
|
596
|
+
};
|
|
597
|
+
const graceTick = async (graceDeadline) => {
|
|
598
|
+
if (stopped)
|
|
599
|
+
return;
|
|
600
|
+
const fresh = await readEntry(config.agentDir, entry.entryId);
|
|
601
|
+
if (fresh) {
|
|
602
|
+
const directive = pollWorkerDirective(fresh, currentParentPid, { isPidAlive: config.isProcessAlive });
|
|
603
|
+
if (directive.code === "adopt" && fresh.parentSessionId) {
|
|
604
|
+
// The adopting master persists its session id with the pid. Require both on the next
|
|
605
|
+
// healthy tick; accepting a pid-only adoption would reintroduce the PID-reuse bug.
|
|
606
|
+
if (!(await persist(fresh, applyAdoption(fresh, { parentPid: directive.parentPid, parentSessionId: fresh.parentSessionId }), "failed to write worker adoption")))
|
|
607
|
+
return;
|
|
608
|
+
emitRuntimeNotice(config, `process-matrix: adopted by a new parent (pid ${directive.parentPid}). Resuming.`);
|
|
609
|
+
currentParentPid = directive.parentPid;
|
|
610
|
+
currentParentSessionId = fresh.parentSessionId;
|
|
611
|
+
preserveResumableOnExit = false;
|
|
612
|
+
if (timer) {
|
|
613
|
+
clearInterval(timer);
|
|
614
|
+
timer = undefined;
|
|
615
|
+
}
|
|
616
|
+
startHealthyWatch();
|
|
617
|
+
return;
|
|
618
|
+
}
|
|
619
|
+
if (directive.code === "user_cleanup") {
|
|
620
|
+
stop();
|
|
621
|
+
config.requestExit();
|
|
622
|
+
return;
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
if (now() >= graceDeadline) {
|
|
626
|
+
stop();
|
|
627
|
+
config.requestExit();
|
|
628
|
+
}
|
|
629
|
+
};
|
|
630
|
+
startHealthyWatch();
|
|
631
|
+
return { stop };
|
|
632
|
+
}
|
|
633
|
+
//# sourceMappingURL=runtime.js.map
|