@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,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy team prompt variants.
|
|
3
|
+
*
|
|
4
|
+
* Contains functions that build non-planning prompt variants sent to
|
|
5
|
+
* active strategy teams: wake messages for new work delivery and
|
|
6
|
+
* review directives for code review sessions.
|
|
7
|
+
*
|
|
8
|
+
* Extracted from strategy-prompt-builder.ts for maintainability.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Build a wake message for an idle team when new work is available.
|
|
12
|
+
*
|
|
13
|
+
* The team already has role context and execution instructions from the
|
|
14
|
+
* initial prompt. This message is a lean update with just the new work.
|
|
15
|
+
*/
|
|
16
|
+
export function buildWakeMessage(deliveries, issues, knownDeliveryIds) {
|
|
17
|
+
const parts = [];
|
|
18
|
+
parts.push('## New Work Available');
|
|
19
|
+
parts.push('');
|
|
20
|
+
const actionableStatuses = new Set(['queued', 'coding']);
|
|
21
|
+
const actionableDeliveries = deliveries.filter(d => actionableStatuses.has(d.executionStatus ?? ''));
|
|
22
|
+
if (actionableDeliveries.length === 0) {
|
|
23
|
+
parts.push('No actionable deliveries at this time.');
|
|
24
|
+
parts.push('');
|
|
25
|
+
return parts.join('\n');
|
|
26
|
+
}
|
|
27
|
+
for (const delivery of actionableDeliveries) {
|
|
28
|
+
const isNew = !knownDeliveryIds.has(delivery.id);
|
|
29
|
+
const tag = isNew ? ' (NEW)' : '';
|
|
30
|
+
parts.push(`### ${delivery.name} [${delivery.executionStatus}]${tag}`);
|
|
31
|
+
parts.push(`**Delivery ID:** ${delivery.id}`);
|
|
32
|
+
if (delivery.description) {
|
|
33
|
+
parts.push(`**Description:** ${delivery.description}`);
|
|
34
|
+
}
|
|
35
|
+
// Compact issue listing
|
|
36
|
+
const deliveryIssues = issues.filter(i => i.deliveryId === delivery.id);
|
|
37
|
+
const actionableIssues = deliveryIssues.filter(i => i.issueType !== 'Context Group');
|
|
38
|
+
if (actionableIssues.length > 0) {
|
|
39
|
+
const statusCounts = new Map();
|
|
40
|
+
for (const issue of actionableIssues) {
|
|
41
|
+
statusCounts.set(issue.status, (statusCounts.get(issue.status) ?? 0) + 1);
|
|
42
|
+
}
|
|
43
|
+
const countParts = [];
|
|
44
|
+
for (const s of ['To Do', 'In Progress', 'Done', 'Blocked', 'In Review']) {
|
|
45
|
+
const count = statusCounts.get(s);
|
|
46
|
+
if (count !== undefined) {
|
|
47
|
+
countParts.push(`${count} ${s}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
parts.push(`**Issues (${countParts.join(', ')}):**`);
|
|
51
|
+
}
|
|
52
|
+
const wakeContextGroups = deliveryIssues.filter(i => i.issueType === 'Context Group');
|
|
53
|
+
for (const issue of deliveryIssues) {
|
|
54
|
+
if (issue.issueType === 'Context Group') {
|
|
55
|
+
const children = deliveryIssues.filter(i => i.parentIssueId === issue.id);
|
|
56
|
+
const depsSuffix = issue.dependsOn && issue.dependsOn.length > 0
|
|
57
|
+
? ` [depends on: ${issue.dependsOn.map(depId => {
|
|
58
|
+
const depCg = wakeContextGroups.find(cg => cg.id === depId);
|
|
59
|
+
return depCg ? `"${depCg.title}"` : depId;
|
|
60
|
+
}).join(', ')}]`
|
|
61
|
+
: '';
|
|
62
|
+
if (children.length > 0) {
|
|
63
|
+
const childSummaries = children.map(c => `${c.key} (${c.status})`).join(', ');
|
|
64
|
+
parts.push(` Context Group: "${issue.title}"${depsSuffix} -- children: ${childSummaries}`);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
parts.push(` Context Group: "${issue.title}"${depsSuffix}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else if (!issue.parentIssueId) {
|
|
71
|
+
parts.push(` - ${issue.key}: ${issue.title} (${issue.status})`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
parts.push('');
|
|
75
|
+
}
|
|
76
|
+
parts.push('Do NOT poll for new deliveries. The daemon will send them to you directly.');
|
|
77
|
+
parts.push('');
|
|
78
|
+
return parts.join('\n');
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Build a review directive for an active team.
|
|
82
|
+
*
|
|
83
|
+
* Sent via stdin when a user clicks "Review N" or when auto-review
|
|
84
|
+
* is triggered after all deliveries reach verify. The team lead
|
|
85
|
+
* examines code changes against scope and creates remediation issues
|
|
86
|
+
* or a new remediation delivery.
|
|
87
|
+
*/
|
|
88
|
+
export function buildReviewDirective(deliveries, issues) {
|
|
89
|
+
const parts = [];
|
|
90
|
+
parts.push('## Review Requested');
|
|
91
|
+
parts.push('');
|
|
92
|
+
parts.push('Review all deliveries currently in Verify status. For each delivery,');
|
|
93
|
+
parts.push('examine the code changes against the delivery scope (description and');
|
|
94
|
+
parts.push('acceptance criteria) and verify completeness.');
|
|
95
|
+
parts.push('');
|
|
96
|
+
for (const delivery of deliveries) {
|
|
97
|
+
parts.push(`### ${delivery.name}`);
|
|
98
|
+
parts.push(`**Delivery ID:** ${delivery.id}`);
|
|
99
|
+
if (delivery.description) {
|
|
100
|
+
parts.push(`**Description:** ${delivery.description}`);
|
|
101
|
+
}
|
|
102
|
+
if (delivery.acceptanceCriteria) {
|
|
103
|
+
parts.push(`**Acceptance Criteria:** ${delivery.acceptanceCriteria}`);
|
|
104
|
+
}
|
|
105
|
+
// List issues for this delivery
|
|
106
|
+
const deliveryIssues = issues.filter(i => i.deliveryId === delivery.id);
|
|
107
|
+
if (deliveryIssues.length > 0) {
|
|
108
|
+
parts.push('**Issues:**');
|
|
109
|
+
for (const issue of deliveryIssues) {
|
|
110
|
+
parts.push(` - ${issue.key}: ${issue.title} (${issue.status})`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
parts.push('');
|
|
114
|
+
}
|
|
115
|
+
parts.push('## Review Instructions');
|
|
116
|
+
parts.push('');
|
|
117
|
+
parts.push('1. For each verify delivery, review the git diff to understand what changed');
|
|
118
|
+
parts.push('2. Compare changes against the acceptance criteria and delivery description');
|
|
119
|
+
parts.push('3. Check for gaps: missing functionality, untested edge cases, incomplete work');
|
|
120
|
+
parts.push('4. Check for quality: code style, error handling, documentation');
|
|
121
|
+
parts.push('');
|
|
122
|
+
parts.push('## Output Instructions');
|
|
123
|
+
parts.push('');
|
|
124
|
+
parts.push('- **For issues found within a delivery:** Create new issues on that delivery');
|
|
125
|
+
parts.push(' using `telora_product_issue_create` with the delivery ID. Set status to "To Do".');
|
|
126
|
+
parts.push('- **For cross-cutting gaps** that span multiple deliveries: Create a new');
|
|
127
|
+
parts.push(' remediation delivery using `telora_product_delivery_create` and add issues to it.');
|
|
128
|
+
parts.push('- If no issues are found, report that the deliveries pass review.');
|
|
129
|
+
parts.push('');
|
|
130
|
+
parts.push('After review is complete, summarize findings and wait for further instructions.');
|
|
131
|
+
parts.push('');
|
|
132
|
+
return parts.join('\n');
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=team-prompt-variants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-prompt-variants.js","sourceRoot":"","sources":["../src/team-prompt-variants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Team spawning logic for strategy execution.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from strategy-executor.ts. Contains the core spawnStrategyTeam
|
|
5
|
+
* function decomposed into phases: worktree setup, context fetching, session
|
|
6
|
+
* creation, and process spawning.
|
|
7
|
+
*/
|
|
8
|
+
import { type WriteStream } from 'node:fs';
|
|
9
|
+
import type { DaemonConfig, AgentRole, PipelineConfig } from './types.js';
|
|
10
|
+
import { type ResourceGovernor } from '@telora/daemon-core';
|
|
11
|
+
/** Inject the resource governor for global concurrency limiting. */
|
|
12
|
+
export declare function initGovernor(gov: ResourceGovernor): void;
|
|
13
|
+
/** Get the current resource governor (for use by session-lifecycle). */
|
|
14
|
+
export declare function getGovernor(): ResourceGovernor | null;
|
|
15
|
+
/**
|
|
16
|
+
* Generate branch name for strategy-level work.
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateStrategyBranchName(role: AgentRole, strategyName: string, strategyId: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Build Claude Code CLI arguments for the team lead.
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildTeamLeadArgs(config: DaemonConfig, pipelineConfig: PipelineConfig | null, reviewMode?: boolean, resumeSessionId?: string | null): string[];
|
|
23
|
+
export interface SpawnStrategyTeamParams {
|
|
24
|
+
config: DaemonConfig;
|
|
25
|
+
strategyId: string;
|
|
26
|
+
strategyName: string;
|
|
27
|
+
role: AgentRole;
|
|
28
|
+
pipelineConfig: PipelineConfig | null;
|
|
29
|
+
readOnly?: boolean;
|
|
30
|
+
/** When true, skip the actionable-delivery guard and send the review directive after spawn. */
|
|
31
|
+
reviewMode?: boolean;
|
|
32
|
+
/** Previous Claude Code session ID for --resume support. */
|
|
33
|
+
lastClaudeSessionId?: string | null;
|
|
34
|
+
}
|
|
35
|
+
/** Info about log file streams opened for a team lead process. */
|
|
36
|
+
export interface LogStreams {
|
|
37
|
+
stdoutLogStream: WriteStream;
|
|
38
|
+
stderrStream: WriteStream;
|
|
39
|
+
jsonlStream: WriteStream;
|
|
40
|
+
stdoutPath: string;
|
|
41
|
+
stderrPath: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Spawn a strategy team to execute all deliveries in a strategy.
|
|
45
|
+
*
|
|
46
|
+
* Creates a single Agent Team (lead process) that reads all deliveries
|
|
47
|
+
* and issues, builds a task DAG, and coordinates worker execution.
|
|
48
|
+
*/
|
|
49
|
+
export declare function spawnStrategyTeam(params: SpawnStrategyTeamParams): Promise<void>;
|
|
50
|
+
//# sourceMappingURL=team-spawner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-spawner.d.ts","sourceRoot":"","sources":["../src/team-spawner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAA4C,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAErF,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EAET,cAAc,EACf,MAAM,YAAY,CAAC;AAQpB,OAAO,EAAE,KAAK,gBAAgB,EAAe,MAAM,qBAAqB,CAAC;AAgBzE,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAExD;AAED,wEAAwE;AACxE,wBAAgB,WAAW,IAAI,gBAAgB,GAAG,IAAI,CAErD;AAID;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAK5G;AAGD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI,EAAE,UAAU,UAAQ,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,CA4B5J;AAED,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;AAuGD,kEAAkE;AAClE,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,WAAW,CAAC;IAC7B,YAAY,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAqFD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA0Nf"}
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Team spawning logic for strategy execution.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from strategy-executor.ts. Contains the core spawnStrategyTeam
|
|
5
|
+
* function decomposed into phases: worktree setup, context fetching, session
|
|
6
|
+
* creation, and process spawning.
|
|
7
|
+
*/
|
|
8
|
+
import { spawn } from 'node:child_process';
|
|
9
|
+
import { mkdirSync, existsSync, createWriteStream } from 'node:fs';
|
|
10
|
+
import { join, resolve } from 'node:path';
|
|
11
|
+
import { createSession, updateSession, } from './supabase.js';
|
|
12
|
+
import { createWorktree, runGitSync } from './git.js';
|
|
13
|
+
import { installAuditPreCommitHook } from './audit-hooks.js';
|
|
14
|
+
import { getStrategyWorktree, setStrategyWorktree } from './strategy-worktree-state.js';
|
|
15
|
+
import { sendMessage } from '@telora/daemon-core';
|
|
16
|
+
import { recordActivity } from './heartbeat.js';
|
|
17
|
+
import { buildStrategyTeamPrompt, buildReviewDirective } from './strategy-prompt-builder.js';
|
|
18
|
+
import { getStrategyDeliveries, getStrategyIssues, getProductContextForStrategy, getProductDeploymentProfileSnapshot } from './queries/strategies.js';
|
|
19
|
+
import { buildSpawnEnvironment } from './spawn-environment.js';
|
|
20
|
+
import { sanitizeGitSegment } from './git-utils.js';
|
|
21
|
+
import { getActiveTeams, deriveExecutionConfig, } from './strategy-team-state.js';
|
|
22
|
+
import { setupOutputMonitoring } from './output-monitor.js';
|
|
23
|
+
// ── Resource governor (optional, injected by StrategyEngine) ─────────
|
|
24
|
+
let governor = null;
|
|
25
|
+
/** Inject the resource governor for global concurrency limiting. */
|
|
26
|
+
export function initGovernor(gov) {
|
|
27
|
+
governor = gov;
|
|
28
|
+
}
|
|
29
|
+
/** Get the current resource governor (for use by session-lifecycle). */
|
|
30
|
+
export function getGovernor() {
|
|
31
|
+
return governor;
|
|
32
|
+
}
|
|
33
|
+
// ── Team spawning helpers ─────────────────────────────────────────────
|
|
34
|
+
/**
|
|
35
|
+
* Generate branch name for strategy-level work.
|
|
36
|
+
*/
|
|
37
|
+
export function generateStrategyBranchName(role, strategyName, strategyId) {
|
|
38
|
+
const sanitizedRoleName = sanitizeGitSegment(role.name);
|
|
39
|
+
const shortId = strategyId.slice(0, 8);
|
|
40
|
+
const sanitizedStrategyName = sanitizeGitSegment(strategyName);
|
|
41
|
+
return `agent/${sanitizedRoleName}/${sanitizedStrategyName}-${shortId}`;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Build Claude Code CLI arguments for the team lead.
|
|
45
|
+
*/
|
|
46
|
+
export function buildTeamLeadArgs(config, pipelineConfig, reviewMode = false, resumeSessionId) {
|
|
47
|
+
const args = [];
|
|
48
|
+
// --resume must come early, before --input-format stream-json
|
|
49
|
+
if (resumeSessionId) {
|
|
50
|
+
args.push('--resume', resumeSessionId);
|
|
51
|
+
}
|
|
52
|
+
args.push('--dangerously-skip-permissions');
|
|
53
|
+
args.push('--setting-sources', 'project,local');
|
|
54
|
+
args.push('--input-format', 'stream-json');
|
|
55
|
+
args.push('--output-format', 'stream-json');
|
|
56
|
+
args.push('--verbose');
|
|
57
|
+
// Enable in-process teammate mode for the team lead
|
|
58
|
+
args.push('--teammate-mode', 'in-process');
|
|
59
|
+
if (config.mcpConfigPath) {
|
|
60
|
+
const absoluteMcpPath = resolve(config.mcpConfigPath);
|
|
61
|
+
args.push('--mcp-config', absoluteMcpPath);
|
|
62
|
+
}
|
|
63
|
+
// Reviews always use Sonnet; otherwise honour pipeline config
|
|
64
|
+
const model = reviewMode ? 'claude-sonnet-4-6' : pipelineConfig?.model;
|
|
65
|
+
if (model) {
|
|
66
|
+
args.push('--model', model);
|
|
67
|
+
}
|
|
68
|
+
return args;
|
|
69
|
+
}
|
|
70
|
+
// ── Phase functions ───────────────────────────────────────────────────
|
|
71
|
+
/**
|
|
72
|
+
* Set up or reuse a worktree for the strategy.
|
|
73
|
+
* Returns the worktree path, or null if setup fails.
|
|
74
|
+
*/
|
|
75
|
+
async function setupWorktree(config, strategyId, strategyName, branchName, readOnly) {
|
|
76
|
+
const existingWorktree = getStrategyWorktree(strategyId);
|
|
77
|
+
if (existingWorktree) {
|
|
78
|
+
const worktreePath = existingWorktree.worktreePath;
|
|
79
|
+
// Rebase onto integration to pick up latest changes from other strategies
|
|
80
|
+
const rebaseResult = runGitSync(['rebase', config.integrationBranch], worktreePath);
|
|
81
|
+
if (!rebaseResult.success) {
|
|
82
|
+
runGitSync(['rebase', '--abort'], worktreePath);
|
|
83
|
+
console.warn(`[strategy-executor] Rebase failed for "${strategyName}", continuing with existing state`);
|
|
84
|
+
}
|
|
85
|
+
console.log(` Worktree (reused): ${worktreePath}`);
|
|
86
|
+
return worktreePath;
|
|
87
|
+
}
|
|
88
|
+
// Fallback: worktree doesn't exist yet (race condition or first poll)
|
|
89
|
+
console.warn(`[strategy-executor] No persistent worktree for "${strategyName}", creating inline`);
|
|
90
|
+
try {
|
|
91
|
+
const worktreePath = await createWorktree(config, branchName);
|
|
92
|
+
setStrategyWorktree(strategyId, {
|
|
93
|
+
strategyId,
|
|
94
|
+
strategyName,
|
|
95
|
+
worktreePath,
|
|
96
|
+
branchName,
|
|
97
|
+
createdAt: new Date(),
|
|
98
|
+
hasQaDevServer: false,
|
|
99
|
+
});
|
|
100
|
+
console.log(` Worktree (created inline): ${worktreePath}`);
|
|
101
|
+
// Install audit pre-commit hook for read-only strategies
|
|
102
|
+
if (readOnly) {
|
|
103
|
+
installAuditPreCommitHook(worktreePath);
|
|
104
|
+
console.log(` Installed audit pre-commit hook (read-only mode)`);
|
|
105
|
+
}
|
|
106
|
+
return worktreePath;
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
console.error(`[strategy-executor] Failed to create worktree for strategy "${strategyName}":`, err instanceof Error ? err.message : String(err));
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Fetch all strategy context: deliveries, issues, product context, deployment profile.
|
|
115
|
+
*/
|
|
116
|
+
async function fetchStrategyContext(config, strategyId, _strategyName) {
|
|
117
|
+
const [deliveries, issues, productContextDocs, deploymentProfileSnapshot] = await Promise.all([
|
|
118
|
+
getStrategyDeliveries(strategyId),
|
|
119
|
+
getStrategyIssues(strategyId),
|
|
120
|
+
getProductContextForStrategy(config.productId, strategyId),
|
|
121
|
+
getProductDeploymentProfileSnapshot(config.productId).catch((err) => {
|
|
122
|
+
console.debug(`[strategy-executor] Could not fetch deployment profile snapshot (non-fatal):`, err.message);
|
|
123
|
+
return null;
|
|
124
|
+
}),
|
|
125
|
+
]);
|
|
126
|
+
return { deliveries, issues, productContextDocs, deploymentProfileSnapshot };
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Create a session record for the team lead.
|
|
130
|
+
* Returns the session, or null if creation fails.
|
|
131
|
+
*/
|
|
132
|
+
async function createTeamSession(config, role, strategyId, branchName, strategyName, reviewMode = false) {
|
|
133
|
+
try {
|
|
134
|
+
const session = await createSession({
|
|
135
|
+
organizationId: config.organizationId,
|
|
136
|
+
roleId: role.id,
|
|
137
|
+
issueId: null,
|
|
138
|
+
strategyId,
|
|
139
|
+
branchName,
|
|
140
|
+
sessionType: reviewMode ? 'review' : 'coding',
|
|
141
|
+
});
|
|
142
|
+
return session;
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
console.error(`[strategy-executor] Failed to create session for strategy "${strategyName}":`, err.message);
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Open log file streams for the team lead process.
|
|
151
|
+
*/
|
|
152
|
+
function openLogStreams(config, branchName, strategyName) {
|
|
153
|
+
// Ensure log directory exists
|
|
154
|
+
if (!existsSync(config.logDir)) {
|
|
155
|
+
mkdirSync(config.logDir, { recursive: true, mode: 0o700 });
|
|
156
|
+
}
|
|
157
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
158
|
+
const logPrefix = `strategy-${branchName.replace(/\//g, '-')}-${timestamp}`;
|
|
159
|
+
const stdoutPath = join(config.logDir, `${logPrefix}.stdout.log`);
|
|
160
|
+
const stderrPath = join(config.logDir, `${logPrefix}.stderr.log`);
|
|
161
|
+
const jsonlPath = join(config.logDir, `${logPrefix}.stream.jsonl`);
|
|
162
|
+
const stdoutLogStream = createWriteStream(stdoutPath, { mode: 0o600 });
|
|
163
|
+
const stderrStream = createWriteStream(stderrPath, { mode: 0o600 });
|
|
164
|
+
const jsonlStream = createWriteStream(jsonlPath, { mode: 0o600 });
|
|
165
|
+
// Attach error handlers to prevent unhandled 'error' events from crashing the daemon
|
|
166
|
+
stdoutLogStream.on('error', (err) => {
|
|
167
|
+
console.warn(`[strategy-executor] stdout log stream error for "${strategyName}": ${err.message}`);
|
|
168
|
+
});
|
|
169
|
+
stderrStream.on('error', (err) => {
|
|
170
|
+
console.warn(`[strategy-executor] stderr log stream error for "${strategyName}": ${err.message}`);
|
|
171
|
+
});
|
|
172
|
+
jsonlStream.on('error', (err) => {
|
|
173
|
+
console.warn(`[strategy-executor] jsonl log stream error for "${strategyName}": ${err.message}`);
|
|
174
|
+
});
|
|
175
|
+
return { stdoutLogStream, stderrStream, jsonlStream, stdoutPath, stderrPath };
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Build args, env, acquire governor slot, and spawn the Claude Code process.
|
|
179
|
+
* Returns the child process, or null if governor denied the slot.
|
|
180
|
+
*/
|
|
181
|
+
async function buildAndSpawnProcess(config, pipelineConfig, reviewMode, resumeId, sessionId, strategyId, strategyName, worktreePath) {
|
|
182
|
+
const args = buildTeamLeadArgs(config, pipelineConfig, reviewMode, resumeId);
|
|
183
|
+
if (resumeId) {
|
|
184
|
+
console.log(`[strategy-executor] Resuming Claude session ${resumeId} for "${strategyName}"`);
|
|
185
|
+
}
|
|
186
|
+
const spawnEnv = buildSpawnEnvironment(config, {
|
|
187
|
+
orgId: config.organizationId,
|
|
188
|
+
strategyId,
|
|
189
|
+
sessionId,
|
|
190
|
+
});
|
|
191
|
+
// Acquire governor slot (if governor is configured)
|
|
192
|
+
if (governor) {
|
|
193
|
+
try {
|
|
194
|
+
await governor.acquireSlot('strategy');
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
console.warn(`[strategy-executor] Governor denied slot for "${strategyName}":`, err.message);
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Spawn the team lead process
|
|
202
|
+
const proc = spawn(config.claudeCodePath, args, {
|
|
203
|
+
cwd: worktreePath,
|
|
204
|
+
env: spawnEnv,
|
|
205
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
206
|
+
});
|
|
207
|
+
return proc;
|
|
208
|
+
}
|
|
209
|
+
// ── Main spawn function ───────────────────────────────────────────────
|
|
210
|
+
/**
|
|
211
|
+
* Spawn a strategy team to execute all deliveries in a strategy.
|
|
212
|
+
*
|
|
213
|
+
* Creates a single Agent Team (lead process) that reads all deliveries
|
|
214
|
+
* and issues, builds a task DAG, and coordinates worker execution.
|
|
215
|
+
*/
|
|
216
|
+
export async function spawnStrategyTeam(params) {
|
|
217
|
+
const { config, strategyId, strategyName, role, pipelineConfig, readOnly = false, reviewMode = false, lastClaudeSessionId } = params;
|
|
218
|
+
const activeTeams = getActiveTeams();
|
|
219
|
+
// Prevent double-spawn
|
|
220
|
+
if (activeTeams.has(strategyId)) {
|
|
221
|
+
console.warn(`[strategy-executor] Team already active for strategy "${strategyName}", skipping spawn`);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
const executionConfig = deriveExecutionConfig(pipelineConfig);
|
|
225
|
+
const branchName = generateStrategyBranchName(role, strategyName, strategyId);
|
|
226
|
+
// Initialize team state
|
|
227
|
+
const teamState = {
|
|
228
|
+
strategyId,
|
|
229
|
+
strategyName,
|
|
230
|
+
roleId: role.id,
|
|
231
|
+
roleName: role.name,
|
|
232
|
+
organizationId: config.organizationId,
|
|
233
|
+
productId: config.productId,
|
|
234
|
+
executionConfig,
|
|
235
|
+
pipelineConfig,
|
|
236
|
+
startedAt: new Date(),
|
|
237
|
+
phase: 'initializing',
|
|
238
|
+
knownDeliveryIds: new Set(),
|
|
239
|
+
mergedDeliveryIds: new Set(),
|
|
240
|
+
shutdownReason: null,
|
|
241
|
+
deliveryStageIds: new Map(),
|
|
242
|
+
leadSessionId: null,
|
|
243
|
+
leadPid: null,
|
|
244
|
+
leadStdin: null,
|
|
245
|
+
branchName,
|
|
246
|
+
worktreePath: null,
|
|
247
|
+
resolvingMergeConflict: false,
|
|
248
|
+
readOnly,
|
|
249
|
+
reviewMode,
|
|
250
|
+
completionDetector: null,
|
|
251
|
+
claudeSessionId: null,
|
|
252
|
+
};
|
|
253
|
+
activeTeams.set(strategyId, teamState);
|
|
254
|
+
console.log(`[strategy-executor] Spawning team for strategy "${strategyName}"${readOnly ? ' [READ-ONLY]' : ''}`);
|
|
255
|
+
console.log(` Role: ${role.name}`);
|
|
256
|
+
console.log(` Model: ${reviewMode ? 'claude-sonnet-4-6' : (pipelineConfig?.model ?? '(CLI default)')}`);
|
|
257
|
+
console.log(` Max workers: ${executionConfig.maxWorkers}`);
|
|
258
|
+
console.log(` Branch: ${branchName}`);
|
|
259
|
+
// Fetch all deliveries, issues, product context, and deployment profile for the strategy
|
|
260
|
+
let deliveries;
|
|
261
|
+
let issues;
|
|
262
|
+
let productContextDocs;
|
|
263
|
+
let deploymentProfileSnapshot;
|
|
264
|
+
try {
|
|
265
|
+
({ deliveries, issues, productContextDocs, deploymentProfileSnapshot } =
|
|
266
|
+
await fetchStrategyContext(config, strategyId, strategyName));
|
|
267
|
+
}
|
|
268
|
+
catch (err) {
|
|
269
|
+
console.error(`[strategy-executor] Failed to fetch context for strategy "${strategyName}":`, err.message);
|
|
270
|
+
activeTeams.delete(strategyId);
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
// Pre-spawn guard: enforce rank-ordered execution.
|
|
274
|
+
// Walk deliveries in priority_rank order (already sorted by API).
|
|
275
|
+
// A delivery is actionable only if all lower-ranked deliveries are non-blocking.
|
|
276
|
+
// Skipped in review mode -- review teams are spawned for verify-only strategies.
|
|
277
|
+
const nonBlockingStatuses = new Set(['done', 'cancelled', 'verify', 'in_review', 'iterating']);
|
|
278
|
+
const actionableStatuses = new Set(['queued', 'coding']);
|
|
279
|
+
let nextActionable = null;
|
|
280
|
+
if (!reviewMode) {
|
|
281
|
+
for (const d of deliveries) {
|
|
282
|
+
const status = d.executionStatus ?? '';
|
|
283
|
+
if (nonBlockingStatuses.has(status))
|
|
284
|
+
continue;
|
|
285
|
+
if (actionableStatuses.has(status)) {
|
|
286
|
+
nextActionable = d;
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
// Blocking status (planning, iterating, paused) prevents subsequent deliveries
|
|
290
|
+
console.log(`[strategy-executor] Delivery "${d.name}" (rank ${d.priorityRank}) ` +
|
|
291
|
+
`is in "${status}" state -- blocking subsequent deliveries in strategy "${strategyName}"`);
|
|
292
|
+
}
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
if (!nextActionable || !actionableStatuses.has(nextActionable.executionStatus ?? '')) {
|
|
296
|
+
console.log(`[strategy-executor] No actionable (queued/coding) deliveries for strategy "${strategyName}" -- skipping spawn`);
|
|
297
|
+
activeTeams.delete(strategyId);
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
const actionableDeliveries = reviewMode
|
|
302
|
+
? deliveries.filter(d => d.executionStatus === 'in_review')
|
|
303
|
+
: deliveries.filter(d => actionableStatuses.has(d.executionStatus ?? ''));
|
|
304
|
+
// Track known deliveries, pre-populate already-completed ones
|
|
305
|
+
for (const d of deliveries) {
|
|
306
|
+
teamState.knownDeliveryIds.add(d.id);
|
|
307
|
+
teamState.deliveryStageIds.set(d.id, d.currentWorkflowStageId);
|
|
308
|
+
if (d.executionStatus === 'verify' || d.executionStatus === 'in_review' || d.executionStatus === 'done') {
|
|
309
|
+
teamState.mergedDeliveryIds.add(d.id);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
console.log(` Deliveries: ${deliveries.length} (${actionableDeliveries.length} queued)`);
|
|
313
|
+
console.log(` Issues: ${issues.length}`);
|
|
314
|
+
// Set up worktree
|
|
315
|
+
const worktreePath = await setupWorktree(config, strategyId, strategyName, branchName, readOnly);
|
|
316
|
+
if (!worktreePath) {
|
|
317
|
+
activeTeams.delete(strategyId);
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
teamState.worktreePath = worktreePath;
|
|
321
|
+
// Create session record for the team lead
|
|
322
|
+
const session = await createTeamSession(config, role, strategyId, branchName, strategyName, reviewMode);
|
|
323
|
+
if (!session) {
|
|
324
|
+
// Worktree is strategy-owned and persists even if session creation fails
|
|
325
|
+
activeTeams.delete(strategyId);
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
teamState.leadSessionId = session.id;
|
|
329
|
+
recordActivity();
|
|
330
|
+
// Build the team lead prompt with full strategy context
|
|
331
|
+
const prompt = buildStrategyTeamPrompt(role, {
|
|
332
|
+
strategyId,
|
|
333
|
+
strategyName,
|
|
334
|
+
organizationId: config.organizationId,
|
|
335
|
+
productId: config.productId,
|
|
336
|
+
deliveries,
|
|
337
|
+
issues,
|
|
338
|
+
executionConfig,
|
|
339
|
+
pipelineConfig,
|
|
340
|
+
productContextDocs,
|
|
341
|
+
deploymentProfileSnapshot,
|
|
342
|
+
readOnly,
|
|
343
|
+
});
|
|
344
|
+
// Open log streams
|
|
345
|
+
const logStreams = openLogStreams(config, branchName, strategyName);
|
|
346
|
+
// Build args and env, acquire governor slot, spawn process
|
|
347
|
+
const resumeId = reviewMode ? null : (lastClaudeSessionId ?? null);
|
|
348
|
+
// Update session to starting with log paths
|
|
349
|
+
await updateSession(session.id, {
|
|
350
|
+
status: 'starting',
|
|
351
|
+
started_at: new Date().toISOString(),
|
|
352
|
+
stdout_path: logStreams.stdoutPath,
|
|
353
|
+
stderr_path: logStreams.stderrPath,
|
|
354
|
+
});
|
|
355
|
+
const proc = await buildAndSpawnProcess(config, pipelineConfig, reviewMode, resumeId, session.id, strategyId, strategyName, worktreePath);
|
|
356
|
+
if (!proc) {
|
|
357
|
+
activeTeams.delete(strategyId);
|
|
358
|
+
logStreams.stdoutLogStream.end();
|
|
359
|
+
logStreams.stderrStream.end();
|
|
360
|
+
logStreams.jsonlStream.end();
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
teamState.leadPid = proc.pid ?? null;
|
|
364
|
+
teamState.leadStdin = proc.stdin;
|
|
365
|
+
teamState.phase = 'executing';
|
|
366
|
+
// Set up output monitoring (stream parsing, activity tracking, event logging)
|
|
367
|
+
const { completionDetector, activityTracker } = setupOutputMonitoring({
|
|
368
|
+
proc,
|
|
369
|
+
teamState,
|
|
370
|
+
strategyId,
|
|
371
|
+
strategyName,
|
|
372
|
+
sessionId: session.id,
|
|
373
|
+
logStreams,
|
|
374
|
+
});
|
|
375
|
+
// Stderr pipes to log
|
|
376
|
+
proc.stderr?.pipe(logStreams.stderrStream);
|
|
377
|
+
// Send prompt via stdin
|
|
378
|
+
sendMessage(proc.stdin, prompt);
|
|
379
|
+
// In review mode, immediately send the review directive after the initial prompt
|
|
380
|
+
if (reviewMode) {
|
|
381
|
+
const reviewDeliveries = deliveries.filter(d => d.executionStatus === 'in_review');
|
|
382
|
+
if (reviewDeliveries.length > 0) {
|
|
383
|
+
const reviewDirective = buildReviewDirective(reviewDeliveries, issues);
|
|
384
|
+
sendMessage(proc.stdin, reviewDirective);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
// Update session to running
|
|
388
|
+
await updateSession(session.id, {
|
|
389
|
+
status: 'running',
|
|
390
|
+
pid: proc.pid,
|
|
391
|
+
});
|
|
392
|
+
console.log(`[strategy-executor] Team lead spawned for "${strategyName}" (PID: ${proc.pid}, session: ${session.id})${reviewMode ? ' [REVIEW MODE]' : ''}`);
|
|
393
|
+
// Set up session lifecycle handlers (completion, close, error)
|
|
394
|
+
const { attachSessionLifecycle } = await import('./session-lifecycle.js');
|
|
395
|
+
attachSessionLifecycle({
|
|
396
|
+
proc,
|
|
397
|
+
params,
|
|
398
|
+
teamState,
|
|
399
|
+
sessionId: session.id,
|
|
400
|
+
strategyId,
|
|
401
|
+
strategyName,
|
|
402
|
+
completionDetector,
|
|
403
|
+
activityTracker,
|
|
404
|
+
logStreams,
|
|
405
|
+
resumeId,
|
|
406
|
+
spawnedAt: Date.now(),
|
|
407
|
+
config,
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=team-spawner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-spawner.js","sourceRoot":"","sources":["../src/team-spawner.ts"],"names":[],"mappings":"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"}
|