@telora/daemon 0.19.47 → 0.19.82
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-info.json +8 -3
- package/dist/assembly-engine.d.ts +9 -0
- package/dist/assembly-engine.d.ts.map +1 -1
- package/dist/assembly-engine.js.map +1 -1
- package/dist/audit-hooks.js +1 -1
- package/dist/branch-status.js +2 -2
- package/dist/branch-status.js.map +1 -1
- package/dist/ci-sensor-loop.d.ts +47 -0
- package/dist/ci-sensor-loop.d.ts.map +1 -0
- package/dist/ci-sensor-loop.js +116 -0
- package/dist/ci-sensor-loop.js.map +1 -0
- package/dist/ci-status-git.d.ts +52 -0
- package/dist/ci-status-git.d.ts.map +1 -0
- package/dist/ci-status-git.js +86 -0
- package/dist/ci-status-git.js.map +1 -0
- package/dist/ci-status.d.ts +122 -0
- package/dist/ci-status.d.ts.map +1 -0
- package/dist/ci-status.js +114 -0
- package/dist/ci-status.js.map +1 -0
- package/dist/cli/connect/agents.d.ts +24 -0
- package/dist/cli/connect/agents.d.ts.map +1 -0
- package/dist/cli/connect/agents.js +65 -0
- package/dist/cli/connect/agents.js.map +1 -0
- package/dist/cli/connect/claude.d.ts +31 -0
- package/dist/cli/connect/claude.d.ts.map +1 -0
- package/dist/cli/connect/claude.js +104 -0
- package/dist/cli/connect/claude.js.map +1 -0
- package/dist/cli/connect/cline.d.ts +37 -0
- package/dist/cli/connect/cline.d.ts.map +1 -0
- package/dist/cli/connect/cline.js +115 -0
- package/dist/cli/connect/cline.js.map +1 -0
- package/dist/cli/connect/codex.d.ts +44 -0
- package/dist/cli/connect/codex.d.ts.map +1 -0
- package/dist/cli/connect/codex.js +111 -0
- package/dist/cli/connect/codex.js.map +1 -0
- package/dist/cli/connect/ide.d.ts +69 -0
- package/dist/cli/connect/ide.d.ts.map +1 -0
- package/dist/cli/connect/ide.js +134 -0
- package/dist/cli/connect/ide.js.map +1 -0
- package/dist/cli/connect/scaffolding.d.ts +31 -0
- package/dist/cli/connect/scaffolding.d.ts.map +1 -0
- package/dist/cli/connect/scaffolding.js +52 -0
- package/dist/cli/connect/scaffolding.js.map +1 -0
- package/dist/cli/connect/shared.d.ts +30 -0
- package/dist/cli/connect/shared.d.ts.map +1 -0
- package/dist/cli/connect/shared.js +11 -0
- package/dist/cli/connect/shared.js.map +1 -0
- package/dist/cli/connect.d.ts +9 -210
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +10 -526
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/open.js +2 -2
- package/dist/completion/event.d.ts +2 -0
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +19 -2
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/merge-phase.d.ts +3 -0
- package/dist/completion/merge-phase.d.ts.map +1 -1
- package/dist/completion/merge-phase.js +35 -3
- package/dist/completion/merge-phase.js.map +1 -1
- package/dist/completion/read-only-pristine.d.ts +1 -1
- package/dist/completion/read-only-pristine.d.ts.map +1 -1
- package/dist/completion/read-only-pristine.js +1 -1
- package/dist/completion/read-only-pristine.js.map +1 -1
- package/dist/completion/review-exit-phase.d.ts +30 -3
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +203 -15
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/status-advance-phase.js +1 -1
- package/dist/completion/status-advance-phase.js.map +1 -1
- package/dist/completion/team-completion.d.ts.map +1 -1
- package/dist/completion/team-completion.js +22 -2
- package/dist/completion/team-completion.js.map +1 -1
- package/dist/completion/team-lifecycle.js +1 -1
- package/dist/completion/terminated-work-reconcile.js +1 -1
- package/dist/completion/terminated-work-reconcile.js.map +1 -1
- package/dist/condition-evaluators.d.ts +41 -2
- package/dist/condition-evaluators.d.ts.map +1 -1
- package/dist/condition-evaluators.js +37 -288
- package/dist/condition-evaluators.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -1
- package/dist/context-audit.d.ts +1 -1
- package/dist/context-audit.d.ts.map +1 -1
- package/dist/context-lock.d.ts +1 -1
- package/dist/context-lock.d.ts.map +1 -1
- package/dist/control-state.d.ts +2 -2
- package/dist/control-state.d.ts.map +1 -1
- package/dist/control-state.js +4 -3
- package/dist/control-state.js.map +1 -1
- package/dist/daemon-process.d.ts +1 -1
- package/dist/daemon-process.d.ts.map +1 -1
- package/dist/delivery-advance-block.d.ts +1 -1
- package/dist/delivery-advance-block.d.ts.map +1 -1
- package/dist/delivery-advance-block.js +1 -1
- package/dist/delivery-advance-block.js.map +1 -1
- package/dist/delivery-lifecycle.js +1 -1
- package/dist/delivery-reconciler-shadow.d.ts +1 -1
- package/dist/delivery-reconciler-shadow.d.ts.map +1 -1
- package/dist/delivery-reconciler-shadow.js +1 -1
- package/dist/delivery-reconciler-shadow.js.map +1 -1
- package/dist/directive-executor.js +1 -1
- package/dist/directive-executor.js.map +1 -1
- package/dist/drift-eval-loop.d.ts.map +1 -1
- package/dist/drift-eval-loop.js +6 -14
- package/dist/drift-eval-loop.js.map +1 -1
- package/dist/escalations.d.ts +1 -1
- package/dist/escalations.d.ts.map +1 -1
- package/dist/escalations.js +1 -1
- package/dist/escalations.js.map +1 -1
- package/dist/evaluation-context.d.ts +2 -33
- package/dist/evaluation-context.d.ts.map +1 -1
- package/dist/evaluation-context.js +2 -56
- package/dist/evaluation-context.js.map +1 -1
- package/dist/focus-engine.d.ts +14 -5
- package/dist/focus-engine.d.ts.map +1 -1
- package/dist/focus-engine.js +35 -289
- package/dist/focus-engine.js.map +1 -1
- package/dist/focus-executor.d.ts +10 -791
- package/dist/focus-executor.d.ts.map +1 -1
- package/dist/focus-executor.js +81 -1572
- package/dist/focus-executor.js.map +1 -1
- package/dist/focus-lifecycle.js +2 -2
- package/dist/focus-lifecycle.js.map +1 -1
- package/dist/focus-loop-registry.d.ts +52 -0
- package/dist/focus-loop-registry.d.ts.map +1 -0
- package/dist/focus-loop-registry.js +328 -0
- package/dist/focus-loop-registry.js.map +1 -0
- package/dist/focus-merge.d.ts +1 -1
- package/dist/focus-merge.d.ts.map +1 -1
- package/dist/focus-merge.js +6 -6
- package/dist/focus-merge.js.map +1 -1
- package/dist/focus-phase.d.ts +4 -0
- package/dist/focus-phase.d.ts.map +1 -1
- package/dist/focus-phase.js +3 -3
- package/dist/focus-phase.js.map +1 -1
- package/dist/focus-prompt-builder.d.ts.map +1 -1
- package/dist/focus-prompt-builder.js +4 -1
- package/dist/focus-prompt-builder.js.map +1 -1
- package/dist/focus-stage-lifecycle/planning-release.d.ts +197 -0
- package/dist/focus-stage-lifecycle/planning-release.d.ts.map +1 -0
- package/dist/focus-stage-lifecycle/planning-release.js +312 -0
- package/dist/focus-stage-lifecycle/planning-release.js.map +1 -0
- package/dist/focus-stage-lifecycle/review-convergence.d.ts +133 -0
- package/dist/focus-stage-lifecycle/review-convergence.d.ts.map +1 -0
- package/dist/focus-stage-lifecycle/review-convergence.js +235 -0
- package/dist/focus-stage-lifecycle/review-convergence.js.map +1 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts +133 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.js +365 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -0
- package/dist/focus-stage-lifecycle.d.ts +22 -421
- package/dist/focus-stage-lifecycle.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle.js +24 -832
- package/dist/focus-stage-lifecycle.js.map +1 -1
- package/dist/{git-activity.d.ts → git/activity.d.ts} +1 -1
- package/dist/git/activity.d.ts.map +1 -0
- package/dist/{git-activity.js → git/activity.js} +2 -2
- package/dist/git/activity.js.map +1 -0
- package/dist/{git-branch.d.ts → git/branch.d.ts} +2 -2
- package/dist/git/branch.d.ts.map +1 -0
- package/dist/{git-branch.js → git/branch.js} +2 -2
- package/dist/git/branch.js.map +1 -0
- package/dist/{git-fetch.d.ts → git/fetch.d.ts} +2 -2
- package/dist/git/fetch.d.ts.map +1 -0
- package/dist/{git-fetch.js → git/fetch.js} +1 -1
- package/dist/git/fetch.js.map +1 -0
- package/dist/{git-genesis.d.ts → git/genesis.d.ts} +3 -3
- package/dist/git/genesis.d.ts.map +1 -0
- package/dist/{git-genesis.js → git/genesis.js} +5 -5
- package/dist/git/genesis.js.map +1 -0
- package/dist/git/index.d.ts +36 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +36 -0
- package/dist/git/index.js.map +1 -0
- package/dist/{git-integration.d.ts → git/integration.d.ts} +2 -2
- package/dist/git/integration.d.ts.map +1 -0
- package/dist/{git-integration.js → git/integration.js} +4 -4
- package/dist/git/integration.js.map +1 -0
- package/dist/{git-merge-helpers.d.ts → git/merge-helpers.d.ts} +3 -3
- package/dist/git/merge-helpers.d.ts.map +1 -0
- package/dist/{git-merge-helpers.js → git/merge-helpers.js} +3 -3
- package/dist/git/merge-helpers.js.map +1 -0
- package/dist/{git-merge-lock.d.ts → git/merge-lock.d.ts} +1 -1
- package/dist/git/merge-lock.d.ts.map +1 -0
- package/dist/{git-merge-lock.js → git/merge-lock.js} +1 -1
- package/dist/git/merge-lock.js.map +1 -0
- package/dist/{git-merge-strategies.d.ts → git/merge-strategies.d.ts} +2 -2
- package/dist/git/merge-strategies.d.ts.map +1 -0
- package/dist/{git-merge-strategies.js → git/merge-strategies.js} +3 -3
- package/dist/git/merge-strategies.js.map +1 -0
- package/dist/{git-merge.d.ts → git/merge.d.ts} +4 -4
- package/dist/git/merge.d.ts.map +1 -0
- package/dist/{git-merge.js → git/merge.js} +4 -4
- package/dist/git/merge.js.map +1 -0
- package/dist/{git-state-detector.d.ts → git/state-detector.d.ts} +2 -2
- package/dist/git/state-detector.d.ts.map +1 -0
- package/dist/{git-state-detector.js → git/state-detector.js} +7 -7
- package/dist/git/state-detector.js.map +1 -0
- package/dist/{git-types.d.ts → git/types.d.ts} +2 -2
- package/dist/git/types.d.ts.map +1 -0
- package/dist/{git-types.js → git/types.js} +1 -1
- package/dist/git/types.js.map +1 -0
- package/dist/{git-utils.d.ts → git/utils.d.ts} +1 -1
- package/dist/git/utils.d.ts.map +1 -0
- package/dist/{git-utils.js → git/utils.js} +2 -2
- package/dist/git/utils.js.map +1 -0
- package/dist/git.d.ts +5 -5
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +10 -10
- package/dist/git.js.map +1 -1
- package/dist/guard-engine.d.ts +3 -2
- package/dist/guard-engine.d.ts.map +1 -1
- package/dist/guard-engine.js +2 -2
- package/dist/guard-engine.js.map +1 -1
- package/dist/install-probe-tick.d.ts +63 -0
- package/dist/install-probe-tick.d.ts.map +1 -0
- package/dist/install-probe-tick.js +137 -0
- package/dist/install-probe-tick.js.map +1 -0
- package/dist/install-probe.d.ts +115 -0
- package/dist/install-probe.d.ts.map +1 -0
- package/dist/install-probe.js +197 -0
- package/dist/install-probe.js.map +1 -0
- package/dist/listener-auto-advance.d.ts.map +1 -1
- package/dist/listener-auto-advance.js +31 -0
- package/dist/listener-auto-advance.js.map +1 -1
- package/dist/listener.js +5 -5
- package/dist/listener.js.map +1 -1
- package/dist/{loop-context-audit-pass.d.ts → loops/context-audit-pass.d.ts} +4 -4
- package/dist/loops/context-audit-pass.d.ts.map +1 -0
- package/dist/{loop-context-audit-pass.js → loops/context-audit-pass.js} +7 -7
- package/dist/loops/context-audit-pass.js.map +1 -0
- package/dist/{loop-engine-types.d.ts → loops/engine-types.d.ts} +1 -1
- package/dist/loops/engine-types.d.ts.map +1 -0
- package/dist/{loop-engine-types.js → loops/engine-types.js} +1 -1
- package/dist/loops/engine-types.js.map +1 -0
- package/dist/{loop-engine.d.ts → loops/engine.d.ts} +6 -6
- package/dist/loops/engine.d.ts.map +1 -0
- package/dist/{loop-engine.js → loops/engine.js} +13 -13
- package/dist/loops/engine.js.map +1 -0
- package/dist/{loop-event-bus.d.ts → loops/event-bus.d.ts} +1 -1
- package/dist/loops/event-bus.d.ts.map +1 -0
- package/dist/{loop-event-bus.js → loops/event-bus.js} +1 -1
- package/dist/loops/event-bus.js.map +1 -0
- package/dist/loops/index.d.ts +33 -0
- package/dist/loops/index.d.ts.map +1 -0
- package/dist/loops/index.js +32 -0
- package/dist/loops/index.js.map +1 -0
- package/dist/{loop-llm-client.d.ts → loops/llm-client.d.ts} +3 -3
- package/dist/loops/llm-client.d.ts.map +1 -0
- package/dist/{loop-llm-client.js → loops/llm-client.js} +3 -3
- package/dist/loops/llm-client.js.map +1 -0
- package/dist/{loop-llm-flag.d.ts → loops/llm-flag.d.ts} +1 -1
- package/dist/loops/llm-flag.d.ts.map +1 -0
- package/dist/{loop-llm-flag.js → loops/llm-flag.js} +1 -1
- package/dist/loops/llm-flag.js.map +1 -0
- package/dist/{loop-operational-block.d.ts → loops/operational-block.d.ts} +1 -1
- package/dist/loops/operational-block.d.ts.map +1 -0
- package/dist/{loop-operational-block.js → loops/operational-block.js} +1 -1
- package/dist/loops/operational-block.js.map +1 -0
- package/dist/{loop-prompt-builder.d.ts → loops/prompt-builder.d.ts} +2 -2
- package/dist/loops/prompt-builder.d.ts.map +1 -0
- package/dist/{loop-prompt-builder.js → loops/prompt-builder.js} +1 -1
- package/dist/loops/prompt-builder.js.map +1 -0
- package/dist/{loop-variance.d.ts → loops/variance.d.ts} +1 -1
- package/dist/loops/variance.d.ts.map +1 -0
- package/dist/{loop-variance.js → loops/variance.js} +1 -1
- package/dist/loops/variance.js.map +1 -0
- package/dist/merge-back-loop.d.ts.map +1 -1
- package/dist/merge-back-loop.js +4 -3
- package/dist/merge-back-loop.js.map +1 -1
- package/dist/merge-detector.js +2 -2
- package/dist/merge-detector.js.map +1 -1
- package/dist/{nexus-endpoint-clearance.d.ts → nexus/endpoint-clearance.d.ts} +2 -2
- package/dist/nexus/endpoint-clearance.d.ts.map +1 -0
- package/dist/{nexus-endpoint-clearance.js → nexus/endpoint-clearance.js} +2 -2
- package/dist/nexus/endpoint-clearance.js.map +1 -0
- package/dist/{nexus-escalation-bridge.d.ts → nexus/escalation-bridge.d.ts} +1 -1
- package/dist/nexus/escalation-bridge.d.ts.map +1 -0
- package/dist/{nexus-escalation-bridge.js → nexus/escalation-bridge.js} +2 -2
- package/dist/nexus/escalation-bridge.js.map +1 -0
- package/dist/{nexus-incoming.d.ts → nexus/incoming.d.ts} +2 -2
- package/dist/nexus/incoming.d.ts.map +1 -0
- package/dist/{nexus-incoming.js → nexus/incoming.js} +2 -2
- package/dist/nexus/incoming.js.map +1 -0
- package/dist/nexus/index.d.ts +20 -0
- package/dist/nexus/index.d.ts.map +1 -0
- package/dist/nexus/index.js +20 -0
- package/dist/nexus/index.js.map +1 -0
- package/dist/{nexus-intake-spawn.d.ts → nexus/intake-spawn.d.ts} +3 -3
- package/dist/nexus/intake-spawn.d.ts.map +1 -0
- package/dist/{nexus-intake-spawn.js → nexus/intake-spawn.js} +1 -1
- package/dist/nexus/intake-spawn.js.map +1 -0
- package/dist/{nexus-intake.d.ts → nexus/intake.d.ts} +2 -2
- package/dist/nexus/intake.d.ts.map +1 -0
- package/dist/{nexus-intake.js → nexus/intake.js} +4 -4
- package/dist/nexus/intake.js.map +1 -0
- package/dist/{nexus-return.d.ts → nexus/return.d.ts} +3 -3
- package/dist/nexus/return.d.ts.map +1 -0
- package/dist/{nexus-return.js → nexus/return.js} +4 -4
- package/dist/nexus/return.js.map +1 -0
- package/dist/otlp/index.d.ts +19 -0
- package/dist/otlp/index.d.ts.map +1 -0
- package/dist/otlp/index.js +19 -0
- package/dist/otlp/index.js.map +1 -0
- package/dist/{otlp-log-parser.d.ts → otlp/log-parser.d.ts} +2 -2
- package/dist/otlp/log-parser.d.ts.map +1 -0
- package/dist/{otlp-log-parser.js → otlp/log-parser.js} +5 -6
- package/dist/otlp/log-parser.js.map +1 -0
- package/dist/{otlp-metric-parser.d.ts → otlp/metric-parser.d.ts} +2 -2
- package/dist/otlp/metric-parser.d.ts.map +1 -0
- package/dist/{otlp-metric-parser.js → otlp/metric-parser.js} +4 -5
- package/dist/otlp/metric-parser.js.map +1 -0
- package/dist/{otlp-port-manager.d.ts → otlp/port-manager.d.ts} +1 -1
- package/dist/otlp/port-manager.d.ts.map +1 -0
- package/dist/{otlp-port-manager.js → otlp/port-manager.js} +1 -1
- package/dist/otlp/port-manager.js.map +1 -0
- package/dist/{otlp-receiver.d.ts → otlp/receiver.d.ts} +2 -2
- package/dist/otlp/receiver.d.ts.map +1 -0
- package/dist/{otlp-receiver.js → otlp/receiver.js} +5 -33
- package/dist/otlp/receiver.js.map +1 -0
- package/dist/{otlp-types.d.ts → otlp/types.d.ts} +1 -9
- package/dist/otlp/types.d.ts.map +1 -0
- package/dist/{otlp-types.js → otlp/types.js} +1 -27
- package/dist/otlp/types.js.map +1 -0
- package/dist/pipeline-config.d.ts +1 -1
- package/dist/{prd-controller.d.ts → prd/controller.d.ts} +7 -7
- package/dist/prd/controller.d.ts.map +1 -0
- package/dist/{prd-controller.js → prd/controller.js} +11 -11
- package/dist/prd/controller.js.map +1 -0
- package/dist/{prd-divergence.d.ts → prd/divergence.d.ts} +2 -2
- package/dist/prd/divergence.d.ts.map +1 -0
- package/dist/{prd-divergence.js → prd/divergence.js} +1 -1
- package/dist/prd/divergence.js.map +1 -0
- package/dist/{prd-focus-pushdown.d.ts → prd/focus-pushdown.d.ts} +2 -2
- package/dist/prd/focus-pushdown.d.ts.map +1 -0
- package/dist/{prd-focus-pushdown.js → prd/focus-pushdown.js} +3 -3
- package/dist/prd/focus-pushdown.js.map +1 -0
- package/dist/{prd-frontier.d.ts → prd/frontier.d.ts} +2 -2
- package/dist/prd/frontier.d.ts.map +1 -0
- package/dist/{prd-frontier.js → prd/frontier.js} +1 -1
- package/dist/prd/frontier.js.map +1 -0
- package/dist/prd/index.d.ts +26 -0
- package/dist/prd/index.d.ts.map +1 -0
- package/dist/prd/index.js +25 -0
- package/dist/prd/index.js.map +1 -0
- package/dist/{prd-steward.d.ts → prd/steward.d.ts} +4 -4
- package/dist/prd/steward.d.ts.map +1 -0
- package/dist/{prd-steward.js → prd/steward.js} +4 -4
- package/dist/prd/steward.js.map +1 -0
- package/dist/{prd-viability.d.ts → prd/viability.d.ts} +2 -2
- package/dist/prd/viability.d.ts.map +1 -0
- package/dist/{prd-viability.js → prd/viability.js} +1 -1
- package/dist/prd/viability.js.map +1 -0
- package/dist/product-scaffold.js +2 -2
- package/dist/product-scaffold.js.map +1 -1
- package/dist/prompt-contradictions.d.ts +55 -0
- package/dist/prompt-contradictions.d.ts.map +1 -0
- package/dist/prompt-contradictions.js +114 -0
- package/dist/prompt-contradictions.js.map +1 -0
- package/dist/prompt-listing.d.ts +19 -0
- package/dist/prompt-listing.d.ts.map +1 -1
- package/dist/prompt-listing.js +49 -0
- package/dist/prompt-listing.js.map +1 -1
- package/dist/prompt-sections/execution-sections.d.ts +3 -2
- package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
- package/dist/prompt-sections/execution-sections.js +70 -97
- package/dist/prompt-sections/execution-sections.js.map +1 -1
- package/dist/prompt-sections/persona-sections.d.ts +12 -0
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +29 -2
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/prompt-sections/role-sections.js +2 -2
- package/dist/prompt-sections/role-sections.js.map +1 -1
- package/dist/queries/context-assembly.d.ts +14 -4
- package/dist/queries/context-assembly.d.ts.map +1 -1
- package/dist/queries/context-assembly.js +14 -4
- package/dist/queries/context-assembly.js.map +1 -1
- package/dist/queries/context-lock-queries.js +1 -1
- package/dist/queries/context-lock-queries.js.map +1 -1
- package/dist/queries/deliveries.d.ts +45 -0
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +2 -0
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/focuses.d.ts +17 -7
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +27 -9
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/index.d.ts +1 -1
- package/dist/queries/index.d.ts.map +1 -1
- package/dist/queries/index.js +1 -1
- package/dist/queries/index.js.map +1 -1
- package/dist/queries/schemas.d.ts +4 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +8 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/reality-pole.js +1 -1
- package/dist/resolvers/escalation-answers.d.ts +40 -0
- package/dist/resolvers/escalation-answers.d.ts.map +1 -1
- package/dist/resolvers/escalation-answers.js +54 -35
- package/dist/resolvers/escalation-answers.js.map +1 -1
- package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
- package/dist/resolvers/git-diff-against-base.js +4 -1
- package/dist/resolvers/git-diff-against-base.js.map +1 -1
- package/dist/resolvers/prd-context.js +1 -1
- package/dist/resolvers/shared/wiki.d.ts +27 -0
- package/dist/resolvers/shared/wiki.d.ts.map +1 -1
- package/dist/resolvers/shared/wiki.js +39 -0
- package/dist/resolvers/shared/wiki.js.map +1 -1
- package/dist/sensor-sweep.js +1 -1
- package/dist/spawn/delivered-manifest.d.ts +42 -0
- package/dist/spawn/delivered-manifest.d.ts.map +1 -0
- package/dist/spawn/delivered-manifest.js +64 -0
- package/dist/spawn/delivered-manifest.js.map +1 -0
- package/dist/spawn/model-routing.d.ts +277 -0
- package/dist/spawn/model-routing.d.ts.map +1 -0
- package/dist/spawn/model-routing.js +464 -0
- package/dist/spawn/model-routing.js.map +1 -0
- package/dist/spawn/process-spawn.d.ts +137 -0
- package/dist/spawn/process-spawn.d.ts.map +1 -0
- package/dist/spawn/process-spawn.js +385 -0
- package/dist/spawn/process-spawn.js.map +1 -0
- package/dist/spawn/prompt-assembly.d.ts +170 -0
- package/dist/spawn/prompt-assembly.d.ts.map +1 -0
- package/dist/spawn/prompt-assembly.js +272 -0
- package/dist/spawn/prompt-assembly.js.map +1 -0
- package/dist/spawn/shared.d.ts +96 -0
- package/dist/spawn/shared.d.ts.map +1 -0
- package/dist/spawn/shared.js +14 -0
- package/dist/spawn/shared.js.map +1 -0
- package/dist/spawn/spawn-decision.d.ts +239 -0
- package/dist/spawn/spawn-decision.d.ts.map +1 -0
- package/dist/spawn/spawn-decision.js +437 -0
- package/dist/spawn/spawn-decision.js.map +1 -0
- package/dist/spawn/worktree-session.d.ts +105 -0
- package/dist/spawn/worktree-session.d.ts.map +1 -0
- package/dist/spawn/worktree-session.js +216 -0
- package/dist/spawn/worktree-session.js.map +1 -0
- package/dist/spawner/lifecycle.js +5 -5
- package/dist/spawner/lifecycle.js.map +1 -1
- package/dist/spawner/resolution.js +4 -4
- package/dist/spawner/resolution.js.map +1 -1
- package/dist/stall-detector-config.d.ts +4 -0
- package/dist/stall-detector-config.d.ts.map +1 -1
- package/dist/stall-detector-config.js +6 -0
- package/dist/stall-detector-config.js.map +1 -1
- package/dist/state-cascade.js +1 -1
- package/dist/state-cascade.js.map +1 -1
- package/dist/trigger-executor.d.ts +5 -9
- package/dist/trigger-executor.d.ts.map +1 -1
- package/dist/trigger-executor.js +14 -36
- package/dist/trigger-executor.js.map +1 -1
- package/dist/types/config.d.ts +44 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/focus.d.ts +13 -0
- package/dist/types/focus.d.ts.map +1 -1
- package/dist/types/workflow.d.ts +1 -3
- package/dist/types/workflow.d.ts.map +1 -1
- package/dist/unified-engine-lifecycle.js +1 -1
- package/dist/unified-init.d.ts +3 -3
- package/dist/unified-init.d.ts.map +1 -1
- package/dist/unified-init.js +9 -25
- package/dist/unified-init.js.map +1 -1
- package/dist/unified-shell.d.ts +3 -3
- package/dist/unified-shell.js +4 -4
- package/dist/unified-shell.js.map +1 -1
- package/dist/verification-baseline.d.ts +112 -0
- package/dist/verification-baseline.d.ts.map +1 -0
- package/dist/verification-baseline.js +264 -0
- package/dist/verification-baseline.js.map +1 -0
- package/dist/verification-config.d.ts +53 -0
- package/dist/verification-config.d.ts.map +1 -0
- package/dist/verification-config.js +72 -0
- package/dist/verification-config.js.map +1 -0
- package/dist/verification-default-on.d.ts +87 -0
- package/dist/verification-default-on.d.ts.map +1 -0
- package/dist/verification-default-on.js +186 -0
- package/dist/verification-default-on.js.map +1 -0
- package/dist/verification-deterministic.d.ts +56 -0
- package/dist/verification-deterministic.d.ts.map +1 -0
- package/dist/verification-deterministic.js +123 -0
- package/dist/verification-deterministic.js.map +1 -0
- package/dist/verification-engine.d.ts +22 -15
- package/dist/verification-engine.d.ts.map +1 -1
- package/dist/verification-engine.js +94 -65
- package/dist/verification-engine.js.map +1 -1
- package/dist/verification-failure-parser.d.ts +48 -0
- package/dist/verification-failure-parser.d.ts.map +1 -0
- package/dist/verification-failure-parser.js +102 -0
- package/dist/verification-failure-parser.js.map +1 -0
- package/dist/verification-feedback.d.ts +58 -0
- package/dist/verification-feedback.d.ts.map +1 -0
- package/dist/verification-feedback.js +110 -0
- package/dist/verification-feedback.js.map +1 -0
- package/dist/{worktree-focus.d.ts → worktree/focus.d.ts} +2 -2
- package/dist/worktree/focus.d.ts.map +1 -0
- package/dist/{worktree-focus.js → worktree/focus.js} +7 -7
- package/dist/worktree/focus.js.map +1 -0
- package/dist/worktree/index.d.ts +16 -0
- package/dist/worktree/index.d.ts.map +1 -0
- package/dist/worktree/index.js +16 -0
- package/dist/worktree/index.js.map +1 -0
- package/dist/{worktree-safety.d.ts → worktree/safety.d.ts} +1 -1
- package/dist/worktree/safety.d.ts.map +1 -0
- package/dist/{worktree-safety.js → worktree/safety.js} +2 -2
- package/dist/worktree/safety.js.map +1 -0
- package/dist/{worktree-state.d.ts → worktree/state.d.ts} +1 -1
- package/dist/worktree/state.d.ts.map +1 -0
- package/dist/{worktree-state.js → worktree/state.js} +6 -6
- package/dist/worktree/state.js.map +1 -0
- package/dist/worktree.d.ts +1 -1
- package/dist/worktree.js +5 -5
- package/dist/worktree.js.map +1 -1
- package/package.json +5 -4
- package/dist/git-activity.d.ts.map +0 -1
- package/dist/git-activity.js.map +0 -1
- package/dist/git-branch.d.ts.map +0 -1
- package/dist/git-branch.js.map +0 -1
- package/dist/git-fetch.d.ts.map +0 -1
- package/dist/git-fetch.js.map +0 -1
- package/dist/git-genesis.d.ts.map +0 -1
- package/dist/git-genesis.js.map +0 -1
- package/dist/git-integration.d.ts.map +0 -1
- package/dist/git-integration.js.map +0 -1
- package/dist/git-merge-helpers.d.ts.map +0 -1
- package/dist/git-merge-helpers.js.map +0 -1
- package/dist/git-merge-lock.d.ts.map +0 -1
- package/dist/git-merge-lock.js.map +0 -1
- package/dist/git-merge-strategies.d.ts.map +0 -1
- package/dist/git-merge-strategies.js.map +0 -1
- package/dist/git-merge.d.ts.map +0 -1
- package/dist/git-merge.js.map +0 -1
- package/dist/git-state-detector.d.ts.map +0 -1
- package/dist/git-state-detector.js.map +0 -1
- package/dist/git-types.d.ts.map +0 -1
- package/dist/git-types.js.map +0 -1
- package/dist/git-utils.d.ts.map +0 -1
- package/dist/git-utils.js.map +0 -1
- package/dist/loop-context-audit-pass.d.ts.map +0 -1
- package/dist/loop-context-audit-pass.js.map +0 -1
- package/dist/loop-engine-types.d.ts.map +0 -1
- package/dist/loop-engine-types.js.map +0 -1
- package/dist/loop-engine.d.ts.map +0 -1
- package/dist/loop-engine.js.map +0 -1
- package/dist/loop-event-bus.d.ts.map +0 -1
- package/dist/loop-event-bus.js.map +0 -1
- package/dist/loop-llm-client.d.ts.map +0 -1
- package/dist/loop-llm-client.js.map +0 -1
- package/dist/loop-llm-flag.d.ts.map +0 -1
- package/dist/loop-llm-flag.js.map +0 -1
- package/dist/loop-operational-block.d.ts.map +0 -1
- package/dist/loop-operational-block.js.map +0 -1
- package/dist/loop-prompt-builder.d.ts.map +0 -1
- package/dist/loop-prompt-builder.js.map +0 -1
- package/dist/loop-variance.d.ts.map +0 -1
- package/dist/loop-variance.js.map +0 -1
- package/dist/nexus-endpoint-clearance.d.ts.map +0 -1
- package/dist/nexus-endpoint-clearance.js.map +0 -1
- package/dist/nexus-escalation-bridge.d.ts.map +0 -1
- package/dist/nexus-escalation-bridge.js.map +0 -1
- package/dist/nexus-incoming.d.ts.map +0 -1
- package/dist/nexus-incoming.js.map +0 -1
- package/dist/nexus-intake-spawn.d.ts.map +0 -1
- package/dist/nexus-intake-spawn.js.map +0 -1
- package/dist/nexus-intake.d.ts.map +0 -1
- package/dist/nexus-intake.js.map +0 -1
- package/dist/nexus-return.d.ts.map +0 -1
- package/dist/nexus-return.js.map +0 -1
- package/dist/otlp-log-parser.d.ts.map +0 -1
- package/dist/otlp-log-parser.js.map +0 -1
- package/dist/otlp-metric-parser.d.ts.map +0 -1
- package/dist/otlp-metric-parser.js.map +0 -1
- package/dist/otlp-port-manager.d.ts.map +0 -1
- package/dist/otlp-port-manager.js.map +0 -1
- package/dist/otlp-receiver.d.ts.map +0 -1
- package/dist/otlp-receiver.js.map +0 -1
- package/dist/otlp-types.d.ts.map +0 -1
- package/dist/otlp-types.js.map +0 -1
- package/dist/prd-controller.d.ts.map +0 -1
- package/dist/prd-controller.js.map +0 -1
- package/dist/prd-divergence.d.ts.map +0 -1
- package/dist/prd-divergence.js.map +0 -1
- package/dist/prd-focus-pushdown.d.ts.map +0 -1
- package/dist/prd-focus-pushdown.js.map +0 -1
- package/dist/prd-frontier.d.ts.map +0 -1
- package/dist/prd-frontier.js.map +0 -1
- package/dist/prd-steward.d.ts.map +0 -1
- package/dist/prd-steward.js.map +0 -1
- package/dist/prd-viability.d.ts.map +0 -1
- package/dist/prd-viability.js.map +0 -1
- package/dist/worktree-focus.d.ts.map +0 -1
- package/dist/worktree-focus.js.map +0 -1
- package/dist/worktree-safety.d.ts.map +0 -1
- package/dist/worktree-safety.js.map +0 -1
- package/dist/worktree-state.d.ts.map +0 -1
- package/dist/worktree-state.js.map +0 -1
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-spawn seam for the focus-team spawn path.
|
|
3
|
+
*
|
|
4
|
+
* Extracted verbatim from focus-executor.ts (behavior-preserving): the final
|
|
5
|
+
* phase that takes a fully-resolved spawn (env constituents, args, message,
|
|
6
|
+
* session, backend) and actually launches the team-lead child process, plus its
|
|
7
|
+
* fail-closed backend/sandbox/governor gates, the crash-isolated spawn wrapper,
|
|
8
|
+
* and the terminal session-update payload builders. focus-executor.ts re-exports
|
|
9
|
+
* this surface for backward compatibility, so external importers keep resolving
|
|
10
|
+
* these symbols from '../focus-executor.js'.
|
|
11
|
+
*
|
|
12
|
+
* Cycle rule: this module must NOT import from '../focus-executor.js'. The two
|
|
13
|
+
* symbols this seam would otherwise reach back for -- the resource governor and
|
|
14
|
+
* the orchestrator spawnFocusTeam (staying in focus-executor.ts) -- are threaded
|
|
15
|
+
* in via SpawnTeamProcessArgs instead.
|
|
16
|
+
*/
|
|
17
|
+
import { spawn } from 'node:child_process';
|
|
18
|
+
import { hostname } from 'node:os';
|
|
19
|
+
import { withRetry } from '@telora/daemon-core';
|
|
20
|
+
import { updateSession, } from '../supabase.js';
|
|
21
|
+
import { buildLeveredSpawnEnvironment, fetchBackendEnvExtras } from '../spawn-environment.js';
|
|
22
|
+
import { wrapSpawnCommand, SandboxUnavailableError } from '../spawn-sandbox.js';
|
|
23
|
+
import { recordWorkerPid, removeWorkerPid } from '../worker-pidfile.js';
|
|
24
|
+
import { insertAssemblyManifest } from '../queries/context-assembly.js';
|
|
25
|
+
import { markDirectedAnswersConsumed } from '../resolvers/escalation-answers.js';
|
|
26
|
+
import { TELORA_LOCAL_API_KEY_ENV } from '../cli/codex-provision.js';
|
|
27
|
+
import { preflightLocalModelMcp } from '../backends/codex/mcp-preflight.js';
|
|
28
|
+
import { getActiveTeams } from '../focus-team-state.js';
|
|
29
|
+
import { attachStreamHandlers, handleTeamProcessClose, } from '../spawner/helpers.js';
|
|
30
|
+
import { terminateTeam, handleCompletionEvent, } from '../completion/index.js';
|
|
31
|
+
/**
|
|
32
|
+
* The terminal session-update payload written when the resource governor denies a
|
|
33
|
+
* slot for this spawn. Pure -- the caller adds `ended_at` and calls updateSession.
|
|
34
|
+
* Exported so the governor-denied exit_category contract is unit-pinned (the
|
|
35
|
+
* apply-side -- updateSession + governor.releaseSlot + activeTeams.delete -- stays
|
|
36
|
+
* in spawnTeamProcess, exercised by spawn-path-unified.test.ts).
|
|
37
|
+
*/
|
|
38
|
+
export function governorDeniedSessionUpdate() {
|
|
39
|
+
return {
|
|
40
|
+
status: 'failed',
|
|
41
|
+
exit_reason: 'Governor denied slot',
|
|
42
|
+
exit_category: 'governor_denied',
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The terminal session-update payload written when a required OS sandbox cannot
|
|
47
|
+
* initialize and the spawn is refused (fail-closed). Pure -- the caller adds
|
|
48
|
+
* `ended_at` and calls updateSession. Exported so the sandbox-unavailable
|
|
49
|
+
* exit_category contract is unit-pinned.
|
|
50
|
+
*/
|
|
51
|
+
export function sandboxUnavailableSessionUpdate(message) {
|
|
52
|
+
return {
|
|
53
|
+
status: 'failed',
|
|
54
|
+
exit_reason: message,
|
|
55
|
+
exit_category: 'sandbox_unavailable',
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Local-model passes depend on a host CLI, so refuse the process launch when
|
|
60
|
+
* the backend's existing availability probe says it cannot run. Cloud passes
|
|
61
|
+
* retain their existing behavior because their authentication can be supplied
|
|
62
|
+
* by the per-spawn environment after the host-level probe runs.
|
|
63
|
+
*/
|
|
64
|
+
export async function gateLocalModelBackendSpawn(backend, config, isLocalModelPass, host = hostname()) {
|
|
65
|
+
if (!isLocalModelPass)
|
|
66
|
+
return { allowed: true };
|
|
67
|
+
const availability = await backend.probeAvailability(config);
|
|
68
|
+
if (availability.available)
|
|
69
|
+
return { allowed: true };
|
|
70
|
+
// A routed local model supplies its own provider key in the child env. The
|
|
71
|
+
// host probe cannot see that key yet, so only binary absence is terminal for
|
|
72
|
+
// this Codex path; host-auth absence is intentionally superseded.
|
|
73
|
+
if (backend.id === 'codex' && availability.detail?.includes('but not authenticated')) {
|
|
74
|
+
return { allowed: true };
|
|
75
|
+
}
|
|
76
|
+
const binaryMissing = backend.id === 'codex' && availability.detail?.includes('not found');
|
|
77
|
+
const prefix = binaryMissing
|
|
78
|
+
? `Codex CLI not found on ${host} / not on PATH`
|
|
79
|
+
: `${backend.displayName} unavailable on ${host}`;
|
|
80
|
+
return {
|
|
81
|
+
allowed: false,
|
|
82
|
+
reason: availability.detail ? `${prefix}. ${availability.detail}` : prefix,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export function backendUnavailableSessionUpdate(reason, category = 'backend_unavailable') {
|
|
86
|
+
return {
|
|
87
|
+
status: 'failed',
|
|
88
|
+
exit_reason: reason,
|
|
89
|
+
exit_category: category,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/** Attach the error listener in the same synchronous stack frame as spawn(). */
|
|
93
|
+
export function spawnCrashIsolated(command, args, options, onError, spawnFn = spawn) {
|
|
94
|
+
const proc = spawnFn(command, args, {
|
|
95
|
+
...options,
|
|
96
|
+
// Own process group (setsid on POSIX): the team lead becomes its own
|
|
97
|
+
// group leader (pgid == lead pid). This is what makes the reap's
|
|
98
|
+
// group-first signal (spawner/lifecycle.signalWorker: kill(-pid)) actually
|
|
99
|
+
// reap the lead AND any host children it sub-spawns as one group -- without
|
|
100
|
+
// detachment the lead shares the daemon's group and kill(-leadPid) ESRCHs,
|
|
101
|
+
// falling back to the bare pid (lead only). We deliberately do NOT unref():
|
|
102
|
+
// the daemon must still observe the lead's 'close'/'exit' to drive
|
|
103
|
+
// completion + delivery advancement. On a hard daemon kill the CLI reaps
|
|
104
|
+
// these groups from the persisted worker pidfile (see daemon-process reap).
|
|
105
|
+
detached: true,
|
|
106
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
107
|
+
});
|
|
108
|
+
proc.on('error', onError);
|
|
109
|
+
// A failed exec can also tear down stdin with EPIPE after the process-level
|
|
110
|
+
// error/close. Consume that duplicate stream error; forward other stdin
|
|
111
|
+
// failures through the pass-scoped handler.
|
|
112
|
+
proc.stdin.on('error', (error) => {
|
|
113
|
+
if (error.code !== 'EPIPE')
|
|
114
|
+
onError(error);
|
|
115
|
+
});
|
|
116
|
+
return proc;
|
|
117
|
+
}
|
|
118
|
+
/** Ensure a terminal spawn failure is persisted after any in-flight running transition. */
|
|
119
|
+
export async function persistSpawnFailureAfterRunning(runningTransition, persistFailure) {
|
|
120
|
+
if (runningTransition)
|
|
121
|
+
await runningTransition.catch(() => undefined);
|
|
122
|
+
await persistFailure();
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Final phase: build the levered spawn environment, persist the assembly
|
|
126
|
+
* manifest, write the session lifecycle (starting -> running), acquire the
|
|
127
|
+
* governor slot, wrap the command in the sandbox (fail-closed), spawn the
|
|
128
|
+
* child, write its stdin, and attach the completion/close/error handlers.
|
|
129
|
+
*
|
|
130
|
+
* Owns ALL of its early-return cleanups so the team-state map and governor slot
|
|
131
|
+
* never leak: governor-denied (exit_category 'governor_denied') and
|
|
132
|
+
* sandbox-unavailable (exit_category 'sandbox_unavailable') both mark the
|
|
133
|
+
* session terminal, release the governor slot where one was held, remove the
|
|
134
|
+
* team from activeTeams, and return without spawning. Behavior byte-identical
|
|
135
|
+
* to the original inline tail of spawnFocusTeam.
|
|
136
|
+
*/
|
|
137
|
+
/**
|
|
138
|
+
* Close a team's local-model translating proxy if one is engaged, and null it so
|
|
139
|
+
* the call is idempotent across the multiple teardown paths. No-op for every
|
|
140
|
+
* hosted/Claude/flag-off team (mcpProxy undefined/null).
|
|
141
|
+
*/
|
|
142
|
+
export function closeTeamProxyQuietly(teamState) {
|
|
143
|
+
const proxy = teamState.mcpProxy;
|
|
144
|
+
if (!proxy)
|
|
145
|
+
return;
|
|
146
|
+
teamState.mcpProxy = null;
|
|
147
|
+
proxy.close().catch(() => undefined);
|
|
148
|
+
}
|
|
149
|
+
export async function spawnTeamProcess(spec) {
|
|
150
|
+
const { config, focusId, focusName, session, teamState, backend, args, messageToSend, logs, worktreePath, resumeId, assemblyManifest, spawnCodexHome, spawnLocalModelKey, isLocalModelPass, effectiveModel, pendingDirective, spawnStageName, params, governor, spawnFocusTeam, answeredEscalationIds = [], } = spec;
|
|
151
|
+
const activeTeams = getActiveTeams();
|
|
152
|
+
// Two fail-closed gates for local-model passes, both refusing the spawn into a
|
|
153
|
+
// durable terminal session rather than launching a team that cannot work:
|
|
154
|
+
// 1. backend availability (host CLI present) -- 'backend_unavailable'
|
|
155
|
+
// 2. read-only MCP preflight (required Telora tools callable) -- 'mcp_preflight_failed'
|
|
156
|
+
// The preflight runs only after availability passes (no point probing MCP when
|
|
157
|
+
// the binary is missing). Cloud/claude passes short-circuit both gates.
|
|
158
|
+
const availabilityGate = await gateLocalModelBackendSpawn(backend, config, isLocalModelPass);
|
|
159
|
+
const spawnGate = !availabilityGate.allowed
|
|
160
|
+
? { ...availabilityGate, category: 'backend_unavailable' }
|
|
161
|
+
: await preflightLocalModelMcp(config, isLocalModelPass);
|
|
162
|
+
if (!spawnGate.allowed) {
|
|
163
|
+
const reason = spawnGate.reason ?? `${backend.displayName} unavailable`;
|
|
164
|
+
const category = spawnGate.category ?? 'backend_unavailable';
|
|
165
|
+
console.error(`[focus-executor] Refusing spawn for "${focusName}" (${category}): ${reason}`);
|
|
166
|
+
await updateSession(session.id, {
|
|
167
|
+
...backendUnavailableSessionUpdate(reason, category),
|
|
168
|
+
ended_at: new Date().toISOString(),
|
|
169
|
+
}).catch(updateErr => {
|
|
170
|
+
console.warn(`[focus-executor] Failed to update refused-spawn session:`, updateErr.message);
|
|
171
|
+
});
|
|
172
|
+
logs.stdoutLogStream.end();
|
|
173
|
+
logs.stderrStream.end();
|
|
174
|
+
logs.jsonlStream.end();
|
|
175
|
+
closeTeamProxyQuietly(teamState);
|
|
176
|
+
teamState.phase = 'terminated';
|
|
177
|
+
activeTeams.delete(focusId);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
// Tag spend with the lever: the team-lead spawn runs the focus's execute
|
|
181
|
+
// phase (review directives run the gate); the workflow stage is carried
|
|
182
|
+
// separately. The audit phase tags its own spawn elsewhere.
|
|
183
|
+
const spawnPhase = (pendingDirective?.sessionType ?? 'coding') === 'review' ? 'gate' : 'execute';
|
|
184
|
+
// Stage: prefer the resolved workflow-stage name; when the stage could not be
|
|
185
|
+
// resolved (legacy-prompt fallback, or a non-review directive that carried no
|
|
186
|
+
// stage), fall back to the phase-appropriate default so the lever is never
|
|
187
|
+
// dropped. 'reviewing' for the gate phase, 'coding' for execute.
|
|
188
|
+
const spawnStage = spawnStageName ?? (spawnPhase === 'gate' ? 'reviewing' : 'coding');
|
|
189
|
+
// Levered spawn: buildLeveredSpawnEnvironment requires phase + stage, so this
|
|
190
|
+
// path cannot regress to dropping the telemetry lever.
|
|
191
|
+
const spawnEnv = buildLeveredSpawnEnvironment(config, {
|
|
192
|
+
orgId: config.organizationId,
|
|
193
|
+
focusId,
|
|
194
|
+
sessionId: session.id,
|
|
195
|
+
phase: spawnPhase,
|
|
196
|
+
stage: spawnStage,
|
|
197
|
+
});
|
|
198
|
+
// Inject backend-specific org secrets (e.g. CODEX_API_KEY for the codex backend).
|
|
199
|
+
// Non-fatal: fetchBackendEnvExtras returns {} on any error, falling back to host creds.
|
|
200
|
+
Object.assign(spawnEnv, await fetchBackendEnvExtras(backend.id));
|
|
201
|
+
// Per-product local-model isolation: point this codex spawn at the product's
|
|
202
|
+
// provisioned CODEX_HOME (no-invisible-cascading -- the override is logged).
|
|
203
|
+
// Cloud/claude spawns leave CODEX_HOME unset (spawnCodexHome === undefined).
|
|
204
|
+
if (spawnCodexHome) {
|
|
205
|
+
spawnEnv.CODEX_HOME = spawnCodexHome;
|
|
206
|
+
console.log(`[focus-executor] CODEX_HOME set for "${focusName}" (product ${config.productId.slice(0, 8)}): ` +
|
|
207
|
+
`${spawnCodexHome}` +
|
|
208
|
+
(effectiveModel ? ` (model: ${effectiveModel})` : ''));
|
|
209
|
+
}
|
|
210
|
+
// Per-pass local-model bearer (D8): inject the Telora-resolved key VALUE into
|
|
211
|
+
// the spawn env under the fixed name codex's config.toml references (env_key).
|
|
212
|
+
// The value lives only in this child process env -- never on disk, never on the
|
|
213
|
+
// local_models row. Set only for a routed local-model pass; cloud/claude and
|
|
214
|
+
// non-local codex spawns leave it untouched.
|
|
215
|
+
if (spawnLocalModelKey) {
|
|
216
|
+
spawnEnv[TELORA_LOCAL_API_KEY_ENV] = spawnLocalModelKey;
|
|
217
|
+
}
|
|
218
|
+
// Persist the assembly manifest for this spawn (best-effort -- never blocks
|
|
219
|
+
// the spawn). One row per resolved source, attributed to org + session +
|
|
220
|
+
// focus, so injected context becomes a queryable lever on token spend.
|
|
221
|
+
void insertAssemblyManifest({
|
|
222
|
+
sessionId: session.id,
|
|
223
|
+
focusId,
|
|
224
|
+
deliveryId: null,
|
|
225
|
+
manifest: assemblyManifest,
|
|
226
|
+
});
|
|
227
|
+
// Update session to starting
|
|
228
|
+
await updateSession(session.id, {
|
|
229
|
+
status: 'starting',
|
|
230
|
+
started_at: new Date().toISOString(),
|
|
231
|
+
stdout_path: logs.stdoutPath,
|
|
232
|
+
stderr_path: logs.stderrPath,
|
|
233
|
+
});
|
|
234
|
+
// Acquire governor slot (if governor is configured)
|
|
235
|
+
if (governor) {
|
|
236
|
+
try {
|
|
237
|
+
await governor.acquireSlot('focus');
|
|
238
|
+
}
|
|
239
|
+
catch (err) {
|
|
240
|
+
console.warn(`[focus-executor] Governor denied slot for "${focusName}":`, err.message);
|
|
241
|
+
// Mark session as failed so it doesn't linger in `starting` status
|
|
242
|
+
await updateSession(session.id, {
|
|
243
|
+
...governorDeniedSessionUpdate(),
|
|
244
|
+
ended_at: new Date().toISOString(),
|
|
245
|
+
}).catch(updateErr => {
|
|
246
|
+
console.warn(`[focus-executor] Failed to update session after governor denial:`, updateErr.message);
|
|
247
|
+
});
|
|
248
|
+
closeTeamProxyQuietly(teamState);
|
|
249
|
+
activeTeams.delete(focusId);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// Wrap the spawn in the OS sandbox (D3). Default mode is 'off' (no change);
|
|
254
|
+
// an explicit sandbox.mode="bwrap" confines the agent's filesystem to its
|
|
255
|
+
// worktree + an explicit read-only allowlist. FAIL-CLOSED: if a required
|
|
256
|
+
// sandbox cannot initialize, refuse the spawn rather than run unconfined.
|
|
257
|
+
let spawnCommand;
|
|
258
|
+
let spawnArgs;
|
|
259
|
+
try {
|
|
260
|
+
const wrapped = wrapSpawnCommand(config, {
|
|
261
|
+
command: backend.resolveCommand(config),
|
|
262
|
+
args,
|
|
263
|
+
worktreePath,
|
|
264
|
+
});
|
|
265
|
+
spawnCommand = wrapped.command;
|
|
266
|
+
spawnArgs = wrapped.args;
|
|
267
|
+
}
|
|
268
|
+
catch (err) {
|
|
269
|
+
if (err instanceof SandboxUnavailableError) {
|
|
270
|
+
console.error(`[focus-executor] Refusing spawn for "${focusName}": ${err.message}`);
|
|
271
|
+
await updateSession(session.id, {
|
|
272
|
+
...sandboxUnavailableSessionUpdate(err.message),
|
|
273
|
+
ended_at: new Date().toISOString(),
|
|
274
|
+
}).catch(updateErr => {
|
|
275
|
+
console.warn(`[focus-executor] Failed to update session after sandbox refusal:`, updateErr.message);
|
|
276
|
+
});
|
|
277
|
+
if (governor)
|
|
278
|
+
governor.releaseSlot('focus');
|
|
279
|
+
closeTeamProxyQuietly(teamState);
|
|
280
|
+
activeTeams.delete(focusId);
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
throw err;
|
|
284
|
+
}
|
|
285
|
+
// Spawn the team lead process
|
|
286
|
+
let processErrorHandled = false;
|
|
287
|
+
let runningTransition = null;
|
|
288
|
+
let completionDetectorForError = null;
|
|
289
|
+
const handleProcessError = (err) => {
|
|
290
|
+
if (processErrorHandled)
|
|
291
|
+
return;
|
|
292
|
+
processErrorHandled = true;
|
|
293
|
+
console.error(`[focus-executor] Team lead for "${focusName}" error:`, err.message);
|
|
294
|
+
governor?.releaseSlot('focus');
|
|
295
|
+
const missingCliReason = err.code === 'ENOENT'
|
|
296
|
+
? `${backend.displayName} not found on ${hostname()} / not on PATH: ${err.message}`
|
|
297
|
+
: `Process error: ${err.message}`;
|
|
298
|
+
void persistSpawnFailureAfterRunning(runningTransition, () => withRetry(() => updateSession(session.id, {
|
|
299
|
+
status: 'failed',
|
|
300
|
+
exit_reason: missingCliReason,
|
|
301
|
+
exit_category: err.code === 'ENOENT' ? 'backend_unavailable' : 'error',
|
|
302
|
+
ended_at: new Date().toISOString(),
|
|
303
|
+
}), { maxAttempts: 3, baseDelayMs: 1000, label: 'session-update-error' })).catch(updateErr => {
|
|
304
|
+
console.warn(`[focus-executor] Failed to update session after retries:`, updateErr.message);
|
|
305
|
+
});
|
|
306
|
+
completionDetectorForError?.destroy();
|
|
307
|
+
logs.stdoutLogStream.end();
|
|
308
|
+
logs.stderrStream.end();
|
|
309
|
+
logs.jsonlStream.end();
|
|
310
|
+
closeTeamProxyQuietly(teamState);
|
|
311
|
+
teamState.phase = 'terminated';
|
|
312
|
+
activeTeams.delete(focusId);
|
|
313
|
+
};
|
|
314
|
+
const proc = spawnCrashIsolated(spawnCommand, spawnArgs, {
|
|
315
|
+
cwd: worktreePath,
|
|
316
|
+
env: spawnEnv,
|
|
317
|
+
}, handleProcessError);
|
|
318
|
+
teamState.leadPid = proc.pid ?? null;
|
|
319
|
+
teamState.leadStdin = proc.stdin;
|
|
320
|
+
teamState.phase = 'executing';
|
|
321
|
+
// Persist the detached lead pid so a hard daemon kill (stop --force / timeout
|
|
322
|
+
// / external kill -9) can group-reap it from the pidfile -- the in-memory
|
|
323
|
+
// activeTeams map dies with the daemon. Auto-removed on the lead's exit.
|
|
324
|
+
if (typeof proc.pid === 'number') {
|
|
325
|
+
const leadPid = proc.pid;
|
|
326
|
+
recordWorkerPid(leadPid, focusName);
|
|
327
|
+
proc.once('close', () => removeWorkerPid(leadPid));
|
|
328
|
+
proc.once('error', () => removeWorkerPid(leadPid));
|
|
329
|
+
}
|
|
330
|
+
// Attach stream parser, completion detector, activity tracker, event handlers
|
|
331
|
+
const { completionDetector, activityTracker } = attachStreamHandlers({
|
|
332
|
+
proc, backend, teamState, focusId, focusName, sessionId: session.id, logs,
|
|
333
|
+
});
|
|
334
|
+
completionDetectorForError = completionDetector;
|
|
335
|
+
// Send the message via stdin: the full composed prompt on a fresh spawn, or
|
|
336
|
+
// the incremental delta when resuming a lineage (INJ-D). Engine-specific input
|
|
337
|
+
// encoding lives in the backend.
|
|
338
|
+
proc.stdin.write(backend.encodeInput(messageToSend));
|
|
339
|
+
if (backend.closeStdinAfterInput) {
|
|
340
|
+
proc.stdin.end();
|
|
341
|
+
teamState.leadStdin = null;
|
|
342
|
+
}
|
|
343
|
+
// Post-dispatch closure: the answered-escalation section is now in the agent's
|
|
344
|
+
// stdin, so stamp those answers consumed (best-effort; a failure degrades to
|
|
345
|
+
// at-least-once re-surfacing, never loss). Deferred to HERE -- after the write
|
|
346
|
+
// succeeds -- so a spawn that tore down earlier (governor-denied / sandbox /
|
|
347
|
+
// model-swap) never consumes an answer it did not deliver.
|
|
348
|
+
void markDirectedAnswersConsumed(answeredEscalationIds);
|
|
349
|
+
// Update session to running
|
|
350
|
+
runningTransition = updateSession(session.id, {
|
|
351
|
+
status: 'running',
|
|
352
|
+
pid: proc.pid,
|
|
353
|
+
});
|
|
354
|
+
await runningTransition;
|
|
355
|
+
console.log(`[focus-executor] Team lead spawned for "${focusName}" (PID: ${proc.pid}, session: ${session.id})`);
|
|
356
|
+
// Handle completion -- check for more work or terminate.
|
|
357
|
+
// No idle phase: if actionable work remains, send it immediately (mid-focus
|
|
358
|
+
// handoff). If all work is done, terminate. A fresh team is spawned if new
|
|
359
|
+
// deliveries arrive later (~$0.50-1.00 exploration cost, but clean context).
|
|
360
|
+
completionDetector.on('complete', (info) => {
|
|
361
|
+
console.log(`[focus-executor] Team lead for "${focusName}" completed work cycle: ` +
|
|
362
|
+
`${info.turnCount} turns, $${info.totalCostUsd.toFixed(4)}`);
|
|
363
|
+
handleCompletionEvent({ config, focusId, focusName, teamState, completionDetector, proc, completionInfo: info }).catch(err => {
|
|
364
|
+
console.warn(`[focus-executor] Failed to check delivery state for "${focusName}":`, err.message);
|
|
365
|
+
// Fallback: terminate to avoid idle money burn.
|
|
366
|
+
terminateTeam(focusId, 'handoff');
|
|
367
|
+
});
|
|
368
|
+
});
|
|
369
|
+
// Handle process exit
|
|
370
|
+
const spawnedAt = Date.now();
|
|
371
|
+
proc.on('close', (code, signal) => {
|
|
372
|
+
// Node emits close after a spawn error. The error path already persisted
|
|
373
|
+
// the terminal reason; do not let normal completion overwrite it.
|
|
374
|
+
if (processErrorHandled)
|
|
375
|
+
return;
|
|
376
|
+
handleTeamProcessClose({
|
|
377
|
+
code, signal, focusName, focusId, resumeId, spawnedAt,
|
|
378
|
+
teamState, sessionId: session.id, config, completionDetector,
|
|
379
|
+
activityTracker, logs, params, governor, spawnFocusTeam,
|
|
380
|
+
}).catch(err => {
|
|
381
|
+
console.error(`[focus-executor] handleTeamProcessClose failed for "${focusName}":`, err.message);
|
|
382
|
+
});
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
//# sourceMappingURL=process-spawn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-spawn.js","sourceRoot":"","sources":["../../src/spawn/process-spawn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt-assembly seam for the focus-team spawn path.
|
|
3
|
+
*
|
|
4
|
+
* Extracted verbatim from focus-executor.ts (behavior-preserving): the pure
|
|
5
|
+
* prompt-context factory, the composed team-lead prompt builder, the stdin
|
|
6
|
+
* message selector (fresh prompt vs resume-delta vs scoping directive), and the
|
|
7
|
+
* scoping helpers they depend on. focus-executor.ts re-exports this surface for
|
|
8
|
+
* backward compatibility, so external importers keep resolving these symbols
|
|
9
|
+
* from '../focus-executor.js'.
|
|
10
|
+
*
|
|
11
|
+
* Cycle rule: this module must NOT import from '../focus-executor.js'.
|
|
12
|
+
*/
|
|
13
|
+
import type { DaemonConfig, AgentRole, FocusTeamState, PipelineConfig } from '../types.js';
|
|
14
|
+
import { getFocusDeliveries, getFocusIssues } from '../queries/focuses.js';
|
|
15
|
+
import { type FocusTeamPromptContext } from '../team-prompt-base.js';
|
|
16
|
+
import { resolveLineageSpec } from '../session-lineage.js';
|
|
17
|
+
import { type AssemblyManifestEntry } from '../assembly-engine.js';
|
|
18
|
+
import type { SpawnContext } from './shared.js';
|
|
19
|
+
/**
|
|
20
|
+
* Phase C input: assemble the FocusTeamPromptContext threaded into both the
|
|
21
|
+
* directive and legacy prompt builders. Pure factory -- byte-identical to the
|
|
22
|
+
* original inline object literal; extracted so the orchestrator reads as ordered
|
|
23
|
+
* phase calls rather than inlining the context shape.
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildFocusPromptContext(args: {
|
|
26
|
+
config: DaemonConfig;
|
|
27
|
+
focusId: string;
|
|
28
|
+
focusName: string;
|
|
29
|
+
focusDescription: string | null;
|
|
30
|
+
deliveries: Awaited<ReturnType<typeof getFocusDeliveries>>;
|
|
31
|
+
issues: Awaited<ReturnType<typeof getFocusIssues>>;
|
|
32
|
+
executionConfig: FocusTeamState['executionConfig'];
|
|
33
|
+
pipelineConfig: PipelineConfig | null;
|
|
34
|
+
deploymentProfileSnapshot: SpawnContext['deploymentProfileSnapshot'];
|
|
35
|
+
readOnly: boolean;
|
|
36
|
+
/** Legacy loop-context (empty on the directive path -- resolved only for the legacy prompt). */
|
|
37
|
+
loopContext: string;
|
|
38
|
+
reviewFiledOpenCount: number;
|
|
39
|
+
engineId: string;
|
|
40
|
+
}): FocusTeamPromptContext;
|
|
41
|
+
/**
|
|
42
|
+
* Phase C: compose the final team-lead message -- role framework + remediation
|
|
43
|
+
* framing + directive body (or the legacy full focus prompt), then the PRD
|
|
44
|
+
* milestone push-down appended last so it reaches BOTH prompt paths. Pure +
|
|
45
|
+
* testable. Byte-identical to the original inline composition.
|
|
46
|
+
*/
|
|
47
|
+
export declare function buildSpawnPrompt(args: {
|
|
48
|
+
role: AgentRole;
|
|
49
|
+
promptContext: FocusTeamPromptContext;
|
|
50
|
+
useLegacyFullPrompt: boolean;
|
|
51
|
+
directiveBody: string | null;
|
|
52
|
+
prdMilestoneContext: string;
|
|
53
|
+
/**
|
|
54
|
+
* The answered-directed-escalation section (first-class). Appended to BOTH the
|
|
55
|
+
* directive and legacy prompt paths so a fresh spawn always carries answered
|
|
56
|
+
* intent -- the legacy loopContext render dropped it on the directive path.
|
|
57
|
+
* Empty string when there are no answered escalations. Optional (defaults to
|
|
58
|
+
* '') so prompt-composition unit tests need not thread it; the production
|
|
59
|
+
* spawn path always passes it.
|
|
60
|
+
*/
|
|
61
|
+
answeredEscalationsSection?: string;
|
|
62
|
+
/**
|
|
63
|
+
* True when this spawn is a review-lineage pass (reviewing stage). The
|
|
64
|
+
* outcome-stamping obligation is appended ONLY for review passes -- a coding
|
|
65
|
+
* team has nothing to stamp.
|
|
66
|
+
*/
|
|
67
|
+
isReviewPass?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* The review session's Telora agent_sessions.id (from createTeamSession).
|
|
70
|
+
* Threaded into the outcome-stamping section so the review agent receives the
|
|
71
|
+
* exact id product-api validates against -- no reverse-engineering it from the
|
|
72
|
+
* Claude --resume session id. Only emitted on review passes; ignored otherwise.
|
|
73
|
+
*/
|
|
74
|
+
agentSessionId?: string;
|
|
75
|
+
}): string;
|
|
76
|
+
/**
|
|
77
|
+
* Phase: choose the stdin message. A fresh spawn sends the full composed prompt;
|
|
78
|
+
* a resume sends an incremental delta (git diff + prior findings to verify) since
|
|
79
|
+
* the resumed session already holds its role + accumulated context (INJ-D).
|
|
80
|
+
*
|
|
81
|
+
* The scoping case is the one exception that overrides the fresh-vs-resume split:
|
|
82
|
+
* when a NON-read_only (executable) focus has queued deliveries carrying only
|
|
83
|
+
* Context Group issues and zero Task/Bug issues, this returns the role framework
|
|
84
|
+
* PLUS `buildQueuedDeliveryScopingMessage` REGARDLESS of resumeId. The caller pairs
|
|
85
|
+
* this with `resolveScopingSpawnResume`, which forces the spawn fresh (resumeId
|
|
86
|
+
* null) so the directive lands on a new session instead of no-opping a concluded
|
|
87
|
+
* one. Because the fresh session holds no accumulated context, the role framework
|
|
88
|
+
* (identity + Scoping Mandate + status-update rules) is prepended here; only the
|
|
89
|
+
* audit/kickoff DIRECTIVE body carried in `prompt` is dropped, per AC. `readOnlyFocus`
|
|
90
|
+
* focuses are discovery-only (audit-playbook origin): their CG-only deliveries are
|
|
91
|
+
* INTENTIONALLY unscoped, so they are never driven into scoping here --
|
|
92
|
+
* delivery-lifecycle terminalizes them instead.
|
|
93
|
+
*/
|
|
94
|
+
export declare function buildSpawnMessage(args: {
|
|
95
|
+
prompt: string;
|
|
96
|
+
resumeId: string | null;
|
|
97
|
+
readOnlyFocus: boolean;
|
|
98
|
+
/**
|
|
99
|
+
* The team-lead role + context, used to rebuild JUST the role-framework prefix
|
|
100
|
+
* (`buildRoleFrameworkPrompt`, WITHOUT the audit/kickoff directive body) for the
|
|
101
|
+
* forced-fresh scoping message. The scoping spawn lands on a NEW session with no
|
|
102
|
+
* accumulated context, and stdin is that session's only first-turn instruction
|
|
103
|
+
* (there is no --system-prompt channel and the worktree CLAUDE.md carries no role
|
|
104
|
+
* framework), so the scoping directive must carry the role framework itself or
|
|
105
|
+
* the fresh team lead has no identity / status-update contract / scoping mandate.
|
|
106
|
+
*/
|
|
107
|
+
role: AgentRole;
|
|
108
|
+
promptContext: FocusTeamPromptContext;
|
|
109
|
+
spawnSpec: ReturnType<typeof resolveLineageSpec>;
|
|
110
|
+
config: DaemonConfig;
|
|
111
|
+
focusId: string;
|
|
112
|
+
focusName: string;
|
|
113
|
+
deliveries: Awaited<ReturnType<typeof getFocusDeliveries>>;
|
|
114
|
+
issues: Awaited<ReturnType<typeof getFocusIssues>>;
|
|
115
|
+
worktreePath: string;
|
|
116
|
+
priorFindings: Awaited<ReturnType<typeof getFocusIssues>>;
|
|
117
|
+
/**
|
|
118
|
+
* The first-class answered-escalations section. The fresh-prompt shape already
|
|
119
|
+
* carries it (it is baked into `prompt` by buildSpawnPrompt); the resume-delta
|
|
120
|
+
* and forced-fresh scoping shapes build their own message and must append it
|
|
121
|
+
* here so answered intent reaches EVERY message shape. '' when none. Optional
|
|
122
|
+
* (defaults to '') so message-shape unit tests need not thread it; the
|
|
123
|
+
* production spawn path always passes it.
|
|
124
|
+
*/
|
|
125
|
+
answeredEscalationsSection?: string;
|
|
126
|
+
/**
|
|
127
|
+
* Optional out-param: on a resume-delta spawn, the git.diff_against_base
|
|
128
|
+
* manifest (the ONE assembly source the delta delivers) is pushed here so the
|
|
129
|
+
* delivered-manifest assembly can record it. Untouched on the fresh / scoping
|
|
130
|
+
* shapes (which do not resolve git.diff). Optional so existing callers/tests
|
|
131
|
+
* that only need the message string are unaffected.
|
|
132
|
+
*/
|
|
133
|
+
gitDiffManifestSink?: AssemblyManifestEntry[];
|
|
134
|
+
}): Promise<string>;
|
|
135
|
+
/**
|
|
136
|
+
* Decide whether this spawn must be forced fresh to deliver a scoping directive,
|
|
137
|
+
* and return the resume id the spawn should actually use.
|
|
138
|
+
*
|
|
139
|
+
* The wedge this closes: a queued delivery carrying only Context Group issues and
|
|
140
|
+
* zero Task/Bug issues can never cross the queued->coding gate. The daemon
|
|
141
|
+
* re-spawns the focus every poll, but the resume lands on a session that already
|
|
142
|
+
* considers the audit "done" and no-ops in one turn. The fix is to force the
|
|
143
|
+
* scoping spawn FRESH (resumeId null) so `buildQueuedDeliveryScopingMessage`
|
|
144
|
+
* primes a new session as its first instruction rather than a resume-delta a
|
|
145
|
+
* concluded session ignores.
|
|
146
|
+
*
|
|
147
|
+
* Only executable focuses are driven into scoping. A `readOnly` (discovery-only,
|
|
148
|
+
* audit-playbook) focus's CG-only deliveries are intentionally unscoped, so this
|
|
149
|
+
* never forces them fresh -- their resume id passes through unchanged and the
|
|
150
|
+
* delivery reaches a terminal state via the reconciler's discovery-only path.
|
|
151
|
+
*
|
|
152
|
+
* Pure and exported so the fresh-spawn contract is unit-testable without a live
|
|
153
|
+
* spawn.
|
|
154
|
+
*/
|
|
155
|
+
export declare function resolveScopingSpawnResume(args: {
|
|
156
|
+
readOnly: boolean;
|
|
157
|
+
deliveries: Awaited<ReturnType<typeof getFocusDeliveries>>;
|
|
158
|
+
issues: Awaited<ReturnType<typeof getFocusIssues>>;
|
|
159
|
+
resumeId: string | null;
|
|
160
|
+
}): {
|
|
161
|
+
resumeId: string | null;
|
|
162
|
+
isScopingSpawn: boolean;
|
|
163
|
+
};
|
|
164
|
+
export declare function findQueuedDeliveriesWithoutTaskIssues(deliveries: Awaited<ReturnType<typeof getFocusDeliveries>>, issues: Awaited<ReturnType<typeof getFocusIssues>>): Awaited<ReturnType<typeof getFocusDeliveries>>;
|
|
165
|
+
export declare function buildQueuedDeliveryScopingMessage(args: {
|
|
166
|
+
lineage: string;
|
|
167
|
+
focusName: string;
|
|
168
|
+
deliveries: Awaited<ReturnType<typeof getFocusDeliveries>>;
|
|
169
|
+
}): string;
|
|
170
|
+
//# sourceMappingURL=prompt-assembly.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-assembly.d.ts","sourceRoot":"","sources":["../../src/spawn/prompt-assembly.ts"],"names":[],"mappings":"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"}
|