@caupulican/pi-adaptative 0.81.37 → 0.81.39
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 +91 -0
- package/README.md +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/README.md +18 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts +131 -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 +196 -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 +308 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts +22 -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 +585 -24
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +749 -27
- 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 +5 -5
- package/dist/bundled-resources/skills/tool-call-repair/references/text-protocol-grammar.md +28 -7
- package/dist/cli/args.d.ts +3 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +15 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-paths.d.ts +49 -0
- package/dist/core/agent-paths.d.ts.map +1 -0
- package/dist/core/agent-paths.js +107 -0
- package/dist/core/agent-paths.js.map +1 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +3 -3
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +234 -17
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +484 -62
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/autonomy/contracts.d.ts +9 -0
- package/dist/core/autonomy/contracts.d.ts.map +1 -1
- package/dist/core/autonomy/contracts.js.map +1 -1
- package/dist/core/autonomy/lane-tracker.d.ts +10 -1
- package/dist/core/autonomy/lane-tracker.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tracker.js +5 -1
- package/dist/core/autonomy/lane-tracker.js.map +1 -1
- package/dist/core/background-lane-controller.d.ts +122 -6
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +447 -90
- 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/compaction-support.d.ts +13 -3
- 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-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/sqlite-runtime-index.d.ts.map +1 -1
- package/dist/core/context/sqlite-runtime-index.js +13 -7
- package/dist/core/context/sqlite-runtime-index.js.map +1 -1
- package/dist/core/context-gc.d.ts.map +1 -1
- package/dist/core/context-gc.js +16 -1
- 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 +137 -14
- 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/delegation/session-worker-result.d.ts +34 -4
- package/dist/core/delegation/session-worker-result.d.ts.map +1 -1
- package/dist/core/delegation/session-worker-result.js +64 -4
- package/dist/core/delegation/session-worker-result.js.map +1 -1
- package/dist/core/delegation/worker-actions.d.ts.map +1 -1
- package/dist/core/delegation/worker-actions.js +1 -1
- package/dist/core/delegation/worker-actions.js.map +1 -1
- package/dist/core/delegation/worker-result.d.ts +42 -1
- package/dist/core/delegation/worker-result.d.ts.map +1 -1
- package/dist/core/delegation/worker-result.js +68 -0
- package/dist/core/delegation/worker-result.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +23 -7
- 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 +1 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +51 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.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-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 +77 -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 +4 -0
- package/dist/core/goals/goal-continuation-prompt.d.ts.map +1 -1
- package/dist/core/goals/goal-continuation-prompt.js +51 -10
- package/dist/core/goals/goal-continuation-prompt.js.map +1 -1
- package/dist/core/goals/goal-runtime-snapshot.d.ts +101 -2
- package/dist/core/goals/goal-runtime-snapshot.d.ts.map +1 -1
- package/dist/core/goals/goal-runtime-snapshot.js +87 -4
- package/dist/core/goals/goal-runtime-snapshot.js.map +1 -1
- package/dist/core/goals/goal-state.d.ts +89 -1
- package/dist/core/goals/goal-state.d.ts.map +1 -1
- package/dist/core/goals/goal-state.js +71 -5
- package/dist/core/goals/goal-state.js.map +1 -1
- package/dist/core/goals/goal-tool-core.d.ts +56 -2
- package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
- package/dist/core/goals/goal-tool-core.js +111 -5
- package/dist/core/goals/goal-tool-core.js.map +1 -1
- package/dist/core/goals/session-goal-state.d.ts +11 -2
- package/dist/core/goals/session-goal-state.d.ts.map +1 -1
- package/dist/core/goals/session-goal-state.js +32 -17
- package/dist/core/goals/session-goal-state.js.map +1 -1
- package/dist/core/keybindings.d.ts +10 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +10 -2
- package/dist/core/keybindings.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/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/model-capability.d.ts +34 -0
- package/dist/core/model-capability.d.ts.map +1 -1
- package/dist/core/model-capability.js +42 -1
- package/dist/core/model-capability.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/models/adaptation-store.d.ts +7 -0
- package/dist/core/models/adaptation-store.d.ts.map +1 -1
- package/dist/core/models/adaptation-store.js +47 -11
- 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 +3 -0
- package/dist/core/models/fitness-store.d.ts.map +1 -1
- package/dist/core/models/fitness-store.js +11 -2
- package/dist/core/models/fitness-store.js.map +1 -1
- 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 +9 -7
- 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/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-matrix/codes.d.ts +72 -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/runtime.d.ts +63 -0
- package/dist/core/process-matrix/runtime.d.ts.map +1 -0
- package/dist/core/process-matrix/runtime.js +310 -0
- package/dist/core/process-matrix/runtime.js.map +1 -0
- package/dist/core/process-matrix/store.d.ts +22 -0
- package/dist/core/process-matrix/store.d.ts.map +1 -0
- package/dist/core/process-matrix/store.js +80 -0
- package/dist/core/process-matrix/store.js.map +1 -0
- package/dist/core/process-matrix/supervisor.d.ts +72 -0
- package/dist/core/process-matrix/supervisor.d.ts.map +1 -0
- package/dist/core/process-matrix/supervisor.js +130 -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 +20 -0
- 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 +29 -5
- package/dist/core/reflection-controller.d.ts.map +1 -1
- package/dist/core/reflection-controller.js +215 -126
- 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 +44 -0
- package/dist/core/reload-blockers.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +8 -7
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/runtime-builder.d.ts +58 -5
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +209 -25
- 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.map +1 -1
- package/dist/core/sdk.js +3 -3
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-role.d.ts +31 -0
- package/dist/core/session-role.d.ts.map +1 -0
- package/dist/core/session-role.js +52 -0
- package/dist/core/session-role.js.map +1 -0
- package/dist/core/settings-manager.d.ts +42 -3
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +94 -60
- 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 +11 -2
- package/dist/core/tasks/session-task-state.d.ts.map +1 -1
- package/dist/core/tasks/session-task-state.js +27 -11
- 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-state.d.ts +8 -0
- package/dist/core/tasks/task-state.d.ts.map +1 -1
- package/dist/core/tasks/task-state.js +28 -1
- package/dist/core/tasks/task-state.js.map +1 -1
- 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-recovery-log-records.d.ts +7 -0
- package/dist/core/tool-recovery-log-records.d.ts.map +1 -1
- package/dist/core/tool-recovery-log-records.js +14 -6
- 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 +37 -0
- package/dist/core/tool-selection/tool-performance-store.d.ts.map +1 -1
- package/dist/core/tool-selection/tool-performance-store.js +87 -3
- 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/bash.d.ts +18 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +97 -18
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/delegate-status.d.ts +14 -0
- package/dist/core/tools/delegate-status.d.ts.map +1 -1
- package/dist/core/tools/delegate-status.js +82 -7
- package/dist/core/tools/delegate-status.js.map +1 -1
- package/dist/core/tools/delegate.d.ts.map +1 -1
- package/dist/core/tools/delegate.js +25 -8
- package/dist/core/tools/delegate.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +52 -44
- package/dist/core/tools/find.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/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +5 -4
- package/dist/core/tools/grep.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 +2 -2
- package/dist/core/tools/model-fitness.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- 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 +69 -13
- 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 +4 -0
- package/dist/core/tools/task-steps.d.ts.map +1 -1
- package/dist/core/tools/task-steps.js +63 -8
- package/dist/core/tools/task-steps.js.map +1 -1
- package/dist/core/tools/tmux-dispatch.d.ts +86 -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 +153 -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/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/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 +247 -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/main.d.ts.map +1 -1
- package/dist/main.js +94 -0
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts +9 -0
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +38 -0
- 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/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/interactive-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +4 -0
- package/dist/modes/interactive/interactive-mode.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/session-flow-commands.d.ts.map +1 -1
- package/dist/modes/interactive/session-flow-commands.js +24 -4
- package/dist/modes/interactive/session-flow-commands.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/shell.d.ts +7 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +39 -9
- 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/docs/development.md +2 -0
- package/docs/packages.md +1 -1
- package/docs/process-matrix.md +120 -0
- package/docs/settings.md +5 -2
- package/docs/tmux-agent-manager.md +85 -2
- package/docs/windows.md +52 -3
- package/docs/work-directory.md +29 -0
- 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/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/docs/integration-sweep-builder-blueprint-2026-07-09.md +0 -365
- package/docs/integration-sweep-resume-2026-07-09.md +0 -407
|
@@ -32,9 +32,11 @@
|
|
|
32
32
|
* load / unload / reconcile API and for `getAllTools` / `getToolDefinition`, and a private
|
|
33
33
|
* `_refreshToolRegistry` delegation for its internal callers.
|
|
34
34
|
*/
|
|
35
|
+
import { createHash } from "node:crypto";
|
|
35
36
|
import { existsSync, readFileSync } from "node:fs";
|
|
36
37
|
import { isAbsolute, join } from "node:path";
|
|
37
38
|
import { DEFAULT_ACTIVE_TOOL_NAMES, mapToolNamesForPlatform } from "./default-tool-surface.js";
|
|
39
|
+
import { acknowledgeWorkerResultReview } from "./delegation/session-worker-result.js";
|
|
38
40
|
import { createCoreDiagnosticsToolDefinitions } from "./extensions/builtin.js";
|
|
39
41
|
import { ExtensionRunner, wrapRegisteredTools, } from "./extensions/index.js";
|
|
40
42
|
import { disposeExtensionEventSubscriptions } from "./extensions/loader.js";
|
|
@@ -42,7 +44,9 @@ import { emitSessionShutdownEvent } from "./extensions/runner.js";
|
|
|
42
44
|
import { resolveCliModel } from "./model-resolver.js";
|
|
43
45
|
import { evaluateSurfaceFitness } from "./model-router/fitness-gate.js";
|
|
44
46
|
import { FitnessStore } from "./models/fitness-store.js";
|
|
47
|
+
import { describeInFlightWorkUnit, getInFlightWorkUnits } from "./reload-blockers.js";
|
|
45
48
|
import { ScoutController } from "./scout-controller.js";
|
|
49
|
+
import { getSessionRole, isWorkerSession, WORKER_FORBIDDEN_TOOLS } from "./session-role.js";
|
|
46
50
|
import { matchesResourceProfilePattern, } from "./settings-manager.js";
|
|
47
51
|
import { createSyntheticSourceInfo } from "./source-info.js";
|
|
48
52
|
import { buildReflexUserPrompt, parseReflexPlan, REFLEX_INTERPRETER_SYSTEM_PROMPT, } from "./toolkit/reflex-interpreter.js";
|
|
@@ -55,10 +59,51 @@ import { createGoalToolDefinition } from "./tools/goal.js";
|
|
|
55
59
|
import { createGrepTool } from "./tools/grep.js";
|
|
56
60
|
import { createAllToolDefinitions } from "./tools/index.js";
|
|
57
61
|
import { createModelFitnessToolDefinition } from "./tools/model-fitness.js";
|
|
62
|
+
import { resolveToCwd } from "./tools/path-utils.js";
|
|
58
63
|
import { createReadTool } from "./tools/read.js";
|
|
59
64
|
import { createRunToolkitScriptToolDefinition } from "./tools/run-toolkit-script.js";
|
|
60
65
|
import { createTaskStepsToolDefinition } from "./tools/task-steps.js";
|
|
66
|
+
import { dispatchTmuxWorker } from "./tools/tmux-dispatch.js";
|
|
61
67
|
import { createToolDefinitionFromAgentTool } from "./tools/tool-definition-wrapper.js";
|
|
68
|
+
import { createWorktreeSyncToolDefinition } from "./tools/worktree-sync.js";
|
|
69
|
+
import { createLane } from "./worktree-sync/git-engine.js";
|
|
70
|
+
import { WorktreeLaneGate } from "./worktree-sync/lane-gate.js";
|
|
71
|
+
import { buildWorktreeSyncEngineDeps, getBoundWorktreeLaneKey } from "./worktree-sync/runtime.js";
|
|
72
|
+
/**
|
|
73
|
+
* Deterministic `addSpawnedUsage` reportId: `kind` + session id + a content hash of `identity`
|
|
74
|
+
* (never `Date.now`/random). Same identity on a retry of the same logical work unit yields the same
|
|
75
|
+
* id, so the ledger's `seenSubagentReportIds` dedupe catches a duplicate report instead of
|
|
76
|
+
* double-counting spend.
|
|
77
|
+
*/
|
|
78
|
+
function deriveSpawnedUsageReportId(kind, sessionId, identity) {
|
|
79
|
+
const digest = createHash("sha256").update(identity).digest("hex").slice(0, 16);
|
|
80
|
+
return `${kind}:${sessionId}:${digest}`;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Is `toolCallId` a real, answered tool call on `sessionManager`'s active branch? A
|
|
84
|
+
* toolCallId is "real" iff a toolResult message on that branch responded to it -- the same
|
|
85
|
+
* toolResult/toolCallId match `context-pipeline.ts`'s `_buildSessionEntryIdLookup` uses, and
|
|
86
|
+
* branch-scoped (via `getBranch()`) so a sibling branch's tool calls never count. Exported (pure,
|
|
87
|
+
* no `this`) so the goal tool's `hasToolCallId` wiring below is directly testable against a real
|
|
88
|
+
* `SessionManager` without constructing the whole `RuntimeBuilder`.
|
|
89
|
+
*/
|
|
90
|
+
export function hasAnsweredToolCallOnBranch(sessionManager, toolCallId) {
|
|
91
|
+
return sessionManager
|
|
92
|
+
.getBranch()
|
|
93
|
+
.some((entry) => entry.type === "message" && entry.message.role === "toolResult" && entry.message.toolCallId === toolCallId);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Project a task-steps snapshot down to the OPEN (non-terminal) steps the goal tool's
|
|
97
|
+
* cross-visibility nudge needs. Mirrors `goal-runtime-snapshot.ts`'s `openTaskSteps` filter
|
|
98
|
+
* (status not "completed"/"cancelled", `activeForm || content`) so the two read the same
|
|
99
|
+
* "open" definition, narrowed to `OpenTaskStepRef`'s id+content shape. Exported (pure, no
|
|
100
|
+
* `this`) so the goal tool's `getOpenTaskSteps` wiring below is directly testable.
|
|
101
|
+
*/
|
|
102
|
+
export function deriveOpenTaskStepRefs(taskStepsState) {
|
|
103
|
+
return (taskStepsState?.steps ?? [])
|
|
104
|
+
.filter((step) => step.status !== "completed" && step.status !== "cancelled")
|
|
105
|
+
.map((step) => ({ id: step.id, content: step.activeForm || step.content }));
|
|
106
|
+
}
|
|
62
107
|
/**
|
|
63
108
|
* Owns the tool-registry build and the self-modification-safe extension reload extracted from
|
|
64
109
|
* {@link AgentSession}. See the module header for the snapshot-ownership and host-binding boundaries.
|
|
@@ -89,6 +134,9 @@ export class RuntimeBuilder {
|
|
|
89
134
|
streamFn: this.deps.getAgent().streamFn,
|
|
90
135
|
fileExists: (path) => existsSync(resolveCwdPath(cwd, path)),
|
|
91
136
|
countLines: (path) => countFileLines(resolveCwdPath(cwd, path)),
|
|
137
|
+
// Lets the scout register itself in the reload-gate quiesce registry (see
|
|
138
|
+
// reload-blockers.ts) for its own agentDir — the same key `_assertReloadQuiescent` reads.
|
|
139
|
+
getAgentDir: () => this.deps.getAgentDir(),
|
|
92
140
|
});
|
|
93
141
|
return controller.run(query, maxTurns);
|
|
94
142
|
}
|
|
@@ -124,6 +172,7 @@ export class RuntimeBuilder {
|
|
|
124
172
|
return this._toolDefinitions.get(name)?.definition;
|
|
125
173
|
}
|
|
126
174
|
refreshToolRegistry(options) {
|
|
175
|
+
const role = getSessionRole();
|
|
127
176
|
const previousRegistryNames = new Set(this._toolRegistry.keys());
|
|
128
177
|
// Re-derive from the pre-filter REQUEST, never from agent.state.tools: the active set is
|
|
129
178
|
// capability/profile-filtered, so feeding it back through setActiveToolsByName would
|
|
@@ -145,6 +194,11 @@ export class RuntimeBuilder {
|
|
|
145
194
|
}
|
|
146
195
|
: undefined;
|
|
147
196
|
const isAllowedTool = (name) => {
|
|
197
|
+
// Strict worker UAC ceiling: wins over allow-list/exclude/profile -- a worker session
|
|
198
|
+
// (lane-bound or dispatched) can never activate this tool no matter how permissively the
|
|
199
|
+
// active profile or an explicit request names it. See session-role.ts.
|
|
200
|
+
if (role === "worker" && WORKER_FORBIDDEN_TOOLS.has(name))
|
|
201
|
+
return false;
|
|
148
202
|
if (allowedToolNames && !allowedToolNames.has(name))
|
|
149
203
|
return false;
|
|
150
204
|
if (excludedToolNames?.has(name))
|
|
@@ -262,7 +316,7 @@ export class RuntimeBuilder {
|
|
|
262
316
|
nextActiveToolNames.push(toolName);
|
|
263
317
|
}
|
|
264
318
|
}
|
|
265
|
-
//
|
|
319
|
+
// An explicit grant that binds to NO registered tool is a silent no-op — typo'd
|
|
266
320
|
// name, or the owning extension is not granted/loaded. Surface it.
|
|
267
321
|
this.deps.setUnboundToolGrantWarnings(explicitAllowPatterns
|
|
268
322
|
.filter((pattern) => !boundPatterns.has(pattern))
|
|
@@ -383,7 +437,7 @@ export class RuntimeBuilder {
|
|
|
383
437
|
? Object.fromEntries(Object.entries(baseToolsOverride).map(([name, tool]) => [name, createToolDefinitionFromAgentTool(tool)]))
|
|
384
438
|
: createAllToolDefinitions(this.deps.getCwd(), {
|
|
385
439
|
read: { autoResizeImages },
|
|
386
|
-
bash: { commandPrefix: shellCommandPrefix, shellPath },
|
|
440
|
+
bash: { commandPrefix: shellCommandPrefix, shellPath, sessionKey: this.deps.getShellSessionKey() },
|
|
387
441
|
grep: { artifactStore: toolArtifactStore },
|
|
388
442
|
find: { artifactStore: toolArtifactStore },
|
|
389
443
|
artifact_retrieve: { artifactStore: toolArtifactStore },
|
|
@@ -393,11 +447,67 @@ export class RuntimeBuilder {
|
|
|
393
447
|
for (const definition of createCoreDiagnosticsToolDefinitions(() => this.deps.getActiveToolNames(), () => this.getAllTools(), (messages) => this.deps.getContextGcReport(messages), () => this.deps.getMemoryAuditDiagnostics())) {
|
|
394
448
|
this._baseToolDefinitions.set(definition.name, definition);
|
|
395
449
|
}
|
|
450
|
+
// Hoisted above the goal-tool registration (rather than declared only inside the
|
|
451
|
+
// worktreeSync-enabled block further below) so the SAME settings/deps factory backs both
|
|
452
|
+
// the goal->tmux lane-first dispatch dep (`createLaneWorktree`, immediately below) and the
|
|
453
|
+
// `worktree_sync` tool registration later in this method -- one source of truth, no drift.
|
|
454
|
+
const worktreeSyncSettings = settingsManager.getWorktreeSyncSettings();
|
|
455
|
+
const worktreeSyncEngineDeps = () => buildWorktreeSyncEngineDeps({
|
|
456
|
+
cwd: this.deps.getCwd(),
|
|
457
|
+
agentDir: this.deps.getAgentDir(),
|
|
458
|
+
settingsManager: this.deps.getSettingsManager(),
|
|
459
|
+
sessionId: this.deps.getSessionManager().getSessionId(),
|
|
460
|
+
});
|
|
396
461
|
const goalToolDefinition = createGoalToolDefinition({
|
|
397
462
|
getGoalState: () => this.deps.getGoalStateSnapshot(),
|
|
398
463
|
saveGoalState: (state) => {
|
|
399
464
|
this.deps.saveGoalStateSnapshot(state);
|
|
400
465
|
},
|
|
466
|
+
// kind:"tool" evidence refs verify against real session records.
|
|
467
|
+
hasToolCallId: (toolCallId) => hasAnsweredToolCallOnBranch(this.deps.getSessionManager(), toolCallId),
|
|
468
|
+
// kind:"worker" evidence refs verify against the SAME live lane/result accessors the
|
|
469
|
+
// delegate_status tool already uses below -- live wiring (these were declared optional
|
|
470
|
+
// and read-defensive on the goal-tool deps type).
|
|
471
|
+
getLaneRecords: () => this.deps.getWorkerLaneRecords(),
|
|
472
|
+
getWorkerResultSnapshots: () => this.deps.getWorkerResultSnapshots(),
|
|
473
|
+
// dispatch_worker's tool-layer side effect for the default (in_process) route: starts a
|
|
474
|
+
// real in-process worker lane through the SAME starter the delegate tool uses (below),
|
|
475
|
+
// adapted from its `{started:true;record}|{started:false;skipReason}` shape onto this
|
|
476
|
+
// tool's narrower `{laneId}|{skipReason}` shape.
|
|
477
|
+
startWorkerDelegation: (args) => {
|
|
478
|
+
const outcome = this.deps.startWorkerDelegation({ instructions: args.instructions });
|
|
479
|
+
return outcome.started ? { laneId: outcome.record.laneId } : { skipReason: outcome.skipReason };
|
|
480
|
+
},
|
|
481
|
+
// dispatch_worker's tool-layer side effect for `dispatchTarget:"tmux"`: core structurally
|
|
482
|
+
// invokes the SAME tmux_agent_manager fire_task call the model itself would make (no
|
|
483
|
+
// extension change, no faked launch/laneId) -- see tmux-dispatch.ts's doc comment.
|
|
484
|
+
dispatchTmuxWorker: (args) => dispatchTmuxWorker({
|
|
485
|
+
getToolDefinition: (name) => this.getToolDefinition(name),
|
|
486
|
+
createExtensionContext: () => this.deps.getExtensionRunner().createContext(),
|
|
487
|
+
resolveManagedLaneId: (id) => this.deps.resolveManagedLaneId(id),
|
|
488
|
+
getGoalId: () => this.deps.getGoalStateSnapshot()?.goalId,
|
|
489
|
+
evaluateWorkerLaneRefusal: () => this.deps.getLaneWorkerRefusal(),
|
|
490
|
+
// Lane-first dispatch, wired ONLY when worktree-sync is enabled -- absent otherwise,
|
|
491
|
+
// so a disabled/default session gets the existing byte-identical fire_task params.
|
|
492
|
+
createLaneWorktree: worktreeSyncSettings.enabled
|
|
493
|
+
? async (laneArgs) => {
|
|
494
|
+
const created = await createLane(worktreeSyncEngineDeps(), {
|
|
495
|
+
...(laneArgs.goalId !== undefined ? { goalId: laneArgs.goalId } : {}),
|
|
496
|
+
requirementId: laneArgs.requirementId,
|
|
497
|
+
});
|
|
498
|
+
// Never fake a lane: any non-"ok" engine code (max lanes, invalid key, git
|
|
499
|
+
// error, ...) is refused, mapped by the caller onto the stable
|
|
500
|
+
// "worktree_create_failed" skip reason before any fire_task call runs.
|
|
501
|
+
if (created.code !== "ok")
|
|
502
|
+
return { skipReason: created.code };
|
|
503
|
+
return { laneKey: created.lane.laneKey, worktreePath: created.lane.worktreePath };
|
|
504
|
+
}
|
|
505
|
+
: undefined,
|
|
506
|
+
}, args),
|
|
507
|
+
cwd: () => this.deps.getCwd(),
|
|
508
|
+
// Reuses the already branch-scoped getTaskStepsStateSnapshot dep -- no new
|
|
509
|
+
// SessionManager access needed for the cross-visibility nudge.
|
|
510
|
+
getOpenTaskSteps: () => deriveOpenTaskStepRefs(this.deps.getTaskStepsStateSnapshot()),
|
|
401
511
|
});
|
|
402
512
|
this._baseToolDefinitions.set(goalToolDefinition.name, goalToolDefinition);
|
|
403
513
|
const taskStepsToolDefinition = createTaskStepsToolDefinition({
|
|
@@ -414,6 +524,10 @@ export class RuntimeBuilder {
|
|
|
414
524
|
const delegateStatusToolDefinition = createDelegateStatusToolDefinition({
|
|
415
525
|
getLaneRecords: () => this.deps.getWorkerLaneRecords(),
|
|
416
526
|
getWorkerResultSnapshots: () => this.deps.getWorkerResultSnapshots(),
|
|
527
|
+
// Durable ack persists straight through the session log; routed here (rather than
|
|
528
|
+
// a new agent-session dep) because getSessionManager() is already a stable, generic
|
|
529
|
+
// passthrough dep, so no other package needs to change for this to work.
|
|
530
|
+
acknowledgeWorkerReview: (requestId) => acknowledgeWorkerResultReview(this.deps.getSessionManager(), requestId),
|
|
417
531
|
});
|
|
418
532
|
this._baseToolDefinitions.set(delegateToolDefinition.name, delegateToolDefinition);
|
|
419
533
|
this._baseToolDefinitions.set(delegateStatusToolDefinition.name, delegateStatusToolDefinition);
|
|
@@ -452,14 +566,69 @@ export class RuntimeBuilder {
|
|
|
452
566
|
thinkingLevel: "off",
|
|
453
567
|
maxTokens: 256,
|
|
454
568
|
cacheRetention: "short",
|
|
569
|
+
// Stable per-lane synthetic affinity key so repeat ambiguous-request
|
|
570
|
+
// interpretations hit the same cache-warm backend.
|
|
571
|
+
laneKind: "toolkit-brain",
|
|
455
572
|
});
|
|
456
573
|
if (completion.usage.cost.total > 0 || completion.usage.totalTokens > 0) {
|
|
457
|
-
|
|
574
|
+
// `reportId` keyed on the ambiguous request text driving THIS interpretation —
|
|
575
|
+
// stable across a retry of the same tool call, distinct across genuinely
|
|
576
|
+
// different requests.
|
|
577
|
+
const reportId = deriveSpawnedUsageReportId("toolkit-brain", this.deps.getSessionManager().getSessionId(), request);
|
|
578
|
+
this.deps.addSpawnedUsage(completion.usage, { label: "toolkit-brain", reportId });
|
|
458
579
|
}
|
|
459
580
|
return parseReflexPlan(completion.text);
|
|
460
581
|
},
|
|
461
582
|
});
|
|
462
583
|
this._baseToolDefinitions.set(runToolkitScriptToolDefinition.name, runToolkitScriptToolDefinition);
|
|
584
|
+
// Worktree-sync (opt-in): the closed-action lane workflow tool, plus -- for a session
|
|
585
|
+
// launched lane-bound (PI_WORKTREE_LANE) -- the G8/G10 lane gate wrapped UNDER the
|
|
586
|
+
// file-mutation tools (edit/write, plus cooperative bash only for interactive lanes), so a sync_required lane fails closed with the
|
|
587
|
+
// exact recovery step rather than relying on prompt compliance. `worktreeSyncSettings` /
|
|
588
|
+
// `worktreeSyncEngineDeps` are hoisted above (declared before the goal-tool registration)
|
|
589
|
+
// so the goal->tmux lane-first dispatch dep and this tool share one settings/deps source.
|
|
590
|
+
if (worktreeSyncSettings.enabled) {
|
|
591
|
+
const worktreeSyncToolDefinition = createWorktreeSyncToolDefinition({
|
|
592
|
+
engineDeps: worktreeSyncEngineDeps,
|
|
593
|
+
settings: () => this.deps.getSettingsManager().getWorktreeSyncSettings(),
|
|
594
|
+
boundLaneKey: () => getBoundWorktreeLaneKey(),
|
|
595
|
+
isWorker: () => isWorkerSession(),
|
|
596
|
+
});
|
|
597
|
+
this._baseToolDefinitions.set(worktreeSyncToolDefinition.name, worktreeSyncToolDefinition);
|
|
598
|
+
const boundLaneKey = getBoundWorktreeLaneKey();
|
|
599
|
+
if (boundLaneKey) {
|
|
600
|
+
const laneGate = new WorktreeLaneGate({
|
|
601
|
+
laneKey: boundLaneKey,
|
|
602
|
+
engineDeps: worktreeSyncEngineDeps,
|
|
603
|
+
policy: () => this.deps.getSettingsManager().getWorktreeSyncSettings().syncPolicy,
|
|
604
|
+
hardShell: isWorkerSession(),
|
|
605
|
+
trustedGateCommand: () => this.deps.getSettingsManager().getWorktreeSyncSettings().gateCommand,
|
|
606
|
+
});
|
|
607
|
+
for (const gatedToolName of ["edit", "write", "bash"]) {
|
|
608
|
+
const original = this._baseToolDefinitions.get(gatedToolName);
|
|
609
|
+
if (!original)
|
|
610
|
+
continue;
|
|
611
|
+
this._baseToolDefinitions.set(gatedToolName, {
|
|
612
|
+
...original,
|
|
613
|
+
execute: async (toolCallId, params, signal, onUpdate, ctx) => {
|
|
614
|
+
const bashCommand = gatedToolName === "bash" ? params?.command : undefined;
|
|
615
|
+
const rawPath = gatedToolName === "edit" || gatedToolName === "write"
|
|
616
|
+
? params?.path
|
|
617
|
+
: undefined;
|
|
618
|
+
const targetPath = rawPath !== undefined ? resolveToCwd(rawPath, this.deps.getCwd()) : undefined;
|
|
619
|
+
const check = await laneGate.checkMutation(gatedToolName, bashCommand, targetPath);
|
|
620
|
+
if (!check.allowed) {
|
|
621
|
+
return {
|
|
622
|
+
content: [{ type: "text", text: check.message }],
|
|
623
|
+
details: { code: check.code },
|
|
624
|
+
};
|
|
625
|
+
}
|
|
626
|
+
return original.execute(toolCallId, params, signal, onUpdate, ctx);
|
|
627
|
+
},
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
}
|
|
463
632
|
}
|
|
464
633
|
const extensionsResult = this.deps.getResourceLoader().getExtensions();
|
|
465
634
|
if (options.flagValues) {
|
|
@@ -482,10 +651,21 @@ export class RuntimeBuilder {
|
|
|
482
651
|
throw error;
|
|
483
652
|
}
|
|
484
653
|
this.deps.applyExtensionBindings(runner);
|
|
654
|
+
const boundLaneKey = getBoundWorktreeLaneKey();
|
|
655
|
+
const hardLaneWorker = boundLaneKey !== undefined && isWorkerSession();
|
|
656
|
+
const explicitlyRequestedTools = options.activeToolNames ?? (baseToolsOverride ? Object.keys(baseToolsOverride) : undefined);
|
|
657
|
+
if (hardLaneWorker && explicitlyRequestedTools?.includes("bash")) {
|
|
658
|
+
throw new Error("hard lane workers cannot request unrestricted bash; use typed worktree_sync actions");
|
|
659
|
+
}
|
|
485
660
|
const defaultActiveToolNames = mapToolNamesForPlatform(baseToolsOverride
|
|
486
661
|
? Object.keys(baseToolsOverride)
|
|
487
662
|
: [...DEFAULT_ACTIVE_TOOL_NAMES, ...(settingsManager.getScoutSettings().enabled ? ["context_scout"] : [])]);
|
|
488
|
-
const baseActiveToolNames = mapToolNamesForPlatform(options.activeToolNames ?? defaultActiveToolNames);
|
|
663
|
+
const baseActiveToolNames = mapToolNamesForPlatform(options.activeToolNames ?? defaultActiveToolNames).filter((name) => !hardLaneWorker || name !== "bash");
|
|
664
|
+
if (hardLaneWorker &&
|
|
665
|
+
settingsManager.getWorktreeSyncSettings().enabled &&
|
|
666
|
+
!baseActiveToolNames.includes("worktree_sync")) {
|
|
667
|
+
baseActiveToolNames.push("worktree_sync");
|
|
668
|
+
}
|
|
489
669
|
this.refreshToolRegistry({
|
|
490
670
|
activeToolNames: baseActiveToolNames,
|
|
491
671
|
includeAllExtensionTools: options.includeAllExtensionTools,
|
|
@@ -525,13 +705,29 @@ export class RuntimeBuilder {
|
|
|
525
705
|
this._reloadRequested = false;
|
|
526
706
|
}
|
|
527
707
|
}
|
|
528
|
-
|
|
708
|
+
/**
|
|
709
|
+
* Unified reload-gate quiescence check: refuses the caller's action (message-prefixed by
|
|
710
|
+
* `action`) while the agent is streaming, is compacting, or ANY background work unit is still
|
|
711
|
+
* registered in the in-process quiesce registry — background lanes (research/worker/
|
|
712
|
+
* model-fitness), a context-scout run, or an isolated completion (see reload-blockers.ts). Every
|
|
713
|
+
* live-op entry point below calls this so they refuse identically; this is a synchronous refusal
|
|
714
|
+
* (not a wait/poll) — callers retry via the same coalescing `reload()` already provides.
|
|
715
|
+
*/
|
|
716
|
+
_assertReloadQuiescent(action) {
|
|
529
717
|
if (this.deps.isStreaming()) {
|
|
530
|
-
throw new Error(
|
|
718
|
+
throw new Error(`Cannot ${action} while the agent is streaming or a tool call is active`);
|
|
531
719
|
}
|
|
532
720
|
if (this.deps.isCompacting()) {
|
|
533
|
-
throw new Error(
|
|
721
|
+
throw new Error(`Cannot ${action} while context compaction or branch summarization is active`);
|
|
534
722
|
}
|
|
723
|
+
const units = getInFlightWorkUnits(this.deps.getAgentDir());
|
|
724
|
+
if (units.length > 0) {
|
|
725
|
+
const summary = units.map(describeInFlightWorkUnit).join(", ");
|
|
726
|
+
throw new Error(`Cannot ${action} while background work is in flight: ${summary}`);
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
async _reloadOnce() {
|
|
730
|
+
this._assertReloadQuiescent("reload");
|
|
535
731
|
const previousRunner = this.deps.getExtensionRunner();
|
|
536
732
|
const snapshot = this._createReloadRuntimeSnapshot();
|
|
537
733
|
// Preserve the pre-filter tool REQUEST across the rebuild, not the capability/profile-filtered
|
|
@@ -600,6 +796,9 @@ export class RuntimeBuilder {
|
|
|
600
796
|
await this.deps.getResourceLoader().commitReload?.();
|
|
601
797
|
// Re-derive the memory subsystem from the reloaded settings/providers.
|
|
602
798
|
await this.deps.initializeMemory();
|
|
799
|
+
// This generation has fully committed (no rollback below this point), so any local
|
|
800
|
+
// runtime the host no longer routes to under the new configuration can be stopped now.
|
|
801
|
+
this.deps.reconcileLocalRuntimes?.();
|
|
603
802
|
}
|
|
604
803
|
catch (error) {
|
|
605
804
|
offReloadErrors?.();
|
|
@@ -618,12 +817,7 @@ export class RuntimeBuilder {
|
|
|
618
817
|
* Falls back to full reload on error.
|
|
619
818
|
*/
|
|
620
819
|
async unloadExtensionLive(extensionPath) {
|
|
621
|
-
|
|
622
|
-
throw new Error("Cannot unload extension while the agent is streaming or a tool call is active");
|
|
623
|
-
}
|
|
624
|
-
if (this.deps.isCompacting()) {
|
|
625
|
-
throw new Error("Cannot unload extension while context compaction or branch summarization is active");
|
|
626
|
-
}
|
|
820
|
+
this._assertReloadQuiescent("unload extension");
|
|
627
821
|
const ext = this.deps.getResourceLoader().getLoadedExtension(extensionPath);
|
|
628
822
|
if (!ext) {
|
|
629
823
|
return; // Nothing to unload
|
|
@@ -682,12 +876,7 @@ export class RuntimeBuilder {
|
|
|
682
876
|
* Falls back to full reload on error.
|
|
683
877
|
*/
|
|
684
878
|
async loadExtensionLive(extensionPath) {
|
|
685
|
-
|
|
686
|
-
throw new Error("Cannot load extension while the agent is streaming or a tool call is active");
|
|
687
|
-
}
|
|
688
|
-
if (this.deps.isCompacting()) {
|
|
689
|
-
throw new Error("Cannot load extension while context compaction or branch summarization is active");
|
|
690
|
-
}
|
|
879
|
+
this._assertReloadQuiescent("load extension");
|
|
691
880
|
const previousRunner = this.deps.getExtensionRunner();
|
|
692
881
|
try {
|
|
693
882
|
// Load the extension with fresh import
|
|
@@ -728,12 +917,7 @@ export class RuntimeBuilder {
|
|
|
728
917
|
* Falls back to full reload if any individual load/unload fails.
|
|
729
918
|
*/
|
|
730
919
|
async reconcileLoadedExtensions() {
|
|
731
|
-
|
|
732
|
-
throw new Error("Cannot reconcile extensions while the agent is streaming or a tool call is active");
|
|
733
|
-
}
|
|
734
|
-
if (this.deps.isCompacting()) {
|
|
735
|
-
throw new Error("Cannot reconcile extensions while context compaction or branch summarization is active");
|
|
736
|
-
}
|
|
920
|
+
this._assertReloadQuiescent("reconcile extensions");
|
|
737
921
|
try {
|
|
738
922
|
// Get all discoverable extension paths
|
|
739
923
|
const allDiscoverablePaths = await this.deps.getResourceLoader().getDiscoverableExtensionPaths();
|