@telora/daemon 0.19.47 → 0.19.82
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/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 +2 -0
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +19 -2
- 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/config.d.ts.map +1 -1
- package/dist/config.js +23 -0
- package/dist/config.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/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 +81 -1572
- 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 +6 -6
- 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-prompt-builder.d.ts.map +1 -1
- package/dist/focus-prompt-builder.js +4 -1
- package/dist/focus-prompt-builder.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 -421
- package/dist/focus-stage-lifecycle.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle.js +24 -832
- 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 +31 -0
- package/dist/listener-auto-advance.js.map +1 -1
- package/dist/listener.js +5 -5
- 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-contradictions.d.ts +55 -0
- package/dist/prompt-contradictions.d.ts.map +1 -0
- package/dist/prompt-contradictions.js +114 -0
- package/dist/prompt-contradictions.js.map +1 -0
- package/dist/prompt-listing.d.ts +19 -0
- package/dist/prompt-listing.d.ts.map +1 -1
- package/dist/prompt-listing.js +49 -0
- package/dist/prompt-listing.js.map +1 -1
- package/dist/prompt-sections/execution-sections.d.ts +3 -2
- package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
- package/dist/prompt-sections/execution-sections.js +70 -97
- package/dist/prompt-sections/execution-sections.js.map +1 -1
- package/dist/prompt-sections/persona-sections.d.ts +12 -0
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +29 -2
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/prompt-sections/role-sections.js +2 -2
- package/dist/prompt-sections/role-sections.js.map +1 -1
- package/dist/queries/context-assembly.d.ts +14 -4
- package/dist/queries/context-assembly.d.ts.map +1 -1
- package/dist/queries/context-assembly.js +14 -4
- package/dist/queries/context-assembly.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 +45 -0
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +2 -0
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/focuses.d.ts +17 -7
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +27 -9
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/index.d.ts +1 -1
- package/dist/queries/index.d.ts.map +1 -1
- package/dist/queries/index.js +1 -1
- package/dist/queries/index.js.map +1 -1
- package/dist/queries/schemas.d.ts +4 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +8 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/reality-pole.js +1 -1
- package/dist/resolvers/escalation-answers.d.ts +40 -0
- package/dist/resolvers/escalation-answers.d.ts.map +1 -1
- package/dist/resolvers/escalation-answers.js +54 -35
- package/dist/resolvers/escalation-answers.js.map +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/resolvers/shared/wiki.d.ts +27 -0
- package/dist/resolvers/shared/wiki.d.ts.map +1 -1
- package/dist/resolvers/shared/wiki.js +39 -0
- package/dist/resolvers/shared/wiki.js.map +1 -1
- package/dist/sensor-sweep.js +1 -1
- package/dist/spawn/delivered-manifest.d.ts +42 -0
- package/dist/spawn/delivered-manifest.d.ts.map +1 -0
- package/dist/spawn/delivered-manifest.js +64 -0
- package/dist/spawn/delivered-manifest.js.map +1 -0
- 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 +137 -0
- package/dist/spawn/process-spawn.d.ts.map +1 -0
- package/dist/spawn/process-spawn.js +385 -0
- package/dist/spawn/process-spawn.js.map +1 -0
- package/dist/spawn/prompt-assembly.d.ts +170 -0
- package/dist/spawn/prompt-assembly.d.ts.map +1 -0
- package/dist/spawn/prompt-assembly.js +272 -0
- package/dist/spawn/prompt-assembly.js.map +1 -0
- package/dist/spawn/shared.d.ts +96 -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 +239 -0
- package/dist/spawn/spawn-decision.d.ts.map +1 -0
- package/dist/spawn/spawn-decision.js +437 -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 +5 -5
- package/dist/spawner/lifecycle.js.map +1 -1
- package/dist/spawner/resolution.js +4 -4
- package/dist/spawner/resolution.js.map +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/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/config.d.ts +44 -0
- package/dist/types/config.d.ts.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-baseline.d.ts +112 -0
- package/dist/verification-baseline.d.ts.map +1 -0
- package/dist/verification-baseline.js +264 -0
- package/dist/verification-baseline.js.map +1 -0
- package/dist/verification-config.d.ts +53 -0
- package/dist/verification-config.d.ts.map +1 -0
- package/dist/verification-config.js +72 -0
- package/dist/verification-config.js.map +1 -0
- package/dist/verification-default-on.d.ts +87 -0
- package/dist/verification-default-on.d.ts.map +1 -0
- package/dist/verification-default-on.js +186 -0
- package/dist/verification-default-on.js.map +1 -0
- package/dist/verification-deterministic.d.ts +56 -0
- package/dist/verification-deterministic.d.ts.map +1 -0
- package/dist/verification-deterministic.js +123 -0
- package/dist/verification-deterministic.js.map +1 -0
- package/dist/verification-engine.d.ts +22 -15
- package/dist/verification-engine.d.ts.map +1 -1
- package/dist/verification-engine.js +94 -65
- package/dist/verification-engine.js.map +1 -1
- package/dist/verification-failure-parser.d.ts +48 -0
- package/dist/verification-failure-parser.d.ts.map +1 -0
- package/dist/verification-failure-parser.js +102 -0
- package/dist/verification-failure-parser.js.map +1 -0
- package/dist/verification-feedback.d.ts +58 -0
- package/dist/verification-feedback.d.ts.map +1 -0
- package/dist/verification-feedback.js +110 -0
- package/dist/verification-feedback.js.map +1 -0
- 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,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Focus review-convergence transitions (extracted from focus-stage-lifecycle).
|
|
3
|
+
*
|
|
4
|
+
* Owns the two review-axis daemon-side transitions:
|
|
5
|
+
* verify -> review (Issue 4: auto-enter review on verify-stage entry)
|
|
6
|
+
* review -> close_loop (Issue 2 + 3: state-based convergence / nonconvergent
|
|
7
|
+
* escalation)
|
|
8
|
+
*
|
|
9
|
+
* Plus the pure helpers (`hasReviewConverged`, `getReviewIterationCap`,
|
|
10
|
+
* `hasInFlightRemediations`) these transitions rely on.
|
|
11
|
+
*
|
|
12
|
+
* @module focus-stage-lifecycle/review-convergence
|
|
13
|
+
*/
|
|
14
|
+
import { getLatestCompletedFocusReview as defaultGetLatestCompletedFocusReview, getInFlightRemediationCount as defaultGetInFlightRemediationCount, getFocusReviewIterationCount as defaultGetFocusReviewIterationCount, updateFocusStage as defaultUpdateFocusStage, } from '../queries/focuses.js';
|
|
15
|
+
import { createEscalation as defaultCreateEscalation } from '../queries/issues.js';
|
|
16
|
+
import { ESCALATION_REASONS, ESCALATION_KINDS, ESCALATION_DISPOSITIONS, FOCUS_STAGE, } from '@telora/daemon-core';
|
|
17
|
+
import { emitLoopTrigger } from '../loops/index.js';
|
|
18
|
+
import { isReviewEnabled } from '../pipeline-config.js';
|
|
19
|
+
// ── Constants ─────────────────────────────────────────────────────
|
|
20
|
+
/**
|
|
21
|
+
* Default cap on review iterations before the daemon files a
|
|
22
|
+
* `review_nonconvergent` escalation and pauses the focus.
|
|
23
|
+
*
|
|
24
|
+
* Configurable per focus via `pipeline_config.review.maxIterations`.
|
|
25
|
+
*/
|
|
26
|
+
export const DEFAULT_REVIEW_MAX_ITERATIONS = 3;
|
|
27
|
+
// ── Pure helpers (Issue 2 + Issue 3) ──────────────────────────────
|
|
28
|
+
/**
|
|
29
|
+
* Decide whether a focus has converged out of review. Convergence is
|
|
30
|
+
* deterministic and state-based:
|
|
31
|
+
*
|
|
32
|
+
* - If there are no in-flight remediation deliveries created during/after
|
|
33
|
+
* the latest review pass, the focus has converged.
|
|
34
|
+
*
|
|
35
|
+
* Pure function: takes the in-flight count and returns the decision.
|
|
36
|
+
* Exported so tests can drive it with synthetic counts.
|
|
37
|
+
*/
|
|
38
|
+
export function hasReviewConverged(inFlightRemediationCount) {
|
|
39
|
+
return inFlightRemediationCount <= 0;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Compute the configured review iteration cap for a focus. Pulls
|
|
43
|
+
* `pipeline_config.review.maxIterations` and falls back to
|
|
44
|
+
* `DEFAULT_REVIEW_MAX_ITERATIONS` when unset or non-positive.
|
|
45
|
+
*
|
|
46
|
+
* Exported for unit testing.
|
|
47
|
+
*/
|
|
48
|
+
export function getReviewIterationCap(pipelineConfig) {
|
|
49
|
+
const raw = pipelineConfig?.review?.maxIterations;
|
|
50
|
+
if (typeof raw !== 'number' || !Number.isFinite(raw) || raw <= 0) {
|
|
51
|
+
return DEFAULT_REVIEW_MAX_ITERATIONS;
|
|
52
|
+
}
|
|
53
|
+
return Math.floor(raw);
|
|
54
|
+
}
|
|
55
|
+
// ── Convergence check (Issue 2) ───────────────────────────────────
|
|
56
|
+
/**
|
|
57
|
+
* Returns true when the focus has any in-flight remediation deliveries
|
|
58
|
+
* created during/after the latest review pass.
|
|
59
|
+
*
|
|
60
|
+
* "Latest review pass" is the `started_at` of the most recent focus_reviews
|
|
61
|
+
* row; when no review has run yet, this returns false (no remediation
|
|
62
|
+
* deliveries can exist before a review pass).
|
|
63
|
+
*
|
|
64
|
+
* In-flight means execution_status is NOT one of done/cancelled/verify.
|
|
65
|
+
*
|
|
66
|
+
* Exported for unit testing the convergence query independently of the
|
|
67
|
+
* surrounding transition logic.
|
|
68
|
+
*/
|
|
69
|
+
export async function hasInFlightRemediations(focusId, latestReviewPassTimestamp, deps = { getInFlightRemediationCount: defaultGetInFlightRemediationCount }) {
|
|
70
|
+
if (!latestReviewPassTimestamp) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
const count = await deps.getInFlightRemediationCount(focusId, latestReviewPassTimestamp);
|
|
74
|
+
return count > 0;
|
|
75
|
+
}
|
|
76
|
+
const defaultVerifyToReviewDeps = {
|
|
77
|
+
updateFocusStage: defaultUpdateFocusStage,
|
|
78
|
+
emitLoopTrigger,
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* When a focus's stage is `verify` and auto-review is enabled, advance it to
|
|
82
|
+
* `review`. Auto-review is default-on (`isReviewEnabled`): only an explicit
|
|
83
|
+
* `pipeline_config.review.enabled === false` keeps the focus at `verify` until
|
|
84
|
+
* a human signals review. A focus with no stored review key auto-advances.
|
|
85
|
+
*
|
|
86
|
+
* Returns true when an advance was performed.
|
|
87
|
+
*/
|
|
88
|
+
export async function advanceVerifyToReviewIfEnabled(focus, deps = defaultVerifyToReviewDeps) {
|
|
89
|
+
if (focus.stage !== FOCUS_STAGE.VERIFY)
|
|
90
|
+
return false;
|
|
91
|
+
// Default-on: only an explicit review.enabled === false keeps the focus at
|
|
92
|
+
// verify. Missing / undefined review reads as enabled (mirrors isCiEnabled).
|
|
93
|
+
if (!isReviewEnabled(focus.pipelineConfig))
|
|
94
|
+
return false;
|
|
95
|
+
try {
|
|
96
|
+
await deps.updateFocusStage(focus.focusId, 'review');
|
|
97
|
+
console.log(`[focus-stage-lifecycle] Focus "${focus.focusName}" stage verify -> review ` +
|
|
98
|
+
`(auto: pipeline_config.review.enabled)`);
|
|
99
|
+
deps.emitLoopTrigger({
|
|
100
|
+
type: 'focus_status_changed',
|
|
101
|
+
focusId: focus.focusId,
|
|
102
|
+
detail: 'stage:verify->review',
|
|
103
|
+
});
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
console.warn(`[focus-stage-lifecycle] Failed to advance "${focus.focusName}" ` +
|
|
108
|
+
`verify -> review: ${err.message}`);
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const defaultReviewConvergeDeps = {
|
|
113
|
+
getLatestCompletedFocusReview: defaultGetLatestCompletedFocusReview,
|
|
114
|
+
getInFlightRemediationCount: defaultGetInFlightRemediationCount,
|
|
115
|
+
getFocusReviewIterationCount: defaultGetFocusReviewIterationCount,
|
|
116
|
+
updateFocusStage: defaultUpdateFocusStage,
|
|
117
|
+
createEscalation: defaultCreateEscalation,
|
|
118
|
+
emitLoopTrigger,
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Evaluate the review -> close_loop transition for a focus and apply the
|
|
122
|
+
* appropriate action. Returns a structured outcome so callers can log /
|
|
123
|
+
* test the decision path.
|
|
124
|
+
*
|
|
125
|
+
* Logic:
|
|
126
|
+
* 1. If stage is not `review`, do nothing.
|
|
127
|
+
* 2. If the review iteration count is >= the cap, file a
|
|
128
|
+
* `review_nonconvergent` escalation (idempotent best-effort) and
|
|
129
|
+
* LEAVE the focus stage at `review`. The focus is paused until a
|
|
130
|
+
* human intervenes.
|
|
131
|
+
* 3. Otherwise, check in-flight remediations against the latest review
|
|
132
|
+
* pass. If zero, advance stage `review -> close_loop`.
|
|
133
|
+
* 4. Otherwise, do nothing -- remediations are still in flight.
|
|
134
|
+
*
|
|
135
|
+
* Exported with injectable deps for unit testing.
|
|
136
|
+
*/
|
|
137
|
+
export async function advanceReviewToCloseLoopIfConverged(focus, deps = defaultReviewConvergeDeps) {
|
|
138
|
+
if (focus.stage !== FOCUS_STAGE.REVIEW) {
|
|
139
|
+
return { kind: 'no_action', reason: 'stage_not_review' };
|
|
140
|
+
}
|
|
141
|
+
const cap = getReviewIterationCap(focus.pipelineConfig);
|
|
142
|
+
let iterations = 0;
|
|
143
|
+
try {
|
|
144
|
+
iterations = await deps.getFocusReviewIterationCount(focus.focusId);
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
console.warn(`[focus-stage-lifecycle] Failed to read review iteration count for ` +
|
|
148
|
+
`"${focus.focusName}": ${err.message}`);
|
|
149
|
+
// On read failure, fall through to the convergence check rather than
|
|
150
|
+
// false-escalating; if iterations were actually high the next tick
|
|
151
|
+
// will catch it.
|
|
152
|
+
}
|
|
153
|
+
if (iterations >= cap) {
|
|
154
|
+
// N-iteration cap exceeded -- file an escalation and leave the focus
|
|
155
|
+
// at review. The escalation is best-effort; downstream dedup keeps it
|
|
156
|
+
// from spamming via the agent_escalations idx_kind_status partial index
|
|
157
|
+
// (status in ('pending', 'in_review')).
|
|
158
|
+
try {
|
|
159
|
+
await deps.createEscalation({
|
|
160
|
+
organizationId: focus.organizationId,
|
|
161
|
+
sessionId: '',
|
|
162
|
+
issueId: null,
|
|
163
|
+
reasonType: ESCALATION_REASONS.DECISION_NEEDED,
|
|
164
|
+
// The intent owner must decide: descope, extend the cap, or close.
|
|
165
|
+
disposition: ESCALATION_DISPOSITIONS.NEEDS_INTENT,
|
|
166
|
+
anchor: { focusId: focus.focusId },
|
|
167
|
+
description: `Focus "${focus.focusName}" has not converged after ${iterations} ` +
|
|
168
|
+
`review iteration(s) (cap: ${cap}). The review self-loop has been ` +
|
|
169
|
+
`paused; a human must decide whether to descope remaining gaps, ` +
|
|
170
|
+
`extend the cap via pipeline_config.review.maxIterations, or close ` +
|
|
171
|
+
`the focus.`,
|
|
172
|
+
escalationKind: ESCALATION_KINDS.REVIEW_NONCONVERGENT,
|
|
173
|
+
// Evidence only -- focus provenance lives on the columns via the anchor.
|
|
174
|
+
metadata: {
|
|
175
|
+
iterations,
|
|
176
|
+
cap,
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
console.warn(`[focus-stage-lifecycle] review_nonconvergent escalation filed for ` +
|
|
180
|
+
`"${focus.focusName}" (iterations=${iterations}, cap=${cap}); focus ` +
|
|
181
|
+
`remains at stage=review.`);
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
console.warn(`[focus-stage-lifecycle] Failed to file review_nonconvergent ` +
|
|
185
|
+
`escalation for "${focus.focusName}": ${err.message}`);
|
|
186
|
+
}
|
|
187
|
+
return { kind: 'nonconvergent', iterations, cap };
|
|
188
|
+
}
|
|
189
|
+
// Look up the latest completed review's started_at. If no review has
|
|
190
|
+
// completed yet, there are no remediations created against it; treat as
|
|
191
|
+
// "not yet converged" rather than "converged on zero" -- the agent must
|
|
192
|
+
// produce a review before we can claim convergence.
|
|
193
|
+
let latestReviewStartedAt = null;
|
|
194
|
+
try {
|
|
195
|
+
const latest = await deps.getLatestCompletedFocusReview(focus.focusId);
|
|
196
|
+
latestReviewStartedAt = latest?.startedAt ?? null;
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
console.warn(`[focus-stage-lifecycle] Failed to read latest focus_review for ` +
|
|
200
|
+
`"${focus.focusName}": ${err.message}`);
|
|
201
|
+
return { kind: 'no_action', reason: 'review_read_failed' };
|
|
202
|
+
}
|
|
203
|
+
if (!latestReviewStartedAt) {
|
|
204
|
+
return { kind: 'no_action', reason: 'no_completed_review_yet' };
|
|
205
|
+
}
|
|
206
|
+
let inFlightCount = 0;
|
|
207
|
+
try {
|
|
208
|
+
inFlightCount = await deps.getInFlightRemediationCount(focus.focusId, latestReviewStartedAt);
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
console.warn(`[focus-stage-lifecycle] Failed to count in-flight remediations for ` +
|
|
212
|
+
`"${focus.focusName}": ${err.message}`);
|
|
213
|
+
return { kind: 'no_action', reason: 'remediation_query_failed' };
|
|
214
|
+
}
|
|
215
|
+
if (!hasReviewConverged(inFlightCount)) {
|
|
216
|
+
return { kind: 'no_action', reason: 'remediations_in_flight' };
|
|
217
|
+
}
|
|
218
|
+
try {
|
|
219
|
+
await deps.updateFocusStage(focus.focusId, 'close_loop');
|
|
220
|
+
console.log(`[focus-stage-lifecycle] Focus "${focus.focusName}" stage review -> ` +
|
|
221
|
+
`close_loop (converged after ${iterations} iteration(s))`);
|
|
222
|
+
deps.emitLoopTrigger({
|
|
223
|
+
type: 'focus_status_changed',
|
|
224
|
+
focusId: focus.focusId,
|
|
225
|
+
detail: 'stage:review->close_loop',
|
|
226
|
+
});
|
|
227
|
+
return { kind: 'converged', from: 'review', to: 'close_loop' };
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
console.warn(`[focus-stage-lifecycle] Failed to advance "${focus.focusName}" ` +
|
|
231
|
+
`review -> close_loop: ${err.message}`);
|
|
232
|
+
return { kind: 'no_action', reason: 'stage_write_failed' };
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=review-convergence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-convergence.js","sourceRoot":"","sources":["../../src/focus-stage-lifecycle/review-convergence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
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 } from '../queries/issues.js';
|
|
14
|
+
/** A delivery as seen by the actionability classifier (rank-ascending walk). */
|
|
15
|
+
export interface WedgeBlockingDelivery {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
status: string;
|
|
19
|
+
priorityRank: number;
|
|
20
|
+
/**
|
|
21
|
+
* The blocking delivery's last-updated timestamp (ISO), or null. Used by the
|
|
22
|
+
* watchdog as a RESTART-DURABLE proxy for how long the row has sat held -- so a
|
|
23
|
+
* daemon restart cannot reset the wedge clock (review finding, delivery 66c7d4d8).
|
|
24
|
+
*/
|
|
25
|
+
updatedAt: string | null;
|
|
26
|
+
}
|
|
27
|
+
/** Pure classification of a focus's deliveries against the ready-focus walk. */
|
|
28
|
+
export interface FocusActionability {
|
|
29
|
+
totalCount: number;
|
|
30
|
+
/** True iff the daemon would surface an actionable delivery (first non-terminal in rank order is actionable). */
|
|
31
|
+
surfacesActionable: boolean;
|
|
32
|
+
/** The first non-terminal, non-actionable delivery in rank order (planning/draft/paused), or null. */
|
|
33
|
+
blockingDelivery: WedgeBlockingDelivery | null;
|
|
34
|
+
/** True iff every delivery is terminal-ish (done/cancelled/verify) or there are none. */
|
|
35
|
+
allTerminal: boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Replicate the server-side ready-focus rank-walk to decide whether a focus
|
|
39
|
+
* surfaces actionable work, and if not, which delivery blocks it.
|
|
40
|
+
*
|
|
41
|
+
* The walk (rank-ascending, matching the edge): skip terminal-ish deliveries;
|
|
42
|
+
* the FIRST non-terminal delivery decides -- actionable => the focus surfaces
|
|
43
|
+
* (not wedged); non-actionable (planning/draft/paused) => that delivery blocks
|
|
44
|
+
* the focus and everything behind it. This is why a low-rank 'planning' delivery
|
|
45
|
+
* wedges a focus even when a higher-rank 'queued' delivery exists.
|
|
46
|
+
*
|
|
47
|
+
* Pure and exported for unit testing. Expects deliveries pre-sorted by
|
|
48
|
+
* priorityRank ascending (as daemon_get_focus_deliveries returns them); it does
|
|
49
|
+
* not re-sort, mirroring the edge which relies on the query's ORDER BY.
|
|
50
|
+
*/
|
|
51
|
+
export declare function classifyFocusActionability(deliveries: ReadonlyArray<{
|
|
52
|
+
id: string;
|
|
53
|
+
name: string;
|
|
54
|
+
executionStatus: string | null;
|
|
55
|
+
priorityRank: number;
|
|
56
|
+
updatedAt?: string | null;
|
|
57
|
+
}>): FocusActionability;
|
|
58
|
+
/**
|
|
59
|
+
* Evict watchdog state for any focus NOT in `liveFocusIds`. A focus that goes
|
|
60
|
+
* terminal (complete/cancelled) or whose product is unclaimed simply stops being
|
|
61
|
+
* returned by getActiveFocuses, so `evaluateFocusWedge` never runs again to clear
|
|
62
|
+
* its entry -- leaving a slow unbounded leak keyed by focusId (review finding,
|
|
63
|
+
* delivery 66c7d4d8). The poll loop calls this once per run with the set of
|
|
64
|
+
* focusIds it actually saw, bounding both maps to currently-active focuses.
|
|
65
|
+
*/
|
|
66
|
+
export declare function pruneWedgeWatchdogState(liveFocusIds: ReadonlySet<string>): void;
|
|
67
|
+
/** Test seam: reset all watchdog state between cases. */
|
|
68
|
+
export declare function __resetWedgeWatchdogState(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Dependencies for `evaluateFocusWedge`. Defaults reach the real query modules
|
|
71
|
+
* and the canonical clock/threshold; tests inject stubs + a synthetic clock.
|
|
72
|
+
*/
|
|
73
|
+
export interface WedgeWatchdogDeps {
|
|
74
|
+
getFocusDeliveries: typeof defaultGetFocusDeliveries;
|
|
75
|
+
hasOpenWedgedFocusEscalation: typeof defaultHasOpenWedgedFocusEscalation;
|
|
76
|
+
createEscalation: typeof defaultCreateEscalation;
|
|
77
|
+
/** Kickoff-window discriminator: a running scoping team means "not a wedge". */
|
|
78
|
+
hasActiveTeam: (focusId: string) => boolean;
|
|
79
|
+
now: () => number;
|
|
80
|
+
thresholdMs: number;
|
|
81
|
+
}
|
|
82
|
+
/** Structured outcome of one wedge evaluation, for logging / tests. */
|
|
83
|
+
export type WedgeOutcome = {
|
|
84
|
+
kind: 'skipped';
|
|
85
|
+
reason: string;
|
|
86
|
+
} | {
|
|
87
|
+
kind: 'surfaces_actionable';
|
|
88
|
+
} | {
|
|
89
|
+
kind: 'zero_actionable';
|
|
90
|
+
escalated: boolean;
|
|
91
|
+
wedged: boolean;
|
|
92
|
+
blockingStatus: string;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Per-focus, per-tick evaluation of the planning-wedge condition. Does two
|
|
96
|
+
* things off ONE actionability classification:
|
|
97
|
+
*
|
|
98
|
+
* D3 (log): when an active, role-assigned focus surfaces zero actionable
|
|
99
|
+
* deliveries, name the rank-0 blocking delivery + its state in the daemon
|
|
100
|
+
* log -- so a wedge is visible in ~/.telora/daemon.log, not only the
|
|
101
|
+
* edge-function log. Dampened to once per focus per state change.
|
|
102
|
+
*
|
|
103
|
+
* D2 (escalate): when that focus is ALSO writable, the block is a WEDGE
|
|
104
|
+
* (planning/draft, not a human pause), NO team is running, and the wedge
|
|
105
|
+
* persists past the threshold, file a deduped wedged_focus escalation --
|
|
106
|
+
* defense-in-depth for wedge classes the rank-respecting release (D1) does
|
|
107
|
+
* not resolve (e.g. a 'draft' block, which D1 does not sweep).
|
|
108
|
+
*
|
|
109
|
+
* Runs AFTER the D1 release in the poll loop, so a focus D1 just unwedged is
|
|
110
|
+
* already surfacing actionable work here and neither logs nor escalates.
|
|
111
|
+
*
|
|
112
|
+
* Gating (escalation): status active + assigned_agent_role_id set + read_only
|
|
113
|
+
* false + wedge-held block + NO active team. The "no active team" check replaces
|
|
114
|
+
* the old (broken) isPostPlanning(stage) gate -- the stage column is stale and
|
|
115
|
+
* never reaches post-planning, so that gate never fired for the founding wedge
|
|
116
|
+
* (review finding, delivery 66c7d4d8). It is the same kickoff-window discriminator
|
|
117
|
+
* D1 uses: a running scoping team is shaping/releasing deliveries (don't escalate);
|
|
118
|
+
* no team means nothing can make progress (the rank-0 block stops the ready
|
|
119
|
+
* selector from spawning one) -- a true wedge. Zero-delivery focuses (planning
|
|
120
|
+
* teams) and all-paused focuses (human hold) are excluded by the classifier (no
|
|
121
|
+
* wedge-held blocking delivery).
|
|
122
|
+
*/
|
|
123
|
+
export declare function evaluateFocusWedge(focus: {
|
|
124
|
+
focusId: string;
|
|
125
|
+
focusName: string;
|
|
126
|
+
organizationId: string;
|
|
127
|
+
status: string;
|
|
128
|
+
assignedAgentRoleId: string | null;
|
|
129
|
+
readOnly?: boolean;
|
|
130
|
+
/** Display-only (logging); NOT used for gating -- the stage column is stale. */
|
|
131
|
+
stage?: string | null;
|
|
132
|
+
}, deps?: WedgeWatchdogDeps): Promise<WedgeOutcome>;
|
|
133
|
+
//# sourceMappingURL=wedge-watchdog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wedge-watchdog.d.ts","sourceRoot":"","sources":["../../src/focus-stage-lifecycle/wedge-watchdog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,kBAAkB,IAAI,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EACL,gBAAgB,IAAI,uBAAuB,EAC3C,4BAA4B,IAAI,mCAAmC,EAEpE,MAAM,sBAAsB,CAAC;AA0D9B,gFAAgF;AAChF,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,gFAAgF;AAChF,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,iHAAiH;IACjH,kBAAkB,EAAE,OAAO,CAAC;IAC5B,sGAAsG;IACtG,gBAAgB,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC/C,yFAAyF;IACzF,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,aAAa,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC,GACD,kBAAkB,CAwBpB;AAsED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAE/E;AAED,yDAAyD;AACzD,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAeD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,kBAAkB,EAAE,OAAO,yBAAyB,CAAC;IACrD,4BAA4B,EAAE,OAAO,mCAAmC,CAAC;IACzE,gBAAgB,EAAE,OAAO,uBAAuB,CAAC;IACjD,gFAAgF;IAChF,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAaD,uEAAuE;AACvE,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE;IACL,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,EACD,IAAI,GAAE,iBAA8C,GACnD,OAAO,CAAC,YAAY,CAAC,CAuJvB"}
|