@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 @@
|
|
|
1
|
+
{"version":3,"file":"git-engine.js","sourceRoot":"","sources":["../../../src/core/worktree-sync/git-engine.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Worktree-sync git engine: every git-touching operation of the subsystem, built on one injected\n * `exec` seam (the `improvement-loop.ts` pattern) so each function is unit-testable with a\n * scripted exec fake and integration-testable against real git.\n *\n * Doctrine (see docs/worktree-sync.md):\n * - Git is the single source of truth. Freshness (\"is current main an ancestor of the lane\n * tip?\"), dirtiness, ahead/behind, and rebase-in-progress are RE-DERIVED per call -- the JSON\n * store (`store.ts`) contributes identity/binding only and is rebuildable via {@link reconcile}.\n * - Policy refusals are RETURNED as tagged codes (`codes.ts`), never thrown; git's own stderr\n * rides along as evidence, never as a branch condition.\n * - Nothing here deletes user work silently: releasing a lane with unlanded commits or dirty\n * files requires the explicit discard confirmation, and reconcile only marks orphans.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { hostname as osHostname } from \"node:os\";\nimport { join } from \"node:path\";\nimport { type ExecResult, execCommand } from \"../exec.ts\";\nimport { withFileLock } from \"../util/atomic-file.ts\";\nimport {\n\ttype AbortSyncResult,\n\ttype BindLaneWorkerResult,\n\ttype ConflictWorklist,\n\ttype ConflictWorklistFile,\n\ttype ContinueSyncResult,\n\ttype CreateLaneResult,\n\tEPOCH_CHANGED_PATHS_CAP,\n\tLANE_BRANCH_PREFIX,\n\ttype LandingTransaction,\n\ttype LandResult,\n\ttype LaneFacts,\n\ttype LaneRegistration,\n\ttype LaneStatusEntry,\n\ttype ReconcileResult,\n\ttype ReleaseLaneResult,\n\ttype SyncLaneResult,\n\ttype SyncStatusResult,\n\ttype WorktreeSyncPolicy,\n\ttype WorktreeSyncRefusal,\n} from \"./codes.ts\";\nimport {\n\tacquireIntegrationLock,\n\tappendAuditEvent,\n\tclearLandingTransaction,\n\tdefaultIsPidAlive,\n\tlistLanes,\n\treadEpoch,\n\treadLandingTransaction,\n\treadLane,\n\treadLockHolder,\n\treleaseIntegrationLock,\n\trepoSlug,\n\ttype SyncStorePaths,\n\tsyncStorePaths,\n\twriteEpoch,\n\twriteLandingTransaction,\n\twriteLane,\n} from \"./store.ts\";\n\nexport type WorktreeSyncExec = (\n\tcommand: string,\n\targs: string[],\n\toptions: { cwd: string; timeout?: number; signal?: AbortSignal; maxBuffer?: number; env?: NodeJS.ProcessEnv },\n) => Promise<ExecResult>;\n\nexport interface WorktreeSyncEngineOptions {\n\t/** Overrides default-branch resolution; unset resolves local `main`, then `master` (D13). */\n\tmainBranchOverride?: string;\n\t/** Active-lane ceiling; `create_lane` refuses beyond it. */\n\tmaxLanes: number;\n}\n\nexport interface WorktreeSyncEngineDeps {\n\texec: WorktreeSyncExec;\n\t/** Session cwd -- any directory inside the repo (hub checkout or a lane worktree). */\n\tcwd: string;\n\t/** Base for lane checkouts (`agent-paths.worktreesDir(agentDir)`); engine appends `<repo-slug>/<laneKey>`. */\n\tworktreesBaseDir: string;\n\toptions: WorktreeSyncEngineOptions;\n\tsignal?: AbortSignal;\n\tnow?: () => string;\n\tpid?: number;\n\tsessionId?: string;\n\t/** Injectable fs probe for deterministic tests. Default: `existsSync`. */\n\tfileExists?: (path: string) => boolean;\n\t/** Injectable file reader (conflict-marker scan, rebase progress). Default: `readFileSync`,\n\t * returning undefined on any read error. */\n\treadFile?: (path: string) => string | undefined;\n\t/** Injectable same-host pid liveness for deterministic tests. */\n\tisPidAlive?: (pid: number) => boolean;\n}\n\nexport interface RepoContext {\n\ttopLevel: string;\n\tgitCommonDir: string;\n\tmainBranch: string;\n\tmainSha: string;\n\tpaths: SyncStorePaths;\n\tslug: string;\n\t/** Checkout where the main branch is checked out (the hub); undefined when main is not checked out. */\n\thubPath?: string;\n}\n\nconst GIT_TIMEOUT_MS = 60_000;\nconst GIT_MAX_BUFFER = 1024 * 1024;\nconst LANE_KEY_RE = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;\n\n/** Production exec: `exec.ts`'s bounded `execCommand` (rolling-tail output, timeout, abort). */\nexport function createDefaultWorktreeSyncExec(): WorktreeSyncExec {\n\treturn (command, args, options) =>\n\t\texecCommand(command, args, options.cwd, {\n\t\t\ttimeout: options.timeout,\n\t\t\tsignal: options.signal,\n\t\t\tmaxBuffer: options.maxBuffer,\n\t\t\tenv: options.env,\n\t\t});\n}\n\nfunction runGit(deps: WorktreeSyncEngineDeps, cwd: string, args: string[]): Promise<ExecResult> {\n\treturn deps.exec(\"git\", args, { cwd, timeout: GIT_TIMEOUT_MS, signal: deps.signal, maxBuffer: GIT_MAX_BUFFER });\n}\n\nfunction nowIso(deps: WorktreeSyncEngineDeps): string {\n\treturn (deps.now ?? (() => new Date().toISOString()))();\n}\n\nfunction fileExists(deps: WorktreeSyncEngineDeps, path: string): boolean {\n\treturn (deps.fileExists ?? existsSync)(path);\n}\n\nfunction gitError(message: string, result: ExecResult): WorktreeSyncRefusal<\"git_error\"> {\n\treturn { code: \"git_error\", message, gitStderr: (result.stderr || result.stdout).trim().slice(0, 4000) };\n}\n\nexport function laneBranch(laneKey: string): string {\n\treturn `${LANE_BRANCH_PREFIX}${laneKey}`;\n}\n\nexport interface WorktreeListEntry {\n\tpath: string;\n\theadSha?: string;\n\t/** Full ref (`refs/heads/x`) when a branch is checked out; undefined for detached/bare. */\n\tbranchRef?: string;\n}\n\n/** Parse `git worktree list --porcelain` blocks. */\nexport function parseWorktreeList(output: string): WorktreeListEntry[] {\n\tconst entries: WorktreeListEntry[] = [];\n\tlet current: WorktreeListEntry | undefined;\n\tfor (const line of output.split(/\\r?\\n/)) {\n\t\tif (line.startsWith(\"worktree \")) {\n\t\t\tif (current) entries.push(current);\n\t\t\tcurrent = { path: line.slice(\"worktree \".length) };\n\t\t} else if (line.startsWith(\"HEAD \") && current) {\n\t\t\tcurrent.headSha = line.slice(\"HEAD \".length);\n\t\t} else if (line.startsWith(\"branch \") && current) {\n\t\t\tcurrent.branchRef = line.slice(\"branch \".length);\n\t\t} else if (line.trim() === \"\" && current) {\n\t\t\tentries.push(current);\n\t\t\tcurrent = undefined;\n\t\t}\n\t}\n\tif (current) entries.push(current);\n\treturn entries;\n}\n\nasync function revParseBranch(deps: WorktreeSyncEngineDeps, cwd: string, branch: string): Promise<string | undefined> {\n\tconst result = await runGit(deps, cwd, [\"rev-parse\", \"--verify\", \"--quiet\", `refs/heads/${branch}`]);\n\tif (result.code !== 0) return undefined;\n\tconst sha = result.stdout.trim();\n\treturn sha || undefined;\n}\n\nexport async function resolveRepoContext(\n\tdeps: WorktreeSyncEngineDeps,\n): Promise<RepoContext | WorktreeSyncRefusal<\"not_a_git_repo\" | \"default_branch_unresolved\" | \"git_error\">> {\n\tconst roots = await runGit(deps, deps.cwd, [\n\t\t\"rev-parse\",\n\t\t\"--path-format=absolute\",\n\t\t\"--show-toplevel\",\n\t\t\"--git-common-dir\",\n\t]);\n\tif (roots.code !== 0) {\n\t\treturn {\n\t\t\tcode: \"not_a_git_repo\",\n\t\t\tmessage: `worktree-sync requires a git repository; ${deps.cwd} is not inside one`,\n\t\t\tgitStderr: roots.stderr.trim().slice(0, 1000),\n\t\t};\n\t}\n\tconst [topLevel, gitCommonDir] = roots.stdout\n\t\t.split(/\\r?\\n/)\n\t\t.map((line) => line.trim())\n\t\t.filter(Boolean);\n\tif (!topLevel || !gitCommonDir) {\n\t\treturn gitError(\"git rev-parse returned no toplevel/common-dir\", roots);\n\t}\n\n\t// D13: explicit resolution order -- override, `main`, `master`. Never guess further.\n\tconst candidates = deps.options.mainBranchOverride ? [deps.options.mainBranchOverride] : [\"main\", \"master\"];\n\tlet mainBranch: string | undefined;\n\tlet mainSha: string | undefined;\n\tfor (const candidate of candidates) {\n\t\tconst sha = await revParseBranch(deps, topLevel, candidate);\n\t\tif (sha) {\n\t\t\tmainBranch = candidate;\n\t\t\tmainSha = sha;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (!mainBranch || !mainSha) {\n\t\treturn {\n\t\t\tcode: \"default_branch_unresolved\",\n\t\t\tmessage: deps.options.mainBranchOverride\n\t\t\t\t? `configured main branch '${deps.options.mainBranchOverride}' does not exist locally`\n\t\t\t\t: \"no local 'main' or 'master' branch; set the worktree-sync main branch explicitly\",\n\t\t};\n\t}\n\n\tconst worktrees = await runGit(deps, topLevel, [\"worktree\", \"list\", \"--porcelain\"]);\n\tif (worktrees.code !== 0) return gitError(\"git worktree list failed\", worktrees);\n\tconst hub = parseWorktreeList(worktrees.stdout).find((entry) => entry.branchRef === `refs/heads/${mainBranch}`);\n\n\treturn {\n\t\ttopLevel,\n\t\tgitCommonDir,\n\t\tmainBranch,\n\t\tmainSha,\n\t\tpaths: syncStorePaths(gitCommonDir),\n\t\tslug: repoSlug(topLevel, gitCommonDir),\n\t\thubPath: hub?.path,\n\t};\n}\n\n/**\n * Live git facts for one lane. `fresh` is THE freshness definition of the whole subsystem\n * (G3/G9): current main is an ancestor of the lane tip. Everything is re-derived; nothing is\n * read back from a cache that could disagree with git.\n */\nexport async function deriveLaneFacts(\n\tdeps: WorktreeSyncEngineDeps,\n\tctx: RepoContext,\n\tlane: LaneRegistration,\n): Promise<LaneFacts> {\n\tconst branchSha = await revParseBranch(deps, ctx.topLevel, lane.branch);\n\n\tlet fresh = false;\n\tlet aheadOfMain = 0;\n\tlet behindMain = 0;\n\tif (branchSha) {\n\t\tconst ancestry = await runGit(deps, ctx.topLevel, [\"merge-base\", \"--is-ancestor\", ctx.mainSha, branchSha]);\n\t\tfresh = ancestry.code === 0;\n\t\tconst counts = await runGit(deps, ctx.topLevel, [\n\t\t\t\"rev-list\",\n\t\t\t\"--left-right\",\n\t\t\t\"--count\",\n\t\t\t`${ctx.mainBranch}...${lane.branch}`,\n\t\t]);\n\t\tif (counts.code === 0) {\n\t\t\tconst [left, right] = counts.stdout.trim().split(/\\s+/);\n\t\t\tbehindMain = Number.parseInt(left ?? \"0\", 10) || 0;\n\t\t\taheadOfMain = Number.parseInt(right ?? \"0\", 10) || 0;\n\t\t}\n\t}\n\n\tlet worktreePresent = fileExists(deps, lane.worktreePath);\n\tlet dirty = false;\n\tlet rebaseInProgress = false;\n\tif (worktreePresent) {\n\t\tconst status = await runGit(deps, lane.worktreePath, [\"status\", \"--porcelain\"]);\n\t\tif (status.code === 0) {\n\t\t\tdirty = status.stdout.trim().length > 0;\n\t\t\trebaseInProgress = await isRebaseActive(deps, lane.worktreePath);\n\t\t} else {\n\t\t\t// The directory exists but is not a usable worktree (e.g. pruned metadata): not present.\n\t\t\tworktreePresent = false;\n\t\t}\n\t}\n\n\tconst isAlive =\n\t\tdeps.isPidAlive ??\n\t\t((pid: number) => defaultIsPidAlive({ pid, hostname: osHostname(), token: \"status\", acquiredAt: \"\" }));\n\n\treturn {\n\t\tlaneKey: lane.laneKey,\n\t\tbranch: lane.branch,\n\t\tworktreePath: lane.worktreePath,\n\t\tregistrationStatus: lane.status,\n\t\tbranchSha,\n\t\tfresh,\n\t\tdirty,\n\t\trebaseInProgress,\n\t\taheadOfMain,\n\t\tbehindMain,\n\t\tworktreePresent,\n\t\t...(lane.ownerPid !== undefined ? { ownerAlive: isAlive(lane.ownerPid) } : {}),\n\t};\n}\n\n/** One-time repo git config (D7): shared rerere + zdiff3 conflict hunks -- the deterministic\n * conflict-resolution substrate for every lane (the rr-cache lives in the common dir, so one\n * resolution replays identically in all worktrees). Idempotent; only actual changes are audited. */\nexport async function ensureRepoGitConfig(deps: WorktreeSyncEngineDeps, ctx: RepoContext): Promise<void> {\n\tconst wanted: Array<[string, string]> = [\n\t\t[\"rerere.enabled\", \"true\"],\n\t\t[\"rerere.autoUpdate\", \"true\"],\n\t\t[\"merge.conflictStyle\", \"zdiff3\"],\n\t];\n\tconst changed: string[] = [];\n\tfor (const [key, value] of wanted) {\n\t\tconst current = await runGit(deps, ctx.topLevel, [\"config\", \"--get\", key]);\n\t\tif (current.code === 0 && current.stdout.trim() === value) continue;\n\t\tconst set = await runGit(deps, ctx.topLevel, [\"config\", key, value]);\n\t\tif (set.code === 0) changed.push(`${key}=${value}`);\n\t}\n\tif (changed.length > 0) {\n\t\tawait appendAuditEvent(ctx.paths, { event: \"config_set\", changed }, nowIso(deps));\n\t}\n}\n\nfunction sanitizeScope(scope: string): string {\n\tconst cleaned = scope\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9-]+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\")\n\t\t.slice(0, 32);\n\treturn cleaned || \"adhoc\";\n}\n\nexport interface CreateLaneArgs {\n\tlaneKey?: string;\n\tgoalId?: string;\n\trequirementId?: string;\n}\n\nexport async function createLane(deps: WorktreeSyncEngineDeps, args: CreateLaneArgs = {}): Promise<CreateLaneResult> {\n\tconst ctx = await resolveRepoContext(deps);\n\tif (\"code\" in ctx) return ctx;\n\n\treturn withFileLock(ctx.paths.lifecycleLockFile, async () => {\n\t\tif (args.laneKey !== undefined && !LANE_KEY_RE.test(args.laneKey)) {\n\t\t\treturn {\n\t\t\t\tcode: \"invalid_lane_key\",\n\t\t\t\tmessage: `laneKey '${args.laneKey}' is invalid: lowercase alphanumerics and inner dashes, max 63 chars`,\n\t\t\t};\n\t\t}\n\n\t\tconst lanes = await listLanes(ctx.paths);\n\t\tconst activeCount = lanes.filter((lane) => lane.status === \"active\").length;\n\t\tif (activeCount >= deps.options.maxLanes) {\n\t\t\treturn {\n\t\t\t\tcode: \"max_lanes_reached\",\n\t\t\t\tmessage: `active lane limit reached (${activeCount}/${deps.options.maxLanes}); release a lane first`,\n\t\t\t};\n\t\t}\n\n\t\tconst taken = new Set(lanes.filter((lane) => lane.status !== \"released\").map((lane) => lane.laneKey));\n\t\tconst isFree = async (candidate: string): Promise<boolean> => {\n\t\t\tif (taken.has(candidate)) return false;\n\t\t\tif (await revParseBranch(deps, ctx.topLevel, laneBranch(candidate))) return false;\n\t\t\tif (fileExists(deps, join(deps.worktreesBaseDir, ctx.slug, candidate))) return false;\n\t\t\treturn true;\n\t\t};\n\n\t\tlet laneKey: string;\n\t\tif (args.laneKey !== undefined) {\n\t\t\tif (!(await isFree(args.laneKey))) {\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"lane_exists\",\n\t\t\t\t\tmessage: `lane '${args.laneKey}' already exists (registration, branch, or checkout)`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tlaneKey = args.laneKey;\n\t\t} else {\n\t\t\t// Deterministic allocation: lowest free `<scope>-<n>` (scope = goalId or \"adhoc\").\n\t\t\tconst scope = sanitizeScope(args.goalId ?? \"adhoc\");\n\t\t\tlet n = 1;\n\t\t\twhile (!(await isFree(`${scope}-${n}`))) n++;\n\t\t\tlaneKey = `${scope}-${n}`;\n\t\t}\n\n\t\tawait ensureRepoGitConfig(deps, ctx);\n\n\t\tconst branch = laneBranch(laneKey);\n\t\tconst worktreePath = join(deps.worktreesBaseDir, ctx.slug, laneKey);\n\t\tconst add = await runGit(deps, ctx.topLevel, [\"worktree\", \"add\", \"-b\", branch, worktreePath, ctx.mainBranch]);\n\t\tif (add.code !== 0) return gitError(`git worktree add failed for lane '${laneKey}'`, add);\n\n\t\tconst at = nowIso(deps);\n\t\tconst lane: LaneRegistration = {\n\t\t\tlaneKey,\n\t\t\tbranch,\n\t\t\tworktreePath,\n\t\t\tstatus: \"active\",\n\t\t\tcreatedAt: at,\n\t\t\tupdatedAt: at,\n\t\t\t...(args.goalId !== undefined ? { goalId: args.goalId } : {}),\n\t\t\t...(args.requirementId !== undefined ? { requirementId: args.requirementId } : {}),\n\t\t\townerPid: deps.pid ?? process.pid,\n\t\t\t...(deps.sessionId !== undefined ? { ownerSessionId: deps.sessionId } : {}),\n\t\t};\n\t\tawait writeLane(ctx.paths, lane);\n\t\tawait appendAuditEvent(ctx.paths, { event: \"lane_created\", laneKey, branch, baseSha: ctx.mainSha }, at);\n\t\treturn { code: \"ok\", lane };\n\t});\n}\n\n/**\n * Does `lane` have a DIFFERENT, still-alive session owning it? Same same-host `isAlive` pattern\n * used elsewhere (`deps.isPidAlive`, else {@link defaultIsPidAlive} against this host). A lane\n * with no recorded owner, owned by THIS session, or whose owner is dead never conflicts --\n * `reconcile` already clears dead owners, but a race can still observe one here, and a dead owner\n * must never block land/release (D6, per R1: land/release ONLY -- sync/continue/abort_sync stay\n * ungated at the engine; worker cross-lane containment for those lives at the tool layer, D3).\n */\nfunction ownerConflicts(deps: WorktreeSyncEngineDeps, lane: LaneRegistration): boolean {\n\tif (lane.ownerSessionId == null || lane.ownerSessionId === deps.sessionId) return false;\n\tif (lane.ownerPid === undefined) return false;\n\tconst isAlive =\n\t\tdeps.isPidAlive ??\n\t\t((pid: number) => defaultIsPidAlive({ pid, hostname: osHostname(), token: \"status\", acquiredAt: \"\" }));\n\treturn isAlive(lane.ownerPid);\n}\n\nexport interface BindLaneWorkerArgs {\n\tlaneKey: string;\n\tlaneId: string;\n}\n\nexport async function bindLaneWorker(\n\tdeps: WorktreeSyncEngineDeps,\n\targs: BindLaneWorkerArgs,\n): Promise<BindLaneWorkerResult> {\n\tconst ctx = await resolveRepoContext(deps);\n\tif (\"code\" in ctx) return { code: \"store_error\", message: ctx.message };\n\treturn withFileLock(ctx.paths.lifecycleLockFile, async () => {\n\t\tconst lane = await readLane(ctx.paths, args.laneKey);\n\t\tif (!lane) return { code: \"lane_not_found\", message: `lane '${args.laneKey}' is not registered` };\n\t\tif (lane.status !== \"active\")\n\t\t\treturn { code: \"lane_not_active\", message: `lane '${args.laneKey}' is ${lane.status}` };\n\t\tif (lane.boundLaneId === args.laneId)\n\t\t\treturn { code: \"already_bound\", laneKey: args.laneKey, laneId: args.laneId };\n\t\tif (lane.boundLaneId) {\n\t\t\treturn { code: \"binding_conflict\", laneKey: args.laneKey, boundLaneId: lane.boundLaneId };\n\t\t}\n\t\tconst updated = { ...lane, boundLaneId: args.laneId, updatedAt: nowIso(deps) };\n\t\ttry {\n\t\t\tawait writeLane(ctx.paths, updated);\n\t\t\tawait appendAuditEvent(\n\t\t\t\tctx.paths,\n\t\t\t\t{ event: \"lane_worker_bound\", laneKey: args.laneKey, laneId: args.laneId },\n\t\t\t\tnowIso(deps),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\treturn { code: \"store_error\", message: `lane binding persistence failed: ${String(error)}` };\n\t\t}\n\t\treturn { code: \"bound\", laneKey: args.laneKey, laneId: args.laneId };\n\t});\n}\n\nexport interface ReleaseLaneArgs {\n\tlaneKey: string;\n\t/** Required as exactly \"yes-discard-lane\" to release a lane with unlanded commits or dirty files (G11). */\n\tconfirm?: string;\n}\n\nexport async function releaseLane(deps: WorktreeSyncEngineDeps, args: ReleaseLaneArgs): Promise<ReleaseLaneResult> {\n\tconst ctx = await resolveRepoContext(deps);\n\tif (\"code\" in ctx) return ctx;\n\n\treturn withFileLock(ctx.paths.lifecycleLockFile, async () => {\n\t\tconst lane = await readLane(ctx.paths, args.laneKey);\n\t\tif (!lane) return { code: \"lane_not_found\", message: `no registered lane '${args.laneKey}'` };\n\t\tif (lane.status === \"released\") return { code: \"released\", laneKey: lane.laneKey };\n\t\tif (ownerConflicts(deps, lane)) {\n\t\t\treturn {\n\t\t\t\tcode: \"lane_owner_conflict\",\n\t\t\t\tmessage: `lane '${lane.laneKey}' is owned by another live session (pid ${lane.ownerPid}); only its owner may release it`,\n\t\t\t};\n\t\t}\n\n\t\tconst facts = await deriveLaneFacts(deps, ctx, lane);\n\t\tlet landed = true;\n\t\tif (facts.branchSha) {\n\t\t\tconst ancestry = await runGit(deps, ctx.topLevel, [\n\t\t\t\t\"merge-base\",\n\t\t\t\t\"--is-ancestor\",\n\t\t\t\tfacts.branchSha,\n\t\t\t\tctx.mainSha,\n\t\t\t]);\n\t\t\tlanded = ancestry.code === 0;\n\t\t}\n\t\tconst unlandedWork = (facts.branchSha !== undefined && !landed) || facts.dirty;\n\t\tconst discardConfirmed = args.confirm === \"yes-discard-lane\";\n\t\tif (unlandedWork && !discardConfirmed) {\n\t\t\treturn {\n\t\t\t\tcode: \"lane_unlanded_work\",\n\t\t\t\tmessage:\n\t\t\t\t\t`lane '${lane.laneKey}' has ${facts.dirty ? \"uncommitted changes\" : \"\"}` +\n\t\t\t\t\t`${facts.dirty && !landed ? \" and \" : \"\"}${!landed ? `${facts.aheadOfMain} unlanded commit(s)` : \"\"}; ` +\n\t\t\t\t\t`land it first, or pass confirm:\"yes-discard-lane\" to discard`,\n\t\t\t};\n\t\t}\n\n\t\tif (facts.worktreePresent) {\n\t\t\tconst removeArgs = [\"worktree\", \"remove\", ...(unlandedWork ? [\"--force\"] : []), lane.worktreePath];\n\t\t\tconst remove = await runGit(deps, ctx.topLevel, removeArgs);\n\t\t\tif (remove.code !== 0) return gitError(`git worktree remove failed for lane '${lane.laneKey}'`, remove);\n\t\t}\n\t\tif (facts.branchSha) {\n\t\t\tconst del = await runGit(deps, ctx.topLevel, [\"branch\", unlandedWork ? \"-D\" : \"-d\", lane.branch]);\n\t\t\tif (del.code !== 0) return gitError(`git branch delete failed for lane '${lane.laneKey}'`, del);\n\t\t}\n\t\tawait runGit(deps, ctx.topLevel, [\"worktree\", \"prune\"]);\n\n\t\tconst at = nowIso(deps);\n\t\tawait writeLane(ctx.paths, { ...lane, status: \"released\", updatedAt: at });\n\t\tawait appendAuditEvent(\n\t\t\tctx.paths,\n\t\t\t{ event: \"lane_released\", laneKey: lane.laneKey, ...(unlandedWork ? { discarded: true } : {}) },\n\t\t\tat,\n\t\t);\n\t\treturn { code: \"released\", laneKey: lane.laneKey };\n\t});\n}\n\n/** Lane worktrees git knows about that the registry does not (yet) track: a valid `pi/wt/<key>`\n * branch, key not already registered, checkout still present. One derivation shared by the\n * write-free no-op guard below and the re-registration pass, rather than two copies of the same\n * filter. */\nfunction findUnregisteredLaneWorktrees(\n\tdeps: WorktreeSyncEngineDeps,\n\tworktrees: WorktreeListEntry[],\n\tregistered: Set<string>,\n): Array<{ laneKey: string; path: string }> {\n\tconst found: Array<{ laneKey: string; path: string }> = [];\n\tfor (const entry of worktrees) {\n\t\tconst ref = entry.branchRef;\n\t\tif (!ref?.startsWith(`refs/heads/${LANE_BRANCH_PREFIX}`)) continue;\n\t\tconst laneKey = ref.slice(`refs/heads/${LANE_BRANCH_PREFIX}`.length);\n\t\tif (registered.has(laneKey) || !LANE_KEY_RE.test(laneKey)) continue;\n\t\tif (!fileExists(deps, entry.path)) continue;\n\t\tfound.push({ laneKey, path: entry.path });\n\t}\n\treturn found;\n}\n\nasync function reconcileLandingTransaction(\n\tdeps: WorktreeSyncEngineDeps,\n\tctx: RepoContext,\n\ttransaction: LandingTransaction,\n): Promise<WorktreeSyncRefusal<\"git_error\"> | undefined> {\n\tconst currentMainSha = await revParseBranch(deps, ctx.topLevel, ctx.mainBranch);\n\tif (currentMainSha === transaction.priorMainSha) {\n\t\tawait clearLandingTransaction(ctx.paths);\n\t\treturn undefined;\n\t}\n\tif (currentMainSha !== transaction.testedTipSha) {\n\t\treturn {\n\t\t\tcode: \"git_error\",\n\t\t\tmessage: `landing transaction is ambiguous: main is ${currentMainSha?.slice(0, 12) ?? \"missing\"}, expected prior ${transaction.priorMainSha.slice(0, 12)} or tested ${transaction.testedTipSha.slice(0, 12)}`,\n\t\t};\n\t}\n\n\tconst previous = await readEpoch(ctx.paths);\n\tlet epoch = previous?.epoch ?? 0;\n\tconst at = nowIso(deps);\n\tif (previous?.mainSha !== transaction.testedTipSha) {\n\t\tepoch++;\n\t\tawait writeEpoch(ctx.paths, {\n\t\t\tepoch,\n\t\t\tmainSha: transaction.testedTipSha,\n\t\t\tpreviousMainSha: transaction.priorMainSha,\n\t\t\tlandedLaneKey: transaction.laneKey,\n\t\t\tlandedAt: at,\n\t\t\tchangedPaths: transaction.changedPaths,\n\t\t\tchangedPathsTruncated: transaction.changedPathsTruncated,\n\t\t});\n\t\ttransaction = { ...transaction, stage: \"epoch_written\" };\n\t\tawait writeLandingTransaction(ctx.paths, transaction);\n\t}\n\tif (transaction.stage !== \"audit_logged\") {\n\t\tawait appendAuditEvent(\n\t\t\tctx.paths,\n\t\t\t{\n\t\t\t\tevent: \"epoch_reconciled\",\n\t\t\t\tepoch,\n\t\t\t\tlaneKey: transaction.laneKey,\n\t\t\t\tmainSha: transaction.testedTipSha,\n\t\t\t\tgate: transaction.gate,\n\t\t\t},\n\t\t\tat,\n\t\t);\n\t\tawait writeLandingTransaction(ctx.paths, { ...transaction, stage: \"audit_logged\" });\n\t}\n\tawait clearLandingTransaction(ctx.paths);\n\treturn undefined;\n}\n\n/**\n * Startup/repair pass (mirrors the tmux session reconcile): diff the registry against git\n * reality, mark orphans (never delete -- G11), re-register lane worktrees git still knows that\n * the registry lost (a deleted store is fully rebuildable), self-heal orphan registrations whose\n * worktree+branch actually exist, clear dead owners, and release a provably-stale lock.\n */\nexport async function reconcile(deps: WorktreeSyncEngineDeps): Promise<ReconcileResult> {\n\tconst ctx = await resolveRepoContext(deps);\n\tif (\"code\" in ctx) return ctx;\n\n\tconst landingTransaction = await readLandingTransaction(ctx.paths);\n\tif (landingTransaction) {\n\t\tconst recoveryLock = await acquireIntegrationLock(\n\t\t\tctx.paths,\n\t\t\t{ pid: deps.pid ?? process.pid, hostname: osHostname(), sessionId: deps.sessionId, laneKey: \"reconcile\" },\n\t\t\t{ now: deps.now },\n\t\t);\n\t\tif (!recoveryLock.acquired) {\n\t\t\treturn { code: \"git_error\", message: \"landing transaction recovery is blocked by an active integration lock\" };\n\t\t}\n\t\ttry {\n\t\t\tconst recovery = await reconcileLandingTransaction(deps, ctx, landingTransaction);\n\t\t\tif (recovery) return recovery;\n\t\t} finally {\n\t\t\tawait releaseIntegrationLock(ctx.paths, recoveryLock.token, { now: deps.now });\n\t\t}\n\t}\n\n\tconst worktreesResult = await runGit(deps, ctx.topLevel, [\"worktree\", \"list\", \"--porcelain\"]);\n\tif (worktreesResult.code !== 0) return gitError(\"git worktree list failed\", worktreesResult);\n\tconst worktrees = parseWorktreeList(worktreesResult.stdout);\n\n\tconst lanes = await listLanes(ctx.paths);\n\tconst registered = new Set(lanes.map((lane) => lane.laneKey));\n\tconst unregisteredWorktrees = findUnregisteredLaneWorktrees(deps, worktrees, registered);\n\n\t// Write-free fast path: worktree-sync now starts in every session, so a mere session open in a\n\t// git repo must never create `<git-common-dir>/pi-worktree-sync/`. When the store does not exist\n\t// yet and git shows nothing to recover, there is genuinely nothing to reconcile -- one early\n\t// determination, then skip every write below (writeLane/appendAuditEvent/releaseIntegrationLock)\n\t// rather than guarding each call individually. Once the store exists, or findings occur, behavior\n\t// is unchanged below (including the reconcile_summary audit append).\n\tif (!fileExists(deps, ctx.paths.root) && unregisteredWorktrees.length === 0) {\n\t\treturn {\n\t\t\tcode: \"reconciled\",\n\t\t\torphanedLaneKeys: [],\n\t\t\treRegisteredLaneKeys: [],\n\t\t\townerClearedLaneKeys: [],\n\t\t\tstaleLockReleased: false,\n\t\t};\n\t}\n\n\tconst isAlive =\n\t\tdeps.isPidAlive ??\n\t\t((pid: number) => defaultIsPidAlive({ pid, hostname: osHostname(), token: \"status\", acquiredAt: \"\" }));\n\tconst at = nowIso(deps);\n\n\tconst orphanedLaneKeys: string[] = [];\n\tconst reRegisteredLaneKeys: string[] = [];\n\tconst ownerClearedLaneKeys: string[] = [];\n\n\tfor (const lane of lanes) {\n\t\tif (lane.status === \"released\") continue;\n\t\tlet next = lane;\n\n\t\tconst branchSha = await revParseBranch(deps, ctx.topLevel, lane.branch);\n\t\tconst present = branchSha !== undefined && fileExists(deps, lane.worktreePath);\n\t\tif (lane.status === \"active\" && !present) {\n\t\t\tnext = { ...next, status: \"orphaned\", updatedAt: at };\n\t\t\torphanedLaneKeys.push(lane.laneKey);\n\t\t\tawait appendAuditEvent(ctx.paths, { event: \"lane_orphaned\", laneKey: lane.laneKey }, at);\n\t\t} else if (lane.status === \"orphaned\" && present) {\n\t\t\t// Self-heal: the checkout and branch are back (or never really left) -- active again.\n\t\t\tnext = { ...next, status: \"active\", updatedAt: at };\n\t\t\treRegisteredLaneKeys.push(lane.laneKey);\n\t\t\tawait appendAuditEvent(ctx.paths, { event: \"lane_reregistered\", laneKey: lane.laneKey }, at);\n\t\t}\n\n\t\tif (next.ownerPid !== undefined && !isAlive(next.ownerPid)) {\n\t\t\tconst { ownerPid: _pid, ownerSessionId: _session, ...rest } = next;\n\t\t\tnext = { ...rest, updatedAt: at };\n\t\t\townerClearedLaneKeys.push(lane.laneKey);\n\t\t}\n\n\t\tif (next !== lane) await writeLane(ctx.paths, next);\n\t}\n\n\t// Lane worktrees git knows but the registry does not: rebuild identity from git facts.\n\tfor (const { laneKey, path } of unregisteredWorktrees) {\n\t\tawait writeLane(ctx.paths, {\n\t\t\tlaneKey,\n\t\t\tbranch: `${LANE_BRANCH_PREFIX}${laneKey}`,\n\t\t\tworktreePath: path,\n\t\t\tstatus: \"active\",\n\t\t\tcreatedAt: at,\n\t\t\tupdatedAt: at,\n\t\t});\n\t\treRegisteredLaneKeys.push(laneKey);\n\t\tawait appendAuditEvent(ctx.paths, { event: \"lane_reregistered\", laneKey }, at);\n\t}\n\n\t// Provably-stale integration lock: dead same-host owner (never a foreign or live one).\n\tlet staleLockReleased = false;\n\tconst holder = await readLockHolder(ctx.paths);\n\tif (holder && holder.hostname === osHostname() && !isAlive(holder.pid) && holder.token) {\n\t\tstaleLockReleased = await releaseIntegrationLock(ctx.paths, holder.token, { now: deps.now });\n\t}\n\n\tawait appendAuditEvent(\n\t\tctx.paths,\n\t\t{\n\t\t\tevent: \"reconcile_summary\",\n\t\t\torphaned: orphanedLaneKeys,\n\t\t\treRegistered: reRegisteredLaneKeys,\n\t\t\townersCleared: ownerClearedLaneKeys,\n\t\t\tstaleLockReleased,\n\t\t},\n\t\tat,\n\t);\n\treturn { code: \"reconciled\", orphanedLaneKeys, reRegisteredLaneKeys, ownerClearedLaneKeys, staleLockReleased };\n}\n\n/** Rebase env for every rebase-driving call: never let git open an editor mid-automation. */\nfunction rebaseEnv(): NodeJS.ProcessEnv {\n\treturn { ...process.env, GIT_EDITOR: \"true\", GIT_SEQUENCE_EDITOR: \"true\" };\n}\n\nfunction runGitEnv(deps: WorktreeSyncEngineDeps, cwd: string, args: string[]): Promise<ExecResult> {\n\treturn deps.exec(\"git\", args, {\n\t\tcwd,\n\t\ttimeout: GIT_TIMEOUT_MS,\n\t\tsignal: deps.signal,\n\t\tmaxBuffer: GIT_MAX_BUFFER,\n\t\tenv: rebaseEnv(),\n\t});\n}\n\nfunction readFileMaybe(deps: WorktreeSyncEngineDeps, path: string): string | undefined {\n\tif (deps.readFile) return deps.readFile(path);\n\ttry {\n\t\treturn readFileSync(path, \"utf-8\");\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** A rebase is in progress iff the worktree's rebase-merge or rebase-apply state dir exists. */\nasync function isRebaseActive(deps: WorktreeSyncEngineDeps, worktreePath: string): Promise<boolean> {\n\tconst gitPaths = await runGit(deps, worktreePath, [\n\t\t\"rev-parse\",\n\t\t\"--path-format=absolute\",\n\t\t\"--git-path\",\n\t\t\"rebase-merge\",\n\t\t\"--git-path\",\n\t\t\"rebase-apply\",\n\t]);\n\tif (gitPaths.code !== 0) return false;\n\treturn gitPaths.stdout\n\t\t.split(/\\r?\\n/)\n\t\t.map((line) => line.trim())\n\t\t.filter(Boolean)\n\t\t.some((path) => fileExists(deps, path));\n}\n\n/** Paths with local modifications (`status --porcelain`), rename targets included. Capped. */\nasync function dirtyPaths(deps: WorktreeSyncEngineDeps, worktreePath: string): Promise<string[]> {\n\tconst status = await runGit(deps, worktreePath, [\"status\", \"--porcelain\"]);\n\tif (status.code !== 0) return [];\n\treturn status.stdout\n\t\t.split(/\\r?\\n/)\n\t\t.filter((line) => line.length > 3)\n\t\t.map((line) => {\n\t\t\tconst path = line.slice(3);\n\t\t\tconst renameArrow = path.indexOf(\" -> \");\n\t\t\treturn renameArrow >= 0 ? path.slice(renameArrow + 4) : path;\n\t\t})\n\t\t.slice(0, 100);\n}\n\nasync function unmergedFiles(deps: WorktreeSyncEngineDeps, worktreePath: string): Promise<string[]> {\n\tconst diff = await runGit(deps, worktreePath, [\"diff\", \"--name-only\", \"--diff-filter=U\"]);\n\tif (diff.code !== 0) return [];\n\treturn diff.stdout\n\t\t.split(/\\r?\\n/)\n\t\t.map((line) => line.trim())\n\t\t.filter(Boolean);\n}\n\n/** Conflict kind per path from `git ls-files -u` index stages (1=base, 2=ours, 3=theirs). */\nasync function unmergedKinds(\n\tdeps: WorktreeSyncEngineDeps,\n\tworktreePath: string,\n): Promise<Map<string, ConflictWorklistFile[\"kind\"]>> {\n\tconst lsFiles = await runGit(deps, worktreePath, [\"ls-files\", \"-u\"]);\n\tconst stagesByPath = new Map<string, Set<string>>();\n\tif (lsFiles.code === 0) {\n\t\tfor (const line of lsFiles.stdout.split(/\\r?\\n/)) {\n\t\t\tconst match = line.match(/^\\d+ [0-9a-f]+ ([123])\\t(.+)$/);\n\t\t\tif (!match?.[1] || !match[2]) continue;\n\t\t\tconst stages = stagesByPath.get(match[2]) ?? new Set<string>();\n\t\t\tstages.add(match[1]);\n\t\t\tstagesByPath.set(match[2], stages);\n\t\t}\n\t}\n\tconst kinds = new Map<string, ConflictWorklistFile[\"kind\"]>();\n\tfor (const [path, stages] of stagesByPath) {\n\t\tconst has = (stage: string) => stages.has(stage);\n\t\tif (has(\"1\") && has(\"2\") && has(\"3\")) kinds.set(path, \"both_modified\");\n\t\telse if (!has(\"1\") && has(\"2\") && has(\"3\")) kinds.set(path, \"both_added\");\n\t\telse if (has(\"1\") && !has(\"2\") && has(\"3\")) kinds.set(path, \"deleted_by_us\");\n\t\telse if (has(\"1\") && has(\"2\") && !has(\"3\")) kinds.set(path, \"deleted_by_them\");\n\t\telse kinds.set(path, \"unknown\");\n\t}\n\treturn kinds;\n}\n\n/** Rebase progress (\"<done>/<total>\") plus the commit the rebase stopped at, from the rebase\n * state files (merge backend: msgnum/end/stopped-sha; apply backend: next/last). */\nasync function rebaseProgress(\n\tdeps: WorktreeSyncEngineDeps,\n\tworktreePath: string,\n): Promise<{ step: string; stoppedAtCommit?: { sha: string; subject: string } }> {\n\tconst gitPaths = await runGit(deps, worktreePath, [\n\t\t\"rev-parse\",\n\t\t\"--path-format=absolute\",\n\t\t\"--git-path\",\n\t\t\"rebase-merge\",\n\t\t\"--git-path\",\n\t\t\"rebase-apply\",\n\t]);\n\tlet step = \"?\";\n\tlet stoppedSha: string | undefined;\n\tif (gitPaths.code === 0) {\n\t\tconst [mergeDir, applyDir] = gitPaths.stdout\n\t\t\t.split(/\\r?\\n/)\n\t\t\t.map((line) => line.trim())\n\t\t\t.filter(Boolean);\n\t\tconst readCounter = (dir: string | undefined, doneName: string, totalName: string): string | undefined => {\n\t\t\tif (!dir) return undefined;\n\t\t\tconst done = readFileMaybe(deps, join(dir, doneName))?.trim();\n\t\t\tconst total = readFileMaybe(deps, join(dir, totalName))?.trim();\n\t\t\treturn done && total ? `${done}/${total}` : undefined;\n\t\t};\n\t\tstep = readCounter(mergeDir, \"msgnum\", \"end\") ?? readCounter(applyDir, \"next\", \"last\") ?? \"?\";\n\t\tstoppedSha = mergeDir ? readFileMaybe(deps, join(mergeDir, \"stopped-sha\"))?.trim() : undefined;\n\t}\n\tif (!stoppedSha) return { step };\n\tconst subject = await runGit(deps, worktreePath, [\"log\", \"-1\", \"--format=%s\", stoppedSha]);\n\treturn {\n\t\tstep,\n\t\tstoppedAtCommit: { sha: stoppedSha, subject: subject.code === 0 ? subject.stdout.trim() : \"\" },\n\t};\n}\n\n/**\n * Build the structured conflict worklist (G9's input): the agent edits exactly these files, then\n * calls `continue` -- staging, marker verification, and rebase continuation are harness work.\n * Files rerere auto-resolved never appear here (they are staged, not unmerged) -- the mechanical\n * drive loop below continues past fully-replayed stops without involving the agent at all, so\n * `resolvedByRerere` marks nothing today and is reserved for partial-replay surfacing.\n */\nasync function buildWorklist(\n\tdeps: WorktreeSyncEngineDeps,\n\tworktreePath: string,\n\tunmerged: string[],\n): Promise<ConflictWorklist> {\n\tconst kinds = await unmergedKinds(deps, worktreePath);\n\tconst progress = await rebaseProgress(deps, worktreePath);\n\treturn {\n\t\tstep: progress.step,\n\t\t...(progress.stoppedAtCommit ? { stoppedAtCommit: progress.stoppedAtCommit } : {}),\n\t\tfiles: unmerged.map((path) => ({\n\t\t\tpath,\n\t\t\tkind: kinds.get(path) ?? \"unknown\",\n\t\t\tresolvedByRerere: false,\n\t\t})),\n\t};\n}\n\nconst CONFLICT_MARKER_RE = /^(?:<{7}|={7}|>{7}|\\|{7})/m;\n\n/**\n * Mechanically drive an in-progress rebase forward: finish it, stop at the next REAL conflict\n * (returning its worklist), auto-continue stops that rerere fully replayed, and skip steps that\n * provably reduced to nothing (their changes already landed). Bounded; never guesses -- an\n * unrecognized stop state surfaces as git_error with the evidence.\n */\nasync function driveRebase(\n\tdeps: WorktreeSyncEngineDeps,\n\tctx: RepoContext,\n\tlane: LaneRegistration,\n): Promise<\n\t| { code: \"sync_clean\"; laneKey: string; autoContinued: number }\n\t| { code: \"sync_conflicts\"; laneKey: string; worklist: ConflictWorklist }\n\t| WorktreeSyncRefusal<\"git_error\">\n> {\n\tconst worktreePath = lane.worktreePath;\n\tlet autoContinued = 0;\n\tfor (let iteration = 0; iteration <= 1000; iteration++) {\n\t\tif (!(await isRebaseActive(deps, worktreePath))) {\n\t\t\tawait appendAuditEvent(\n\t\t\t\tctx.paths,\n\t\t\t\t{ event: \"sync_completed\", laneKey: lane.laneKey, autoContinued },\n\t\t\t\tnowIso(deps),\n\t\t\t);\n\t\t\treturn { code: \"sync_clean\", laneKey: lane.laneKey, autoContinued };\n\t\t}\n\t\tconst unmerged = await unmergedFiles(deps, worktreePath);\n\t\tif (unmerged.length > 0) {\n\t\t\tconst worklist = await buildWorklist(deps, worktreePath, unmerged);\n\t\t\tawait appendAuditEvent(\n\t\t\t\tctx.paths,\n\t\t\t\t{ event: \"sync_conflicts\", laneKey: lane.laneKey, step: worklist.step, files: worklist.files.length },\n\t\t\t\tnowIso(deps),\n\t\t\t);\n\t\t\treturn { code: \"sync_conflicts\", laneKey: lane.laneKey, worklist };\n\t\t}\n\t\t// Stopped with nothing unmerged: rerere fully replayed the resolution (auto-staged via\n\t\t// rerere.autoUpdate) or the step reduced to nothing. Continue mechanically.\n\t\tconst cont = await runGitEnv(deps, worktreePath, [\"rebase\", \"--continue\"]);\n\t\tautoContinued++;\n\t\tif (cont.code === 0) continue;\n\t\tif ((await unmergedFiles(deps, worktreePath)).length > 0) continue;\n\t\tif (!(await isRebaseActive(deps, worktreePath))) continue;\n\t\tconst staged = await runGit(deps, worktreePath, [\"diff\", \"--cached\", \"--quiet\"]);\n\t\tconst unstaged = await runGit(deps, worktreePath, [\"diff\", \"--quiet\"]);\n\t\tif (staged.code === 0 && unstaged.code === 0) {\n\t\t\t// Provably-empty step: its changes are already on main. Skipping is the one correct move.\n\t\t\tconst skip = await runGitEnv(deps, worktreePath, [\"rebase\", \"--skip\"]);\n\t\t\tif (skip.code !== 0 && (await isRebaseActive(deps, worktreePath))) {\n\t\t\t\treturn gitError(\"git rebase --skip failed on a provably-empty step\", skip);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\treturn gitError(\"git rebase --continue failed in an unrecognized state\", cont);\n\t}\n\treturn {\n\t\tcode: \"git_error\",\n\t\tmessage: \"rebase drive exceeded 1000 mechanical steps; aborting the drive (rebase left in progress)\",\n\t};\n}\n\nexport interface SyncLaneArgs {\n\tlaneKey: string;\n}\n\n/**\n * Rebase current main into the lane branch, locally (the awareness half of \"perfect sync\"; the\n * land gate is the enforcement half). Pins the main sha it derived so a concurrent land cannot\n * change this sync's meaning mid-flight (D-pinned-sha). Conflicts leave the rebase in progress\n * and return a structured worklist; `continueSync` verifies and drives on.\n */\nexport async function syncLane(deps: WorktreeSyncEngineDeps, args: SyncLaneArgs): Promise<SyncLaneResult> {\n\tconst ctx = await resolveRepoContext(deps);\n\tif (\"code\" in ctx) return ctx;\n\treturn withFileLock(ctx.paths.lifecycleLockFile, async () => {\n\t\tconst lane = await readLane(ctx.paths, args.laneKey);\n\t\tif (!lane || lane.status === \"released\") {\n\t\t\treturn { code: \"lane_not_found\", message: `no active lane '${args.laneKey}'` };\n\t\t}\n\t\tconst facts = await deriveLaneFacts(deps, ctx, lane);\n\t\tif (!facts.worktreePresent) {\n\t\t\treturn {\n\t\t\t\tcode: \"worktree_missing\",\n\t\t\t\tmessage: `lane '${lane.laneKey}' checkout missing at ${lane.worktreePath}`,\n\t\t\t};\n\t\t}\n\t\tif (facts.rebaseInProgress) {\n\t\t\treturn {\n\t\t\t\tcode: \"rebase_in_progress\",\n\t\t\t\tmessage: `lane '${lane.laneKey}' has a rebase in progress; resolve and call continue, or abort_sync`,\n\t\t\t};\n\t\t}\n\t\tif (facts.fresh) {\n\t\t\treturn { code: \"sync_clean\", laneKey: lane.laneKey, alreadyFresh: true, autoContinued: 0 };\n\t\t}\n\t\tif (facts.dirty) {\n\t\t\treturn {\n\t\t\t\tcode: \"lane_dirty\",\n\t\t\t\tmessage: `lane '${lane.laneKey}' has uncommitted changes; commit them on the lane branch, then sync`,\n\t\t\t\tpaths: await dirtyPaths(deps, lane.worktreePath),\n\t\t\t};\n\t\t}\n\n\t\tawait appendAuditEvent(\n\t\t\tctx.paths,\n\t\t\t{ event: \"sync_started\", laneKey: lane.laneKey, ontoSha: ctx.mainSha },\n\t\t\tnowIso(deps),\n\t\t);\n\t\tconst rebase = await runGitEnv(deps, lane.worktreePath, [\"rebase\", ctx.mainSha]);\n\t\tif (rebase.code === 0) {\n\t\t\tawait appendAuditEvent(\n\t\t\t\tctx.paths,\n\t\t\t\t{ event: \"sync_completed\", laneKey: lane.laneKey, autoContinued: 0 },\n\t\t\t\tnowIso(deps),\n\t\t\t);\n\t\t\treturn { code: \"sync_clean\", laneKey: lane.laneKey, alreadyFresh: false, autoContinued: 0 };\n\t\t}\n\t\tif (!(await isRebaseActive(deps, lane.worktreePath))) {\n\t\t\treturn gitError(`git rebase failed to start for lane '${lane.laneKey}'`, rebase);\n\t\t}\n\t\tconst driven = await driveRebase(deps, ctx, lane);\n\t\tif (driven.code === \"sync_clean\") return { ...driven, alreadyFresh: false };\n\t\treturn driven;\n\t});\n}\n\nexport interface ContinueSyncArgs {\n\tlaneKey: string;\n}\n\n/**\n * G9: verify the agent's conflict resolution mechanically (zero conflict markers by byte-scan --\n * the agent never self-certifies), stage it, and drive the rebase on. More conflicts return the\n * next worklist; completion returns sync_clean.\n */\nexport async function continueSync(deps: WorktreeSyncEngineDeps, args: ContinueSyncArgs): Promise<ContinueSyncResult> {\n\tconst ctx = await resolveRepoContext(deps);\n\tif (\"code\" in ctx) return ctx;\n\treturn withFileLock(ctx.paths.lifecycleLockFile, async () => {\n\t\tconst lane = await readLane(ctx.paths, args.laneKey);\n\t\tif (!lane || lane.status === \"released\") {\n\t\t\treturn { code: \"lane_not_found\", message: `no active lane '${args.laneKey}'` };\n\t\t}\n\t\tif (!fileExists(deps, lane.worktreePath)) {\n\t\t\treturn {\n\t\t\t\tcode: \"worktree_missing\",\n\t\t\t\tmessage: `lane '${lane.laneKey}' checkout missing at ${lane.worktreePath}`,\n\t\t\t};\n\t\t}\n\t\tif (!(await isRebaseActive(deps, lane.worktreePath))) {\n\t\t\treturn {\n\t\t\t\tcode: \"no_rebase_in_progress\",\n\t\t\t\tmessage: `lane '${lane.laneKey}' has no rebase in progress; use sync`,\n\t\t\t};\n\t\t}\n\n\t\tconst unmerged = await unmergedFiles(deps, lane.worktreePath);\n\t\tconst withMarkers = unmerged.filter((path) => {\n\t\t\tconst content = readFileMaybe(deps, join(lane.worktreePath, path));\n\t\t\treturn content !== undefined && CONFLICT_MARKER_RE.test(content);\n\t\t});\n\t\tif (withMarkers.length > 0) {\n\t\t\treturn {\n\t\t\t\tcode: \"conflict_markers_present\",\n\t\t\t\tmessage: `${withMarkers.length} file(s) still contain conflict markers; resolve them fully, then continue`,\n\t\t\t\tpaths: withMarkers,\n\t\t\t};\n\t\t}\n\t\tif (unmerged.length > 0) {\n\t\t\tconst add = await runGit(deps, lane.worktreePath, [\"add\", \"-A\"]);\n\t\t\tif (add.code !== 0) return gitError(\"git add -A failed while staging conflict resolutions\", add);\n\t\t}\n\t\tconst cont = await runGitEnv(deps, lane.worktreePath, [\"rebase\", \"--continue\"]);\n\t\tif (cont.code === 0 && !(await isRebaseActive(deps, lane.worktreePath))) {\n\t\t\tawait appendAuditEvent(\n\t\t\t\tctx.paths,\n\t\t\t\t{ event: \"sync_completed\", laneKey: lane.laneKey, autoContinued: 0 },\n\t\t\t\tnowIso(deps),\n\t\t\t);\n\t\t\treturn { code: \"sync_clean\", laneKey: lane.laneKey, autoContinued: 0 };\n\t\t}\n\t\tconst result = await driveRebase(deps, ctx, lane);\n\t\treturn result;\n\t});\n}\n\nexport interface AbortSyncArgs {\n\tlaneKey: string;\n}\n\n/** Abort an in-progress sync rebase: the lane returns to its pre-sync tip -- still stale, and\n * honestly reported as such by status. */\nexport async function abortSync(deps: WorktreeSyncEngineDeps, args: AbortSyncArgs): Promise<AbortSyncResult> {\n\tconst ctx = await resolveRepoContext(deps);\n\tif (\"code\" in ctx) return ctx;\n\treturn withFileLock(ctx.paths.lifecycleLockFile, async () => {\n\t\tconst lane = await readLane(ctx.paths, args.laneKey);\n\t\tif (!lane || lane.status === \"released\") {\n\t\t\treturn { code: \"lane_not_found\", message: `no active lane '${args.laneKey}'` };\n\t\t}\n\t\tif (!(await isRebaseActive(deps, lane.worktreePath))) {\n\t\t\treturn { code: \"no_rebase_in_progress\", message: `lane '${lane.laneKey}' has no rebase in progress` };\n\t\t}\n\t\tconst abort = await runGitEnv(deps, lane.worktreePath, [\"rebase\", \"--abort\"]);\n\t\tif (abort.code !== 0) return gitError(\"git rebase --abort failed\", abort);\n\t\tawait appendAuditEvent(ctx.paths, { event: \"sync_aborted\", laneKey: lane.laneKey }, nowIso(deps));\n\t\treturn { code: \"ok\", laneKey: lane.laneKey };\n\t});\n}\n\nexport interface LandLaneArgs {\n\tlaneKey: string;\n\t/** \"on\" runs gateCommand (G4); \"off\" is the owner-level opt-out, recorded per land event. */\n\tgate: \"on\" | \"off\";\n\tgateCommand?: string;\n\tgateTimeoutMs?: number;\n}\n\nconst DEFAULT_GATE_TIMEOUT_MS = 900_000;\n\n/**\n * The land gate -- the ONLY door to main (G1-G7). Serialized under the integration lock; every\n * precondition is re-derived INSIDE the lock (the compare-and-swap that makes the whole system\n * race-free: even if every notification failed, a stale lane cannot land). Main only ever moves\n * by ff-only merge of an already-rebased lane branch; a successful land bumps the epoch and\n * broadcasts in the same critical section.\n */\nexport async function landLane(deps: WorktreeSyncEngineDeps, args: LandLaneArgs): Promise<LandResult> {\n\tconst ctx = await resolveRepoContext(deps);\n\tif (\"code\" in ctx) return ctx;\n\treturn withFileLock(ctx.paths.lifecycleLockFile, async () => {\n\t\tconst lane = await readLane(ctx.paths, args.laneKey);\n\t\tif (!lane || lane.status === \"released\") {\n\t\t\treturn { code: \"lane_not_found\", message: `no active lane '${args.laneKey}'` };\n\t\t}\n\t\tif (ownerConflicts(deps, lane)) {\n\t\t\treturn {\n\t\t\t\tcode: \"lane_owner_conflict\",\n\t\t\t\tmessage: `lane '${lane.laneKey}' is owned by another live session (pid ${lane.ownerPid}); only its owner may land it`,\n\t\t\t};\n\t\t}\n\t\tif (args.gate === \"on\" && !args.gateCommand?.trim()) {\n\t\t\treturn {\n\t\t\t\tcode: \"gate_command_unset\",\n\t\t\t\tmessage:\n\t\t\t\t\t'no gate command configured; set worktreeSync.gateCommand (or worktreeSync.gate: \"off\" as an owner-level opt-out)',\n\t\t\t};\n\t\t}\n\n\t\tconst acquisition = await acquireIntegrationLock(\n\t\t\tctx.paths,\n\t\t\t{\n\t\t\t\tpid: deps.pid ?? process.pid,\n\t\t\t\thostname: osHostname(),\n\t\t\t\t...(deps.sessionId !== undefined ? { sessionId: deps.sessionId } : {}),\n\t\t\t\tlaneKey: lane.laneKey,\n\t\t\t},\n\t\t\t{\n\t\t\t\tnow: deps.now,\n\t\t\t\t...(deps.isPidAlive\n\t\t\t\t\t? { isPidAlive: (owner) => (deps.isPidAlive as (pid: number) => boolean)(owner.pid) }\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t);\n\t\tif (!acquisition.acquired) {\n\t\t\treturn {\n\t\t\t\tcode: \"lock_busy\",\n\t\t\t\tmessage: acquisition.holder\n\t\t\t\t\t? `integration lock held by pid ${acquisition.holder.pid}${acquisition.holder.laneKey ? ` (lane '${acquisition.holder.laneKey}')` : \"\"}; retry after it lands`\n\t\t\t\t\t: \"integration lock held; retry shortly\",\n\t\t\t\t...(acquisition.holder ? { holder: acquisition.holder } : {}),\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\t// Everything below happens INSIDE the lock: re-derive, never trust pre-lock derivations.\n\t\t\tconst mainShaNow = await revParseBranch(deps, ctx.topLevel, ctx.mainBranch);\n\t\t\tif (!mainShaNow) {\n\t\t\t\treturn { code: \"default_branch_unresolved\", message: `main branch '${ctx.mainBranch}' vanished mid-land` };\n\t\t\t}\n\t\t\tif (!fileExists(deps, lane.worktreePath)) {\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"worktree_missing\",\n\t\t\t\t\tmessage: `lane '${lane.laneKey}' checkout missing at ${lane.worktreePath}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (await isRebaseActive(deps, lane.worktreePath)) {\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"rebase_in_progress\",\n\t\t\t\t\tmessage: `lane '${lane.laneKey}' has a rebase in progress; finish (continue) or abort_sync before landing`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst laneDirty = await dirtyPaths(deps, lane.worktreePath);\n\t\t\tif (laneDirty.length > 0) {\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"lane_dirty\",\n\t\t\t\t\tmessage: `lane '${lane.laneKey}' has uncommitted changes; commit everything on the lane branch first (G2)`,\n\t\t\t\t\tpaths: laneDirty,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst tipSha = await revParseBranch(deps, ctx.topLevel, lane.branch);\n\t\t\tif (!tipSha) return { code: \"git_error\", message: `lane branch '${lane.branch}' has no commits/ref` };\n\t\t\tif (tipSha === mainShaNow) {\n\t\t\t\t// A no-op land would bump the epoch for nothing (notification churn for every lane).\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"nothing_to_land\",\n\t\t\t\t\tmessage: `lane '${lane.laneKey}' has no commits beyond main; nothing to land`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst ancestry = await runGit(deps, ctx.topLevel, [\"merge-base\", \"--is-ancestor\", mainShaNow, tipSha]);\n\t\t\tif (ancestry.code !== 0) {\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"stale_lane\",\n\t\t\t\t\tmessage: `lane '${lane.laneKey}' does not contain current main (${mainShaNow.slice(0, 12)}); sync first (G3)`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (!ctx.hubPath) {\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"hub_missing\",\n\t\t\t\t\tmessage: `main branch '${ctx.mainBranch}' is not checked out in any worktree; landing needs the hub checkout (G5)`,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst changedResult = await runGit(deps, ctx.topLevel, [\"diff\", \"--name-only\", `${mainShaNow}..${tipSha}`]);\n\t\t\tif (changedResult.code !== 0)\n\t\t\t\treturn gitError(\"git diff --name-only failed while computing the land set\", changedResult);\n\t\t\tconst changed = changedResult.stdout\n\t\t\t\t.split(/\\r?\\n/)\n\t\t\t\t.map((line) => line.trim())\n\t\t\t\t.filter(Boolean);\n\n\t\t\t// G6, overlap-based: an ff merge only touches the land's changed files, and git itself\n\t\t\t// refuses to clobber local modifications -- so the deterministic pre-check refuses exactly\n\t\t\t// when hub-dirty paths intersect the incoming change set (not on unrelated hub dirt).\n\t\t\tconst hubDirty = await dirtyPaths(deps, ctx.hubPath);\n\t\t\tconst changedSet = new Set(changed);\n\t\t\tconst endangered = hubDirty.filter((path) => changedSet.has(path));\n\t\t\tif (endangered.length > 0) {\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"hub_dirty\",\n\t\t\t\t\tmessage: `hub checkout has local modifications to ${endangered.length} file(s) this land would update; commit/stash them first (G6)`,\n\t\t\t\t\tpaths: endangered.slice(0, 50),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (args.gate === \"on\") {\n\t\t\t\tconst gateCommand = (args.gateCommand ?? \"\").trim();\n\t\t\t\tconst shell = process.platform === \"win32\" ? \"cmd\" : \"sh\";\n\t\t\t\tconst shellFlag = process.platform === \"win32\" ? \"/c\" : \"-c\";\n\t\t\t\tconst gateRun = await deps.exec(shell, [shellFlag, gateCommand], {\n\t\t\t\t\tcwd: lane.worktreePath,\n\t\t\t\t\ttimeout: args.gateTimeoutMs ?? DEFAULT_GATE_TIMEOUT_MS,\n\t\t\t\t\tsignal: deps.signal,\n\t\t\t\t\tmaxBuffer: GIT_MAX_BUFFER,\n\t\t\t\t});\n\t\t\t\tif (gateRun.code !== 0) {\n\t\t\t\t\tconst tail = `${gateRun.stdout}\\n${gateRun.stderr}`.trim().slice(-4000);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcode: \"gate_failed\",\n\t\t\t\t\t\tmessage: `gate command failed (exit ${gateRun.code}) at lane tip ${tipSha.slice(0, 12)} (G4)`,\n\t\t\t\t\t\tgitStderr: tail,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t// The gate is an external process. Re-read the ref after it exits: a worker\n\t\t\t\t// may have committed while the gate was running, and the branch name is\n\t\t\t\t// mutable. Never merge a tip that was not the one actually tested.\n\t\t\t\tconst postGateTip = await revParseBranch(deps, ctx.topLevel, lane.branch);\n\t\t\t\tif (postGateTip !== tipSha) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcode: \"lane_changed_during_gate\",\n\t\t\t\t\t\tmessage: `lane '${lane.laneKey}' changed during the gate (tested ${tipSha.slice(0, 12)}, current ${postGateTip?.slice(0, 12) ?? \"missing\"}); rerun land`,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst landingTransaction: LandingTransaction = {\n\t\t\t\tlaneKey: lane.laneKey,\n\t\t\t\tpriorMainSha: mainShaNow,\n\t\t\t\ttestedTipSha: tipSha,\n\t\t\t\tchangedPaths: changed.slice(0, EPOCH_CHANGED_PATHS_CAP),\n\t\t\t\tchangedPathsTruncated: changed.length > EPOCH_CHANGED_PATHS_CAP,\n\t\t\t\tlockToken: acquisition.token,\n\t\t\t\tgate: args.gate === \"on\" ? \"passed\" : \"off\",\n\t\t\t\tstage: \"ready_to_merge\",\n\t\t\t};\n\t\t\tawait writeLandingTransaction(ctx.paths, landingTransaction);\n\t\t\t// Move the named main ref with a compare-and-swap instead of `git merge` in whichever\n\t\t\t// branch happens to be checked out in the hub. A concurrent branch switch cannot redirect\n\t\t\t// this land to another branch, and a changed main ref makes update-ref fail without mutation.\n\t\t\tconst update = await runGit(deps, ctx.topLevel, [\n\t\t\t\t\"update-ref\",\n\t\t\t\t`refs/heads/${ctx.mainBranch}`,\n\t\t\t\ttipSha,\n\t\t\t\tmainShaNow,\n\t\t\t]);\n\t\t\tif (update.code !== 0) {\n\t\t\t\treturn gitError(`main ref changed or could not advance for lane '${lane.laneKey}' (G5)`, update);\n\t\t\t}\n\t\t\tconst landedSha = await revParseBranch(deps, ctx.topLevel, ctx.mainBranch);\n\t\t\tif (landedSha !== tipSha) {\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"git_error\",\n\t\t\t\t\tmessage: `main resolved to ${landedSha?.slice(0, 12) ?? \"missing\"} after the guarded ref update; expected gated tip ${tipSha.slice(0, 12)}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\t// `update-ref` deliberately leaves a checked-out worktree untouched. Refresh only when\n\t\t\t// the hub is still on main, preserving unrelated local changes with reset --merge.\n\t\t\tconst checkedOut = await runGit(deps, ctx.hubPath, [\"symbolic-ref\", \"--short\", \"HEAD\"]);\n\t\t\tif (checkedOut.code !== 0 || checkedOut.stdout.trim() !== ctx.mainBranch) {\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"git_error\",\n\t\t\t\t\tmessage: `main advanced safely, but hub checkout is no longer '${ctx.mainBranch}'; refusing to refresh another branch`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst refresh = await runGit(deps, ctx.hubPath, [\"reset\", \"--merge\", tipSha]);\n\t\t\tif (refresh.code !== 0)\n\t\t\t\treturn gitError(`could not refresh hub checkout after landing '${lane.laneKey}'`, refresh);\n\n\t\t\tawait writeLandingTransaction(ctx.paths, { ...landingTransaction, stage: \"main_moved\" });\n\t\t\tconst previous = await readEpoch(ctx.paths);\n\t\t\tconst epochNumber = (previous?.epoch ?? 0) + 1;\n\t\t\tconst at = nowIso(deps);\n\t\t\tawait writeEpoch(ctx.paths, {\n\t\t\t\tepoch: epochNumber,\n\t\t\t\tmainSha: tipSha,\n\t\t\t\tpreviousMainSha: mainShaNow,\n\t\t\t\tlandedLaneKey: lane.laneKey,\n\t\t\t\tlandedAt: at,\n\t\t\t\tchangedPaths: changed.slice(0, EPOCH_CHANGED_PATHS_CAP),\n\t\t\t\tchangedPathsTruncated: changed.length > EPOCH_CHANGED_PATHS_CAP,\n\t\t\t});\n\t\t\tawait writeLandingTransaction(ctx.paths, { ...landingTransaction, stage: \"epoch_written\" });\n\t\t\tawait appendAuditEvent(\n\t\t\t\tctx.paths,\n\t\t\t\t{\n\t\t\t\t\tevent: \"epoch_advanced\",\n\t\t\t\t\tepoch: epochNumber,\n\t\t\t\t\tlaneKey: lane.laneKey,\n\t\t\t\t\tmainSha: tipSha,\n\t\t\t\t\tpreviousMainSha: mainShaNow,\n\t\t\t\t\tchangedFiles: changed.length,\n\t\t\t\t\tgate: args.gate === \"on\" ? \"passed\" : \"off\",\n\t\t\t\t},\n\t\t\t\tat,\n\t\t\t);\n\t\t\tawait writeLandingTransaction(ctx.paths, { ...landingTransaction, stage: \"audit_logged\" });\n\t\t\tawait clearLandingTransaction(ctx.paths);\n\t\t\treturn {\n\t\t\t\tcode: \"ok\",\n\t\t\t\tlaneKey: lane.laneKey,\n\t\t\t\tepoch: epochNumber,\n\t\t\t\tmainSha: tipSha,\n\t\t\t\tgate: args.gate === \"on\" ? \"passed\" : \"off\",\n\t\t\t};\n\t\t} finally {\n\t\t\tawait releaseIntegrationLock(ctx.paths, acquisition.token, { now: deps.now });\n\t\t}\n\t});\n}\n\nexport interface SyncStatusArgs {\n\tpolicy: WorktreeSyncPolicy;\n}\n\n/**\n * The deterministic full picture (the tool's `status` action): epoch, hub, lock, and per-lane\n * live facts with the policy derivation (stale / syncRequired / overlap). The `advice` line is\n * assembled from codes -- never model-generated -- so every agent reads the same situation the\n * same way.\n */\nexport async function buildSyncStatus(deps: WorktreeSyncEngineDeps, args: SyncStatusArgs): Promise<SyncStatusResult> {\n\tconst ctx = await resolveRepoContext(deps);\n\tif (\"code\" in ctx) return ctx;\n\n\tconst epochRecord = await readEpoch(ctx.paths);\n\tconst epochNumber = epochRecord?.epoch ?? 0;\n\tconst changedSet = new Set(epochRecord?.changedPaths ?? []);\n\tconst changedTruncated = epochRecord?.changedPathsTruncated === true;\n\n\tconst holder = await readLockHolder(ctx.paths);\n\tconst isAlive =\n\t\tdeps.isPidAlive ??\n\t\t((pid: number) => defaultIsPidAlive({ pid, hostname: osHostname(), token: \"status\", acquiredAt: \"\" }));\n\n\tlet hub: { path: string; clean: boolean } | undefined;\n\tif (ctx.hubPath) {\n\t\thub = { path: ctx.hubPath, clean: (await dirtyPaths(deps, ctx.hubPath)).length === 0 };\n\t}\n\n\tconst lanes: LaneStatusEntry[] = [];\n\tfor (const lane of await listLanes(ctx.paths)) {\n\t\tif (lane.status === \"released\") continue;\n\t\tconst facts = await deriveLaneFacts(deps, ctx, lane);\n\t\tlet laneChanged: string[] = [];\n\t\tif (facts.branchSha) {\n\t\t\tconst diff = await runGit(deps, ctx.topLevel, [\"diff\", \"--name-only\", `${ctx.mainBranch}...${lane.branch}`]);\n\t\t\tif (diff.code === 0) {\n\t\t\t\tlaneChanged = diff.stdout\n\t\t\t\t\t.split(/\\r?\\n/)\n\t\t\t\t\t.map((line) => line.trim())\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.slice(0, EPOCH_CHANGED_PATHS_CAP);\n\t\t\t}\n\t\t}\n\t\tconst overlap = changedTruncated ? laneChanged : laneChanged.filter((path) => changedSet.has(path));\n\t\tconst stale = !facts.fresh;\n\t\tconst syncRequired =\n\t\t\tstale &&\n\t\t\tfacts.registrationStatus === \"active\" &&\n\t\t\t(args.policy === \"on_land_mandatory\" || (args.policy === \"overlap_mandatory\" && overlap.length > 0));\n\t\tlanes.push({\n\t\t\t...facts,\n\t\t\t...(lane.goalId !== undefined ? { goalId: lane.goalId } : {}),\n\t\t\t...(lane.requirementId !== undefined ? { requirementId: lane.requirementId } : {}),\n\t\t\t...(lane.boundLaneId !== undefined ? { boundLaneId: lane.boundLaneId } : {}),\n\t\t\tstale,\n\t\t\tsyncRequired,\n\t\t\toverlapWithLastLand: overlap.slice(0, 50),\n\t\t});\n\t}\n\n\tconst inRebase = lanes.filter((lane) => lane.rebaseInProgress).map((lane) => lane.laneKey);\n\tconst mustSync = lanes.filter((lane) => lane.syncRequired && !lane.rebaseInProgress).map((lane) => lane.laneKey);\n\tlet advice: string | undefined;\n\tif (inRebase.length > 0) {\n\t\tadvice = `lane(s) ${inRebase.join(\", \")} have a rebase in progress: resolve conflicts and call continue (or abort_sync)`;\n\t} else if (mustSync.length > 0) {\n\t\tadvice = `lane(s) ${mustSync.join(\", \")} must rebase main (epoch ${epochNumber}${epochRecord?.landedLaneKey ? ` landed by ${epochRecord.landedLaneKey}` : \"\"}): call sync`;\n\t} else if (holder) {\n\t\tadvice = `integration lock held by pid ${holder.pid}${holder.laneKey ? ` (lane '${holder.laneKey}')` : \"\"}`;\n\t} else if (lanes.length > 0) {\n\t\tadvice = \"all lanes fresh\";\n\t}\n\n\treturn {\n\t\tcode: \"ok\",\n\t\tmainBranch: ctx.mainBranch,\n\t\tmainSha: ctx.mainSha,\n\t\tepoch: epochNumber,\n\t\t...(hub ? { hub } : {}),\n\t\tlock: {\n\t\t\theld: holder !== undefined,\n\t\t\t...(holder ? { holder, holderAlive: isAlive(holder.pid) } : {}),\n\t\t},\n\t\tlanes,\n\t\t...(advice ? { advice } : {}),\n\t};\n}\n"]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lane gate: G8/G10 enforcement for a LANE-BOUND `pi` session (launched with
|
|
3
|
+
* `PI_WORKTREE_LANE=<key>`). RuntimeBuilder wraps the session's file-mutation tools (edit /
|
|
4
|
+
* write / bash) with {@link WorktreeLaneGate.checkMutation}; a lane that the active policy marks
|
|
5
|
+
* sync_required fails closed with the exact recovery step until it rebases main.
|
|
6
|
+
*
|
|
7
|
+
* Honesty boundary (unchanged from the tmux trust model): this is HARD for pi children -- the
|
|
8
|
+
* wrapper lives under the tool layer, not in the prompt -- and cooperative-only for foreign
|
|
9
|
+
* CLIs, whose backstop is the land CAS (G3): stale work simply cannot land.
|
|
10
|
+
*
|
|
11
|
+
* Determinism: the gate re-derives from git only when the epoch file actually changed (mtime
|
|
12
|
+
* fence) or while blocked; verdicts in between are cached. No polling, no timers.
|
|
13
|
+
*/
|
|
14
|
+
import type { WorktreeSyncPolicy } from "./codes.ts";
|
|
15
|
+
import { type WorktreeSyncEngineDeps } from "./git-engine.ts";
|
|
16
|
+
export type LaneBashVerdict = {
|
|
17
|
+
verdict: "allowed";
|
|
18
|
+
} | {
|
|
19
|
+
verdict: "allowed_even_when_sync_required";
|
|
20
|
+
} | {
|
|
21
|
+
verdict: "main_mutation_refused";
|
|
22
|
+
reason: string;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Classify one bash command line for a lane-bound session (G10 + the sync_required allowlist).
|
|
26
|
+
* Tokenization is whitespace-naive by design -- deterministic and reviewable; shell-quoting
|
|
27
|
+
* tricks can evade it, which is the documented cooperative boundary (the land CAS cannot be
|
|
28
|
+
* evaded). Command POSITION still matters: `git` only begins an invocation at the start of the
|
|
29
|
+
* command or immediately after a shell separator (`&&`, `||`, `;`, `|`) -- a bare `git` token
|
|
30
|
+
* elsewhere (e.g. as a plain argument to `echo`) is not an invocation. Rules:
|
|
31
|
+
* - `git push` anywhere: refused (main moves only through the land gate; pushing is owner-only).
|
|
32
|
+
* - `git -C <path>` / `--git-dir` combined with a mutating subcommand: refused (escaping the
|
|
33
|
+
* lane worktree to operate on another checkout, e.g. the hub).
|
|
34
|
+
* - `git branch -f/-M/-D <main>` / `git update-ref refs/heads/<main>`: refused.
|
|
35
|
+
* - Everything else: allowed; a read/commit-shaped git subcommand additionally stays allowed
|
|
36
|
+
* while the lane is sync_required (committing WIP is the prescribed step BEFORE syncing).
|
|
37
|
+
*/
|
|
38
|
+
export declare function classifyLaneBashCommand(command: string, mainBranch: string): LaneBashVerdict;
|
|
39
|
+
/** Symlink-safe containment check (G-path): does `targetPath` resolve inside `worktreePath`? */
|
|
40
|
+
export declare function isPathOutsideLane(targetPath: string, worktreePath: string): boolean;
|
|
41
|
+
/** Resolve a user-supplied relative lane path and reject symlink/parent escapes. */
|
|
42
|
+
export declare function resolveLaneMutationPath(worktreePath: string, candidate: string): string | undefined;
|
|
43
|
+
export interface WorktreeLaneGateConfig {
|
|
44
|
+
laneKey: string;
|
|
45
|
+
engineDeps: () => WorktreeSyncEngineDeps;
|
|
46
|
+
policy: () => WorktreeSyncPolicy;
|
|
47
|
+
/** Worker launches use a hard shell envelope: only lane-safe Git/WIP commands and the owner-configured
|
|
48
|
+
* exact gate command may pass through bash. Interactive lane sessions retain the legacy cooperative
|
|
49
|
+
* command surface while the typed worktree_sync actions are used for hard worker mutations. */
|
|
50
|
+
hardShell?: boolean;
|
|
51
|
+
trustedGateCommand?: () => string | undefined;
|
|
52
|
+
}
|
|
53
|
+
export type LaneMutationCheck = {
|
|
54
|
+
allowed: true;
|
|
55
|
+
} | {
|
|
56
|
+
allowed: false;
|
|
57
|
+
code: string;
|
|
58
|
+
message: string;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* The G8 gate object RuntimeBuilder holds per lane-bound session. `checkMutation` is called by
|
|
62
|
+
* the wrapped edit/write/bash tools before every mutating execution.
|
|
63
|
+
*/
|
|
64
|
+
export declare class WorktreeLaneGate {
|
|
65
|
+
private readonly config;
|
|
66
|
+
private _ctx;
|
|
67
|
+
private _epochFileMtimeMs;
|
|
68
|
+
private _cachedAllowed;
|
|
69
|
+
constructor(config: WorktreeLaneGateConfig);
|
|
70
|
+
private resolveContext;
|
|
71
|
+
/** Cheap fence: has the epoch file changed since the last allowed verdict? */
|
|
72
|
+
private epochChanged;
|
|
73
|
+
checkMutation(toolName: string, bashCommand?: string, targetPath?: string): Promise<LaneMutationCheck>;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=lane-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lane-gate.d.ts","sourceRoot":"","sources":["../../../src/core/worktree-sync/lane-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAyD,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAGrH,MAAM,MAAM,eAAe,GACxB;IAAE,OAAO,EAAE,SAAS,CAAA;CAAE,GACtB;IAAE,OAAO,EAAE,iCAAiC,CAAA;CAAE,GAC9C;IAAE,OAAO,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAkBxD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,CAiF5F;AA8BD,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CASnF;AAED,oFAAoF;AACpF,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGnG;AAED,MAAM,WAAW,sBAAsB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,sBAAsB,CAAC;IACzC,MAAM,EAAE,MAAM,kBAAkB,CAAC;IACjC;;mGAE+F;IAC/F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED,MAAM,MAAM,iBAAiB,GAAG;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAqCtG;;;GAGG;AACH,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,cAAc,CAAS;IAE/B,YAAY,MAAM,EAAE,sBAAsB,EAEzC;YAEa,cAAc;IAQ5B,8EAA8E;IAC9E,OAAO,CAAC,YAAY;IAYd,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2H3G;CACD","sourcesContent":["/**\n * Lane gate: G8/G10 enforcement for a LANE-BOUND `pi` session (launched with\n * `PI_WORKTREE_LANE=<key>`). RuntimeBuilder wraps the session's file-mutation tools (edit /\n * write / bash) with {@link WorktreeLaneGate.checkMutation}; a lane that the active policy marks\n * sync_required fails closed with the exact recovery step until it rebases main.\n *\n * Honesty boundary (unchanged from the tmux trust model): this is HARD for pi children -- the\n * wrapper lives under the tool layer, not in the prompt -- and cooperative-only for foreign\n * CLIs, whose backstop is the land CAS (G3): stale work simply cannot land.\n *\n * Determinism: the gate re-derives from git only when the epoch file actually changed (mtime\n * fence) or while blocked; verdicts in between are cached. No polling, no timers.\n */\n\nimport { existsSync, realpathSync, statSync } from \"node:fs\";\nimport { basename, dirname, join, resolve, sep } from \"node:path\";\nimport type { WorktreeSyncPolicy } from \"./codes.ts\";\nimport { deriveLaneFacts, type RepoContext, resolveRepoContext, type WorktreeSyncEngineDeps } from \"./git-engine.ts\";\nimport { readLane } from \"./store.ts\";\n\nexport type LaneBashVerdict =\n\t| { verdict: \"allowed\" }\n\t| { verdict: \"allowed_even_when_sync_required\" }\n\t| { verdict: \"main_mutation_refused\"; reason: string };\n\nconst SYNC_SAFE_GIT_SUBCOMMANDS = new Set([\n\t\"status\",\n\t\"diff\",\n\t\"log\",\n\t\"show\",\n\t\"add\",\n\t\"commit\",\n\t\"stash\",\n\t\"rev-parse\",\n\t\"ls-files\",\n\t\"blame\",\n\t\"grep\",\n]);\n\nconst MAIN_MUTATING_GIT_SUBCOMMANDS = new Set([\"merge\", \"rebase\", \"reset\", \"commit\", \"branch\", \"update-ref\", \"push\"]);\n\n/**\n * Classify one bash command line for a lane-bound session (G10 + the sync_required allowlist).\n * Tokenization is whitespace-naive by design -- deterministic and reviewable; shell-quoting\n * tricks can evade it, which is the documented cooperative boundary (the land CAS cannot be\n * evaded). Command POSITION still matters: `git` only begins an invocation at the start of the\n * command or immediately after a shell separator (`&&`, `||`, `;`, `|`) -- a bare `git` token\n * elsewhere (e.g. as a plain argument to `echo`) is not an invocation. Rules:\n * - `git push` anywhere: refused (main moves only through the land gate; pushing is owner-only).\n * - `git -C <path>` / `--git-dir` combined with a mutating subcommand: refused (escaping the\n * lane worktree to operate on another checkout, e.g. the hub).\n * - `git branch -f/-M/-D <main>` / `git update-ref refs/heads/<main>`: refused.\n * - Everything else: allowed; a read/commit-shaped git subcommand additionally stays allowed\n * while the lane is sync_required (committing WIP is the prescribed step BEFORE syncing).\n */\nexport function classifyLaneBashCommand(command: string, mainBranch: string): LaneBashVerdict {\n\t// This classifier is defense-in-depth, not a shell parser. Refuse compound\n\t// syntax before any segment can return an allow verdict; otherwise `git\n\t// status; git push` is approved by the first safe segment.\n\tif (/[|;&<>$`(){}\\n\\r]/u.test(command)) {\n\t\treturn {\n\t\t\tverdict: \"main_mutation_refused\",\n\t\t\treason: \"compound shell syntax is refused in a lane; use typed worktree_sync actions\",\n\t\t};\n\t}\n\tif (/^\\s*[\"']git[\"']\\s/u.test(command)) {\n\t\treturn {\n\t\t\tverdict: \"main_mutation_refused\",\n\t\t\treason: \"quoted command names are refused in a lane; use the typed Git actions\",\n\t\t};\n\t}\n\tconst segments = [command];\n\tlet allowedWhenSyncRequired = false;\n\tfor (const segment of segments) {\n\t\tconst tokens = segment.trim().split(/\\s+/).filter(Boolean);\n\t\tif (tokens[0] !== \"git\") continue;\n\t\tlet j = 1;\n\t\tlet escapesWorktree = false;\n\t\t// Skip git global options to find the subcommand; -C/--git-dir mark checkout escape.\n\t\twhile (j < tokens.length) {\n\t\t\tconst token = tokens[j] ?? \"\";\n\t\t\tif (token === \"-C\" || token === \"--git-dir\" || token === \"--work-tree\") {\n\t\t\t\tescapesWorktree = true;\n\t\t\t\tj += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (token.startsWith(\"-C\") && token !== \"-C\") {\n\t\t\t\tescapesWorktree = true;\n\t\t\t\tj += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (token.startsWith(\"--git-dir=\") || token.startsWith(\"--work-tree=\")) {\n\t\t\t\tescapesWorktree = true;\n\t\t\t\tj += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (token.startsWith(\"-\")) {\n\t\t\t\tj += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tconst subcommand = tokens[j] ?? \"\";\n\t\tconst rest = tokens.slice(j + 1);\n\t\tif (subcommand === \"push\") {\n\t\t\treturn {\n\t\t\t\tverdict: \"main_mutation_refused\",\n\t\t\t\treason:\n\t\t\t\t\t\"git push is refused in a lane session; landing is the only integration path and pushing stays an owner action\",\n\t\t\t};\n\t\t}\n\t\tif (escapesWorktree && MAIN_MUTATING_GIT_SUBCOMMANDS.has(subcommand)) {\n\t\t\treturn {\n\t\t\t\tverdict: \"main_mutation_refused\",\n\t\t\t\treason: `git -C/--git-dir with '${subcommand}' escapes the lane worktree; operate only on this lane (G10)`,\n\t\t\t};\n\t\t}\n\t\tif (\n\t\t\tsubcommand === \"branch\" &&\n\t\t\trest.some((token) => /^(?:-f|--force|-M|-m|-D|-d)$/.test(token)) &&\n\t\t\trest.includes(mainBranch)\n\t\t) {\n\t\t\treturn {\n\t\t\t\tverdict: \"main_mutation_refused\",\n\t\t\t\treason: `git branch may not move/delete '${mainBranch}' from a lane; main moves only through the land gate (G10)`,\n\t\t\t};\n\t\t}\n\t\tif (subcommand === \"update-ref\" && rest.some((token) => token === `refs/heads/${mainBranch}`)) {\n\t\t\treturn {\n\t\t\t\tverdict: \"main_mutation_refused\",\n\t\t\t\treason: `git update-ref may not touch refs/heads/${mainBranch} from a lane (G10)`,\n\t\t\t};\n\t\t}\n\t\tif (SYNC_SAFE_GIT_SUBCOMMANDS.has(subcommand)) allowedWhenSyncRequired = true;\n\t}\n\treturn allowedWhenSyncRequired ? { verdict: \"allowed_even_when_sync_required\" } : { verdict: \"allowed\" };\n}\n\n/** Symlink-safe resolution of a path that may not exist yet: realpath the NEAREST EXISTING\n * ancestor, then re-append the not-yet-existing tail literally (a not-yet-created file's own\n * missing final component can never itself be a symlink escape). */\nfunction resolveSymlinkSafe(targetPath: string): string {\n\tif (existsSync(targetPath)) {\n\t\ttry {\n\t\t\treturn realpathSync(targetPath);\n\t\t} catch {\n\t\t\treturn targetPath;\n\t\t}\n\t}\n\tconst tail: string[] = [basename(targetPath)];\n\tlet ancestor = dirname(targetPath);\n\twhile (!existsSync(ancestor)) {\n\t\tconst parent = dirname(ancestor);\n\t\tif (parent === ancestor) break; // reached the filesystem root without finding one\n\t\ttail.unshift(basename(ancestor));\n\t\tancestor = parent;\n\t}\n\tlet realAncestor: string;\n\ttry {\n\t\trealAncestor = realpathSync(ancestor);\n\t} catch {\n\t\trealAncestor = ancestor;\n\t}\n\treturn join(realAncestor, ...tail);\n}\n\n/** Symlink-safe containment check (G-path): does `targetPath` resolve inside `worktreePath`? */\nexport function isPathOutsideLane(targetPath: string, worktreePath: string): boolean {\n\tlet realRoot: string;\n\ttry {\n\t\trealRoot = realpathSync(worktreePath);\n\t} catch {\n\t\trealRoot = worktreePath;\n\t}\n\tconst resolvedTarget = resolveSymlinkSafe(targetPath);\n\treturn resolvedTarget !== realRoot && !resolvedTarget.startsWith(realRoot + sep);\n}\n\n/** Resolve a user-supplied relative lane path and reject symlink/parent escapes. */\nexport function resolveLaneMutationPath(worktreePath: string, candidate: string): string | undefined {\n\tconst target = resolve(worktreePath, candidate);\n\treturn isPathOutsideLane(target, worktreePath) ? undefined : target;\n}\n\nexport interface WorktreeLaneGateConfig {\n\tlaneKey: string;\n\tengineDeps: () => WorktreeSyncEngineDeps;\n\tpolicy: () => WorktreeSyncPolicy;\n\t/** Worker launches use a hard shell envelope: only lane-safe Git/WIP commands and the owner-configured\n\t * exact gate command may pass through bash. Interactive lane sessions retain the legacy cooperative\n\t * command surface while the typed worktree_sync actions are used for hard worker mutations. */\n\thardShell?: boolean;\n\ttrustedGateCommand?: () => string | undefined;\n}\n\nexport type LaneMutationCheck = { allowed: true } | { allowed: false; code: string; message: string };\n\nasync function changedPaths(\n\tdeps: WorktreeSyncEngineDeps,\n\tcwd: string,\n\tbase: string,\n\tref: string,\n): Promise<Set<string> | undefined> {\n\tconst result = await deps.exec(\"git\", [\"diff\", \"--name-only\", `${base}..${ref}`, \"--\"], {\n\t\tcwd,\n\t\ttimeout: 60_000,\n\t\tmaxBuffer: 1024 * 1024,\n\t});\n\tif (result.code !== 0) return undefined;\n\treturn new Set(\n\t\tresult.stdout\n\t\t\t.split(/\\r?\\n/u)\n\t\t\t.map((path) => path.trim())\n\t\t\t.filter(Boolean),\n\t);\n}\n\nfunction hardShellCommandAllowed(command: string, mainBranch: string, trustedGateCommand?: string): boolean {\n\tconst trimmed = command.trim();\n\tif (trustedGateCommand && trimmed === trustedGateCommand.trim()) return true;\n\tif (!/^git(?:\\s|$)/u.test(trimmed)) return false;\n\tconst verdict = classifyLaneBashCommand(trimmed, mainBranch);\n\tif (verdict.verdict === \"main_mutation_refused\") return false;\n\tconst tokens = trimmed.split(/\\s+/u);\n\tconst subcommand = tokens[1] ?? \"\";\n\tif (!SYNC_SAFE_GIT_SUBCOMMANDS.has(subcommand) && subcommand !== \"commit\") return false;\n\t// Git path operands must not escape the lane checkout. The typed worktree\n\t// actions are the authoritative route for path-sensitive add/diff operations;\n\t// this final check prevents the common absolute/parent escape in the shell floor.\n\treturn !tokens.slice(2).some((token) => token.startsWith(\"/\") || token.startsWith(\"..\") || token.includes(\"/../\"));\n}\n\n/**\n * The G8 gate object RuntimeBuilder holds per lane-bound session. `checkMutation` is called by\n * the wrapped edit/write/bash tools before every mutating execution.\n */\nexport class WorktreeLaneGate {\n\tprivate readonly config: WorktreeLaneGateConfig;\n\tprivate _ctx: RepoContext | undefined;\n\tprivate _epochFileMtimeMs: number | undefined;\n\tprivate _cachedAllowed = false;\n\n\tconstructor(config: WorktreeLaneGateConfig) {\n\t\tthis.config = config;\n\t}\n\n\tprivate async resolveContext(): Promise<RepoContext | undefined> {\n\t\tif (this._ctx) return this._ctx;\n\t\tconst ctx = await resolveRepoContext(this.config.engineDeps());\n\t\tif (\"code\" in ctx) return undefined;\n\t\tthis._ctx = ctx;\n\t\treturn ctx;\n\t}\n\n\t/** Cheap fence: has the epoch file changed since the last allowed verdict? */\n\tprivate epochChanged(ctx: RepoContext): boolean {\n\t\tlet mtimeMs: number | undefined;\n\t\ttry {\n\t\t\tmtimeMs = statSync(ctx.paths.epochFile).mtimeMs;\n\t\t} catch {\n\t\t\tmtimeMs = undefined;\n\t\t}\n\t\tif (mtimeMs === this._epochFileMtimeMs) return false;\n\t\tthis._epochFileMtimeMs = mtimeMs;\n\t\treturn true;\n\t}\n\n\tasync checkMutation(toolName: string, bashCommand?: string, targetPath?: string): Promise<LaneMutationCheck> {\n\t\tconst ctx = await this.resolveContext();\n\t\t// No repo context (deleted repo, engine failure): fail OPEN for plain tools -- the land\n\t\t// CAS still holds -- but the G10 bash rules below never depend on repo state.\n\t\tconst mainBranch = ctx?.mainBranch ?? \"main\";\n\t\tif (this.config.hardShell && !ctx) {\n\t\t\treturn {\n\t\t\t\tallowed: false,\n\t\t\t\tcode: \"lane_state_unavailable\",\n\t\t\t\tmessage: \"worktree-sync: lane state is unavailable; hard worker mutations fail closed\",\n\t\t\t};\n\t\t}\n\n\t\tif (toolName === \"bash\" && bashCommand !== undefined) {\n\t\t\tif (\n\t\t\t\tthis.config.hardShell &&\n\t\t\t\t!hardShellCommandAllowed(bashCommand, mainBranch, this.config.trustedGateCommand?.())\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tallowed: false,\n\t\t\t\t\tcode: \"main_mutation_refused\",\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"worktree-sync: unrestricted bash is unavailable in a hard worker lane; use typed worktree_sync actions\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst verdict = classifyLaneBashCommand(bashCommand, mainBranch);\n\t\t\tif (verdict.verdict === \"main_mutation_refused\") {\n\t\t\t\treturn { allowed: false, code: \"main_mutation_refused\", message: `worktree-sync: ${verdict.reason}` };\n\t\t\t}\n\t\t\tif (verdict.verdict === \"allowed_even_when_sync_required\") return { allowed: true };\n\t\t}\n\t\tif (!ctx) return { allowed: true };\n\n\t\t// G-path: an edit/write target must resolve INSIDE this lane's worktree (symlink-safe),\n\t\t// checked BEFORE the staleness cache so a cached \"allowed\" verdict never short-circuits past\n\t\t// it. No active lane record: existing fail-open stands (mirrors the readLane check below).\n\t\tif ((toolName === \"edit\" || toolName === \"write\") && targetPath !== undefined) {\n\t\t\tconst laneForPath = await readLane(ctx.paths, this.config.laneKey);\n\t\t\tif (laneForPath?.status === \"active\" && isPathOutsideLane(targetPath, laneForPath.worktreePath)) {\n\t\t\t\treturn {\n\t\t\t\t\tallowed: false,\n\t\t\t\t\tcode: \"path_outside_lane\",\n\t\t\t\t\tmessage: `worktree-sync: '${targetPath}' resolves outside lane '${this.config.laneKey}' worktree (${laneForPath.worktreePath}); edit/write only inside your lane checkout`,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// G8: sync_required fails mutations closed. Re-derive only when the epoch moved or while\n\t\t// blocked (a successful sync clears the block on the very next check).\n\t\tif (this._cachedAllowed && !this.epochChanged(ctx)) return { allowed: true };\n\n\t\tconst deps = this.config.engineDeps();\n\t\tconst lane = await readLane(ctx.paths, this.config.laneKey);\n\t\tif (!lane || lane.status !== \"active\") {\n\t\t\tif (this.config.hardShell) {\n\t\t\t\treturn {\n\t\t\t\t\tallowed: false,\n\t\t\t\t\tcode: \"lane_state_unavailable\",\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"worktree-sync: hard worker lane registration is missing or inactive; reconcile before mutating\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tthis._cachedAllowed = true;\n\t\t\treturn { allowed: true };\n\t\t}\n\t\t// Re-derive main tip: the cached ctx pins the sha from session start.\n\t\tconst fresh = await resolveRepoContext(deps);\n\t\tif (\"code\" in fresh) {\n\t\t\tif (this.config.hardShell) {\n\t\t\t\treturn {\n\t\t\t\t\tallowed: false,\n\t\t\t\t\tcode: \"lane_state_unavailable\",\n\t\t\t\t\tmessage: \"worktree-sync: Git context is unavailable; hard worker mutation refused\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tthis._cachedAllowed = true;\n\t\t\treturn { allowed: true };\n\t\t}\n\t\tthis._ctx = fresh;\n\t\tconst facts = await deriveLaneFacts(deps, fresh, lane);\n\t\tif (facts.fresh) {\n\t\t\tthis._cachedAllowed = true;\n\t\t\treturn { allowed: true };\n\t\t}\n\n\t\tconst policy = this.config.policy();\n\t\tlet syncRequired = policy === \"on_land_mandatory\";\n\t\tif (policy === \"overlap_mandatory\") {\n\t\t\t// Epoch files are notification/diagnostic state only. Derive both sides from the\n\t\t\t// current merge base so an overlap from land N remains enforced after unrelated land N+1.\n\t\t\tconst mergeBase = await deps.exec(\"git\", [\"merge-base\", fresh.mainBranch, lane.branch], {\n\t\t\t\tcwd: fresh.topLevel,\n\t\t\t\ttimeout: 60_000,\n\t\t\t\tmaxBuffer: 1024 * 1024,\n\t\t\t});\n\t\t\tif (mergeBase.code !== 0 || !mergeBase.stdout.trim()) {\n\t\t\t\tsyncRequired = true;\n\t\t\t} else {\n\t\t\t\tconst base = mergeBase.stdout.trim().split(/\\s+/u)[0];\n\t\t\t\tconst lanePaths = await changedPaths(deps, fresh.topLevel, base, lane.branch);\n\t\t\t\tconst mainPaths = await changedPaths(deps, fresh.topLevel, base, fresh.mainBranch);\n\t\t\t\tif (!lanePaths || !mainPaths) {\n\t\t\t\t\tsyncRequired = true;\n\t\t\t\t} else {\n\t\t\t\t\tsyncRequired = [...lanePaths].some((path) => mainPaths.has(path));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (policy === \"land_time_only\") syncRequired = false;\n\n\t\tif (!syncRequired) {\n\t\t\tthis._cachedAllowed = true;\n\t\t\treturn { allowed: true };\n\t\t}\n\t\tthis._cachedAllowed = false;\n\t\treturn {\n\t\t\tallowed: false,\n\t\t\tcode: \"sync_required\",\n\t\t\tmessage:\n\t\t\t\t`worktree-sync: lane '${this.config.laneKey}' must rebase main before further mutations ` +\n\t\t\t\t`(main moved past this lane). Commit any WIP (git add/commit stay available), then call ` +\n\t\t\t\t`worktree_sync {\"action\":\"sync\"}, resolve conflicts if any, and continue. (sync_required)`,\n\t\t};\n\t}\n}\n"]}
|