@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,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core condition tree evaluation logic for the guard engine.
|
|
3
|
+
*
|
|
4
|
+
* Contains the main evaluateGuardConditionTree function that traverses
|
|
5
|
+
* AND/OR/NOT trees and dispatches to leaf condition evaluators, plus the
|
|
6
|
+
* high-level guard evaluation orchestrator (evaluateGuardsAtTransition).
|
|
7
|
+
*
|
|
8
|
+
* Extracted from guard-engine.ts to improve maintainability.
|
|
9
|
+
*/
|
|
10
|
+
import { buildEvaluationContext } from './evaluation-context.js';
|
|
11
|
+
import { evaluateLeafCondition } from './condition-evaluators.js';
|
|
12
|
+
import { fetchTransitionGuards, createTransitionEvaluation, } from './queries/guards.js';
|
|
13
|
+
import { withRetry } from '@telora/daemon-core';
|
|
14
|
+
// ============================================
|
|
15
|
+
// Guard Evaluation Error
|
|
16
|
+
// ============================================
|
|
17
|
+
/**
|
|
18
|
+
* Error thrown when guard evaluation fails.
|
|
19
|
+
* Carries the fetched guards (if available) so callers can determine
|
|
20
|
+
* failure mode based on enforcement levels.
|
|
21
|
+
*/
|
|
22
|
+
export class GuardEvaluationError extends Error {
|
|
23
|
+
cause;
|
|
24
|
+
fetchedGuards;
|
|
25
|
+
constructor(message, cause,
|
|
26
|
+
/** Guards that were successfully fetched before the error, if any. */
|
|
27
|
+
fetchedGuards) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.cause = cause;
|
|
30
|
+
this.fetchedGuards = fetchedGuards;
|
|
31
|
+
this.name = 'GuardEvaluationError';
|
|
32
|
+
}
|
|
33
|
+
/** Whether any fetched guard has hard enforcement. */
|
|
34
|
+
get hasHardEnforcementGuards() {
|
|
35
|
+
return this.fetchedGuards?.some(g => g.enforcement === 'hard') ?? false;
|
|
36
|
+
}
|
|
37
|
+
/** Names of fetched guards (for error messages). */
|
|
38
|
+
get guardNames() {
|
|
39
|
+
return this.fetchedGuards?.map(g => g.name) ?? [];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// ============================================
|
|
43
|
+
// Condition Tree Evaluator
|
|
44
|
+
// ============================================
|
|
45
|
+
/**
|
|
46
|
+
* Evaluate a single condition tree node recursively.
|
|
47
|
+
*
|
|
48
|
+
* Accumulates leaf evaluation results into `details` and uses
|
|
49
|
+
* `nodeCounter` (passed by reference as a wrapper) to assign stable IDs.
|
|
50
|
+
* Extracted from evaluateGuardConditionTree to eliminate mutable closure state.
|
|
51
|
+
*/
|
|
52
|
+
function evaluateConditionNode(node, ctx, details, nodeCounter) {
|
|
53
|
+
const children = node.children ?? [];
|
|
54
|
+
if (children.length > 0) {
|
|
55
|
+
// Group node -- evaluate children with this node's logical operator
|
|
56
|
+
const operator = node.logical_operator ?? 'AND';
|
|
57
|
+
const childResults = children.map(child => evaluateConditionNode(child, ctx, details, nodeCounter));
|
|
58
|
+
return operator === 'AND'
|
|
59
|
+
? childResults.every(r => r)
|
|
60
|
+
: childResults.some(r => r);
|
|
61
|
+
}
|
|
62
|
+
// Leaf node -- evaluate the condition and record the result
|
|
63
|
+
const nodeId = `cond-${nodeCounter.value++}`;
|
|
64
|
+
const evalResult = evaluateLeafCondition(node, nodeId, ctx);
|
|
65
|
+
details.push(evalResult);
|
|
66
|
+
return evalResult.passed;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Evaluate a JSONB condition tree for a guard.
|
|
70
|
+
*
|
|
71
|
+
* The JSONB tree uses nested children arrays rather than
|
|
72
|
+
* parent_condition_id references. Root-level nodes are combined
|
|
73
|
+
* with AND by default.
|
|
74
|
+
*/
|
|
75
|
+
export function evaluateGuardConditionTree(conditions, ctx) {
|
|
76
|
+
if (conditions.length === 0) {
|
|
77
|
+
return { passed: true, details: [] };
|
|
78
|
+
}
|
|
79
|
+
const details = [];
|
|
80
|
+
const nodeCounter = { value: 0 };
|
|
81
|
+
const rootResults = conditions.map(node => evaluateConditionNode(node, ctx, details, nodeCounter));
|
|
82
|
+
const passed = rootResults.every(r => r);
|
|
83
|
+
return { passed, details };
|
|
84
|
+
}
|
|
85
|
+
// ============================================
|
|
86
|
+
// Guard Evaluation Orchestrator
|
|
87
|
+
// ============================================
|
|
88
|
+
/**
|
|
89
|
+
* Evaluate all guards at a workflow transition.
|
|
90
|
+
*
|
|
91
|
+
* Returns a TransitionGuardResult indicating whether the transition
|
|
92
|
+
* should proceed and what triggers need to be executed.
|
|
93
|
+
*/
|
|
94
|
+
export async function evaluateGuardsAtTransition(deliveryId, organizationId, transitionId, lastExitCode) {
|
|
95
|
+
let guards;
|
|
96
|
+
let triggers;
|
|
97
|
+
try {
|
|
98
|
+
const resolved = await withRetry(() => fetchTransitionGuards(transitionId), { label: 'guard-fetch' });
|
|
99
|
+
guards = resolved.guards;
|
|
100
|
+
triggers = resolved.triggers;
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
throw new GuardEvaluationError(`Failed to fetch guards: ${err.message}`, err, null);
|
|
104
|
+
}
|
|
105
|
+
if (guards.length === 0) {
|
|
106
|
+
// No guards -- collect on_enter triggers and proceed
|
|
107
|
+
const enterTriggers = triggers.filter(t => t.trigger_event === 'on_enter');
|
|
108
|
+
return {
|
|
109
|
+
should_proceed: true,
|
|
110
|
+
evaluations: [],
|
|
111
|
+
triggers_to_execute: enterTriggers.map(t => ({ trigger: t, guard: null, eval_result: null })),
|
|
112
|
+
warnings: [],
|
|
113
|
+
blocks: [],
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
let ctx;
|
|
117
|
+
try {
|
|
118
|
+
ctx = await withRetry(() => buildEvaluationContext(deliveryId, lastExitCode), { label: 'guard-context' });
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
throw new GuardEvaluationError(`Failed to build evaluation context: ${err.message}`, err, guards);
|
|
122
|
+
}
|
|
123
|
+
// Evaluate each guard's conditions
|
|
124
|
+
const evaluations = [];
|
|
125
|
+
const triggersToExecute = [];
|
|
126
|
+
const warnings = [];
|
|
127
|
+
const blocks = [];
|
|
128
|
+
for (const guard of guards) {
|
|
129
|
+
const { passed, details } = evaluateGuardConditionTree(guard.conditions, ctx);
|
|
130
|
+
const evalResult = {
|
|
131
|
+
guard_id: guard.id,
|
|
132
|
+
guard_name: guard.name,
|
|
133
|
+
enforcement: guard.enforcement,
|
|
134
|
+
passed,
|
|
135
|
+
condition_details: details,
|
|
136
|
+
};
|
|
137
|
+
evaluations.push(evalResult);
|
|
138
|
+
if (!passed) {
|
|
139
|
+
// Collect on_guard_fail triggers for this guard
|
|
140
|
+
const failTriggers = triggers.filter(t => t.trigger_event === 'on_guard_fail');
|
|
141
|
+
for (const trigger of failTriggers) {
|
|
142
|
+
triggersToExecute.push({ trigger, guard, eval_result: evalResult });
|
|
143
|
+
}
|
|
144
|
+
if (guard.enforcement === 'hard') {
|
|
145
|
+
blocks.push(evalResult);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
warnings.push(evalResult);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// Collect on_guard_pass triggers
|
|
153
|
+
const passTriggers = triggers.filter(t => t.trigger_event === 'on_guard_pass');
|
|
154
|
+
for (const trigger of passTriggers) {
|
|
155
|
+
triggersToExecute.push({ trigger, guard, eval_result: evalResult });
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Record evaluation in audit trail
|
|
159
|
+
const evaluationRecord = {
|
|
160
|
+
organization_id: organizationId,
|
|
161
|
+
entity_type: 'delivery',
|
|
162
|
+
entity_id: deliveryId,
|
|
163
|
+
transition_id: transitionId,
|
|
164
|
+
guard_id: guard.id,
|
|
165
|
+
result: passed ? 'passed' : 'failed',
|
|
166
|
+
blocked: !passed && guard.enforcement === 'hard',
|
|
167
|
+
enforcement_level: guard.enforcement,
|
|
168
|
+
evaluation_details: { conditions: details },
|
|
169
|
+
};
|
|
170
|
+
try {
|
|
171
|
+
await createTransitionEvaluation(evaluationRecord);
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
console.warn(`Failed to record guard evaluation for "${guard.name}":`, err.message);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Collect on_enter triggers if proceeding
|
|
178
|
+
const shouldProceed = blocks.length === 0;
|
|
179
|
+
if (shouldProceed) {
|
|
180
|
+
const enterTriggers = triggers.filter(t => t.trigger_event === 'on_enter');
|
|
181
|
+
for (const trigger of enterTriggers) {
|
|
182
|
+
triggersToExecute.push({ trigger, guard: null, eval_result: null });
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
should_proceed: shouldProceed,
|
|
187
|
+
evaluations,
|
|
188
|
+
triggers_to_execute: triggersToExecute,
|
|
189
|
+
warnings,
|
|
190
|
+
blocks,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=guard-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard-evaluator.js","sourceRoot":"","sources":["../src/guard-evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heartbeat module — periodically reports daemon presence and work status to Telora.
|
|
3
|
+
*
|
|
4
|
+
* Sends an initial heartbeat on startup, then every HEARTBEAT_INTERVAL_MS.
|
|
5
|
+
* On shutdown, sends a disconnect signal (best-effort).
|
|
6
|
+
*
|
|
7
|
+
* Counters are bootstrapped from the DB on startup so the heartbeat
|
|
8
|
+
* reflects cumulative history rather than resetting to zero.
|
|
9
|
+
*
|
|
10
|
+
* Also provides activity tracking and event loop watchdog metrics
|
|
11
|
+
* for stuck daemon detection.
|
|
12
|
+
*/
|
|
13
|
+
import type { DaemonConfig } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Update the narration for a strategy. Called by ActivityTracker callback.
|
|
16
|
+
*/
|
|
17
|
+
export declare function setNarration(strategyId: string, text: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Clear narration for a strategy (called when team shuts down).
|
|
20
|
+
*/
|
|
21
|
+
export declare function clearNarration(strategyId: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* Record daemon activity. Call this whenever meaningful work occurs
|
|
24
|
+
* (spawning agents, completing sessions, polling, merges, etc.).
|
|
25
|
+
*/
|
|
26
|
+
export declare function recordActivity(): void;
|
|
27
|
+
/**
|
|
28
|
+
* Get the last activity timestamp (for diagnostics/testing).
|
|
29
|
+
*/
|
|
30
|
+
export declare function getLastActivityAt(): Date;
|
|
31
|
+
/**
|
|
32
|
+
* Get the current event loop lag (p99) in milliseconds and reset the histogram.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getEventLoopLagMs(): number;
|
|
35
|
+
/**
|
|
36
|
+
* Initialize the heartbeat module.
|
|
37
|
+
* Bootstraps counters from the DB (single query, graceful fallback).
|
|
38
|
+
* Initializes event loop monitoring.
|
|
39
|
+
*/
|
|
40
|
+
export declare function initHeartbeat(daemonConfig: DaemonConfig): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Get the current daemon and factory versions (loaded at init time).
|
|
43
|
+
*/
|
|
44
|
+
export declare function getVersions(): {
|
|
45
|
+
daemon: string;
|
|
46
|
+
factory: string;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Store the latest available version from the npm registry.
|
|
50
|
+
* Called by the version check module after a successful registry query.
|
|
51
|
+
*/
|
|
52
|
+
export declare function setLatestAvailableVersion(version: string): void;
|
|
53
|
+
/**
|
|
54
|
+
* Store the latest available factory version from the npm registry.
|
|
55
|
+
*/
|
|
56
|
+
export declare function setLatestAvailableFactoryVersion(version: string): void;
|
|
57
|
+
/**
|
|
58
|
+
* Record a completed session (called by spawner when an agent finishes).
|
|
59
|
+
*/
|
|
60
|
+
export declare function recordSessionCompleted(tokens: number, cost: number): void;
|
|
61
|
+
/**
|
|
62
|
+
* Record a completed issue (called when an issue transitions to Done).
|
|
63
|
+
*/
|
|
64
|
+
export declare function recordIssueCompleted(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Start sending periodic heartbeats. Sends one immediately.
|
|
67
|
+
*/
|
|
68
|
+
export declare function startHeartbeat(): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Stop heartbeats and send a disconnect signal (best-effort).
|
|
71
|
+
*/
|
|
72
|
+
export declare function stopHeartbeat(): Promise<void>;
|
|
73
|
+
//# sourceMappingURL=heartbeat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4B/C;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEnE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAEvD;AAMD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAmBD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C;AAyFD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ7E;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAEjE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/D;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEtE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIzE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AA0ED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAcpD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAanD"}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heartbeat module — periodically reports daemon presence and work status to Telora.
|
|
3
|
+
*
|
|
4
|
+
* Sends an initial heartbeat on startup, then every HEARTBEAT_INTERVAL_MS.
|
|
5
|
+
* On shutdown, sends a disconnect signal (best-effort).
|
|
6
|
+
*
|
|
7
|
+
* Counters are bootstrapped from the DB on startup so the heartbeat
|
|
8
|
+
* reflects cumulative history rather than resetting to zero.
|
|
9
|
+
*
|
|
10
|
+
* Also provides activity tracking and event loop watchdog metrics
|
|
11
|
+
* for stuck daemon detection.
|
|
12
|
+
*/
|
|
13
|
+
import { readFileSync } from 'node:fs';
|
|
14
|
+
import { hostname as osHostname } from 'node:os';
|
|
15
|
+
import { join, dirname, basename } from 'node:path';
|
|
16
|
+
import { fileURLToPath } from 'node:url';
|
|
17
|
+
import { monitorEventLoopDelay } from 'node:perf_hooks';
|
|
18
|
+
import { sendHeartbeat, sendDisconnect, getCompletedSessionAggregates } from './supabase.js';
|
|
19
|
+
import { getRunningAgents } from './spawner.js';
|
|
20
|
+
import { safeInterval } from '@telora/daemon-core';
|
|
21
|
+
import { computeBranchStatus } from './branch-status.js';
|
|
22
|
+
const HEARTBEAT_INTERVAL_MS = 60_000; // 60 seconds
|
|
23
|
+
const INACTIVITY_THRESHOLD_MS = 600_000; // 10 minutes
|
|
24
|
+
const EVENT_LOOP_LAG_WARNING_MS = 30_000; // 30 seconds
|
|
25
|
+
let config = null;
|
|
26
|
+
let heartbeatInterval = null;
|
|
27
|
+
let completedSessionCount = 0;
|
|
28
|
+
let completedIssueCount = 0;
|
|
29
|
+
let totalTokensUsed = 0;
|
|
30
|
+
let totalCost = 0;
|
|
31
|
+
let daemonVersion = 'unknown';
|
|
32
|
+
let factoryVersion = 'unknown';
|
|
33
|
+
let daemonCommitSha = 'unknown';
|
|
34
|
+
let latestAvailableVersion = null;
|
|
35
|
+
let latestAvailableFactoryVersion = null;
|
|
36
|
+
const daemonStartedAt = new Date().toISOString();
|
|
37
|
+
// ── Narration store (in-memory only) ─────────────────────────────────
|
|
38
|
+
/** Strategy ID -> latest narration text from team lead. */
|
|
39
|
+
const narrations = new Map();
|
|
40
|
+
/**
|
|
41
|
+
* Update the narration for a strategy. Called by ActivityTracker callback.
|
|
42
|
+
*/
|
|
43
|
+
export function setNarration(strategyId, text) {
|
|
44
|
+
narrations.set(strategyId, text);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Clear narration for a strategy (called when team shuts down).
|
|
48
|
+
*/
|
|
49
|
+
export function clearNarration(strategyId) {
|
|
50
|
+
narrations.delete(strategyId);
|
|
51
|
+
}
|
|
52
|
+
// ── Activity tracking ────────────────────────────────────────────────
|
|
53
|
+
let lastActivityAt = new Date();
|
|
54
|
+
/**
|
|
55
|
+
* Record daemon activity. Call this whenever meaningful work occurs
|
|
56
|
+
* (spawning agents, completing sessions, polling, merges, etc.).
|
|
57
|
+
*/
|
|
58
|
+
export function recordActivity() {
|
|
59
|
+
lastActivityAt = new Date();
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get the last activity timestamp (for diagnostics/testing).
|
|
63
|
+
*/
|
|
64
|
+
export function getLastActivityAt() {
|
|
65
|
+
return lastActivityAt;
|
|
66
|
+
}
|
|
67
|
+
// ── Event loop watchdog ──────────────────────────────────────────────
|
|
68
|
+
let eventLoopHistogram = null;
|
|
69
|
+
/**
|
|
70
|
+
* Initialize the event loop delay monitor.
|
|
71
|
+
* Uses perf_hooks.monitorEventLoopDelay() for passive, low-overhead measurement.
|
|
72
|
+
*/
|
|
73
|
+
function initEventLoopMonitor() {
|
|
74
|
+
try {
|
|
75
|
+
eventLoopHistogram = monitorEventLoopDelay({ resolution: 20 });
|
|
76
|
+
eventLoopHistogram.enable();
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
console.warn('Event loop delay monitoring not available on this runtime');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get the current event loop lag (p99) in milliseconds and reset the histogram.
|
|
84
|
+
*/
|
|
85
|
+
export function getEventLoopLagMs() {
|
|
86
|
+
if (!eventLoopHistogram)
|
|
87
|
+
return 0;
|
|
88
|
+
// Histogram values are in nanoseconds
|
|
89
|
+
const p99Ns = eventLoopHistogram.percentile(99);
|
|
90
|
+
eventLoopHistogram.reset();
|
|
91
|
+
return Math.round(p99Ns / 1_000_000); // Convert ns to ms
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check event loop lag and log a warning if it exceeds the threshold.
|
|
95
|
+
*/
|
|
96
|
+
function checkEventLoopLag(lagMs) {
|
|
97
|
+
if (lagMs > EVENT_LOOP_LAG_WARNING_MS) {
|
|
98
|
+
console.error(`[watchdog] CRITICAL: Event loop lag ${lagMs}ms exceeds ${EVENT_LOOP_LAG_WARNING_MS}ms threshold. ` +
|
|
99
|
+
`The daemon may have been blocked. Stack: ${new Error().stack}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Load daemon version from package.json and commit SHA from build-info.json.
|
|
104
|
+
*/
|
|
105
|
+
function loadVersionInfo() {
|
|
106
|
+
let version = 'unknown';
|
|
107
|
+
let factoryVer = 'unknown';
|
|
108
|
+
let sha = 'unknown';
|
|
109
|
+
const thisDir = dirname(fileURLToPath(import.meta.url));
|
|
110
|
+
try {
|
|
111
|
+
const pkgPath = join(thisDir, '..', 'package.json');
|
|
112
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
113
|
+
version = pkg.version || 'unknown';
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
console.debug('[heartbeat] Failed to load daemon version from package.json:', e.message);
|
|
117
|
+
}
|
|
118
|
+
try {
|
|
119
|
+
const factoryPkgPath = join(thisDir, '..', 'node_modules', '@telora', 'factory', 'package.json');
|
|
120
|
+
const factoryPkg = JSON.parse(readFileSync(factoryPkgPath, 'utf-8'));
|
|
121
|
+
factoryVer = factoryPkg.version || 'unknown';
|
|
122
|
+
}
|
|
123
|
+
catch (e) {
|
|
124
|
+
console.debug('[heartbeat] Failed to load factory version:', e.message);
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
const buildInfoPath = join(thisDir, '..', 'build-info.json');
|
|
128
|
+
const buildInfo = JSON.parse(readFileSync(buildInfoPath, 'utf-8'));
|
|
129
|
+
sha = buildInfo.commitSha || 'unknown';
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// build-info.json not present in dev — only stamped at publish time
|
|
133
|
+
}
|
|
134
|
+
return { version, factoryVer, commitSha: sha };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Bootstrap counters from the database.
|
|
138
|
+
*
|
|
139
|
+
* Queries completed session aggregates for this product so the heartbeat
|
|
140
|
+
* starts with cumulative totals instead of zero. Falls back gracefully
|
|
141
|
+
* to zero on any error.
|
|
142
|
+
*/
|
|
143
|
+
async function bootstrapCountersFromDb(daemonConfig) {
|
|
144
|
+
try {
|
|
145
|
+
// Aggregate across all configured products
|
|
146
|
+
let totalCompleted = 0;
|
|
147
|
+
let totalTokens = 0;
|
|
148
|
+
let totalCostAgg = 0;
|
|
149
|
+
for (const product of daemonConfig.products) {
|
|
150
|
+
const aggregates = await getCompletedSessionAggregates(product.id);
|
|
151
|
+
totalCompleted += aggregates.completedCount;
|
|
152
|
+
totalTokens += aggregates.totalTokens;
|
|
153
|
+
totalCostAgg += aggregates.totalCost;
|
|
154
|
+
}
|
|
155
|
+
completedSessionCount = totalCompleted;
|
|
156
|
+
totalTokensUsed = totalTokens;
|
|
157
|
+
totalCost = totalCostAgg;
|
|
158
|
+
console.log(`Bootstrapped heartbeat counters from DB (${daemonConfig.products.length} products): ` +
|
|
159
|
+
`${completedSessionCount} sessions, ` +
|
|
160
|
+
`${totalTokensUsed} tokens, ` +
|
|
161
|
+
`$${totalCost.toFixed(2)} cost`);
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
console.warn(`Failed to bootstrap heartbeat counters from DB (starting at zero): ` +
|
|
165
|
+
`${err.message}`);
|
|
166
|
+
// Counters remain at 0 — same as previous behavior
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Initialize the heartbeat module.
|
|
171
|
+
* Bootstraps counters from the DB (single query, graceful fallback).
|
|
172
|
+
* Initializes event loop monitoring.
|
|
173
|
+
*/
|
|
174
|
+
export async function initHeartbeat(daemonConfig) {
|
|
175
|
+
config = daemonConfig;
|
|
176
|
+
const info = loadVersionInfo();
|
|
177
|
+
daemonVersion = info.version;
|
|
178
|
+
factoryVersion = info.factoryVer;
|
|
179
|
+
daemonCommitSha = info.commitSha;
|
|
180
|
+
await bootstrapCountersFromDb(daemonConfig);
|
|
181
|
+
initEventLoopMonitor();
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get the current daemon and factory versions (loaded at init time).
|
|
185
|
+
*/
|
|
186
|
+
export function getVersions() {
|
|
187
|
+
return { daemon: daemonVersion, factory: factoryVersion };
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Store the latest available version from the npm registry.
|
|
191
|
+
* Called by the version check module after a successful registry query.
|
|
192
|
+
*/
|
|
193
|
+
export function setLatestAvailableVersion(version) {
|
|
194
|
+
latestAvailableVersion = version;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Store the latest available factory version from the npm registry.
|
|
198
|
+
*/
|
|
199
|
+
export function setLatestAvailableFactoryVersion(version) {
|
|
200
|
+
latestAvailableFactoryVersion = version;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Record a completed session (called by spawner when an agent finishes).
|
|
204
|
+
*/
|
|
205
|
+
export function recordSessionCompleted(tokens, cost) {
|
|
206
|
+
completedSessionCount++;
|
|
207
|
+
totalTokensUsed += tokens;
|
|
208
|
+
totalCost += cost;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Record a completed issue (called when an issue transitions to Done).
|
|
212
|
+
*/
|
|
213
|
+
export function recordIssueCompleted() {
|
|
214
|
+
completedIssueCount++;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Gather current counters and send a heartbeat.
|
|
218
|
+
*/
|
|
219
|
+
async function doHeartbeat() {
|
|
220
|
+
if (!config)
|
|
221
|
+
return;
|
|
222
|
+
const runningAgents = getRunningAgents();
|
|
223
|
+
// Event loop watchdog: measure and check lag
|
|
224
|
+
const eventLoopLagMs = getEventLoopLagMs();
|
|
225
|
+
checkEventLoopLag(eventLoopLagMs);
|
|
226
|
+
// Inactivity detection: warn if no activity for 10+ minutes
|
|
227
|
+
const inactivityMs = Date.now() - lastActivityAt.getTime();
|
|
228
|
+
if (inactivityMs > INACTIVITY_THRESHOLD_MS) {
|
|
229
|
+
console.warn(`[watchdog] Daemon inactive for ${Math.round(inactivityMs / 1000)}s. ` +
|
|
230
|
+
`Running agents: ${runningAgents.size}. ` +
|
|
231
|
+
`Last activity: ${lastActivityAt.toISOString()}`);
|
|
232
|
+
}
|
|
233
|
+
// Build metadata with version observability fields
|
|
234
|
+
const metadata = {};
|
|
235
|
+
if (daemonCommitSha !== 'unknown') {
|
|
236
|
+
metadata.commitSha = daemonCommitSha;
|
|
237
|
+
}
|
|
238
|
+
if (factoryVersion !== 'unknown') {
|
|
239
|
+
metadata.factoryVersion = factoryVersion;
|
|
240
|
+
}
|
|
241
|
+
if (latestAvailableVersion) {
|
|
242
|
+
metadata.latestAvailableVersion = latestAvailableVersion;
|
|
243
|
+
}
|
|
244
|
+
if (latestAvailableFactoryVersion) {
|
|
245
|
+
metadata.latestAvailableFactoryVersion = latestAvailableFactoryVersion;
|
|
246
|
+
}
|
|
247
|
+
try {
|
|
248
|
+
metadata.branchStatus = computeBranchStatus(config);
|
|
249
|
+
}
|
|
250
|
+
catch { /* non-fatal */ }
|
|
251
|
+
if (narrations.size > 0) {
|
|
252
|
+
metadata.narrations = Object.fromEntries(narrations);
|
|
253
|
+
}
|
|
254
|
+
try {
|
|
255
|
+
await sendHeartbeat(process.pid, osHostname(), basename(config.repoPath), daemonVersion, {
|
|
256
|
+
activeSessions: runningAgents.size,
|
|
257
|
+
completedSessions: completedSessionCount,
|
|
258
|
+
plannedIssues: 0, // Could be enriched later by querying ready deliveries
|
|
259
|
+
inProgressIssues: runningAgents.size,
|
|
260
|
+
completedIssues: completedIssueCount,
|
|
261
|
+
totalTokensUsed,
|
|
262
|
+
totalCost,
|
|
263
|
+
daemonStartedAt,
|
|
264
|
+
lastActivityAt: lastActivityAt.toISOString(),
|
|
265
|
+
eventLoopLagMs,
|
|
266
|
+
productId: config.productId,
|
|
267
|
+
productIds: config.products.map(p => p.id),
|
|
268
|
+
}, Object.keys(metadata).length > 0 ? metadata : undefined);
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
console.error('Heartbeat failed:', error.message);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Start sending periodic heartbeats. Sends one immediately.
|
|
276
|
+
*/
|
|
277
|
+
export async function startHeartbeat() {
|
|
278
|
+
if (!config) {
|
|
279
|
+
throw new Error('Heartbeat not initialized. Call initHeartbeat first.');
|
|
280
|
+
}
|
|
281
|
+
// Send initial heartbeat immediately
|
|
282
|
+
await doHeartbeat();
|
|
283
|
+
// Start periodic heartbeats with error boundary
|
|
284
|
+
heartbeatInterval = safeInterval(() => {
|
|
285
|
+
return doHeartbeat();
|
|
286
|
+
}, HEARTBEAT_INTERVAL_MS, 'heartbeat');
|
|
287
|
+
console.log(`Started heartbeat (every ${HEARTBEAT_INTERVAL_MS / 1000}s)`);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Stop heartbeats and send a disconnect signal (best-effort).
|
|
291
|
+
*/
|
|
292
|
+
export async function stopHeartbeat() {
|
|
293
|
+
if (heartbeatInterval) {
|
|
294
|
+
clearInterval(heartbeatInterval);
|
|
295
|
+
heartbeatInterval = null;
|
|
296
|
+
}
|
|
297
|
+
// Best-effort disconnect — don't block shutdown
|
|
298
|
+
try {
|
|
299
|
+
await sendDisconnect(process.pid);
|
|
300
|
+
console.log('Sent disconnect signal');
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
console.error('Failed to send disconnect (non-fatal):', error.message);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=heartbeat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,qBAAqB,GAAG,MAAM,CAAC,CAAC,aAAa;AACnD,MAAM,uBAAuB,GAAG,OAAO,CAAC,CAAC,aAAa;AACtD,MAAM,yBAAyB,GAAG,MAAM,CAAC,CAAC,aAAa;AAEvD,IAAI,MAAM,GAAwB,IAAI,CAAC;AACvC,IAAI,iBAAiB,GAA0C,IAAI,CAAC;AACpE,IAAI,qBAAqB,GAAG,CAAC,CAAC;AAC9B,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAC5B,IAAI,eAAe,GAAG,CAAC,CAAC;AACxB,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,IAAI,aAAa,GAAG,SAAS,CAAC;AAC9B,IAAI,cAAc,GAAG,SAAS,CAAC;AAC/B,IAAI,eAAe,GAAG,SAAS,CAAC;AAChC,IAAI,sBAAsB,GAAkB,IAAI,CAAC;AACjD,IAAI,6BAA6B,GAAkB,IAAI,CAAC;AACxD,MAAM,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAEjD,wEAAwE;AAExE,2DAA2D;AAC3D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,IAAY;IAC3D,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAED,wEAAwE;AAExE,IAAI,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;AAEhC;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,wEAAwE;AAExE,IAAI,kBAAkB,GAA6B,IAAI,CAAC;AAExD;;;GAGG;AACH,SAAS,oBAAoB;IAC3B,IAAI,CAAC;QACH,kBAAkB,GAAG,qBAAqB,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/D,kBAAkB,CAAC,MAAM,EAAE,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,kBAAkB;QAAE,OAAO,CAAC,CAAC;IAClC,sCAAsC;IACtC,MAAM,KAAK,GAAG,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAChD,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,mBAAmB;AAC3D,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAa;IACtC,IAAI,KAAK,GAAG,yBAAyB,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CACX,uCAAuC,KAAK,cAAc,yBAAyB,gBAAgB;YACnG,4CAA4C,IAAI,KAAK,EAAE,CAAC,KAAK,EAAE,CAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe;IACtB,IAAI,OAAO,GAAG,SAAS,CAAC;IACxB,IAAI,UAAU,GAAG,SAAS,CAAC;IAC3B,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAyB,CAAC;QAC/E,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IACrC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,8DAA8D,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;IACtG,CAAC;IAED,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QACjG,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAyB,CAAC;QAC7F,UAAU,GAAG,UAAU,CAAC,OAAO,IAAI,SAAS,CAAC;IAC/C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAA2B,CAAC;QAC7F,GAAG,GAAG,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;IACtE,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,uBAAuB,CAAC,YAA0B;IAC/D,IAAI,CAAC;QACH,2CAA2C;QAC3C,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC5C,MAAM,UAAU,GAAG,MAAM,6BAA6B,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACnE,cAAc,IAAI,UAAU,CAAC,cAAc,CAAC;YAC5C,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC;YACtC,YAAY,IAAI,UAAU,CAAC,SAAS,CAAC;QACvC,CAAC;QAED,qBAAqB,GAAG,cAAc,CAAC;QACvC,eAAe,GAAG,WAAW,CAAC;QAC9B,SAAS,GAAG,YAAY,CAAC;QACzB,OAAO,CAAC,GAAG,CACT,4CAA4C,YAAY,CAAC,QAAQ,CAAC,MAAM,cAAc;YACtF,GAAG,qBAAqB,aAAa;YACrC,GAAG,eAAe,WAAW;YAC7B,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAChC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CACV,qEAAqE;YACrE,GAAI,GAAa,CAAC,OAAO,EAAE,CAC5B,CAAC;QACF,mDAAmD;IACrD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,YAA0B;IAC5D,MAAM,GAAG,YAAY,CAAC;IACtB,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;IACjC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;IACjC,MAAM,uBAAuB,CAAC,YAAY,CAAC,CAAC;IAC5C,oBAAoB,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAe;IACvD,sBAAsB,GAAG,OAAO,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAAC,OAAe;IAC9D,6BAA6B,GAAG,OAAO,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,IAAY;IACjE,qBAAqB,EAAE,CAAC;IACxB,eAAe,IAAI,MAAM,CAAC;IAC1B,SAAS,IAAI,IAAI,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,mBAAmB,EAAE,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW;IACxB,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IAEzC,6CAA6C;IAC7C,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAElC,4DAA4D;IAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC;IAC3D,IAAI,YAAY,GAAG,uBAAuB,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CACV,kCAAkC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK;YACtE,mBAAmB,aAAa,CAAC,IAAI,IAAI;YACzC,kBAAkB,cAAc,CAAC,WAAW,EAAE,EAAE,CACjD,CAAC;IACJ,CAAC;IAED,mDAAmD;IACnD,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,QAAQ,CAAC,SAAS,GAAG,eAAe,CAAC;IACvC,CAAC;IACD,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;IAC3C,CAAC;IACD,IAAI,sBAAsB,EAAE,CAAC;QAC3B,QAAQ,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;IAC3D,CAAC;IACD,IAAI,6BAA6B,EAAE,CAAC;QAClC,QAAQ,CAAC,6BAA6B,GAAG,6BAA6B,CAAC;IACzE,CAAC;IAED,IAAI,CAAC;QACH,QAAQ,CAAC,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IAE3B,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACxB,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,CACjB,OAAO,CAAC,GAAG,EACX,UAAU,EAAE,EACZ,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EACzB,aAAa,EACb;YACE,cAAc,EAAE,aAAa,CAAC,IAAI;YAClC,iBAAiB,EAAE,qBAAqB;YACxC,aAAa,EAAE,CAAC,EAAE,uDAAuD;YACzE,gBAAgB,EAAE,aAAa,CAAC,IAAI;YACpC,eAAe,EAAE,mBAAmB;YACpC,eAAe;YACf,SAAS;YACT,eAAe;YACf,cAAc,EAAE,cAAc,CAAC,WAAW,EAAE;YAC5C,cAAc;YACd,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3C,EACD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CACxD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IAED,qCAAqC;IACrC,MAAM,WAAW,EAAE,CAAC;IAEpB,gDAAgD;IAChD,iBAAiB,GAAG,YAAY,CAAC,GAAG,EAAE;QACpC,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC,EAAE,qBAAqB,EAAE,WAAW,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,4BAA4B,qBAAqB,GAAG,IAAI,IAAI,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,iBAAiB,EAAE,CAAC;QACtB,aAAa,CAAC,iBAAiB,CAAC,CAAC;QACjC,iBAAiB,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;IACpF,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Telora Unified Daemon CLI
|
|
4
|
+
*
|
|
5
|
+
* Lifecycle management for the Telora daemon process.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* telora-daemon start # Start daemon in background
|
|
9
|
+
* telora-daemon start --foreground # Start daemon in foreground
|
|
10
|
+
* telora-daemon stop # Graceful shutdown
|
|
11
|
+
* telora-daemon restart # Stop + start
|
|
12
|
+
* telora-daemon status # Report health and status
|
|
13
|
+
* telora-daemon logs # Show recent daemon logs
|
|
14
|
+
* telora-daemon logs --follow # Tail daemon log output
|
|
15
|
+
* telora-daemon init # Interactive setup wizard
|
|
16
|
+
* telora-daemon check-update # Check for newer version
|
|
17
|
+
* telora-daemon run # Run in foreground (low-level)
|
|
18
|
+
*
|
|
19
|
+
* Environment Variables:
|
|
20
|
+
* TELORA_URL - Telora API URL
|
|
21
|
+
* TELORA_TRACKER_ID - Tracker ID for authentication (required)
|
|
22
|
+
* TELORA_ORGANIZATION_ID - Organization to watch
|
|
23
|
+
* TELORA_REPO_PATH - Path to git repository (default: cwd)
|
|
24
|
+
* CLAUDE_CODE_PATH - Path to claude executable (default: 'claude')
|
|
25
|
+
* MCP_CONFIG_PATH - Path to MCP config file (optional)
|
|
26
|
+
* TELORA_LOG_DIR - Directory for agent logs
|
|
27
|
+
* MAX_TOTAL_SESSIONS - Max concurrent strategy agents (default: 5)
|
|
28
|
+
* SESSION_TIMEOUT_MS - Session timeout in ms (default: 3600000)
|
|
29
|
+
* TELORA_MAX_GLOBAL_SESSIONS - Global concurrency limit across all engines
|
|
30
|
+
*/
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG"}
|