@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
package/dist/listener.js
ADDED
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polling-based listener for strategy assignments.
|
|
3
|
+
*
|
|
4
|
+
* Since we're using HTTP API instead of direct Supabase access,
|
|
5
|
+
* we poll for ready strategies instead of using Realtime subscriptions.
|
|
6
|
+
* Agent assignment is at the strategy level — the daemon spawns a
|
|
7
|
+
* single Agent Team per strategy that manages all deliveries.
|
|
8
|
+
*/
|
|
9
|
+
import { getAgentRoles, getReadyStrategies } from './supabase.js';
|
|
10
|
+
import { checkDeliveryAutoAdvance, checkVerifyDeliveriesForOpenIssues } from './listener-auto-advance.js';
|
|
11
|
+
import { checkAutoReview, checkReviewRequests } from './listener-review.js';
|
|
12
|
+
import { spawnStrategyTeam, hasActiveTeam, getActiveTeamCount, getActiveTeams, checkAndMergeCompletedDeliveries } from './strategy-executor.js';
|
|
13
|
+
import { checkResolvedMergeConflicts } from './strategy-merge.js';
|
|
14
|
+
import { recordActivity } from './heartbeat.js';
|
|
15
|
+
import { safeInterval, withRetry } from '@telora/daemon-core';
|
|
16
|
+
import { checkQaRequests, checkProductQaRequests } from './qa-orchestrator.js';
|
|
17
|
+
import { getActiveSessions, updateSession } from './queries/sessions.js';
|
|
18
|
+
import { getRunningAgents } from './spawner.js';
|
|
19
|
+
import { ensureStrategyWorktrees, checkForDeactivatedStrategies } from './strategy-lifecycle.js';
|
|
20
|
+
import { detectGitStates } from './git-state-detector.js';
|
|
21
|
+
import { checkControlStateChanges } from './control-state.js';
|
|
22
|
+
import { isDaemonShuttingDown } from './shutdown-state.js';
|
|
23
|
+
import { configForProduct, findProduct } from './config.js';
|
|
24
|
+
// Track strategies that have been logged as idle (no actionable deliveries).
|
|
25
|
+
// Only log on state change: first skip after an active session or after startup.
|
|
26
|
+
const idleLoggedStrategies = new Set();
|
|
27
|
+
let config = null;
|
|
28
|
+
const roles = new Map();
|
|
29
|
+
let pollInterval = null;
|
|
30
|
+
let isProcessing = false;
|
|
31
|
+
// Polling interval in milliseconds (default: 30 seconds)
|
|
32
|
+
const POLL_INTERVAL_MS = 30000;
|
|
33
|
+
// Health check backoff: track consecutive failures to avoid hammering a broken API
|
|
34
|
+
let healthCheckConsecutiveFailures = 0;
|
|
35
|
+
const HEALTH_CHECK_MAX_SKIP_CYCLES = 10; // max backoff = 10 * 30s = 5 minutes
|
|
36
|
+
// Spawn cooldown imported from dedicated module (avoids circular deps)
|
|
37
|
+
import { isInSpawnCooldown } from './spawn-cooldown.js';
|
|
38
|
+
/**
|
|
39
|
+
* Initialize the listener with configuration.
|
|
40
|
+
*/
|
|
41
|
+
export async function initListener(daemonConfig) {
|
|
42
|
+
config = daemonConfig;
|
|
43
|
+
// Load all roles
|
|
44
|
+
try {
|
|
45
|
+
const roleList = await getAgentRoles(config.organizationId);
|
|
46
|
+
roles.clear();
|
|
47
|
+
for (const role of roleList) {
|
|
48
|
+
roles.set(role.id, role);
|
|
49
|
+
}
|
|
50
|
+
console.log(`Loaded ${roles.size} agent roles`);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
const msg = error.message ?? '';
|
|
54
|
+
if (msg.includes('API response validation failed for agent_role_list')) {
|
|
55
|
+
throw new Error('Agent role schema mismatch -- your Telora backend edge functions need to be redeployed. '
|
|
56
|
+
+ 'The daemon expects full role details (organizationId, description, allowedFilePatterns, '
|
|
57
|
+
+ 'allowedTools, systemPromptTemplate, color, icon) but the backend returned partial data. '
|
|
58
|
+
+ 'Redeploy your Supabase edge functions and restart the daemon.');
|
|
59
|
+
}
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Start polling for ready strategies.
|
|
65
|
+
*/
|
|
66
|
+
export function startDeliveryListener() {
|
|
67
|
+
if (!config) {
|
|
68
|
+
throw new Error('Listener not initialized. Call initListener first.');
|
|
69
|
+
}
|
|
70
|
+
// Initial check
|
|
71
|
+
processReadyStrategies();
|
|
72
|
+
// Start polling with error boundary — check for work and main advancement
|
|
73
|
+
// Per-product functions are called with product-scoped configs so that
|
|
74
|
+
// config.productId and config.repoPath resolve to the correct product.
|
|
75
|
+
pollInterval = safeInterval(async () => {
|
|
76
|
+
for (const product of config.products) {
|
|
77
|
+
const pc = configForProduct(config, product);
|
|
78
|
+
await ensureStrategyWorktrees(pc, roles);
|
|
79
|
+
await checkForDeactivatedStrategies(pc);
|
|
80
|
+
await checkControlStateChanges(pc);
|
|
81
|
+
await checkDeliveryAutoAdvance(pc);
|
|
82
|
+
}
|
|
83
|
+
await processReadyStrategies();
|
|
84
|
+
await checkAndMergeCompletedDeliveries(config);
|
|
85
|
+
await checkResolvedMergeConflicts(config);
|
|
86
|
+
await checkReviewRequests(config, roles);
|
|
87
|
+
await checkAutoReview(config, roles);
|
|
88
|
+
await checkVerifyDeliveriesForOpenIssues(config);
|
|
89
|
+
await detectGitStates(config);
|
|
90
|
+
await checkQaRequests(config);
|
|
91
|
+
await checkProductQaRequests(config);
|
|
92
|
+
await checkSessionHealth();
|
|
93
|
+
}, POLL_INTERVAL_MS, 'strategy-poll');
|
|
94
|
+
console.log(`Started strategy polling (every ${POLL_INTERVAL_MS / 1000}s)`);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Start session listener (no-op for polling mode).
|
|
98
|
+
* Kept for API compatibility with the original implementation.
|
|
99
|
+
*/
|
|
100
|
+
export function startSessionListener() {
|
|
101
|
+
if (!config) {
|
|
102
|
+
throw new Error('Listener not initialized. Call initListener first.');
|
|
103
|
+
}
|
|
104
|
+
// In polling mode, session changes are handled by checking ready strategies
|
|
105
|
+
console.log('Session monitoring via polling (included in strategy polling)');
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Process any strategies ready for agent work.
|
|
109
|
+
*
|
|
110
|
+
* For each ready strategy without an active team, spawns a single
|
|
111
|
+
* Agent Team that manages all deliveries within that strategy.
|
|
112
|
+
* Also detects strategies that have been deactivated and shuts down
|
|
113
|
+
* their teams.
|
|
114
|
+
*/
|
|
115
|
+
export async function processReadyStrategies() {
|
|
116
|
+
if (!config)
|
|
117
|
+
return;
|
|
118
|
+
// Prevent concurrent processing
|
|
119
|
+
if (isProcessing) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
isProcessing = true;
|
|
123
|
+
try {
|
|
124
|
+
// Record activity: proves the poll ran even if no work was found
|
|
125
|
+
recordActivity();
|
|
126
|
+
// Snapshot active teams before processing (for idle detection)
|
|
127
|
+
const previouslyActiveIds = new Set(getActiveTeams().keys());
|
|
128
|
+
// Deactivation detection is now handled by checkForDeactivatedStrategies()
|
|
129
|
+
// in the poll loop (called before processReadyStrategies).
|
|
130
|
+
// Get ready strategies across all configured products
|
|
131
|
+
const readyStrategies = [];
|
|
132
|
+
for (const product of config.products) {
|
|
133
|
+
try {
|
|
134
|
+
const strategies = await getReadyStrategies(config.organizationId, product.id);
|
|
135
|
+
readyStrategies.push(...strategies);
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
console.warn(`[listener] Failed to fetch ready strategies for product ${product.id}: ${err.message}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Track which strategies are ready this cycle (for idle logging)
|
|
142
|
+
const readyStrategyIds = new Set(readyStrategies.map(s => s.strategy_id));
|
|
143
|
+
// Idle queue logging: detect strategies that were previously active
|
|
144
|
+
// but now have no ready deliveries. Only log on state change.
|
|
145
|
+
for (const strategyId of previouslyActiveIds) {
|
|
146
|
+
if (!readyStrategyIds.has(strategyId) && !hasActiveTeam(strategyId) && !idleLoggedStrategies.has(strategyId)) {
|
|
147
|
+
const nextPollSec = POLL_INTERVAL_MS / 1000;
|
|
148
|
+
console.log(`[listener] Strategy queue idle: "${strategyId}" -- no actionable deliveries, next poll in ${nextPollSec}s`);
|
|
149
|
+
idleLoggedStrategies.add(strategyId);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (readyStrategies.length === 0) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const productLabel = config.products.length > 1
|
|
156
|
+
? ` across ${config.products.length} product(s)`
|
|
157
|
+
: '';
|
|
158
|
+
console.log(`Found ${readyStrategies.length} ready strategies${productLabel}`);
|
|
159
|
+
for (const strategy of readyStrategies) {
|
|
160
|
+
const role = roles.get(strategy.assigned_agent_role_id);
|
|
161
|
+
if (!role) {
|
|
162
|
+
console.error(`Unknown agent role: ${strategy.assigned_agent_role_id}`);
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
// Check if we already have an active team for this strategy
|
|
166
|
+
if (hasActiveTeam(strategy.strategy_id)) {
|
|
167
|
+
// Strategy is active -- clear idle state so we re-log if it goes idle again
|
|
168
|
+
idleLoggedStrategies.delete(strategy.strategy_id);
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
// Check spawn cooldown: skip strategies that were recently torn down
|
|
172
|
+
if (isInSpawnCooldown(strategy.strategy_id)) {
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
// Check total capacity
|
|
176
|
+
if (getActiveTeamCount() >= config.maxTotalSessions) {
|
|
177
|
+
console.log(`Total session limit reached, stopping`);
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
// Clear idle state before spawn attempt -- if spawn succeeds,
|
|
181
|
+
// the strategy is active. If it skips (no actionable deliveries),
|
|
182
|
+
// spawnStrategyTeam logs the skip and we mark it idle here.
|
|
183
|
+
const wasIdle = idleLoggedStrategies.has(strategy.strategy_id);
|
|
184
|
+
idleLoggedStrategies.delete(strategy.strategy_id);
|
|
185
|
+
// Use product-scoped config so the team uses the correct repoPath
|
|
186
|
+
const productEntry = strategy.product_id ? findProduct(config, strategy.product_id) : undefined;
|
|
187
|
+
const spawnConfig = productEntry ? configForProduct(config, productEntry) : config;
|
|
188
|
+
// Spawn a strategy team (one team per strategy)
|
|
189
|
+
await spawnStrategyTeam({ config: spawnConfig, strategyId: strategy.strategy_id, strategyName: strategy.strategy_name, role, pipelineConfig: strategy.pipeline_config, readOnly: strategy.read_only, lastClaudeSessionId: strategy.last_claude_session_id });
|
|
190
|
+
// If the spawn was skipped (no active team after spawn), mark as idle
|
|
191
|
+
if (!hasActiveTeam(strategy.strategy_id) && !wasIdle) {
|
|
192
|
+
const nextPollSec = POLL_INTERVAL_MS / 1000;
|
|
193
|
+
console.log(`[listener] Strategy queue idle: "${strategy.strategy_name}" -- no actionable deliveries after pre-spawn check, next poll in ${nextPollSec}s`);
|
|
194
|
+
idleLoggedStrategies.add(strategy.strategy_id);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
console.error('Error processing ready strategies:', error);
|
|
200
|
+
}
|
|
201
|
+
finally {
|
|
202
|
+
isProcessing = false;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Check that every session recorded as 'starting' or 'running' in the DB
|
|
207
|
+
* has a corresponding active team in memory.
|
|
208
|
+
*
|
|
209
|
+
* If a session has been in a live status for more than 2 minutes but no
|
|
210
|
+
* active team claims it (e.g. the process was OOM-killed or the close
|
|
211
|
+
* handler failed to update the DB), the session is marked as 'failed' so
|
|
212
|
+
* subsequent poll cycles can respawn the strategy.
|
|
213
|
+
*/
|
|
214
|
+
export async function checkSessionHealth() {
|
|
215
|
+
const GRACE_PERIOD_MS = 2 * 60 * 1000; // 2 minutes
|
|
216
|
+
// Backoff: skip this cycle if we've had consecutive failures.
|
|
217
|
+
// After N failures, skip N poll cycles before retrying (capped at max).
|
|
218
|
+
if (healthCheckConsecutiveFailures > 0) {
|
|
219
|
+
// Use the failure count as the number of cycles to skip
|
|
220
|
+
const skipCycles = Math.min(healthCheckConsecutiveFailures, HEALTH_CHECK_MAX_SKIP_CYCLES);
|
|
221
|
+
healthCheckConsecutiveFailures++;
|
|
222
|
+
if (healthCheckConsecutiveFailures % skipCycles !== 0) {
|
|
223
|
+
return; // skip this cycle
|
|
224
|
+
}
|
|
225
|
+
console.log(`[health] Retrying after ${healthCheckConsecutiveFailures} consecutive failures (backoff: every ${skipCycles} cycles)`);
|
|
226
|
+
}
|
|
227
|
+
// Aggregate active sessions across all configured products
|
|
228
|
+
const activeSessions = [];
|
|
229
|
+
try {
|
|
230
|
+
for (const product of (config?.products ?? [])) {
|
|
231
|
+
const sessions = await getActiveSessions(product.id);
|
|
232
|
+
activeSessions.push(...sessions);
|
|
233
|
+
}
|
|
234
|
+
// Reset backoff on success
|
|
235
|
+
if (healthCheckConsecutiveFailures > 0) {
|
|
236
|
+
console.log(`[health] Session health check recovered after ${healthCheckConsecutiveFailures} failures`);
|
|
237
|
+
healthCheckConsecutiveFailures = 0;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
healthCheckConsecutiveFailures++;
|
|
242
|
+
console.warn(`[health] Failed to fetch active sessions (failure #${healthCheckConsecutiveFailures}): ${err.message}`);
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
if (activeSessions.length === 0) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
console.log(`[health] Checking ${activeSessions.length} active session(s) for orphaned processes`);
|
|
249
|
+
// Build a set of all leadSessionIds currently tracked in memory
|
|
250
|
+
const activeTeams = getActiveTeams();
|
|
251
|
+
const trackedSessionIds = new Set();
|
|
252
|
+
for (const team of activeTeams.values()) {
|
|
253
|
+
if (team.leadSessionId) {
|
|
254
|
+
trackedSessionIds.add(team.leadSessionId);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
const now = Date.now();
|
|
258
|
+
const staleSessionIds = [];
|
|
259
|
+
for (const session of activeSessions) {
|
|
260
|
+
// Skip if this session is tracked by an active in-memory team
|
|
261
|
+
if (trackedSessionIds.has(session.id)) {
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
// Apply grace period: ignore sessions that started very recently
|
|
265
|
+
// (in case the team is still being set up and hasn't registered yet)
|
|
266
|
+
const startedAt = session.started_at ?? session.queued_at;
|
|
267
|
+
if (!startedAt) {
|
|
268
|
+
// Cannot determine session age — skip conservatively
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
const sessionAgeMs = now - new Date(startedAt).getTime();
|
|
272
|
+
if (sessionAgeMs < GRACE_PERIOD_MS) {
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
// PID liveness check: if the session's process is still alive,
|
|
276
|
+
// skip orphan detection. This prevents false positives when the
|
|
277
|
+
// in-memory tracking is stale but the process is genuinely running.
|
|
278
|
+
//
|
|
279
|
+
// Note: full re-registration into activeTeams is not attempted here because
|
|
280
|
+
// StrategyTeamState requires stdin handles, execution config, pipeline config,
|
|
281
|
+
// and other fields that cannot be reconstructed from a DB session row alone.
|
|
282
|
+
// The process will continue running; the next daemon restart will recover state.
|
|
283
|
+
const pid = session.pid;
|
|
284
|
+
if (pid != null) {
|
|
285
|
+
try {
|
|
286
|
+
process.kill(pid, 0); // signal 0 = test if process exists
|
|
287
|
+
const runningAgents = getRunningAgents();
|
|
288
|
+
const inRunningAgents = runningAgents.has(session.id);
|
|
289
|
+
console.warn(`[health] Session ${session.id} not tracked in-memory but PID ${pid} is alive — skipping orphan detection` +
|
|
290
|
+
` (strategy=${session.strategy_id ?? 'none'}, inRunningAgents=${inRunningAgents})`);
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
// process.kill throws if PID does not exist — proceed to mark as orphaned
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
staleSessionIds.push(session.id);
|
|
298
|
+
console.warn(`[health] Orphaned session detected: ${session.id} ` +
|
|
299
|
+
`(status=${session.status}, age=${Math.round(sessionAgeMs / 1000)}s, ` +
|
|
300
|
+
`strategy=${session.strategy_id ?? 'none'}, delivery=${session.delivery_id ?? 'none'})`);
|
|
301
|
+
}
|
|
302
|
+
if (staleSessionIds.length === 0) {
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
console.log(`[health] Marking ${staleSessionIds.length} orphaned session(s) as failed`);
|
|
306
|
+
const updateResults = await Promise.allSettled(staleSessionIds.map(sessionId => withRetry(() => updateSession(sessionId, {
|
|
307
|
+
status: 'failed',
|
|
308
|
+
exit_reason: 'Session health check: no active team found for running session',
|
|
309
|
+
ended_at: new Date().toISOString(),
|
|
310
|
+
}), { maxAttempts: 3, baseDelayMs: 1000, label: 'health-check-session-update' })));
|
|
311
|
+
for (let i = 0; i < updateResults.length; i++) {
|
|
312
|
+
const result = updateResults[i];
|
|
313
|
+
if (result.status === 'rejected') {
|
|
314
|
+
console.error(`[health] Failed to mark session ${staleSessionIds[i]} as failed: ${result.reason.message}`);
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
console.log(`[health] Marked session ${staleSessionIds[i]} as failed`);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Stop all listeners.
|
|
323
|
+
*/
|
|
324
|
+
export async function stopListeners() {
|
|
325
|
+
if (pollInterval) {
|
|
326
|
+
clearInterval(pollInterval);
|
|
327
|
+
pollInterval = null;
|
|
328
|
+
}
|
|
329
|
+
console.log('Stopped polling');
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Refresh roles from API.
|
|
333
|
+
*/
|
|
334
|
+
export async function refreshRoles() {
|
|
335
|
+
if (!config)
|
|
336
|
+
return;
|
|
337
|
+
const roleList = await getAgentRoles(config.organizationId);
|
|
338
|
+
roles.clear();
|
|
339
|
+
for (const role of roleList) {
|
|
340
|
+
roles.set(role.id, role);
|
|
341
|
+
}
|
|
342
|
+
console.log(`Refreshed ${roles.size} agent roles`);
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Trigger an immediate check for ready strategies.
|
|
346
|
+
* Useful after a session completes to auto-advance to next delivery.
|
|
347
|
+
* No-ops during daemon shutdown to prevent spawn attempts after the
|
|
348
|
+
* resource governor has been shut down.
|
|
349
|
+
*/
|
|
350
|
+
export function triggerCheck() {
|
|
351
|
+
if (isDaemonShuttingDown())
|
|
352
|
+
return;
|
|
353
|
+
processReadyStrategies();
|
|
354
|
+
}
|
|
355
|
+
// Note: Detection of completed guard agents and re-evaluation of paused deliveries
|
|
356
|
+
// is handled by the Human Routing UI. When a human makes a routing decision,
|
|
357
|
+
// the UI updates the transition_blocks.decision_path and sets the delivery back to 'queued',
|
|
358
|
+
// which the normal poll loop picks up. For spawn_agent triggers, the spawned agent's
|
|
359
|
+
// completion triggers a re-poll via triggerCheck(), and the delivery will be re-evaluated
|
|
360
|
+
// on the next spawn cycle since it remains in 'paused' status until the human routes it.
|
|
361
|
+
//# sourceMappingURL=listener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon-specific log manager -- thin wrapper around @telora/daemon-core.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the shared types and provides a daemon-specific pruneOldLogs
|
|
5
|
+
* overload that accepts DaemonConfig (which satisfies LogRetentionConfig).
|
|
6
|
+
*/
|
|
7
|
+
import { type LogManagerDeps, type PruneResult } from '@telora/daemon-core';
|
|
8
|
+
import type { DaemonConfig } from './types.js';
|
|
9
|
+
export type { LogFileInfo, LogManagerDeps, LogRetentionConfig, PruneResult } from '@telora/daemon-core';
|
|
10
|
+
export { extractSessionKey, scanLogDirectory } from '@telora/daemon-core';
|
|
11
|
+
/**
|
|
12
|
+
* Prune old log files using daemon configuration.
|
|
13
|
+
*
|
|
14
|
+
* DaemonConfig has logDir, logMaxAgeDays, logMaxTotalBytes, logMaxFiles
|
|
15
|
+
* which satisfies LogRetentionConfig from daemon-core.
|
|
16
|
+
*/
|
|
17
|
+
export declare function pruneOldLogs(config: DaemonConfig, deps?: LogManagerDeps): Promise<PruneResult>;
|
|
18
|
+
//# sourceMappingURL=log-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-manager.d.ts","sourceRoot":"","sources":["../src/log-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACxG,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE1E;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,WAAW,CAAC,CAEtB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon-specific log manager -- thin wrapper around @telora/daemon-core.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the shared types and provides a daemon-specific pruneOldLogs
|
|
5
|
+
* overload that accepts DaemonConfig (which satisfies LogRetentionConfig).
|
|
6
|
+
*/
|
|
7
|
+
import { pruneOldLogs as corePruneOldLogs, } from '@telora/daemon-core';
|
|
8
|
+
export { extractSessionKey, scanLogDirectory } from '@telora/daemon-core';
|
|
9
|
+
/**
|
|
10
|
+
* Prune old log files using daemon configuration.
|
|
11
|
+
*
|
|
12
|
+
* DaemonConfig has logDir, logMaxAgeDays, logMaxTotalBytes, logMaxFiles
|
|
13
|
+
* which satisfies LogRetentionConfig from daemon-core.
|
|
14
|
+
*/
|
|
15
|
+
export async function pruneOldLogs(config, deps) {
|
|
16
|
+
return corePruneOldLogs(config, deps);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=log-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-manager.js","sourceRoot":"","sources":["../src/log-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,YAAY,IAAI,gBAAgB,GAGjC,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAoB,EACpB,IAAqB;IAErB,OAAO,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTLP logs payload parser.
|
|
3
|
+
*
|
|
4
|
+
* Parses OpenTelemetry logs JSON payloads from Claude Code and
|
|
5
|
+
* buffers event rows for batched Postgres inserts.
|
|
6
|
+
*/
|
|
7
|
+
import type { OtlpLogsPayload } from './otlp-types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Parse OTLP logs payload and buffer event rows.
|
|
10
|
+
*
|
|
11
|
+
* Claude Code emits events via the OTLP logs protocol with an `event.name`
|
|
12
|
+
* attribute identifying the event type. Names may be prefixed with `claude_code.`
|
|
13
|
+
* or bare -- we normalize to bare names before matching:
|
|
14
|
+
* - tool_result: tool_name, success, duration_ms, error
|
|
15
|
+
* - api_request: model, cost_usd, duration_ms, token counts
|
|
16
|
+
* - api_error: model, error, status_code, duration_ms
|
|
17
|
+
* - user_prompt: prompt_length
|
|
18
|
+
* - tool_decision: tool_name, decision, source
|
|
19
|
+
*/
|
|
20
|
+
export declare function processLogs(payload: OtlpLogsPayload, fallbackOrgId: string): void;
|
|
21
|
+
//# sourceMappingURL=otlp-log-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otlp-log-parser.d.ts","sourceRoot":"","sources":["../src/otlp-log-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAgBvD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAkIjF"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTLP logs payload parser.
|
|
3
|
+
*
|
|
4
|
+
* Parses OpenTelemetry logs JSON payloads from Claude Code and
|
|
5
|
+
* buffers event rows for batched Postgres inserts.
|
|
6
|
+
*/
|
|
7
|
+
import { extractResourceAttributes, buildFactoryMetadata, getLogAttribute, getLogAttributeBool, getLogAttributeInt, getLogAttributeDouble, nanoToIso, } from './otlp-types.js';
|
|
8
|
+
import { bufferMetric, bufferEvent, } from './telemetry-writer.js';
|
|
9
|
+
/**
|
|
10
|
+
* Parse OTLP logs payload and buffer event rows.
|
|
11
|
+
*
|
|
12
|
+
* Claude Code emits events via the OTLP logs protocol with an `event.name`
|
|
13
|
+
* attribute identifying the event type. Names may be prefixed with `claude_code.`
|
|
14
|
+
* or bare -- we normalize to bare names before matching:
|
|
15
|
+
* - tool_result: tool_name, success, duration_ms, error
|
|
16
|
+
* - api_request: model, cost_usd, duration_ms, token counts
|
|
17
|
+
* - api_error: model, error, status_code, duration_ms
|
|
18
|
+
* - user_prompt: prompt_length
|
|
19
|
+
* - tool_decision: tool_name, decision, source
|
|
20
|
+
*/
|
|
21
|
+
export function processLogs(payload, fallbackOrgId) {
|
|
22
|
+
if (!payload.resourceLogs)
|
|
23
|
+
return;
|
|
24
|
+
for (const rl of payload.resourceLogs) {
|
|
25
|
+
const attrs = extractResourceAttributes(rl.resource);
|
|
26
|
+
const orgId = attrs.orgId ?? fallbackOrgId;
|
|
27
|
+
const factoryMeta = buildFactoryMetadata(attrs);
|
|
28
|
+
// Track tool call/error counts per resource for metric aggregation
|
|
29
|
+
let toolCallCount = 0;
|
|
30
|
+
let toolErrorCount = 0;
|
|
31
|
+
let earliestNano;
|
|
32
|
+
let latestNano;
|
|
33
|
+
for (const sl of rl.scopeLogs ?? []) {
|
|
34
|
+
for (const lr of sl.logRecords ?? []) {
|
|
35
|
+
// Claude Code uses `event.name` attribute for event identification.
|
|
36
|
+
// Fall back to body.stringValue (some OTel exporters put event name there).
|
|
37
|
+
const rawEventName = getLogAttribute(lr.attributes, 'event.name')
|
|
38
|
+
?? lr.body?.stringValue
|
|
39
|
+
?? lr.severityText
|
|
40
|
+
?? 'unknown';
|
|
41
|
+
// Normalize: strip `claude_code.` prefix if present so the switch
|
|
42
|
+
// matches regardless of whether Claude Code emits prefixed or bare names.
|
|
43
|
+
const eventName = rawEventName.startsWith('claude_code.')
|
|
44
|
+
? rawEventName.slice('claude_code.'.length)
|
|
45
|
+
: rawEventName;
|
|
46
|
+
// Track time range across all events
|
|
47
|
+
if (lr.timeUnixNano) {
|
|
48
|
+
if (!earliestNano || lr.timeUnixNano < earliestNano)
|
|
49
|
+
earliestNano = lr.timeUnixNano;
|
|
50
|
+
if (!latestNano || lr.timeUnixNano > latestNano)
|
|
51
|
+
latestNano = lr.timeUnixNano;
|
|
52
|
+
}
|
|
53
|
+
const row = {
|
|
54
|
+
organization_id: orgId,
|
|
55
|
+
strategy_id: attrs.strategyId,
|
|
56
|
+
delivery_id: attrs.deliveryId,
|
|
57
|
+
session_id: attrs.sessionId,
|
|
58
|
+
event_type: eventName,
|
|
59
|
+
tool_name: null,
|
|
60
|
+
success: null,
|
|
61
|
+
duration_ms: null,
|
|
62
|
+
error_message: null,
|
|
63
|
+
metadata: factoryMeta ? { ...factoryMeta } : null,
|
|
64
|
+
event_timestamp: nanoToIso(lr.timeUnixNano),
|
|
65
|
+
};
|
|
66
|
+
// Extract event-specific fields based on normalized event name
|
|
67
|
+
switch (eventName) {
|
|
68
|
+
case 'tool_result': {
|
|
69
|
+
row.tool_name = getLogAttribute(lr.attributes, 'tool_name');
|
|
70
|
+
row.success = getLogAttributeBool(lr.attributes, 'success');
|
|
71
|
+
row.duration_ms = getLogAttributeInt(lr.attributes, 'duration_ms');
|
|
72
|
+
row.error_message = getLogAttribute(lr.attributes, 'error');
|
|
73
|
+
// Aggregate tool counts for metric row
|
|
74
|
+
toolCallCount++;
|
|
75
|
+
if (row.success === false)
|
|
76
|
+
toolErrorCount++;
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
case 'api_request':
|
|
80
|
+
row.duration_ms = getLogAttributeInt(lr.attributes, 'duration_ms');
|
|
81
|
+
row.metadata = {
|
|
82
|
+
...row.metadata,
|
|
83
|
+
model: getLogAttribute(lr.attributes, 'model'),
|
|
84
|
+
cost_usd: getLogAttributeDouble(lr.attributes, 'cost_usd'),
|
|
85
|
+
input_tokens: getLogAttributeInt(lr.attributes, 'input_tokens'),
|
|
86
|
+
output_tokens: getLogAttributeInt(lr.attributes, 'output_tokens'),
|
|
87
|
+
cache_read_tokens: getLogAttributeInt(lr.attributes, 'cache_read_tokens'),
|
|
88
|
+
cache_creation_tokens: getLogAttributeInt(lr.attributes, 'cache_creation_tokens'),
|
|
89
|
+
};
|
|
90
|
+
break;
|
|
91
|
+
case 'api_error':
|
|
92
|
+
row.error_message = getLogAttribute(lr.attributes, 'error');
|
|
93
|
+
row.duration_ms = getLogAttributeInt(lr.attributes, 'duration_ms');
|
|
94
|
+
row.metadata = {
|
|
95
|
+
...row.metadata,
|
|
96
|
+
model: getLogAttribute(lr.attributes, 'model'),
|
|
97
|
+
status_code: getLogAttributeInt(lr.attributes, 'status_code'),
|
|
98
|
+
attempt: getLogAttributeInt(lr.attributes, 'attempt'),
|
|
99
|
+
};
|
|
100
|
+
break;
|
|
101
|
+
case 'user_prompt':
|
|
102
|
+
row.metadata = {
|
|
103
|
+
...row.metadata,
|
|
104
|
+
prompt_length: getLogAttributeInt(lr.attributes, 'prompt_length'),
|
|
105
|
+
};
|
|
106
|
+
break;
|
|
107
|
+
case 'tool_decision':
|
|
108
|
+
row.tool_name = getLogAttribute(lr.attributes, 'tool_name');
|
|
109
|
+
row.metadata = {
|
|
110
|
+
...row.metadata,
|
|
111
|
+
decision: getLogAttribute(lr.attributes, 'decision'),
|
|
112
|
+
source: getLogAttribute(lr.attributes, 'source'),
|
|
113
|
+
};
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
bufferEvent(row);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Emit a metric row with aggregated tool counts from tool_result events
|
|
120
|
+
if (toolCallCount > 0) {
|
|
121
|
+
const now = new Date().toISOString();
|
|
122
|
+
bufferMetric({
|
|
123
|
+
organization_id: orgId,
|
|
124
|
+
strategy_id: attrs.strategyId,
|
|
125
|
+
delivery_id: attrs.deliveryId,
|
|
126
|
+
session_id: attrs.sessionId,
|
|
127
|
+
input_tokens: 0,
|
|
128
|
+
output_tokens: 0,
|
|
129
|
+
cache_read_tokens: 0,
|
|
130
|
+
cache_creation_tokens: 0,
|
|
131
|
+
cost_usd: 0,
|
|
132
|
+
active_time_ms: 0,
|
|
133
|
+
tool_call_count: toolCallCount,
|
|
134
|
+
tool_error_count: toolErrorCount,
|
|
135
|
+
model: null,
|
|
136
|
+
metadata: factoryMeta,
|
|
137
|
+
period_start: earliestNano ? nanoToIso(earliestNano) : now,
|
|
138
|
+
period_end: latestNano ? nanoToIso(latestNano) : now,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=otlp-log-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otlp-log-parser.js","sourceRoot":"","sources":["../src/otlp-log-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTLP metrics payload parser.
|
|
3
|
+
*
|
|
4
|
+
* Parses OpenTelemetry metrics JSON payloads from Claude Code and
|
|
5
|
+
* buffers metric rows for batched Postgres inserts.
|
|
6
|
+
*/
|
|
7
|
+
import type { OtlpMetricsPayload } from './otlp-types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Parse OTLP metrics payload and buffer metric rows.
|
|
10
|
+
*
|
|
11
|
+
* Claude Code emits these metrics (per official OTel schema):
|
|
12
|
+
* - claude_code.token.usage (Counter, attrs: type=input|output|cacheRead|cacheCreation, model)
|
|
13
|
+
* - claude_code.cost.usage (Counter, attr: model, unit: USD)
|
|
14
|
+
* - claude_code.active_time.total (Counter, unit: seconds)
|
|
15
|
+
* - claude_code.session.count, claude_code.lines_of_code.count, etc.
|
|
16
|
+
*
|
|
17
|
+
* We aggregate per-resource into a single TelemetryMetricRow.
|
|
18
|
+
*/
|
|
19
|
+
export declare function processMetrics(payload: OtlpMetricsPayload, fallbackOrgId: string): void;
|
|
20
|
+
//# sourceMappingURL=otlp-metric-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otlp-metric-parser.d.ts","sourceRoot":"","sources":["../src/otlp-metric-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAa1D;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAmGvF"}
|