@caupulican/pi-adaptative 0.81.39 → 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 +52 -0
- package/README.md +2 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts +2 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js +2 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.ts +3 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts +9 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +290 -107
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +357 -122
- package/dist/bundled-resources/skills/tool-call-repair/references/repair-catalogue.md +2 -2
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +9 -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 +19 -2
- package/dist/core/agent-paths.d.ts.map +1 -1
- package/dist/core/agent-paths.js +67 -4
- package/dist/core/agent-paths.js.map +1 -1
- 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 +1 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +71 -136
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +477 -1318
- 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 +20 -12
- 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 +14 -0
- package/dist/core/autonomy/lane-tracker.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tracker.js +38 -0
- 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 +54 -236
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +140 -1273
- package/dist/core/background-lane-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 +12 -11
- package/dist/core/compaction-support.d.ts.map +1 -1
- 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-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 +10 -5
- package/dist/core/context-gc.js.map +1 -1
- package/dist/core/context-pipeline.d.ts.map +1 -1
- package/dist/core/context-pipeline.js +9 -4
- package/dist/core/context-pipeline.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-result.d.ts → worker-claim.d.ts} +13 -13
- package/dist/core/delegation/worker-claim.d.ts.map +1 -0
- package/dist/core/delegation/{worker-result.js → worker-claim.js} +61 -51
- 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 +50 -15
- 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 +6 -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 +70 -21
- 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/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 +1 -1
- package/dist/core/goals/goal-continuation-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-controller.js +10 -0
- package/dist/core/goals/goal-continuation-controller.js.map +1 -1
- package/dist/core/goals/goal-continuation-prompt.d.ts +1 -1
- package/dist/core/goals/goal-continuation-prompt.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-prompt.js +6 -6
- 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 +11 -9
- package/dist/core/goals/goal-runtime-snapshot.d.ts.map +1 -1
- package/dist/core/goals/goal-runtime-snapshot.js +10 -8
- package/dist/core/goals/goal-runtime-snapshot.js.map +1 -1
- package/dist/core/goals/goal-state.d.ts +1 -0
- package/dist/core/goals/goal-state.d.ts.map +1 -1
- package/dist/core/goals/goal-state.js +7 -10
- package/dist/core/goals/goal-state.js.map +1 -1
- package/dist/core/goals/goal-tool-core.d.ts +8 -6
- package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
- package/dist/core/goals/goal-tool-core.js +11 -41
- package/dist/core/goals/goal-tool-core.js.map +1 -1
- package/dist/core/goals/session-goal-state.d.ts +2 -4
- package/dist/core/goals/session-goal-state.d.ts.map +1 -1
- package/dist/core/goals/session-goal-state.js +10 -33
- 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 +17 -1
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +24 -6
- 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/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/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.map +1 -1
- package/dist/core/model-capability.js +1 -0
- 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-controller.d.ts.map +1 -1
- package/dist/core/model-router-controller.js +2 -2
- 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 +4 -6
- package/dist/core/models/adaptation-store.d.ts.map +1 -1
- package/dist/core/models/adaptation-store.js +95 -83
- package/dist/core/models/adaptation-store.js.map +1 -1
- package/dist/core/models/fitness-store.d.ts +2 -12
- package/dist/core/models/fitness-store.d.ts.map +1 -1
- package/dist/core/models/fitness-store.js +84 -57
- 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/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/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 +14 -3
- package/dist/core/process-matrix/codes.d.ts.map +1 -1
- package/dist/core/process-matrix/codes.js.map +1 -1
- 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 +37 -22
- package/dist/core/process-matrix/runtime.d.ts.map +1 -1
- package/dist/core/process-matrix/runtime.js +399 -76
- package/dist/core/process-matrix/runtime.js.map +1 -1
- package/dist/core/process-matrix/store.d.ts +5 -2
- package/dist/core/process-matrix/store.d.ts.map +1 -1
- package/dist/core/process-matrix/store.js +123 -14
- package/dist/core/process-matrix/store.js.map +1 -1
- package/dist/core/process-matrix/supervisor.d.ts +10 -7
- package/dist/core/process-matrix/supervisor.d.ts.map +1 -1
- package/dist/core/process-matrix/supervisor.js +45 -14
- package/dist/core/process-matrix/supervisor.js.map +1 -1
- package/dist/core/profile-registry.d.ts.map +1 -1
- package/dist/core/profile-registry.js +6 -8
- package/dist/core/profile-registry.js.map +1 -1
- package/dist/core/reflection-controller.d.ts +4 -4
- package/dist/core/reflection-controller.d.ts.map +1 -1
- package/dist/core/reflection-controller.js +2 -1
- package/dist/core/reflection-controller.js.map +1 -1
- package/dist/core/reload-blockers.d.ts.map +1 -1
- package/dist/core/reload-blockers.js +6 -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 +7 -2
- 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 +26 -20
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +237 -178
- package/dist/core/runtime-builder.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 +61 -24
- 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 +6 -4
- package/dist/core/session-role.d.ts.map +1 -1
- package/dist/core/session-role.js +10 -4
- package/dist/core/session-role.js.map +1 -1
- 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 +9 -4
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +80 -28
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/tasks/session-task-state.d.ts +2 -4
- package/dist/core/tasks/session-task-state.d.ts.map +1 -1
- package/dist/core/tasks/session-task-state.js +10 -28
- package/dist/core/tasks/session-task-state.js.map +1 -1
- 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 +4 -0
- package/dist/core/tasks/task-state.d.ts.map +1 -1
- package/dist/core/tasks/task-state.js +28 -11
- 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-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 +2 -3
- package/dist/core/tool-recovery-log-records.d.ts.map +1 -1
- package/dist/core/tool-recovery-log-records.js +9 -35
- package/dist/core/tool-recovery-log-records.js.map +1 -1
- package/dist/core/tool-selection/tool-performance-store.d.ts +3 -7
- package/dist/core/tool-selection/tool-performance-store.d.ts.map +1 -1
- package/dist/core/tool-selection/tool-performance-store.js +97 -138
- package/dist/core/tool-selection/tool-performance-store.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/delegate-status.d.ts +31 -3
- package/dist/core/tools/delegate-status.d.ts.map +1 -1
- package/dist/core/tools/delegate-status.js +149 -29
- 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 +108 -23
- 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 +5 -5
- package/dist/core/tools/goal.d.ts.map +1 -1
- package/dist/core/tools/goal.js +10 -10
- package/dist/core/tools/goal.js.map +1 -1
- package/dist/core/tools/model-fitness.d.ts.map +1 -1
- package/dist/core/tools/model-fitness.js +2 -2
- 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/task-steps.d.ts +2 -0
- package/dist/core/tools/task-steps.d.ts.map +1 -1
- package/dist/core/tools/task-steps.js +102 -0
- package/dist/core/tools/task-steps.js.map +1 -1
- package/dist/core/tools/tmux-dispatch.d.ts +3 -5
- package/dist/core/tools/tmux-dispatch.d.ts.map +1 -1
- package/dist/core/tools/tmux-dispatch.js +4 -4
- package/dist/core/tools/tmux-dispatch.js.map +1 -1
- package/dist/core/tools/windows-shell-engine.d.ts.map +1 -1
- package/dist/core/tools/windows-shell-engine.js +4 -6
- package/dist/core/tools/windows-shell-engine.js.map +1 -1
- 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/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/store.d.ts +3 -3
- package/dist/core/worktree-sync/store.d.ts.map +1 -1
- package/dist/core/worktree-sync/store.js +10 -5
- package/dist/core/worktree-sync/store.js.map +1 -1
- 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 +128 -44
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts +4 -6
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +186 -28
- package/dist/migrations.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/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 +3 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +63 -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/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 +50 -17
- 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/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/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 +59 -26
- package/docs/rpc.md +45 -2
- package/docs/sessions.md +15 -0
- package/docs/settings.md +125 -11
- package/docs/task-steps.md +8 -0
- package/docs/telemetry.md +19 -0
- package/docs/tmux-agent-manager.md +10 -3
- 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/work-directory.md +19 -8
- 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 +4 -4
- package/dist/core/delegation/session-worker-result.d.ts +0 -46
- package/dist/core/delegation/session-worker-result.d.ts.map +0 -1
- package/dist/core/delegation/session-worker-result.js +0 -113
- package/dist/core/delegation/session-worker-result.js.map +0 -1
- package/dist/core/delegation/worker-result.d.ts.map +0 -1
- 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
|
@@ -4,7 +4,12 @@ import * as fs from "node:fs";
|
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
5
|
import * as path from "node:path";
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
type ExtensionAPI,
|
|
9
|
+
type ExtensionContext,
|
|
10
|
+
getProcessWorkRun,
|
|
11
|
+
PI_ORCHESTRATION_AGENT_ID_ENV,
|
|
12
|
+
} from "@caupulican/pi-adaptative";
|
|
8
13
|
import type { AgentToolResult } from "@caupulican/pi-agent-core";
|
|
9
14
|
import type { Usage } from "@caupulican/pi-ai";
|
|
10
15
|
import { Type } from "typebox";
|
|
@@ -14,6 +19,7 @@ import {
|
|
|
14
19
|
buildLaunchProfileFlags,
|
|
15
20
|
buildTombstone,
|
|
16
21
|
countGrantUsages,
|
|
22
|
+
DEFAULT_READ_BIASED_TOOLS,
|
|
17
23
|
decodeTmuxWorkerUsageClaim,
|
|
18
24
|
describeGrant,
|
|
19
25
|
GRANT_CUSTOM_TYPE,
|
|
@@ -99,8 +105,8 @@ type Params = {
|
|
|
99
105
|
dryRun?: boolean;
|
|
100
106
|
force?: boolean;
|
|
101
107
|
confirm?: string;
|
|
102
|
-
/** Goal this dispatch/grant is scoped to.
|
|
103
|
-
*
|
|
108
|
+
/** Goal this dispatch/grant is scoped to. Goal-bound dispatch wires this through to grant
|
|
109
|
+
* coverage, managed-lane ownership, and the child process's task-recovery fence. */
|
|
104
110
|
goalId?: string;
|
|
105
111
|
/** grant_dispatch: target agent for the standing grant. revoke_grant: unused (the active grant's own
|
|
106
112
|
* agent is used for its tombstone; this field is not required to revoke). */
|
|
@@ -162,6 +168,15 @@ type FireAgentPlan = {
|
|
|
162
168
|
/** Mirrors `AgentSpec.worktreeLane` -- carried onto the plan so `applyLaunchProfile` (per-agent
|
|
163
169
|
* flags) and the dispatch-phase `reportManagedLane` call can both read it after `buildFireTaskPlan`. */
|
|
164
170
|
worktreeLane?: string;
|
|
171
|
+
/** Durable host-lifecycle metadata for the current turn. */
|
|
172
|
+
dispatchAuthorizationId?: string;
|
|
173
|
+
dispatchAuthorizationKind?: "standing-grant" | "one-shot-owner-approval" | "legacy-recovery";
|
|
174
|
+
dispatchAllowedTools?: string[];
|
|
175
|
+
dispatchWritePaths?: string[];
|
|
176
|
+
dispatchMaxCostUsd?: number;
|
|
177
|
+
dispatchInstructions?: string;
|
|
178
|
+
dispatchGoalId?: string;
|
|
179
|
+
dispatchLeaseTtlMs?: number;
|
|
165
180
|
};
|
|
166
181
|
type FireTaskPlan = {
|
|
167
182
|
id: string;
|
|
@@ -192,22 +207,37 @@ type FireTaskPlan = {
|
|
|
192
207
|
* synthesized single-agent, single-turn spec (send_followup, reconcile resume) can reuse it without
|
|
193
208
|
* fabricating unrelated FireTaskPlan fields (createdAt, jobPath, task, ...). */
|
|
194
209
|
type PaneWatcherJobSpec = Pick<FireTaskPlan, "id" | "sessionName" | "deadlineSeconds" | "agents">;
|
|
195
|
-
type
|
|
210
|
+
type ManagedLaneDispatchBridge = {
|
|
211
|
+
sequence: number;
|
|
212
|
+
instructions: string;
|
|
213
|
+
profileId: string;
|
|
214
|
+
provider: string;
|
|
215
|
+
authorizationId: string;
|
|
216
|
+
authorizationKind: "standing-grant" | "one-shot-owner-approval" | "legacy-recovery";
|
|
217
|
+
allowedTools: readonly string[];
|
|
218
|
+
writePaths: readonly string[];
|
|
219
|
+
maxCostUsd?: number;
|
|
220
|
+
leaseTtlMs: number;
|
|
221
|
+
};
|
|
222
|
+
type ManagedLaneBridgeEventBase = {
|
|
196
223
|
laneId: string;
|
|
197
|
-
phase: "dispatch" | "terminal";
|
|
198
224
|
goalId?: string;
|
|
199
|
-
status?: string;
|
|
200
|
-
reasonCode?: string;
|
|
201
|
-
changedFiles?: string[];
|
|
202
225
|
worktreeLaneKey?: string;
|
|
203
|
-
request?: unknown;
|
|
204
|
-
usage?: Usage;
|
|
205
226
|
};
|
|
227
|
+
type ManagedLaneBridgeEvent =
|
|
228
|
+
| (ManagedLaneBridgeEventBase & { phase: "dispatch"; dispatch: ManagedLaneDispatchBridge })
|
|
229
|
+
| (ManagedLaneBridgeEventBase & {
|
|
230
|
+
phase: "terminal";
|
|
231
|
+
status?: string;
|
|
232
|
+
reasonCode?: string;
|
|
233
|
+
changedFiles?: string[];
|
|
234
|
+
usage?: Usage;
|
|
235
|
+
});
|
|
206
236
|
/** The subset of `ExtensionAPI` this file calls through a narrow local type instead of the full
|
|
207
237
|
* `ExtensionAPI`, so a lightweight test double only needs to implement what a given test path actually
|
|
208
|
-
* exercises. `reportManagedLane
|
|
209
|
-
*
|
|
210
|
-
*
|
|
238
|
+
* exercises. Production hosts provide `reportManagedLane`, making its pre-launch durable reservation a
|
|
239
|
+
* hard gate. The optional shape only preserves standalone extension-test hosts; without the bridge,
|
|
240
|
+
* lifecycle durability is explicitly unavailable. `reportSpawnedUsage` remains an advisory claim sink.
|
|
211
241
|
* `appendEntry`/`getFlag`/`registerFlag` back the STANDING GRANT itself (session persistence + the
|
|
212
242
|
* non-interactive opt-in flag); `registerFlag` is called unconditionally at extension load so it stays
|
|
213
243
|
* optional-chained too, while `appendEntry`/`getFlag` are asserted present at the point a grant action
|
|
@@ -226,6 +256,126 @@ function agentLaneId(jobId: string, agentId: string): string {
|
|
|
226
256
|
return `tmux:${jobId}:${agentId}`;
|
|
227
257
|
}
|
|
228
258
|
|
|
259
|
+
function managedDispatch(job: FireTaskPlan, agent: FireAgentPlan): ManagedLaneDispatchBridge {
|
|
260
|
+
const sequence = agent.currentTurn ?? 1;
|
|
261
|
+
const instructions = agent.dispatchInstructions ?? job.task;
|
|
262
|
+
const authorizationId = agent.dispatchAuthorizationId ?? `legacy-job:${job.id}:turn:${sequence}`;
|
|
263
|
+
return {
|
|
264
|
+
sequence,
|
|
265
|
+
instructions,
|
|
266
|
+
profileId: `tmux:${agent.provider}`,
|
|
267
|
+
provider: agent.provider,
|
|
268
|
+
authorizationId,
|
|
269
|
+
authorizationKind: agent.dispatchAuthorizationKind ?? "legacy-recovery",
|
|
270
|
+
allowedTools: agent.dispatchAllowedTools ?? DEFAULT_READ_BIASED_TOOLS,
|
|
271
|
+
writePaths: agent.dispatchWritePaths ?? [],
|
|
272
|
+
...(agent.dispatchMaxCostUsd !== undefined ? { maxCostUsd: agent.dispatchMaxCostUsd } : {}),
|
|
273
|
+
leaseTtlMs: agent.dispatchLeaseTtlMs ?? job.deadlineSeconds * 1_000,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function managedAuthorization(
|
|
278
|
+
grant: TmuxDispatchGrant | undefined,
|
|
279
|
+
fallbackId: string,
|
|
280
|
+
): {
|
|
281
|
+
authorizationId: string;
|
|
282
|
+
authorizationKind: "standing-grant" | "one-shot-owner-approval";
|
|
283
|
+
launchSource: LaunchProfileSource;
|
|
284
|
+
allowedTools: string[];
|
|
285
|
+
writePaths: string[];
|
|
286
|
+
maxCostUsd?: number;
|
|
287
|
+
} {
|
|
288
|
+
const launchSource = grant ? launchProfileSourceFromGrant(grant) : ONE_SHOT_LAUNCH_PROFILE_SOURCE;
|
|
289
|
+
return {
|
|
290
|
+
authorizationId: grant?.grantId ?? fallbackId,
|
|
291
|
+
authorizationKind: grant ? "standing-grant" : "one-shot-owner-approval",
|
|
292
|
+
launchSource,
|
|
293
|
+
allowedTools: [...(launchSource.allowedTools?.length ? launchSource.allowedTools : DEFAULT_READ_BIASED_TOOLS)],
|
|
294
|
+
writePaths: [...(launchSource.writePaths ?? [])],
|
|
295
|
+
...(grant?.budget.maxUsdAdvisory !== undefined ? { maxCostUsd: grant.budget.maxUsdAdvisory } : {}),
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
function applyManagedAuthorization(
|
|
300
|
+
agent: FireAgentPlan,
|
|
301
|
+
authorization: ReturnType<typeof managedAuthorization>,
|
|
302
|
+
args: { instructions: string; goalId?: string; leaseTtlMs: number },
|
|
303
|
+
): void {
|
|
304
|
+
agent.dispatchAuthorizationId = authorization.authorizationId;
|
|
305
|
+
agent.dispatchAuthorizationKind = authorization.authorizationKind;
|
|
306
|
+
agent.dispatchAllowedTools = [...authorization.allowedTools];
|
|
307
|
+
agent.dispatchWritePaths = [...authorization.writePaths];
|
|
308
|
+
if (authorization.maxCostUsd !== undefined) agent.dispatchMaxCostUsd = authorization.maxCostUsd;
|
|
309
|
+
else delete agent.dispatchMaxCostUsd;
|
|
310
|
+
agent.dispatchInstructions = args.instructions;
|
|
311
|
+
agent.dispatchGoalId = args.goalId;
|
|
312
|
+
agent.dispatchLeaseTtlMs = args.leaseTtlMs;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
function reportManagedDispatchReservations(
|
|
316
|
+
bridge: HostBridge,
|
|
317
|
+
job: FireTaskPlan,
|
|
318
|
+
agents: readonly FireAgentPlan[],
|
|
319
|
+
): void {
|
|
320
|
+
if (!bridge.reportManagedLane) return;
|
|
321
|
+
const attemptedLaneIds: string[] = [];
|
|
322
|
+
try {
|
|
323
|
+
for (const agent of agents) {
|
|
324
|
+
const laneId = agentLaneId(job.id, agent.id);
|
|
325
|
+
attemptedLaneIds.push(laneId);
|
|
326
|
+
bridge.reportManagedLane({
|
|
327
|
+
laneId,
|
|
328
|
+
phase: "dispatch",
|
|
329
|
+
goalId: agent.dispatchGoalId,
|
|
330
|
+
worktreeLaneKey: agent.worktreeLane,
|
|
331
|
+
dispatch: managedDispatch(job, agent),
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
} catch (error: unknown) {
|
|
335
|
+
for (const laneId of attemptedLaneIds) {
|
|
336
|
+
try {
|
|
337
|
+
bridge.reportManagedLane({
|
|
338
|
+
laneId,
|
|
339
|
+
phase: "terminal",
|
|
340
|
+
status: "failed",
|
|
341
|
+
reasonCode: "managed_process_launch_reservation_failed",
|
|
342
|
+
});
|
|
343
|
+
} catch {
|
|
344
|
+
// Preserve the reservation error; durable leases fence any compensation failure.
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
throw error;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
function reportManagedLaunchFailure(bridge: HostBridge, job: FireTaskPlan, reasonCode: string): void {
|
|
352
|
+
if (!bridge.reportManagedLane) return;
|
|
353
|
+
for (const agent of job.agents) {
|
|
354
|
+
reportManagedAgentFailure(bridge, job.id, agent.id, reasonCode);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
function reportManagedAgentFailure(bridge: HostBridge, jobId: string, agentId: string, reasonCode: string): void {
|
|
359
|
+
if (!bridge.reportManagedLane) return;
|
|
360
|
+
try {
|
|
361
|
+
bridge.reportManagedLane({
|
|
362
|
+
laneId: agentLaneId(jobId, agentId),
|
|
363
|
+
phase: "terminal",
|
|
364
|
+
status: "failed",
|
|
365
|
+
reasonCode,
|
|
366
|
+
});
|
|
367
|
+
} catch {
|
|
368
|
+
// Preserve the launch failure; durable leases fence any terminal-report failure.
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
function sameStringValues(left: readonly string[], right: readonly string[]): boolean {
|
|
373
|
+
if (left.length !== right.length) return false;
|
|
374
|
+
const sortedLeft = [...left].sort();
|
|
375
|
+
const sortedRight = [...right].sort();
|
|
376
|
+
return sortedLeft.every((value, index) => value === sortedRight[index]);
|
|
377
|
+
}
|
|
378
|
+
|
|
229
379
|
const EXTENSION_ROOT = path.dirname(fileURLToPath(import.meta.url));
|
|
230
380
|
export function getTmuxAgentManagerDataRoot(): string {
|
|
231
381
|
const agentDir =
|
|
@@ -379,6 +529,9 @@ function runTmux(args: string[], timeoutMs = 5_000): RunResult {
|
|
|
379
529
|
args: [tmux, ...args],
|
|
380
530
|
};
|
|
381
531
|
}
|
|
532
|
+
function requireTmuxRun(result: RunResult, action: string): void {
|
|
533
|
+
if (!result.ok) throw new Error(`${action} failed: ${result.error || result.stderr || `exit ${result.status}`}`);
|
|
534
|
+
}
|
|
382
535
|
function detectTmux(): TmuxDetection {
|
|
383
536
|
const tmuxBin = process.env.PI_TMUX_MANAGER_TMUX_BIN || findExecutable("tmux");
|
|
384
537
|
const errors: string[] = [];
|
|
@@ -887,6 +1040,22 @@ function turnWatcherPath(job: FireTaskPlan, turn: number): string {
|
|
|
887
1040
|
function currentResultPath(job: FireTaskPlan, agent: FireAgentPlan): string {
|
|
888
1041
|
return turnResultPath(job.jobDir, agent.id, agent.currentTurn ?? 1, agent.resultPath);
|
|
889
1042
|
}
|
|
1043
|
+
|
|
1044
|
+
function persistAgentTurnFailure(jobId: string, agentId: string, turn: number, reason: string): void {
|
|
1045
|
+
persistJobPatch(jobId, (current) => {
|
|
1046
|
+
const agent = current.agents.find((entry) => entry.id === agentId);
|
|
1047
|
+
if (!agent || agent.currentTurn !== turn) return undefined;
|
|
1048
|
+
const result: AgentResult = {
|
|
1049
|
+
status: "failed",
|
|
1050
|
+
detectedAt: new Date().toISOString(),
|
|
1051
|
+
reason,
|
|
1052
|
+
};
|
|
1053
|
+
fs.writeFileSync(currentResultPath(current, agent), `${JSON.stringify(result, null, 2)}\n`, { mode: 0o600 });
|
|
1054
|
+
agent.result = result;
|
|
1055
|
+
delete agent.pendingTurn;
|
|
1056
|
+
return current;
|
|
1057
|
+
});
|
|
1058
|
+
}
|
|
890
1059
|
/** Atomically read-modify-write job.json, always from a FRESH read (never from a caller's possibly
|
|
891
1060
|
* stale in-memory copy), mirroring the temp+rename pattern the original notify path used. */
|
|
892
1061
|
function persistJobPatch(jobId: string, mutate: (current: FireTaskPlan) => FireTaskPlan | undefined): FireTaskPlan {
|
|
@@ -899,8 +1068,8 @@ function persistJobPatch(jobId: string, mutate: (current: FireTaskPlan) => FireT
|
|
|
899
1068
|
return mutated;
|
|
900
1069
|
}
|
|
901
1070
|
function sendCommandToPane(paneId: string, command: string): void {
|
|
902
|
-
runTmux(["send-keys", "-t", paneId, "-l", command]);
|
|
903
|
-
runTmux(["send-keys", "-t", paneId, "Enter"]);
|
|
1071
|
+
requireTmuxRun(runTmux(["send-keys", "-t", paneId, "-l", command]), `tmux command injection for ${paneId}`);
|
|
1072
|
+
requireTmuxRun(runTmux(["send-keys", "-t", paneId, "Enter"]), `tmux command submit for ${paneId}`);
|
|
904
1073
|
}
|
|
905
1074
|
function launchTmuxSession(
|
|
906
1075
|
sessionName: string,
|
|
@@ -921,36 +1090,50 @@ function launchTmuxSession(
|
|
|
921
1090
|
runs.push(create);
|
|
922
1091
|
if (!create.ok)
|
|
923
1092
|
throw new Error(`tmux new-session failed: ${create.error || create.stderr || `exit ${create.status}`}`);
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
const
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
1093
|
+
try {
|
|
1094
|
+
const firstPane = create.stdout.trim();
|
|
1095
|
+
paneIds.push(firstPane);
|
|
1096
|
+
sendCommandToPane(firstPane, first.command);
|
|
1097
|
+
for (const pane of panes.slice(1)) {
|
|
1098
|
+
const split = runTmux(
|
|
1099
|
+
["split-window", "-d", "-P", "-F", "#{pane_id}", "-t", `${sessionName}:0`, "-c", pane.cwd || cwd],
|
|
1100
|
+
5_000,
|
|
1101
|
+
);
|
|
1102
|
+
runs.push(split);
|
|
1103
|
+
if (!split.ok)
|
|
1104
|
+
throw new Error(`tmux split-window failed: ${split.error || split.stderr || `exit ${split.status}`}`);
|
|
1105
|
+
const paneId = split.stdout.trim();
|
|
1106
|
+
paneIds.push(paneId);
|
|
1107
|
+
sendCommandToPane(paneId, pane.command);
|
|
1108
|
+
}
|
|
1109
|
+
runs.push(runTmux(["select-layout", "-t", `${sessionName}:0`, "tiled"], 3_000));
|
|
1110
|
+
return { runs, paneIds };
|
|
1111
|
+
} catch (error: unknown) {
|
|
1112
|
+
runTmux(["kill-session", "-t", sessionName], 5_000);
|
|
1113
|
+
throw error;
|
|
938
1114
|
}
|
|
939
|
-
runs.push(runTmux(["select-layout", "-t", `${sessionName}:0`, "tiled"], 3_000));
|
|
940
|
-
return { runs, paneIds };
|
|
941
1115
|
}
|
|
942
1116
|
function injectPromptToPane(paneId: string, prompt: string, provider: Provider): void {
|
|
943
1117
|
const text = interactivePromptText(prompt);
|
|
944
1118
|
if (provider === "claude") {
|
|
945
1119
|
const bufferName = `pi-tmux-${crypto.randomBytes(4).toString("hex")}`;
|
|
946
|
-
runTmux(["set-buffer", "-b", bufferName, text], 10_000);
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
1120
|
+
requireTmuxRun(runTmux(["set-buffer", "-b", bufferName, text], 10_000), "tmux prompt buffer creation");
|
|
1121
|
+
try {
|
|
1122
|
+
requireTmuxRun(
|
|
1123
|
+
runTmux(["paste-buffer", "-b", bufferName, "-t", paneId], 10_000),
|
|
1124
|
+
`tmux prompt injection for ${paneId}`,
|
|
1125
|
+
);
|
|
1126
|
+
requireTmuxRun(runTmux(["send-keys", "-t", paneId, "Enter"], 3_000), `tmux prompt submit for ${paneId}`);
|
|
1127
|
+
} finally {
|
|
1128
|
+
runTmux(["delete-buffer", "-b", bufferName], 3_000);
|
|
1129
|
+
}
|
|
950
1130
|
return;
|
|
951
1131
|
}
|
|
952
|
-
runTmux(["send-keys", "-t", paneId, "-l", text], 10_000);
|
|
953
|
-
|
|
1132
|
+
requireTmuxRun(runTmux(["send-keys", "-t", paneId, "-l", text], 10_000), `tmux prompt injection for ${paneId}`);
|
|
1133
|
+
requireTmuxRun(
|
|
1134
|
+
runTmux(["send-keys", "-t", paneId, provider === "agy" ? "C-m" : "Enter"], 3_000),
|
|
1135
|
+
`tmux prompt submit for ${paneId}`,
|
|
1136
|
+
);
|
|
954
1137
|
}
|
|
955
1138
|
/** Write a fresh per-turn prompt + single-agent watcher script and arm `pipe-pane -O` for it. Used by
|
|
956
1139
|
* send_followup to open a NEW turn on an already-live pane. Does not inject the prompt text into the
|
|
@@ -1296,7 +1479,11 @@ function applyLaunchProfile(job: FireTaskPlan, source: LaunchProfileSource): voi
|
|
|
1296
1479
|
const flags = buildLaunchProfileFlags(
|
|
1297
1480
|
agent.worktreeLane ? { ...source, worktreeLane: agent.worktreeLane } : source,
|
|
1298
1481
|
);
|
|
1299
|
-
|
|
1482
|
+
const profiledCommand = appendLaunchProfileFlags(
|
|
1483
|
+
agent.command || defaultProviderInvocation(agent.provider),
|
|
1484
|
+
flags,
|
|
1485
|
+
);
|
|
1486
|
+
agent.command = `env ${PI_ORCHESTRATION_AGENT_ID_ENV}=${quoteShell(agentLaneId(job.id, agent.id))} ${profiledCommand}`;
|
|
1300
1487
|
}
|
|
1301
1488
|
}
|
|
1302
1489
|
/** Read an OPTIONAL, cooperative worker-reported usage claim for the turn that just went terminal (a
|
|
@@ -1498,55 +1685,77 @@ async function executeTool(
|
|
|
1498
1685
|
jobId: job.id,
|
|
1499
1686
|
description: `fire_task launch of job ${job.id} (${job.agents.length} child process${job.agents.length === 1 ? "" : "es"}: ${job.agents.map((agent) => `${agent.name}/${agent.provider}`).join(", ")})`,
|
|
1500
1687
|
});
|
|
1688
|
+
const managedAuthority = managedAuthorization(authorization.grant, `one-shot:${job.id}:turn:1`);
|
|
1689
|
+
for (const agent of job.agents) {
|
|
1690
|
+
agent.currentTurn = 1;
|
|
1691
|
+
applyManagedAuthorization(agent, managedAuthority, {
|
|
1692
|
+
instructions: job.task,
|
|
1693
|
+
goalId: params.goalId,
|
|
1694
|
+
leaseTtlMs: job.deadlineSeconds * 1_000,
|
|
1695
|
+
});
|
|
1696
|
+
}
|
|
1501
1697
|
applyLaunchProfile(job, {
|
|
1502
|
-
...
|
|
1698
|
+
...managedAuthority.launchSource,
|
|
1699
|
+
...(params.goalId ? { taskRef: params.goalId } : {}),
|
|
1503
1700
|
// Process-matrix parent identity: the dispatched child self-registers as a worker of THIS
|
|
1504
1701
|
// session and winds down gracefully if this session disappears (see dispatch-grant.ts's
|
|
1505
1702
|
// `LaunchProfileSource.parentPid`/`parentSession` doc).
|
|
1506
1703
|
parentPid: process.pid,
|
|
1507
1704
|
parentSession: ctx.sessionManager.getSessionId?.() ?? ctx.sessionManager.getSessionFile(),
|
|
1508
1705
|
});
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
bridge.reportManagedLane?.({
|
|
1525
|
-
laneId: agentLaneId(job.id, agent.id),
|
|
1526
|
-
phase: "dispatch",
|
|
1527
|
-
status: "launched",
|
|
1528
|
-
goalId: params.goalId,
|
|
1529
|
-
worktreeLaneKey: agent.worktreeLane,
|
|
1706
|
+
// The host commits the full execution grant and starts the durable lease before any child
|
|
1707
|
+
// process, job artifact, watcher, or prompt side effect occurs.
|
|
1708
|
+
reportManagedDispatchReservations(bridge, job, job.agents);
|
|
1709
|
+
let sessionCreated = false;
|
|
1710
|
+
try {
|
|
1711
|
+
const archivedJobDir = prepareJobDirForLaunch(job, params.force);
|
|
1712
|
+
const panes = job.agents.map((agent) => ({
|
|
1713
|
+
title: agent.name,
|
|
1714
|
+
cwd: agent.cwd,
|
|
1715
|
+
command: agent.command || defaultProviderInvocation(agent.provider),
|
|
1716
|
+
}));
|
|
1717
|
+
const launch = launchTmuxSession(job.sessionName, job.cwd, panes);
|
|
1718
|
+
sessionCreated = true;
|
|
1719
|
+
job.agents.forEach((agent, index) => {
|
|
1720
|
+
agent.paneId = launch.paneIds[index];
|
|
1530
1721
|
});
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1722
|
+
writeFireTaskFiles(job);
|
|
1723
|
+
const watcherPanes = startPaneWatchers(job);
|
|
1724
|
+
for (const agent of job.agents) {
|
|
1725
|
+
if (!agent.paneId) continue;
|
|
1726
|
+
injectPromptToPane(agent.paneId, fs.readFileSync(agent.promptPath, "utf8"), agent.provider);
|
|
1727
|
+
}
|
|
1728
|
+
return {
|
|
1729
|
+
content: [
|
|
1730
|
+
{
|
|
1731
|
+
type: "text",
|
|
1732
|
+
text: [
|
|
1733
|
+
`Launched tmux interactive fire-and-forget job ${job.id}.`,
|
|
1734
|
+
`Session: ${job.sessionName}`,
|
|
1735
|
+
`Attach: tmux attach -t ${job.sessionName}`,
|
|
1736
|
+
`Job state: ${job.jobPath}`,
|
|
1737
|
+
archivedJobDir ? `Archived previous job dir: ${archivedJobDir}` : undefined,
|
|
1738
|
+
"Completion: event-driven pane output watchers armed (no polling).",
|
|
1739
|
+
]
|
|
1740
|
+
.filter(Boolean)
|
|
1741
|
+
.join("\n"),
|
|
1742
|
+
},
|
|
1743
|
+
],
|
|
1744
|
+
details: {
|
|
1745
|
+
action,
|
|
1746
|
+
detection,
|
|
1747
|
+
job,
|
|
1748
|
+
runs: launch.runs,
|
|
1749
|
+
paneIds: launch.paneIds,
|
|
1750
|
+
watcherPanes,
|
|
1751
|
+
archivedJobDir,
|
|
1546
1752
|
},
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1753
|
+
};
|
|
1754
|
+
} catch (error: unknown) {
|
|
1755
|
+
if (sessionCreated) runTmux(["kill-session", "-t", job.sessionName], 5_000);
|
|
1756
|
+
reportManagedLaunchFailure(bridge, job, "managed_process_launch_failed");
|
|
1757
|
+
throw error;
|
|
1758
|
+
}
|
|
1550
1759
|
}
|
|
1551
1760
|
if (action === "send_followup") {
|
|
1552
1761
|
if (!params.jobId) throw new Error("send_followup requires jobId");
|
|
@@ -1595,12 +1804,23 @@ async function executeTool(
|
|
|
1595
1804
|
// APPROVAL-GATED LAUNCH (doctrine-regression mandatory): a follow-up dispatches a fresh
|
|
1596
1805
|
// turn into an already-running child, so there is no new child command to profile — only the
|
|
1597
1806
|
// grant/one-shot authorization is resolved here (no applyLaunchProfile call).
|
|
1598
|
-
await authorizeLaunch(bridge, ctx, {
|
|
1807
|
+
const authorization = await authorizeLaunch(bridge, ctx, {
|
|
1599
1808
|
agents: [targetAgent.provider],
|
|
1600
1809
|
goalId: params.goalId,
|
|
1601
1810
|
jobId: `${job.id}:turn:${turn}`,
|
|
1602
1811
|
description: `send_followup turn ${turn} to ${targetAgent.name} in job ${job.id}`,
|
|
1603
1812
|
});
|
|
1813
|
+
const managedAuthority = managedAuthorization(authorization.grant, `one-shot:${job.id}:turn:${turn}`);
|
|
1814
|
+
const launchAllowedTools = targetAgent.dispatchAllowedTools ?? [...DEFAULT_READ_BIASED_TOOLS];
|
|
1815
|
+
const launchWritePaths = targetAgent.dispatchWritePaths ?? [];
|
|
1816
|
+
if (
|
|
1817
|
+
!sameStringValues(launchAllowedTools, managedAuthority.allowedTools) ||
|
|
1818
|
+
!sameStringValues(launchWritePaths, managedAuthority.writePaths)
|
|
1819
|
+
) {
|
|
1820
|
+
throw new Error(
|
|
1821
|
+
`send_followup refused: authorization scope differs from the already-running process for ${targetAgent.name}; relaunch the worker to apply a new tool or write-path scope.`,
|
|
1822
|
+
);
|
|
1823
|
+
}
|
|
1604
1824
|
// Reserve before watcher/prompt side effects. Reconcile re-arms a reserved turn but never
|
|
1605
1825
|
// re-injects it, so crash recovery cannot duplicate a provider prompt.
|
|
1606
1826
|
const reserved = persistJobPatch(job.id, (current) => {
|
|
@@ -1609,28 +1829,38 @@ async function executeTool(
|
|
|
1609
1829
|
agent.currentTurn = turn;
|
|
1610
1830
|
agent.pendingTurn = turn;
|
|
1611
1831
|
agent.result = undefined;
|
|
1832
|
+
applyManagedAuthorization(agent, managedAuthority, {
|
|
1833
|
+
instructions: followupTask,
|
|
1834
|
+
goalId: params.goalId,
|
|
1835
|
+
leaseTtlMs: job.deadlineSeconds * 1_000,
|
|
1836
|
+
});
|
|
1612
1837
|
current.currentTurn = turn;
|
|
1613
1838
|
return current;
|
|
1614
1839
|
});
|
|
1615
1840
|
const reservedAgent = reserved.agents.find((agent) => agent.id === targetAgent.id);
|
|
1616
1841
|
if (!reservedAgent || reservedAgent.pendingTurn !== turn)
|
|
1617
1842
|
throw new Error(`send_followup refused: failed to reserve turn ${turn} for ${targetAgent.id}`);
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1843
|
+
try {
|
|
1844
|
+
reportManagedDispatchReservations(bridge, reserved, [reservedAgent]);
|
|
1845
|
+
} catch (error: unknown) {
|
|
1846
|
+
persistAgentTurnFailure(job.id, reservedAgent.id, turn, "managed_process_launch_reservation_failed");
|
|
1847
|
+
throw error;
|
|
1848
|
+
}
|
|
1849
|
+
let written: ReturnType<typeof dispatchAgentTurn>;
|
|
1850
|
+
try {
|
|
1851
|
+
written = dispatchAgentTurn(reserved, reservedAgent, turn, promptText);
|
|
1852
|
+
injectPromptToPane(reservedAgent.paneId as string, promptText, reservedAgent.provider);
|
|
1853
|
+
persistJobPatch(job.id, (current) => {
|
|
1854
|
+
const agent = current.agents.find((entry) => entry.id === reservedAgent.id);
|
|
1855
|
+
if (!agent || agent.pendingTurn !== turn) return undefined;
|
|
1856
|
+
delete agent.pendingTurn;
|
|
1857
|
+
return current;
|
|
1858
|
+
});
|
|
1859
|
+
} catch (error: unknown) {
|
|
1860
|
+
persistAgentTurnFailure(job.id, reservedAgent.id, turn, "managed_process_followup_failed");
|
|
1861
|
+
reportManagedAgentFailure(bridge, job.id, reservedAgent.id, "managed_process_followup_failed");
|
|
1862
|
+
throw error;
|
|
1863
|
+
}
|
|
1634
1864
|
return {
|
|
1635
1865
|
content: [
|
|
1636
1866
|
{
|
|
@@ -1796,13 +2026,8 @@ function reconcileTmuxSessions(ctx: ExtensionContext, bridge: HostBridge): void
|
|
|
1796
2026
|
if (agent.result !== undefined) continue;
|
|
1797
2027
|
if (!agent.paneId || !tmuxPaneExists(job.sessionName, agent.paneId)) continue;
|
|
1798
2028
|
if (tmuxPaneHasPipe(agent.paneId)) continue;
|
|
2029
|
+
reportManagedDispatchReservations(bridge, job, [agent]);
|
|
1799
2030
|
rearmAgentWatcher(job, agent);
|
|
1800
|
-
bridge.reportManagedLane?.({
|
|
1801
|
-
laneId: agentLaneId(job.id, agent.id),
|
|
1802
|
-
phase: "dispatch",
|
|
1803
|
-
status: "resumed",
|
|
1804
|
-
worktreeLaneKey: agent.worktreeLane,
|
|
1805
|
-
});
|
|
1806
2031
|
}
|
|
1807
2032
|
}
|
|
1808
2033
|
}
|
|
@@ -1837,27 +2062,6 @@ export default function tmuxAgentManagerExtension(pi: ExtensionAPI) {
|
|
|
1837
2062
|
// single whole-job notifiedAt flag.
|
|
1838
2063
|
const pendingAgents = job.agents.filter((agent) => (agent.notifiedTurn ?? 0) < (agent.currentTurn ?? 1));
|
|
1839
2064
|
if (pendingAgents.length === 0) continue;
|
|
1840
|
-
pi.sendMessage(
|
|
1841
|
-
{
|
|
1842
|
-
customType: "tmux-background-completion",
|
|
1843
|
-
content: formatFireTaskHandoff(job),
|
|
1844
|
-
display: true,
|
|
1845
|
-
details: {
|
|
1846
|
-
jobId: job.id,
|
|
1847
|
-
sessionName: job.sessionName,
|
|
1848
|
-
agents: job.agents.map((agent) => ({ id: agent.id, name: agent.name, status: agent.result?.status })),
|
|
1849
|
-
},
|
|
1850
|
-
},
|
|
1851
|
-
{ triggerTurn: true, deliverAs: "followUp" },
|
|
1852
|
-
);
|
|
1853
|
-
persistJobPatch(job.id, (current) => {
|
|
1854
|
-
current.notifiedAt = new Date().toISOString();
|
|
1855
|
-
for (const agent of current.agents) {
|
|
1856
|
-
const inMemoryAgent = job.agents.find((entry) => entry.id === agent.id);
|
|
1857
|
-
agent.notifiedTurn = inMemoryAgent?.currentTurn ?? agent.currentTurn ?? 1;
|
|
1858
|
-
}
|
|
1859
|
-
return current;
|
|
1860
|
-
});
|
|
1861
2065
|
for (const agent of pendingAgents) {
|
|
1862
2066
|
// Advisory-only, and only ever reported when the worker itself chose to write the
|
|
1863
2067
|
// claim file — never fabricated, never a hard cross-process cap.
|
|
@@ -1875,6 +2079,37 @@ export default function tmuxAgentManagerExtension(pi: ExtensionAPI) {
|
|
|
1875
2079
|
});
|
|
1876
2080
|
}
|
|
1877
2081
|
}
|
|
2082
|
+
// Production hosts own the sole durable wake path through reportManagedLane. The direct
|
|
2083
|
+
// message remains only for lightweight/standalone hosts that omit that bridge entirely.
|
|
2084
|
+
if (!bridge.reportManagedLane) {
|
|
2085
|
+
pi.sendMessage(
|
|
2086
|
+
{
|
|
2087
|
+
customType: "tmux-background-completion",
|
|
2088
|
+
content: formatFireTaskHandoff(job),
|
|
2089
|
+
display: true,
|
|
2090
|
+
details: {
|
|
2091
|
+
jobId: job.id,
|
|
2092
|
+
sessionName: job.sessionName,
|
|
2093
|
+
agents: job.agents.map((agent) => ({
|
|
2094
|
+
id: agent.id,
|
|
2095
|
+
name: agent.name,
|
|
2096
|
+
status: agent.result?.status,
|
|
2097
|
+
})),
|
|
2098
|
+
},
|
|
2099
|
+
},
|
|
2100
|
+
{ triggerTurn: true, deliverAs: "followUp" },
|
|
2101
|
+
);
|
|
2102
|
+
}
|
|
2103
|
+
// reportManagedLane persisted the terminal result + outbox synchronously before returning.
|
|
2104
|
+
// This marker only suppresses duplicate extension reports; it is not notification truth.
|
|
2105
|
+
persistJobPatch(job.id, (current) => {
|
|
2106
|
+
current.notifiedAt = new Date().toISOString();
|
|
2107
|
+
for (const agent of current.agents) {
|
|
2108
|
+
const inMemoryAgent = job.agents.find((entry) => entry.id === agent.id);
|
|
2109
|
+
agent.notifiedTurn = inMemoryAgent?.currentTurn ?? agent.currentTurn ?? 1;
|
|
2110
|
+
}
|
|
2111
|
+
return current;
|
|
2112
|
+
});
|
|
1878
2113
|
if (ctx.hasUI) ctx.ui.notify(`tmux background task ${job.id} completed.`, "info");
|
|
1879
2114
|
}
|
|
1880
2115
|
|
|
@@ -184,8 +184,8 @@ clean|repaired|bounced, failureModes: [1..5|other], repairsApplied:
|
|
|
184
184
|
[registry names], taught: none|note|rule}`. Link repair events to the same call's execution
|
|
185
185
|
outcome (did the repaired call succeed?) and compute recurrence-after-teach
|
|
186
186
|
per (model, failureMode). Aggregate per model into the table below. Wire
|
|
187
|
-
through the existing
|
|
188
|
-
|
|
187
|
+
through the existing tool-recovery logger and session analytics rather than a
|
|
188
|
+
new sink. The "round-trips saved" metric is simply the repaired
|
|
189
189
|
count; the "teach works" metric is recurrence decay.
|
|
190
190
|
|
|
191
191
|
## Model notes (living table; append, do not rewrite)
|
package/dist/cli/args.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export interface Args {
|
|
|
13
13
|
worktreeLane?: string;
|
|
14
14
|
parentPid?: number;
|
|
15
15
|
parentSession?: string;
|
|
16
|
+
taskRef?: string;
|
|
16
17
|
thinking?: ThinkingLevel;
|
|
17
18
|
continue?: boolean;
|
|
18
19
|
resume?: boolean;
|
|
@@ -32,6 +33,7 @@ export interface Args {
|
|
|
32
33
|
noBuiltinTools?: boolean;
|
|
33
34
|
resourceProfiles?: string[];
|
|
34
35
|
resourceProfileJson?: string[];
|
|
36
|
+
orchestrationProfile?: string;
|
|
35
37
|
extensions?: string[];
|
|
36
38
|
noExtensions?: boolean;
|
|
37
39
|
print?: boolean;
|