@caupulican/pi-adaptative 0.94.0 → 0.95.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +55 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/README.md +32 -13
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts +7 -4
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +173 -293
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +247 -392
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.d.ts +52 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.d.ts.map +1 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.js +118 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.js.map +1 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.ts +169 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/templates/builder-validator.json +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/templates/provider-prompt-smoke.json +1 -1
- package/dist/bundled-resources/skills/pi-harness-learning/SKILL.md +13 -7
- package/dist/bundled-resources/skills/worker-profile-writer/SKILL.md +11 -11
- package/dist/core/agent-paths.d.ts +2 -0
- package/dist/core/agent-paths.d.ts.map +1 -1
- package/dist/core/agent-paths.js +7 -0
- package/dist/core/agent-paths.js.map +1 -1
- package/dist/core/agent-session.d.ts +11 -41
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +98 -161
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/autonomy/envelope-enforcement.d.ts +6 -1
- package/dist/core/autonomy/envelope-enforcement.d.ts.map +1 -1
- package/dist/core/autonomy/envelope-enforcement.js +26 -25
- package/dist/core/autonomy/envelope-enforcement.js.map +1 -1
- package/dist/core/autonomy/lane-private-paths.d.ts.map +1 -1
- package/dist/core/autonomy/lane-private-paths.js +2 -1
- package/dist/core/autonomy/lane-private-paths.js.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.d.ts +8 -8
- package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.js +45 -30
- package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
- package/dist/core/autonomy/worker-session-private-scope.d.ts +12 -0
- package/dist/core/autonomy/worker-session-private-scope.d.ts.map +1 -0
- package/dist/core/autonomy/worker-session-private-scope.js +42 -0
- package/dist/core/autonomy/worker-session-private-scope.js.map +1 -0
- package/dist/core/autonomy/worker-tool-adapter-registry.d.ts +65 -0
- package/dist/core/autonomy/worker-tool-adapter-registry.d.ts.map +1 -0
- package/dist/core/autonomy/worker-tool-adapter-registry.js +145 -0
- package/dist/core/autonomy/worker-tool-adapter-registry.js.map +1 -0
- package/dist/core/background-lane-controller.d.ts +9 -1
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +76 -6
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/background-tool-task-controller.d.ts +23 -2
- package/dist/core/background-tool-task-controller.d.ts.map +1 -1
- package/dist/core/background-tool-task-controller.js +132 -17
- package/dist/core/background-tool-task-controller.js.map +1 -1
- package/dist/core/context/long-term-memory-trigger.d.ts +3 -1
- package/dist/core/context/long-term-memory-trigger.d.ts.map +1 -1
- package/dist/core/context/long-term-memory-trigger.js +1 -1
- package/dist/core/context/long-term-memory-trigger.js.map +1 -1
- package/dist/core/context/okf-memory-provider.d.ts +3 -0
- package/dist/core/context/okf-memory-provider.d.ts.map +1 -1
- package/dist/core/context/okf-memory-provider.js +66 -31
- package/dist/core/context/okf-memory-provider.js.map +1 -1
- package/dist/core/context/okf-memory.d.ts +18 -1
- package/dist/core/context/okf-memory.d.ts.map +1 -1
- package/dist/core/context/okf-memory.js +48 -0
- package/dist/core/context/okf-memory.js.map +1 -1
- package/dist/core/cost-guard-controller.d.ts +37 -0
- package/dist/core/cost-guard-controller.d.ts.map +1 -0
- package/dist/core/cost-guard-controller.js +71 -0
- package/dist/core/cost-guard-controller.js.map +1 -0
- package/dist/core/cost-guard.d.ts +9 -4
- package/dist/core/cost-guard.d.ts.map +1 -1
- package/dist/core/cost-guard.js +7 -3
- package/dist/core/cost-guard.js.map +1 -1
- package/dist/core/delegation/worker-agent-control.d.ts +4 -0
- package/dist/core/delegation/worker-agent-control.d.ts.map +1 -1
- package/dist/core/delegation/worker-agent-control.js.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.js +0 -1
- package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
- package/dist/core/delegation/worker-authority-resolver.d.ts +16 -3
- package/dist/core/delegation/worker-authority-resolver.d.ts.map +1 -1
- package/dist/core/delegation/worker-authority-resolver.js +114 -55
- package/dist/core/delegation/worker-authority-resolver.js.map +1 -1
- package/dist/core/delegation/worker-claim.d.ts +1 -2
- package/dist/core/delegation/worker-claim.d.ts.map +1 -1
- package/dist/core/delegation/worker-claim.js.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.d.ts +19 -6
- package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.js +125 -40
- package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
- package/dist/core/delegation/worker-delegation-request.d.ts +3 -3
- package/dist/core/delegation/worker-delegation-request.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-request.js +13 -19
- package/dist/core/delegation/worker-delegation-request.js.map +1 -1
- package/dist/core/delegation/worker-execution-policy.d.ts +3 -2
- package/dist/core/delegation/worker-execution-policy.d.ts.map +1 -1
- package/dist/core/delegation/worker-execution-policy.js +54 -39
- package/dist/core/delegation/worker-execution-policy.js.map +1 -1
- package/dist/core/delegation/worker-fleet-limits.d.ts +3 -3
- package/dist/core/delegation/worker-fleet-limits.d.ts.map +1 -1
- package/dist/core/delegation/worker-fleet-limits.js +7 -7
- package/dist/core/delegation/worker-fleet-limits.js.map +1 -1
- package/dist/core/delegation/worker-machine-scope.d.ts +12 -0
- package/dist/core/delegation/worker-machine-scope.d.ts.map +1 -0
- package/dist/core/delegation/worker-machine-scope.js +38 -0
- package/dist/core/delegation/worker-machine-scope.js.map +1 -0
- package/dist/core/delegation/worker-notification-coordinator.d.ts +10 -0
- package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-notification-coordinator.js +69 -3
- package/dist/core/delegation/worker-notification-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-recovery-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-recovery-coordinator.js +6 -1
- package/dist/core/delegation/worker-recovery-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-runner.d.ts +5 -7
- package/dist/core/delegation/worker-runner.d.ts.map +1 -1
- package/dist/core/delegation/worker-runner.js +1 -4
- package/dist/core/delegation/worker-runner.js.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts +3 -2
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.js +50 -25
- package/dist/core/delegation/worker-write-reservation-coordinator.js.map +1 -1
- package/dist/core/durable-custom-message-turn-controller.d.ts +6 -0
- package/dist/core/durable-custom-message-turn-controller.d.ts.map +1 -1
- package/dist/core/durable-custom-message-turn-controller.js +38 -15
- package/dist/core/durable-custom-message-turn-controller.js.map +1 -1
- package/dist/core/extension-binding-controller.d.ts +5 -1
- package/dist/core/extension-binding-controller.d.ts.map +1 -1
- package/dist/core/extension-binding-controller.js +15 -0
- package/dist/core/extension-binding-controller.js.map +1 -1
- package/dist/core/extensions/factory-runtime.d.ts.map +1 -1
- package/dist/core/extensions/factory-runtime.js +5 -0
- package/dist/core/extensions/factory-runtime.js.map +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +1 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +8 -4
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.d.ts +31 -0
- package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.js +239 -55
- package/dist/core/foreground-terminal-handoff-controller.js.map +1 -1
- package/dist/core/goals/goal-session-controller.d.ts +2 -0
- package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-session-controller.js +8 -0
- package/dist/core/goals/goal-session-controller.js.map +1 -1
- package/dist/core/goals/goal-tool-core.d.ts +5 -4
- package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
- package/dist/core/goals/goal-tool-core.js +23 -19
- package/dist/core/goals/goal-tool-core.js.map +1 -1
- package/dist/core/learning/auto-learn-settings.d.ts +84 -0
- package/dist/core/learning/auto-learn-settings.d.ts.map +1 -0
- package/dist/core/learning/auto-learn-settings.js +66 -0
- package/dist/core/learning/auto-learn-settings.js.map +1 -0
- package/dist/core/learning/learning-audit.d.ts +5 -1
- package/dist/core/learning/learning-audit.d.ts.map +1 -1
- package/dist/core/learning/learning-audit.js +32 -1
- package/dist/core/learning/learning-audit.js.map +1 -1
- package/dist/core/learning/reflection-engine.d.ts +24 -0
- package/dist/core/learning/reflection-engine.d.ts.map +1 -1
- package/dist/core/learning/reflection-engine.js +104 -8
- package/dist/core/learning/reflection-engine.js.map +1 -1
- package/dist/core/local-prefix-warm-controller.d.ts +24 -0
- package/dist/core/local-prefix-warm-controller.d.ts.map +1 -0
- package/dist/core/local-prefix-warm-controller.js +79 -0
- package/dist/core/local-prefix-warm-controller.js.map +1 -0
- package/dist/core/memory/okf-project-memory-store.d.ts +28 -0
- package/dist/core/memory/okf-project-memory-store.d.ts.map +1 -0
- package/dist/core/memory/okf-project-memory-store.js +111 -0
- package/dist/core/memory/okf-project-memory-store.js.map +1 -0
- package/dist/core/memory/providers/file-store.d.ts +44 -1
- package/dist/core/memory/providers/file-store.d.ts.map +1 -1
- package/dist/core/memory/providers/file-store.js +341 -24
- package/dist/core/memory/providers/file-store.js.map +1 -1
- package/dist/core/memory/worker-memory-tools.d.ts +5 -0
- package/dist/core/memory/worker-memory-tools.d.ts.map +1 -0
- package/dist/core/memory/worker-memory-tools.js +5 -0
- package/dist/core/memory/worker-memory-tools.js.map +1 -0
- package/dist/core/memory-controller.d.ts +10 -1
- package/dist/core/memory-controller.d.ts.map +1 -1
- package/dist/core/memory-controller.js +72 -8
- package/dist/core/memory-controller.js.map +1 -1
- package/dist/core/model-capability.d.ts +7 -0
- package/dist/core/model-capability.d.ts.map +1 -1
- package/dist/core/model-capability.js +12 -0
- package/dist/core/model-capability.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +2 -10
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-router-controller.d.ts +3 -2
- package/dist/core/model-router-controller.d.ts.map +1 -1
- package/dist/core/model-router-controller.js +3 -2
- package/dist/core/model-router-controller.js.map +1 -1
- package/dist/core/orchestration/contracts.d.ts +16 -12
- package/dist/core/orchestration/contracts.d.ts.map +1 -1
- package/dist/core/orchestration/contracts.js +2 -2
- package/dist/core/orchestration/contracts.js.map +1 -1
- package/dist/core/orchestration/lane-tool-manifests.d.ts +2 -2
- package/dist/core/orchestration/lane-tool-manifests.d.ts.map +1 -1
- package/dist/core/orchestration/lane-tool-manifests.js +6 -1
- package/dist/core/orchestration/lane-tool-manifests.js.map +1 -1
- package/dist/core/orchestration/profile-registry.d.ts.map +1 -1
- package/dist/core/orchestration/profile-registry.js +14 -0
- package/dist/core/orchestration/profile-registry.js.map +1 -1
- package/dist/core/orchestration/task-profile-writer.d.ts +7 -4
- package/dist/core/orchestration/task-profile-writer.d.ts.map +1 -1
- package/dist/core/orchestration/task-profile-writer.js +71 -59
- package/dist/core/orchestration/task-profile-writer.js.map +1 -1
- package/dist/core/orchestration/thinking-level-schema.d.ts +7 -0
- package/dist/core/orchestration/thinking-level-schema.d.ts.map +1 -0
- package/dist/core/orchestration/thinking-level-schema.js +19 -0
- package/dist/core/orchestration/thinking-level-schema.js.map +1 -0
- package/dist/core/orchestration/worker-execution-contract.d.ts.map +1 -1
- package/dist/core/orchestration/worker-execution-contract.js +12 -5
- package/dist/core/orchestration/worker-execution-contract.js.map +1 -1
- package/dist/core/provider-prompt-contracts.d.ts +1 -4
- package/dist/core/provider-prompt-contracts.d.ts.map +1 -1
- package/dist/core/provider-prompt-contracts.js +13 -29
- package/dist/core/provider-prompt-contracts.js.map +1 -1
- package/dist/core/provider-request-context-controller.d.ts +2 -0
- package/dist/core/provider-request-context-controller.d.ts.map +1 -1
- package/dist/core/provider-request-context-controller.js +10 -3
- package/dist/core/provider-request-context-controller.js.map +1 -1
- package/dist/core/reflection-controller.d.ts +63 -27
- package/dist/core/reflection-controller.d.ts.map +1 -1
- package/dist/core/reflection-controller.js +300 -132
- package/dist/core/reflection-controller.js.map +1 -1
- package/dist/core/runtime-builder.d.ts +1 -0
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +25 -14
- package/dist/core/runtime-builder.js.map +1 -1
- package/dist/core/secrets/credential-exposure-guard.d.ts.map +1 -1
- package/dist/core/secrets/credential-exposure-guard.js +55 -10
- package/dist/core/secrets/credential-exposure-guard.js.map +1 -1
- package/dist/core/session-role.d.ts +6 -8
- package/dist/core/session-role.d.ts.map +1 -1
- package/dist/core/session-role.js +8 -18
- package/dist/core/session-role.js.map +1 -1
- package/dist/core/settings-manager.d.ts +13 -16
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +53 -50
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skill-vault.d.ts +15 -0
- package/dist/core/skill-vault.d.ts.map +1 -1
- package/dist/core/skill-vault.js +79 -45
- package/dist/core/skill-vault.js.map +1 -1
- package/dist/core/skills.d.ts +3 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +6 -6
- package/dist/core/skills.js.map +1 -1
- package/dist/core/system-prompt-builder.d.ts +2 -0
- package/dist/core/system-prompt-builder.d.ts.map +1 -1
- package/dist/core/system-prompt-builder.js +52 -12
- package/dist/core/system-prompt-builder.js.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tool-capability-policy.d.ts +3 -0
- package/dist/core/tool-capability-policy.d.ts.map +1 -1
- package/dist/core/tool-capability-policy.js +13 -2
- package/dist/core/tool-capability-policy.js.map +1 -1
- package/dist/core/toolkit/script-runner.d.ts +2 -1
- package/dist/core/toolkit/script-runner.d.ts.map +1 -1
- package/dist/core/toolkit/script-runner.js +10 -2
- package/dist/core/toolkit/script-runner.js.map +1 -1
- package/dist/core/tools/delegate-status.d.ts +3 -1
- package/dist/core/tools/delegate-status.d.ts.map +1 -1
- package/dist/core/tools/delegate-status.js +5 -1
- package/dist/core/tools/delegate-status.js.map +1 -1
- package/dist/core/tools/delegate.d.ts +4 -13
- package/dist/core/tools/delegate.d.ts.map +1 -1
- package/dist/core/tools/delegate.js +173 -73
- package/dist/core/tools/delegate.js.map +1 -1
- package/dist/core/tools/goal.d.ts +3 -4
- package/dist/core/tools/goal.d.ts.map +1 -1
- package/dist/core/tools/goal.js +24 -7
- package/dist/core/tools/goal.js.map +1 -1
- package/dist/core/tools/profile-writer.d.ts +2 -8
- package/dist/core/tools/profile-writer.d.ts.map +1 -1
- package/dist/core/tools/profile-writer.js +6 -18
- package/dist/core/tools/profile-writer.js.map +1 -1
- package/dist/core/tools/run-toolkit-script.d.ts +1 -1
- package/dist/core/tools/run-toolkit-script.d.ts.map +1 -1
- package/dist/core/tools/run-toolkit-script.js +2 -2
- package/dist/core/tools/run-toolkit-script.js.map +1 -1
- package/dist/core/tools/skill-audit.d.ts +28 -1
- package/dist/core/tools/skill-audit.d.ts.map +1 -1
- package/dist/core/tools/skill-audit.js +56 -12
- package/dist/core/tools/skill-audit.js.map +1 -1
- package/dist/core/tools/skill.d.ts +12 -1
- package/dist/core/tools/skill.d.ts.map +1 -1
- package/dist/core/tools/skill.js +52 -0
- package/dist/core/tools/skill.js.map +1 -1
- package/dist/core/tools/skillify.d.ts.map +1 -1
- package/dist/core/tools/skillify.js +16 -7
- package/dist/core/tools/skillify.js.map +1 -1
- package/dist/core/tools/task-steps.js +1 -1
- package/dist/core/tools/task-steps.js.map +1 -1
- package/dist/core/tools/tmux-dispatch.d.ts +4 -16
- package/dist/core/tools/tmux-dispatch.d.ts.map +1 -1
- package/dist/core/tools/tmux-dispatch.js +5 -20
- package/dist/core/tools/tmux-dispatch.js.map +1 -1
- package/dist/core/tools/tool-task.d.ts +1 -0
- package/dist/core/tools/tool-task.d.ts.map +1 -1
- package/dist/core/tools/tool-task.js +13 -8
- package/dist/core/tools/tool-task.js.map +1 -1
- package/dist/core/util/atomic-file.d.ts +2 -0
- package/dist/core/util/atomic-file.d.ts.map +1 -1
- package/dist/core/util/atomic-file.js +4 -0
- package/dist/core/util/atomic-file.js.map +1 -1
- package/dist/core/worktree-sync/codes.d.ts +1 -2
- package/dist/core/worktree-sync/codes.d.ts.map +1 -1
- package/dist/core/worktree-sync/codes.js +1 -2
- package/dist/core/worktree-sync/codes.js.map +1 -1
- package/dist/core/worktree-sync/lane-gate.d.ts +4 -8
- package/dist/core/worktree-sync/lane-gate.d.ts.map +1 -1
- package/dist/core/worktree-sync/lane-gate.js +5 -51
- package/dist/core/worktree-sync/lane-gate.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.d.ts +6 -7
- package/dist/modes/interactive/auto-learn-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.js +32 -207
- package/dist/modes/interactive/auto-learn-controller.js.map +1 -1
- package/dist/modes/interactive/autonomy-commands.js +2 -2
- package/dist/modes/interactive/autonomy-commands.js.map +1 -1
- package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -1
- package/dist/modes/interactive/components/activity-lane.js +12 -23
- package/dist/modes/interactive/components/activity-lane.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +142 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/fitness-role-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/fitness-role-selector.js +2 -2
- package/dist/modes/interactive/components/fitness-role-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +150 -73
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/report-commands.d.ts.map +1 -1
- package/dist/modes/interactive/report-commands.js +8 -4
- package/dist/modes/interactive/report-commands.js.map +1 -1
- package/dist/modes/interactive/settings-selector-flow.d.ts.map +1 -1
- package/dist/modes/interactive/settings-selector-flow.js +10 -0
- package/dist/modes/interactive/settings-selector-flow.js.map +1 -1
- package/docs/extensions.md +8 -0
- package/docs/harness-architecture.md +28 -32
- package/docs/index.md +1 -1
- package/docs/process-matrix.md +8 -6
- package/docs/resources.md +1 -1
- package/docs/settings.md +61 -51
- package/docs/tmux-agent-manager.md +47 -40
- package/docs/usage.md +1 -1
- package/docs/worker-profiles.md +8 -6
- package/docs/worktree-sync.md +26 -20
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +12 -12
- package/package.json +4 -4
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts +0 -133
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts.map +0 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js +0 -199
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js.map +0 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.ts +0 -312
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { AgentTool } from "@caupulican/pi-agent-core";
|
|
2
|
+
import type { TSchema } from "typebox";
|
|
3
|
+
import type { ArtifactStore } from "../context/context-artifacts.ts";
|
|
4
|
+
import { type CredentialExposureBoundary } from "../secrets/credential-exposure-guard.ts";
|
|
5
|
+
import { type RunToolkitScriptDependencies } from "../tools/run-toolkit-script.ts";
|
|
6
|
+
import { type ReadOnlySkillBroker } from "../tools/skill.ts";
|
|
7
|
+
import { type SkillAuditToolOptions } from "../tools/skill-audit.ts";
|
|
8
|
+
/**
|
|
9
|
+
* Host-owned inputs available while constructing one fresh worker tool.
|
|
10
|
+
*
|
|
11
|
+
* An adapter is deliberately a factory, not a live AgentTool. This keeps worker retries and
|
|
12
|
+
* concurrent lanes from sharing mutable foreground/session state. The host owns the broker
|
|
13
|
+
* callbacks and is responsible for preserving its cancellation and credential boundaries.
|
|
14
|
+
*/
|
|
15
|
+
export interface WorkerToolAdapterContext {
|
|
16
|
+
cwd: string;
|
|
17
|
+
signal?: AbortSignal;
|
|
18
|
+
credentialBoundary?: CredentialExposureBoundary;
|
|
19
|
+
}
|
|
20
|
+
export type WorkerToolAdapterFactory = (context: WorkerToolAdapterContext) => AgentTool<TSchema, unknown>;
|
|
21
|
+
export interface WorkerToolAdapter {
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly description: string;
|
|
24
|
+
readonly create: WorkerToolAdapterFactory;
|
|
25
|
+
}
|
|
26
|
+
/** Root/session controls are never brokered into a leaf, even when a host registers factories. */
|
|
27
|
+
export declare const WORKER_TOOL_ADAPTER_FORBIDDEN_NAMES: ReadonlySet<string>;
|
|
28
|
+
/** Adapter names with host-owned factories; explicit profiles must have these active in foreground. */
|
|
29
|
+
export declare const WORKER_TOOL_ADAPTER_NAMES: ReadonlySet<string>;
|
|
30
|
+
export type WorkerToolAdapterMaterialization = {
|
|
31
|
+
ok: true;
|
|
32
|
+
tool: AgentTool<TSchema, unknown>;
|
|
33
|
+
} | {
|
|
34
|
+
ok: false;
|
|
35
|
+
reason: string;
|
|
36
|
+
};
|
|
37
|
+
export interface WorkerToolAdapterSources {
|
|
38
|
+
/** Session-owned packed output store; retrieval is bounded and identifier-only. */
|
|
39
|
+
artifactStore?: ArtifactStore;
|
|
40
|
+
/** Host-owned script registry and bounded executor. */
|
|
41
|
+
runToolkitScript?: RunToolkitScriptDependencies;
|
|
42
|
+
/** Optional brokered read-only skill surface. */
|
|
43
|
+
skill?: ReadOnlySkillBroker;
|
|
44
|
+
/** Optional read-only skill audit broker with host-path redaction. */
|
|
45
|
+
skillAudit?: Pick<SkillAuditToolOptions, "getSkills" | "maxSkills" | "maxComparisonPairs" | "maxDraftFieldChars"> & Required<Pick<SkillAuditToolOptions, "redactPath">>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Registry for the small set of foreground capabilities that can be brokered safely to a leaf
|
|
49
|
+
* worker. It owns no session state and never clones or returns the foreground tool instance.
|
|
50
|
+
*
|
|
51
|
+
* Extension/MCP tools must be registered explicitly by a host broker. A missing registration is
|
|
52
|
+
* a deterministic unsupported result so an omitted inherited tool cannot silently disappear.
|
|
53
|
+
*/
|
|
54
|
+
export declare class WorkerToolAdapterRegistry {
|
|
55
|
+
private readonly adapters;
|
|
56
|
+
register(adapter: WorkerToolAdapter): this;
|
|
57
|
+
has(name: string): boolean;
|
|
58
|
+
names(): readonly string[];
|
|
59
|
+
description(name: string): string | undefined;
|
|
60
|
+
materialize(name: string, context: WorkerToolAdapterContext): WorkerToolAdapterMaterialization;
|
|
61
|
+
}
|
|
62
|
+
/** Build the default safe adapters from host-owned brokers. Omitted sources stay unsupported. */
|
|
63
|
+
export declare function createWorkerToolAdapterRegistry(sources?: WorkerToolAdapterSources): WorkerToolAdapterRegistry;
|
|
64
|
+
export declare function unsupportedWorkerToolReason(name: string): string;
|
|
65
|
+
//# sourceMappingURL=worker-tool-adapter-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-tool-adapter-registry.d.ts","sourceRoot":"","sources":["../../../src/core/autonomy/worker-tool-adapter-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,EAAE,KAAK,0BAA0B,EAA6B,MAAM,yCAAyC,CAAC;AAErH,OAAO,EAEN,KAAK,4BAA4B,EACjC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAqC,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAKN,KAAK,qBAAqB,EAC1B,MAAM,yBAAyB,CAAC;AAGjC;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,kBAAkB,CAAC,EAAE,0BAA0B,CAAC;CAChD;AAED,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,wBAAwB,KAAK,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAE1G,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;CAC1C;AAED,kGAAkG;AAClG,eAAO,MAAM,mCAAmC,EAAE,WAAW,CAAC,MAAM,CAuBlE,CAAC;AAEH,uGAAuG;AACvG,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,MAAM,CAKxD,CAAC;AAEH,MAAM,MAAM,gCAAgC,GACzC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;CAAE,GAC/C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,MAAM,WAAW,wBAAwB;IACxC,mFAAmF;IACnF,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,4BAA4B,CAAC;IAChD,iDAAiD;IACjD,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,sEAAsE;IACtE,UAAU,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,WAAW,GAAG,WAAW,GAAG,oBAAoB,GAAG,oBAAoB,CAAC,GAChH,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC,CAAC;CACrD;AAED;;;;;;GAMG;AACH,qBAAa,yBAAyB;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IAEjE,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CASzC;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzB;IAED,KAAK,IAAI,SAAS,MAAM,EAAE,CAEzB;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5C;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,GAAG,gCAAgC,CAkB7F;CACD;AAED,iGAAiG;AACjG,wBAAgB,+BAA+B,CAAC,OAAO,GAAE,wBAA6B,GAAG,yBAAyB,CAgEjH;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhE"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { ROOT_MEMORY_TOOL_NAME, WORKER_MEMORY_READ_TOOL_NAME } from "../memory/worker-memory-tools.js";
|
|
2
|
+
import { isProtectedCredentialPath } from "../secrets/credential-exposure-guard.js";
|
|
3
|
+
import { createArtifactRetrieveTool } from "../tools/artifact-retrieve.js";
|
|
4
|
+
import { createRunToolkitScriptToolDefinition, } from "../tools/run-toolkit-script.js";
|
|
5
|
+
import { createReadOnlySkillToolDefinition } from "../tools/skill.js";
|
|
6
|
+
import { createSkillAuditToolDefinition, DEFAULT_WORKER_SKILL_AUDIT_MAX_COMPARISON_PAIRS, DEFAULT_WORKER_SKILL_AUDIT_MAX_DRAFT_FIELD_CHARS, DEFAULT_WORKER_SKILL_AUDIT_MAX_SKILLS, } from "../tools/skill-audit.js";
|
|
7
|
+
import { wrapToolDefinition } from "../tools/tool-definition-wrapper.js";
|
|
8
|
+
/** Root/session controls are never brokered into a leaf, even when a host registers factories. */
|
|
9
|
+
export const WORKER_TOOL_ADAPTER_FORBIDDEN_NAMES = new Set([
|
|
10
|
+
"delegate",
|
|
11
|
+
"tmux_dispatch",
|
|
12
|
+
"tmux_agent_manager",
|
|
13
|
+
"context_scout",
|
|
14
|
+
ROOT_MEMORY_TOOL_NAME,
|
|
15
|
+
WORKER_MEMORY_READ_TOOL_NAME,
|
|
16
|
+
"goal",
|
|
17
|
+
"get_goal",
|
|
18
|
+
"update_goal",
|
|
19
|
+
"task_steps",
|
|
20
|
+
"pipeline",
|
|
21
|
+
"tool_task",
|
|
22
|
+
"ask_question",
|
|
23
|
+
"secret_store",
|
|
24
|
+
"settings",
|
|
25
|
+
"session",
|
|
26
|
+
"credential",
|
|
27
|
+
"model_fitness",
|
|
28
|
+
"improvement_loop",
|
|
29
|
+
"skillify",
|
|
30
|
+
"extensionify",
|
|
31
|
+
"worktree_sync",
|
|
32
|
+
]);
|
|
33
|
+
/** Adapter names with host-owned factories; explicit profiles must have these active in foreground. */
|
|
34
|
+
export const WORKER_TOOL_ADAPTER_NAMES = new Set([
|
|
35
|
+
"artifact_retrieve",
|
|
36
|
+
"run_toolkit_script",
|
|
37
|
+
"skill",
|
|
38
|
+
"skill_audit",
|
|
39
|
+
]);
|
|
40
|
+
/**
|
|
41
|
+
* Registry for the small set of foreground capabilities that can be brokered safely to a leaf
|
|
42
|
+
* worker. It owns no session state and never clones or returns the foreground tool instance.
|
|
43
|
+
*
|
|
44
|
+
* Extension/MCP tools must be registered explicitly by a host broker. A missing registration is
|
|
45
|
+
* a deterministic unsupported result so an omitted inherited tool cannot silently disappear.
|
|
46
|
+
*/
|
|
47
|
+
export class WorkerToolAdapterRegistry {
|
|
48
|
+
constructor() {
|
|
49
|
+
this.adapters = new Map();
|
|
50
|
+
}
|
|
51
|
+
register(adapter) {
|
|
52
|
+
const name = adapter.name.trim();
|
|
53
|
+
if (!name)
|
|
54
|
+
throw new TypeError("Worker tool adapter name must not be empty.");
|
|
55
|
+
if (WORKER_TOOL_ADAPTER_FORBIDDEN_NAMES.has(name.toLowerCase())) {
|
|
56
|
+
throw new Error(`worker_tool_adapter_forbidden:${name}`);
|
|
57
|
+
}
|
|
58
|
+
if (this.adapters.has(name))
|
|
59
|
+
throw new Error(`Duplicate worker tool adapter: ${name}`);
|
|
60
|
+
this.adapters.set(name, Object.freeze({ ...adapter, name }));
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
has(name) {
|
|
64
|
+
return this.adapters.has(name);
|
|
65
|
+
}
|
|
66
|
+
names() {
|
|
67
|
+
return [...this.adapters.keys()];
|
|
68
|
+
}
|
|
69
|
+
description(name) {
|
|
70
|
+
return this.adapters.get(name)?.description;
|
|
71
|
+
}
|
|
72
|
+
materialize(name, context) {
|
|
73
|
+
const adapter = this.adapters.get(name);
|
|
74
|
+
if (!adapter)
|
|
75
|
+
return { ok: false, reason: unsupportedWorkerToolReason(name) };
|
|
76
|
+
try {
|
|
77
|
+
const tool = adapter.create({ ...context });
|
|
78
|
+
if (tool.name !== name) {
|
|
79
|
+
return {
|
|
80
|
+
ok: false,
|
|
81
|
+
reason: `worker_tool_adapter_contract_violation:${name}:created=${tool.name}`,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return { ok: true, tool };
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
return {
|
|
88
|
+
ok: false,
|
|
89
|
+
reason: `worker_tool_adapter_failed:${name}:${error instanceof Error ? error.message : String(error)}`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/** Build the default safe adapters from host-owned brokers. Omitted sources stay unsupported. */
|
|
95
|
+
export function createWorkerToolAdapterRegistry(sources = {}) {
|
|
96
|
+
const registry = new WorkerToolAdapterRegistry();
|
|
97
|
+
if (sources.artifactStore) {
|
|
98
|
+
registry.register({
|
|
99
|
+
name: "artifact_retrieve",
|
|
100
|
+
description: "Retrieve a bounded slice from a host-owned packed tool-output artifact.",
|
|
101
|
+
create: (context) => createArtifactRetrieveTool(context.cwd, { artifactStore: sources.artifactStore }),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
if (sources.runToolkitScript) {
|
|
105
|
+
registry.register({
|
|
106
|
+
name: "run_toolkit_script",
|
|
107
|
+
description: "Run a registered toolkit script through the host-owned bounded executor.",
|
|
108
|
+
create: (context) => {
|
|
109
|
+
const dependencies = sources.runToolkitScript;
|
|
110
|
+
return wrapToolDefinition(createRunToolkitScriptToolDefinition({
|
|
111
|
+
...dependencies,
|
|
112
|
+
getScripts: () => dependencies
|
|
113
|
+
.getScripts()
|
|
114
|
+
.filter((script) => !context.credentialBoundary ||
|
|
115
|
+
!isProtectedCredentialPath(script.path, context.cwd, context.credentialBoundary)),
|
|
116
|
+
}));
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
if (sources.skill) {
|
|
121
|
+
registry.register({
|
|
122
|
+
name: "skill",
|
|
123
|
+
description: "Use the host-owned read-only skill broker.",
|
|
124
|
+
create: () => wrapToolDefinition(createReadOnlySkillToolDefinition(sources.skill)),
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
if (sources.skillAudit) {
|
|
128
|
+
const skillAudit = sources.skillAudit;
|
|
129
|
+
registry.register({
|
|
130
|
+
name: "skill_audit",
|
|
131
|
+
description: "Audit skills through the host-owned read-only broker.",
|
|
132
|
+
create: (context) => wrapToolDefinition(createSkillAuditToolDefinition(context.cwd, {
|
|
133
|
+
...skillAudit,
|
|
134
|
+
maxSkills: Math.min(skillAudit.maxSkills ?? DEFAULT_WORKER_SKILL_AUDIT_MAX_SKILLS, DEFAULT_WORKER_SKILL_AUDIT_MAX_SKILLS),
|
|
135
|
+
maxComparisonPairs: Math.min(skillAudit.maxComparisonPairs ?? DEFAULT_WORKER_SKILL_AUDIT_MAX_COMPARISON_PAIRS, DEFAULT_WORKER_SKILL_AUDIT_MAX_COMPARISON_PAIRS),
|
|
136
|
+
maxDraftFieldChars: Math.min(skillAudit.maxDraftFieldChars ?? DEFAULT_WORKER_SKILL_AUDIT_MAX_DRAFT_FIELD_CHARS, DEFAULT_WORKER_SKILL_AUDIT_MAX_DRAFT_FIELD_CHARS),
|
|
137
|
+
})),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return registry;
|
|
141
|
+
}
|
|
142
|
+
export function unsupportedWorkerToolReason(name) {
|
|
143
|
+
return `worker_tool_adapter_unavailable:${name}`;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=worker-tool-adapter-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-tool-adapter-registry.js","sourceRoot":"","sources":["../../../src/core/autonomy/worker-tool-adapter-registry.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@caupulican/pi-agent-core\";\nimport type { TSchema } from \"typebox\";\nimport type { ArtifactStore } from \"../context/context-artifacts.ts\";\nimport { ROOT_MEMORY_TOOL_NAME, WORKER_MEMORY_READ_TOOL_NAME } from \"../memory/worker-memory-tools.ts\";\nimport { type CredentialExposureBoundary, isProtectedCredentialPath } from \"../secrets/credential-exposure-guard.ts\";\nimport { createArtifactRetrieveTool } from \"../tools/artifact-retrieve.ts\";\nimport {\n\tcreateRunToolkitScriptToolDefinition,\n\ttype RunToolkitScriptDependencies,\n} from \"../tools/run-toolkit-script.ts\";\nimport { createReadOnlySkillToolDefinition, type ReadOnlySkillBroker } from \"../tools/skill.ts\";\nimport {\n\tcreateSkillAuditToolDefinition,\n\tDEFAULT_WORKER_SKILL_AUDIT_MAX_COMPARISON_PAIRS,\n\tDEFAULT_WORKER_SKILL_AUDIT_MAX_DRAFT_FIELD_CHARS,\n\tDEFAULT_WORKER_SKILL_AUDIT_MAX_SKILLS,\n\ttype SkillAuditToolOptions,\n} from \"../tools/skill-audit.ts\";\nimport { wrapToolDefinition } from \"../tools/tool-definition-wrapper.ts\";\n\n/**\n * Host-owned inputs available while constructing one fresh worker tool.\n *\n * An adapter is deliberately a factory, not a live AgentTool. This keeps worker retries and\n * concurrent lanes from sharing mutable foreground/session state. The host owns the broker\n * callbacks and is responsible for preserving its cancellation and credential boundaries.\n */\nexport interface WorkerToolAdapterContext {\n\tcwd: string;\n\tsignal?: AbortSignal;\n\tcredentialBoundary?: CredentialExposureBoundary;\n}\n\nexport type WorkerToolAdapterFactory = (context: WorkerToolAdapterContext) => AgentTool<TSchema, unknown>;\n\nexport interface WorkerToolAdapter {\n\treadonly name: string;\n\treadonly description: string;\n\treadonly create: WorkerToolAdapterFactory;\n}\n\n/** Root/session controls are never brokered into a leaf, even when a host registers factories. */\nexport const WORKER_TOOL_ADAPTER_FORBIDDEN_NAMES: ReadonlySet<string> = new Set([\n\t\"delegate\",\n\t\"tmux_dispatch\",\n\t\"tmux_agent_manager\",\n\t\"context_scout\",\n\tROOT_MEMORY_TOOL_NAME,\n\tWORKER_MEMORY_READ_TOOL_NAME,\n\t\"goal\",\n\t\"get_goal\",\n\t\"update_goal\",\n\t\"task_steps\",\n\t\"pipeline\",\n\t\"tool_task\",\n\t\"ask_question\",\n\t\"secret_store\",\n\t\"settings\",\n\t\"session\",\n\t\"credential\",\n\t\"model_fitness\",\n\t\"improvement_loop\",\n\t\"skillify\",\n\t\"extensionify\",\n\t\"worktree_sync\",\n]);\n\n/** Adapter names with host-owned factories; explicit profiles must have these active in foreground. */\nexport const WORKER_TOOL_ADAPTER_NAMES: ReadonlySet<string> = new Set([\n\t\"artifact_retrieve\",\n\t\"run_toolkit_script\",\n\t\"skill\",\n\t\"skill_audit\",\n]);\n\nexport type WorkerToolAdapterMaterialization =\n\t| { ok: true; tool: AgentTool<TSchema, unknown> }\n\t| { ok: false; reason: string };\n\nexport interface WorkerToolAdapterSources {\n\t/** Session-owned packed output store; retrieval is bounded and identifier-only. */\n\tartifactStore?: ArtifactStore;\n\t/** Host-owned script registry and bounded executor. */\n\trunToolkitScript?: RunToolkitScriptDependencies;\n\t/** Optional brokered read-only skill surface. */\n\tskill?: ReadOnlySkillBroker;\n\t/** Optional read-only skill audit broker with host-path redaction. */\n\tskillAudit?: Pick<SkillAuditToolOptions, \"getSkills\" | \"maxSkills\" | \"maxComparisonPairs\" | \"maxDraftFieldChars\"> &\n\t\tRequired<Pick<SkillAuditToolOptions, \"redactPath\">>;\n}\n\n/**\n * Registry for the small set of foreground capabilities that can be brokered safely to a leaf\n * worker. It owns no session state and never clones or returns the foreground tool instance.\n *\n * Extension/MCP tools must be registered explicitly by a host broker. A missing registration is\n * a deterministic unsupported result so an omitted inherited tool cannot silently disappear.\n */\nexport class WorkerToolAdapterRegistry {\n\tprivate readonly adapters = new Map<string, WorkerToolAdapter>();\n\n\tregister(adapter: WorkerToolAdapter): this {\n\t\tconst name = adapter.name.trim();\n\t\tif (!name) throw new TypeError(\"Worker tool adapter name must not be empty.\");\n\t\tif (WORKER_TOOL_ADAPTER_FORBIDDEN_NAMES.has(name.toLowerCase())) {\n\t\t\tthrow new Error(`worker_tool_adapter_forbidden:${name}`);\n\t\t}\n\t\tif (this.adapters.has(name)) throw new Error(`Duplicate worker tool adapter: ${name}`);\n\t\tthis.adapters.set(name, Object.freeze({ ...adapter, name }));\n\t\treturn this;\n\t}\n\n\thas(name: string): boolean {\n\t\treturn this.adapters.has(name);\n\t}\n\n\tnames(): readonly string[] {\n\t\treturn [...this.adapters.keys()];\n\t}\n\n\tdescription(name: string): string | undefined {\n\t\treturn this.adapters.get(name)?.description;\n\t}\n\n\tmaterialize(name: string, context: WorkerToolAdapterContext): WorkerToolAdapterMaterialization {\n\t\tconst adapter = this.adapters.get(name);\n\t\tif (!adapter) return { ok: false, reason: unsupportedWorkerToolReason(name) };\n\t\ttry {\n\t\t\tconst tool = adapter.create({ ...context });\n\t\t\tif (tool.name !== name) {\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\treason: `worker_tool_adapter_contract_violation:${name}:created=${tool.name}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn { ok: true, tool };\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `worker_tool_adapter_failed:${name}:${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\t}\n}\n\n/** Build the default safe adapters from host-owned brokers. Omitted sources stay unsupported. */\nexport function createWorkerToolAdapterRegistry(sources: WorkerToolAdapterSources = {}): WorkerToolAdapterRegistry {\n\tconst registry = new WorkerToolAdapterRegistry();\n\tif (sources.artifactStore) {\n\t\tregistry.register({\n\t\t\tname: \"artifact_retrieve\",\n\t\t\tdescription: \"Retrieve a bounded slice from a host-owned packed tool-output artifact.\",\n\t\t\tcreate: (context) => createArtifactRetrieveTool(context.cwd, { artifactStore: sources.artifactStore }),\n\t\t});\n\t}\n\tif (sources.runToolkitScript) {\n\t\tregistry.register({\n\t\t\tname: \"run_toolkit_script\",\n\t\t\tdescription: \"Run a registered toolkit script through the host-owned bounded executor.\",\n\t\t\tcreate: (context) => {\n\t\t\t\tconst dependencies = sources.runToolkitScript!;\n\t\t\t\treturn wrapToolDefinition(\n\t\t\t\t\tcreateRunToolkitScriptToolDefinition({\n\t\t\t\t\t\t...dependencies,\n\t\t\t\t\t\tgetScripts: () =>\n\t\t\t\t\t\t\tdependencies\n\t\t\t\t\t\t\t\t.getScripts()\n\t\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t\t(script) =>\n\t\t\t\t\t\t\t\t\t\t!context.credentialBoundary ||\n\t\t\t\t\t\t\t\t\t\t!isProtectedCredentialPath(script.path, context.cwd, context.credentialBoundary),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t}\n\tif (sources.skill) {\n\t\tregistry.register({\n\t\t\tname: \"skill\",\n\t\t\tdescription: \"Use the host-owned read-only skill broker.\",\n\t\t\tcreate: () => wrapToolDefinition(createReadOnlySkillToolDefinition(sources.skill!)),\n\t\t});\n\t}\n\tif (sources.skillAudit) {\n\t\tconst skillAudit = sources.skillAudit;\n\t\tregistry.register({\n\t\t\tname: \"skill_audit\",\n\t\t\tdescription: \"Audit skills through the host-owned read-only broker.\",\n\t\t\tcreate: (context) =>\n\t\t\t\twrapToolDefinition(\n\t\t\t\t\tcreateSkillAuditToolDefinition(context.cwd, {\n\t\t\t\t\t\t...skillAudit,\n\t\t\t\t\t\tmaxSkills: Math.min(\n\t\t\t\t\t\t\tskillAudit.maxSkills ?? DEFAULT_WORKER_SKILL_AUDIT_MAX_SKILLS,\n\t\t\t\t\t\t\tDEFAULT_WORKER_SKILL_AUDIT_MAX_SKILLS,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tmaxComparisonPairs: Math.min(\n\t\t\t\t\t\t\tskillAudit.maxComparisonPairs ?? DEFAULT_WORKER_SKILL_AUDIT_MAX_COMPARISON_PAIRS,\n\t\t\t\t\t\t\tDEFAULT_WORKER_SKILL_AUDIT_MAX_COMPARISON_PAIRS,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tmaxDraftFieldChars: Math.min(\n\t\t\t\t\t\t\tskillAudit.maxDraftFieldChars ?? DEFAULT_WORKER_SKILL_AUDIT_MAX_DRAFT_FIELD_CHARS,\n\t\t\t\t\t\t\tDEFAULT_WORKER_SKILL_AUDIT_MAX_DRAFT_FIELD_CHARS,\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t});\n\t}\n\treturn registry;\n}\n\nexport function unsupportedWorkerToolReason(name: string): string {\n\treturn `worker_tool_adapter_unavailable:${name}`;\n}\n"]}
|
|
@@ -66,6 +66,8 @@ export declare class BackgroundLaneController implements WorkerAgentControlPort
|
|
|
66
66
|
private _workerLifecycle;
|
|
67
67
|
/** Shared terminal outbox for managed and in-process workers; lazy under UAC omission. */
|
|
68
68
|
private _workerNotifications;
|
|
69
|
+
/** Active event waits consume matching terminal edges before a redundant parent wake is admitted. */
|
|
70
|
+
private readonly _workerWaitConsumers;
|
|
69
71
|
private readonly deps;
|
|
70
72
|
/** Emit a warning without ever throwing — used from disposal-adjacent persistence where a
|
|
71
73
|
* listener failure (or a bare test double missing `emit`) must never block or crash cleanup. */
|
|
@@ -75,6 +77,12 @@ export declare class BackgroundLaneController implements WorkerAgentControlPort
|
|
|
75
77
|
private _getWorkerController;
|
|
76
78
|
private _getWorkerLifecycle;
|
|
77
79
|
private _getWorkerNotificationCoordinator;
|
|
80
|
+
private _workerAgentIdForRecord;
|
|
81
|
+
private _isWorkerTerminalAwaited;
|
|
82
|
+
private _retainWorkerWaitConsumers;
|
|
83
|
+
/** Observe only logical-agent terminals explicitly exposed by a bounded model result. */
|
|
84
|
+
observeWorkerAgentTerminals(agentIds: readonly string[]): void;
|
|
85
|
+
observeWorkerTerminalRecords(records: readonly LaneRecord[]): void;
|
|
78
86
|
/**
|
|
79
87
|
* Backfills a durable notification for every record about to be flushed, through the SAME
|
|
80
88
|
* durable notification store `_getWorkerLifecycle()` already replays from on construction
|
|
@@ -156,7 +164,7 @@ export declare class BackgroundLaneController implements WorkerAgentControlPort
|
|
|
156
164
|
context?: string;
|
|
157
165
|
goalId?: string;
|
|
158
166
|
}): Promise<ResearchLaneRunOutcome>;
|
|
159
|
-
/** Start a durable
|
|
167
|
+
/** Start a durable leaf worker with inherited, preset, or model-selected authority. */
|
|
160
168
|
startWorkerDelegation(request: WorkerDelegationRequest): {
|
|
161
169
|
started: false;
|
|
162
170
|
skipReason: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background-lane-controller.d.ts","sourceRoot":"","sources":["../../src/core/background-lane-controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EACX,2BAA2B,EAC3B,0BAA0B,EAC1B,aAAa,EACb,sBAAsB,EACtB,0BAA0B,EAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"background-lane-controller.d.ts","sourceRoot":"","sources":["../../src/core/background-lane-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* delegations; goal auto-continue itself only ever asks the session to `continueGoalLoop`, so this
|
|
14
14
|
* controller never touches `prompt()`, the last-assistant-message, retry, or streaming state.
|
|
15
15
|
*/
|
|
16
|
-
import { LaneTracker } from "./autonomy/lane-tracker.js";
|
|
16
|
+
import { isLaneTerminalStatus, LaneTracker } from "./autonomy/lane-tracker.js";
|
|
17
17
|
import { appendLaneRecordSnapshot, getLatestLaneRecordSnapshots } from "./autonomy/session-lane-record.js";
|
|
18
18
|
import { ManagedLaneController } from "./delegation/managed-lane-controller.js";
|
|
19
19
|
import { WorkerDelegationController, } from "./delegation/worker-delegation-controller.js";
|
|
@@ -43,6 +43,8 @@ export class BackgroundLaneController {
|
|
|
43
43
|
constructor(deps) {
|
|
44
44
|
/** Live lane registry — the real source for AutonomyStatusSnapshot.activeLaneCount. */
|
|
45
45
|
this._laneTracker = new LaneTracker();
|
|
46
|
+
/** Active event waits consume matching terminal edges before a redundant parent wake is admitted. */
|
|
47
|
+
this._workerWaitConsumers = new Map();
|
|
46
48
|
this.deps = deps;
|
|
47
49
|
this._laneModels = new LaneModelResolver(deps);
|
|
48
50
|
this._research = new ResearchLaneController(deps, this._laneTracker, this._laneModels);
|
|
@@ -102,9 +104,45 @@ export class BackgroundLaneController {
|
|
|
102
104
|
notify: (records) => this.deps.notifyWorkerTerminalHandoff(records),
|
|
103
105
|
warn: (message) => this._safeWarn(message),
|
|
104
106
|
markDurableDelivered: (notificationIds) => this._workerLifecycle?.markNotificationsDelivered(notificationIds),
|
|
107
|
+
isObserved: (record) => this._isWorkerTerminalAwaited(record),
|
|
105
108
|
});
|
|
106
109
|
return this._workerNotifications;
|
|
107
110
|
}
|
|
111
|
+
_workerAgentIdForRecord(record) {
|
|
112
|
+
const attempt = this._workerLifecycle?.getActiveAttempt(record.laneId) ??
|
|
113
|
+
this._workerLifecycle?.getManagedAttempt(record.laneId);
|
|
114
|
+
return attempt?.agentId ?? attempt?.dispatch.logicalLaneId ?? record.laneId;
|
|
115
|
+
}
|
|
116
|
+
_isWorkerTerminalAwaited(record) {
|
|
117
|
+
return (this._workerWaitConsumers.get(this._workerAgentIdForRecord(record)) ?? 0) > 0;
|
|
118
|
+
}
|
|
119
|
+
_retainWorkerWaitConsumers(agentIds) {
|
|
120
|
+
const unique = [...new Set(agentIds)];
|
|
121
|
+
for (const agentId of unique) {
|
|
122
|
+
this._workerWaitConsumers.set(agentId, (this._workerWaitConsumers.get(agentId) ?? 0) + 1);
|
|
123
|
+
}
|
|
124
|
+
return () => {
|
|
125
|
+
for (const agentId of unique) {
|
|
126
|
+
const remaining = (this._workerWaitConsumers.get(agentId) ?? 1) - 1;
|
|
127
|
+
if (remaining > 0)
|
|
128
|
+
this._workerWaitConsumers.set(agentId, remaining);
|
|
129
|
+
else
|
|
130
|
+
this._workerWaitConsumers.delete(agentId);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/** Observe only logical-agent terminals explicitly exposed by a bounded model result. */
|
|
135
|
+
observeWorkerAgentTerminals(agentIds) {
|
|
136
|
+
if (!this._workerLifecycle)
|
|
137
|
+
return;
|
|
138
|
+
const targets = new Set(agentIds);
|
|
139
|
+
this.observeWorkerTerminalRecords(this.getLaneRecords().filter((record) => isLaneTerminalStatus(record.status) && targets.has(this._workerAgentIdForRecord(record))));
|
|
140
|
+
}
|
|
141
|
+
observeWorkerTerminalRecords(records) {
|
|
142
|
+
const terminal = records.filter((record) => isLaneTerminalStatus(record.status));
|
|
143
|
+
if (terminal.length > 0)
|
|
144
|
+
this._getWorkerNotificationCoordinator().observeTerminals(terminal);
|
|
145
|
+
}
|
|
108
146
|
/**
|
|
109
147
|
* Backfills a durable notification for every record about to be flushed, through the SAME
|
|
110
148
|
* durable notification store `_getWorkerLifecycle()` already replays from on construction
|
|
@@ -270,7 +308,7 @@ export class BackgroundLaneController {
|
|
|
270
308
|
async runResearchLaneOnce(request) {
|
|
271
309
|
return this._research.runOnce(request);
|
|
272
310
|
}
|
|
273
|
-
/** Start a durable
|
|
311
|
+
/** Start a durable leaf worker with inherited, preset, or model-selected authority. */
|
|
274
312
|
startWorkerDelegation(request) {
|
|
275
313
|
return this._getWorkerController().start(request);
|
|
276
314
|
}
|
|
@@ -288,12 +326,16 @@ export class BackgroundLaneController {
|
|
|
288
326
|
getWorkerAgentActivity(agentId, scope) {
|
|
289
327
|
if (!this.deps.isDelegateToolActive())
|
|
290
328
|
throw new Error("Worker delegation control is unavailable in this UAC surface.");
|
|
291
|
-
|
|
329
|
+
const activity = this._getWorkerController().getAgentControl().getWorkerAgentActivity(agentId, scope);
|
|
330
|
+
this.observeWorkerAgentTerminals([agentId]);
|
|
331
|
+
return activity;
|
|
292
332
|
}
|
|
293
333
|
readWorkerAgentTranscript(agentId, options) {
|
|
294
334
|
if (!this.deps.isDelegateToolActive())
|
|
295
335
|
throw new Error("Worker delegation control is unavailable in this UAC surface.");
|
|
296
|
-
|
|
336
|
+
const page = this._getWorkerController().getAgentControl().readWorkerAgentTranscript(agentId, options);
|
|
337
|
+
this.observeWorkerAgentTerminals([agentId]);
|
|
338
|
+
return page;
|
|
297
339
|
}
|
|
298
340
|
sendWorkerAgentMessage(agentId, message, options) {
|
|
299
341
|
if (!this.deps.isDelegateToolActive())
|
|
@@ -370,12 +412,40 @@ export class BackgroundLaneController {
|
|
|
370
412
|
waitForWorkerAgent(agentId, timeoutMs, scope) {
|
|
371
413
|
if (!this.deps.isDelegateToolActive())
|
|
372
414
|
throw new Error("Worker delegation control is unavailable in this UAC surface.");
|
|
373
|
-
|
|
415
|
+
const release = this._retainWorkerWaitConsumers([agentId]);
|
|
416
|
+
let wait;
|
|
417
|
+
try {
|
|
418
|
+
wait = this._getWorkerController().getAgentControl().waitForWorkerAgent(agentId, timeoutMs, scope);
|
|
419
|
+
}
|
|
420
|
+
catch (error) {
|
|
421
|
+
release();
|
|
422
|
+
throw error;
|
|
423
|
+
}
|
|
424
|
+
return wait
|
|
425
|
+
.then((result) => {
|
|
426
|
+
this.observeWorkerAgentTerminals([agentId]);
|
|
427
|
+
return result;
|
|
428
|
+
})
|
|
429
|
+
.finally(release);
|
|
374
430
|
}
|
|
375
431
|
waitForWorkerAgents(agentIds, mode, timeoutMs, scope) {
|
|
376
432
|
if (!this.deps.isDelegateToolActive())
|
|
377
433
|
throw new Error("Worker delegation control is unavailable in this UAC surface.");
|
|
378
|
-
|
|
434
|
+
const release = this._retainWorkerWaitConsumers(agentIds);
|
|
435
|
+
let wait;
|
|
436
|
+
try {
|
|
437
|
+
wait = this._getWorkerController().getAgentControl().waitForWorkerAgents(agentIds, mode, timeoutMs, scope);
|
|
438
|
+
}
|
|
439
|
+
catch (error) {
|
|
440
|
+
release();
|
|
441
|
+
throw error;
|
|
442
|
+
}
|
|
443
|
+
return wait
|
|
444
|
+
.then((result) => {
|
|
445
|
+
this.observeWorkerAgentTerminals(agentIds);
|
|
446
|
+
return result;
|
|
447
|
+
})
|
|
448
|
+
.finally(release);
|
|
379
449
|
}
|
|
380
450
|
broadcastWorkerAgentMessage(agentIds, message, options) {
|
|
381
451
|
if (!this.deps.isDelegateToolActive())
|