@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,279 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA dev server spawn and health monitoring.
|
|
3
|
+
*
|
|
4
|
+
* Manages the lifecycle of Vite dev servers in QA worktrees:
|
|
5
|
+
* runs npm install, spawns `npm run dev` on an allocated port,
|
|
6
|
+
* streams stdout/stderr to log files, and provides stop/health helpers.
|
|
7
|
+
*/
|
|
8
|
+
import { spawn, execFileSync } from 'node:child_process';
|
|
9
|
+
import { mkdirSync, existsSync, createWriteStream, readFileSync } from 'node:fs';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
// ── Internal state ───────────────────────────────────────────────────
|
|
12
|
+
/**
|
|
13
|
+
* Track spawned child processes so stopQaDevServer can reference them.
|
|
14
|
+
* Keyed by PID.
|
|
15
|
+
*/
|
|
16
|
+
const activeProcesses = new Map();
|
|
17
|
+
// ── Constants ────────────────────────────────────────────────────────
|
|
18
|
+
/** Grace period in ms to wait for SIGTERM before escalating to SIGKILL. */
|
|
19
|
+
const STOP_GRACE_PERIOD_MS = 5000;
|
|
20
|
+
// ── Public API ───────────────────────────────────────────────────────
|
|
21
|
+
/**
|
|
22
|
+
* Install dependencies and spawn a dev server in a QA worktree.
|
|
23
|
+
*
|
|
24
|
+
* 1. Runs `npm install` synchronously in the worktree.
|
|
25
|
+
* 2. Spawns `npm run dev` with `PORT` env var set to the allocated port.
|
|
26
|
+
* 3. Pipes stdout/stderr to log files under `{logDir}/qa-{strategyId-prefix}/`.
|
|
27
|
+
* 4. Registers an on-exit handler that calls `onUnexpectedExit` if the
|
|
28
|
+
* process exits without an intentional stop.
|
|
29
|
+
*
|
|
30
|
+
* @returns The child process PID and log file paths.
|
|
31
|
+
* @throws If npm install fails or the dev server process cannot be spawned.
|
|
32
|
+
*/
|
|
33
|
+
export function startQaDevServer(options) {
|
|
34
|
+
const { config, strategyId, worktreePath, port, onUnexpectedExit } = options;
|
|
35
|
+
// ── 1. Run npm install ───────────────────────────────────────────
|
|
36
|
+
console.log(`[qa-dev-server] Running npm install in ${worktreePath}...`);
|
|
37
|
+
try {
|
|
38
|
+
execFileSync('npm', ['install'], {
|
|
39
|
+
cwd: worktreePath,
|
|
40
|
+
stdio: 'pipe',
|
|
41
|
+
timeout: 300_000, // 5 min timeout for install
|
|
42
|
+
});
|
|
43
|
+
console.log(`[qa-dev-server] npm install completed.`);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
47
|
+
throw new Error(`npm install failed in QA worktree: ${message}`);
|
|
48
|
+
}
|
|
49
|
+
// ── 2. Prepare log directory and files ───────────────────────────
|
|
50
|
+
const logSubDir = join(config.logDir, 'qa-' + strategyId.slice(0, 8));
|
|
51
|
+
if (!existsSync(logSubDir)) {
|
|
52
|
+
mkdirSync(logSubDir, { recursive: true, mode: 0o700 });
|
|
53
|
+
}
|
|
54
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
55
|
+
const stdoutPath = join(logSubDir, `dev-server-${timestamp}.stdout.log`);
|
|
56
|
+
const stderrPath = join(logSubDir, `dev-server-${timestamp}.stderr.log`);
|
|
57
|
+
const stdoutStream = createWriteStream(stdoutPath, { mode: 0o600 });
|
|
58
|
+
const stderrStream = createWriteStream(stderrPath, { mode: 0o600 });
|
|
59
|
+
// ── 3. Build QA Supabase env overrides ──────────────────────────
|
|
60
|
+
// The browser running in a remote QA session needs to reach the local
|
|
61
|
+
// Supabase instance via the daemon host's LAN IP, not 127.0.0.1.
|
|
62
|
+
// Replace the host portion of localSupabaseUrl with config.qaHost.
|
|
63
|
+
const qaSupabaseUrl = buildQaSupabaseUrl(config.localSupabaseUrl, config.qaHost);
|
|
64
|
+
const spawnEnv = {
|
|
65
|
+
...process.env,
|
|
66
|
+
VITE_LOCAL_SUPABASE_URL: qaSupabaseUrl,
|
|
67
|
+
VITE_USE_LOCAL_SUPABASE: 'true',
|
|
68
|
+
};
|
|
69
|
+
if (config.localSupabaseAnonKey) {
|
|
70
|
+
spawnEnv.VITE_LOCAL_SUPABASE_ANON_KEY = config.localSupabaseAnonKey;
|
|
71
|
+
}
|
|
72
|
+
console.log(`[qa-dev-server] QA Supabase URL: ${qaSupabaseUrl}`);
|
|
73
|
+
// ── 4. Spawn dev server ──────────────────────────────────────────
|
|
74
|
+
const framework = detectFramework(worktreePath);
|
|
75
|
+
const { command, args, extraEnv } = buildDevServerCommand(framework, port);
|
|
76
|
+
console.log(`[qa-dev-server] Detected framework: ${framework}. Spawning ${command} ${args.join(' ')} on port ${port} in ${worktreePath}...`);
|
|
77
|
+
const proc = spawn(command, args, {
|
|
78
|
+
cwd: worktreePath,
|
|
79
|
+
env: { ...spawnEnv, ...extraEnv },
|
|
80
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
81
|
+
detached: false,
|
|
82
|
+
});
|
|
83
|
+
if (!proc.pid) {
|
|
84
|
+
stdoutStream.destroy();
|
|
85
|
+
stderrStream.destroy();
|
|
86
|
+
throw new Error('Failed to spawn dev server process: no PID returned');
|
|
87
|
+
}
|
|
88
|
+
const pid = proc.pid;
|
|
89
|
+
activeProcesses.set(pid, proc);
|
|
90
|
+
// Pipe output to log files
|
|
91
|
+
proc.stdout?.pipe(stdoutStream);
|
|
92
|
+
proc.stderr?.pipe(stderrStream);
|
|
93
|
+
// ── 5. Set up exit handler ───────────────────────────────────────
|
|
94
|
+
// Track whether the stop was intentional (via stopQaDevServer)
|
|
95
|
+
let intentionalStop = false;
|
|
96
|
+
proc.on('close', (code, signal) => {
|
|
97
|
+
activeProcesses.delete(pid);
|
|
98
|
+
stdoutStream.end();
|
|
99
|
+
stderrStream.end();
|
|
100
|
+
if (!intentionalStop) {
|
|
101
|
+
const exitInfo = signal
|
|
102
|
+
? `killed by signal ${signal}`
|
|
103
|
+
: `exited with code ${code ?? 'unknown'}`;
|
|
104
|
+
const errorMsg = `Dev server process (PID ${pid}) ${exitInfo}`;
|
|
105
|
+
console.error(`[qa-dev-server] Unexpected exit: ${errorMsg}`);
|
|
106
|
+
onUnexpectedExit(errorMsg);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
console.log(`[qa-dev-server] Dev server (PID ${pid}) stopped gracefully.`);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
proc.on('error', (err) => {
|
|
113
|
+
activeProcesses.delete(pid);
|
|
114
|
+
stdoutStream.end();
|
|
115
|
+
stderrStream.end();
|
|
116
|
+
if (!intentionalStop) {
|
|
117
|
+
const errorMsg = `Dev server process error: ${err.message}`;
|
|
118
|
+
console.error(`[qa-dev-server] ${errorMsg}`);
|
|
119
|
+
onUnexpectedExit(errorMsg);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
// Attach the intentional-stop flag setter to the process object
|
|
123
|
+
// so stopQaDevServer can mark it before sending signals.
|
|
124
|
+
proc._qaIntentionalStop = () => {
|
|
125
|
+
intentionalStop = true;
|
|
126
|
+
};
|
|
127
|
+
console.log(`[qa-dev-server] Dev server started (PID ${pid}, port ${port}).`);
|
|
128
|
+
return { pid, stdoutPath, stderrPath };
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Gracefully stop a running QA dev server.
|
|
132
|
+
*
|
|
133
|
+
* Sends SIGTERM first, then escalates to SIGKILL if the process
|
|
134
|
+
* does not exit within the grace period.
|
|
135
|
+
*/
|
|
136
|
+
export async function stopQaDevServer(pid) {
|
|
137
|
+
const proc = activeProcesses.get(pid);
|
|
138
|
+
// Mark as intentional stop if we have the process reference
|
|
139
|
+
if (proc) {
|
|
140
|
+
const extended = proc;
|
|
141
|
+
extended._qaIntentionalStop?.();
|
|
142
|
+
}
|
|
143
|
+
// Send SIGTERM
|
|
144
|
+
if (!isQaDevServerRunning(pid)) {
|
|
145
|
+
activeProcesses.delete(pid);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
console.log(`[qa-dev-server] Sending SIGTERM to PID ${pid}...`);
|
|
149
|
+
try {
|
|
150
|
+
process.kill(pid, 'SIGTERM');
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Process already gone
|
|
154
|
+
activeProcesses.delete(pid);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
// Wait for graceful shutdown
|
|
158
|
+
const exited = await waitForExit(pid, STOP_GRACE_PERIOD_MS);
|
|
159
|
+
if (exited) {
|
|
160
|
+
activeProcesses.delete(pid);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
// Escalate to SIGKILL
|
|
164
|
+
console.warn(`[qa-dev-server] PID ${pid} did not exit after SIGTERM, sending SIGKILL...`);
|
|
165
|
+
try {
|
|
166
|
+
process.kill(pid, 'SIGKILL');
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// Process already gone
|
|
170
|
+
}
|
|
171
|
+
activeProcesses.delete(pid);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Check if a QA dev server process is still alive.
|
|
175
|
+
*
|
|
176
|
+
* Uses the `process.kill(pid, 0)` pattern which sends no signal
|
|
177
|
+
* but throws if the process does not exist.
|
|
178
|
+
*/
|
|
179
|
+
export function isQaDevServerRunning(pid) {
|
|
180
|
+
try {
|
|
181
|
+
process.kill(pid, 0);
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// ── Helpers ──────────────────────────────────────────────────────────
|
|
189
|
+
/**
|
|
190
|
+
* Build the browser-accessible Supabase URL for a QA environment.
|
|
191
|
+
*
|
|
192
|
+
* The local Supabase typically listens on 127.0.0.1:54321, but the QA
|
|
193
|
+
* browser is remote (e.g. on a different machine). Replace the host
|
|
194
|
+
* portion with the daemon's LAN IP (qaHost) so the browser can reach it.
|
|
195
|
+
*/
|
|
196
|
+
export function buildQaSupabaseUrl(localSupabaseUrl, qaHost) {
|
|
197
|
+
try {
|
|
198
|
+
const parsed = new URL(localSupabaseUrl);
|
|
199
|
+
parsed.hostname = qaHost;
|
|
200
|
+
return parsed.toString().replace(/\/$/, '');
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
// If parsing fails, fall back to simple replacement
|
|
204
|
+
return `http://${qaHost}:54321`;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Detect the dev framework from the project's package.json.
|
|
209
|
+
* Checks devDependencies and dependencies for known frameworks.
|
|
210
|
+
*/
|
|
211
|
+
export function detectFramework(worktreePath) {
|
|
212
|
+
try {
|
|
213
|
+
const pkgJson = JSON.parse(readFileSync(join(worktreePath, 'package.json'), 'utf-8'));
|
|
214
|
+
const allDeps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };
|
|
215
|
+
if (allDeps['next'])
|
|
216
|
+
return 'nextjs';
|
|
217
|
+
if (allDeps['vite'])
|
|
218
|
+
return 'vite';
|
|
219
|
+
// Check the dev script as a fallback
|
|
220
|
+
const devScript = pkgJson.scripts?.dev ?? '';
|
|
221
|
+
if (devScript.includes('next'))
|
|
222
|
+
return 'nextjs';
|
|
223
|
+
if (devScript.includes('vite'))
|
|
224
|
+
return 'vite';
|
|
225
|
+
return 'unknown';
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return 'unknown';
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Build the spawn command and args for starting a dev server
|
|
233
|
+
* based on the detected framework.
|
|
234
|
+
*/
|
|
235
|
+
function buildDevServerCommand(framework, port) {
|
|
236
|
+
switch (framework) {
|
|
237
|
+
case 'nextjs':
|
|
238
|
+
// Next.js reads PORT and HOSTNAME env vars since v13
|
|
239
|
+
return {
|
|
240
|
+
command: 'npm',
|
|
241
|
+
args: ['run', 'dev'],
|
|
242
|
+
extraEnv: { PORT: String(port), HOSTNAME: '0.0.0.0' },
|
|
243
|
+
};
|
|
244
|
+
case 'vite':
|
|
245
|
+
return {
|
|
246
|
+
command: 'npx',
|
|
247
|
+
args: ['vite', '--port', String(port), '--host', '0.0.0.0'],
|
|
248
|
+
extraEnv: {},
|
|
249
|
+
};
|
|
250
|
+
default:
|
|
251
|
+
// Fallback: use npm run dev with PORT env var (most frameworks respect this)
|
|
252
|
+
return {
|
|
253
|
+
command: 'npm',
|
|
254
|
+
args: ['run', 'dev'],
|
|
255
|
+
extraEnv: { PORT: String(port), HOSTNAME: '0.0.0.0' },
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Wait for a process to exit, polling at short intervals.
|
|
261
|
+
* Returns true if the process exited within the timeout.
|
|
262
|
+
*/
|
|
263
|
+
function waitForExit(pid, timeoutMs) {
|
|
264
|
+
return new Promise((resolve) => {
|
|
265
|
+
const startTime = Date.now();
|
|
266
|
+
const interval = setInterval(() => {
|
|
267
|
+
if (!isQaDevServerRunning(pid)) {
|
|
268
|
+
clearInterval(interval);
|
|
269
|
+
resolve(true);
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
if (Date.now() - startTime >= timeoutMs) {
|
|
273
|
+
clearInterval(interval);
|
|
274
|
+
resolve(false);
|
|
275
|
+
}
|
|
276
|
+
}, 250);
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=qa-dev-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qa-dev-server.js","sourceRoot":"","sources":["../src/qa-dev-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA environment orchestration.
|
|
3
|
+
*
|
|
4
|
+
* Called by the daemon poll loop to process pending QA requests.
|
|
5
|
+
* Coordinates provisioning and teardown using the lower-level modules.
|
|
6
|
+
*/
|
|
7
|
+
import type { DaemonConfig, StrategyWorktreeInfo } from './types.js';
|
|
8
|
+
import type { StartQaDevServerOptions, StartQaDevServerResult } from './qa-dev-server.js';
|
|
9
|
+
import type { QaEnvironmentState, ProductQaEnvironmentState } from './qa-state.js';
|
|
10
|
+
/** Shape of a QA request row from the API query. */
|
|
11
|
+
export interface QaRequest {
|
|
12
|
+
strategy_id: string;
|
|
13
|
+
strategy_name: string;
|
|
14
|
+
qa_status: string;
|
|
15
|
+
product_id: string;
|
|
16
|
+
}
|
|
17
|
+
/** Shape of a deactivated QA strategy row from the API query. */
|
|
18
|
+
export interface DeactivatedQaStrategy {
|
|
19
|
+
strategy_id: string;
|
|
20
|
+
strategy_name: string;
|
|
21
|
+
qa_status: string;
|
|
22
|
+
strategy_status: string;
|
|
23
|
+
product_id: string;
|
|
24
|
+
}
|
|
25
|
+
/** Injectable dependencies for testing. */
|
|
26
|
+
export interface QaOrchestratorDeps {
|
|
27
|
+
getQaRequests: (productId: string) => Promise<QaRequest[]>;
|
|
28
|
+
getDeactivatedQaStrategies: (productId: string) => Promise<DeactivatedQaStrategy[]>;
|
|
29
|
+
updateQaStatus: (strategyId: string, fields: Record<string, unknown>) => Promise<void>;
|
|
30
|
+
getStrategyWorktree: (strategyId: string) => StrategyWorktreeInfo | undefined;
|
|
31
|
+
symlinkEnvFiles: (repoPath: string, worktreePath: string) => void;
|
|
32
|
+
allocatePort: (config: DaemonConfig) => Promise<number>;
|
|
33
|
+
buildQaUrl: (config: DaemonConfig, port: number) => string;
|
|
34
|
+
startQaDevServer: (options: StartQaDevServerOptions) => StartQaDevServerResult;
|
|
35
|
+
stopQaDevServer: (pid: number) => Promise<void>;
|
|
36
|
+
getQaEnvironment: (strategyId: string) => QaEnvironmentState | undefined;
|
|
37
|
+
setQaEnvironment: (strategyId: string, state: QaEnvironmentState) => void;
|
|
38
|
+
removeQaEnvironment: (strategyId: string) => boolean;
|
|
39
|
+
hasActiveQaEnvironment: (strategyId: string) => boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check for and process pending QA requests.
|
|
43
|
+
* Called each poll cycle from listener.ts.
|
|
44
|
+
*/
|
|
45
|
+
export declare function checkQaRequests(config: DaemonConfig, deps?: QaOrchestratorDeps): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Check for strategies that have been deactivated while QA was running.
|
|
48
|
+
* Tears down any QA environment whose strategy is no longer in 'active' status.
|
|
49
|
+
* Called each poll cycle from listener.ts.
|
|
50
|
+
*/
|
|
51
|
+
export declare function checkQaForDeactivatedStrategies(config: DaemonConfig, deps?: QaOrchestratorDeps): Promise<void>;
|
|
52
|
+
/** Shape of a product QA request row from the API query. */
|
|
53
|
+
export interface ProductQaRequest {
|
|
54
|
+
product_id: string;
|
|
55
|
+
product_name: string;
|
|
56
|
+
qa_status: string;
|
|
57
|
+
}
|
|
58
|
+
/** Injectable dependencies for product QA testing. */
|
|
59
|
+
export interface ProductQaOrchestratorDeps {
|
|
60
|
+
getProductQaRequests: (productId: string) => Promise<ProductQaRequest[]>;
|
|
61
|
+
updateProductQaStatus: (productId: string, fields: Record<string, unknown>) => Promise<void>;
|
|
62
|
+
createQaWorktree: (config: DaemonConfig, branchName: string, id: string) => string;
|
|
63
|
+
removeQaWorktree: (repoPath: string, worktreePath: string) => void;
|
|
64
|
+
symlinkEnvFiles: (repoPath: string, worktreePath: string) => void;
|
|
65
|
+
allocatePort: (config: DaemonConfig) => Promise<number>;
|
|
66
|
+
buildQaUrl: (config: DaemonConfig, port: number) => string;
|
|
67
|
+
startQaDevServer: (options: StartQaDevServerOptions) => StartQaDevServerResult;
|
|
68
|
+
stopQaDevServer: (pid: number) => Promise<void>;
|
|
69
|
+
getProductQaEnvironment: (productId: string) => ProductQaEnvironmentState | undefined;
|
|
70
|
+
setProductQaEnvironment: (productId: string, state: ProductQaEnvironmentState) => void;
|
|
71
|
+
removeProductQaEnvironment: (productId: string) => boolean;
|
|
72
|
+
hasActiveProductQaEnvironment: (productId: string) => boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Check for and process pending product QA requests.
|
|
76
|
+
* Called each poll cycle from listener.ts.
|
|
77
|
+
*/
|
|
78
|
+
export declare function checkProductQaRequests(config: DaemonConfig, deps?: ProductQaOrchestratorDeps): Promise<void>;
|
|
79
|
+
//# sourceMappingURL=qa-orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qa-orchestrator.d.ts","sourceRoot":"","sources":["../src/qa-orchestrator.ts"],"names":[],"mappings":"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"}
|