@telora/daemon 0.19.43 → 0.19.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-info.json +8 -3
- package/dist/assembly-engine.d.ts +9 -0
- package/dist/assembly-engine.d.ts.map +1 -1
- package/dist/assembly-engine.js.map +1 -1
- package/dist/audit-hooks.js +1 -1
- package/dist/audit-shape.d.ts +103 -0
- package/dist/audit-shape.d.ts.map +1 -0
- package/dist/audit-shape.js +81 -0
- package/dist/audit-shape.js.map +1 -0
- package/dist/branch-status.js +2 -2
- package/dist/branch-status.js.map +1 -1
- package/dist/ci-sensor-loop.d.ts +47 -0
- package/dist/ci-sensor-loop.d.ts.map +1 -0
- package/dist/ci-sensor-loop.js +116 -0
- package/dist/ci-sensor-loop.js.map +1 -0
- package/dist/ci-status-git.d.ts +52 -0
- package/dist/ci-status-git.d.ts.map +1 -0
- package/dist/ci-status-git.js +86 -0
- package/dist/ci-status-git.js.map +1 -0
- package/dist/ci-status.d.ts +122 -0
- package/dist/ci-status.d.ts.map +1 -0
- package/dist/ci-status.js +114 -0
- package/dist/ci-status.js.map +1 -0
- package/dist/cli/connect/agents.d.ts +24 -0
- package/dist/cli/connect/agents.d.ts.map +1 -0
- package/dist/cli/connect/agents.js +65 -0
- package/dist/cli/connect/agents.js.map +1 -0
- package/dist/cli/connect/claude.d.ts +31 -0
- package/dist/cli/connect/claude.d.ts.map +1 -0
- package/dist/cli/connect/claude.js +104 -0
- package/dist/cli/connect/claude.js.map +1 -0
- package/dist/cli/connect/cline.d.ts +37 -0
- package/dist/cli/connect/cline.d.ts.map +1 -0
- package/dist/cli/connect/cline.js +115 -0
- package/dist/cli/connect/cline.js.map +1 -0
- package/dist/cli/connect/codex.d.ts +44 -0
- package/dist/cli/connect/codex.d.ts.map +1 -0
- package/dist/cli/connect/codex.js +111 -0
- package/dist/cli/connect/codex.js.map +1 -0
- package/dist/cli/connect/ide.d.ts +69 -0
- package/dist/cli/connect/ide.d.ts.map +1 -0
- package/dist/cli/connect/ide.js +134 -0
- package/dist/cli/connect/ide.js.map +1 -0
- package/dist/cli/connect/scaffolding.d.ts +31 -0
- package/dist/cli/connect/scaffolding.d.ts.map +1 -0
- package/dist/cli/connect/scaffolding.js +52 -0
- package/dist/cli/connect/scaffolding.js.map +1 -0
- package/dist/cli/connect/shared.d.ts +30 -0
- package/dist/cli/connect/shared.d.ts.map +1 -0
- package/dist/cli/connect/shared.js +11 -0
- package/dist/cli/connect/shared.js.map +1 -0
- package/dist/cli/connect.d.ts +9 -210
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +10 -526
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/open.js +2 -2
- package/dist/completion/event.d.ts +3 -0
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +44 -9
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/merge-phase.d.ts +3 -0
- package/dist/completion/merge-phase.d.ts.map +1 -1
- package/dist/completion/merge-phase.js +35 -3
- package/dist/completion/merge-phase.js.map +1 -1
- package/dist/completion/read-only-pristine.d.ts +1 -1
- package/dist/completion/read-only-pristine.d.ts.map +1 -1
- package/dist/completion/read-only-pristine.js +1 -1
- package/dist/completion/read-only-pristine.js.map +1 -1
- package/dist/completion/review-exit-phase.d.ts +30 -3
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +203 -15
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/status-advance-phase.js +1 -1
- package/dist/completion/status-advance-phase.js.map +1 -1
- package/dist/completion/team-completion.d.ts.map +1 -1
- package/dist/completion/team-completion.js +22 -2
- package/dist/completion/team-completion.js.map +1 -1
- package/dist/completion/team-lifecycle.js +1 -1
- package/dist/completion/terminated-work-reconcile.js +1 -1
- package/dist/completion/terminated-work-reconcile.js.map +1 -1
- package/dist/condition-evaluators.d.ts +41 -2
- package/dist/condition-evaluators.d.ts.map +1 -1
- package/dist/condition-evaluators.js +37 -288
- package/dist/condition-evaluators.js.map +1 -1
- package/dist/context-audit.d.ts +1 -1
- package/dist/context-audit.d.ts.map +1 -1
- package/dist/context-lock.d.ts +1 -1
- package/dist/context-lock.d.ts.map +1 -1
- package/dist/control-state.d.ts +2 -2
- package/dist/control-state.d.ts.map +1 -1
- package/dist/control-state.js +4 -3
- package/dist/control-state.js.map +1 -1
- package/dist/daemon-process.d.ts +1 -1
- package/dist/daemon-process.d.ts.map +1 -1
- package/dist/delivery-advance-block.d.ts +1 -1
- package/dist/delivery-advance-block.d.ts.map +1 -1
- package/dist/delivery-advance-block.js +1 -1
- package/dist/delivery-advance-block.js.map +1 -1
- package/dist/delivery-lifecycle.js +1 -1
- package/dist/delivery-reconciler-shadow.d.ts +1 -1
- package/dist/delivery-reconciler-shadow.d.ts.map +1 -1
- package/dist/delivery-reconciler-shadow.js +1 -1
- package/dist/delivery-reconciler-shadow.js.map +1 -1
- package/dist/delivery-reconciler.d.ts +1 -0
- package/dist/delivery-reconciler.d.ts.map +1 -1
- package/dist/delivery-reconciler.js +6 -0
- package/dist/delivery-reconciler.js.map +1 -1
- package/dist/directive-executor.js +1 -1
- package/dist/directive-executor.js.map +1 -1
- package/dist/drift-eval-loop.d.ts.map +1 -1
- package/dist/drift-eval-loop.js +6 -14
- package/dist/drift-eval-loop.js.map +1 -1
- package/dist/escalations.d.ts +1 -1
- package/dist/escalations.d.ts.map +1 -1
- package/dist/escalations.js +1 -1
- package/dist/escalations.js.map +1 -1
- package/dist/evaluation-context.d.ts +2 -33
- package/dist/evaluation-context.d.ts.map +1 -1
- package/dist/evaluation-context.js +2 -56
- package/dist/evaluation-context.js.map +1 -1
- package/dist/focus-engine.d.ts +14 -5
- package/dist/focus-engine.d.ts.map +1 -1
- package/dist/focus-engine.js +35 -289
- package/dist/focus-engine.js.map +1 -1
- package/dist/focus-executor.d.ts +10 -791
- package/dist/focus-executor.d.ts.map +1 -1
- package/dist/focus-executor.js +42 -1566
- package/dist/focus-executor.js.map +1 -1
- package/dist/focus-lifecycle.js +2 -2
- package/dist/focus-lifecycle.js.map +1 -1
- package/dist/focus-loop-registry.d.ts +52 -0
- package/dist/focus-loop-registry.d.ts.map +1 -0
- package/dist/focus-loop-registry.js +328 -0
- package/dist/focus-loop-registry.js.map +1 -0
- package/dist/focus-merge.d.ts +1 -1
- package/dist/focus-merge.d.ts.map +1 -1
- package/dist/focus-merge.js +3 -3
- package/dist/focus-merge.js.map +1 -1
- package/dist/focus-phase.d.ts +4 -0
- package/dist/focus-phase.d.ts.map +1 -1
- package/dist/focus-phase.js +3 -3
- package/dist/focus-phase.js.map +1 -1
- package/dist/focus-stage-lifecycle/planning-release.d.ts +197 -0
- package/dist/focus-stage-lifecycle/planning-release.d.ts.map +1 -0
- package/dist/focus-stage-lifecycle/planning-release.js +312 -0
- package/dist/focus-stage-lifecycle/planning-release.js.map +1 -0
- package/dist/focus-stage-lifecycle/review-convergence.d.ts +133 -0
- package/dist/focus-stage-lifecycle/review-convergence.d.ts.map +1 -0
- package/dist/focus-stage-lifecycle/review-convergence.js +235 -0
- package/dist/focus-stage-lifecycle/review-convergence.js.map +1 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts +133 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.js +365 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -0
- package/dist/focus-stage-lifecycle.d.ts +22 -403
- package/dist/focus-stage-lifecycle.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle.js +26 -798
- package/dist/focus-stage-lifecycle.js.map +1 -1
- package/dist/{git-activity.d.ts → git/activity.d.ts} +1 -1
- package/dist/git/activity.d.ts.map +1 -0
- package/dist/{git-activity.js → git/activity.js} +2 -2
- package/dist/git/activity.js.map +1 -0
- package/dist/{git-branch.d.ts → git/branch.d.ts} +2 -2
- package/dist/git/branch.d.ts.map +1 -0
- package/dist/{git-branch.js → git/branch.js} +2 -2
- package/dist/git/branch.js.map +1 -0
- package/dist/{git-fetch.d.ts → git/fetch.d.ts} +2 -2
- package/dist/git/fetch.d.ts.map +1 -0
- package/dist/{git-fetch.js → git/fetch.js} +1 -1
- package/dist/git/fetch.js.map +1 -0
- package/dist/{git-genesis.d.ts → git/genesis.d.ts} +3 -3
- package/dist/git/genesis.d.ts.map +1 -0
- package/dist/{git-genesis.js → git/genesis.js} +5 -5
- package/dist/git/genesis.js.map +1 -0
- package/dist/git/index.d.ts +36 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +36 -0
- package/dist/git/index.js.map +1 -0
- package/dist/{git-integration.d.ts → git/integration.d.ts} +2 -2
- package/dist/git/integration.d.ts.map +1 -0
- package/dist/{git-integration.js → git/integration.js} +4 -4
- package/dist/git/integration.js.map +1 -0
- package/dist/{git-merge-helpers.d.ts → git/merge-helpers.d.ts} +3 -3
- package/dist/git/merge-helpers.d.ts.map +1 -0
- package/dist/{git-merge-helpers.js → git/merge-helpers.js} +3 -3
- package/dist/git/merge-helpers.js.map +1 -0
- package/dist/{git-merge-lock.d.ts → git/merge-lock.d.ts} +1 -1
- package/dist/git/merge-lock.d.ts.map +1 -0
- package/dist/{git-merge-lock.js → git/merge-lock.js} +1 -1
- package/dist/git/merge-lock.js.map +1 -0
- package/dist/{git-merge-strategies.d.ts → git/merge-strategies.d.ts} +2 -2
- package/dist/git/merge-strategies.d.ts.map +1 -0
- package/dist/{git-merge-strategies.js → git/merge-strategies.js} +3 -3
- package/dist/git/merge-strategies.js.map +1 -0
- package/dist/{git-merge.d.ts → git/merge.d.ts} +4 -4
- package/dist/git/merge.d.ts.map +1 -0
- package/dist/{git-merge.js → git/merge.js} +4 -4
- package/dist/git/merge.js.map +1 -0
- package/dist/{git-state-detector.d.ts → git/state-detector.d.ts} +2 -2
- package/dist/git/state-detector.d.ts.map +1 -0
- package/dist/{git-state-detector.js → git/state-detector.js} +7 -7
- package/dist/git/state-detector.js.map +1 -0
- package/dist/{git-types.d.ts → git/types.d.ts} +2 -2
- package/dist/git/types.d.ts.map +1 -0
- package/dist/{git-types.js → git/types.js} +1 -1
- package/dist/git/types.js.map +1 -0
- package/dist/{git-utils.d.ts → git/utils.d.ts} +1 -1
- package/dist/git/utils.d.ts.map +1 -0
- package/dist/{git-utils.js → git/utils.js} +2 -2
- package/dist/git/utils.js.map +1 -0
- package/dist/git.d.ts +5 -5
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +10 -10
- package/dist/git.js.map +1 -1
- package/dist/guard-engine.d.ts +3 -2
- package/dist/guard-engine.d.ts.map +1 -1
- package/dist/guard-engine.js +2 -2
- package/dist/guard-engine.js.map +1 -1
- package/dist/install-probe-tick.d.ts +63 -0
- package/dist/install-probe-tick.d.ts.map +1 -0
- package/dist/install-probe-tick.js +137 -0
- package/dist/install-probe-tick.js.map +1 -0
- package/dist/install-probe.d.ts +115 -0
- package/dist/install-probe.d.ts.map +1 -0
- package/dist/install-probe.js +197 -0
- package/dist/install-probe.js.map +1 -0
- package/dist/listener-auto-advance.d.ts.map +1 -1
- package/dist/listener-auto-advance.js +51 -9
- package/dist/listener-auto-advance.js.map +1 -1
- package/dist/listener.d.ts.map +1 -1
- package/dist/listener.js +15 -7
- package/dist/listener.js.map +1 -1
- package/dist/{loop-context-audit-pass.d.ts → loops/context-audit-pass.d.ts} +4 -4
- package/dist/loops/context-audit-pass.d.ts.map +1 -0
- package/dist/{loop-context-audit-pass.js → loops/context-audit-pass.js} +7 -7
- package/dist/loops/context-audit-pass.js.map +1 -0
- package/dist/{loop-engine-types.d.ts → loops/engine-types.d.ts} +1 -1
- package/dist/loops/engine-types.d.ts.map +1 -0
- package/dist/{loop-engine-types.js → loops/engine-types.js} +1 -1
- package/dist/loops/engine-types.js.map +1 -0
- package/dist/{loop-engine.d.ts → loops/engine.d.ts} +6 -6
- package/dist/loops/engine.d.ts.map +1 -0
- package/dist/{loop-engine.js → loops/engine.js} +13 -13
- package/dist/loops/engine.js.map +1 -0
- package/dist/{loop-event-bus.d.ts → loops/event-bus.d.ts} +1 -1
- package/dist/loops/event-bus.d.ts.map +1 -0
- package/dist/{loop-event-bus.js → loops/event-bus.js} +1 -1
- package/dist/loops/event-bus.js.map +1 -0
- package/dist/loops/index.d.ts +33 -0
- package/dist/loops/index.d.ts.map +1 -0
- package/dist/loops/index.js +32 -0
- package/dist/loops/index.js.map +1 -0
- package/dist/{loop-llm-client.d.ts → loops/llm-client.d.ts} +3 -3
- package/dist/loops/llm-client.d.ts.map +1 -0
- package/dist/{loop-llm-client.js → loops/llm-client.js} +3 -3
- package/dist/loops/llm-client.js.map +1 -0
- package/dist/{loop-llm-flag.d.ts → loops/llm-flag.d.ts} +1 -1
- package/dist/loops/llm-flag.d.ts.map +1 -0
- package/dist/{loop-llm-flag.js → loops/llm-flag.js} +1 -1
- package/dist/loops/llm-flag.js.map +1 -0
- package/dist/{loop-operational-block.d.ts → loops/operational-block.d.ts} +1 -1
- package/dist/loops/operational-block.d.ts.map +1 -0
- package/dist/{loop-operational-block.js → loops/operational-block.js} +1 -1
- package/dist/loops/operational-block.js.map +1 -0
- package/dist/{loop-prompt-builder.d.ts → loops/prompt-builder.d.ts} +2 -2
- package/dist/loops/prompt-builder.d.ts.map +1 -0
- package/dist/{loop-prompt-builder.js → loops/prompt-builder.js} +1 -1
- package/dist/loops/prompt-builder.js.map +1 -0
- package/dist/{loop-variance.d.ts → loops/variance.d.ts} +1 -1
- package/dist/loops/variance.d.ts.map +1 -0
- package/dist/{loop-variance.js → loops/variance.js} +1 -1
- package/dist/loops/variance.js.map +1 -0
- package/dist/merge-back-loop.d.ts.map +1 -1
- package/dist/merge-back-loop.js +4 -3
- package/dist/merge-back-loop.js.map +1 -1
- package/dist/merge-detector.js +2 -2
- package/dist/merge-detector.js.map +1 -1
- package/dist/{nexus-endpoint-clearance.d.ts → nexus/endpoint-clearance.d.ts} +2 -2
- package/dist/nexus/endpoint-clearance.d.ts.map +1 -0
- package/dist/{nexus-endpoint-clearance.js → nexus/endpoint-clearance.js} +2 -2
- package/dist/nexus/endpoint-clearance.js.map +1 -0
- package/dist/{nexus-escalation-bridge.d.ts → nexus/escalation-bridge.d.ts} +1 -1
- package/dist/nexus/escalation-bridge.d.ts.map +1 -0
- package/dist/{nexus-escalation-bridge.js → nexus/escalation-bridge.js} +2 -2
- package/dist/nexus/escalation-bridge.js.map +1 -0
- package/dist/{nexus-incoming.d.ts → nexus/incoming.d.ts} +2 -2
- package/dist/nexus/incoming.d.ts.map +1 -0
- package/dist/{nexus-incoming.js → nexus/incoming.js} +2 -2
- package/dist/nexus/incoming.js.map +1 -0
- package/dist/nexus/index.d.ts +20 -0
- package/dist/nexus/index.d.ts.map +1 -0
- package/dist/nexus/index.js +20 -0
- package/dist/nexus/index.js.map +1 -0
- package/dist/{nexus-intake-spawn.d.ts → nexus/intake-spawn.d.ts} +3 -3
- package/dist/nexus/intake-spawn.d.ts.map +1 -0
- package/dist/{nexus-intake-spawn.js → nexus/intake-spawn.js} +1 -1
- package/dist/nexus/intake-spawn.js.map +1 -0
- package/dist/{nexus-intake.d.ts → nexus/intake.d.ts} +2 -2
- package/dist/nexus/intake.d.ts.map +1 -0
- package/dist/{nexus-intake.js → nexus/intake.js} +4 -4
- package/dist/nexus/intake.js.map +1 -0
- package/dist/{nexus-return.d.ts → nexus/return.d.ts} +3 -3
- package/dist/nexus/return.d.ts.map +1 -0
- package/dist/{nexus-return.js → nexus/return.js} +4 -4
- package/dist/nexus/return.js.map +1 -0
- package/dist/otlp/index.d.ts +19 -0
- package/dist/otlp/index.d.ts.map +1 -0
- package/dist/otlp/index.js +19 -0
- package/dist/otlp/index.js.map +1 -0
- package/dist/{otlp-log-parser.d.ts → otlp/log-parser.d.ts} +2 -2
- package/dist/otlp/log-parser.d.ts.map +1 -0
- package/dist/{otlp-log-parser.js → otlp/log-parser.js} +5 -6
- package/dist/otlp/log-parser.js.map +1 -0
- package/dist/{otlp-metric-parser.d.ts → otlp/metric-parser.d.ts} +2 -2
- package/dist/otlp/metric-parser.d.ts.map +1 -0
- package/dist/{otlp-metric-parser.js → otlp/metric-parser.js} +4 -5
- package/dist/otlp/metric-parser.js.map +1 -0
- package/dist/{otlp-port-manager.d.ts → otlp/port-manager.d.ts} +1 -1
- package/dist/otlp/port-manager.d.ts.map +1 -0
- package/dist/{otlp-port-manager.js → otlp/port-manager.js} +1 -1
- package/dist/otlp/port-manager.js.map +1 -0
- package/dist/{otlp-receiver.d.ts → otlp/receiver.d.ts} +2 -2
- package/dist/otlp/receiver.d.ts.map +1 -0
- package/dist/{otlp-receiver.js → otlp/receiver.js} +5 -33
- package/dist/otlp/receiver.js.map +1 -0
- package/dist/{otlp-types.d.ts → otlp/types.d.ts} +1 -9
- package/dist/otlp/types.d.ts.map +1 -0
- package/dist/{otlp-types.js → otlp/types.js} +1 -27
- package/dist/otlp/types.js.map +1 -0
- package/dist/pipeline-config.d.ts +1 -1
- package/dist/{prd-controller.d.ts → prd/controller.d.ts} +7 -7
- package/dist/prd/controller.d.ts.map +1 -0
- package/dist/{prd-controller.js → prd/controller.js} +11 -11
- package/dist/prd/controller.js.map +1 -0
- package/dist/{prd-divergence.d.ts → prd/divergence.d.ts} +2 -2
- package/dist/prd/divergence.d.ts.map +1 -0
- package/dist/{prd-divergence.js → prd/divergence.js} +1 -1
- package/dist/prd/divergence.js.map +1 -0
- package/dist/{prd-focus-pushdown.d.ts → prd/focus-pushdown.d.ts} +2 -2
- package/dist/prd/focus-pushdown.d.ts.map +1 -0
- package/dist/{prd-focus-pushdown.js → prd/focus-pushdown.js} +3 -3
- package/dist/prd/focus-pushdown.js.map +1 -0
- package/dist/{prd-frontier.d.ts → prd/frontier.d.ts} +2 -2
- package/dist/prd/frontier.d.ts.map +1 -0
- package/dist/{prd-frontier.js → prd/frontier.js} +1 -1
- package/dist/prd/frontier.js.map +1 -0
- package/dist/prd/index.d.ts +26 -0
- package/dist/prd/index.d.ts.map +1 -0
- package/dist/prd/index.js +25 -0
- package/dist/prd/index.js.map +1 -0
- package/dist/{prd-steward.d.ts → prd/steward.d.ts} +4 -4
- package/dist/prd/steward.d.ts.map +1 -0
- package/dist/{prd-steward.js → prd/steward.js} +4 -4
- package/dist/prd/steward.js.map +1 -0
- package/dist/{prd-viability.d.ts → prd/viability.d.ts} +2 -2
- package/dist/prd/viability.d.ts.map +1 -0
- package/dist/{prd-viability.js → prd/viability.js} +1 -1
- package/dist/prd/viability.js.map +1 -0
- package/dist/product-scaffold.js +2 -2
- package/dist/product-scaffold.js.map +1 -1
- package/dist/prompt-sections/persona-sections.d.ts +32 -0
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +78 -2
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/queries/context-lock-queries.js +1 -1
- package/dist/queries/context-lock-queries.js.map +1 -1
- package/dist/queries/deliveries.d.ts +31 -0
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +5 -0
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/focuses.d.ts +17 -0
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +27 -0
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/schemas.d.ts +8 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +16 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/reality-pole.js +1 -1
- package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
- package/dist/resolvers/git-diff-against-base.js +4 -1
- package/dist/resolvers/git-diff-against-base.js.map +1 -1
- package/dist/resolvers/prd-context.js +1 -1
- package/dist/sensor-sweep.js +1 -1
- package/dist/spawn/model-routing.d.ts +277 -0
- package/dist/spawn/model-routing.d.ts.map +1 -0
- package/dist/spawn/model-routing.js +464 -0
- package/dist/spawn/model-routing.js.map +1 -0
- package/dist/spawn/process-spawn.d.ts +128 -0
- package/dist/spawn/process-spawn.d.ts.map +1 -0
- package/dist/spawn/process-spawn.js +378 -0
- package/dist/spawn/process-spawn.js.map +1 -0
- package/dist/spawn/prompt-assembly.d.ts +143 -0
- package/dist/spawn/prompt-assembly.d.ts.map +1 -0
- package/dist/spawn/prompt-assembly.js +263 -0
- package/dist/spawn/prompt-assembly.js.map +1 -0
- package/dist/spawn/shared.d.ts +72 -0
- package/dist/spawn/shared.d.ts.map +1 -0
- package/dist/spawn/shared.js +14 -0
- package/dist/spawn/shared.js.map +1 -0
- package/dist/spawn/spawn-decision.d.ts +189 -0
- package/dist/spawn/spawn-decision.d.ts.map +1 -0
- package/dist/spawn/spawn-decision.js +361 -0
- package/dist/spawn/spawn-decision.js.map +1 -0
- package/dist/spawn/worktree-session.d.ts +105 -0
- package/dist/spawn/worktree-session.d.ts.map +1 -0
- package/dist/spawn/worktree-session.js +216 -0
- package/dist/spawn/worktree-session.js.map +1 -0
- package/dist/spawner/lifecycle.js +2 -2
- package/dist/spawner/lifecycle.js.map +1 -1
- package/dist/spawner/resolution.js +1 -1
- package/dist/stall-detector-config.d.ts +4 -0
- package/dist/stall-detector-config.d.ts.map +1 -1
- package/dist/stall-detector-config.js +6 -0
- package/dist/stall-detector-config.js.map +1 -1
- package/dist/state-cascade.js +1 -1
- package/dist/state-cascade.js.map +1 -1
- package/dist/team-prompt-base.d.ts +1 -1
- package/dist/team-prompt-base.d.ts.map +1 -1
- package/dist/team-prompt-base.js +1 -1
- package/dist/team-prompt-base.js.map +1 -1
- package/dist/trigger-executor.d.ts +5 -9
- package/dist/trigger-executor.d.ts.map +1 -1
- package/dist/trigger-executor.js +14 -36
- package/dist/trigger-executor.js.map +1 -1
- package/dist/types/focus.d.ts +13 -0
- package/dist/types/focus.d.ts.map +1 -1
- package/dist/types/workflow.d.ts +1 -3
- package/dist/types/workflow.d.ts.map +1 -1
- package/dist/unified-engine-lifecycle.js +1 -1
- package/dist/unified-init.d.ts +3 -3
- package/dist/unified-init.d.ts.map +1 -1
- package/dist/unified-init.js +9 -25
- package/dist/unified-init.js.map +1 -1
- package/dist/unified-shell.d.ts +3 -3
- package/dist/unified-shell.js +4 -4
- package/dist/unified-shell.js.map +1 -1
- package/dist/verification-engine.d.ts.map +1 -1
- package/dist/verification-engine.js +15 -0
- package/dist/verification-engine.js.map +1 -1
- package/dist/{worktree-focus.d.ts → worktree/focus.d.ts} +2 -2
- package/dist/worktree/focus.d.ts.map +1 -0
- package/dist/{worktree-focus.js → worktree/focus.js} +7 -7
- package/dist/worktree/focus.js.map +1 -0
- package/dist/worktree/index.d.ts +16 -0
- package/dist/worktree/index.d.ts.map +1 -0
- package/dist/worktree/index.js +16 -0
- package/dist/worktree/index.js.map +1 -0
- package/dist/{worktree-safety.d.ts → worktree/safety.d.ts} +1 -1
- package/dist/worktree/safety.d.ts.map +1 -0
- package/dist/{worktree-safety.js → worktree/safety.js} +2 -2
- package/dist/worktree/safety.js.map +1 -0
- package/dist/{worktree-state.d.ts → worktree/state.d.ts} +1 -1
- package/dist/worktree/state.d.ts.map +1 -0
- package/dist/{worktree-state.js → worktree/state.js} +6 -6
- package/dist/worktree/state.js.map +1 -0
- package/dist/worktree.d.ts +1 -1
- package/dist/worktree.js +5 -5
- package/dist/worktree.js.map +1 -1
- package/package.json +5 -4
- package/dist/git-activity.d.ts.map +0 -1
- package/dist/git-activity.js.map +0 -1
- package/dist/git-branch.d.ts.map +0 -1
- package/dist/git-branch.js.map +0 -1
- package/dist/git-fetch.d.ts.map +0 -1
- package/dist/git-fetch.js.map +0 -1
- package/dist/git-genesis.d.ts.map +0 -1
- package/dist/git-genesis.js.map +0 -1
- package/dist/git-integration.d.ts.map +0 -1
- package/dist/git-integration.js.map +0 -1
- package/dist/git-merge-helpers.d.ts.map +0 -1
- package/dist/git-merge-helpers.js.map +0 -1
- package/dist/git-merge-lock.d.ts.map +0 -1
- package/dist/git-merge-lock.js.map +0 -1
- package/dist/git-merge-strategies.d.ts.map +0 -1
- package/dist/git-merge-strategies.js.map +0 -1
- package/dist/git-merge.d.ts.map +0 -1
- package/dist/git-merge.js.map +0 -1
- package/dist/git-state-detector.d.ts.map +0 -1
- package/dist/git-state-detector.js.map +0 -1
- package/dist/git-types.d.ts.map +0 -1
- package/dist/git-types.js.map +0 -1
- package/dist/git-utils.d.ts.map +0 -1
- package/dist/git-utils.js.map +0 -1
- package/dist/loop-context-audit-pass.d.ts.map +0 -1
- package/dist/loop-context-audit-pass.js.map +0 -1
- package/dist/loop-engine-types.d.ts.map +0 -1
- package/dist/loop-engine-types.js.map +0 -1
- package/dist/loop-engine.d.ts.map +0 -1
- package/dist/loop-engine.js.map +0 -1
- package/dist/loop-event-bus.d.ts.map +0 -1
- package/dist/loop-event-bus.js.map +0 -1
- package/dist/loop-llm-client.d.ts.map +0 -1
- package/dist/loop-llm-client.js.map +0 -1
- package/dist/loop-llm-flag.d.ts.map +0 -1
- package/dist/loop-llm-flag.js.map +0 -1
- package/dist/loop-operational-block.d.ts.map +0 -1
- package/dist/loop-operational-block.js.map +0 -1
- package/dist/loop-prompt-builder.d.ts.map +0 -1
- package/dist/loop-prompt-builder.js.map +0 -1
- package/dist/loop-variance.d.ts.map +0 -1
- package/dist/loop-variance.js.map +0 -1
- package/dist/nexus-endpoint-clearance.d.ts.map +0 -1
- package/dist/nexus-endpoint-clearance.js.map +0 -1
- package/dist/nexus-escalation-bridge.d.ts.map +0 -1
- package/dist/nexus-escalation-bridge.js.map +0 -1
- package/dist/nexus-incoming.d.ts.map +0 -1
- package/dist/nexus-incoming.js.map +0 -1
- package/dist/nexus-intake-spawn.d.ts.map +0 -1
- package/dist/nexus-intake-spawn.js.map +0 -1
- package/dist/nexus-intake.d.ts.map +0 -1
- package/dist/nexus-intake.js.map +0 -1
- package/dist/nexus-return.d.ts.map +0 -1
- package/dist/nexus-return.js.map +0 -1
- package/dist/otlp-log-parser.d.ts.map +0 -1
- package/dist/otlp-log-parser.js.map +0 -1
- package/dist/otlp-metric-parser.d.ts.map +0 -1
- package/dist/otlp-metric-parser.js.map +0 -1
- package/dist/otlp-port-manager.d.ts.map +0 -1
- package/dist/otlp-port-manager.js.map +0 -1
- package/dist/otlp-receiver.d.ts.map +0 -1
- package/dist/otlp-receiver.js.map +0 -1
- package/dist/otlp-types.d.ts.map +0 -1
- package/dist/otlp-types.js.map +0 -1
- package/dist/prd-controller.d.ts.map +0 -1
- package/dist/prd-controller.js.map +0 -1
- package/dist/prd-divergence.d.ts.map +0 -1
- package/dist/prd-divergence.js.map +0 -1
- package/dist/prd-focus-pushdown.d.ts.map +0 -1
- package/dist/prd-focus-pushdown.js.map +0 -1
- package/dist/prd-frontier.d.ts.map +0 -1
- package/dist/prd-frontier.js.map +0 -1
- package/dist/prd-steward.d.ts.map +0 -1
- package/dist/prd-steward.js.map +0 -1
- package/dist/prd-viability.d.ts.map +0 -1
- package/dist/prd-viability.js.map +0 -1
- package/dist/worktree-focus.d.ts.map +0 -1
- package/dist/worktree-focus.js.map +0 -1
- package/dist/worktree-safety.d.ts.map +0 -1
- package/dist/worktree-safety.js.map +0 -1
- package/dist/worktree-state.d.ts.map +0 -1
- package/dist/worktree-state.js.map +0 -1
package/build-info.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"commitSha": "
|
|
3
|
-
"builtAt": "2026-07-
|
|
2
|
+
"commitSha": "e47879d1b",
|
|
3
|
+
"builtAt": "2026-07-05T20:47:13.669Z",
|
|
4
4
|
"expectedMigrations": [
|
|
5
5
|
"20250829113330_create_org_nodes_table.sql",
|
|
6
6
|
"20250829113402_fix_function_security_search_path.sql",
|
|
@@ -705,6 +705,11 @@
|
|
|
705
705
|
"20260702183805_station_distillation_directives.sql",
|
|
706
706
|
"20260703154029_code_metrics_intent_aligned_churn.sql",
|
|
707
707
|
"20260703165250_retarget_execution_observation_deposit_to_building.sql",
|
|
708
|
-
"20260703170927_agentless_stage_explicit_and_fail_loud_append.sql"
|
|
708
|
+
"20260703170927_agentless_stage_explicit_and_fail_loud_append.sql",
|
|
709
|
+
"20260704001953_add_focus_audit_origin.sql",
|
|
710
|
+
"20260704023738_pin_testing_standard_into_coding_directive.sql",
|
|
711
|
+
"20260705131710_neutralize_retired_guard_types.sql",
|
|
712
|
+
"20260705162613_add_reviewed_through_sha.sql",
|
|
713
|
+
"20260705165637_add_review_cycle_count.sql"
|
|
709
714
|
]
|
|
710
715
|
}
|
|
@@ -23,6 +23,15 @@ export interface AssemblyContext {
|
|
|
23
23
|
* param (e.g. prd.context(prdId=...)) overrides it when present.
|
|
24
24
|
*/
|
|
25
25
|
prdId?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Override for the git.diff_against_base base ref. When set, the diff is
|
|
28
|
+
* computed against this ref instead of the integration branch. The review
|
|
29
|
+
* resume path sets it to the focus's review coverage watermark
|
|
30
|
+
* (reviewed_through_sha) so a resumed reviewer sees only the incremental
|
|
31
|
+
* delta since the last completed coverage (watermark..tip) rather than the
|
|
32
|
+
* full branch diff. Absent for every other caller -> integration base.
|
|
33
|
+
*/
|
|
34
|
+
diffBaseOverride?: string;
|
|
26
35
|
}
|
|
27
36
|
/** A resolver function that hydrates a source reference into markdown. */
|
|
28
37
|
export type SourceResolver = (context: AssemblyContext, params: Record<string, string>) => Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assembly-engine.d.ts","sourceRoot":"","sources":["../src/assembly-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,8DAA8D;AAC9D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"assembly-engine.d.ts","sourceRoot":"","sources":["../src/assembly-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,8DAA8D;AAC9D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,0EAA0E;AAC1E,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3B,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAExD;AAKD,0DAA0D;AAC1D,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAEzF;AAED,+CAA+C;AAC/C,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,EAAE,CAErD;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAelG;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iCAAiC,CACrD,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,gBAAgB,CAAC,CA0D3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assembly-engine.js","sourceRoot":"","sources":["../src/assembly-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"assembly-engine.js","sourceRoot":"","sources":["../src/assembly-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/audit-hooks.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
8
8
|
import { join } from 'node:path';
|
|
9
|
-
import { runGitSync } from './git
|
|
9
|
+
import { runGitSync } from './git/index.js';
|
|
10
10
|
import { buildClaudeSettings, mergeClaudeSettings } from './templates/claude-settings.js';
|
|
11
11
|
import { ensureCodexConfigIgnoredInWorktree } from './worktree.js';
|
|
12
12
|
const CODEX_READ_ONLY_BLOCK_START = '# BEGIN TELORA CODEX READ-ONLY';
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discovery-only audit-shape determination (injection #7).
|
|
3
|
+
*
|
|
4
|
+
* PURE, dependency-free (no `@telora/daemon-core`, no I/O). The daemon's
|
|
5
|
+
* discovery-only handling was gated strictly on `product_focuses.read_only
|
|
6
|
+
* ===true`; when read_only is silently absent an audit focus stalls. These two
|
|
7
|
+
* predicates add the SECOND, structural signal so a flag-absent audit focus is
|
|
8
|
+
* still handled correctly.
|
|
9
|
+
*
|
|
10
|
+
* This lives in its own module (rather than in delivery-reconciler.ts) precisely
|
|
11
|
+
* because it must be importable WITHOUT pulling the reconciler's `@telora/daemon
|
|
12
|
+
* -core` dependency -- listener-auto-advance.ts and completion/event.ts import it
|
|
13
|
+
* directly, and several tests mock the reconciler-apply chain to avoid the fragile
|
|
14
|
+
* bare-specifier daemon-core resolution under tsx. delivery-reconciler.ts
|
|
15
|
+
* re-exports this surface for back-compat.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* The structural signal an audit/discovery delivery presents, independent of the
|
|
19
|
+
* `read_only` phase flag. Belt-and-suspenders for injection #7: when a focus IS
|
|
20
|
+
* an audit but `read_only` is silently absent, this second signal still yields
|
|
21
|
+
* correct discovery-only treatment instead of a stall or premature execution.
|
|
22
|
+
*/
|
|
23
|
+
export interface DiscoveryOnlySignal {
|
|
24
|
+
/**
|
|
25
|
+
* The focus's `read_only` audit-phase flag as the daemon sees it. The PRIMARY
|
|
26
|
+
* signal; `true` alone yields discovery-only. Note the daemon coerces a DB null
|
|
27
|
+
* to `false`, so `false` here means "false OR absent" -- which is exactly why
|
|
28
|
+
* the second signal below cannot key on read_only-null.
|
|
29
|
+
*/
|
|
30
|
+
focusReadOnly: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Immutable provenance: the focus was authored as an audit (audit playbook, or
|
|
33
|
+
* an ad-hoc read-only create). Unlike read_only it is NEVER flipped, so it
|
|
34
|
+
* survives read_only being lost after creation. Absent on legacy/backends that
|
|
35
|
+
* predate the column -> `false` -> second signal does not fire (safe default).
|
|
36
|
+
*/
|
|
37
|
+
focusAuditOrigin: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Whether the human ratification gate has been crossed (product_focuses
|
|
40
|
+
* .ratified_at is set). This is the execute-phase discriminator that keeps the
|
|
41
|
+
* second signal from misfiring on a RATIFIED audit focus: after ratification
|
|
42
|
+
* read_only=false and the released remediation deliveries are (briefly)
|
|
43
|
+
* injection-anchored + issue-less before the team scopes them -- and those must
|
|
44
|
+
* be SCOPED and executed, not auto-terminaled. A set ratified_at suppresses the
|
|
45
|
+
* second signal so the audit-origin marker never contradicts a legitimate
|
|
46
|
+
* execute-phase read_only=false.
|
|
47
|
+
*/
|
|
48
|
+
focusRatified: boolean;
|
|
49
|
+
/** Whether the delivery is anchored to a reality-tree injection. */
|
|
50
|
+
injectionAnchored: boolean;
|
|
51
|
+
/** Whether the delivery carries at least one Task/Bug work issue. */
|
|
52
|
+
hasWorkIssues: boolean;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Focus-level audit-phase predicate: the focus is in the audit/read-only phase
|
|
56
|
+
* either explicitly (`read_only===true`) OR structurally (audit-origin AND the
|
|
57
|
+
* human ratify gate has NOT been crossed). This is the second signal at FOCUS
|
|
58
|
+
* grain -- shared by the discovery-only delivery decision below and the
|
|
59
|
+
* no-progress guard's planning-delivery exemption (completion/event.ts), so both
|
|
60
|
+
* treat a flag-absent audit focus identically to an explicit read_only one.
|
|
61
|
+
*
|
|
62
|
+
* Does NOT fork read_only: it never contradicts an explicit read_only=true, and
|
|
63
|
+
* a set `ratifiedAt` (execute-phase crossing) makes it fall back to read_only
|
|
64
|
+
* alone -- so a ratified audit focus (read_only=false) reads as NOT audit-phase.
|
|
65
|
+
*/
|
|
66
|
+
export declare function isAuditPhaseFocus(focus: {
|
|
67
|
+
readOnly: boolean;
|
|
68
|
+
auditOrigin: boolean;
|
|
69
|
+
ratified: boolean;
|
|
70
|
+
}): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Convenience over `isAuditPhaseFocus` for the RAW focus-row shape the queries
|
|
73
|
+
* return (snake_case, nullable). Coerces `read_only`/`audit_origin` (DB null ->
|
|
74
|
+
* false) and reads `ratified_at != null` as the execute-phase discriminator.
|
|
75
|
+
* Used at the spawn sites (listener.ts) so a flag-absent audit focus spawns
|
|
76
|
+
* read-only -- installReadOnlyAuditGuards engages and the team is not driven into
|
|
77
|
+
* scoping/write/commit ahead of ratification (TEL-3; 2f253da6 does not reproduce).
|
|
78
|
+
*/
|
|
79
|
+
export declare function isAuditPhaseFocusRow(focus: {
|
|
80
|
+
read_only?: boolean | null;
|
|
81
|
+
audit_origin?: boolean | null;
|
|
82
|
+
ratified_at?: string | null;
|
|
83
|
+
}): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Resolve whether a delivery is DISCOVERY-ONLY from the two-signal set.
|
|
86
|
+
*
|
|
87
|
+
* Signal 1 (primary, unchanged): `focusReadOnly === true` -- the explicit audit
|
|
88
|
+
* phase. Discovery-only regardless of shape.
|
|
89
|
+
*
|
|
90
|
+
* Signal 2 (structural, injection #7): an audit-origin, NOT-yet-ratified focus
|
|
91
|
+
* (isAuditPhaseFocus) whose delivery is injection-anchored and issue-less. This
|
|
92
|
+
* degrades gracefully when read_only is absent, WITHOUT forking read_only:
|
|
93
|
+
* - it never contradicts an explicit read_only=true (signal 1 already fired);
|
|
94
|
+
* - `focusRatified` defers to the human execute-phase crossing, so a ratified
|
|
95
|
+
* (read_only=false) audit focus's unscoped remediation deliveries are NOT
|
|
96
|
+
* swept to terminal;
|
|
97
|
+
* - it requires `focusAuditOrigin`, so a NORMAL execution focus's transiently
|
|
98
|
+
* issue-less injection-anchored delivery still holds at the scoping gate.
|
|
99
|
+
*
|
|
100
|
+
* Pure and exported for unit testing.
|
|
101
|
+
*/
|
|
102
|
+
export declare function isDiscoveryOnlyDelivery(signal: DiscoveryOnlySignal): boolean;
|
|
103
|
+
//# sourceMappingURL=audit-shape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-shape.d.ts","sourceRoot":"","sources":["../src/audit-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB;;;;;OAKG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;;;;;;;;OASG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,oEAAoE;IACpE,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qEAAqE;IACrE,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAGV;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GAAG,OAAO,CAMV;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAc5E"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discovery-only audit-shape determination (injection #7).
|
|
3
|
+
*
|
|
4
|
+
* PURE, dependency-free (no `@telora/daemon-core`, no I/O). The daemon's
|
|
5
|
+
* discovery-only handling was gated strictly on `product_focuses.read_only
|
|
6
|
+
* ===true`; when read_only is silently absent an audit focus stalls. These two
|
|
7
|
+
* predicates add the SECOND, structural signal so a flag-absent audit focus is
|
|
8
|
+
* still handled correctly.
|
|
9
|
+
*
|
|
10
|
+
* This lives in its own module (rather than in delivery-reconciler.ts) precisely
|
|
11
|
+
* because it must be importable WITHOUT pulling the reconciler's `@telora/daemon
|
|
12
|
+
* -core` dependency -- listener-auto-advance.ts and completion/event.ts import it
|
|
13
|
+
* directly, and several tests mock the reconciler-apply chain to avoid the fragile
|
|
14
|
+
* bare-specifier daemon-core resolution under tsx. delivery-reconciler.ts
|
|
15
|
+
* re-exports this surface for back-compat.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Focus-level audit-phase predicate: the focus is in the audit/read-only phase
|
|
19
|
+
* either explicitly (`read_only===true`) OR structurally (audit-origin AND the
|
|
20
|
+
* human ratify gate has NOT been crossed). This is the second signal at FOCUS
|
|
21
|
+
* grain -- shared by the discovery-only delivery decision below and the
|
|
22
|
+
* no-progress guard's planning-delivery exemption (completion/event.ts), so both
|
|
23
|
+
* treat a flag-absent audit focus identically to an explicit read_only one.
|
|
24
|
+
*
|
|
25
|
+
* Does NOT fork read_only: it never contradicts an explicit read_only=true, and
|
|
26
|
+
* a set `ratifiedAt` (execute-phase crossing) makes it fall back to read_only
|
|
27
|
+
* alone -- so a ratified audit focus (read_only=false) reads as NOT audit-phase.
|
|
28
|
+
*/
|
|
29
|
+
export function isAuditPhaseFocus(focus) {
|
|
30
|
+
if (focus.readOnly === true)
|
|
31
|
+
return true;
|
|
32
|
+
return focus.auditOrigin === true && !focus.ratified;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Convenience over `isAuditPhaseFocus` for the RAW focus-row shape the queries
|
|
36
|
+
* return (snake_case, nullable). Coerces `read_only`/`audit_origin` (DB null ->
|
|
37
|
+
* false) and reads `ratified_at != null` as the execute-phase discriminator.
|
|
38
|
+
* Used at the spawn sites (listener.ts) so a flag-absent audit focus spawns
|
|
39
|
+
* read-only -- installReadOnlyAuditGuards engages and the team is not driven into
|
|
40
|
+
* scoping/write/commit ahead of ratification (TEL-3; 2f253da6 does not reproduce).
|
|
41
|
+
*/
|
|
42
|
+
export function isAuditPhaseFocusRow(focus) {
|
|
43
|
+
return isAuditPhaseFocus({
|
|
44
|
+
readOnly: focus.read_only === true,
|
|
45
|
+
auditOrigin: focus.audit_origin === true,
|
|
46
|
+
ratified: focus.ratified_at != null,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Resolve whether a delivery is DISCOVERY-ONLY from the two-signal set.
|
|
51
|
+
*
|
|
52
|
+
* Signal 1 (primary, unchanged): `focusReadOnly === true` -- the explicit audit
|
|
53
|
+
* phase. Discovery-only regardless of shape.
|
|
54
|
+
*
|
|
55
|
+
* Signal 2 (structural, injection #7): an audit-origin, NOT-yet-ratified focus
|
|
56
|
+
* (isAuditPhaseFocus) whose delivery is injection-anchored and issue-less. This
|
|
57
|
+
* degrades gracefully when read_only is absent, WITHOUT forking read_only:
|
|
58
|
+
* - it never contradicts an explicit read_only=true (signal 1 already fired);
|
|
59
|
+
* - `focusRatified` defers to the human execute-phase crossing, so a ratified
|
|
60
|
+
* (read_only=false) audit focus's unscoped remediation deliveries are NOT
|
|
61
|
+
* swept to terminal;
|
|
62
|
+
* - it requires `focusAuditOrigin`, so a NORMAL execution focus's transiently
|
|
63
|
+
* issue-less injection-anchored delivery still holds at the scoping gate.
|
|
64
|
+
*
|
|
65
|
+
* Pure and exported for unit testing.
|
|
66
|
+
*/
|
|
67
|
+
export function isDiscoveryOnlyDelivery(signal) {
|
|
68
|
+
if (!isAuditPhaseFocus({
|
|
69
|
+
readOnly: signal.focusReadOnly,
|
|
70
|
+
auditOrigin: signal.focusAuditOrigin,
|
|
71
|
+
ratified: signal.focusRatified,
|
|
72
|
+
})) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
// read_only===true is discovery-only regardless of delivery shape (signal 1).
|
|
76
|
+
if (signal.focusReadOnly === true)
|
|
77
|
+
return true;
|
|
78
|
+
// Structural signal 2 additionally requires the audit shape on the delivery.
|
|
79
|
+
return signal.injectionAnchored && !signal.hasWorkIssues;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=audit-shape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-shape.js","sourceRoot":"","sources":["../src/audit-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAwCH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAIjC;IACC,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AACvD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAIpC;IACC,OAAO,iBAAiB,CAAC;QACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI;QAClC,WAAW,EAAE,KAAK,CAAC,YAAY,KAAK,IAAI;QACxC,QAAQ,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;KACpC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAA2B;IACjE,IACE,CAAC,iBAAiB,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC,aAAa;QAC9B,WAAW,EAAE,MAAM,CAAC,gBAAgB;QACpC,QAAQ,EAAE,MAAM,CAAC,aAAa;KAC/B,CAAC,EACF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,8EAA8E;IAC9E,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/C,6EAA6E;IAC7E,OAAO,MAAM,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;AAC3D,CAAC"}
|
package/dist/branch-status.js
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Results ride in the heartbeat metadata field (no new tables).
|
|
10
10
|
*/
|
|
11
|
-
import { runGitSync } from './git
|
|
12
|
-
import { getDefaultBranch } from './git
|
|
11
|
+
import { runGitSync } from './git/index.js';
|
|
12
|
+
import { getDefaultBranch } from './git/index.js';
|
|
13
13
|
import { getAllFocusWorktrees } from './focus-worktree-state.js';
|
|
14
14
|
import { getActiveTeams } from './focus-team-state.js';
|
|
15
15
|
/** Short timeout for git commands to avoid blocking the heartbeat. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch-status.js","sourceRoot":"","sources":["../src/branch-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"branch-status.js","sourceRoot":"","sources":["../src/branch-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CI-result sensor loop (Reconnect CI to the loop, TEL-3).
|
|
3
|
+
*
|
|
4
|
+
* A red CI run on integration used to have NO receiver -- it evaporated. This
|
|
5
|
+
* loop makes a failing run SIGNAL: per product, it reads the integration tip's
|
|
6
|
+
* git-native CI status (refs/ci-status/<sha>) via the daemon's existing
|
|
7
|
+
* git-over-SSH channel and, on RED, files exactly one open `ci_run_red`
|
|
8
|
+
* needs_operator escalation carrying the run reference (the failing SHA). When a
|
|
9
|
+
* LATER run on integration goes green, it resolves the open escalation. Pure
|
|
10
|
+
* decision (decideCiSensorAction in ci-status.ts) + injected IO so the loop is
|
|
11
|
+
* unit-testable without a live remote or DB.
|
|
12
|
+
*
|
|
13
|
+
* Registered in LOOP_REGISTRY under the opt-out guard TELORA_CI_SENSOR_LOOP.
|
|
14
|
+
* Consumes the same fail-closed CiStatusReader the green-wait (TEL-2) uses.
|
|
15
|
+
*
|
|
16
|
+
* @module ci-sensor-loop
|
|
17
|
+
*/
|
|
18
|
+
import type { DaemonConfig } from './types.js';
|
|
19
|
+
import { type CiStatusReader } from './ci-status.js';
|
|
20
|
+
/** escalation_kind for a red CI run on integration. */
|
|
21
|
+
export declare const CI_RUN_RED_ESCALATION_KIND = "ci_run_red";
|
|
22
|
+
/** Injected IO for the sensor tick. Defaults reach for the real implementations. */
|
|
23
|
+
export interface CiSensorDeps {
|
|
24
|
+
getCiStatus: CiStatusReader;
|
|
25
|
+
resolveIntegrationTip: (config: DaemonConfig) => string | null;
|
|
26
|
+
hasOpenCiRedEscalation: (productId: string) => Promise<boolean>;
|
|
27
|
+
fileCiRedEscalation: (params: {
|
|
28
|
+
organizationId: string;
|
|
29
|
+
productId: string;
|
|
30
|
+
sha: string;
|
|
31
|
+
branch: string;
|
|
32
|
+
}) => Promise<void>;
|
|
33
|
+
resolveCiRedEscalations: (productId: string) => Promise<number>;
|
|
34
|
+
}
|
|
35
|
+
export interface CiSensorTickCounts {
|
|
36
|
+
productsChecked: number;
|
|
37
|
+
escalationsFiled: number;
|
|
38
|
+
escalationsResolved: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* One CI-result sensor tick over every configured product. Per product: resolve
|
|
42
|
+
* the remote integration tip, read its CI status (fail-closed), and file/resolve
|
|
43
|
+
* the ci_run_red escalation per the pure decision. Best-effort per product -- a
|
|
44
|
+
* failure on one product never aborts the others.
|
|
45
|
+
*/
|
|
46
|
+
export declare function runCiSensorTick(config: DaemonConfig, deps?: CiSensorDeps): Promise<CiSensorTickCounts>;
|
|
47
|
+
//# sourceMappingURL=ci-sensor-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-sensor-loop.d.ts","sourceRoot":"","sources":["../src/ci-sensor-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAuD,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAM1G,uDAAuD;AACvD,eAAO,MAAM,0BAA0B,eAAe,CAAC;AAiEvD,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,cAAc,CAAC;IAC5B,qBAAqB,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,GAAG,IAAI,CAAC;IAC/D,sBAAsB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,mBAAmB,EAAE,CAAC,MAAM,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3H,uBAAuB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACjE;AAUD,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,IAAI,GAAE,YAA0B,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAwB7B"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CI-result sensor loop (Reconnect CI to the loop, TEL-3).
|
|
3
|
+
*
|
|
4
|
+
* A red CI run on integration used to have NO receiver -- it evaporated. This
|
|
5
|
+
* loop makes a failing run SIGNAL: per product, it reads the integration tip's
|
|
6
|
+
* git-native CI status (refs/ci-status/<sha>) via the daemon's existing
|
|
7
|
+
* git-over-SSH channel and, on RED, files exactly one open `ci_run_red`
|
|
8
|
+
* needs_operator escalation carrying the run reference (the failing SHA). When a
|
|
9
|
+
* LATER run on integration goes green, it resolves the open escalation. Pure
|
|
10
|
+
* decision (decideCiSensorAction in ci-status.ts) + injected IO so the loop is
|
|
11
|
+
* unit-testable without a live remote or DB.
|
|
12
|
+
*
|
|
13
|
+
* Registered in LOOP_REGISTRY under the opt-out guard TELORA_CI_SENSOR_LOOP.
|
|
14
|
+
* Consumes the same fail-closed CiStatusReader the green-wait (TEL-2) uses.
|
|
15
|
+
*
|
|
16
|
+
* @module ci-sensor-loop
|
|
17
|
+
*/
|
|
18
|
+
import { configForProduct } from './config.js';
|
|
19
|
+
import { decideCiSensorAction, createGitNativeCiStatusReader } from './ci-status.js';
|
|
20
|
+
import { listCiStatusRefs, resolveRemoteIntegrationTip } from './ci-status-git.js';
|
|
21
|
+
import { createEscalation, markEscalationResolved } from './queries/issues.js';
|
|
22
|
+
import { callApi } from './queries/shared.js';
|
|
23
|
+
import { ESCALATION_REASONS, ESCALATION_DISPOSITIONS } from '@telora/daemon-core';
|
|
24
|
+
/** escalation_kind for a red CI run on integration. */
|
|
25
|
+
export const CI_RUN_RED_ESCALATION_KIND = 'ci_run_red';
|
|
26
|
+
const OPEN_STATUSES = new Set(['pending', 'in_review']);
|
|
27
|
+
function isOpenCiRedForProduct(e, productId) {
|
|
28
|
+
if (e.status && !OPEN_STATUSES.has(e.status))
|
|
29
|
+
return false;
|
|
30
|
+
if (e.escalationKind !== CI_RUN_RED_ESCALATION_KIND)
|
|
31
|
+
return false;
|
|
32
|
+
const meta = e.metadata ?? null;
|
|
33
|
+
return e.productId === productId || meta?.productId === productId;
|
|
34
|
+
}
|
|
35
|
+
async function defaultHasOpenCiRedEscalation(productId) {
|
|
36
|
+
const result = await callApi('escalation_list', {
|
|
37
|
+
fields: { statuses: ['pending', 'in_review'] },
|
|
38
|
+
limit: 500,
|
|
39
|
+
});
|
|
40
|
+
return (result.escalations ?? []).some((e) => isOpenCiRedForProduct(e, productId));
|
|
41
|
+
}
|
|
42
|
+
async function defaultResolveCiRedEscalations(productId) {
|
|
43
|
+
const result = await callApi('escalation_list', {
|
|
44
|
+
fields: { statuses: ['pending', 'in_review'] },
|
|
45
|
+
limit: 500,
|
|
46
|
+
});
|
|
47
|
+
const open = (result.escalations ?? []).filter((e) => isOpenCiRedForProduct(e, productId));
|
|
48
|
+
let resolved = 0;
|
|
49
|
+
for (const e of open) {
|
|
50
|
+
try {
|
|
51
|
+
await markEscalationResolved(e.id, 'Auto-resolved by the daemon: a later CI run on integration went green.');
|
|
52
|
+
resolved++;
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
console.warn(`[ci-sensor] Failed to resolve ci_run_red escalation ${e.id}: ${err.message}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return resolved;
|
|
59
|
+
}
|
|
60
|
+
async function defaultFileCiRedEscalation(params) {
|
|
61
|
+
await createEscalation({
|
|
62
|
+
organizationId: params.organizationId,
|
|
63
|
+
issueId: null,
|
|
64
|
+
reasonType: ESCALATION_REASONS.ERROR_ENCOUNTERED,
|
|
65
|
+
disposition: ESCALATION_DISPOSITIONS.NEEDS_OPERATOR,
|
|
66
|
+
productId: params.productId,
|
|
67
|
+
escalationKind: CI_RUN_RED_ESCALATION_KIND,
|
|
68
|
+
description: `CI is RED on the integration branch (${params.branch}) at ${params.sha.slice(0, 12)}. ` +
|
|
69
|
+
`The clean-environment instrument is failing, so integration->main merges are held ` +
|
|
70
|
+
`(fail-closed green-wait). Run reference: commit ${params.sha}. An operator must fix ` +
|
|
71
|
+
`the failing run; this escalation auto-resolves when a later integration run goes green.`,
|
|
72
|
+
metadata: { sha: params.sha, branch: params.branch, product_id: params.productId },
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
const defaultDeps = {
|
|
76
|
+
getCiStatus: createGitNativeCiStatusReader(listCiStatusRefs),
|
|
77
|
+
resolveIntegrationTip: resolveRemoteIntegrationTip,
|
|
78
|
+
hasOpenCiRedEscalation: defaultHasOpenCiRedEscalation,
|
|
79
|
+
fileCiRedEscalation: defaultFileCiRedEscalation,
|
|
80
|
+
resolveCiRedEscalations: defaultResolveCiRedEscalations,
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* One CI-result sensor tick over every configured product. Per product: resolve
|
|
84
|
+
* the remote integration tip, read its CI status (fail-closed), and file/resolve
|
|
85
|
+
* the ci_run_red escalation per the pure decision. Best-effort per product -- a
|
|
86
|
+
* failure on one product never aborts the others.
|
|
87
|
+
*/
|
|
88
|
+
export async function runCiSensorTick(config, deps = defaultDeps) {
|
|
89
|
+
const counts = { productsChecked: 0, escalationsFiled: 0, escalationsResolved: 0 };
|
|
90
|
+
for (const product of config.products) {
|
|
91
|
+
const pc = configForProduct(config, product);
|
|
92
|
+
try {
|
|
93
|
+
const sha = deps.resolveIntegrationTip(pc);
|
|
94
|
+
if (!sha)
|
|
95
|
+
continue;
|
|
96
|
+
counts.productsChecked++;
|
|
97
|
+
const status = await deps.getCiStatus({ sha, integrationBranch: pc.integrationBranch, config: pc });
|
|
98
|
+
const hasOpen = await deps.hasOpenCiRedEscalation(pc.productId);
|
|
99
|
+
const action = decideCiSensorAction(status, hasOpen);
|
|
100
|
+
if (action === 'file') {
|
|
101
|
+
await deps.fileCiRedEscalation({ organizationId: pc.organizationId, productId: pc.productId, sha, branch: pc.integrationBranch });
|
|
102
|
+
counts.escalationsFiled++;
|
|
103
|
+
console.warn(`[ci-sensor] ci_run_red escalation filed for product ${pc.productId} (integration @ ${sha.slice(0, 12)}).`);
|
|
104
|
+
}
|
|
105
|
+
else if (action === 'resolve') {
|
|
106
|
+
counts.escalationsResolved += await deps.resolveCiRedEscalations(pc.productId);
|
|
107
|
+
console.log(`[ci-sensor] integration green for product ${pc.productId} -- resolved open ci_run_red escalation(s).`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
console.warn(`[ci-sensor] tick failed for product ${product.id}: ${err.message}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return counts;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=ci-sensor-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-sensor-loop.js","sourceRoot":"","sources":["../src/ci-sensor-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,6BAA6B,EAAuB,MAAM,gBAAgB,CAAC;AAC1G,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAElF,uDAAuD;AACvD,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC;AAWvD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;AAExD,SAAS,qBAAqB,CAAC,CAAkB,EAAE,SAAiB;IAClE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,IAAI,CAAC,CAAC,cAAc,KAAK,0BAA0B;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,IAAI,GAAI,CAAC,CAAC,QAA2C,IAAI,IAAI,CAAC;IACpE,OAAO,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,EAAE,SAAS,KAAK,SAAS,CAAC;AACpE,CAAC;AAED,KAAK,UAAU,6BAA6B,CAAC,SAAiB;IAC5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAqC,iBAAiB,EAAE;QAClF,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE;QAC9C,KAAK,EAAE,GAAG;KACX,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,KAAK,UAAU,8BAA8B,CAAC,SAAiB;IAC7D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAqC,iBAAiB,EAAE;QAClF,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE;QAC9C,KAAK,EAAE,GAAG;KACX,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAC3F,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,sBAAsB,CAAC,CAAC,CAAC,EAAE,EAAE,wEAAwE,CAAC,CAAC;YAC7G,QAAQ,EAAE,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,EAAE,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,0BAA0B,CAAC,MAEzC;IACC,MAAM,gBAAgB,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,kBAAkB,CAAC,iBAAiB;QAChD,WAAW,EAAE,uBAAuB,CAAC,cAAc;QACnD,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,cAAc,EAAE,0BAA0B;QAC1C,WAAW,EACT,wCAAwC,MAAM,CAAC,MAAM,QAAQ,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI;YACxF,oFAAoF;YACpF,mDAAmD,MAAM,CAAC,GAAG,yBAAyB;YACtF,yFAAyF;QAC3F,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE;KACnF,CAAC,CAAC;AACL,CAAC;AAWD,MAAM,WAAW,GAAiB;IAChC,WAAW,EAAE,6BAA6B,CAAC,gBAAgB,CAAC;IAC5D,qBAAqB,EAAE,2BAA2B;IAClD,sBAAsB,EAAE,6BAA6B;IACrD,mBAAmB,EAAE,0BAA0B;IAC/C,uBAAuB,EAAE,8BAA8B;CACxD,CAAC;AAQF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,OAAqB,WAAW;IAEhC,MAAM,MAAM,GAAuB,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC;IACvG,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,MAAM,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,EAAE,CAAC,iBAAiB,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YACpG,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,mBAAmB,CAAC,EAAE,cAAc,EAAE,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC;gBAClI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC,uDAAuD,EAAE,CAAC,SAAS,mBAAmB,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAC3H,CAAC;iBAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,CAAC,mBAAmB,IAAI,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC/E,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,CAAC,SAAS,6CAA6C,CAAC,CAAC;YACtH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,uCAAuC,OAAO,CAAC,EAAE,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git-native CI status reader plumbing (Reconnect CI to the loop).
|
|
3
|
+
*
|
|
4
|
+
* The concrete side of the credential-free CI status transport (Jeremy decision
|
|
5
|
+
* 2026-07-05): CI publishes immutable per-SHA refs `refs/ci-status/<sha>/<state>`
|
|
6
|
+
* using the runner's own ephemeral token; the daemon READS them over its existing
|
|
7
|
+
* git-over-SSH channel with a scoped, read-only `git ls-remote` -- no API token,
|
|
8
|
+
* no broad fetch, disjoint from `refs/heads/*` (branch-sync-neutral), writes
|
|
9
|
+
* nothing locally. Fail-closed: any error / absent ref -> 'unknown' -> the merge
|
|
10
|
+
* gate holds.
|
|
11
|
+
*
|
|
12
|
+
* The pure classifier + reader factory live in ci-status.ts; this module holds
|
|
13
|
+
* the git IO and the opt-out knob, so ci-status.ts stays dependency-light and
|
|
14
|
+
* unit-testable.
|
|
15
|
+
*
|
|
16
|
+
* @module ci-status-git
|
|
17
|
+
*/
|
|
18
|
+
import type { DaemonConfig } from './types.js';
|
|
19
|
+
import { type CiStatusReader } from './ci-status.js';
|
|
20
|
+
/** The per-SHA CI status ref namespace. State is encoded in the ref name. */
|
|
21
|
+
export declare const CI_STATUS_REF_PREFIX = "refs/ci-status";
|
|
22
|
+
/**
|
|
23
|
+
* List the published `refs/ci-status/<sha>/<state>` ref names for a SHA on the
|
|
24
|
+
* remote, via a scoped read-only `git ls-remote origin <ref> <ref> <ref>`. Only
|
|
25
|
+
* the three known state refs for this exact SHA are queried -- a disjoint,
|
|
26
|
+
* bounded namespace that can never touch branches. Returns the matched ref names
|
|
27
|
+
* (e.g. `refs/ci-status/<sha>/success`); [] on any git failure (fail-closed).
|
|
28
|
+
*/
|
|
29
|
+
export declare function listCiStatusRefs(sha: string, config: DaemonConfig): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Resolve the REMOTE integration branch tip SHA via a scoped read-only
|
|
32
|
+
* `git ls-remote origin refs/heads/<integrationBranch>`. This is the SHA CI last
|
|
33
|
+
* ran against on integration -- what the CI-result sensor checks. Returns null on
|
|
34
|
+
* any git failure or when the ref is absent (the sensor then does nothing).
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolveRemoteIntegrationTip(config: DaemonConfig): string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Whether the CI green-wait is engaged. Opt-OUT (default ON): the canonical
|
|
39
|
+
* declaration lives in daemon-core env-config.ts (TELORA_CI_MERGE_WAIT); read
|
|
40
|
+
* here directly from process.env (same registry-published-daemon-core reason as
|
|
41
|
+
* stall-detector-config.ts). '0' disables; unset/'' /anything else -> enabled.
|
|
42
|
+
* Off => the merge gate is skipped entirely (pre-reconnection behavior), which is
|
|
43
|
+
* the safe fallback if the CI ref-publish step is not yet deployed.
|
|
44
|
+
*/
|
|
45
|
+
export declare function ciMergeWaitEnabled(env?: NodeJS.ProcessEnv): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Resolve the CI status reader to inject into the integration->main merge gate:
|
|
48
|
+
* the git-native reader when the green-wait is enabled, else undefined (gate
|
|
49
|
+
* skipped -> merge proceeds as before). The reader is fail-closed by construction.
|
|
50
|
+
*/
|
|
51
|
+
export declare function resolveCiStatusReader(env?: NodeJS.ProcessEnv): CiStatusReader | undefined;
|
|
52
|
+
//# sourceMappingURL=ci-status-git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-status-git.d.ts","sourceRoot":"","sources":["../src/ci-status-git.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AAExB,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAKrD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAc5E;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAS/E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEhF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,cAAc,GAAG,SAAS,CAGtG"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git-native CI status reader plumbing (Reconnect CI to the loop).
|
|
3
|
+
*
|
|
4
|
+
* The concrete side of the credential-free CI status transport (Jeremy decision
|
|
5
|
+
* 2026-07-05): CI publishes immutable per-SHA refs `refs/ci-status/<sha>/<state>`
|
|
6
|
+
* using the runner's own ephemeral token; the daemon READS them over its existing
|
|
7
|
+
* git-over-SSH channel with a scoped, read-only `git ls-remote` -- no API token,
|
|
8
|
+
* no broad fetch, disjoint from `refs/heads/*` (branch-sync-neutral), writes
|
|
9
|
+
* nothing locally. Fail-closed: any error / absent ref -> 'unknown' -> the merge
|
|
10
|
+
* gate holds.
|
|
11
|
+
*
|
|
12
|
+
* The pure classifier + reader factory live in ci-status.ts; this module holds
|
|
13
|
+
* the git IO and the opt-out knob, so ci-status.ts stays dependency-light and
|
|
14
|
+
* unit-testable.
|
|
15
|
+
*
|
|
16
|
+
* @module ci-status-git
|
|
17
|
+
*/
|
|
18
|
+
import { runGitSync } from './git.js';
|
|
19
|
+
import { createGitNativeCiStatusReader, } from './ci-status.js';
|
|
20
|
+
/** The per-SHA CI status ref namespace. State is encoded in the ref name. */
|
|
21
|
+
export const CI_STATUS_REF_PREFIX = 'refs/ci-status';
|
|
22
|
+
/** The recognized states CI publishes (one immutable ref per completed run). */
|
|
23
|
+
const CI_STATUS_STATES = ['success', 'failure', 'pending'];
|
|
24
|
+
/**
|
|
25
|
+
* List the published `refs/ci-status/<sha>/<state>` ref names for a SHA on the
|
|
26
|
+
* remote, via a scoped read-only `git ls-remote origin <ref> <ref> <ref>`. Only
|
|
27
|
+
* the three known state refs for this exact SHA are queried -- a disjoint,
|
|
28
|
+
* bounded namespace that can never touch branches. Returns the matched ref names
|
|
29
|
+
* (e.g. `refs/ci-status/<sha>/success`); [] on any git failure (fail-closed).
|
|
30
|
+
*/
|
|
31
|
+
export function listCiStatusRefs(sha, config) {
|
|
32
|
+
const refs = CI_STATUS_STATES.map(s => `${CI_STATUS_REF_PREFIX}/${sha}/${s}`);
|
|
33
|
+
const result = runGitSync(['ls-remote', 'origin', ...refs], config.repoPath);
|
|
34
|
+
if (!result.output)
|
|
35
|
+
return [];
|
|
36
|
+
// ls-remote lines: "<objectsha>\t<refname>". Extract the ref names.
|
|
37
|
+
return result.output
|
|
38
|
+
.split('\n')
|
|
39
|
+
.map(line => line.trim())
|
|
40
|
+
.filter(Boolean)
|
|
41
|
+
.map(line => {
|
|
42
|
+
const tab = line.indexOf('\t');
|
|
43
|
+
return tab === -1 ? '' : line.slice(tab + 1).trim();
|
|
44
|
+
})
|
|
45
|
+
.filter(ref => ref.startsWith(`${CI_STATUS_REF_PREFIX}/${sha}/`));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Resolve the REMOTE integration branch tip SHA via a scoped read-only
|
|
49
|
+
* `git ls-remote origin refs/heads/<integrationBranch>`. This is the SHA CI last
|
|
50
|
+
* ran against on integration -- what the CI-result sensor checks. Returns null on
|
|
51
|
+
* any git failure or when the ref is absent (the sensor then does nothing).
|
|
52
|
+
*/
|
|
53
|
+
export function resolveRemoteIntegrationTip(config) {
|
|
54
|
+
const ref = `refs/heads/${config.integrationBranch}`;
|
|
55
|
+
const result = runGitSync(['ls-remote', 'origin', ref], config.repoPath);
|
|
56
|
+
if (!result.output)
|
|
57
|
+
return null;
|
|
58
|
+
const firstLine = result.output.split('\n').map(l => l.trim()).filter(Boolean)[0];
|
|
59
|
+
if (!firstLine)
|
|
60
|
+
return null;
|
|
61
|
+
const tab = firstLine.indexOf('\t');
|
|
62
|
+
const sha = tab === -1 ? '' : firstLine.slice(0, tab).trim();
|
|
63
|
+
return /^[0-9a-f]{7,40}$/.test(sha) ? sha : null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Whether the CI green-wait is engaged. Opt-OUT (default ON): the canonical
|
|
67
|
+
* declaration lives in daemon-core env-config.ts (TELORA_CI_MERGE_WAIT); read
|
|
68
|
+
* here directly from process.env (same registry-published-daemon-core reason as
|
|
69
|
+
* stall-detector-config.ts). '0' disables; unset/'' /anything else -> enabled.
|
|
70
|
+
* Off => the merge gate is skipped entirely (pre-reconnection behavior), which is
|
|
71
|
+
* the safe fallback if the CI ref-publish step is not yet deployed.
|
|
72
|
+
*/
|
|
73
|
+
export function ciMergeWaitEnabled(env = process.env) {
|
|
74
|
+
return env.TELORA_CI_MERGE_WAIT !== '0';
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Resolve the CI status reader to inject into the integration->main merge gate:
|
|
78
|
+
* the git-native reader when the green-wait is enabled, else undefined (gate
|
|
79
|
+
* skipped -> merge proceeds as before). The reader is fail-closed by construction.
|
|
80
|
+
*/
|
|
81
|
+
export function resolveCiStatusReader(env = process.env) {
|
|
82
|
+
if (!ciMergeWaitEnabled(env))
|
|
83
|
+
return undefined;
|
|
84
|
+
return createGitNativeCiStatusReader(listCiStatusRefs);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=ci-status-git.js.map
|