@telora/daemon 0.20.4 → 0.20.19
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 +13 -3
- package/dist/ai-inspection-context.d.ts.map +1 -1
- package/dist/ai-inspection-context.js +5 -3
- package/dist/ai-inspection-context.js.map +1 -1
- package/dist/assembly-engine.d.ts.map +1 -1
- package/dist/assembly-engine.js +4 -2
- package/dist/assembly-engine.js.map +1 -1
- package/dist/audit-hooks.d.ts.map +1 -1
- package/dist/audit-hooks.js +3 -1
- package/dist/audit-hooks.js.map +1 -1
- package/dist/auth-liveness.d.ts.map +1 -1
- package/dist/auth-liveness.js +4 -2
- package/dist/auth-liveness.js.map +1 -1
- package/dist/auto-update.d.ts.map +1 -1
- package/dist/auto-update.js +14 -12
- package/dist/auto-update.js.map +1 -1
- package/dist/backends/codex/codex-backend.d.ts.map +1 -1
- package/dist/backends/codex/codex-backend.js +4 -2
- package/dist/backends/codex/codex-backend.js.map +1 -1
- package/dist/backends/codex/codex-mcp-proxy.d.ts.map +1 -1
- package/dist/backends/codex/codex-mcp-proxy.js +3 -1
- package/dist/backends/codex/codex-mcp-proxy.js.map +1 -1
- package/dist/backends/lacuna/lifecycle.d.ts.map +1 -1
- package/dist/backends/lacuna/lifecycle.js +4 -2
- package/dist/backends/lacuna/lifecycle.js.map +1 -1
- package/dist/backends/resolve.d.ts.map +1 -1
- package/dist/backends/resolve.js +3 -1
- package/dist/backends/resolve.js.map +1 -1
- package/dist/cascade-restatement.d.ts.map +1 -1
- package/dist/cascade-restatement.js +15 -13
- package/dist/cascade-restatement.js.map +1 -1
- package/dist/ci-escalation.d.ts.map +1 -1
- package/dist/ci-escalation.js +4 -2
- package/dist/ci-escalation.js.map +1 -1
- package/dist/ci-sensor-loop.d.ts.map +1 -1
- package/dist/ci-sensor-loop.js +6 -4
- package/dist/ci-sensor-loop.js.map +1 -1
- package/dist/ci-status-git.d.ts +5 -6
- package/dist/ci-status-git.d.ts.map +1 -1
- package/dist/ci-status-git.js +7 -7
- package/dist/ci-status-git.js.map +1 -1
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +9 -2
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/open.d.ts.map +1 -1
- package/dist/cli/open.js +9 -2
- package/dist/cli/open.js.map +1 -1
- package/dist/cli/session-state.d.ts.map +1 -1
- package/dist/cli/session-state.js +2 -0
- package/dist/cli/session-state.js.map +1 -1
- package/dist/cli/verify-setup.d.ts.map +1 -1
- package/dist/cli/verify-setup.js +9 -4
- package/dist/cli/verify-setup.js.map +1 -1
- package/dist/close-loop-dispatcher.d.ts.map +1 -1
- package/dist/close-loop-dispatcher.js +6 -4
- package/dist/close-loop-dispatcher.js.map +1 -1
- package/dist/completion/advanceability.d.ts.map +1 -1
- package/dist/completion/advanceability.js +3 -1
- package/dist/completion/advanceability.js.map +1 -1
- package/dist/completion/agent-completion.d.ts.map +1 -1
- package/dist/completion/agent-completion.js +11 -9
- package/dist/completion/agent-completion.js.map +1 -1
- package/dist/completion/event-escalations.d.ts.map +1 -1
- package/dist/completion/event-escalations.js +10 -8
- package/dist/completion/event-escalations.js.map +1 -1
- package/dist/completion/event-phases.d.ts +104 -0
- package/dist/completion/event-phases.d.ts.map +1 -0
- package/dist/completion/event-phases.js +572 -0
- package/dist/completion/event-phases.js.map +1 -0
- package/dist/completion/event.d.ts +1 -1
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +36 -592
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/merge-phase.d.ts.map +1 -1
- package/dist/completion/merge-phase.js +14 -12
- package/dist/completion/merge-phase.js.map +1 -1
- package/dist/completion/read-only-pristine.d.ts.map +1 -1
- package/dist/completion/read-only-pristine.js +6 -4
- package/dist/completion/read-only-pristine.js.map +1 -1
- package/dist/completion/review-exit-phase.d.ts +2 -0
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +86 -30
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/review-exit-shortfall.d.ts +62 -0
- package/dist/completion/review-exit-shortfall.d.ts.map +1 -0
- package/dist/completion/review-exit-shortfall.js +84 -0
- package/dist/completion/review-exit-shortfall.js.map +1 -0
- package/dist/completion/status-advance-phase.d.ts.map +1 -1
- package/dist/completion/status-advance-phase.js +16 -14
- 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 +16 -14
- package/dist/completion/team-completion.js.map +1 -1
- package/dist/completion/team-lifecycle.d.ts.map +1 -1
- package/dist/completion/team-lifecycle.js +32 -33
- package/dist/completion/team-lifecycle.js.map +1 -1
- package/dist/completion/terminated-work-reconcile.d.ts.map +1 -1
- package/dist/completion/terminated-work-reconcile.js +11 -9
- package/dist/completion/terminated-work-reconcile.js.map +1 -1
- package/dist/condition-evaluators.d.ts.map +1 -1
- package/dist/condition-evaluators.js +3 -1
- package/dist/condition-evaluators.js.map +1 -1
- package/dist/config-reconcile.d.ts.map +1 -1
- package/dist/config-reconcile.js +3 -1
- package/dist/config-reconcile.js.map +1 -1
- package/dist/config.d.ts +4 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +39 -37
- package/dist/config.js.map +1 -1
- package/dist/control-state.d.ts.map +1 -1
- package/dist/control-state.js +26 -24
- package/dist/control-state.js.map +1 -1
- package/dist/crash-recovery.d.ts.map +1 -1
- package/dist/crash-recovery.js +43 -41
- package/dist/crash-recovery.js.map +1 -1
- package/dist/daemon-logs.d.ts.map +1 -1
- package/dist/daemon-logs.js +21 -3
- package/dist/daemon-logs.js.map +1 -1
- package/dist/daemon-process.d.ts +0 -1
- package/dist/daemon-process.d.ts.map +1 -1
- package/dist/daemon-process.js +15 -10
- package/dist/daemon-process.js.map +1 -1
- package/dist/delivery-advance-block.d.ts +4 -4
- package/dist/delivery-advance-block.d.ts.map +1 -1
- package/dist/delivery-advance-block.js +25 -18
- package/dist/delivery-advance-block.js.map +1 -1
- package/dist/delivery-guards.d.ts.map +1 -1
- package/dist/delivery-guards.js +11 -9
- package/dist/delivery-guards.js.map +1 -1
- package/dist/delivery-lifecycle.d.ts.map +1 -1
- package/dist/delivery-lifecycle.js +23 -21
- package/dist/delivery-lifecycle.js.map +1 -1
- package/dist/delivery-merge.d.ts.map +1 -1
- package/dist/delivery-merge.js +10 -8
- package/dist/delivery-merge.js.map +1 -1
- package/dist/delivery-reconciler-apply.d.ts.map +1 -1
- package/dist/delivery-reconciler-apply.js +5 -8
- package/dist/delivery-reconciler-apply.js.map +1 -1
- package/dist/delivery-reconciler-shadow.d.ts.map +1 -1
- package/dist/delivery-reconciler-shadow.js +5 -6
- package/dist/delivery-reconciler-shadow.js.map +1 -1
- package/dist/directive/close-loop-stage.d.ts.map +1 -1
- package/dist/directive/close-loop-stage.js +9 -7
- package/dist/directive/close-loop-stage.js.map +1 -1
- package/dist/directive/directive-assembly.d.ts.map +1 -1
- package/dist/directive/directive-assembly.js +3 -1
- package/dist/directive/directive-assembly.js.map +1 -1
- package/dist/directive/directive-dispatch.d.ts.map +1 -1
- package/dist/directive/directive-dispatch.js +16 -14
- package/dist/directive/directive-dispatch.js.map +1 -1
- package/dist/directive/directive-queue.d.ts +27 -0
- package/dist/directive/directive-queue.d.ts.map +1 -1
- package/dist/directive/directive-queue.js +28 -0
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/directive/phase-sync.d.ts.map +1 -1
- package/dist/directive/phase-sync.js +8 -6
- package/dist/directive/phase-sync.js.map +1 -1
- package/dist/directive-executor.d.ts +1 -1
- package/dist/directive-executor.d.ts.map +1 -1
- package/dist/directive-executor.js +12 -10
- package/dist/directive-executor.js.map +1 -1
- package/dist/discovery-poll.d.ts.map +1 -1
- package/dist/discovery-poll.js +8 -6
- package/dist/discovery-poll.js.map +1 -1
- package/dist/drain-teardown.d.ts.map +1 -1
- package/dist/drain-teardown.js +6 -19
- package/dist/drain-teardown.js.map +1 -1
- package/dist/drift-eval-loop.d.ts.map +1 -1
- package/dist/drift-eval-loop.js +10 -8
- package/dist/drift-eval-loop.js.map +1 -1
- package/dist/drift-ratify-loop.d.ts +68 -0
- package/dist/drift-ratify-loop.d.ts.map +1 -0
- package/dist/drift-ratify-loop.js +161 -0
- package/dist/drift-ratify-loop.js.map +1 -0
- package/dist/drift-ratify-policy.d.ts +101 -0
- package/dist/drift-ratify-policy.d.ts.map +1 -0
- package/dist/drift-ratify-policy.js +178 -0
- package/dist/drift-ratify-policy.js.map +1 -0
- package/dist/escalation-provenance.d.ts.map +1 -1
- package/dist/escalation-provenance.js +8 -3
- package/dist/escalation-provenance.js.map +1 -1
- package/dist/focus-engine.d.ts.map +1 -1
- package/dist/focus-engine.js +36 -34
- package/dist/focus-engine.js.map +1 -1
- package/dist/focus-executor.d.ts +1 -0
- package/dist/focus-executor.d.ts.map +1 -1
- package/dist/focus-executor.js +16 -14
- package/dist/focus-executor.js.map +1 -1
- package/dist/focus-lifecycle.d.ts.map +1 -1
- package/dist/focus-lifecycle.js +56 -44
- package/dist/focus-lifecycle.js.map +1 -1
- package/dist/focus-loop-registry.d.ts.map +1 -1
- package/dist/focus-loop-registry.js +87 -36
- package/dist/focus-loop-registry.js.map +1 -1
- package/dist/focus-merge.d.ts.map +1 -1
- package/dist/focus-merge.js +40 -34
- package/dist/focus-merge.js.map +1 -1
- package/dist/focus-provisioning.d.ts.map +1 -1
- package/dist/focus-provisioning.js +15 -13
- package/dist/focus-provisioning.js.map +1 -1
- package/dist/focus-respawn-guard.d.ts.map +1 -1
- package/dist/focus-respawn-guard.js +4 -2
- package/dist/focus-respawn-guard.js.map +1 -1
- package/dist/focus-stage-lifecycle/planning-release.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/planning-release.js +10 -8
- package/dist/focus-stage-lifecycle/planning-release.js.map +1 -1
- package/dist/focus-stage-lifecycle/review-convergence.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/review-convergence.js +11 -9
- package/dist/focus-stage-lifecycle/review-convergence.js.map +1 -1
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/wedge-watchdog.js +7 -5
- package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -1
- package/dist/focus-stage-lifecycle.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle.js +7 -5
- package/dist/focus-stage-lifecycle.js.map +1 -1
- package/dist/focus-team-state.d.ts +18 -9
- package/dist/focus-team-state.d.ts.map +1 -1
- package/dist/focus-team-state.js +37 -18
- package/dist/focus-team-state.js.map +1 -1
- package/dist/focus-worktree-state.d.ts.map +1 -1
- package/dist/focus-worktree-state.js +6 -4
- package/dist/focus-worktree-state.js.map +1 -1
- package/dist/git/branch.d.ts.map +1 -1
- package/dist/git/branch.js +7 -5
- package/dist/git/branch.js.map +1 -1
- package/dist/git/genesis.d.ts.map +1 -1
- package/dist/git/genesis.js +3 -1
- package/dist/git/genesis.js.map +1 -1
- package/dist/git/integration.d.ts.map +1 -1
- package/dist/git/integration.js +4 -2
- package/dist/git/integration.js.map +1 -1
- package/dist/git/merge-helpers.d.ts.map +1 -1
- package/dist/git/merge-helpers.js +6 -4
- package/dist/git/merge-helpers.js.map +1 -1
- package/dist/git/merge-lock.d.ts +0 -7
- package/dist/git/merge-lock.d.ts.map +1 -1
- package/dist/git/merge-lock.js +5 -3
- package/dist/git/merge-lock.js.map +1 -1
- package/dist/git/merge.d.ts.map +1 -1
- package/dist/git/merge.js +10 -8
- package/dist/git/merge.js.map +1 -1
- package/dist/git/state-detector.d.ts.map +1 -1
- package/dist/git/state-detector.js +9 -7
- package/dist/git/state-detector.js.map +1 -1
- package/dist/git/utils.d.ts.map +1 -1
- package/dist/git/utils.js +6 -4
- package/dist/git/utils.js.map +1 -1
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +16 -14
- package/dist/git.js.map +1 -1
- package/dist/guard-evaluator.d.ts.map +1 -1
- package/dist/guard-evaluator.js +3 -1
- package/dist/guard-evaluator.js.map +1 -1
- package/dist/heartbeat.d.ts.map +1 -1
- package/dist/heartbeat.js +14 -11
- package/dist/heartbeat.js.map +1 -1
- package/dist/host-control/catalog.d.ts.map +1 -1
- package/dist/host-control/catalog.js +4 -2
- package/dist/host-control/catalog.js.map +1 -1
- package/dist/host-control/client.d.ts.map +1 -1
- package/dist/host-control/client.js +3 -1
- package/dist/host-control/client.js.map +1 -1
- package/dist/host-control/sizing.d.ts.map +1 -1
- package/dist/host-control/sizing.js +4 -1
- package/dist/host-control/sizing.js.map +1 -1
- package/dist/index.js +110 -127
- package/dist/index.js.map +1 -1
- package/dist/install-probe-tick.d.ts.map +1 -1
- package/dist/install-probe-tick.js +6 -4
- package/dist/install-probe-tick.js.map +1 -1
- package/dist/intake-control.d.ts +0 -16
- package/dist/intake-control.d.ts.map +1 -1
- package/dist/intake-control.js +4 -2
- package/dist/intake-control.js.map +1 -1
- package/dist/listener-auto-advance.d.ts.map +1 -1
- package/dist/listener-auto-advance.js +26 -24
- package/dist/listener-auto-advance.js.map +1 -1
- package/dist/listener.d.ts.map +1 -1
- package/dist/listener.js +59 -39
- package/dist/listener.js.map +1 -1
- package/dist/log.d.ts +84 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +182 -0
- package/dist/log.js.map +1 -0
- package/dist/loops/context-audit-pass.d.ts.map +1 -1
- package/dist/loops/context-audit-pass.js +8 -5
- package/dist/loops/context-audit-pass.js.map +1 -1
- package/dist/loops/engine.d.ts.map +1 -1
- package/dist/loops/engine.js +26 -24
- package/dist/loops/engine.js.map +1 -1
- package/dist/loops/llm-client.d.ts.map +1 -1
- package/dist/loops/llm-client.js +4 -2
- package/dist/loops/llm-client.js.map +1 -1
- package/dist/loops/llm-flag.d.ts +4 -28
- package/dist/loops/llm-flag.d.ts.map +1 -1
- package/dist/loops/llm-flag.js +11 -30
- package/dist/loops/llm-flag.js.map +1 -1
- package/dist/loops/prompt-builder.d.ts.map +1 -1
- package/dist/loops/prompt-builder.js +3 -1
- package/dist/loops/prompt-builder.js.map +1 -1
- package/dist/merge-back-loop.d.ts.map +1 -1
- package/dist/merge-back-loop.js +20 -18
- package/dist/merge-back-loop.js.map +1 -1
- package/dist/merge-detector.d.ts.map +1 -1
- package/dist/merge-detector.js +7 -5
- package/dist/merge-detector.js.map +1 -1
- package/dist/nexus/endpoint-clearance.d.ts.map +1 -1
- package/dist/nexus/endpoint-clearance.js +3 -1
- package/dist/nexus/endpoint-clearance.js.map +1 -1
- package/dist/nexus/escalation-bridge.d.ts.map +1 -1
- package/dist/nexus/escalation-bridge.js +3 -1
- package/dist/nexus/escalation-bridge.js.map +1 -1
- package/dist/nexus/incoming.d.ts.map +1 -1
- package/dist/nexus/incoming.js +3 -1
- package/dist/nexus/incoming.js.map +1 -1
- package/dist/nexus/intake-spawn.d.ts.map +1 -1
- package/dist/nexus/intake-spawn.js +6 -4
- package/dist/nexus/intake-spawn.js.map +1 -1
- package/dist/nexus/intake.d.ts.map +1 -1
- package/dist/nexus/intake.js +3 -1
- package/dist/nexus/intake.js.map +1 -1
- package/dist/nexus/return.d.ts.map +1 -1
- package/dist/nexus/return.js +3 -1
- package/dist/nexus/return.js.map +1 -1
- package/dist/non-interactive-init.d.ts.map +1 -1
- package/dist/non-interactive-init.js +0 -0
- package/dist/non-interactive-init.js.map +1 -1
- package/dist/otlp/port-manager.d.ts.map +1 -1
- package/dist/otlp/port-manager.js +7 -5
- package/dist/otlp/port-manager.js.map +1 -1
- package/dist/otlp/receiver.d.ts.map +1 -1
- package/dist/otlp/receiver.js +14 -12
- package/dist/otlp/receiver.js.map +1 -1
- package/dist/output-monitor.d.ts.map +1 -1
- package/dist/output-monitor.js +6 -4
- package/dist/output-monitor.js.map +1 -1
- package/dist/prd/controller.d.ts.map +1 -1
- package/dist/prd/controller.js +7 -5
- package/dist/prd/controller.js.map +1 -1
- package/dist/prd/focus-pushdown.d.ts.map +1 -1
- package/dist/prd/focus-pushdown.js +3 -1
- package/dist/prd/focus-pushdown.js.map +1 -1
- package/dist/product-scaffold.d.ts.map +1 -1
- package/dist/product-scaffold.js +8 -6
- package/dist/product-scaffold.js.map +1 -1
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +41 -4
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/queries/context-assembly.d.ts.map +1 -1
- package/dist/queries/context-assembly.js +3 -1
- package/dist/queries/context-assembly.js.map +1 -1
- package/dist/queries/deliveries.d.ts +22 -0
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +13 -5
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/focuses.d.ts +9 -0
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +17 -1
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/guards.d.ts.map +1 -1
- package/dist/queries/guards.js +3 -1
- package/dist/queries/guards.js.map +1 -1
- package/dist/queries/issues.d.ts.map +1 -1
- package/dist/queries/issues.js +3 -1
- package/dist/queries/issues.js.map +1 -1
- package/dist/queries/reality-tree.d.ts +22 -0
- package/dist/queries/reality-tree.d.ts.map +1 -1
- package/dist/queries/reality-tree.js +32 -0
- package/dist/queries/reality-tree.js.map +1 -1
- package/dist/queries/schemas.d.ts +2 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +5 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/system-session.d.ts.map +1 -1
- package/dist/queries/system-session.js +5 -3
- package/dist/queries/system-session.js.map +1 -1
- package/dist/queries/verification.d.ts.map +1 -1
- package/dist/queries/verification.js +6 -4
- package/dist/queries/verification.js.map +1 -1
- package/dist/reality-pole-capture.d.ts.map +1 -1
- package/dist/reality-pole-capture.js +7 -4
- package/dist/reality-pole-capture.js.map +1 -1
- package/dist/reality-pole.d.ts.map +1 -1
- package/dist/reality-pole.js +4 -2
- package/dist/reality-pole.js.map +1 -1
- package/dist/resolvers/agent-escalations.d.ts.map +1 -1
- package/dist/resolvers/agent-escalations.js +3 -1
- package/dist/resolvers/agent-escalations.js.map +1 -1
- package/dist/resolvers/agent-session-summaries.d.ts.map +1 -1
- package/dist/resolvers/agent-session-summaries.js +3 -1
- package/dist/resolvers/agent-session-summaries.js.map +1 -1
- package/dist/resolvers/deployment-profile.d.ts.map +1 -1
- package/dist/resolvers/deployment-profile.js +3 -1
- package/dist/resolvers/deployment-profile.js.map +1 -1
- package/dist/resolvers/drift-shortfall-proposals.d.ts +27 -0
- package/dist/resolvers/drift-shortfall-proposals.d.ts.map +1 -0
- package/dist/resolvers/drift-shortfall-proposals.js +90 -0
- package/dist/resolvers/drift-shortfall-proposals.js.map +1 -0
- package/dist/resolvers/escalation-answers.d.ts.map +1 -1
- package/dist/resolvers/escalation-answers.js +4 -2
- package/dist/resolvers/escalation-answers.js.map +1 -1
- package/dist/resolvers/focus-anchoring-injections.d.ts.map +1 -1
- package/dist/resolvers/focus-anchoring-injections.js +3 -1
- package/dist/resolvers/focus-anchoring-injections.js.map +1 -1
- package/dist/resolvers/focus-injections.d.ts.map +1 -1
- package/dist/resolvers/focus-injections.js +3 -1
- package/dist/resolvers/focus-injections.js.map +1 -1
- package/dist/resolvers/focus-last-review-report.d.ts.map +1 -1
- package/dist/resolvers/focus-last-review-report.js +3 -1
- package/dist/resolvers/focus-last-review-report.js.map +1 -1
- package/dist/resolvers/focus-reality-tree.d.ts.map +1 -1
- package/dist/resolvers/focus-reality-tree.js +3 -1
- package/dist/resolvers/focus-reality-tree.js.map +1 -1
- package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
- package/dist/resolvers/git-diff-against-base.js +3 -1
- package/dist/resolvers/git-diff-against-base.js.map +1 -1
- package/dist/resolvers/guards-evaluation-results.d.ts.map +1 -1
- package/dist/resolvers/guards-evaluation-results.js +3 -1
- package/dist/resolvers/guards-evaluation-results.js.map +1 -1
- package/dist/resolvers/index.d.ts.map +1 -1
- package/dist/resolvers/index.js +2 -0
- package/dist/resolvers/index.js.map +1 -1
- package/dist/resolvers/loop-context.d.ts.map +1 -1
- package/dist/resolvers/loop-context.js +6 -2
- package/dist/resolvers/loop-context.js.map +1 -1
- package/dist/resolvers/loop-delivery-index.d.ts.map +1 -1
- package/dist/resolvers/loop-delivery-index.js +3 -1
- package/dist/resolvers/loop-delivery-index.js.map +1 -1
- package/dist/resolvers/loop-documents.d.ts.map +1 -1
- package/dist/resolvers/loop-documents.js +3 -1
- package/dist/resolvers/loop-documents.js.map +1 -1
- package/dist/resolvers/loop-expected-effects.d.ts.map +1 -1
- package/dist/resolvers/loop-expected-effects.js +3 -1
- package/dist/resolvers/loop-expected-effects.js.map +1 -1
- package/dist/resolvers/loop-frt-statement.d.ts.map +1 -1
- package/dist/resolvers/loop-frt-statement.js +3 -1
- package/dist/resolvers/loop-frt-statement.js.map +1 -1
- package/dist/resolvers/loop-injection.d.ts.map +1 -1
- package/dist/resolvers/loop-injection.js +3 -1
- package/dist/resolvers/loop-injection.js.map +1 -1
- package/dist/resolvers/loop-persona.d.ts.map +1 -1
- package/dist/resolvers/loop-persona.js +3 -1
- package/dist/resolvers/loop-persona.js.map +1 -1
- package/dist/resolvers/loop-questions.d.ts.map +1 -1
- package/dist/resolvers/loop-questions.js +3 -1
- package/dist/resolvers/loop-questions.js.map +1 -1
- package/dist/resolvers/loop-upstream-udes.d.ts.map +1 -1
- package/dist/resolvers/loop-upstream-udes.js +3 -1
- package/dist/resolvers/loop-upstream-udes.js.map +1 -1
- package/dist/resolvers/prd-context.d.ts.map +1 -1
- package/dist/resolvers/prd-context.js +3 -1
- package/dist/resolvers/prd-context.js.map +1 -1
- package/dist/resolvers/reality-metrics.d.ts.map +1 -1
- package/dist/resolvers/reality-metrics.js +3 -1
- package/dist/resolvers/reality-metrics.js.map +1 -1
- package/dist/resolvers/reality-projections.d.ts.map +1 -1
- package/dist/resolvers/reality-projections.js +3 -1
- package/dist/resolvers/reality-projections.js.map +1 -1
- package/dist/resolvers/reality-tree-snapshot.d.ts.map +1 -1
- package/dist/resolvers/reality-tree-snapshot.js +3 -1
- package/dist/resolvers/reality-tree-snapshot.js.map +1 -1
- package/dist/resolvers/retired-injections.d.ts.map +1 -1
- package/dist/resolvers/retired-injections.js +3 -1
- package/dist/resolvers/retired-injections.js.map +1 -1
- package/dist/resolvers/review-outcomes.d.ts.map +1 -1
- package/dist/resolvers/review-outcomes.js +3 -1
- package/dist/resolvers/review-outcomes.js.map +1 -1
- package/dist/resolvers/security-advisory.d.ts.map +1 -1
- package/dist/resolvers/security-advisory.js +3 -1
- package/dist/resolvers/security-advisory.js.map +1 -1
- package/dist/resolvers/shared/wiki.d.ts.map +1 -1
- package/dist/resolvers/shared/wiki.js +5 -3
- package/dist/resolvers/shared/wiki.js.map +1 -1
- package/dist/resolvers/wiki-topic.d.ts.map +1 -1
- package/dist/resolvers/wiki-topic.js +3 -1
- package/dist/resolvers/wiki-topic.js.map +1 -1
- package/dist/resolvers/workflow-stages.d.ts.map +1 -1
- package/dist/resolvers/workflow-stages.js +3 -1
- package/dist/resolvers/workflow-stages.js.map +1 -1
- package/dist/schema-version-gate.d.ts.map +1 -1
- package/dist/schema-version-gate.js +16 -18
- package/dist/schema-version-gate.js.map +1 -1
- package/dist/security-finding-gate.d.ts.map +1 -1
- package/dist/security-finding-gate.js +3 -1
- package/dist/security-finding-gate.js.map +1 -1
- package/dist/security-rescan-resolution.d.ts.map +1 -1
- package/dist/security-rescan-resolution.js +4 -2
- package/dist/security-rescan-resolution.js.map +1 -1
- package/dist/security-scan-engine.d.ts.map +1 -1
- package/dist/security-scan-engine.js +9 -6
- package/dist/security-scan-engine.js.map +1 -1
- package/dist/self-update.d.ts.map +1 -1
- package/dist/self-update.js +48 -39
- package/dist/self-update.js.map +1 -1
- package/dist/sensor-sweep.d.ts.map +1 -1
- package/dist/sensor-sweep.js +5 -2
- package/dist/sensor-sweep.js.map +1 -1
- package/dist/session-stamp.d.ts.map +1 -1
- package/dist/session-stamp.js +4 -2
- package/dist/session-stamp.js.map +1 -1
- package/dist/shortfall-disposition-config.d.ts +34 -0
- package/dist/shortfall-disposition-config.d.ts.map +1 -0
- package/dist/shortfall-disposition-config.js +46 -0
- package/dist/shortfall-disposition-config.js.map +1 -0
- package/dist/shortfall-disposition-loop.d.ts +86 -0
- package/dist/shortfall-disposition-loop.d.ts.map +1 -0
- package/dist/shortfall-disposition-loop.js +309 -0
- package/dist/shortfall-disposition-loop.js.map +1 -0
- package/dist/spawn/model-routing.d.ts.map +1 -1
- package/dist/spawn/model-routing.js +19 -16
- package/dist/spawn/model-routing.js.map +1 -1
- package/dist/spawn/process-spawn.d.ts.map +1 -1
- package/dist/spawn/process-spawn.js +29 -22
- package/dist/spawn/process-spawn.js.map +1 -1
- package/dist/spawn/prompt-assembly.d.ts.map +1 -1
- package/dist/spawn/prompt-assembly.js +6 -4
- package/dist/spawn/prompt-assembly.js.map +1 -1
- package/dist/spawn/spawn-decision.d.ts.map +1 -1
- package/dist/spawn/spawn-decision.js +16 -14
- package/dist/spawn/spawn-decision.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +13 -11
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/spawn-cooldown.d.ts +0 -7
- package/dist/spawn-cooldown.d.ts.map +1 -1
- package/dist/spawn-cooldown.js +3 -1
- package/dist/spawn-cooldown.js.map +1 -1
- package/dist/spawn-environment.d.ts.map +1 -1
- package/dist/spawn-environment.js +4 -1
- package/dist/spawn-environment.js.map +1 -1
- package/dist/spawner/helpers.d.ts.map +1 -1
- package/dist/spawner/helpers.js +19 -17
- package/dist/spawner/helpers.js.map +1 -1
- package/dist/spawner/lifecycle.d.ts.map +1 -1
- package/dist/spawner/lifecycle.js +17 -13
- package/dist/spawner/lifecycle.js.map +1 -1
- package/dist/spawner/liveness.d.ts.map +1 -1
- package/dist/spawner/liveness.js +7 -5
- package/dist/spawner/liveness.js.map +1 -1
- package/dist/spawner/resolution.d.ts.map +1 -1
- package/dist/spawner/resolution.js +7 -5
- package/dist/spawner/resolution.js.map +1 -1
- package/dist/spawner/stream-handlers.d.ts +6 -55
- package/dist/spawner/stream-handlers.d.ts.map +1 -1
- package/dist/spawner/stream-handlers.js +10 -172
- package/dist/spawner/stream-handlers.js.map +1 -1
- package/dist/spawner/timeout.d.ts.map +1 -1
- package/dist/spawner/timeout.js +11 -9
- package/dist/spawner/timeout.js.map +1 -1
- package/dist/staleness.d.ts.map +1 -1
- package/dist/staleness.js +4 -1
- package/dist/staleness.js.map +1 -1
- package/dist/stall-detector-config.d.ts +6 -17
- package/dist/stall-detector-config.d.ts.map +1 -1
- package/dist/stall-detector-config.js +10 -36
- package/dist/stall-detector-config.js.map +1 -1
- package/dist/stall-detectors.d.ts.map +1 -1
- package/dist/stall-detectors.js +6 -4
- package/dist/stall-detectors.js.map +1 -1
- package/dist/state-cascade.d.ts.map +1 -1
- package/dist/state-cascade.js +9 -7
- package/dist/state-cascade.js.map +1 -1
- package/dist/stop-request.d.ts.map +1 -1
- package/dist/stop-request.js +6 -2
- package/dist/stop-request.js.map +1 -1
- package/dist/supabase.d.ts.map +1 -1
- package/dist/supabase.js +3 -1
- package/dist/supabase.js.map +1 -1
- package/dist/telemetry-writer.d.ts.map +1 -1
- package/dist/telemetry-writer.js +11 -9
- package/dist/telemetry-writer.js.map +1 -1
- package/dist/trigger-executor.d.ts.map +1 -1
- package/dist/trigger-executor.js +28 -26
- package/dist/trigger-executor.js.map +1 -1
- package/dist/unified-engine-lifecycle.d.ts +19 -11
- package/dist/unified-engine-lifecycle.d.ts.map +1 -1
- package/dist/unified-engine-lifecycle.js +71 -70
- package/dist/unified-engine-lifecycle.js.map +1 -1
- package/dist/unified-init.d.ts.map +1 -1
- package/dist/unified-init.js +41 -36
- package/dist/unified-init.js.map +1 -1
- package/dist/unified-shell-config.d.ts +8 -1
- package/dist/unified-shell-config.d.ts.map +1 -1
- package/dist/unified-shell-config.js +57 -34
- package/dist/unified-shell-config.js.map +1 -1
- package/dist/unified-shell-status.d.ts.map +1 -1
- package/dist/unified-shell-status.js +39 -37
- package/dist/unified-shell-status.js.map +1 -1
- package/dist/unified-shell.d.ts.map +1 -1
- package/dist/unified-shell.js +37 -41
- package/dist/unified-shell.js.map +1 -1
- package/dist/verification-baseline.d.ts.map +1 -1
- package/dist/verification-baseline.js +7 -4
- package/dist/verification-baseline.js.map +1 -1
- package/dist/verification-config.d.ts +3 -3
- package/dist/verification-config.d.ts.map +1 -1
- package/dist/verification-config.js +8 -19
- package/dist/verification-config.js.map +1 -1
- package/dist/verification-default-on.d.ts +6 -6
- package/dist/verification-default-on.d.ts.map +1 -1
- package/dist/verification-default-on.js +9 -7
- package/dist/verification-default-on.js.map +1 -1
- package/dist/verification-deterministic.d.ts.map +1 -1
- package/dist/verification-deterministic.js +6 -3
- package/dist/verification-deterministic.js.map +1 -1
- package/dist/verification-engine.d.ts.map +1 -1
- package/dist/verification-engine.js +20 -16
- package/dist/verification-engine.js.map +1 -1
- package/dist/verification-feedback.d.ts.map +1 -1
- package/dist/verification-feedback.js +4 -2
- package/dist/verification-feedback.js.map +1 -1
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +5 -3
- package/dist/version-check.js.map +1 -1
- package/dist/worker-pidfile.d.ts.map +1 -1
- package/dist/worker-pidfile.js +8 -3
- package/dist/worker-pidfile.js.map +1 -1
- package/dist/worktree/focus.d.ts.map +1 -1
- package/dist/worktree/focus.js +15 -13
- package/dist/worktree/focus.js.map +1 -1
- package/dist/worktree/safety.d.ts.map +1 -1
- package/dist/worktree/safety.js +13 -11
- package/dist/worktree/safety.js.map +1 -1
- package/dist/worktree.d.ts.map +1 -1
- package/dist/worktree.js +41 -39
- package/dist/worktree.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shortfall-disposition-config.d.ts","sourceRoot":"","sources":["../src/shortfall-disposition-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH;;;;;;;;;;GAUG;AACH,wBAAgB,qCAAqC,CACnD,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAUR"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Threshold for the shortfall-disposition attempt bound.
|
|
3
|
+
*
|
|
4
|
+
* The CANONICAL declaration (Zod schema, ENV_VAR_METADATA entry, default,
|
|
5
|
+
* description) lives in packages/daemon-core/src/env-config.ts, exactly like the
|
|
6
|
+
* stall-detector thresholds in stall-detector-config.ts.
|
|
7
|
+
*
|
|
8
|
+
* It is read RAW here rather than through loadEnvConfig() for one reason:
|
|
9
|
+
* @telora/daemon-core is REGISTRY-INSTALLED, not a workspace symlink, so
|
|
10
|
+
* packages/daemon compiles and runs against the PUBLISHED dist. A field added to
|
|
11
|
+
* daemon-core's source is invisible to loadEnvConfig() here until a publish
|
|
12
|
+
* lands and the pin moves. This is the same registry-lag workaround
|
|
13
|
+
* stall-detectors.ts documents for escalation kinds.
|
|
14
|
+
*
|
|
15
|
+
* The raw read is allowlisted in scripts/lint-config.json under "env-reads"
|
|
16
|
+
* with that reason. WHEN daemon-core >0.2.69 IS PUBLISHED AND PINNED: delete the
|
|
17
|
+
* allowlist entry and change this to
|
|
18
|
+
* `loadEnvConfig().TELORA_SHORTFALL_DISPOSITION_ATTEMPT_CAP`.
|
|
19
|
+
*
|
|
20
|
+
* @module shortfall-disposition-config
|
|
21
|
+
*/
|
|
22
|
+
/** Must match the daemon-core default so the two cannot silently disagree. */
|
|
23
|
+
const DEFAULT_SHORTFALL_DISPOSITION_ATTEMPT_CAP = 3;
|
|
24
|
+
/**
|
|
25
|
+
* Max scoped disposition passes armed per focus before the daemon stops arming
|
|
26
|
+
* and escalates instead.
|
|
27
|
+
*
|
|
28
|
+
* Invalid values (non-numeric, <= 0) fall back to the default rather than
|
|
29
|
+
* disabling the bound: a zero or negative cap would escalate immediately on
|
|
30
|
+
* every held focus, and a NaN would compare false forever and never escalate --
|
|
31
|
+
* the permanent silent wait this bound exists to prevent. Once daemon-core is
|
|
32
|
+
* republished, Zod's positiveInt does this validation at startup and fails loud,
|
|
33
|
+
* which is strictly better; this is the interim.
|
|
34
|
+
*/
|
|
35
|
+
export function resolveShortfallDispositionAttemptCap(env = process.env) {
|
|
36
|
+
const raw = env.TELORA_SHORTFALL_DISPOSITION_ATTEMPT_CAP;
|
|
37
|
+
if (raw === undefined || raw.trim() === '') {
|
|
38
|
+
return DEFAULT_SHORTFALL_DISPOSITION_ATTEMPT_CAP;
|
|
39
|
+
}
|
|
40
|
+
const parsed = Number(raw);
|
|
41
|
+
if (!Number.isFinite(parsed) || !Number.isInteger(parsed) || parsed <= 0) {
|
|
42
|
+
return DEFAULT_SHORTFALL_DISPOSITION_ATTEMPT_CAP;
|
|
43
|
+
}
|
|
44
|
+
return parsed;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=shortfall-disposition-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shortfall-disposition-config.js","sourceRoot":"","sources":["../src/shortfall-disposition-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,8EAA8E;AAC9E,MAAM,yCAAyC,GAAG,CAAC,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qCAAqC,CACnD,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,GAAG,GAAG,GAAG,CAAC,wCAAwC,CAAC;IACzD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,OAAO,yCAAyC,CAAC;IACnD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACzE,OAAO,yCAAyC,CAAC;IACnD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scoped shortfall-disposition pass.
|
|
3
|
+
*
|
|
4
|
+
* A focus carrying an undisposed shortfall cannot converge: the completion gate
|
|
5
|
+
* (review-exit-phase) withholds done until every shortfall is ratified or
|
|
6
|
+
* dismissed. A hold with no self-heal is just a wedge, so this tick finds held
|
|
7
|
+
* focuses and arms a one-shot pass whose ONLY mandate is disposing them.
|
|
8
|
+
*
|
|
9
|
+
* WHY A TICK AND NOT THE REVIEW-EXIT PATH. The mandate covers shortfalls a
|
|
10
|
+
* review missed AND ones that arrived after the review window closed. A late
|
|
11
|
+
* arrival coincides with no review exit at all -- no handler runs to notice it --
|
|
12
|
+
* so arming from the exit path could only ever cover half the job. A tick sees a
|
|
13
|
+
* held focus whenever it becomes held, regardless of what held it.
|
|
14
|
+
*
|
|
15
|
+
* WHAT THIS PASS CAN AND CANNOT DO. It runs as a CODING session (a 'review'
|
|
16
|
+
* sessionType would re-enter the review-exit handler on exit and re-trigger the
|
|
17
|
+
* whole auto-approve evaluation -- a spawn loop). product-api refuses an agent
|
|
18
|
+
* shortfall-RATIFY unless it carries a review session, so this pass structurally
|
|
19
|
+
* cannot ratify. That is deliberate, not a limitation to work around: a pass
|
|
20
|
+
* that cannot lower a bar is a safe pass. It disposes the common case (the work
|
|
21
|
+
* fell short -> file defects + dismiss) and deliberately LEAVES a
|
|
22
|
+
* genuinely-wrong claim undisposed for a real review or an operator. The stall
|
|
23
|
+
* detector bounds that tail.
|
|
24
|
+
*
|
|
25
|
+
* Activation: opt-out via TELORA_SHORTFALL_DISPOSITION_LOOP=0. See
|
|
26
|
+
* `shouldRunLoop()` in focus-engine.ts.
|
|
27
|
+
*
|
|
28
|
+
* @module shortfall-disposition-loop
|
|
29
|
+
*/
|
|
30
|
+
import type { DaemonConfig, StageDirective } from './types.js';
|
|
31
|
+
import { getActiveFocuses } from './queries/deliveries.js';
|
|
32
|
+
import { listOpenShortfallProposalIds } from './queries/reality-tree.js';
|
|
33
|
+
import { setShortfallDispositionAttempts } from './queries/focuses.js';
|
|
34
|
+
import { createEscalation, hasOpenFocusEscalation } from './queries/issues.js';
|
|
35
|
+
import { hasPendingSpawnDirective } from './directive/directive-queue.js';
|
|
36
|
+
import { assembleDirectiveContent } from './directive/directive-assembly.js';
|
|
37
|
+
/**
|
|
38
|
+
* The one-shot mandate. Pure + unit-testable.
|
|
39
|
+
*
|
|
40
|
+
* States the RULE only; the drift.shortfall_proposals resolver carries the DATA
|
|
41
|
+
* (ids, claims, both dispositions, the exact params). Duplicating the detail
|
|
42
|
+
* here would drift from the resolver.
|
|
43
|
+
*/
|
|
44
|
+
export declare function buildShortfallDispositionDirective(): StageDirective;
|
|
45
|
+
export interface ShortfallDispositionTickResult {
|
|
46
|
+
productsScanned: number;
|
|
47
|
+
focusesScanned: number;
|
|
48
|
+
/** Focuses carrying at least one undisposed shortfall. */
|
|
49
|
+
focusesHeld: number;
|
|
50
|
+
/** Disposition directives armed this tick. */
|
|
51
|
+
armed: number;
|
|
52
|
+
/** Held focuses skipped: a team is already running or a directive is pending. */
|
|
53
|
+
skippedBusy: number;
|
|
54
|
+
/** Focuses that exhausted the attempt bound and were escalated to an operator. */
|
|
55
|
+
escalated: number;
|
|
56
|
+
/** Focuses whose attempt counter was reset because their shortfalls cleared. */
|
|
57
|
+
countersReset: number;
|
|
58
|
+
errors: number;
|
|
59
|
+
}
|
|
60
|
+
export interface ShortfallDispositionDeps {
|
|
61
|
+
getActiveFocuses: typeof getActiveFocuses;
|
|
62
|
+
listOpenShortfallProposalIds: typeof listOpenShortfallProposalIds;
|
|
63
|
+
/** True when a team is already running for the focus. */
|
|
64
|
+
hasActiveTeam: (focusId: string) => boolean;
|
|
65
|
+
hasPendingSpawnDirective: typeof hasPendingSpawnDirective;
|
|
66
|
+
assembleDirectiveContent: typeof assembleDirectiveContent;
|
|
67
|
+
/** Stash the directive for the spawner to consume. */
|
|
68
|
+
armDirective: (focusId: string, message: string, directive: StageDirective) => void;
|
|
69
|
+
/** Persist the durable attempt counter. */
|
|
70
|
+
setShortfallDispositionAttempts: typeof setShortfallDispositionAttempts;
|
|
71
|
+
/** Per-focus dedup so the cap files exactly one open escalation. */
|
|
72
|
+
hasOpenFocusEscalation: typeof hasOpenFocusEscalation;
|
|
73
|
+
createEscalation: typeof createEscalation;
|
|
74
|
+
/** Injectable so the pure decision unit-tests without env or Supabase. */
|
|
75
|
+
cap?: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Run one disposition-pass tick across every product in the daemon config.
|
|
79
|
+
*
|
|
80
|
+
* Arms at most one directive per held focus per tick, and never while a team is
|
|
81
|
+
* running or a directive is already pending -- so a focus that stays held across
|
|
82
|
+
* ticks does not accumulate spawns. Per-focus failures are counted and skipped;
|
|
83
|
+
* one unresolvable focus must not stop the others.
|
|
84
|
+
*/
|
|
85
|
+
export declare function runShortfallDispositionTick(config: DaemonConfig, depOverrides?: Partial<ShortfallDispositionDeps>): Promise<ShortfallDispositionTickResult>;
|
|
86
|
+
//# sourceMappingURL=shortfall-disposition-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shortfall-disposition-loop.d.ts","sourceRoot":"","sources":["../src/shortfall-disposition-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EACL,wBAAwB,EAGzB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AA0B7E;;;;;;GAMG;AACH,wBAAgB,kCAAkC,IAAI,cAAc,CA0CnE;AAED,MAAM,WAAW,8BAA8B;IAC7C,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,4BAA4B,EAAE,OAAO,4BAA4B,CAAC;IAClE,yDAAyD;IACzD,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,wBAAwB,EAAE,OAAO,wBAAwB,CAAC;IAC1D,wBAAwB,EAAE,OAAO,wBAAwB,CAAC;IAC1D,sDAAsD;IACtD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;IACpF,2CAA2C;IAC3C,+BAA+B,EAAE,OAAO,+BAA+B,CAAC;IACxE,oEAAoE;IACpE,sBAAsB,EAAE,OAAO,sBAAsB,CAAC;IACtD,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,0EAA0E;IAC1E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAgGD;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,YAAY,EACpB,YAAY,GAAE,OAAO,CAAC,wBAAwB,CAAM,GACnD,OAAO,CAAC,8BAA8B,CAAC,CAuIzC"}
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scoped shortfall-disposition pass.
|
|
3
|
+
*
|
|
4
|
+
* A focus carrying an undisposed shortfall cannot converge: the completion gate
|
|
5
|
+
* (review-exit-phase) withholds done until every shortfall is ratified or
|
|
6
|
+
* dismissed. A hold with no self-heal is just a wedge, so this tick finds held
|
|
7
|
+
* focuses and arms a one-shot pass whose ONLY mandate is disposing them.
|
|
8
|
+
*
|
|
9
|
+
* WHY A TICK AND NOT THE REVIEW-EXIT PATH. The mandate covers shortfalls a
|
|
10
|
+
* review missed AND ones that arrived after the review window closed. A late
|
|
11
|
+
* arrival coincides with no review exit at all -- no handler runs to notice it --
|
|
12
|
+
* so arming from the exit path could only ever cover half the job. A tick sees a
|
|
13
|
+
* held focus whenever it becomes held, regardless of what held it.
|
|
14
|
+
*
|
|
15
|
+
* WHAT THIS PASS CAN AND CANNOT DO. It runs as a CODING session (a 'review'
|
|
16
|
+
* sessionType would re-enter the review-exit handler on exit and re-trigger the
|
|
17
|
+
* whole auto-approve evaluation -- a spawn loop). product-api refuses an agent
|
|
18
|
+
* shortfall-RATIFY unless it carries a review session, so this pass structurally
|
|
19
|
+
* cannot ratify. That is deliberate, not a limitation to work around: a pass
|
|
20
|
+
* that cannot lower a bar is a safe pass. It disposes the common case (the work
|
|
21
|
+
* fell short -> file defects + dismiss) and deliberately LEAVES a
|
|
22
|
+
* genuinely-wrong claim undisposed for a real review or an operator. The stall
|
|
23
|
+
* detector bounds that tail.
|
|
24
|
+
*
|
|
25
|
+
* Activation: opt-out via TELORA_SHORTFALL_DISPOSITION_LOOP=0. See
|
|
26
|
+
* `shouldRunLoop()` in focus-engine.ts.
|
|
27
|
+
*
|
|
28
|
+
* @module shortfall-disposition-loop
|
|
29
|
+
*/
|
|
30
|
+
import { withRetry, ESCALATION_REASONS, ESCALATION_DISPOSITIONS } from '@telora/daemon-core';
|
|
31
|
+
import { configForProduct } from './config.js';
|
|
32
|
+
import { getActiveFocuses } from './queries/deliveries.js';
|
|
33
|
+
import { listOpenShortfallProposalIds } from './queries/reality-tree.js';
|
|
34
|
+
import { setShortfallDispositionAttempts } from './queries/focuses.js';
|
|
35
|
+
import { createEscalation, hasOpenFocusEscalation } from './queries/issues.js';
|
|
36
|
+
import { getActiveTeams } from './focus-team-state.js';
|
|
37
|
+
import { hasPendingSpawnDirective, pendingSpawnDirectives, computeDirectiveHash, } from './directive/directive-queue.js';
|
|
38
|
+
import { assembleDirectiveContent } from './directive/directive-assembly.js';
|
|
39
|
+
import { resolveShortfallDispositionAttemptCap } from './shortfall-disposition-config.js';
|
|
40
|
+
import { createLogger } from './log.js';
|
|
41
|
+
const log = createLogger({ module: 'shortfall-disposition-loop' });
|
|
42
|
+
/**
|
|
43
|
+
* Declared daemon-locally, not imported from @telora/daemon-core's EscalationKind
|
|
44
|
+
* union. That union is registry-published and lags the DB CHECK by several
|
|
45
|
+
* values, so it cannot name this kind until a publish lands. The DB CHECK
|
|
46
|
+
* (20260715231941) is the real constraint. Same workaround stall-detectors.ts
|
|
47
|
+
* documents.
|
|
48
|
+
*/
|
|
49
|
+
const SHORTFALL_UNDISPOSED_KIND = 'shortfall_undisposed';
|
|
50
|
+
/**
|
|
51
|
+
* Deliberately narrow. The pass needs the shortfalls (with their ids, claims,
|
|
52
|
+
* and what reality showed -- all rendered by the resolver) and the diff that
|
|
53
|
+
* produced them. Nothing else: a wider recipe invites the pass to re-adjudicate
|
|
54
|
+
* work that is not its mandate.
|
|
55
|
+
*/
|
|
56
|
+
const SHORTFALL_DISPOSITION_ASSEMBLY = [
|
|
57
|
+
'drift.shortfall_proposals',
|
|
58
|
+
'git.diff_against_base',
|
|
59
|
+
];
|
|
60
|
+
/**
|
|
61
|
+
* The one-shot mandate. Pure + unit-testable.
|
|
62
|
+
*
|
|
63
|
+
* States the RULE only; the drift.shortfall_proposals resolver carries the DATA
|
|
64
|
+
* (ids, claims, both dispositions, the exact params). Duplicating the detail
|
|
65
|
+
* here would drift from the resolver.
|
|
66
|
+
*/
|
|
67
|
+
export function buildShortfallDispositionDirective() {
|
|
68
|
+
return {
|
|
69
|
+
execution: 'spawn',
|
|
70
|
+
compact: null,
|
|
71
|
+
assembly: [...SHORTFALL_DISPOSITION_ASSEMBLY],
|
|
72
|
+
tools: null,
|
|
73
|
+
prompt: [
|
|
74
|
+
'You are a scoped disposition pass. This focus cannot finish because it',
|
|
75
|
+
'carries shortfall drift proposals nobody has disposed. Disposing them is',
|
|
76
|
+
'your ONLY mandate -- do not review the code, do not refactor, do not pick',
|
|
77
|
+
'up other work.',
|
|
78
|
+
'',
|
|
79
|
+
'A shortfall says: the reality tree claimed something, and the work',
|
|
80
|
+
'delivered less than that claim. One of the two was wrong, and until',
|
|
81
|
+
'someone says which, no delivery on this focus can converge to done.',
|
|
82
|
+
'',
|
|
83
|
+
'The proposals awaiting you are listed in your context, each with its id,',
|
|
84
|
+
'the claim, and what reality showed. For EACH one:',
|
|
85
|
+
'',
|
|
86
|
+
'- **The WORK fell short** (the common case) -- file a defect issue on the',
|
|
87
|
+
' delivery that owns the gap (`telora_product_issue` action=create, type',
|
|
88
|
+
' Bug or Task, with a concrete title/description the coding team can act',
|
|
89
|
+
' on), THEN dismiss the proposal via `telora_reality_drift`',
|
|
90
|
+
' action=dismiss with a non-empty `reason` naming the issues you filed.',
|
|
91
|
+
' Dismissing REJECTS the proposed correction: the claim stands, and the',
|
|
92
|
+
' work is what changes. Filing the defect ALONE is not a disposition --',
|
|
93
|
+
' it leaves the proposal open and the focus stays wedged.',
|
|
94
|
+
'',
|
|
95
|
+
'- **The CLAIM was wrong** -- the tree asserted something it should never',
|
|
96
|
+
' have asserted. You CANNOT dispose this case: amending a claim requires',
|
|
97
|
+
' an independent review session, and you are not one. Do NOT dismiss it',
|
|
98
|
+
' to clear the queue -- dismissing asserts the claim stands, which would',
|
|
99
|
+
' be a false statement about reality. LEAVE IT UNDISPOSED and say so',
|
|
100
|
+
' plainly in your final message, naming the proposal id and why you',
|
|
101
|
+
' believe the claim is wrong. An operator will be escalated to.',
|
|
102
|
+
'',
|
|
103
|
+
'Never dismiss a proposal you have not actually understood. An unexplained',
|
|
104
|
+
'dismissal discards the signal the loop exists to carry, and the dismiss',
|
|
105
|
+
'rate is measured.',
|
|
106
|
+
].join('\n'),
|
|
107
|
+
model: null,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function defaultArmDirective(focusId, message, directive) {
|
|
111
|
+
pendingSpawnDirectives.set(focusId, {
|
|
112
|
+
message,
|
|
113
|
+
model: directive.model ?? null,
|
|
114
|
+
// Fixed-purpose one-shot: the focus's model selector must not override it.
|
|
115
|
+
focusOverrideModel: null,
|
|
116
|
+
// MUST be 'coding'. A 'review' sessionType re-enters runReviewExitHandler on
|
|
117
|
+
// exit and re-triggers the auto-approve evaluation -- a spawn loop. The
|
|
118
|
+
// close_loop bookkeeper sets 'coding' for exactly this reason.
|
|
119
|
+
sessionType: 'coding',
|
|
120
|
+
// Its own lineage slot: cannot resume or clobber the coder's or reviewer's
|
|
121
|
+
// context (session-lineage.ts:53-70).
|
|
122
|
+
lineage: 'shortfall_disposition',
|
|
123
|
+
continuity: 'fresh',
|
|
124
|
+
contentHash: computeDirectiveHash(directive),
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
function defaultDeps() {
|
|
128
|
+
return {
|
|
129
|
+
getActiveFocuses,
|
|
130
|
+
listOpenShortfallProposalIds,
|
|
131
|
+
hasActiveTeam: (focusId) => getActiveTeams().has(focusId),
|
|
132
|
+
hasPendingSpawnDirective,
|
|
133
|
+
assembleDirectiveContent,
|
|
134
|
+
armDirective: defaultArmDirective,
|
|
135
|
+
setShortfallDispositionAttempts,
|
|
136
|
+
hasOpenFocusEscalation,
|
|
137
|
+
createEscalation,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* File the one escalation that lets a human into this loop.
|
|
142
|
+
*
|
|
143
|
+
* Deduped per focus against the DB (not memory), so the bound holds across a
|
|
144
|
+
* daemon restart and a held focus accrues exactly one open escalation.
|
|
145
|
+
*/
|
|
146
|
+
async function escalateUndisposed(deps, params) {
|
|
147
|
+
if (await deps.hasOpenFocusEscalation(params.focusId, SHORTFALL_UNDISPOSED_KIND)) {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
await withRetry(() => deps.createEscalation({
|
|
151
|
+
organizationId: params.organizationId,
|
|
152
|
+
sessionId: '',
|
|
153
|
+
issueId: null,
|
|
154
|
+
reasonType: ESCALATION_REASONS.BLOCKED_BY_EXTERNAL,
|
|
155
|
+
disposition: ESCALATION_DISPOSITIONS.NEEDS_OPERATOR,
|
|
156
|
+
anchor: { focusId: params.focusId },
|
|
157
|
+
escalationKind: SHORTFALL_UNDISPOSED_KIND,
|
|
158
|
+
description: `Focus "${params.focusName}" cannot finish: ${params.shortfallIds.length} shortfall ` +
|
|
159
|
+
`drift proposal(s) are still undisposed after ${params.attempts} disposition pass(es) ` +
|
|
160
|
+
`(cap ${params.cap}). Its deliveries are held in verify and the loop will not ` +
|
|
161
|
+
`converge on its own.\n\n` +
|
|
162
|
+
`**Focus:** ${params.focusName}\n` +
|
|
163
|
+
`**Focus ID:** ${params.focusId}\n` +
|
|
164
|
+
`**Undisposed proposals:** ${params.shortfallIds.join(', ')}\n\n` +
|
|
165
|
+
`A shortfall means the reality tree claimed something and the work delivered less ` +
|
|
166
|
+
`than that claim. One of the two is wrong, and the machine could not decide which.\n\n` +
|
|
167
|
+
`The likeliest cause is that the CLAIM is wrong: the disposition pass runs as a ` +
|
|
168
|
+
`coding session and CANNOT ratify (amending a claim requires an independent review ` +
|
|
169
|
+
`session), so it correctly left these alone rather than dismissing them falsely.`,
|
|
170
|
+
whatWasTried: `${params.attempts} scoped disposition pass(es) were armed. Each could file defects ` +
|
|
171
|
+
`and dismiss a proposal whose CLAIM stands, but none disposed these.`,
|
|
172
|
+
helpNeeded: `Decide, per proposal: if the CLAIM was wrong, ratify it (with a rationale) so the ` +
|
|
173
|
+
`tree amends; if the WORK fell short, dismiss it (with a reason) and ensure defect ` +
|
|
174
|
+
`issues exist so the delivery re-codes. Either disposition clears the hold.`,
|
|
175
|
+
metadata: {
|
|
176
|
+
cause: SHORTFALL_UNDISPOSED_KIND,
|
|
177
|
+
focusName: params.focusName,
|
|
178
|
+
shortfallProposalIds: params.shortfallIds,
|
|
179
|
+
attempts: params.attempts,
|
|
180
|
+
cap: params.cap,
|
|
181
|
+
},
|
|
182
|
+
}), { maxAttempts: 3, label: `escalation-shortfall-undisposed-${params.focusId}` });
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Run one disposition-pass tick across every product in the daemon config.
|
|
187
|
+
*
|
|
188
|
+
* Arms at most one directive per held focus per tick, and never while a team is
|
|
189
|
+
* running or a directive is already pending -- so a focus that stays held across
|
|
190
|
+
* ticks does not accumulate spawns. Per-focus failures are counted and skipped;
|
|
191
|
+
* one unresolvable focus must not stop the others.
|
|
192
|
+
*/
|
|
193
|
+
export async function runShortfallDispositionTick(config, depOverrides = {}) {
|
|
194
|
+
const deps = { ...defaultDeps(), ...depOverrides };
|
|
195
|
+
const cap = deps.cap ?? resolveShortfallDispositionAttemptCap();
|
|
196
|
+
const counts = {
|
|
197
|
+
productsScanned: 0,
|
|
198
|
+
focusesScanned: 0,
|
|
199
|
+
focusesHeld: 0,
|
|
200
|
+
armed: 0,
|
|
201
|
+
skippedBusy: 0,
|
|
202
|
+
escalated: 0,
|
|
203
|
+
countersReset: 0,
|
|
204
|
+
errors: 0,
|
|
205
|
+
};
|
|
206
|
+
for (const product of config.products) {
|
|
207
|
+
counts.productsScanned += 1;
|
|
208
|
+
const pc = configForProduct(config, product);
|
|
209
|
+
let focuses;
|
|
210
|
+
try {
|
|
211
|
+
focuses = await deps.getActiveFocuses(config.organizationId, product.id);
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
counts.errors += 1;
|
|
215
|
+
log.warn(`[shortfall-disposition] getActiveFocuses failed for product ${product.id}: ${err.message}`);
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
for (const focus of focuses) {
|
|
219
|
+
counts.focusesScanned += 1;
|
|
220
|
+
let shortfallIds;
|
|
221
|
+
try {
|
|
222
|
+
shortfallIds = await deps.listOpenShortfallProposalIds(focus.focus_id);
|
|
223
|
+
}
|
|
224
|
+
catch (err) {
|
|
225
|
+
counts.errors += 1;
|
|
226
|
+
log.warn(`[shortfall-disposition] shortfall lookup failed for "${focus.focus_name}": ${err.message}`);
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
const attempts = focus.shortfall_disposition_attempts ?? 0;
|
|
230
|
+
if (shortfallIds.length === 0) {
|
|
231
|
+
// Cleared. Reset the budget so a later, unrelated shortfall gets a full
|
|
232
|
+
// set of attempts rather than inheriting an exhausted counter.
|
|
233
|
+
if (attempts > 0) {
|
|
234
|
+
try {
|
|
235
|
+
await deps.setShortfallDispositionAttempts(focus.focus_id, 0);
|
|
236
|
+
counts.countersReset += 1;
|
|
237
|
+
}
|
|
238
|
+
catch (err) {
|
|
239
|
+
counts.errors += 1;
|
|
240
|
+
log.warn(`[shortfall-disposition] failed to reset attempts for "${focus.focus_name}": ${err.message}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
counts.focusesHeld += 1;
|
|
246
|
+
// The bound. Past the cap the machine has demonstrably failed to dispose
|
|
247
|
+
// these on its own, so stop arming (each pass costs a team) and hand it to
|
|
248
|
+
// an operator instead. The counter is DURABLE, so this survives restarts:
|
|
249
|
+
// an in-process counter would reset and re-arm forever, never escalating.
|
|
250
|
+
if (attempts >= cap) {
|
|
251
|
+
try {
|
|
252
|
+
if (await escalateUndisposed(deps, {
|
|
253
|
+
organizationId: config.organizationId,
|
|
254
|
+
focusId: focus.focus_id,
|
|
255
|
+
focusName: focus.focus_name,
|
|
256
|
+
shortfallIds,
|
|
257
|
+
attempts,
|
|
258
|
+
cap,
|
|
259
|
+
})) {
|
|
260
|
+
counts.escalated += 1;
|
|
261
|
+
log.info(`[shortfall-disposition] filed ${SHORTFALL_UNDISPOSED_KIND} for "${focus.focus_name}" ` +
|
|
262
|
+
`(${shortfallIds.length} undisposed after ${attempts} pass(es), cap ${cap})`);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
counts.errors += 1;
|
|
267
|
+
log.warn(`[shortfall-disposition] failed to escalate for "${focus.focus_name}": ${err.message}`);
|
|
268
|
+
}
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
// A running team already has (or will get) the context; a pending
|
|
272
|
+
// directive is already queued for the spawner. Arming over either would
|
|
273
|
+
// duplicate work or clobber a queued handoff.
|
|
274
|
+
if (deps.hasActiveTeam(focus.focus_id) || deps.hasPendingSpawnDirective(focus.focus_id)) {
|
|
275
|
+
counts.skippedBusy += 1;
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
try {
|
|
279
|
+
const directive = buildShortfallDispositionDirective();
|
|
280
|
+
// No worktree path: the pass is armed between teams, so there is no live
|
|
281
|
+
// team to read one from. git.diff_against_base degrades to nothing
|
|
282
|
+
// rather than throwing (assembly sources fail soft), and the shortfall
|
|
283
|
+
// section -- the part that matters -- resolves regardless.
|
|
284
|
+
const message = await deps.assembleDirectiveContent(pc, focus.focus_id, directive, null);
|
|
285
|
+
deps.armDirective(focus.focus_id, message, directive);
|
|
286
|
+
counts.armed += 1;
|
|
287
|
+
// Count the attempt AFTER the arm succeeds -- an assembly failure is not
|
|
288
|
+
// an attempt, and charging for it would burn the budget without the pass
|
|
289
|
+
// ever running. Persisted before the next tick can read it, so the bound
|
|
290
|
+
// advances even if this process dies immediately after.
|
|
291
|
+
await deps.setShortfallDispositionAttempts(focus.focus_id, attempts + 1);
|
|
292
|
+
log.info(`[shortfall-disposition] armed a disposition pass for "${focus.focus_name}" ` +
|
|
293
|
+
`(attempt ${attempts + 1}/${cap}, ${shortfallIds.length} undisposed shortfall(s): ` +
|
|
294
|
+
`${shortfallIds.join(', ')})`);
|
|
295
|
+
}
|
|
296
|
+
catch (err) {
|
|
297
|
+
counts.errors += 1;
|
|
298
|
+
log.warn(`[shortfall-disposition] failed to arm for "${focus.focus_name}": ${err.message}`);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
if (counts.focusesHeld > 0 || counts.errors > 0) {
|
|
303
|
+
log.info(`[shortfall-disposition] tick: products=${counts.productsScanned} focuses=${counts.focusesScanned} ` +
|
|
304
|
+
`held=${counts.focusesHeld} armed=${counts.armed} skippedBusy=${counts.skippedBusy} ` +
|
|
305
|
+
`escalated=${counts.escalated} reset=${counts.countersReset} errors=${counts.errors}`);
|
|
306
|
+
}
|
|
307
|
+
return counts;
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=shortfall-disposition-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shortfall-disposition-loop.js","sourceRoot":"","sources":["../src/shortfall-disposition-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-routing.d.ts","sourceRoot":"","sources":["../../src/spawn/model-routing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAC5G,OAAO,EAEL,wBAAwB,EAEzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAWL,KAAK,cAAc,EAEpB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"model-routing.d.ts","sourceRoot":"","sources":["../../src/spawn/model-routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,8 @@ import { codexSafeModelAlias, writeLocalModelCodexHome, TELORA_LOCAL_API_KEY_ENV
|
|
|
18
18
|
import { startCodexMcpProxy, shouldRouteLocalModelThroughProxy, } from '../backends/codex/codex-mcp-proxy.js';
|
|
19
19
|
import { detectHostCapability, ensureLoaded, resolveSafeLoadOptions, getStatus, decideSwap, hostRootFromBaseUrl, observeHostSwap, claimResidentHost, detectSingleHostModelConflict, shouldSurfaceHostConflictOnce, } from '../host-control/index.js';
|
|
20
20
|
import { hasActiveTeam } from '../focus-team-state.js';
|
|
21
|
+
import { createLogger } from '../log.js';
|
|
22
|
+
const log = createLogger({ module: 'focus-executor' });
|
|
21
23
|
/**
|
|
22
24
|
* Resolve the isolated CODEX_HOME to set on a spawn, or undefined when none
|
|
23
25
|
* applies. Pure + testable: only a codex-engine spawn against a product that
|
|
@@ -270,7 +272,7 @@ export async function surfaceSingleHostModelConflict(args, deps = {}) {
|
|
|
270
272
|
`review="${reviewCoords.name}" (${reviewCoords.model}). On a single GPU these force an ` +
|
|
271
273
|
`evict+load swap on every pass alternation and fight over the card. Pin both passes to the ` +
|
|
272
274
|
`same local model, or move one pass to a different host / a cloud engine.`;
|
|
273
|
-
|
|
275
|
+
log.warn(`Host-control: ${detail}`);
|
|
274
276
|
try {
|
|
275
277
|
await makeEscalation({
|
|
276
278
|
organizationId: args.organizationId,
|
|
@@ -290,7 +292,7 @@ export async function surfaceSingleHostModelConflict(args, deps = {}) {
|
|
|
290
292
|
});
|
|
291
293
|
}
|
|
292
294
|
catch (err) {
|
|
293
|
-
|
|
295
|
+
log.warn(`[focus-executor] Failed to file single_host_model_conflict escalation for "${args.focusName}":`, err.message);
|
|
294
296
|
}
|
|
295
297
|
return { surfaced: true };
|
|
296
298
|
}
|
|
@@ -326,7 +328,7 @@ export async function resolveSpawnModel(args) {
|
|
|
326
328
|
// TELORA_LOCAL_API_KEY name) for a routed local-model pass; null otherwise.
|
|
327
329
|
let spawnLocalModelKey = null;
|
|
328
330
|
if (localModelConfig.kind === 'fallback') {
|
|
329
|
-
|
|
331
|
+
log.warn(`[focus-executor] Focus "${focusName}" ${enginePass} pass selected local model ` +
|
|
330
332
|
`${(localModelConfig.ref ?? '').slice(0, 8)} but it is not in the registry; falling back to the ` +
|
|
331
333
|
`per-product default model.`);
|
|
332
334
|
}
|
|
@@ -336,7 +338,7 @@ export async function resolveSpawnModel(args) {
|
|
|
336
338
|
spawnCodexModel = codexModel;
|
|
337
339
|
spawnLocalModelKey = apiKey;
|
|
338
340
|
isLocalModelPass = true;
|
|
339
|
-
|
|
341
|
+
log.info(`[focus-executor] Routing "${focusName}" ${enginePass} pass to local model ` +
|
|
340
342
|
`"${coords.name}" (${coords.model} @ ${coords.baseUrl}); CODEX_HOME=${codexHome}, ` +
|
|
341
343
|
(apiKey
|
|
342
344
|
? `key from Telora (env ${TELORA_LOCAL_API_KEY_ENV}).`
|
|
@@ -362,9 +364,10 @@ export async function resolveSpawnModel(args) {
|
|
|
362
364
|
target: coords.model,
|
|
363
365
|
}).action === 'noop';
|
|
364
366
|
}
|
|
365
|
-
catch {
|
|
367
|
+
catch (err) {
|
|
366
368
|
// Transient status-read failure -> fall through to the managed async
|
|
367
369
|
// swap, which retries the load + readiness off the poll-critical path.
|
|
370
|
+
log.debug('Transient status-read failure -> fall through to the managed async', { error: String(err?.message ?? err) });
|
|
368
371
|
}
|
|
369
372
|
if (alreadyResident) {
|
|
370
373
|
// Claim the per-host residency lock (#4) so a second focus on this host
|
|
@@ -376,11 +379,11 @@ export async function resolveSpawnModel(args) {
|
|
|
376
379
|
isFocusActive: (id) => hasActiveTeam(id),
|
|
377
380
|
});
|
|
378
381
|
if (claim.status === 'busy_other') {
|
|
379
|
-
|
|
382
|
+
log.info(`[focus-executor] Host-control: host for "${coords.name}" is held by another ` +
|
|
380
383
|
`focus's running pass; deferring "${focusName}" ${enginePass} pass to avoid eviction.`);
|
|
381
384
|
return { kind: 'still_loading', coords, reason: 'host_busy_other_focus' };
|
|
382
385
|
}
|
|
383
|
-
|
|
386
|
+
log.info(`[focus-executor] Host-control: model "${coords.name}" (${coords.model}) already ` +
|
|
384
387
|
`resident + ready for "${focusName}" ${enginePass} pass.`);
|
|
385
388
|
}
|
|
386
389
|
else {
|
|
@@ -404,12 +407,12 @@ export async function resolveSpawnModel(args) {
|
|
|
404
407
|
// fixed DEFAULT_MAX_SEQ_LENGTH when host hardware data is unavailable.
|
|
405
408
|
const sizing = await resolveSafeLoadOptions(coords.baseUrl, coords.model, { modelSizeMb: coords.modelSizeMb, nativeContext: coords.nativeContext }, apiKey);
|
|
406
409
|
if (sizing.source === 'fallback') {
|
|
407
|
-
|
|
410
|
+
log.warn(`[focus-executor] Host-control sizing unavailable for "${coords.name}" ` +
|
|
408
411
|
`(${coords.model}); falling back to the fixed default context ` +
|
|
409
412
|
`${sizing.maxSeqLength}. Check the host's /api/system/hardware endpoint.`);
|
|
410
413
|
}
|
|
411
414
|
else {
|
|
412
|
-
|
|
415
|
+
log.info(`[focus-executor] Host-control sizing for "${coords.name}" (${coords.model}): ` +
|
|
413
416
|
`max_seq_length=${sizing.maxSeqLength}` +
|
|
414
417
|
(sizing.cacheTypeKv ? `, cache_type_kv=${sizing.cacheTypeKv}` : '') +
|
|
415
418
|
(sizing.quantRequired ? ' (quant-required, marginal headroom)' : '') +
|
|
@@ -422,29 +425,29 @@ export async function resolveSpawnModel(args) {
|
|
|
422
425
|
loadTimeoutMs,
|
|
423
426
|
...(sizing.cacheTypeKv !== undefined ? { cacheTypeKv: sizing.cacheTypeKv } : {}),
|
|
424
427
|
}, apiKey);
|
|
425
|
-
|
|
428
|
+
log.info(`[focus-executor] Host-control: local model "${coords.name}" (${coords.model}) ` +
|
|
426
429
|
`loaded + ready (off-loop swap complete).`);
|
|
427
430
|
},
|
|
428
431
|
});
|
|
429
432
|
if (observation.status === 'loading') {
|
|
430
|
-
|
|
433
|
+
log.info(`[focus-executor] Host-control: model "${coords.name}" (${coords.model}) is loading ` +
|
|
431
434
|
`for "${focusName}" ${enginePass} pass; deferring spawn (load runs off the poll loop).`);
|
|
432
435
|
return { kind: 'still_loading', coords, reason: 'model_loading' };
|
|
433
436
|
}
|
|
434
437
|
if (observation.status === 'busy_other') {
|
|
435
|
-
|
|
438
|
+
log.info(`[focus-executor] Host-control: host for "${coords.name}" is held by another ` +
|
|
436
439
|
`focus's running pass; deferring "${focusName}" ${enginePass} pass to avoid eviction.`);
|
|
437
440
|
return { kind: 'still_loading', coords, reason: 'host_busy_other_focus' };
|
|
438
441
|
}
|
|
439
442
|
if (observation.status === 'failed') {
|
|
440
|
-
|
|
443
|
+
log.error(`[focus-executor] Host-control swap to load "${coords.name}" (${coords.model}) for ` +
|
|
441
444
|
`"${focusName}" ${enginePass} pass FAILED: ${observation.error}. Not spawning against ` +
|
|
442
445
|
`an unloaded model; will re-attempt next poll.`);
|
|
443
446
|
return { kind: 'skip_load', coords, dbMessage: observation.error };
|
|
444
447
|
}
|
|
445
448
|
// observation.status === 'ready' -- the detached load completed on a
|
|
446
449
|
// prior tick; the model is resident and residency is held. Proceed.
|
|
447
|
-
|
|
450
|
+
log.info(`[focus-executor] Host-control: model "${coords.name}" (${coords.model}) ready for ` +
|
|
448
451
|
`"${focusName}" ${enginePass} pass (off-loop swap complete).`);
|
|
449
452
|
}
|
|
450
453
|
}
|
|
@@ -480,14 +483,14 @@ export async function resolveSpawnModel(args) {
|
|
|
480
483
|
wireApi: coords.wireApi ?? undefined,
|
|
481
484
|
requiresApiKey: apiKey !== null,
|
|
482
485
|
});
|
|
483
|
-
|
|
486
|
+
log.info(`[focus-executor] Local-model MCP proxy engaged for "${coords.name}": ` +
|
|
484
487
|
`Codex base_url -> ${mcpProxy.url} -> upstream ${coords.baseUrl}.`);
|
|
485
488
|
}
|
|
486
489
|
catch (err) {
|
|
487
490
|
// Best-effort: a proxy that cannot start must not block the spawn; fall
|
|
488
491
|
// back to the direct (namespace-dropping) path. The fail-loud reception
|
|
489
492
|
// check only applies when a proxy is present.
|
|
490
|
-
|
|
493
|
+
log.warn(`Local-model MCP proxy failed to start; spawning direct: ${err.message}`);
|
|
491
494
|
mcpProxy = null;
|
|
492
495
|
}
|
|
493
496
|
}
|