@telora/daemon 0.19.43 → 0.19.74
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/build-info.json +8 -3
- package/dist/assembly-engine.d.ts +9 -0
- package/dist/assembly-engine.d.ts.map +1 -1
- package/dist/assembly-engine.js.map +1 -1
- package/dist/audit-hooks.js +1 -1
- package/dist/audit-shape.d.ts +103 -0
- package/dist/audit-shape.d.ts.map +1 -0
- package/dist/audit-shape.js +81 -0
- package/dist/audit-shape.js.map +1 -0
- package/dist/branch-status.js +2 -2
- package/dist/branch-status.js.map +1 -1
- package/dist/ci-sensor-loop.d.ts +47 -0
- package/dist/ci-sensor-loop.d.ts.map +1 -0
- package/dist/ci-sensor-loop.js +116 -0
- package/dist/ci-sensor-loop.js.map +1 -0
- package/dist/ci-status-git.d.ts +52 -0
- package/dist/ci-status-git.d.ts.map +1 -0
- package/dist/ci-status-git.js +86 -0
- package/dist/ci-status-git.js.map +1 -0
- package/dist/ci-status.d.ts +122 -0
- package/dist/ci-status.d.ts.map +1 -0
- package/dist/ci-status.js +114 -0
- package/dist/ci-status.js.map +1 -0
- package/dist/cli/connect/agents.d.ts +24 -0
- package/dist/cli/connect/agents.d.ts.map +1 -0
- package/dist/cli/connect/agents.js +65 -0
- package/dist/cli/connect/agents.js.map +1 -0
- package/dist/cli/connect/claude.d.ts +31 -0
- package/dist/cli/connect/claude.d.ts.map +1 -0
- package/dist/cli/connect/claude.js +104 -0
- package/dist/cli/connect/claude.js.map +1 -0
- package/dist/cli/connect/cline.d.ts +37 -0
- package/dist/cli/connect/cline.d.ts.map +1 -0
- package/dist/cli/connect/cline.js +115 -0
- package/dist/cli/connect/cline.js.map +1 -0
- package/dist/cli/connect/codex.d.ts +44 -0
- package/dist/cli/connect/codex.d.ts.map +1 -0
- package/dist/cli/connect/codex.js +111 -0
- package/dist/cli/connect/codex.js.map +1 -0
- package/dist/cli/connect/ide.d.ts +69 -0
- package/dist/cli/connect/ide.d.ts.map +1 -0
- package/dist/cli/connect/ide.js +134 -0
- package/dist/cli/connect/ide.js.map +1 -0
- package/dist/cli/connect/scaffolding.d.ts +31 -0
- package/dist/cli/connect/scaffolding.d.ts.map +1 -0
- package/dist/cli/connect/scaffolding.js +52 -0
- package/dist/cli/connect/scaffolding.js.map +1 -0
- package/dist/cli/connect/shared.d.ts +30 -0
- package/dist/cli/connect/shared.d.ts.map +1 -0
- package/dist/cli/connect/shared.js +11 -0
- package/dist/cli/connect/shared.js.map +1 -0
- package/dist/cli/connect.d.ts +9 -210
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +10 -526
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/open.js +2 -2
- package/dist/completion/event.d.ts +3 -0
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +44 -9
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/merge-phase.d.ts +3 -0
- package/dist/completion/merge-phase.d.ts.map +1 -1
- package/dist/completion/merge-phase.js +35 -3
- package/dist/completion/merge-phase.js.map +1 -1
- package/dist/completion/read-only-pristine.d.ts +1 -1
- package/dist/completion/read-only-pristine.d.ts.map +1 -1
- package/dist/completion/read-only-pristine.js +1 -1
- package/dist/completion/read-only-pristine.js.map +1 -1
- package/dist/completion/review-exit-phase.d.ts +30 -3
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +203 -15
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/status-advance-phase.js +1 -1
- package/dist/completion/status-advance-phase.js.map +1 -1
- package/dist/completion/team-completion.d.ts.map +1 -1
- package/dist/completion/team-completion.js +22 -2
- package/dist/completion/team-completion.js.map +1 -1
- package/dist/completion/team-lifecycle.js +1 -1
- package/dist/completion/terminated-work-reconcile.js +1 -1
- package/dist/completion/terminated-work-reconcile.js.map +1 -1
- package/dist/condition-evaluators.d.ts +41 -2
- package/dist/condition-evaluators.d.ts.map +1 -1
- package/dist/condition-evaluators.js +37 -288
- package/dist/condition-evaluators.js.map +1 -1
- package/dist/context-audit.d.ts +1 -1
- package/dist/context-audit.d.ts.map +1 -1
- package/dist/context-lock.d.ts +1 -1
- package/dist/context-lock.d.ts.map +1 -1
- package/dist/control-state.d.ts +2 -2
- package/dist/control-state.d.ts.map +1 -1
- package/dist/control-state.js +4 -3
- package/dist/control-state.js.map +1 -1
- package/dist/daemon-process.d.ts +1 -1
- package/dist/daemon-process.d.ts.map +1 -1
- package/dist/delivery-advance-block.d.ts +1 -1
- package/dist/delivery-advance-block.d.ts.map +1 -1
- package/dist/delivery-advance-block.js +1 -1
- package/dist/delivery-advance-block.js.map +1 -1
- package/dist/delivery-lifecycle.js +1 -1
- package/dist/delivery-reconciler-shadow.d.ts +1 -1
- package/dist/delivery-reconciler-shadow.d.ts.map +1 -1
- package/dist/delivery-reconciler-shadow.js +1 -1
- package/dist/delivery-reconciler-shadow.js.map +1 -1
- package/dist/delivery-reconciler.d.ts +1 -0
- package/dist/delivery-reconciler.d.ts.map +1 -1
- package/dist/delivery-reconciler.js +6 -0
- package/dist/delivery-reconciler.js.map +1 -1
- package/dist/directive-executor.js +1 -1
- package/dist/directive-executor.js.map +1 -1
- package/dist/drift-eval-loop.d.ts.map +1 -1
- package/dist/drift-eval-loop.js +6 -14
- package/dist/drift-eval-loop.js.map +1 -1
- package/dist/escalations.d.ts +1 -1
- package/dist/escalations.d.ts.map +1 -1
- package/dist/escalations.js +1 -1
- package/dist/escalations.js.map +1 -1
- package/dist/evaluation-context.d.ts +2 -33
- package/dist/evaluation-context.d.ts.map +1 -1
- package/dist/evaluation-context.js +2 -56
- package/dist/evaluation-context.js.map +1 -1
- package/dist/focus-engine.d.ts +14 -5
- package/dist/focus-engine.d.ts.map +1 -1
- package/dist/focus-engine.js +35 -289
- package/dist/focus-engine.js.map +1 -1
- package/dist/focus-executor.d.ts +10 -791
- package/dist/focus-executor.d.ts.map +1 -1
- package/dist/focus-executor.js +42 -1566
- package/dist/focus-executor.js.map +1 -1
- package/dist/focus-lifecycle.js +2 -2
- package/dist/focus-lifecycle.js.map +1 -1
- package/dist/focus-loop-registry.d.ts +52 -0
- package/dist/focus-loop-registry.d.ts.map +1 -0
- package/dist/focus-loop-registry.js +328 -0
- package/dist/focus-loop-registry.js.map +1 -0
- package/dist/focus-merge.d.ts +1 -1
- package/dist/focus-merge.d.ts.map +1 -1
- package/dist/focus-merge.js +3 -3
- package/dist/focus-merge.js.map +1 -1
- package/dist/focus-phase.d.ts +4 -0
- package/dist/focus-phase.d.ts.map +1 -1
- package/dist/focus-phase.js +3 -3
- package/dist/focus-phase.js.map +1 -1
- package/dist/focus-stage-lifecycle/planning-release.d.ts +197 -0
- package/dist/focus-stage-lifecycle/planning-release.d.ts.map +1 -0
- package/dist/focus-stage-lifecycle/planning-release.js +312 -0
- package/dist/focus-stage-lifecycle/planning-release.js.map +1 -0
- package/dist/focus-stage-lifecycle/review-convergence.d.ts +133 -0
- package/dist/focus-stage-lifecycle/review-convergence.d.ts.map +1 -0
- package/dist/focus-stage-lifecycle/review-convergence.js +235 -0
- package/dist/focus-stage-lifecycle/review-convergence.js.map +1 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts +133 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.js +365 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -0
- package/dist/focus-stage-lifecycle.d.ts +22 -403
- package/dist/focus-stage-lifecycle.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle.js +26 -798
- package/dist/focus-stage-lifecycle.js.map +1 -1
- package/dist/{git-activity.d.ts → git/activity.d.ts} +1 -1
- package/dist/git/activity.d.ts.map +1 -0
- package/dist/{git-activity.js → git/activity.js} +2 -2
- package/dist/git/activity.js.map +1 -0
- package/dist/{git-branch.d.ts → git/branch.d.ts} +2 -2
- package/dist/git/branch.d.ts.map +1 -0
- package/dist/{git-branch.js → git/branch.js} +2 -2
- package/dist/git/branch.js.map +1 -0
- package/dist/{git-fetch.d.ts → git/fetch.d.ts} +2 -2
- package/dist/git/fetch.d.ts.map +1 -0
- package/dist/{git-fetch.js → git/fetch.js} +1 -1
- package/dist/git/fetch.js.map +1 -0
- package/dist/{git-genesis.d.ts → git/genesis.d.ts} +3 -3
- package/dist/git/genesis.d.ts.map +1 -0
- package/dist/{git-genesis.js → git/genesis.js} +5 -5
- package/dist/git/genesis.js.map +1 -0
- package/dist/git/index.d.ts +36 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +36 -0
- package/dist/git/index.js.map +1 -0
- package/dist/{git-integration.d.ts → git/integration.d.ts} +2 -2
- package/dist/git/integration.d.ts.map +1 -0
- package/dist/{git-integration.js → git/integration.js} +4 -4
- package/dist/git/integration.js.map +1 -0
- package/dist/{git-merge-helpers.d.ts → git/merge-helpers.d.ts} +3 -3
- package/dist/git/merge-helpers.d.ts.map +1 -0
- package/dist/{git-merge-helpers.js → git/merge-helpers.js} +3 -3
- package/dist/git/merge-helpers.js.map +1 -0
- package/dist/{git-merge-lock.d.ts → git/merge-lock.d.ts} +1 -1
- package/dist/git/merge-lock.d.ts.map +1 -0
- package/dist/{git-merge-lock.js → git/merge-lock.js} +1 -1
- package/dist/git/merge-lock.js.map +1 -0
- package/dist/{git-merge-strategies.d.ts → git/merge-strategies.d.ts} +2 -2
- package/dist/git/merge-strategies.d.ts.map +1 -0
- package/dist/{git-merge-strategies.js → git/merge-strategies.js} +3 -3
- package/dist/git/merge-strategies.js.map +1 -0
- package/dist/{git-merge.d.ts → git/merge.d.ts} +4 -4
- package/dist/git/merge.d.ts.map +1 -0
- package/dist/{git-merge.js → git/merge.js} +4 -4
- package/dist/git/merge.js.map +1 -0
- package/dist/{git-state-detector.d.ts → git/state-detector.d.ts} +2 -2
- package/dist/git/state-detector.d.ts.map +1 -0
- package/dist/{git-state-detector.js → git/state-detector.js} +7 -7
- package/dist/git/state-detector.js.map +1 -0
- package/dist/{git-types.d.ts → git/types.d.ts} +2 -2
- package/dist/git/types.d.ts.map +1 -0
- package/dist/{git-types.js → git/types.js} +1 -1
- package/dist/git/types.js.map +1 -0
- package/dist/{git-utils.d.ts → git/utils.d.ts} +1 -1
- package/dist/git/utils.d.ts.map +1 -0
- package/dist/{git-utils.js → git/utils.js} +2 -2
- package/dist/git/utils.js.map +1 -0
- package/dist/git.d.ts +5 -5
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +10 -10
- package/dist/git.js.map +1 -1
- package/dist/guard-engine.d.ts +3 -2
- package/dist/guard-engine.d.ts.map +1 -1
- package/dist/guard-engine.js +2 -2
- package/dist/guard-engine.js.map +1 -1
- package/dist/install-probe-tick.d.ts +63 -0
- package/dist/install-probe-tick.d.ts.map +1 -0
- package/dist/install-probe-tick.js +137 -0
- package/dist/install-probe-tick.js.map +1 -0
- package/dist/install-probe.d.ts +115 -0
- package/dist/install-probe.d.ts.map +1 -0
- package/dist/install-probe.js +197 -0
- package/dist/install-probe.js.map +1 -0
- package/dist/listener-auto-advance.d.ts.map +1 -1
- package/dist/listener-auto-advance.js +51 -9
- package/dist/listener-auto-advance.js.map +1 -1
- package/dist/listener.d.ts.map +1 -1
- package/dist/listener.js +15 -7
- package/dist/listener.js.map +1 -1
- package/dist/{loop-context-audit-pass.d.ts → loops/context-audit-pass.d.ts} +4 -4
- package/dist/loops/context-audit-pass.d.ts.map +1 -0
- package/dist/{loop-context-audit-pass.js → loops/context-audit-pass.js} +7 -7
- package/dist/loops/context-audit-pass.js.map +1 -0
- package/dist/{loop-engine-types.d.ts → loops/engine-types.d.ts} +1 -1
- package/dist/loops/engine-types.d.ts.map +1 -0
- package/dist/{loop-engine-types.js → loops/engine-types.js} +1 -1
- package/dist/loops/engine-types.js.map +1 -0
- package/dist/{loop-engine.d.ts → loops/engine.d.ts} +6 -6
- package/dist/loops/engine.d.ts.map +1 -0
- package/dist/{loop-engine.js → loops/engine.js} +13 -13
- package/dist/loops/engine.js.map +1 -0
- package/dist/{loop-event-bus.d.ts → loops/event-bus.d.ts} +1 -1
- package/dist/loops/event-bus.d.ts.map +1 -0
- package/dist/{loop-event-bus.js → loops/event-bus.js} +1 -1
- package/dist/loops/event-bus.js.map +1 -0
- package/dist/loops/index.d.ts +33 -0
- package/dist/loops/index.d.ts.map +1 -0
- package/dist/loops/index.js +32 -0
- package/dist/loops/index.js.map +1 -0
- package/dist/{loop-llm-client.d.ts → loops/llm-client.d.ts} +3 -3
- package/dist/loops/llm-client.d.ts.map +1 -0
- package/dist/{loop-llm-client.js → loops/llm-client.js} +3 -3
- package/dist/loops/llm-client.js.map +1 -0
- package/dist/{loop-llm-flag.d.ts → loops/llm-flag.d.ts} +1 -1
- package/dist/loops/llm-flag.d.ts.map +1 -0
- package/dist/{loop-llm-flag.js → loops/llm-flag.js} +1 -1
- package/dist/loops/llm-flag.js.map +1 -0
- package/dist/{loop-operational-block.d.ts → loops/operational-block.d.ts} +1 -1
- package/dist/loops/operational-block.d.ts.map +1 -0
- package/dist/{loop-operational-block.js → loops/operational-block.js} +1 -1
- package/dist/loops/operational-block.js.map +1 -0
- package/dist/{loop-prompt-builder.d.ts → loops/prompt-builder.d.ts} +2 -2
- package/dist/loops/prompt-builder.d.ts.map +1 -0
- package/dist/{loop-prompt-builder.js → loops/prompt-builder.js} +1 -1
- package/dist/loops/prompt-builder.js.map +1 -0
- package/dist/{loop-variance.d.ts → loops/variance.d.ts} +1 -1
- package/dist/loops/variance.d.ts.map +1 -0
- package/dist/{loop-variance.js → loops/variance.js} +1 -1
- package/dist/loops/variance.js.map +1 -0
- package/dist/merge-back-loop.d.ts.map +1 -1
- package/dist/merge-back-loop.js +4 -3
- package/dist/merge-back-loop.js.map +1 -1
- package/dist/merge-detector.js +2 -2
- package/dist/merge-detector.js.map +1 -1
- package/dist/{nexus-endpoint-clearance.d.ts → nexus/endpoint-clearance.d.ts} +2 -2
- package/dist/nexus/endpoint-clearance.d.ts.map +1 -0
- package/dist/{nexus-endpoint-clearance.js → nexus/endpoint-clearance.js} +2 -2
- package/dist/nexus/endpoint-clearance.js.map +1 -0
- package/dist/{nexus-escalation-bridge.d.ts → nexus/escalation-bridge.d.ts} +1 -1
- package/dist/nexus/escalation-bridge.d.ts.map +1 -0
- package/dist/{nexus-escalation-bridge.js → nexus/escalation-bridge.js} +2 -2
- package/dist/nexus/escalation-bridge.js.map +1 -0
- package/dist/{nexus-incoming.d.ts → nexus/incoming.d.ts} +2 -2
- package/dist/nexus/incoming.d.ts.map +1 -0
- package/dist/{nexus-incoming.js → nexus/incoming.js} +2 -2
- package/dist/nexus/incoming.js.map +1 -0
- package/dist/nexus/index.d.ts +20 -0
- package/dist/nexus/index.d.ts.map +1 -0
- package/dist/nexus/index.js +20 -0
- package/dist/nexus/index.js.map +1 -0
- package/dist/{nexus-intake-spawn.d.ts → nexus/intake-spawn.d.ts} +3 -3
- package/dist/nexus/intake-spawn.d.ts.map +1 -0
- package/dist/{nexus-intake-spawn.js → nexus/intake-spawn.js} +1 -1
- package/dist/nexus/intake-spawn.js.map +1 -0
- package/dist/{nexus-intake.d.ts → nexus/intake.d.ts} +2 -2
- package/dist/nexus/intake.d.ts.map +1 -0
- package/dist/{nexus-intake.js → nexus/intake.js} +4 -4
- package/dist/nexus/intake.js.map +1 -0
- package/dist/{nexus-return.d.ts → nexus/return.d.ts} +3 -3
- package/dist/nexus/return.d.ts.map +1 -0
- package/dist/{nexus-return.js → nexus/return.js} +4 -4
- package/dist/nexus/return.js.map +1 -0
- package/dist/otlp/index.d.ts +19 -0
- package/dist/otlp/index.d.ts.map +1 -0
- package/dist/otlp/index.js +19 -0
- package/dist/otlp/index.js.map +1 -0
- package/dist/{otlp-log-parser.d.ts → otlp/log-parser.d.ts} +2 -2
- package/dist/otlp/log-parser.d.ts.map +1 -0
- package/dist/{otlp-log-parser.js → otlp/log-parser.js} +5 -6
- package/dist/otlp/log-parser.js.map +1 -0
- package/dist/{otlp-metric-parser.d.ts → otlp/metric-parser.d.ts} +2 -2
- package/dist/otlp/metric-parser.d.ts.map +1 -0
- package/dist/{otlp-metric-parser.js → otlp/metric-parser.js} +4 -5
- package/dist/otlp/metric-parser.js.map +1 -0
- package/dist/{otlp-port-manager.d.ts → otlp/port-manager.d.ts} +1 -1
- package/dist/otlp/port-manager.d.ts.map +1 -0
- package/dist/{otlp-port-manager.js → otlp/port-manager.js} +1 -1
- package/dist/otlp/port-manager.js.map +1 -0
- package/dist/{otlp-receiver.d.ts → otlp/receiver.d.ts} +2 -2
- package/dist/otlp/receiver.d.ts.map +1 -0
- package/dist/{otlp-receiver.js → otlp/receiver.js} +5 -33
- package/dist/otlp/receiver.js.map +1 -0
- package/dist/{otlp-types.d.ts → otlp/types.d.ts} +1 -9
- package/dist/otlp/types.d.ts.map +1 -0
- package/dist/{otlp-types.js → otlp/types.js} +1 -27
- package/dist/otlp/types.js.map +1 -0
- package/dist/pipeline-config.d.ts +1 -1
- package/dist/{prd-controller.d.ts → prd/controller.d.ts} +7 -7
- package/dist/prd/controller.d.ts.map +1 -0
- package/dist/{prd-controller.js → prd/controller.js} +11 -11
- package/dist/prd/controller.js.map +1 -0
- package/dist/{prd-divergence.d.ts → prd/divergence.d.ts} +2 -2
- package/dist/prd/divergence.d.ts.map +1 -0
- package/dist/{prd-divergence.js → prd/divergence.js} +1 -1
- package/dist/prd/divergence.js.map +1 -0
- package/dist/{prd-focus-pushdown.d.ts → prd/focus-pushdown.d.ts} +2 -2
- package/dist/prd/focus-pushdown.d.ts.map +1 -0
- package/dist/{prd-focus-pushdown.js → prd/focus-pushdown.js} +3 -3
- package/dist/prd/focus-pushdown.js.map +1 -0
- package/dist/{prd-frontier.d.ts → prd/frontier.d.ts} +2 -2
- package/dist/prd/frontier.d.ts.map +1 -0
- package/dist/{prd-frontier.js → prd/frontier.js} +1 -1
- package/dist/prd/frontier.js.map +1 -0
- package/dist/prd/index.d.ts +26 -0
- package/dist/prd/index.d.ts.map +1 -0
- package/dist/prd/index.js +25 -0
- package/dist/prd/index.js.map +1 -0
- package/dist/{prd-steward.d.ts → prd/steward.d.ts} +4 -4
- package/dist/prd/steward.d.ts.map +1 -0
- package/dist/{prd-steward.js → prd/steward.js} +4 -4
- package/dist/prd/steward.js.map +1 -0
- package/dist/{prd-viability.d.ts → prd/viability.d.ts} +2 -2
- package/dist/prd/viability.d.ts.map +1 -0
- package/dist/{prd-viability.js → prd/viability.js} +1 -1
- package/dist/prd/viability.js.map +1 -0
- package/dist/product-scaffold.js +2 -2
- package/dist/product-scaffold.js.map +1 -1
- package/dist/prompt-sections/persona-sections.d.ts +32 -0
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +78 -2
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/queries/context-lock-queries.js +1 -1
- package/dist/queries/context-lock-queries.js.map +1 -1
- package/dist/queries/deliveries.d.ts +31 -0
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +5 -0
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/focuses.d.ts +17 -0
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +27 -0
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/schemas.d.ts +8 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +16 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/reality-pole.js +1 -1
- package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
- package/dist/resolvers/git-diff-against-base.js +4 -1
- package/dist/resolvers/git-diff-against-base.js.map +1 -1
- package/dist/resolvers/prd-context.js +1 -1
- package/dist/sensor-sweep.js +1 -1
- package/dist/spawn/model-routing.d.ts +277 -0
- package/dist/spawn/model-routing.d.ts.map +1 -0
- package/dist/spawn/model-routing.js +464 -0
- package/dist/spawn/model-routing.js.map +1 -0
- package/dist/spawn/process-spawn.d.ts +128 -0
- package/dist/spawn/process-spawn.d.ts.map +1 -0
- package/dist/spawn/process-spawn.js +378 -0
- package/dist/spawn/process-spawn.js.map +1 -0
- package/dist/spawn/prompt-assembly.d.ts +143 -0
- package/dist/spawn/prompt-assembly.d.ts.map +1 -0
- package/dist/spawn/prompt-assembly.js +263 -0
- package/dist/spawn/prompt-assembly.js.map +1 -0
- package/dist/spawn/shared.d.ts +72 -0
- package/dist/spawn/shared.d.ts.map +1 -0
- package/dist/spawn/shared.js +14 -0
- package/dist/spawn/shared.js.map +1 -0
- package/dist/spawn/spawn-decision.d.ts +189 -0
- package/dist/spawn/spawn-decision.d.ts.map +1 -0
- package/dist/spawn/spawn-decision.js +361 -0
- package/dist/spawn/spawn-decision.js.map +1 -0
- package/dist/spawn/worktree-session.d.ts +105 -0
- package/dist/spawn/worktree-session.d.ts.map +1 -0
- package/dist/spawn/worktree-session.js +216 -0
- package/dist/spawn/worktree-session.js.map +1 -0
- package/dist/spawner/lifecycle.js +2 -2
- package/dist/spawner/lifecycle.js.map +1 -1
- package/dist/spawner/resolution.js +1 -1
- package/dist/stall-detector-config.d.ts +4 -0
- package/dist/stall-detector-config.d.ts.map +1 -1
- package/dist/stall-detector-config.js +6 -0
- package/dist/stall-detector-config.js.map +1 -1
- package/dist/state-cascade.js +1 -1
- package/dist/state-cascade.js.map +1 -1
- package/dist/team-prompt-base.d.ts +1 -1
- package/dist/team-prompt-base.d.ts.map +1 -1
- package/dist/team-prompt-base.js +1 -1
- package/dist/team-prompt-base.js.map +1 -1
- package/dist/trigger-executor.d.ts +5 -9
- package/dist/trigger-executor.d.ts.map +1 -1
- package/dist/trigger-executor.js +14 -36
- package/dist/trigger-executor.js.map +1 -1
- package/dist/types/focus.d.ts +13 -0
- package/dist/types/focus.d.ts.map +1 -1
- package/dist/types/workflow.d.ts +1 -3
- package/dist/types/workflow.d.ts.map +1 -1
- package/dist/unified-engine-lifecycle.js +1 -1
- package/dist/unified-init.d.ts +3 -3
- package/dist/unified-init.d.ts.map +1 -1
- package/dist/unified-init.js +9 -25
- package/dist/unified-init.js.map +1 -1
- package/dist/unified-shell.d.ts +3 -3
- package/dist/unified-shell.js +4 -4
- package/dist/unified-shell.js.map +1 -1
- package/dist/verification-engine.d.ts.map +1 -1
- package/dist/verification-engine.js +15 -0
- package/dist/verification-engine.js.map +1 -1
- package/dist/{worktree-focus.d.ts → worktree/focus.d.ts} +2 -2
- package/dist/worktree/focus.d.ts.map +1 -0
- package/dist/{worktree-focus.js → worktree/focus.js} +7 -7
- package/dist/worktree/focus.js.map +1 -0
- package/dist/worktree/index.d.ts +16 -0
- package/dist/worktree/index.d.ts.map +1 -0
- package/dist/worktree/index.js +16 -0
- package/dist/worktree/index.js.map +1 -0
- package/dist/{worktree-safety.d.ts → worktree/safety.d.ts} +1 -1
- package/dist/worktree/safety.d.ts.map +1 -0
- package/dist/{worktree-safety.js → worktree/safety.js} +2 -2
- package/dist/worktree/safety.js.map +1 -0
- package/dist/{worktree-state.d.ts → worktree/state.d.ts} +1 -1
- package/dist/worktree/state.d.ts.map +1 -0
- package/dist/{worktree-state.js → worktree/state.js} +6 -6
- package/dist/worktree/state.js.map +1 -0
- package/dist/worktree.d.ts +1 -1
- package/dist/worktree.js +5 -5
- package/dist/worktree.js.map +1 -1
- package/package.json +5 -4
- package/dist/git-activity.d.ts.map +0 -1
- package/dist/git-activity.js.map +0 -1
- package/dist/git-branch.d.ts.map +0 -1
- package/dist/git-branch.js.map +0 -1
- package/dist/git-fetch.d.ts.map +0 -1
- package/dist/git-fetch.js.map +0 -1
- package/dist/git-genesis.d.ts.map +0 -1
- package/dist/git-genesis.js.map +0 -1
- package/dist/git-integration.d.ts.map +0 -1
- package/dist/git-integration.js.map +0 -1
- package/dist/git-merge-helpers.d.ts.map +0 -1
- package/dist/git-merge-helpers.js.map +0 -1
- package/dist/git-merge-lock.d.ts.map +0 -1
- package/dist/git-merge-lock.js.map +0 -1
- package/dist/git-merge-strategies.d.ts.map +0 -1
- package/dist/git-merge-strategies.js.map +0 -1
- package/dist/git-merge.d.ts.map +0 -1
- package/dist/git-merge.js.map +0 -1
- package/dist/git-state-detector.d.ts.map +0 -1
- package/dist/git-state-detector.js.map +0 -1
- package/dist/git-types.d.ts.map +0 -1
- package/dist/git-types.js.map +0 -1
- package/dist/git-utils.d.ts.map +0 -1
- package/dist/git-utils.js.map +0 -1
- package/dist/loop-context-audit-pass.d.ts.map +0 -1
- package/dist/loop-context-audit-pass.js.map +0 -1
- package/dist/loop-engine-types.d.ts.map +0 -1
- package/dist/loop-engine-types.js.map +0 -1
- package/dist/loop-engine.d.ts.map +0 -1
- package/dist/loop-engine.js.map +0 -1
- package/dist/loop-event-bus.d.ts.map +0 -1
- package/dist/loop-event-bus.js.map +0 -1
- package/dist/loop-llm-client.d.ts.map +0 -1
- package/dist/loop-llm-client.js.map +0 -1
- package/dist/loop-llm-flag.d.ts.map +0 -1
- package/dist/loop-llm-flag.js.map +0 -1
- package/dist/loop-operational-block.d.ts.map +0 -1
- package/dist/loop-operational-block.js.map +0 -1
- package/dist/loop-prompt-builder.d.ts.map +0 -1
- package/dist/loop-prompt-builder.js.map +0 -1
- package/dist/loop-variance.d.ts.map +0 -1
- package/dist/loop-variance.js.map +0 -1
- package/dist/nexus-endpoint-clearance.d.ts.map +0 -1
- package/dist/nexus-endpoint-clearance.js.map +0 -1
- package/dist/nexus-escalation-bridge.d.ts.map +0 -1
- package/dist/nexus-escalation-bridge.js.map +0 -1
- package/dist/nexus-incoming.d.ts.map +0 -1
- package/dist/nexus-incoming.js.map +0 -1
- package/dist/nexus-intake-spawn.d.ts.map +0 -1
- package/dist/nexus-intake-spawn.js.map +0 -1
- package/dist/nexus-intake.d.ts.map +0 -1
- package/dist/nexus-intake.js.map +0 -1
- package/dist/nexus-return.d.ts.map +0 -1
- package/dist/nexus-return.js.map +0 -1
- package/dist/otlp-log-parser.d.ts.map +0 -1
- package/dist/otlp-log-parser.js.map +0 -1
- package/dist/otlp-metric-parser.d.ts.map +0 -1
- package/dist/otlp-metric-parser.js.map +0 -1
- package/dist/otlp-port-manager.d.ts.map +0 -1
- package/dist/otlp-port-manager.js.map +0 -1
- package/dist/otlp-receiver.d.ts.map +0 -1
- package/dist/otlp-receiver.js.map +0 -1
- package/dist/otlp-types.d.ts.map +0 -1
- package/dist/otlp-types.js.map +0 -1
- package/dist/prd-controller.d.ts.map +0 -1
- package/dist/prd-controller.js.map +0 -1
- package/dist/prd-divergence.d.ts.map +0 -1
- package/dist/prd-divergence.js.map +0 -1
- package/dist/prd-focus-pushdown.d.ts.map +0 -1
- package/dist/prd-focus-pushdown.js.map +0 -1
- package/dist/prd-frontier.d.ts.map +0 -1
- package/dist/prd-frontier.js.map +0 -1
- package/dist/prd-steward.d.ts.map +0 -1
- package/dist/prd-steward.js.map +0 -1
- package/dist/prd-viability.d.ts.map +0 -1
- package/dist/prd-viability.js.map +0 -1
- package/dist/worktree-focus.d.ts.map +0 -1
- package/dist/worktree-focus.js.map +0 -1
- package/dist/worktree-safety.d.ts.map +0 -1
- package/dist/worktree-safety.js.map +0 -1
- package/dist/worktree-state.d.ts.map +0 -1
- package/dist/worktree-state.js.map +0 -1
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Planning-wedge watchdog + zero-actionable log (extracted from
|
|
3
|
+
* focus-stage-lifecycle).
|
|
4
|
+
*
|
|
5
|
+
* Owns the daemon-side mirror of the server ready-focus rank-walk
|
|
6
|
+
* (`classifyFocusActionability`), the per-focus wedge watchdog state, and the
|
|
7
|
+
* per-tick wedge evaluation (`evaluateFocusWedge`) that both logs a
|
|
8
|
+
* zero-actionable focus (D3) and escalates a persistent wedge (D2).
|
|
9
|
+
*
|
|
10
|
+
* @module focus-stage-lifecycle/wedge-watchdog
|
|
11
|
+
*/
|
|
12
|
+
import { getFocusDeliveries as defaultGetFocusDeliveries } from '../queries/focuses.js';
|
|
13
|
+
import { createEscalation as defaultCreateEscalation, hasOpenWedgedFocusEscalation as defaultHasOpenWedgedFocusEscalation, WEDGED_FOCUS_ESCALATION_KIND, } from '../queries/issues.js';
|
|
14
|
+
import { ESCALATION_REASONS, ESCALATION_DISPOSITIONS, DELIVERY_STATUS, loadEnvConfig, } from '@telora/daemon-core';
|
|
15
|
+
import { hasActiveTeam as defaultHasActiveTeam } from '../focus-team-state.js';
|
|
16
|
+
// ── Planning-wedge watchdog + zero-actionable log (D2 + D3) ───────
|
|
17
|
+
/**
|
|
18
|
+
* Delivery execution_status sets that mirror the server-side ready-focus
|
|
19
|
+
* selector (supabase/functions/product-api/handlers/daemon-focus-handlers.ts:
|
|
20
|
+
* NON_BLOCKING_STATUSES / ACTIONABLE_STATUSES). The edge is the SSOT; this
|
|
21
|
+
* daemon-side mirror exists because the daemon receives an empty ready list for
|
|
22
|
+
* a blocked focus and has no other window onto WHY. The status->class mapping is
|
|
23
|
+
* kept in lockstep with the edge -- a divergence there would make the wedge log /
|
|
24
|
+
* escalation disagree with what the daemon actually surfaces.
|
|
25
|
+
*
|
|
26
|
+
* non-blocking = terminal-ish; never blocks a focus (skipped in the walk).
|
|
27
|
+
* actionable = a delivery the daemon can spawn a team for.
|
|
28
|
+
* everything else (planning, draft, paused) is non-terminal + non-actionable:
|
|
29
|
+
* it BLOCKS the focus when encountered first in rank order.
|
|
30
|
+
*
|
|
31
|
+
* DELIBERATE simplification vs the edge (review finding, deliveries 66c7d4d8 /
|
|
32
|
+
* bbe01d7d): the edge ALSO skips an actionable delivery that already has an active
|
|
33
|
+
* agent_session (`if (activeDeliveryIds.has(d.id)) continue;`), continuing the
|
|
34
|
+
* rank walk past it. This daemon mirror does NOT model per-delivery active
|
|
35
|
+
* sessions -- it has no equivalent of that DB query, and its in-memory team map is
|
|
36
|
+
* focus-grained, not delivery-grained. The omission is BENIGN for wedge detection:
|
|
37
|
+
* an actionable delivery with an active session means a team IS running, i.e. the
|
|
38
|
+
* focus is making progress and is definitionally NOT wedged -- exactly what
|
|
39
|
+
* `surfacesActionable: true` already reports. So the mirror can over-report
|
|
40
|
+
* "surfaces actionable" relative to the edge's "ready" list, but never under-report
|
|
41
|
+
* a wedge. We do not claim byte-for-byte parity, only that the wedge verdict agrees.
|
|
42
|
+
*/
|
|
43
|
+
const WEDGE_NON_BLOCKING_STATUSES = new Set([
|
|
44
|
+
DELIVERY_STATUS.DONE,
|
|
45
|
+
DELIVERY_STATUS.CANCELLED,
|
|
46
|
+
DELIVERY_STATUS.VERIFY,
|
|
47
|
+
]);
|
|
48
|
+
const WEDGE_ACTIONABLE_STATUSES = new Set([
|
|
49
|
+
DELIVERY_STATUS.QUEUED,
|
|
50
|
+
DELIVERY_STATUS.CODING,
|
|
51
|
+
DELIVERY_STATUS.VERIFY_FAILED,
|
|
52
|
+
]);
|
|
53
|
+
/**
|
|
54
|
+
* Held statuses that constitute a WEDGE worth escalating: work that should be
|
|
55
|
+
* advancing but is stuck. Deliberately EXCLUDES 'paused' -- a pause is an
|
|
56
|
+
* intentional human hold, not a wedge (AC: the watchdog must not fire for a
|
|
57
|
+
* focus paused by a human).
|
|
58
|
+
*/
|
|
59
|
+
const WEDGE_HELD_STATUSES = new Set([
|
|
60
|
+
DELIVERY_STATUS.PLANNING,
|
|
61
|
+
DELIVERY_STATUS.DRAFT,
|
|
62
|
+
]);
|
|
63
|
+
/**
|
|
64
|
+
* Replicate the server-side ready-focus rank-walk to decide whether a focus
|
|
65
|
+
* surfaces actionable work, and if not, which delivery blocks it.
|
|
66
|
+
*
|
|
67
|
+
* The walk (rank-ascending, matching the edge): skip terminal-ish deliveries;
|
|
68
|
+
* the FIRST non-terminal delivery decides -- actionable => the focus surfaces
|
|
69
|
+
* (not wedged); non-actionable (planning/draft/paused) => that delivery blocks
|
|
70
|
+
* the focus and everything behind it. This is why a low-rank 'planning' delivery
|
|
71
|
+
* wedges a focus even when a higher-rank 'queued' delivery exists.
|
|
72
|
+
*
|
|
73
|
+
* Pure and exported for unit testing. Expects deliveries pre-sorted by
|
|
74
|
+
* priorityRank ascending (as daemon_get_focus_deliveries returns them); it does
|
|
75
|
+
* not re-sort, mirroring the edge which relies on the query's ORDER BY.
|
|
76
|
+
*/
|
|
77
|
+
export function classifyFocusActionability(deliveries) {
|
|
78
|
+
const totalCount = deliveries.length;
|
|
79
|
+
for (const d of deliveries) {
|
|
80
|
+
const status = d.executionStatus ?? '';
|
|
81
|
+
if (WEDGE_NON_BLOCKING_STATUSES.has(status))
|
|
82
|
+
continue;
|
|
83
|
+
if (WEDGE_ACTIONABLE_STATUSES.has(status)) {
|
|
84
|
+
return { totalCount, surfacesActionable: true, blockingDelivery: null, allTerminal: false };
|
|
85
|
+
}
|
|
86
|
+
// First non-terminal, non-actionable delivery -- it blocks the focus.
|
|
87
|
+
return {
|
|
88
|
+
totalCount,
|
|
89
|
+
surfacesActionable: false,
|
|
90
|
+
blockingDelivery: {
|
|
91
|
+
id: d.id,
|
|
92
|
+
name: d.name,
|
|
93
|
+
status,
|
|
94
|
+
priorityRank: d.priorityRank,
|
|
95
|
+
updatedAt: d.updatedAt ?? null,
|
|
96
|
+
},
|
|
97
|
+
allTerminal: false,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// Every delivery was terminal-ish (or there were none): not a wedge.
|
|
101
|
+
return { totalCount, surfacesActionable: false, blockingDelivery: null, allTerminal: true };
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Per-focus watchdog state, encapsulated so the underlying Maps are PRIVATE.
|
|
105
|
+
*
|
|
106
|
+
* firstSeenAt: in-memory first-seen (ms) FALLBACK clock, used only when the
|
|
107
|
+
* blocking delivery has no updatedAt to ground the wedge age on.
|
|
108
|
+
* logSig: last D3 log signature (blockingDeliveryId:status:char), for dampening.
|
|
109
|
+
*
|
|
110
|
+
* Module-level singleton (`wedgeState`) so the state persists across poll ticks.
|
|
111
|
+
* The exposed operations are exactly what `evaluateFocusWedge`,
|
|
112
|
+
* `pruneWedgeWatchdogState`, and `__resetWedgeWatchdogState` need -- nothing more.
|
|
113
|
+
*/
|
|
114
|
+
class WedgeWatchdogState {
|
|
115
|
+
firstSeenAt = new Map();
|
|
116
|
+
logSig = new Map();
|
|
117
|
+
/** First-seen fallback clock accessors. */
|
|
118
|
+
getFirstSeen(focusId) {
|
|
119
|
+
return this.firstSeenAt.get(focusId);
|
|
120
|
+
}
|
|
121
|
+
hasFirstSeen(focusId) {
|
|
122
|
+
return this.firstSeenAt.has(focusId);
|
|
123
|
+
}
|
|
124
|
+
setFirstSeen(focusId, ms) {
|
|
125
|
+
this.firstSeenAt.set(focusId, ms);
|
|
126
|
+
}
|
|
127
|
+
deleteFirstSeen(focusId) {
|
|
128
|
+
this.firstSeenAt.delete(focusId);
|
|
129
|
+
}
|
|
130
|
+
/** D3 log-signature accessors (dampening). */
|
|
131
|
+
getLogSig(focusId) {
|
|
132
|
+
return this.logSig.get(focusId);
|
|
133
|
+
}
|
|
134
|
+
setLogSig(focusId, sig) {
|
|
135
|
+
this.logSig.set(focusId, sig);
|
|
136
|
+
}
|
|
137
|
+
/** Clear a focus's watchdog state (both maps). */
|
|
138
|
+
clearFocus(focusId) {
|
|
139
|
+
this.firstSeenAt.delete(focusId);
|
|
140
|
+
this.logSig.delete(focusId);
|
|
141
|
+
}
|
|
142
|
+
/** Evict state for any focus NOT in `liveFocusIds` (both maps). */
|
|
143
|
+
prune(liveFocusIds) {
|
|
144
|
+
for (const id of this.firstSeenAt.keys()) {
|
|
145
|
+
if (!liveFocusIds.has(id))
|
|
146
|
+
this.firstSeenAt.delete(id);
|
|
147
|
+
}
|
|
148
|
+
for (const id of this.logSig.keys()) {
|
|
149
|
+
if (!liveFocusIds.has(id))
|
|
150
|
+
this.logSig.delete(id);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/** Reset all state (both maps). */
|
|
154
|
+
reset() {
|
|
155
|
+
this.firstSeenAt.clear();
|
|
156
|
+
this.logSig.clear();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Module-local singleton so the state persists across poll ticks.
|
|
160
|
+
const wedgeState = new WedgeWatchdogState();
|
|
161
|
+
/** Clear a focus's watchdog state (called when it is no longer zero-actionable). */
|
|
162
|
+
function clearFocusWedgeState(focusId) {
|
|
163
|
+
wedgeState.clearFocus(focusId);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Evict watchdog state for any focus NOT in `liveFocusIds`. A focus that goes
|
|
167
|
+
* terminal (complete/cancelled) or whose product is unclaimed simply stops being
|
|
168
|
+
* returned by getActiveFocuses, so `evaluateFocusWedge` never runs again to clear
|
|
169
|
+
* its entry -- leaving a slow unbounded leak keyed by focusId (review finding,
|
|
170
|
+
* delivery 66c7d4d8). The poll loop calls this once per run with the set of
|
|
171
|
+
* focusIds it actually saw, bounding both maps to currently-active focuses.
|
|
172
|
+
*/
|
|
173
|
+
export function pruneWedgeWatchdogState(liveFocusIds) {
|
|
174
|
+
wedgeState.prune(liveFocusIds);
|
|
175
|
+
}
|
|
176
|
+
/** Test seam: reset all watchdog state between cases. */
|
|
177
|
+
export function __resetWedgeWatchdogState() {
|
|
178
|
+
wedgeState.reset();
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Resolve the wedge threshold (ms).
|
|
182
|
+
*
|
|
183
|
+
* The canonical typed declaration of this knob lives in @telora/daemon-core
|
|
184
|
+
* env-config (TELORA_WEDGED_FOCUS_THRESHOLD_MIN, positiveInt default 30) -- the
|
|
185
|
+
* single source of truth for every operational knob. Read it through
|
|
186
|
+
* loadEnvConfig() so validation + the 30-minute default live once in the Zod
|
|
187
|
+
* schema.
|
|
188
|
+
*/
|
|
189
|
+
function defaultWedgeThresholdMs() {
|
|
190
|
+
return loadEnvConfig().TELORA_WEDGED_FOCUS_THRESHOLD_MIN * 60_000;
|
|
191
|
+
}
|
|
192
|
+
function defaultWedgeWatchdogDeps() {
|
|
193
|
+
return {
|
|
194
|
+
getFocusDeliveries: defaultGetFocusDeliveries,
|
|
195
|
+
hasOpenWedgedFocusEscalation: defaultHasOpenWedgedFocusEscalation,
|
|
196
|
+
createEscalation: defaultCreateEscalation,
|
|
197
|
+
hasActiveTeam: defaultHasActiveTeam,
|
|
198
|
+
now: () => Date.now(),
|
|
199
|
+
thresholdMs: defaultWedgeThresholdMs(),
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Per-focus, per-tick evaluation of the planning-wedge condition. Does two
|
|
204
|
+
* things off ONE actionability classification:
|
|
205
|
+
*
|
|
206
|
+
* D3 (log): when an active, role-assigned focus surfaces zero actionable
|
|
207
|
+
* deliveries, name the rank-0 blocking delivery + its state in the daemon
|
|
208
|
+
* log -- so a wedge is visible in ~/.telora/daemon.log, not only the
|
|
209
|
+
* edge-function log. Dampened to once per focus per state change.
|
|
210
|
+
*
|
|
211
|
+
* D2 (escalate): when that focus is ALSO writable, the block is a WEDGE
|
|
212
|
+
* (planning/draft, not a human pause), NO team is running, and the wedge
|
|
213
|
+
* persists past the threshold, file a deduped wedged_focus escalation --
|
|
214
|
+
* defense-in-depth for wedge classes the rank-respecting release (D1) does
|
|
215
|
+
* not resolve (e.g. a 'draft' block, which D1 does not sweep).
|
|
216
|
+
*
|
|
217
|
+
* Runs AFTER the D1 release in the poll loop, so a focus D1 just unwedged is
|
|
218
|
+
* already surfacing actionable work here and neither logs nor escalates.
|
|
219
|
+
*
|
|
220
|
+
* Gating (escalation): status active + assigned_agent_role_id set + read_only
|
|
221
|
+
* false + wedge-held block + NO active team. The "no active team" check replaces
|
|
222
|
+
* the old (broken) isPostPlanning(stage) gate -- the stage column is stale and
|
|
223
|
+
* never reaches post-planning, so that gate never fired for the founding wedge
|
|
224
|
+
* (review finding, delivery 66c7d4d8). It is the same kickoff-window discriminator
|
|
225
|
+
* D1 uses: a running scoping team is shaping/releasing deliveries (don't escalate);
|
|
226
|
+
* no team means nothing can make progress (the rank-0 block stops the ready
|
|
227
|
+
* selector from spawning one) -- a true wedge. Zero-delivery focuses (planning
|
|
228
|
+
* teams) and all-paused focuses (human hold) are excluded by the classifier (no
|
|
229
|
+
* wedge-held blocking delivery).
|
|
230
|
+
*/
|
|
231
|
+
export async function evaluateFocusWedge(focus, deps = defaultWedgeWatchdogDeps()) {
|
|
232
|
+
// Only active, role-assigned focuses can wedge an execution team. An
|
|
233
|
+
// unassigned or non-active focus has nothing to spawn -- not a wedge.
|
|
234
|
+
if (focus.status !== 'active' || !focus.assignedAgentRoleId) {
|
|
235
|
+
clearFocusWedgeState(focus.focusId);
|
|
236
|
+
return { kind: 'skipped', reason: 'not_active_or_unassigned' };
|
|
237
|
+
}
|
|
238
|
+
let deliveries;
|
|
239
|
+
try {
|
|
240
|
+
deliveries = await deps.getFocusDeliveries(focus.focusId);
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
console.warn(`[focus-stage-lifecycle] Wedge eval: failed to fetch deliveries for ` +
|
|
244
|
+
`"${focus.focusName}": ${err.message}`);
|
|
245
|
+
return { kind: 'skipped', reason: 'delivery_fetch_failed' };
|
|
246
|
+
}
|
|
247
|
+
const actionability = classifyFocusActionability(deliveries);
|
|
248
|
+
// The focus surfaces actionable work (or has only terminal/zero deliveries):
|
|
249
|
+
// not zero-actionable-with-a-block -> clear any prior wedge state and return.
|
|
250
|
+
if (actionability.surfacesActionable || !actionability.blockingDelivery) {
|
|
251
|
+
clearFocusWedgeState(focus.focusId);
|
|
252
|
+
return actionability.surfacesActionable
|
|
253
|
+
? { kind: 'surfaces_actionable' }
|
|
254
|
+
: { kind: 'skipped', reason: 'all_terminal_or_empty' };
|
|
255
|
+
}
|
|
256
|
+
const block = actionability.blockingDelivery;
|
|
257
|
+
const isWedgeHeld = WEDGE_HELD_STATUSES.has(block.status); // planning/draft vs paused
|
|
258
|
+
const teamActive = deps.hasActiveTeam(focus.focusId);
|
|
259
|
+
// ── D3: daemon-side zero-actionable log (dampened to state change) ──
|
|
260
|
+
// Characterization distinguishes THREE states (review finding, delivery
|
|
261
|
+
// bbe01d7d): a human pause (idle), a live kickoff/scoping window (team active,
|
|
262
|
+
// deliveries being shaped -- NOT a wedge), and a true wedge (held work, no team
|
|
263
|
+
// running). The old two-way split mislabeled a legitimate kickoff focus as
|
|
264
|
+
// "wedged"; the active-team signal separates them.
|
|
265
|
+
const characterization = !isWedgeHeld
|
|
266
|
+
? 'idle (delivery paused by a human)'
|
|
267
|
+
: teamActive
|
|
268
|
+
? 'scoping in progress (team active, deliveries being shaped -- not a wedge)'
|
|
269
|
+
: 'wedged (work held, no team running)';
|
|
270
|
+
// Fold team-active into the dampening signature so a kickoff->wedge transition
|
|
271
|
+
// (team exits while the block persists) re-logs with the updated characterization.
|
|
272
|
+
const logSig = `${block.id}:${block.status}:${teamActive ? 'team' : 'noteam'}`;
|
|
273
|
+
if (wedgeState.getLogSig(focus.focusId) !== logSig) {
|
|
274
|
+
wedgeState.setLogSig(focus.focusId, logSig);
|
|
275
|
+
console.log(`[focus-stage-lifecycle] Focus "${focus.focusName}" (stage=${focus.stage ?? 'unknown'}) ` +
|
|
276
|
+
`surfaced zero actionable deliveries: rank-${block.priorityRank} "${block.name}" in ` +
|
|
277
|
+
`"${block.status}" state -- ${characterization}.`);
|
|
278
|
+
}
|
|
279
|
+
// ── D2: wedged_focus escalation (writable + wedge-held + no active team) ──
|
|
280
|
+
// No isPostPlanning(stage) gate -- the stage column is stale (see header). The
|
|
281
|
+
// "no active team" check is the kickoff-window discriminator: a running scoping
|
|
282
|
+
// team means the focus is making progress, not wedged.
|
|
283
|
+
const escalationEligible = focus.readOnly === false &&
|
|
284
|
+
isWedgeHeld &&
|
|
285
|
+
!teamActive;
|
|
286
|
+
if (!escalationEligible) {
|
|
287
|
+
// Zero-actionable but not an escalation-worthy wedge (read-only audit, human
|
|
288
|
+
// pause, or a live scoping team). Logged above; clear the fallback timer.
|
|
289
|
+
wedgeState.deleteFirstSeen(focus.focusId);
|
|
290
|
+
return { kind: 'zero_actionable', escalated: false, wedged: false, blockingStatus: block.status };
|
|
291
|
+
}
|
|
292
|
+
// Threshold: escalate only once the wedge has persisted past the window --
|
|
293
|
+
// giving the D1 release time to fix it. Prefer the blocking delivery's
|
|
294
|
+
// updatedAt as a RESTART-DURABLE wedge-age proxy (how long the row has actually
|
|
295
|
+
// sat held; survives a daemon restart, fixing the process-memory reset --
|
|
296
|
+
// review finding, delivery 66c7d4d8). Fall back to the in-memory first-seen
|
|
297
|
+
// clock only when updatedAt is unavailable (older backends).
|
|
298
|
+
const now = deps.now();
|
|
299
|
+
const updatedAtMs = block.updatedAt ? Date.parse(block.updatedAt) : NaN;
|
|
300
|
+
let firstSeen;
|
|
301
|
+
if (Number.isFinite(updatedAtMs)) {
|
|
302
|
+
firstSeen = updatedAtMs;
|
|
303
|
+
wedgeState.deleteFirstSeen(focus.focusId); // DB-grounded; no in-memory clock needed
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
firstSeen = wedgeState.getFirstSeen(focus.focusId) ?? now;
|
|
307
|
+
if (!wedgeState.hasFirstSeen(focus.focusId)) {
|
|
308
|
+
wedgeState.setFirstSeen(focus.focusId, now);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
if (now - firstSeen < deps.thresholdMs) {
|
|
312
|
+
return { kind: 'zero_actionable', escalated: false, wedged: true, blockingStatus: block.status };
|
|
313
|
+
}
|
|
314
|
+
// Dedup: at most one open wedged_focus escalation per focus (survives restart).
|
|
315
|
+
try {
|
|
316
|
+
if (await deps.hasOpenWedgedFocusEscalation(focus.focusId)) {
|
|
317
|
+
return { kind: 'zero_actionable', escalated: false, wedged: true, blockingStatus: block.status };
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
console.warn(`[focus-stage-lifecycle] Wedge eval: dedup check failed for ` +
|
|
322
|
+
`"${focus.focusName}" (skipping escalation this tick): ${err.message}`);
|
|
323
|
+
return { kind: 'zero_actionable', escalated: false, wedged: true, blockingStatus: block.status };
|
|
324
|
+
}
|
|
325
|
+
const wedgedMinutes = Math.round((now - firstSeen) / 60_000);
|
|
326
|
+
try {
|
|
327
|
+
await deps.createEscalation({
|
|
328
|
+
organizationId: focus.organizationId,
|
|
329
|
+
sessionId: '',
|
|
330
|
+
issueId: null,
|
|
331
|
+
reasonType: ESCALATION_REASONS.BLOCKED_BY_EXTERNAL,
|
|
332
|
+
disposition: ESCALATION_DISPOSITIONS.AGENT_RESOLVABLE,
|
|
333
|
+
anchor: { focusId: focus.focusId },
|
|
334
|
+
description: `Focus "${focus.focusName}" is wedged: it is active, role-assigned, ` +
|
|
335
|
+
`writable, and has no running team, but has zero actionable deliveries -- ` +
|
|
336
|
+
`the rank-${block.priorityRank} delivery "${block.name}" is stuck in ` +
|
|
337
|
+
`"${block.status}" state, blocking the focus, so no execution team ` +
|
|
338
|
+
`spawns. It has been wedged for ~${wedgedMinutes} minute(s). The ` +
|
|
339
|
+
`writable planning->queued release should normally clear a 'planning' ` +
|
|
340
|
+
`block; investigate why the delivery is not being released ` +
|
|
341
|
+
`(a 'draft' block is not swept by that release and needs attention).`,
|
|
342
|
+
// Local string const (mirrors ESCALATION_KINDS.WEDGED_FOCUS in
|
|
343
|
+
// daemon-core, the SSOT) so the write works against the currently-
|
|
344
|
+
// installed daemon-core before it is republished with the new enum value.
|
|
345
|
+
escalationKind: WEDGED_FOCUS_ESCALATION_KIND,
|
|
346
|
+
metadata: {
|
|
347
|
+
focusId: focus.focusId,
|
|
348
|
+
kind: WEDGED_FOCUS_ESCALATION_KIND,
|
|
349
|
+
blockingDeliveryId: block.id,
|
|
350
|
+
blockingDeliveryStatus: block.status,
|
|
351
|
+
wedgedMinutes,
|
|
352
|
+
},
|
|
353
|
+
});
|
|
354
|
+
console.warn(`[focus-stage-lifecycle] wedged_focus escalation filed for ` +
|
|
355
|
+
`"${focus.focusName}" (rank-${block.priorityRank} "${block.name}" in ` +
|
|
356
|
+
`"${block.status}", wedged ~${wedgedMinutes}m).`);
|
|
357
|
+
return { kind: 'zero_actionable', escalated: true, wedged: true, blockingStatus: block.status };
|
|
358
|
+
}
|
|
359
|
+
catch (err) {
|
|
360
|
+
console.warn(`[focus-stage-lifecycle] Failed to file wedged_focus escalation for ` +
|
|
361
|
+
`"${focus.focusName}": ${err.message}`);
|
|
362
|
+
return { kind: 'zero_actionable', escalated: false, wedged: true, blockingStatus: block.status };
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
//# sourceMappingURL=wedge-watchdog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wedge-watchdog.js","sourceRoot":"","sources":["../../src/focus-stage-lifecycle/wedge-watchdog.ts"],"names":[],"mappings":"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"}
|