@telora/daemon 0.12.33
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/.env.example +64 -0
- package/README.md +229 -0
- package/build-info.json +4 -0
- package/dist/activity-tracker.d.ts +13 -0
- package/dist/activity-tracker.d.ts.map +1 -0
- package/dist/activity-tracker.js +19 -0
- package/dist/activity-tracker.js.map +1 -0
- package/dist/agent-state.d.ts +45 -0
- package/dist/agent-state.d.ts.map +1 -0
- package/dist/agent-state.js +61 -0
- package/dist/agent-state.js.map +1 -0
- package/dist/audit-hooks.d.ts +12 -0
- package/dist/audit-hooks.d.ts.map +1 -0
- package/dist/audit-hooks.js +45 -0
- package/dist/audit-hooks.js.map +1 -0
- package/dist/auto-update.d.ts +42 -0
- package/dist/auto-update.d.ts.map +1 -0
- package/dist/auto-update.js +96 -0
- package/dist/auto-update.js.map +1 -0
- package/dist/branch-status.d.ts +40 -0
- package/dist/branch-status.d.ts.map +1 -0
- package/dist/branch-status.js +107 -0
- package/dist/branch-status.js.map +1 -0
- package/dist/completion-detector.d.ts +87 -0
- package/dist/completion-detector.d.ts.map +1 -0
- package/dist/completion-detector.js +160 -0
- package/dist/completion-detector.js.map +1 -0
- package/dist/completion-handler.d.ts +48 -0
- package/dist/completion-handler.d.ts.map +1 -0
- package/dist/completion-handler.js +200 -0
- package/dist/completion-handler.js.map +1 -0
- package/dist/condition-evaluators.d.ts +31 -0
- package/dist/condition-evaluators.d.ts.map +1 -0
- package/dist/condition-evaluators.js +416 -0
- package/dist/condition-evaluators.js.map +1 -0
- package/dist/config.d.ts +55 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +311 -0
- package/dist/config.js.map +1 -0
- package/dist/control-state.d.ts +41 -0
- package/dist/control-state.d.ts.map +1 -0
- package/dist/control-state.js +204 -0
- package/dist/control-state.js.map +1 -0
- package/dist/crash-recovery-cleanup.d.ts +21 -0
- package/dist/crash-recovery-cleanup.d.ts.map +1 -0
- package/dist/crash-recovery-cleanup.js +198 -0
- package/dist/crash-recovery-cleanup.js.map +1 -0
- package/dist/crash-recovery-scan.d.ts +19 -0
- package/dist/crash-recovery-scan.d.ts.map +1 -0
- package/dist/crash-recovery-scan.js +145 -0
- package/dist/crash-recovery-scan.js.map +1 -0
- package/dist/crash-recovery-types.d.ts +54 -0
- package/dist/crash-recovery-types.d.ts.map +1 -0
- package/dist/crash-recovery-types.js +13 -0
- package/dist/crash-recovery-types.js.map +1 -0
- package/dist/crash-recovery.d.ts +88 -0
- package/dist/crash-recovery.d.ts.map +1 -0
- package/dist/crash-recovery.js +448 -0
- package/dist/crash-recovery.js.map +1 -0
- package/dist/daemon-logs.d.ts +19 -0
- package/dist/daemon-logs.d.ts.map +1 -0
- package/dist/daemon-logs.js +81 -0
- package/dist/daemon-logs.js.map +1 -0
- package/dist/daemon-process.d.ts +154 -0
- package/dist/daemon-process.d.ts.map +1 -0
- package/dist/daemon-process.js +427 -0
- package/dist/daemon-process.js.map +1 -0
- package/dist/dag-validator.d.ts +52 -0
- package/dist/dag-validator.d.ts.map +1 -0
- package/dist/dag-validator.js +199 -0
- package/dist/dag-validator.js.map +1 -0
- package/dist/delivery-guards.d.ts +41 -0
- package/dist/delivery-guards.d.ts.map +1 -0
- package/dist/delivery-guards.js +195 -0
- package/dist/delivery-guards.js.map +1 -0
- package/dist/delivery-lifecycle.d.ts +110 -0
- package/dist/delivery-lifecycle.d.ts.map +1 -0
- package/dist/delivery-lifecycle.js +353 -0
- package/dist/delivery-lifecycle.js.map +1 -0
- package/dist/delivery-merge.d.ts +17 -0
- package/dist/delivery-merge.d.ts.map +1 -0
- package/dist/delivery-merge.js +89 -0
- package/dist/delivery-merge.js.map +1 -0
- package/dist/dependency-resolver.d.ts +77 -0
- package/dist/dependency-resolver.d.ts.map +1 -0
- package/dist/dependency-resolver.js +337 -0
- package/dist/dependency-resolver.js.map +1 -0
- package/dist/evaluation-context.d.ts +49 -0
- package/dist/evaluation-context.d.ts.map +1 -0
- package/dist/evaluation-context.js +98 -0
- package/dist/evaluation-context.js.map +1 -0
- package/dist/git-activity.d.ts +24 -0
- package/dist/git-activity.d.ts.map +1 -0
- package/dist/git-activity.js +97 -0
- package/dist/git-activity.js.map +1 -0
- package/dist/git-branch.d.ts +33 -0
- package/dist/git-branch.d.ts.map +1 -0
- package/dist/git-branch.js +88 -0
- package/dist/git-branch.js.map +1 -0
- package/dist/git-integration.d.ts +27 -0
- package/dist/git-integration.d.ts.map +1 -0
- package/dist/git-integration.js +82 -0
- package/dist/git-integration.js.map +1 -0
- package/dist/git-merge-helpers.d.ts +48 -0
- package/dist/git-merge-helpers.d.ts.map +1 -0
- package/dist/git-merge-helpers.js +105 -0
- package/dist/git-merge-helpers.js.map +1 -0
- package/dist/git-merge-lock.d.ts +67 -0
- package/dist/git-merge-lock.d.ts.map +1 -0
- package/dist/git-merge-lock.js +157 -0
- package/dist/git-merge-lock.js.map +1 -0
- package/dist/git-merge-strategies.d.ts +39 -0
- package/dist/git-merge-strategies.d.ts.map +1 -0
- package/dist/git-merge-strategies.js +127 -0
- package/dist/git-merge-strategies.js.map +1 -0
- package/dist/git-merge.d.ts +80 -0
- package/dist/git-merge.d.ts.map +1 -0
- package/dist/git-merge.js +373 -0
- package/dist/git-merge.js.map +1 -0
- package/dist/git-state-detector.d.ts +24 -0
- package/dist/git-state-detector.d.ts.map +1 -0
- package/dist/git-state-detector.js +122 -0
- package/dist/git-state-detector.js.map +1 -0
- package/dist/git-types.d.ts +40 -0
- package/dist/git-types.d.ts.map +1 -0
- package/dist/git-types.js +23 -0
- package/dist/git-types.js.map +1 -0
- package/dist/git-utils.d.ts +28 -0
- package/dist/git-utils.d.ts.map +1 -0
- package/dist/git-utils.js +57 -0
- package/dist/git-utils.js.map +1 -0
- package/dist/git.d.ts +24 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +64 -0
- package/dist/git.js.map +1 -0
- package/dist/guard-engine.d.ts +19 -0
- package/dist/guard-engine.d.ts.map +1 -0
- package/dist/guard-engine.js +21 -0
- package/dist/guard-engine.js.map +1 -0
- package/dist/guard-evaluator.d.ts +47 -0
- package/dist/guard-evaluator.d.ts.map +1 -0
- package/dist/guard-evaluator.js +193 -0
- package/dist/guard-evaluator.js.map +1 -0
- package/dist/heartbeat.d.ts +73 -0
- package/dist/heartbeat.d.ts.map +1 -0
- package/dist/heartbeat.js +306 -0
- package/dist/heartbeat.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +493 -0
- package/dist/index.js.map +1 -0
- package/dist/listener-auto-advance.d.ts +29 -0
- package/dist/listener-auto-advance.d.ts.map +1 -0
- package/dist/listener-auto-advance.js +172 -0
- package/dist/listener-auto-advance.js.map +1 -0
- package/dist/listener-review.d.ts +37 -0
- package/dist/listener-review.d.ts.map +1 -0
- package/dist/listener-review.js +217 -0
- package/dist/listener-review.js.map +1 -0
- package/dist/listener.d.ts +57 -0
- package/dist/listener.d.ts.map +1 -0
- package/dist/listener.js +361 -0
- package/dist/listener.js.map +1 -0
- package/dist/log-manager.d.ts +18 -0
- package/dist/log-manager.d.ts.map +1 -0
- package/dist/log-manager.js +18 -0
- package/dist/log-manager.js.map +1 -0
- package/dist/otlp-log-parser.d.ts +21 -0
- package/dist/otlp-log-parser.d.ts.map +1 -0
- package/dist/otlp-log-parser.js +143 -0
- package/dist/otlp-log-parser.js.map +1 -0
- package/dist/otlp-metric-parser.d.ts +20 -0
- package/dist/otlp-metric-parser.d.ts.map +1 -0
- package/dist/otlp-metric-parser.js +113 -0
- package/dist/otlp-metric-parser.js.map +1 -0
- package/dist/otlp-port-manager.d.ts +26 -0
- package/dist/otlp-port-manager.d.ts.map +1 -0
- package/dist/otlp-port-manager.js +130 -0
- package/dist/otlp-port-manager.js.map +1 -0
- package/dist/otlp-receiver.d.ts +51 -0
- package/dist/otlp-receiver.d.ts.map +1 -0
- package/dist/otlp-receiver.js +663 -0
- package/dist/otlp-receiver.js.map +1 -0
- package/dist/otlp-types.d.ts +92 -0
- package/dist/otlp-types.d.ts.map +1 -0
- package/dist/otlp-types.js +133 -0
- package/dist/otlp-types.js.map +1 -0
- package/dist/output-monitor.d.ts +33 -0
- package/dist/output-monitor.d.ts.map +1 -0
- package/dist/output-monitor.js +67 -0
- package/dist/output-monitor.js.map +1 -0
- package/dist/planning-prompt-builder.d.ts +67 -0
- package/dist/planning-prompt-builder.d.ts.map +1 -0
- package/dist/planning-prompt-builder.js +515 -0
- package/dist/planning-prompt-builder.js.map +1 -0
- package/dist/prompt-builder.d.ts +14 -0
- package/dist/prompt-builder.d.ts.map +1 -0
- package/dist/prompt-builder.js +174 -0
- package/dist/prompt-builder.js.map +1 -0
- package/dist/qa-crash-recovery.d.ts +77 -0
- package/dist/qa-crash-recovery.d.ts.map +1 -0
- package/dist/qa-crash-recovery.js +243 -0
- package/dist/qa-crash-recovery.js.map +1 -0
- package/dist/qa-dev-server.d.ts +73 -0
- package/dist/qa-dev-server.d.ts.map +1 -0
- package/dist/qa-dev-server.js +279 -0
- package/dist/qa-dev-server.js.map +1 -0
- package/dist/qa-orchestrator.d.ts +79 -0
- package/dist/qa-orchestrator.d.ts.map +1 -0
- package/dist/qa-orchestrator.js +349 -0
- package/dist/qa-orchestrator.js.map +1 -0
- package/dist/qa-port-allocator.d.ts +34 -0
- package/dist/qa-port-allocator.d.ts.map +1 -0
- package/dist/qa-port-allocator.js +75 -0
- package/dist/qa-port-allocator.js.map +1 -0
- package/dist/qa-provisioner.d.ts +33 -0
- package/dist/qa-provisioner.d.ts.map +1 -0
- package/dist/qa-provisioner.js +141 -0
- package/dist/qa-provisioner.js.map +1 -0
- package/dist/qa-state.d.ts +93 -0
- package/dist/qa-state.d.ts.map +1 -0
- package/dist/qa-state.js +74 -0
- package/dist/qa-state.js.map +1 -0
- package/dist/queries/control-state.d.ts +25 -0
- package/dist/queries/control-state.d.ts.map +1 -0
- package/dist/queries/control-state.js +34 -0
- package/dist/queries/control-state.js.map +1 -0
- package/dist/queries/daemon-connection.d.ts +25 -0
- package/dist/queries/daemon-connection.d.ts.map +1 -0
- package/dist/queries/daemon-connection.js +28 -0
- package/dist/queries/daemon-connection.js.map +1 -0
- package/dist/queries/deliveries.d.ts +100 -0
- package/dist/queries/deliveries.d.ts.map +1 -0
- package/dist/queries/deliveries.js +184 -0
- package/dist/queries/deliveries.js.map +1 -0
- package/dist/queries/git-activity.d.ts +20 -0
- package/dist/queries/git-activity.d.ts.map +1 -0
- package/dist/queries/git-activity.js +22 -0
- package/dist/queries/git-activity.js.map +1 -0
- package/dist/queries/guards.d.ts +47 -0
- package/dist/queries/guards.d.ts.map +1 -0
- package/dist/queries/guards.js +138 -0
- package/dist/queries/guards.js.map +1 -0
- package/dist/queries/index.d.ts +19 -0
- package/dist/queries/index.d.ts.map +1 -0
- package/dist/queries/index.js +17 -0
- package/dist/queries/index.js.map +1 -0
- package/dist/queries/issues.d.ts +41 -0
- package/dist/queries/issues.d.ts.map +1 -0
- package/dist/queries/issues.js +67 -0
- package/dist/queries/issues.js.map +1 -0
- package/dist/queries/qa.d.ts +79 -0
- package/dist/queries/qa.d.ts.map +1 -0
- package/dist/queries/qa.js +85 -0
- package/dist/queries/qa.js.map +1 -0
- package/dist/queries/roles.d.ts +13 -0
- package/dist/queries/roles.d.ts.map +1 -0
- package/dist/queries/roles.js +39 -0
- package/dist/queries/roles.js.map +1 -0
- package/dist/queries/schemas.d.ts +777 -0
- package/dist/queries/schemas.d.ts.map +1 -0
- package/dist/queries/schemas.js +391 -0
- package/dist/queries/schemas.js.map +1 -0
- package/dist/queries/sessions.d.ts +64 -0
- package/dist/queries/sessions.d.ts.map +1 -0
- package/dist/queries/sessions.js +100 -0
- package/dist/queries/sessions.js.map +1 -0
- package/dist/queries/shared.d.ts +61 -0
- package/dist/queries/shared.d.ts.map +1 -0
- package/dist/queries/shared.js +187 -0
- package/dist/queries/shared.js.map +1 -0
- package/dist/queries/strategies.d.ts +69 -0
- package/dist/queries/strategies.d.ts.map +1 -0
- package/dist/queries/strategies.js +80 -0
- package/dist/queries/strategies.js.map +1 -0
- package/dist/queries/workflows.d.ts +17 -0
- package/dist/queries/workflows.d.ts.map +1 -0
- package/dist/queries/workflows.js +49 -0
- package/dist/queries/workflows.js.map +1 -0
- package/dist/queries/worktrees.d.ts +38 -0
- package/dist/queries/worktrees.d.ts.map +1 -0
- package/dist/queries/worktrees.js +37 -0
- package/dist/queries/worktrees.js.map +1 -0
- package/dist/self-update.d.ts +94 -0
- package/dist/self-update.d.ts.map +1 -0
- package/dist/self-update.js +438 -0
- package/dist/self-update.js.map +1 -0
- package/dist/session-lifecycle.d.ts +77 -0
- package/dist/session-lifecycle.d.ts.map +1 -0
- package/dist/session-lifecycle.js +379 -0
- package/dist/session-lifecycle.js.map +1 -0
- package/dist/shutdown-state.d.ts +17 -0
- package/dist/shutdown-state.d.ts.map +1 -0
- package/dist/shutdown-state.js +22 -0
- package/dist/shutdown-state.js.map +1 -0
- package/dist/spawn-cooldown.d.ts +14 -0
- package/dist/spawn-cooldown.d.ts.map +1 -0
- package/dist/spawn-cooldown.js +34 -0
- package/dist/spawn-cooldown.js.map +1 -0
- package/dist/spawn-environment.d.ts +35 -0
- package/dist/spawn-environment.d.ts.map +1 -0
- package/dist/spawn-environment.js +48 -0
- package/dist/spawn-environment.js.map +1 -0
- package/dist/spawner-liveness.d.ts +23 -0
- package/dist/spawner-liveness.d.ts.map +1 -0
- package/dist/spawner-liveness.js +99 -0
- package/dist/spawner-liveness.js.map +1 -0
- package/dist/spawner-resolution.d.ts +27 -0
- package/dist/spawner-resolution.d.ts.map +1 -0
- package/dist/spawner-resolution.js +99 -0
- package/dist/spawner-resolution.js.map +1 -0
- package/dist/spawner-timeout.d.ts +32 -0
- package/dist/spawner-timeout.d.ts.map +1 -0
- package/dist/spawner-timeout.js +124 -0
- package/dist/spawner-timeout.js.map +1 -0
- package/dist/spawner.d.ts +77 -0
- package/dist/spawner.d.ts.map +1 -0
- package/dist/spawner.js +734 -0
- package/dist/spawner.js.map +1 -0
- package/dist/strategy-completion.d.ts +110 -0
- package/dist/strategy-completion.d.ts.map +1 -0
- package/dist/strategy-completion.js +434 -0
- package/dist/strategy-completion.js.map +1 -0
- package/dist/strategy-engine.d.ts +47 -0
- package/dist/strategy-engine.d.ts.map +1 -0
- package/dist/strategy-engine.js +419 -0
- package/dist/strategy-engine.js.map +1 -0
- package/dist/strategy-executor.d.ts +93 -0
- package/dist/strategy-executor.d.ts.map +1 -0
- package/dist/strategy-executor.js +775 -0
- package/dist/strategy-executor.js.map +1 -0
- package/dist/strategy-lifecycle.d.ts +61 -0
- package/dist/strategy-lifecycle.d.ts.map +1 -0
- package/dist/strategy-lifecycle.js +516 -0
- package/dist/strategy-lifecycle.js.map +1 -0
- package/dist/strategy-merge.d.ts +72 -0
- package/dist/strategy-merge.d.ts.map +1 -0
- package/dist/strategy-merge.js +371 -0
- package/dist/strategy-merge.js.map +1 -0
- package/dist/strategy-prompt-builder.d.ts +62 -0
- package/dist/strategy-prompt-builder.d.ts.map +1 -0
- package/dist/strategy-prompt-builder.js +538 -0
- package/dist/strategy-prompt-builder.js.map +1 -0
- package/dist/strategy-provisioning.d.ts +16 -0
- package/dist/strategy-provisioning.d.ts.map +1 -0
- package/dist/strategy-provisioning.js +119 -0
- package/dist/strategy-provisioning.js.map +1 -0
- package/dist/strategy-team-state.d.ts +24 -0
- package/dist/strategy-team-state.d.ts.map +1 -0
- package/dist/strategy-team-state.js +43 -0
- package/dist/strategy-team-state.js.map +1 -0
- package/dist/strategy-teardown.d.ts +24 -0
- package/dist/strategy-teardown.d.ts.map +1 -0
- package/dist/strategy-teardown.js +158 -0
- package/dist/strategy-teardown.js.map +1 -0
- package/dist/strategy-worktree-state.d.ts +47 -0
- package/dist/strategy-worktree-state.d.ts.map +1 -0
- package/dist/strategy-worktree-state.js +104 -0
- package/dist/strategy-worktree-state.js.map +1 -0
- package/dist/supabase.d.ts +36 -0
- package/dist/supabase.d.ts.map +1 -0
- package/dist/supabase.js +50 -0
- package/dist/supabase.js.map +1 -0
- package/dist/task-converter.d.ts +61 -0
- package/dist/task-converter.d.ts.map +1 -0
- package/dist/task-converter.js +286 -0
- package/dist/task-converter.js.map +1 -0
- package/dist/task-dag-builder.d.ts +14 -0
- package/dist/task-dag-builder.d.ts.map +1 -0
- package/dist/task-dag-builder.js +17 -0
- package/dist/task-dag-builder.js.map +1 -0
- package/dist/team-prompt-base.d.ts +114 -0
- package/dist/team-prompt-base.d.ts.map +1 -0
- package/dist/team-prompt-base.js +531 -0
- package/dist/team-prompt-base.js.map +1 -0
- package/dist/team-prompt-variants.d.ts +27 -0
- package/dist/team-prompt-variants.d.ts.map +1 -0
- package/dist/team-prompt-variants.js +134 -0
- package/dist/team-prompt-variants.js.map +1 -0
- package/dist/team-spawner.d.ts +50 -0
- package/dist/team-spawner.d.ts.map +1 -0
- package/dist/team-spawner.js +410 -0
- package/dist/team-spawner.js.map +1 -0
- package/dist/telemetry-writer.d.ts +66 -0
- package/dist/telemetry-writer.d.ts.map +1 -0
- package/dist/telemetry-writer.js +96 -0
- package/dist/telemetry-writer.js.map +1 -0
- package/dist/trigger-executor.d.ts +56 -0
- package/dist/trigger-executor.d.ts.map +1 -0
- package/dist/trigger-executor.js +313 -0
- package/dist/trigger-executor.js.map +1 -0
- package/dist/types/config.d.ts +60 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +5 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/dag.d.ts +53 -0
- package/dist/types/dag.d.ts.map +1 -0
- package/dist/types/dag.js +5 -0
- package/dist/types/dag.js.map +1 -0
- package/dist/types/delivery.d.ts +71 -0
- package/dist/types/delivery.d.ts.map +1 -0
- package/dist/types/delivery.js +5 -0
- package/dist/types/delivery.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +15 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/issue.d.ts +22 -0
- package/dist/types/issue.d.ts.map +1 -0
- package/dist/types/issue.js +5 -0
- package/dist/types/issue.js.map +1 -0
- package/dist/types/merge.d.ts +28 -0
- package/dist/types/merge.d.ts.map +1 -0
- package/dist/types/merge.js +5 -0
- package/dist/types/merge.js.map +1 -0
- package/dist/types/session.d.ts +98 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/session.js +5 -0
- package/dist/types/session.js.map +1 -0
- package/dist/types/strategy.d.ts +175 -0
- package/dist/types/strategy.d.ts.map +1 -0
- package/dist/types/strategy.js +5 -0
- package/dist/types/strategy.js.map +1 -0
- package/dist/types/workflow.d.ts +34 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/types/workflow.js +9 -0
- package/dist/types/workflow.js.map +1 -0
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/unified-init.d.ts +16 -0
- package/dist/unified-init.d.ts.map +1 -0
- package/dist/unified-init.js +183 -0
- package/dist/unified-init.js.map +1 -0
- package/dist/unified-shell-config.d.ts +34 -0
- package/dist/unified-shell-config.d.ts.map +1 -0
- package/dist/unified-shell-config.js +238 -0
- package/dist/unified-shell-config.js.map +1 -0
- package/dist/unified-shell-status.d.ts +15 -0
- package/dist/unified-shell-status.d.ts.map +1 -0
- package/dist/unified-shell-status.js +100 -0
- package/dist/unified-shell-status.js.map +1 -0
- package/dist/unified-shell.d.ts +50 -0
- package/dist/unified-shell.d.ts.map +1 -0
- package/dist/unified-shell.js +682 -0
- package/dist/unified-shell.js.map +1 -0
- package/dist/version-check.d.ts +19 -0
- package/dist/version-check.d.ts.map +1 -0
- package/dist/version-check.js +67 -0
- package/dist/version-check.js.map +1 -0
- package/dist/workflow-engine.d.ts +95 -0
- package/dist/workflow-engine.d.ts.map +1 -0
- package/dist/workflow-engine.js +165 -0
- package/dist/workflow-engine.js.map +1 -0
- package/dist/worktree-merge.d.ts +23 -0
- package/dist/worktree-merge.d.ts.map +1 -0
- package/dist/worktree-merge.js +57 -0
- package/dist/worktree-merge.js.map +1 -0
- package/dist/worktree-safety.d.ts +48 -0
- package/dist/worktree-safety.d.ts.map +1 -0
- package/dist/worktree-safety.js +113 -0
- package/dist/worktree-safety.js.map +1 -0
- package/dist/worktree-strategy.d.ts +69 -0
- package/dist/worktree-strategy.d.ts.map +1 -0
- package/dist/worktree-strategy.js +214 -0
- package/dist/worktree-strategy.js.map +1 -0
- package/dist/worktree.d.ts +159 -0
- package/dist/worktree.d.ts.map +1 -0
- package/dist/worktree.js +512 -0
- package/dist/worktree.js.map +1 -0
- package/package.json +76 -0
- package/scripts/telora-daemon-wrapper.sh +31 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StrategyEngine -- ExecutionEngine adapter for the strategy-based daemon.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing daemon modules (listener, heartbeat, spawner, git, etc.)
|
|
5
|
+
* behind the ExecutionEngine interface from @telora/daemon-core. This allows
|
|
6
|
+
* the unified process shell to manage the strategy engine without knowing
|
|
7
|
+
* its internals.
|
|
8
|
+
*
|
|
9
|
+
* Lifecycle (called by the process shell):
|
|
10
|
+
* 1. init(config) -- validate, connect to Supabase, init git
|
|
11
|
+
* 2. recoverFromCrash() -- reconcile orphaned state from previous run
|
|
12
|
+
* 3. start() -- begin polling loops and heartbeat
|
|
13
|
+
* 4. stop() -- stop accepting new work
|
|
14
|
+
* 5. shutdown() -- graceful cleanup (kill teams, WIP commit, drain)
|
|
15
|
+
*/
|
|
16
|
+
import type { ExecutionEngine, EngineHealth, ResourceUsage, BaseConfig } from '@telora/daemon-core';
|
|
17
|
+
import { ResourceGovernor } from '@telora/daemon-core';
|
|
18
|
+
export declare class StrategyEngine implements ExecutionEngine {
|
|
19
|
+
readonly name = "strategy";
|
|
20
|
+
/** Daemon config, set during init(). */
|
|
21
|
+
private config;
|
|
22
|
+
/** Optional resource governor for global concurrency limiting. */
|
|
23
|
+
private governor;
|
|
24
|
+
/** Interval handles for periodic tasks (cleared in stop/shutdown). */
|
|
25
|
+
private intervals;
|
|
26
|
+
/** Last scanned timestamp for git activity per product (reset on restart). */
|
|
27
|
+
private lastGitScanTimestamps;
|
|
28
|
+
/**
|
|
29
|
+
* Inject a ResourceGovernor for global concurrency limiting.
|
|
30
|
+
* Called by the process shell after construction but before start().
|
|
31
|
+
*/
|
|
32
|
+
setGovernor(gov: ResourceGovernor): void;
|
|
33
|
+
init(config: BaseConfig & Record<string, unknown>): Promise<void>;
|
|
34
|
+
recoverFromCrash(): Promise<void>;
|
|
35
|
+
start(): Promise<void>;
|
|
36
|
+
private scanAndUpsertGitActivity;
|
|
37
|
+
stop(): void;
|
|
38
|
+
shutdown(): Promise<void>;
|
|
39
|
+
healthCheck(): EngineHealth;
|
|
40
|
+
getResourceUsage(): ResourceUsage;
|
|
41
|
+
/**
|
|
42
|
+
* Assert that config has been set (init() was called) and return it.
|
|
43
|
+
* Throws a clear error if called before init().
|
|
44
|
+
*/
|
|
45
|
+
private requireConfig;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=strategy-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy-engine.d.ts","sourceRoot":"","sources":["../src/strategy-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,UAAU,EACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAA2B,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAwChF,qBAAa,cAAe,YAAW,eAAe;IACpD,QAAQ,CAAC,IAAI,cAAc;IAE3B,wCAAwC;IACxC,OAAO,CAAC,MAAM,CAA6B;IAE3C,kEAAkE;IAClE,OAAO,CAAC,QAAQ,CAAiC;IAEjD,sEAAsE;IACtE,OAAO,CAAC,SAAS,CAAwC;IAEzD,8EAA8E;IAC9E,OAAO,CAAC,qBAAqB,CAA6B;IAE1D;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAUlC,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCjE,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoGjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAkEd,wBAAwB;IA+BtC,IAAI,IAAI,IAAI;IAeN,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAsH/B,WAAW,IAAI,YAAY;IA0D3B,gBAAgB,IAAI,aAAa;IAwBjC;;;OAGG;IACH,OAAO,CAAC,aAAa;CAStB"}
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StrategyEngine -- ExecutionEngine adapter for the strategy-based daemon.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing daemon modules (listener, heartbeat, spawner, git, etc.)
|
|
5
|
+
* behind the ExecutionEngine interface from @telora/daemon-core. This allows
|
|
6
|
+
* the unified process shell to manage the strategy engine without knowing
|
|
7
|
+
* its internals.
|
|
8
|
+
*
|
|
9
|
+
* Lifecycle (called by the process shell):
|
|
10
|
+
* 1. init(config) -- validate, connect to Supabase, init git
|
|
11
|
+
* 2. recoverFromCrash() -- reconcile orphaned state from previous run
|
|
12
|
+
* 3. start() -- begin polling loops and heartbeat
|
|
13
|
+
* 4. stop() -- stop accepting new work
|
|
14
|
+
* 5. shutdown() -- graceful cleanup (kill teams, WIP commit, drain)
|
|
15
|
+
*/
|
|
16
|
+
import { safeInterval, withRetry } from '@telora/daemon-core';
|
|
17
|
+
import { validateConfig, configForProduct } from './config.js';
|
|
18
|
+
import { initSupabase, validateTrackerAuth } from './supabase.js';
|
|
19
|
+
import { getQaStrategies, updateQaStatus, getProductQaStatus, updateProductQaStatus } from './supabase.js';
|
|
20
|
+
import { initGit, commitWipChanges } from './git.js';
|
|
21
|
+
import { initHeartbeat, startHeartbeat, stopHeartbeat, getVersions, setLatestAvailableVersion, setLatestAvailableFactoryVersion } from './heartbeat.js';
|
|
22
|
+
import { checkForUpdates } from './version-check.js';
|
|
23
|
+
import { initListener, startDeliveryListener, startSessionListener, stopListeners, processReadyStrategies, refreshRoles, } from './listener.js';
|
|
24
|
+
import { recoverFromCrash } from './crash-recovery.js';
|
|
25
|
+
import { hydrateFromDb } from './strategy-worktree-state.js';
|
|
26
|
+
import { rebuildStrategyWorktreeState, reconcileGitState } from './strategy-lifecycle.js';
|
|
27
|
+
import { reconcileQaEnvironments, reconcileProductQaEnvironment } from './qa-crash-recovery.js';
|
|
28
|
+
import { removeQaWorktree } from './qa-provisioner.js';
|
|
29
|
+
import { pruneOldLogs } from './log-manager.js';
|
|
30
|
+
import { getActiveQaEnvironments } from './qa-state.js';
|
|
31
|
+
import { stopQaDevServer } from './qa-dev-server.js';
|
|
32
|
+
import { getActiveTeams, terminateAllTeams, waitForTeamExit, initGovernor as initExecutorGovernor, } from './strategy-executor.js';
|
|
33
|
+
import { getRunningAgents, terminateAllAgents, checkAgentLiveness, initGovernor as initSpawnerGovernor } from './spawner.js';
|
|
34
|
+
import { updateSession } from './queries/sessions.js';
|
|
35
|
+
import { getAllStrategyWorktrees } from './strategy-worktree-state.js';
|
|
36
|
+
import { scanGitActivity } from './git-activity.js';
|
|
37
|
+
import { upsertGitActivity, getLatestGitActivityTimestamp } from './queries/git-activity.js';
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// StrategyEngine
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
export class StrategyEngine {
|
|
42
|
+
name = 'strategy';
|
|
43
|
+
/** Daemon config, set during init(). */
|
|
44
|
+
config = null;
|
|
45
|
+
/** Optional resource governor for global concurrency limiting. */
|
|
46
|
+
governor = null;
|
|
47
|
+
/** Interval handles for periodic tasks (cleared in stop/shutdown). */
|
|
48
|
+
intervals = [];
|
|
49
|
+
/** Last scanned timestamp for git activity per product (reset on restart). */
|
|
50
|
+
lastGitScanTimestamps = new Map();
|
|
51
|
+
/**
|
|
52
|
+
* Inject a ResourceGovernor for global concurrency limiting.
|
|
53
|
+
* Called by the process shell after construction but before start().
|
|
54
|
+
*/
|
|
55
|
+
setGovernor(gov) {
|
|
56
|
+
this.governor = gov;
|
|
57
|
+
initExecutorGovernor(gov);
|
|
58
|
+
initSpawnerGovernor(gov);
|
|
59
|
+
}
|
|
60
|
+
// -----------------------------------------------------------------------
|
|
61
|
+
// init
|
|
62
|
+
// -----------------------------------------------------------------------
|
|
63
|
+
async init(config) {
|
|
64
|
+
// Cast to DaemonConfig -- the shell loads the full config including
|
|
65
|
+
// daemon-specific fields and passes it through the generic interface.
|
|
66
|
+
this.config = config;
|
|
67
|
+
// Validate configuration
|
|
68
|
+
validateConfig(this.config);
|
|
69
|
+
// Initialize Supabase client
|
|
70
|
+
console.log('Initializing Supabase client...');
|
|
71
|
+
initSupabase(this.config);
|
|
72
|
+
// Validate tracker auth -- fail fast if invalid
|
|
73
|
+
console.log('Validating tracker authentication...');
|
|
74
|
+
await validateTrackerAuth();
|
|
75
|
+
console.log('Tracker authentication valid');
|
|
76
|
+
// Initialize git for each product's repository
|
|
77
|
+
for (const product of this.config.products) {
|
|
78
|
+
const pc = configForProduct(this.config, product);
|
|
79
|
+
await initGit(pc);
|
|
80
|
+
}
|
|
81
|
+
// Initialize heartbeat (bootstraps counters from DB)
|
|
82
|
+
await initHeartbeat(this.config);
|
|
83
|
+
// Initialize listener (loads agent roles)
|
|
84
|
+
console.log('Initializing listener...');
|
|
85
|
+
await initListener(this.config);
|
|
86
|
+
}
|
|
87
|
+
// -----------------------------------------------------------------------
|
|
88
|
+
// recoverFromCrash
|
|
89
|
+
// -----------------------------------------------------------------------
|
|
90
|
+
async recoverFromCrash() {
|
|
91
|
+
const config = this.requireConfig('recoverFromCrash');
|
|
92
|
+
// Core crash recovery: clean up orphaned worktrees and stale branches
|
|
93
|
+
// Run per-product to handle each product's repo (non-fatal per product)
|
|
94
|
+
for (const product of config.products) {
|
|
95
|
+
try {
|
|
96
|
+
const pc = configForProduct(config, product);
|
|
97
|
+
await recoverFromCrash(pc);
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
console.warn(`Crash recovery failed for product ${product.id} (non-fatal):`, err instanceof Error ? err.message : String(err));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Hydrate worktree state from DB for all products (non-fatal per product)
|
|
104
|
+
for (const product of config.products) {
|
|
105
|
+
try {
|
|
106
|
+
await hydrateFromDb(product.id);
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
console.warn(`Worktree state hydration failed for product ${product.id} (non-fatal):`, err instanceof Error ? err.message : String(err));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Rebuild strategy worktree state from surviving worktrees on disk (non-fatal per product)
|
|
113
|
+
for (const product of config.products) {
|
|
114
|
+
try {
|
|
115
|
+
const pc = configForProduct(config, product);
|
|
116
|
+
await rebuildStrategyWorktreeState(pc);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
console.warn(`Worktree state rebuild failed for product ${product.id} (non-fatal):`, err instanceof Error ? err.message : String(err));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Reconcile git state for rebuilt worktrees (non-fatal)
|
|
123
|
+
for (const product of config.products) {
|
|
124
|
+
try {
|
|
125
|
+
const pc = configForProduct(config, product);
|
|
126
|
+
await reconcileGitState(pc);
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
console.warn(`Git state reconciliation failed for product ${product.id} (non-fatal):`, err instanceof Error ? err.message : String(err));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// QA environment crash recovery (DB-driven, non-fatal)
|
|
133
|
+
for (const product of config.products) {
|
|
134
|
+
const pc = configForProduct(config, product);
|
|
135
|
+
try {
|
|
136
|
+
await reconcileQaEnvironments(pc, {
|
|
137
|
+
getQaStrategies: () => getQaStrategies(product.id),
|
|
138
|
+
updateQaStatus,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
console.warn(`Strategy QA crash recovery failed for product ${product.id} (non-fatal):`, err instanceof Error ? err.message : String(err));
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
await reconcileProductQaEnvironment(pc, {
|
|
146
|
+
getProductQaStatus: (productId) => getProductQaStatus(productId),
|
|
147
|
+
updateProductQaStatus: (productId, fields) => updateProductQaStatus(productId, fields),
|
|
148
|
+
removeQaWorktree,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
console.warn(`Product QA crash recovery failed for product ${product.id} (non-fatal):`, err instanceof Error ? err.message : String(err));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Startup log pruning (non-fatal)
|
|
156
|
+
try {
|
|
157
|
+
await pruneOldLogs(config);
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
console.warn('Startup log pruning failed (non-fatal):', err instanceof Error ? err.message : String(err));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// -----------------------------------------------------------------------
|
|
164
|
+
// start
|
|
165
|
+
// -----------------------------------------------------------------------
|
|
166
|
+
async start() {
|
|
167
|
+
const config = this.requireConfig('start');
|
|
168
|
+
// Start listeners
|
|
169
|
+
console.log('Starting listeners...');
|
|
170
|
+
startDeliveryListener();
|
|
171
|
+
startSessionListener();
|
|
172
|
+
// Start heartbeat
|
|
173
|
+
await startHeartbeat();
|
|
174
|
+
// Non-blocking version checks against registry
|
|
175
|
+
const versions = getVersions();
|
|
176
|
+
void checkForUpdates(versions.daemon, '@telora/daemon').then(r => {
|
|
177
|
+
if (r?.latestVersion)
|
|
178
|
+
setLatestAvailableVersion(r.latestVersion);
|
|
179
|
+
}).catch(() => { });
|
|
180
|
+
void checkForUpdates(versions.factory, '@telora/factory').then(r => {
|
|
181
|
+
if (r?.latestVersion)
|
|
182
|
+
setLatestAvailableFactoryVersion(r.latestVersion);
|
|
183
|
+
}).catch(() => { });
|
|
184
|
+
// Process any ready strategies immediately
|
|
185
|
+
console.log('Processing ready strategies...');
|
|
186
|
+
await processReadyStrategies();
|
|
187
|
+
// Periodically refresh roles and process ready strategies (60s)
|
|
188
|
+
this.intervals.push(safeInterval(async () => {
|
|
189
|
+
await refreshRoles();
|
|
190
|
+
await processReadyStrategies();
|
|
191
|
+
}, 60_000, 'role-refresh'));
|
|
192
|
+
// Periodic log pruning (hourly) — iterate all products so each logDir is pruned
|
|
193
|
+
this.intervals.push(safeInterval(async () => {
|
|
194
|
+
for (const product of config.products) {
|
|
195
|
+
const pc = configForProduct(config, product);
|
|
196
|
+
await pruneOldLogs(pc);
|
|
197
|
+
}
|
|
198
|
+
}, 3_600_000, 'log-prune'));
|
|
199
|
+
// Periodic agent liveness check (60s)
|
|
200
|
+
this.intervals.push(safeInterval(async () => {
|
|
201
|
+
await checkAgentLiveness(config);
|
|
202
|
+
}, 60_000, 'agent-liveness'));
|
|
203
|
+
// Periodic git activity scanning (5 minutes)
|
|
204
|
+
this.intervals.push(safeInterval(async () => {
|
|
205
|
+
await this.scanAndUpsertGitActivity(config);
|
|
206
|
+
}, 300_000, 'git-activity-scan'));
|
|
207
|
+
// Initial git activity scan (non-blocking)
|
|
208
|
+
void this.scanAndUpsertGitActivity(config).catch(() => { });
|
|
209
|
+
console.log('Strategy engine started');
|
|
210
|
+
}
|
|
211
|
+
// -----------------------------------------------------------------------
|
|
212
|
+
// git activity scanning
|
|
213
|
+
// -----------------------------------------------------------------------
|
|
214
|
+
async scanAndUpsertGitActivity(config) {
|
|
215
|
+
// Scan git activity for each configured product independently
|
|
216
|
+
for (const product of config.products) {
|
|
217
|
+
try {
|
|
218
|
+
// Determine scan window start per product
|
|
219
|
+
let scanFrom = this.lastGitScanTimestamps.get(product.id);
|
|
220
|
+
if (!scanFrom) {
|
|
221
|
+
const latest = await getLatestGitActivityTimestamp(product.id);
|
|
222
|
+
scanFrom = latest ?? new Date(Date.now() - 86_400_000).toISOString();
|
|
223
|
+
this.lastGitScanTimestamps.set(product.id, scanFrom);
|
|
224
|
+
}
|
|
225
|
+
const buckets = scanGitActivity(product.repoPath, scanFrom);
|
|
226
|
+
if (buckets.length > 0) {
|
|
227
|
+
await upsertGitActivity(product.id, buckets.map(b => ({
|
|
228
|
+
...b,
|
|
229
|
+
intervalMinutes: 60,
|
|
230
|
+
})));
|
|
231
|
+
// Advance the scan window for this product
|
|
232
|
+
this.lastGitScanTimestamps.set(product.id, buckets[buckets.length - 1].intervalStart);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch (err) {
|
|
236
|
+
console.debug(`[strategy-engine] Git activity scan failed for product ${product.id}:`, err.message);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// -----------------------------------------------------------------------
|
|
241
|
+
// stop
|
|
242
|
+
// -----------------------------------------------------------------------
|
|
243
|
+
stop() {
|
|
244
|
+
// Clear periodic intervals
|
|
245
|
+
for (const interval of this.intervals) {
|
|
246
|
+
clearInterval(interval);
|
|
247
|
+
}
|
|
248
|
+
this.intervals = [];
|
|
249
|
+
// Stop listeners (polling loops)
|
|
250
|
+
stopListeners();
|
|
251
|
+
}
|
|
252
|
+
// -----------------------------------------------------------------------
|
|
253
|
+
// shutdown
|
|
254
|
+
// -----------------------------------------------------------------------
|
|
255
|
+
async shutdown() {
|
|
256
|
+
// Stop heartbeat and send disconnect signal
|
|
257
|
+
await stopHeartbeat();
|
|
258
|
+
// Stop all QA dev servers (worktrees persist, but dev servers don't)
|
|
259
|
+
const qaEnvs = getActiveQaEnvironments();
|
|
260
|
+
if (qaEnvs.size > 0) {
|
|
261
|
+
console.log(`Stopping ${qaEnvs.size} QA dev server(s)...`);
|
|
262
|
+
for (const [, state] of qaEnvs) {
|
|
263
|
+
if (state.pid) {
|
|
264
|
+
try {
|
|
265
|
+
await stopQaDevServer(state.pid);
|
|
266
|
+
}
|
|
267
|
+
catch (err) {
|
|
268
|
+
console.warn(`Failed to stop QA dev server (PID ${state.pid}): ${err.message}`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// Terminate active strategy teams with WIP commit support
|
|
274
|
+
const activeTeams = getActiveTeams();
|
|
275
|
+
if (activeTeams.size > 0) {
|
|
276
|
+
// Snapshot team info before termination (worktree paths for WIP commits)
|
|
277
|
+
const teamSnapshots = [...activeTeams.entries()].map(([id, team]) => ({
|
|
278
|
+
strategyId: id,
|
|
279
|
+
strategyName: team.strategyName,
|
|
280
|
+
worktreePath: team.worktreePath,
|
|
281
|
+
leadSessionId: team.leadSessionId,
|
|
282
|
+
}));
|
|
283
|
+
console.log(`Terminating ${activeTeams.size} active strategy teams...`);
|
|
284
|
+
terminateAllTeams();
|
|
285
|
+
// Wait for each team to exit (30s per team, parallelized)
|
|
286
|
+
await Promise.allSettled(teamSnapshots.map((t) => waitForTeamExit(t.strategyId, 30_000)));
|
|
287
|
+
// Commit WIP changes in each team's worktree after process exit
|
|
288
|
+
for (const team of teamSnapshots) {
|
|
289
|
+
if (team.worktreePath) {
|
|
290
|
+
try {
|
|
291
|
+
commitWipChanges(team.worktreePath, team.strategyName);
|
|
292
|
+
}
|
|
293
|
+
catch (err) {
|
|
294
|
+
console.warn(`WIP commit failed for "${team.strategyName}": ${err.message}`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
// Force-update any remaining sessions that didn't exit within the timeout
|
|
299
|
+
const remainingTeams = getActiveTeams();
|
|
300
|
+
if (remainingTeams.size > 0) {
|
|
301
|
+
console.log(`Force-updating ${remainingTeams.size} remaining session(s) to failed...`);
|
|
302
|
+
const updates = [...remainingTeams.values()]
|
|
303
|
+
.filter((team) => team.leadSessionId)
|
|
304
|
+
.map((team) => withRetry(() => updateSession(team.leadSessionId, {
|
|
305
|
+
status: 'failed',
|
|
306
|
+
exit_reason: 'Daemon shutdown: team did not exit within timeout',
|
|
307
|
+
ended_at: new Date().toISOString(),
|
|
308
|
+
}), {
|
|
309
|
+
maxAttempts: 3,
|
|
310
|
+
baseDelayMs: 1000,
|
|
311
|
+
label: `shutdown-session-${team.leadSessionId}`,
|
|
312
|
+
}).catch((err) => console.warn(`Failed to update session ${team.leadSessionId}:`, err.message)));
|
|
313
|
+
await Promise.allSettled(updates);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
// Wait for running agents (legacy agents still in flight)
|
|
317
|
+
const runningAgents = getRunningAgents();
|
|
318
|
+
if (runningAgents.size > 0) {
|
|
319
|
+
console.log(`Waiting for ${runningAgents.size} running agents to complete...`);
|
|
320
|
+
// Give agents 30 seconds to reach a checkpoint
|
|
321
|
+
const timeout = setTimeout(() => {
|
|
322
|
+
console.log('Timeout reached, terminating remaining agents...');
|
|
323
|
+
terminateAllAgents();
|
|
324
|
+
}, 30_000);
|
|
325
|
+
// Poll for completion
|
|
326
|
+
while (getRunningAgents().size > 0) {
|
|
327
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
328
|
+
}
|
|
329
|
+
clearTimeout(timeout);
|
|
330
|
+
}
|
|
331
|
+
// Drain: allow pending async session updates to flush
|
|
332
|
+
console.log('Draining pending session updates...');
|
|
333
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
334
|
+
console.log('Strategy engine shutdown complete');
|
|
335
|
+
}
|
|
336
|
+
// -----------------------------------------------------------------------
|
|
337
|
+
// healthCheck
|
|
338
|
+
// -----------------------------------------------------------------------
|
|
339
|
+
healthCheck() {
|
|
340
|
+
const teams = getActiveTeams();
|
|
341
|
+
const agents = getRunningAgents();
|
|
342
|
+
const activeWorkItems = teams.size + agents.size;
|
|
343
|
+
// Determine overall status
|
|
344
|
+
let status = 'healthy';
|
|
345
|
+
if (this.config === null) {
|
|
346
|
+
status = 'unhealthy';
|
|
347
|
+
}
|
|
348
|
+
// Build details
|
|
349
|
+
const teamDetails = [];
|
|
350
|
+
for (const team of teams.values()) {
|
|
351
|
+
const durationSec = Math.round((Date.now() - team.startedAt.getTime()) / 1000);
|
|
352
|
+
teamDetails.push({
|
|
353
|
+
strategyId: team.strategyId,
|
|
354
|
+
strategyName: team.strategyName,
|
|
355
|
+
roleName: team.roleName,
|
|
356
|
+
phase: team.phase,
|
|
357
|
+
durationSec,
|
|
358
|
+
deliveryCount: team.knownDeliveryIds.size,
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
const agentDetails = [];
|
|
362
|
+
for (const agent of agents.values()) {
|
|
363
|
+
const durationSec = Math.round((Date.now() - agent.startedAt.getTime()) / 1000);
|
|
364
|
+
agentDetails.push({
|
|
365
|
+
sessionId: agent.sessionId,
|
|
366
|
+
deliveryName: agent.deliveryName,
|
|
367
|
+
roleName: agent.roleName,
|
|
368
|
+
pid: agent.pid,
|
|
369
|
+
durationSec,
|
|
370
|
+
streamState: agent.streamState,
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
return {
|
|
374
|
+
status,
|
|
375
|
+
activeWorkItems,
|
|
376
|
+
details: {
|
|
377
|
+
activeTeams: teams.size,
|
|
378
|
+
activeLegacyAgents: agents.size,
|
|
379
|
+
teams: teamDetails,
|
|
380
|
+
agents: agentDetails,
|
|
381
|
+
},
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
// -----------------------------------------------------------------------
|
|
385
|
+
// getResourceUsage
|
|
386
|
+
// -----------------------------------------------------------------------
|
|
387
|
+
getResourceUsage() {
|
|
388
|
+
const teams = getActiveTeams();
|
|
389
|
+
const agents = getRunningAgents();
|
|
390
|
+
const worktrees = getAllStrategyWorktrees();
|
|
391
|
+
// Active Claude processes: team lead processes + legacy agent processes
|
|
392
|
+
let activeClaudeProcesses = 0;
|
|
393
|
+
for (const team of teams.values()) {
|
|
394
|
+
if (team.leadPid) {
|
|
395
|
+
activeClaudeProcesses++;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
activeClaudeProcesses += agents.size;
|
|
399
|
+
return {
|
|
400
|
+
activeClaudeProcesses,
|
|
401
|
+
activeWorktrees: worktrees.size,
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
// -----------------------------------------------------------------------
|
|
405
|
+
// Private helpers
|
|
406
|
+
// -----------------------------------------------------------------------
|
|
407
|
+
/**
|
|
408
|
+
* Assert that config has been set (init() was called) and return it.
|
|
409
|
+
* Throws a clear error if called before init().
|
|
410
|
+
*/
|
|
411
|
+
requireConfig(method) {
|
|
412
|
+
if (!this.config) {
|
|
413
|
+
throw new Error(`StrategyEngine.${method}() called before init(). ` +
|
|
414
|
+
'The process shell must call init(config) first.');
|
|
415
|
+
}
|
|
416
|
+
return this.config;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
//# sourceMappingURL=strategy-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy-engine.js","sourceRoot":"","sources":["../src/strategy-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,EAAE,YAAY,EAAE,SAAS,EAAoB,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3G,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,yBAAyB,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AACxJ,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,sBAAsB,EACtB,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,YAAY,IAAI,oBAAoB,GACrC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC7H,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAE7F,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,UAAU,CAAC;IAE3B,wCAAwC;IAChC,MAAM,GAAwB,IAAI,CAAC;IAE3C,kEAAkE;IAC1D,QAAQ,GAA4B,IAAI,CAAC;IAEjD,sEAAsE;IAC9D,SAAS,GAAqC,EAAE,CAAC;IAEzD,8EAA8E;IACtE,qBAAqB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1D;;;OAGG;IACH,WAAW,CAAC,GAAqB;QAC/B,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC1B,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,0EAA0E;IAC1E,OAAO;IACP,0EAA0E;IAE1E,KAAK,CAAC,IAAI,CAAC,MAA4C;QACrD,oEAAoE;QACpE,sEAAsE;QACtE,IAAI,CAAC,MAAM,GAAG,MAAiC,CAAC;QAEhD,yBAAyB;QACzB,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE5B,6BAA6B;QAC7B,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE1B,gDAAgD;QAChD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,MAAM,mBAAmB,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAE5C,+CAA+C;QAC/C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3C,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,qDAAqD;QACrD,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjC,0CAA0C;QAC1C,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,0EAA0E;IAC1E,mBAAmB;IACnB,0EAA0E;IAE1E,KAAK,CAAC,gBAAgB;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;QAEtD,sEAAsE;QACtE,wEAAwE;QACxE,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CACV,qCAAqC,OAAO,CAAC,EAAE,eAAe,EAC9D,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CACV,+CAA+C,OAAO,CAAC,EAAE,eAAe,EACxE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,2FAA2F;QAC3F,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,4BAA4B,CAAC,EAAE,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CACV,6CAA6C,OAAO,CAAC,EAAE,eAAe,EACtE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,wDAAwD;QACxD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CACV,+CAA+C,OAAO,CAAC,EAAE,eAAe,EACxE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,uBAAuB,CAAC,EAAE,EAAE;oBAChC,eAAe,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;oBAClD,cAAc;iBACf,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CACV,iDAAiD,OAAO,CAAC,EAAE,eAAe,EAC1E,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,6BAA6B,CAAC,EAAE,EAAE;oBACtC,kBAAkB,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC;oBAChE,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAC3C,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC;oBAC1C,gBAAgB;iBACjB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CACV,gDAAgD,OAAO,CAAC,EAAE,eAAe,EACzE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,yCAAyC,EACzC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,QAAQ;IACR,0EAA0E;IAE1E,KAAK,CAAC,KAAK;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE3C,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,qBAAqB,EAAE,CAAC;QACxB,oBAAoB,EAAE,CAAC;QAEvB,kBAAkB;QAClB,MAAM,cAAc,EAAE,CAAC;QAEvB,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,KAAK,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YAC/D,IAAI,CAAC,EAAE,aAAa;gBAAE,yBAAyB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnB,KAAK,eAAe,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YACjE,IAAI,CAAC,EAAE,aAAa;gBAAE,gCAAgC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEnB,2CAA2C;QAC3C,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,MAAM,sBAAsB,EAAE,CAAC;QAE/B,gEAAgE;QAChE,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,YAAY,CAAC,KAAK,IAAI,EAAE;YACtB,MAAM,YAAY,EAAE,CAAC;YACrB,MAAM,sBAAsB,EAAE,CAAC;QACjC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,CAC3B,CAAC;QAEF,gFAAgF;QAChF,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,YAAY,CAAC,KAAK,IAAI,EAAE;YACtB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,CAC3B,CAAC;QAEF,sCAAsC;QACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,YAAY,CAAC,KAAK,IAAI,EAAE;YACtB,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAC7B,CAAC;QAEF,6CAA6C;QAC7C,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,YAAY,CAAC,KAAK,IAAI,EAAE;YACtB,MAAM,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC,EAAE,OAAO,EAAE,mBAAmB,CAAC,CACjC,CAAC;QAEF,2CAA2C;QAC3C,KAAK,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAE3D,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAED,0EAA0E;IAC1E,wBAAwB;IACxB,0EAA0E;IAElE,KAAK,CAAC,wBAAwB,CAAC,MAAoB;QACzD,8DAA8D;QAC9D,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,0CAA0C;gBAC1C,IAAI,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC/D,QAAQ,GAAG,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;oBACrE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;gBACvD,CAAC;gBAED,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC5D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,MAAM,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACpD,GAAG,CAAC;wBACJ,eAAe,EAAE,EAAE;qBACpB,CAAC,CAAC,CAAC,CAAC;oBACL,2CAA2C;oBAC3C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;gBACxF,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,0DAA0D,OAAO,CAAC,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YACjH,CAAC;QACH,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,OAAO;IACP,0EAA0E;IAE1E,IAAI;QACF,2BAA2B;QAC3B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,iCAAiC;QACjC,aAAa,EAAE,CAAC;IAClB,CAAC;IAED,0EAA0E;IAC1E,WAAW;IACX,0EAA0E;IAE1E,KAAK,CAAC,QAAQ;QACZ,4CAA4C;QAC5C,MAAM,aAAa,EAAE,CAAC;QAEtB,qEAAqE;QACrE,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAC;QACzC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,IAAI,sBAAsB,CAAC,CAAC;YAC3D,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;gBAC/B,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;oBACd,IAAI,CAAC;wBACH,MAAM,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnC,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,IAAI,CACV,qCAAqC,KAAK,CAAC,GAAG,MAAO,GAAa,CAAC,OAAO,EAAE,CAC7E,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,0DAA0D;QAC1D,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACzB,yEAAyE;YACzE,MAAM,aAAa,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpE,UAAU,EAAE,EAAE;gBACd,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC,CAAC,CAAC,CAAC;YAEJ,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,CAAC,IAAI,2BAA2B,CAAC,CAAC;YACxE,iBAAiB,EAAE,CAAC;YAEpB,0DAA0D;YAC1D,MAAM,OAAO,CAAC,UAAU,CACtB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAChE,CAAC;YAEF,gEAAgE;YAChE,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,IAAI,CAAC;wBACH,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;oBACzD,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,IAAI,CACV,0BAA0B,IAAI,CAAC,YAAY,MAAO,GAAa,CAAC,OAAO,EAAE,CAC1E,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,0EAA0E;YAC1E,MAAM,cAAc,GAAG,cAAc,EAAE,CAAC;YACxC,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CACT,kBAAkB,cAAc,CAAC,IAAI,oCAAoC,CAC1E,CAAC;gBACF,MAAM,OAAO,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;qBACzC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC;qBACpC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACZ,SAAS,CACP,GAAG,EAAE,CACH,aAAa,CAAC,IAAI,CAAC,aAAc,EAAE;oBACjC,MAAM,EAAE,QAAQ;oBAChB,WAAW,EACT,mDAAmD;oBACrD,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACnC,CAAC,EACJ;oBACE,WAAW,EAAE,CAAC;oBACd,WAAW,EAAE,IAAI;oBACjB,KAAK,EAAE,oBAAoB,IAAI,CAAC,aAAa,EAAE;iBAChD,CACF,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CACd,OAAO,CAAC,IAAI,CACV,4BAA4B,IAAI,CAAC,aAAa,GAAG,EAChD,GAAa,CAAC,OAAO,CACvB,CACF,CACF,CAAC;gBACJ,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,0DAA0D;QAC1D,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;QACzC,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CACT,eAAe,aAAa,CAAC,IAAI,gCAAgC,CAClE,CAAC;YAEF,+CAA+C;YAC/C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;gBAChE,kBAAkB,EAAE,CAAC;YACvB,CAAC,EAAE,MAAM,CAAC,CAAC;YAEX,sBAAsB;YACtB,OAAO,gBAAgB,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5D,CAAC;YAED,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAED,sDAAsD;QACtD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAE1D,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IAED,0EAA0E;IAC1E,cAAc;IACd,0EAA0E;IAE1E,WAAW;QACT,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAEjD,2BAA2B;QAC3B,IAAI,MAAM,GAA2B,SAAS,CAAC;QAC/C,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACzB,MAAM,GAAG,WAAW,CAAC;QACvB,CAAC;QAED,gBAAgB;QAChB,MAAM,WAAW,GAAmC,EAAE,CAAC;QACvD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAC/C,CAAC;YACF,WAAW,CAAC,IAAI,CAAC;gBACf,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW;gBACX,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI;aAC1C,CAAC,CAAC;QACL,CAAC;QAED,MAAM,YAAY,GAAmC,EAAE,CAAC;QACxD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAChD,CAAC;YACF,YAAY,CAAC,IAAI,CAAC;gBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,WAAW;gBACX,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,MAAM;YACN,eAAe;YACf,OAAO,EAAE;gBACP,WAAW,EAAE,KAAK,CAAC,IAAI;gBACvB,kBAAkB,EAAE,MAAM,CAAC,IAAI;gBAC/B,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,YAAY;aACrB;SACF,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,mBAAmB;IACnB,0EAA0E;IAE1E,gBAAgB;QACd,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,uBAAuB,EAAE,CAAC;QAE5C,wEAAwE;QACxE,IAAI,qBAAqB,GAAG,CAAC,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,qBAAqB,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,qBAAqB,IAAI,MAAM,CAAC,IAAI,CAAC;QAErC,OAAO;YACL,qBAAqB;YACrB,eAAe,EAAE,SAAS,CAAC,IAAI;SAChC,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,kBAAkB;IAClB,0EAA0E;IAE1E;;;OAGG;IACK,aAAa,CAAC,MAAc;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,kBAAkB,MAAM,2BAA2B;gBACjD,iDAAiD,CACpD,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy executor - manages Agent Team lifecycle per strategy.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the per-delivery agent spawning model. When a strategy has
|
|
5
|
+
* an assigned agent role and queued deliveries, the executor spawns
|
|
6
|
+
* a single Agent Team (one lead agent process) scoped to the entire strategy.
|
|
7
|
+
*
|
|
8
|
+
* The lead agent:
|
|
9
|
+
* 1. Reads all deliveries + issues for the strategy
|
|
10
|
+
* 2. Builds a task DAG with dependencies
|
|
11
|
+
* 3. Spawns worker teammates to execute issues in parallel
|
|
12
|
+
* 4. Advances delivery stages as their issues complete
|
|
13
|
+
* 5. Terminates when all work is done; fresh team spawned for new work
|
|
14
|
+
*
|
|
15
|
+
* This module is the orchestration entry point. Pure logic is extracted to:
|
|
16
|
+
* - strategy-team-state.ts -- active teams map, config derivation
|
|
17
|
+
* - strategy-merge.ts -- branch merge logic
|
|
18
|
+
* - strategy-completion.ts -- post-execution completion handling
|
|
19
|
+
*/
|
|
20
|
+
import type { DaemonConfig, AgentRole, PipelineConfig } from './types.js';
|
|
21
|
+
import { type ResourceGovernor } from '@telora/daemon-core';
|
|
22
|
+
export { getActiveTeams, hasActiveTeam, getActiveTeamCount, } from './strategy-team-state.js';
|
|
23
|
+
export { mergeStrategyBranch, } from './strategy-merge.js';
|
|
24
|
+
export { handleTeamCompletion, advanceDeliveryStatuses, TERMINAL_DELIVERY_STATUSES, TEAM_WORK_STATUSES, } from './strategy-completion.js';
|
|
25
|
+
export type { TeamCompletionParams } from './strategy-completion.js';
|
|
26
|
+
/** Inject the resource governor for global concurrency limiting. */
|
|
27
|
+
export declare function initGovernor(gov: ResourceGovernor): void;
|
|
28
|
+
/**
|
|
29
|
+
* Generate branch name for strategy-level work.
|
|
30
|
+
*/
|
|
31
|
+
export declare function generateStrategyBranchName(role: AgentRole, strategyName: string, strategyId: string): string;
|
|
32
|
+
export interface SpawnStrategyTeamParams {
|
|
33
|
+
config: DaemonConfig;
|
|
34
|
+
strategyId: string;
|
|
35
|
+
strategyName: string;
|
|
36
|
+
role: AgentRole;
|
|
37
|
+
pipelineConfig: PipelineConfig | null;
|
|
38
|
+
readOnly?: boolean;
|
|
39
|
+
/** When true, skip the actionable-delivery guard and send the review directive after spawn. */
|
|
40
|
+
reviewMode?: boolean;
|
|
41
|
+
/** Previous Claude Code session ID for --resume support. */
|
|
42
|
+
lastClaudeSessionId?: string | null;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Spawn a strategy team to execute all deliveries in a strategy.
|
|
46
|
+
*
|
|
47
|
+
* Creates a single Agent Team (lead process) that reads all deliveries
|
|
48
|
+
* and issues, builds a task DAG, and coordinates worker execution.
|
|
49
|
+
*/
|
|
50
|
+
export declare function spawnStrategyTeam(params: SpawnStrategyTeamParams): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Terminate a strategy team.
|
|
53
|
+
*
|
|
54
|
+
* Sends a deactivation message via stdin (if open) before SIGTERM
|
|
55
|
+
* to allow the team lead to process the shutdown gracefully.
|
|
56
|
+
*/
|
|
57
|
+
export declare function terminateTeam(strategyId: string): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Wait for a team's process to exit (leave activeTeams).
|
|
60
|
+
*
|
|
61
|
+
* Polls activeTeams until the strategy is no longer present,
|
|
62
|
+
* which happens when handleTeamCompletion runs on the 'close' event.
|
|
63
|
+
* If the timeout expires, sends SIGKILL and waits briefly.
|
|
64
|
+
*
|
|
65
|
+
* @param strategyId - Strategy to wait for
|
|
66
|
+
* @param timeoutMs - Max wait time in ms (default 30s)
|
|
67
|
+
* @returns true if team exited within timeout, false if forced
|
|
68
|
+
*/
|
|
69
|
+
export declare function waitForTeamExit(strategyId: string, timeoutMs?: number): Promise<boolean>;
|
|
70
|
+
/**
|
|
71
|
+
* Terminate all active teams.
|
|
72
|
+
*/
|
|
73
|
+
export declare function terminateAllTeams(): void;
|
|
74
|
+
/**
|
|
75
|
+
* Detect strategies that have been deactivated (agent role removed)
|
|
76
|
+
* and shut down their active teams.
|
|
77
|
+
*/
|
|
78
|
+
export declare function detectDeactivatedStrategies(config: DaemonConfig): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Check active teams for newly completed deliveries and merge
|
|
81
|
+
* the strategy branch to integration incrementally.
|
|
82
|
+
*
|
|
83
|
+
* Called from the poll loop. For each active team, queries delivery
|
|
84
|
+
* statuses and triggers a merge when any delivery reaches verify/done
|
|
85
|
+
* that hasn't already been merged mid-flight.
|
|
86
|
+
*
|
|
87
|
+
* After processing merges, checks if ALL active deliveries are terminal
|
|
88
|
+
* and merged. If so, terminates the team proactively since no more work
|
|
89
|
+
* remains. The strategy stays active in the DB -- if new deliveries
|
|
90
|
+
* arrive later, the next poll cycle spawns a fresh team.
|
|
91
|
+
*/
|
|
92
|
+
export declare function checkAndMergeCompletedDeliveries(config: DaemonConfig): Promise<void>;
|
|
93
|
+
//# sourceMappingURL=strategy-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy-executor.d.ts","sourceRoot":"","sources":["../src/strategy-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EAET,cAAc,EACf,MAAM,YAAY,CAAC;AASpB,OAAO,EAA0D,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAapH,OAAO,EACL,cAAc,EACd,aAAa,EACb,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAmBrE,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAExD;AAqGD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAK5G;AAoCD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+FAA+F;IAC/F,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA0cf;AAID;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CA2CzD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAsB7F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CA6Ff"}
|