@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.
Files changed (597) hide show
  1. package/build-info.json +8 -3
  2. package/dist/assembly-engine.d.ts +9 -0
  3. package/dist/assembly-engine.d.ts.map +1 -1
  4. package/dist/assembly-engine.js.map +1 -1
  5. package/dist/audit-hooks.js +1 -1
  6. package/dist/branch-status.js +2 -2
  7. package/dist/branch-status.js.map +1 -1
  8. package/dist/ci-sensor-loop.d.ts +47 -0
  9. package/dist/ci-sensor-loop.d.ts.map +1 -0
  10. package/dist/ci-sensor-loop.js +116 -0
  11. package/dist/ci-sensor-loop.js.map +1 -0
  12. package/dist/ci-status-git.d.ts +52 -0
  13. package/dist/ci-status-git.d.ts.map +1 -0
  14. package/dist/ci-status-git.js +86 -0
  15. package/dist/ci-status-git.js.map +1 -0
  16. package/dist/ci-status.d.ts +122 -0
  17. package/dist/ci-status.d.ts.map +1 -0
  18. package/dist/ci-status.js +114 -0
  19. package/dist/ci-status.js.map +1 -0
  20. package/dist/cli/connect/agents.d.ts +24 -0
  21. package/dist/cli/connect/agents.d.ts.map +1 -0
  22. package/dist/cli/connect/agents.js +65 -0
  23. package/dist/cli/connect/agents.js.map +1 -0
  24. package/dist/cli/connect/claude.d.ts +31 -0
  25. package/dist/cli/connect/claude.d.ts.map +1 -0
  26. package/dist/cli/connect/claude.js +104 -0
  27. package/dist/cli/connect/claude.js.map +1 -0
  28. package/dist/cli/connect/cline.d.ts +37 -0
  29. package/dist/cli/connect/cline.d.ts.map +1 -0
  30. package/dist/cli/connect/cline.js +115 -0
  31. package/dist/cli/connect/cline.js.map +1 -0
  32. package/dist/cli/connect/codex.d.ts +44 -0
  33. package/dist/cli/connect/codex.d.ts.map +1 -0
  34. package/dist/cli/connect/codex.js +111 -0
  35. package/dist/cli/connect/codex.js.map +1 -0
  36. package/dist/cli/connect/ide.d.ts +69 -0
  37. package/dist/cli/connect/ide.d.ts.map +1 -0
  38. package/dist/cli/connect/ide.js +134 -0
  39. package/dist/cli/connect/ide.js.map +1 -0
  40. package/dist/cli/connect/scaffolding.d.ts +31 -0
  41. package/dist/cli/connect/scaffolding.d.ts.map +1 -0
  42. package/dist/cli/connect/scaffolding.js +52 -0
  43. package/dist/cli/connect/scaffolding.js.map +1 -0
  44. package/dist/cli/connect/shared.d.ts +30 -0
  45. package/dist/cli/connect/shared.d.ts.map +1 -0
  46. package/dist/cli/connect/shared.js +11 -0
  47. package/dist/cli/connect/shared.js.map +1 -0
  48. package/dist/cli/connect.d.ts +9 -210
  49. package/dist/cli/connect.d.ts.map +1 -1
  50. package/dist/cli/connect.js +10 -526
  51. package/dist/cli/connect.js.map +1 -1
  52. package/dist/cli/open.js +2 -2
  53. package/dist/completion/event.d.ts +2 -0
  54. package/dist/completion/event.d.ts.map +1 -1
  55. package/dist/completion/event.js +19 -2
  56. package/dist/completion/event.js.map +1 -1
  57. package/dist/completion/merge-phase.d.ts +3 -0
  58. package/dist/completion/merge-phase.d.ts.map +1 -1
  59. package/dist/completion/merge-phase.js +35 -3
  60. package/dist/completion/merge-phase.js.map +1 -1
  61. package/dist/completion/read-only-pristine.d.ts +1 -1
  62. package/dist/completion/read-only-pristine.d.ts.map +1 -1
  63. package/dist/completion/read-only-pristine.js +1 -1
  64. package/dist/completion/read-only-pristine.js.map +1 -1
  65. package/dist/completion/review-exit-phase.d.ts +30 -3
  66. package/dist/completion/review-exit-phase.d.ts.map +1 -1
  67. package/dist/completion/review-exit-phase.js +203 -15
  68. package/dist/completion/review-exit-phase.js.map +1 -1
  69. package/dist/completion/status-advance-phase.js +1 -1
  70. package/dist/completion/status-advance-phase.js.map +1 -1
  71. package/dist/completion/team-completion.d.ts.map +1 -1
  72. package/dist/completion/team-completion.js +22 -2
  73. package/dist/completion/team-completion.js.map +1 -1
  74. package/dist/completion/team-lifecycle.js +1 -1
  75. package/dist/completion/terminated-work-reconcile.js +1 -1
  76. package/dist/completion/terminated-work-reconcile.js.map +1 -1
  77. package/dist/condition-evaluators.d.ts +41 -2
  78. package/dist/condition-evaluators.d.ts.map +1 -1
  79. package/dist/condition-evaluators.js +37 -288
  80. package/dist/condition-evaluators.js.map +1 -1
  81. package/dist/config.d.ts.map +1 -1
  82. package/dist/config.js +23 -0
  83. package/dist/config.js.map +1 -1
  84. package/dist/context-audit.d.ts +1 -1
  85. package/dist/context-audit.d.ts.map +1 -1
  86. package/dist/context-lock.d.ts +1 -1
  87. package/dist/context-lock.d.ts.map +1 -1
  88. package/dist/control-state.d.ts +2 -2
  89. package/dist/control-state.d.ts.map +1 -1
  90. package/dist/control-state.js +4 -3
  91. package/dist/control-state.js.map +1 -1
  92. package/dist/daemon-process.d.ts +1 -1
  93. package/dist/daemon-process.d.ts.map +1 -1
  94. package/dist/delivery-advance-block.d.ts +1 -1
  95. package/dist/delivery-advance-block.d.ts.map +1 -1
  96. package/dist/delivery-advance-block.js +1 -1
  97. package/dist/delivery-advance-block.js.map +1 -1
  98. package/dist/delivery-lifecycle.js +1 -1
  99. package/dist/delivery-reconciler-shadow.d.ts +1 -1
  100. package/dist/delivery-reconciler-shadow.d.ts.map +1 -1
  101. package/dist/delivery-reconciler-shadow.js +1 -1
  102. package/dist/delivery-reconciler-shadow.js.map +1 -1
  103. package/dist/directive-executor.js +1 -1
  104. package/dist/directive-executor.js.map +1 -1
  105. package/dist/drift-eval-loop.d.ts.map +1 -1
  106. package/dist/drift-eval-loop.js +6 -14
  107. package/dist/drift-eval-loop.js.map +1 -1
  108. package/dist/escalations.d.ts +1 -1
  109. package/dist/escalations.d.ts.map +1 -1
  110. package/dist/escalations.js +1 -1
  111. package/dist/escalations.js.map +1 -1
  112. package/dist/evaluation-context.d.ts +2 -33
  113. package/dist/evaluation-context.d.ts.map +1 -1
  114. package/dist/evaluation-context.js +2 -56
  115. package/dist/evaluation-context.js.map +1 -1
  116. package/dist/focus-engine.d.ts +14 -5
  117. package/dist/focus-engine.d.ts.map +1 -1
  118. package/dist/focus-engine.js +35 -289
  119. package/dist/focus-engine.js.map +1 -1
  120. package/dist/focus-executor.d.ts +10 -791
  121. package/dist/focus-executor.d.ts.map +1 -1
  122. package/dist/focus-executor.js +81 -1572
  123. package/dist/focus-executor.js.map +1 -1
  124. package/dist/focus-lifecycle.js +2 -2
  125. package/dist/focus-lifecycle.js.map +1 -1
  126. package/dist/focus-loop-registry.d.ts +52 -0
  127. package/dist/focus-loop-registry.d.ts.map +1 -0
  128. package/dist/focus-loop-registry.js +328 -0
  129. package/dist/focus-loop-registry.js.map +1 -0
  130. package/dist/focus-merge.d.ts +1 -1
  131. package/dist/focus-merge.d.ts.map +1 -1
  132. package/dist/focus-merge.js +6 -6
  133. package/dist/focus-merge.js.map +1 -1
  134. package/dist/focus-phase.d.ts +4 -0
  135. package/dist/focus-phase.d.ts.map +1 -1
  136. package/dist/focus-phase.js +3 -3
  137. package/dist/focus-phase.js.map +1 -1
  138. package/dist/focus-prompt-builder.d.ts.map +1 -1
  139. package/dist/focus-prompt-builder.js +4 -1
  140. package/dist/focus-prompt-builder.js.map +1 -1
  141. package/dist/focus-stage-lifecycle/planning-release.d.ts +197 -0
  142. package/dist/focus-stage-lifecycle/planning-release.d.ts.map +1 -0
  143. package/dist/focus-stage-lifecycle/planning-release.js +312 -0
  144. package/dist/focus-stage-lifecycle/planning-release.js.map +1 -0
  145. package/dist/focus-stage-lifecycle/review-convergence.d.ts +133 -0
  146. package/dist/focus-stage-lifecycle/review-convergence.d.ts.map +1 -0
  147. package/dist/focus-stage-lifecycle/review-convergence.js +235 -0
  148. package/dist/focus-stage-lifecycle/review-convergence.js.map +1 -0
  149. package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts +133 -0
  150. package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -0
  151. package/dist/focus-stage-lifecycle/wedge-watchdog.js +365 -0
  152. package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -0
  153. package/dist/focus-stage-lifecycle.d.ts +22 -421
  154. package/dist/focus-stage-lifecycle.d.ts.map +1 -1
  155. package/dist/focus-stage-lifecycle.js +24 -832
  156. package/dist/focus-stage-lifecycle.js.map +1 -1
  157. package/dist/{git-activity.d.ts → git/activity.d.ts} +1 -1
  158. package/dist/git/activity.d.ts.map +1 -0
  159. package/dist/{git-activity.js → git/activity.js} +2 -2
  160. package/dist/git/activity.js.map +1 -0
  161. package/dist/{git-branch.d.ts → git/branch.d.ts} +2 -2
  162. package/dist/git/branch.d.ts.map +1 -0
  163. package/dist/{git-branch.js → git/branch.js} +2 -2
  164. package/dist/git/branch.js.map +1 -0
  165. package/dist/{git-fetch.d.ts → git/fetch.d.ts} +2 -2
  166. package/dist/git/fetch.d.ts.map +1 -0
  167. package/dist/{git-fetch.js → git/fetch.js} +1 -1
  168. package/dist/git/fetch.js.map +1 -0
  169. package/dist/{git-genesis.d.ts → git/genesis.d.ts} +3 -3
  170. package/dist/git/genesis.d.ts.map +1 -0
  171. package/dist/{git-genesis.js → git/genesis.js} +5 -5
  172. package/dist/git/genesis.js.map +1 -0
  173. package/dist/git/index.d.ts +36 -0
  174. package/dist/git/index.d.ts.map +1 -0
  175. package/dist/git/index.js +36 -0
  176. package/dist/git/index.js.map +1 -0
  177. package/dist/{git-integration.d.ts → git/integration.d.ts} +2 -2
  178. package/dist/git/integration.d.ts.map +1 -0
  179. package/dist/{git-integration.js → git/integration.js} +4 -4
  180. package/dist/git/integration.js.map +1 -0
  181. package/dist/{git-merge-helpers.d.ts → git/merge-helpers.d.ts} +3 -3
  182. package/dist/git/merge-helpers.d.ts.map +1 -0
  183. package/dist/{git-merge-helpers.js → git/merge-helpers.js} +3 -3
  184. package/dist/git/merge-helpers.js.map +1 -0
  185. package/dist/{git-merge-lock.d.ts → git/merge-lock.d.ts} +1 -1
  186. package/dist/git/merge-lock.d.ts.map +1 -0
  187. package/dist/{git-merge-lock.js → git/merge-lock.js} +1 -1
  188. package/dist/git/merge-lock.js.map +1 -0
  189. package/dist/{git-merge-strategies.d.ts → git/merge-strategies.d.ts} +2 -2
  190. package/dist/git/merge-strategies.d.ts.map +1 -0
  191. package/dist/{git-merge-strategies.js → git/merge-strategies.js} +3 -3
  192. package/dist/git/merge-strategies.js.map +1 -0
  193. package/dist/{git-merge.d.ts → git/merge.d.ts} +4 -4
  194. package/dist/git/merge.d.ts.map +1 -0
  195. package/dist/{git-merge.js → git/merge.js} +4 -4
  196. package/dist/git/merge.js.map +1 -0
  197. package/dist/{git-state-detector.d.ts → git/state-detector.d.ts} +2 -2
  198. package/dist/git/state-detector.d.ts.map +1 -0
  199. package/dist/{git-state-detector.js → git/state-detector.js} +7 -7
  200. package/dist/git/state-detector.js.map +1 -0
  201. package/dist/{git-types.d.ts → git/types.d.ts} +2 -2
  202. package/dist/git/types.d.ts.map +1 -0
  203. package/dist/{git-types.js → git/types.js} +1 -1
  204. package/dist/git/types.js.map +1 -0
  205. package/dist/{git-utils.d.ts → git/utils.d.ts} +1 -1
  206. package/dist/git/utils.d.ts.map +1 -0
  207. package/dist/{git-utils.js → git/utils.js} +2 -2
  208. package/dist/git/utils.js.map +1 -0
  209. package/dist/git.d.ts +5 -5
  210. package/dist/git.d.ts.map +1 -1
  211. package/dist/git.js +10 -10
  212. package/dist/git.js.map +1 -1
  213. package/dist/guard-engine.d.ts +3 -2
  214. package/dist/guard-engine.d.ts.map +1 -1
  215. package/dist/guard-engine.js +2 -2
  216. package/dist/guard-engine.js.map +1 -1
  217. package/dist/install-probe-tick.d.ts +63 -0
  218. package/dist/install-probe-tick.d.ts.map +1 -0
  219. package/dist/install-probe-tick.js +137 -0
  220. package/dist/install-probe-tick.js.map +1 -0
  221. package/dist/install-probe.d.ts +115 -0
  222. package/dist/install-probe.d.ts.map +1 -0
  223. package/dist/install-probe.js +197 -0
  224. package/dist/install-probe.js.map +1 -0
  225. package/dist/listener-auto-advance.d.ts.map +1 -1
  226. package/dist/listener-auto-advance.js +31 -0
  227. package/dist/listener-auto-advance.js.map +1 -1
  228. package/dist/listener.js +5 -5
  229. package/dist/listener.js.map +1 -1
  230. package/dist/{loop-context-audit-pass.d.ts → loops/context-audit-pass.d.ts} +4 -4
  231. package/dist/loops/context-audit-pass.d.ts.map +1 -0
  232. package/dist/{loop-context-audit-pass.js → loops/context-audit-pass.js} +7 -7
  233. package/dist/loops/context-audit-pass.js.map +1 -0
  234. package/dist/{loop-engine-types.d.ts → loops/engine-types.d.ts} +1 -1
  235. package/dist/loops/engine-types.d.ts.map +1 -0
  236. package/dist/{loop-engine-types.js → loops/engine-types.js} +1 -1
  237. package/dist/loops/engine-types.js.map +1 -0
  238. package/dist/{loop-engine.d.ts → loops/engine.d.ts} +6 -6
  239. package/dist/loops/engine.d.ts.map +1 -0
  240. package/dist/{loop-engine.js → loops/engine.js} +13 -13
  241. package/dist/loops/engine.js.map +1 -0
  242. package/dist/{loop-event-bus.d.ts → loops/event-bus.d.ts} +1 -1
  243. package/dist/loops/event-bus.d.ts.map +1 -0
  244. package/dist/{loop-event-bus.js → loops/event-bus.js} +1 -1
  245. package/dist/loops/event-bus.js.map +1 -0
  246. package/dist/loops/index.d.ts +33 -0
  247. package/dist/loops/index.d.ts.map +1 -0
  248. package/dist/loops/index.js +32 -0
  249. package/dist/loops/index.js.map +1 -0
  250. package/dist/{loop-llm-client.d.ts → loops/llm-client.d.ts} +3 -3
  251. package/dist/loops/llm-client.d.ts.map +1 -0
  252. package/dist/{loop-llm-client.js → loops/llm-client.js} +3 -3
  253. package/dist/loops/llm-client.js.map +1 -0
  254. package/dist/{loop-llm-flag.d.ts → loops/llm-flag.d.ts} +1 -1
  255. package/dist/loops/llm-flag.d.ts.map +1 -0
  256. package/dist/{loop-llm-flag.js → loops/llm-flag.js} +1 -1
  257. package/dist/loops/llm-flag.js.map +1 -0
  258. package/dist/{loop-operational-block.d.ts → loops/operational-block.d.ts} +1 -1
  259. package/dist/loops/operational-block.d.ts.map +1 -0
  260. package/dist/{loop-operational-block.js → loops/operational-block.js} +1 -1
  261. package/dist/loops/operational-block.js.map +1 -0
  262. package/dist/{loop-prompt-builder.d.ts → loops/prompt-builder.d.ts} +2 -2
  263. package/dist/loops/prompt-builder.d.ts.map +1 -0
  264. package/dist/{loop-prompt-builder.js → loops/prompt-builder.js} +1 -1
  265. package/dist/loops/prompt-builder.js.map +1 -0
  266. package/dist/{loop-variance.d.ts → loops/variance.d.ts} +1 -1
  267. package/dist/loops/variance.d.ts.map +1 -0
  268. package/dist/{loop-variance.js → loops/variance.js} +1 -1
  269. package/dist/loops/variance.js.map +1 -0
  270. package/dist/merge-back-loop.d.ts.map +1 -1
  271. package/dist/merge-back-loop.js +4 -3
  272. package/dist/merge-back-loop.js.map +1 -1
  273. package/dist/merge-detector.js +2 -2
  274. package/dist/merge-detector.js.map +1 -1
  275. package/dist/{nexus-endpoint-clearance.d.ts → nexus/endpoint-clearance.d.ts} +2 -2
  276. package/dist/nexus/endpoint-clearance.d.ts.map +1 -0
  277. package/dist/{nexus-endpoint-clearance.js → nexus/endpoint-clearance.js} +2 -2
  278. package/dist/nexus/endpoint-clearance.js.map +1 -0
  279. package/dist/{nexus-escalation-bridge.d.ts → nexus/escalation-bridge.d.ts} +1 -1
  280. package/dist/nexus/escalation-bridge.d.ts.map +1 -0
  281. package/dist/{nexus-escalation-bridge.js → nexus/escalation-bridge.js} +2 -2
  282. package/dist/nexus/escalation-bridge.js.map +1 -0
  283. package/dist/{nexus-incoming.d.ts → nexus/incoming.d.ts} +2 -2
  284. package/dist/nexus/incoming.d.ts.map +1 -0
  285. package/dist/{nexus-incoming.js → nexus/incoming.js} +2 -2
  286. package/dist/nexus/incoming.js.map +1 -0
  287. package/dist/nexus/index.d.ts +20 -0
  288. package/dist/nexus/index.d.ts.map +1 -0
  289. package/dist/nexus/index.js +20 -0
  290. package/dist/nexus/index.js.map +1 -0
  291. package/dist/{nexus-intake-spawn.d.ts → nexus/intake-spawn.d.ts} +3 -3
  292. package/dist/nexus/intake-spawn.d.ts.map +1 -0
  293. package/dist/{nexus-intake-spawn.js → nexus/intake-spawn.js} +1 -1
  294. package/dist/nexus/intake-spawn.js.map +1 -0
  295. package/dist/{nexus-intake.d.ts → nexus/intake.d.ts} +2 -2
  296. package/dist/nexus/intake.d.ts.map +1 -0
  297. package/dist/{nexus-intake.js → nexus/intake.js} +4 -4
  298. package/dist/nexus/intake.js.map +1 -0
  299. package/dist/{nexus-return.d.ts → nexus/return.d.ts} +3 -3
  300. package/dist/nexus/return.d.ts.map +1 -0
  301. package/dist/{nexus-return.js → nexus/return.js} +4 -4
  302. package/dist/nexus/return.js.map +1 -0
  303. package/dist/otlp/index.d.ts +19 -0
  304. package/dist/otlp/index.d.ts.map +1 -0
  305. package/dist/otlp/index.js +19 -0
  306. package/dist/otlp/index.js.map +1 -0
  307. package/dist/{otlp-log-parser.d.ts → otlp/log-parser.d.ts} +2 -2
  308. package/dist/otlp/log-parser.d.ts.map +1 -0
  309. package/dist/{otlp-log-parser.js → otlp/log-parser.js} +5 -6
  310. package/dist/otlp/log-parser.js.map +1 -0
  311. package/dist/{otlp-metric-parser.d.ts → otlp/metric-parser.d.ts} +2 -2
  312. package/dist/otlp/metric-parser.d.ts.map +1 -0
  313. package/dist/{otlp-metric-parser.js → otlp/metric-parser.js} +4 -5
  314. package/dist/otlp/metric-parser.js.map +1 -0
  315. package/dist/{otlp-port-manager.d.ts → otlp/port-manager.d.ts} +1 -1
  316. package/dist/otlp/port-manager.d.ts.map +1 -0
  317. package/dist/{otlp-port-manager.js → otlp/port-manager.js} +1 -1
  318. package/dist/otlp/port-manager.js.map +1 -0
  319. package/dist/{otlp-receiver.d.ts → otlp/receiver.d.ts} +2 -2
  320. package/dist/otlp/receiver.d.ts.map +1 -0
  321. package/dist/{otlp-receiver.js → otlp/receiver.js} +5 -33
  322. package/dist/otlp/receiver.js.map +1 -0
  323. package/dist/{otlp-types.d.ts → otlp/types.d.ts} +1 -9
  324. package/dist/otlp/types.d.ts.map +1 -0
  325. package/dist/{otlp-types.js → otlp/types.js} +1 -27
  326. package/dist/otlp/types.js.map +1 -0
  327. package/dist/pipeline-config.d.ts +1 -1
  328. package/dist/{prd-controller.d.ts → prd/controller.d.ts} +7 -7
  329. package/dist/prd/controller.d.ts.map +1 -0
  330. package/dist/{prd-controller.js → prd/controller.js} +11 -11
  331. package/dist/prd/controller.js.map +1 -0
  332. package/dist/{prd-divergence.d.ts → prd/divergence.d.ts} +2 -2
  333. package/dist/prd/divergence.d.ts.map +1 -0
  334. package/dist/{prd-divergence.js → prd/divergence.js} +1 -1
  335. package/dist/prd/divergence.js.map +1 -0
  336. package/dist/{prd-focus-pushdown.d.ts → prd/focus-pushdown.d.ts} +2 -2
  337. package/dist/prd/focus-pushdown.d.ts.map +1 -0
  338. package/dist/{prd-focus-pushdown.js → prd/focus-pushdown.js} +3 -3
  339. package/dist/prd/focus-pushdown.js.map +1 -0
  340. package/dist/{prd-frontier.d.ts → prd/frontier.d.ts} +2 -2
  341. package/dist/prd/frontier.d.ts.map +1 -0
  342. package/dist/{prd-frontier.js → prd/frontier.js} +1 -1
  343. package/dist/prd/frontier.js.map +1 -0
  344. package/dist/prd/index.d.ts +26 -0
  345. package/dist/prd/index.d.ts.map +1 -0
  346. package/dist/prd/index.js +25 -0
  347. package/dist/prd/index.js.map +1 -0
  348. package/dist/{prd-steward.d.ts → prd/steward.d.ts} +4 -4
  349. package/dist/prd/steward.d.ts.map +1 -0
  350. package/dist/{prd-steward.js → prd/steward.js} +4 -4
  351. package/dist/prd/steward.js.map +1 -0
  352. package/dist/{prd-viability.d.ts → prd/viability.d.ts} +2 -2
  353. package/dist/prd/viability.d.ts.map +1 -0
  354. package/dist/{prd-viability.js → prd/viability.js} +1 -1
  355. package/dist/prd/viability.js.map +1 -0
  356. package/dist/product-scaffold.js +2 -2
  357. package/dist/product-scaffold.js.map +1 -1
  358. package/dist/prompt-contradictions.d.ts +55 -0
  359. package/dist/prompt-contradictions.d.ts.map +1 -0
  360. package/dist/prompt-contradictions.js +114 -0
  361. package/dist/prompt-contradictions.js.map +1 -0
  362. package/dist/prompt-listing.d.ts +19 -0
  363. package/dist/prompt-listing.d.ts.map +1 -1
  364. package/dist/prompt-listing.js +49 -0
  365. package/dist/prompt-listing.js.map +1 -1
  366. package/dist/prompt-sections/execution-sections.d.ts +3 -2
  367. package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
  368. package/dist/prompt-sections/execution-sections.js +70 -97
  369. package/dist/prompt-sections/execution-sections.js.map +1 -1
  370. package/dist/prompt-sections/persona-sections.d.ts +12 -0
  371. package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
  372. package/dist/prompt-sections/persona-sections.js +29 -2
  373. package/dist/prompt-sections/persona-sections.js.map +1 -1
  374. package/dist/prompt-sections/role-sections.js +2 -2
  375. package/dist/prompt-sections/role-sections.js.map +1 -1
  376. package/dist/queries/context-assembly.d.ts +14 -4
  377. package/dist/queries/context-assembly.d.ts.map +1 -1
  378. package/dist/queries/context-assembly.js +14 -4
  379. package/dist/queries/context-assembly.js.map +1 -1
  380. package/dist/queries/context-lock-queries.js +1 -1
  381. package/dist/queries/context-lock-queries.js.map +1 -1
  382. package/dist/queries/deliveries.d.ts +45 -0
  383. package/dist/queries/deliveries.d.ts.map +1 -1
  384. package/dist/queries/deliveries.js +2 -0
  385. package/dist/queries/deliveries.js.map +1 -1
  386. package/dist/queries/focuses.d.ts +17 -7
  387. package/dist/queries/focuses.d.ts.map +1 -1
  388. package/dist/queries/focuses.js +27 -9
  389. package/dist/queries/focuses.js.map +1 -1
  390. package/dist/queries/index.d.ts +1 -1
  391. package/dist/queries/index.d.ts.map +1 -1
  392. package/dist/queries/index.js +1 -1
  393. package/dist/queries/index.js.map +1 -1
  394. package/dist/queries/schemas.d.ts +4 -0
  395. package/dist/queries/schemas.d.ts.map +1 -1
  396. package/dist/queries/schemas.js +8 -0
  397. package/dist/queries/schemas.js.map +1 -1
  398. package/dist/reality-pole.js +1 -1
  399. package/dist/resolvers/escalation-answers.d.ts +40 -0
  400. package/dist/resolvers/escalation-answers.d.ts.map +1 -1
  401. package/dist/resolvers/escalation-answers.js +54 -35
  402. package/dist/resolvers/escalation-answers.js.map +1 -1
  403. package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
  404. package/dist/resolvers/git-diff-against-base.js +4 -1
  405. package/dist/resolvers/git-diff-against-base.js.map +1 -1
  406. package/dist/resolvers/prd-context.js +1 -1
  407. package/dist/resolvers/shared/wiki.d.ts +27 -0
  408. package/dist/resolvers/shared/wiki.d.ts.map +1 -1
  409. package/dist/resolvers/shared/wiki.js +39 -0
  410. package/dist/resolvers/shared/wiki.js.map +1 -1
  411. package/dist/sensor-sweep.js +1 -1
  412. package/dist/spawn/delivered-manifest.d.ts +42 -0
  413. package/dist/spawn/delivered-manifest.d.ts.map +1 -0
  414. package/dist/spawn/delivered-manifest.js +64 -0
  415. package/dist/spawn/delivered-manifest.js.map +1 -0
  416. package/dist/spawn/model-routing.d.ts +277 -0
  417. package/dist/spawn/model-routing.d.ts.map +1 -0
  418. package/dist/spawn/model-routing.js +464 -0
  419. package/dist/spawn/model-routing.js.map +1 -0
  420. package/dist/spawn/process-spawn.d.ts +137 -0
  421. package/dist/spawn/process-spawn.d.ts.map +1 -0
  422. package/dist/spawn/process-spawn.js +385 -0
  423. package/dist/spawn/process-spawn.js.map +1 -0
  424. package/dist/spawn/prompt-assembly.d.ts +170 -0
  425. package/dist/spawn/prompt-assembly.d.ts.map +1 -0
  426. package/dist/spawn/prompt-assembly.js +272 -0
  427. package/dist/spawn/prompt-assembly.js.map +1 -0
  428. package/dist/spawn/shared.d.ts +96 -0
  429. package/dist/spawn/shared.d.ts.map +1 -0
  430. package/dist/spawn/shared.js +14 -0
  431. package/dist/spawn/shared.js.map +1 -0
  432. package/dist/spawn/spawn-decision.d.ts +239 -0
  433. package/dist/spawn/spawn-decision.d.ts.map +1 -0
  434. package/dist/spawn/spawn-decision.js +437 -0
  435. package/dist/spawn/spawn-decision.js.map +1 -0
  436. package/dist/spawn/worktree-session.d.ts +105 -0
  437. package/dist/spawn/worktree-session.d.ts.map +1 -0
  438. package/dist/spawn/worktree-session.js +216 -0
  439. package/dist/spawn/worktree-session.js.map +1 -0
  440. package/dist/spawner/lifecycle.js +5 -5
  441. package/dist/spawner/lifecycle.js.map +1 -1
  442. package/dist/spawner/resolution.js +4 -4
  443. package/dist/spawner/resolution.js.map +1 -1
  444. package/dist/stall-detector-config.d.ts +4 -0
  445. package/dist/stall-detector-config.d.ts.map +1 -1
  446. package/dist/stall-detector-config.js +6 -0
  447. package/dist/stall-detector-config.js.map +1 -1
  448. package/dist/state-cascade.js +1 -1
  449. package/dist/state-cascade.js.map +1 -1
  450. package/dist/trigger-executor.d.ts +5 -9
  451. package/dist/trigger-executor.d.ts.map +1 -1
  452. package/dist/trigger-executor.js +14 -36
  453. package/dist/trigger-executor.js.map +1 -1
  454. package/dist/types/config.d.ts +44 -0
  455. package/dist/types/config.d.ts.map +1 -1
  456. package/dist/types/focus.d.ts +13 -0
  457. package/dist/types/focus.d.ts.map +1 -1
  458. package/dist/types/workflow.d.ts +1 -3
  459. package/dist/types/workflow.d.ts.map +1 -1
  460. package/dist/unified-engine-lifecycle.js +1 -1
  461. package/dist/unified-init.d.ts +3 -3
  462. package/dist/unified-init.d.ts.map +1 -1
  463. package/dist/unified-init.js +9 -25
  464. package/dist/unified-init.js.map +1 -1
  465. package/dist/unified-shell.d.ts +3 -3
  466. package/dist/unified-shell.js +4 -4
  467. package/dist/unified-shell.js.map +1 -1
  468. package/dist/verification-baseline.d.ts +112 -0
  469. package/dist/verification-baseline.d.ts.map +1 -0
  470. package/dist/verification-baseline.js +264 -0
  471. package/dist/verification-baseline.js.map +1 -0
  472. package/dist/verification-config.d.ts +53 -0
  473. package/dist/verification-config.d.ts.map +1 -0
  474. package/dist/verification-config.js +72 -0
  475. package/dist/verification-config.js.map +1 -0
  476. package/dist/verification-default-on.d.ts +87 -0
  477. package/dist/verification-default-on.d.ts.map +1 -0
  478. package/dist/verification-default-on.js +186 -0
  479. package/dist/verification-default-on.js.map +1 -0
  480. package/dist/verification-deterministic.d.ts +56 -0
  481. package/dist/verification-deterministic.d.ts.map +1 -0
  482. package/dist/verification-deterministic.js +123 -0
  483. package/dist/verification-deterministic.js.map +1 -0
  484. package/dist/verification-engine.d.ts +22 -15
  485. package/dist/verification-engine.d.ts.map +1 -1
  486. package/dist/verification-engine.js +94 -65
  487. package/dist/verification-engine.js.map +1 -1
  488. package/dist/verification-failure-parser.d.ts +48 -0
  489. package/dist/verification-failure-parser.d.ts.map +1 -0
  490. package/dist/verification-failure-parser.js +102 -0
  491. package/dist/verification-failure-parser.js.map +1 -0
  492. package/dist/verification-feedback.d.ts +58 -0
  493. package/dist/verification-feedback.d.ts.map +1 -0
  494. package/dist/verification-feedback.js +110 -0
  495. package/dist/verification-feedback.js.map +1 -0
  496. package/dist/{worktree-focus.d.ts → worktree/focus.d.ts} +2 -2
  497. package/dist/worktree/focus.d.ts.map +1 -0
  498. package/dist/{worktree-focus.js → worktree/focus.js} +7 -7
  499. package/dist/worktree/focus.js.map +1 -0
  500. package/dist/worktree/index.d.ts +16 -0
  501. package/dist/worktree/index.d.ts.map +1 -0
  502. package/dist/worktree/index.js +16 -0
  503. package/dist/worktree/index.js.map +1 -0
  504. package/dist/{worktree-safety.d.ts → worktree/safety.d.ts} +1 -1
  505. package/dist/worktree/safety.d.ts.map +1 -0
  506. package/dist/{worktree-safety.js → worktree/safety.js} +2 -2
  507. package/dist/worktree/safety.js.map +1 -0
  508. package/dist/{worktree-state.d.ts → worktree/state.d.ts} +1 -1
  509. package/dist/worktree/state.d.ts.map +1 -0
  510. package/dist/{worktree-state.js → worktree/state.js} +6 -6
  511. package/dist/worktree/state.js.map +1 -0
  512. package/dist/worktree.d.ts +1 -1
  513. package/dist/worktree.js +5 -5
  514. package/dist/worktree.js.map +1 -1
  515. package/package.json +5 -4
  516. package/dist/git-activity.d.ts.map +0 -1
  517. package/dist/git-activity.js.map +0 -1
  518. package/dist/git-branch.d.ts.map +0 -1
  519. package/dist/git-branch.js.map +0 -1
  520. package/dist/git-fetch.d.ts.map +0 -1
  521. package/dist/git-fetch.js.map +0 -1
  522. package/dist/git-genesis.d.ts.map +0 -1
  523. package/dist/git-genesis.js.map +0 -1
  524. package/dist/git-integration.d.ts.map +0 -1
  525. package/dist/git-integration.js.map +0 -1
  526. package/dist/git-merge-helpers.d.ts.map +0 -1
  527. package/dist/git-merge-helpers.js.map +0 -1
  528. package/dist/git-merge-lock.d.ts.map +0 -1
  529. package/dist/git-merge-lock.js.map +0 -1
  530. package/dist/git-merge-strategies.d.ts.map +0 -1
  531. package/dist/git-merge-strategies.js.map +0 -1
  532. package/dist/git-merge.d.ts.map +0 -1
  533. package/dist/git-merge.js.map +0 -1
  534. package/dist/git-state-detector.d.ts.map +0 -1
  535. package/dist/git-state-detector.js.map +0 -1
  536. package/dist/git-types.d.ts.map +0 -1
  537. package/dist/git-types.js.map +0 -1
  538. package/dist/git-utils.d.ts.map +0 -1
  539. package/dist/git-utils.js.map +0 -1
  540. package/dist/loop-context-audit-pass.d.ts.map +0 -1
  541. package/dist/loop-context-audit-pass.js.map +0 -1
  542. package/dist/loop-engine-types.d.ts.map +0 -1
  543. package/dist/loop-engine-types.js.map +0 -1
  544. package/dist/loop-engine.d.ts.map +0 -1
  545. package/dist/loop-engine.js.map +0 -1
  546. package/dist/loop-event-bus.d.ts.map +0 -1
  547. package/dist/loop-event-bus.js.map +0 -1
  548. package/dist/loop-llm-client.d.ts.map +0 -1
  549. package/dist/loop-llm-client.js.map +0 -1
  550. package/dist/loop-llm-flag.d.ts.map +0 -1
  551. package/dist/loop-llm-flag.js.map +0 -1
  552. package/dist/loop-operational-block.d.ts.map +0 -1
  553. package/dist/loop-operational-block.js.map +0 -1
  554. package/dist/loop-prompt-builder.d.ts.map +0 -1
  555. package/dist/loop-prompt-builder.js.map +0 -1
  556. package/dist/loop-variance.d.ts.map +0 -1
  557. package/dist/loop-variance.js.map +0 -1
  558. package/dist/nexus-endpoint-clearance.d.ts.map +0 -1
  559. package/dist/nexus-endpoint-clearance.js.map +0 -1
  560. package/dist/nexus-escalation-bridge.d.ts.map +0 -1
  561. package/dist/nexus-escalation-bridge.js.map +0 -1
  562. package/dist/nexus-incoming.d.ts.map +0 -1
  563. package/dist/nexus-incoming.js.map +0 -1
  564. package/dist/nexus-intake-spawn.d.ts.map +0 -1
  565. package/dist/nexus-intake-spawn.js.map +0 -1
  566. package/dist/nexus-intake.d.ts.map +0 -1
  567. package/dist/nexus-intake.js.map +0 -1
  568. package/dist/nexus-return.d.ts.map +0 -1
  569. package/dist/nexus-return.js.map +0 -1
  570. package/dist/otlp-log-parser.d.ts.map +0 -1
  571. package/dist/otlp-log-parser.js.map +0 -1
  572. package/dist/otlp-metric-parser.d.ts.map +0 -1
  573. package/dist/otlp-metric-parser.js.map +0 -1
  574. package/dist/otlp-port-manager.d.ts.map +0 -1
  575. package/dist/otlp-port-manager.js.map +0 -1
  576. package/dist/otlp-receiver.d.ts.map +0 -1
  577. package/dist/otlp-receiver.js.map +0 -1
  578. package/dist/otlp-types.d.ts.map +0 -1
  579. package/dist/otlp-types.js.map +0 -1
  580. package/dist/prd-controller.d.ts.map +0 -1
  581. package/dist/prd-controller.js.map +0 -1
  582. package/dist/prd-divergence.d.ts.map +0 -1
  583. package/dist/prd-divergence.js.map +0 -1
  584. package/dist/prd-focus-pushdown.d.ts.map +0 -1
  585. package/dist/prd-focus-pushdown.js.map +0 -1
  586. package/dist/prd-frontier.d.ts.map +0 -1
  587. package/dist/prd-frontier.js.map +0 -1
  588. package/dist/prd-steward.d.ts.map +0 -1
  589. package/dist/prd-steward.js.map +0 -1
  590. package/dist/prd-viability.d.ts.map +0 -1
  591. package/dist/prd-viability.js.map +0 -1
  592. package/dist/worktree-focus.d.ts.map +0 -1
  593. package/dist/worktree-focus.js.map +0 -1
  594. package/dist/worktree-safety.d.ts.map +0 -1
  595. package/dist/worktree-safety.js.map +0 -1
  596. package/dist/worktree-state.d.ts.map +0 -1
  597. package/dist/worktree-state.js.map +0 -1
@@ -0,0 +1,437 @@
1
+ /**
2
+ * Spawn-decision seam for the focus-team spawn path.
3
+ *
4
+ * Extracted verbatim from focus-executor.ts (behavior-preserving): the
5
+ * rank-ordered pre-spawn guard (findActionableDeliveries), the Phase 1 context
6
+ * fetch (fetchSpawnContext), the Phase 2 actionable-delivery resolution
7
+ * (resolveActionableDeliveries), and the Phase A directive-or-fallback resolver
8
+ * (resolveDirectiveOrFallback) -- plus the SpawnFocusTeamParams input contract
9
+ * and the DEFAULT_LOOP_CONTEXT_RECIPE these consume. focus-executor.ts
10
+ * re-exports this surface for backward compatibility, so external importers keep
11
+ * resolving these symbols from '../focus-executor.js'.
12
+ *
13
+ * Cycle rule: this module must NOT import from '../focus-executor.js'.
14
+ */
15
+ import { getActiveFocuses, } from '../supabase.js';
16
+ import { getFocusDeliveries, getFocusIssues, getProductDeploymentProfileSnapshot, fetchFocusWorkflow, } from '../queries/focuses.js';
17
+ import { consumePendingSpawnDirective, assembleDirectiveContentWithManifest, syncFocusPhase, isAgentlessDirective, } from '../directive-executor.js';
18
+ import { resolveAssemblyRecipeWithManifest } from '../assembly-engine.js';
19
+ import { resolveAnsweredEscalations } from '../resolvers/escalation-answers.js';
20
+ import { resolveLineageSpec, resolveResumeId } from '../session-lineage.js';
21
+ import { resolveScopingSpawnResume } from './prompt-assembly.js';
22
+ import { resolveFocusMilestoneContext } from '../prd/index.js';
23
+ import { isStatusAgentActionable, isStatusBlocking } from '../stage-classifier.js';
24
+ /**
25
+ * Default loop-context assembly recipe for a focus-team spawn.
26
+ *
27
+ * Composed once per spawn into the team prompt. `focus.endpoint_catalog`
28
+ * is placed right after `focus.injections` so the exposed/consumed endpoint
29
+ * catalog reads alongside the tree context -- surfacing cross-product
30
+ * interrelations at scoping time (shift-left) so a dependency on another
31
+ * product can be mapped into the reality tree as an externally-owned obstacle
32
+ * rather than surfacing reactively as a blocked_by_external escalation.
33
+ */
34
+ export const DEFAULT_LOOP_CONTEXT_RECIPE = [
35
+ 'loop.context',
36
+ 'focus.injections',
37
+ 'focus.endpoint_catalog',
38
+ ];
39
+ /**
40
+ * Pre-spawn guard: rank-ordered walk that collects every agent-actionable
41
+ * delivery into the spawn set.
42
+ *
43
+ * "Actionable" and "blocking" are independent properties of a status:
44
+ *
45
+ * - actionable = `isStatusAgentActionable(status)` -- queued | coding |
46
+ * verify_failed. Work the team can pick up.
47
+ * - blocking = `isStatusBlocking(status)` -- statuses that gate
48
+ * subsequent ranks (queued, coding, planning, paused).
49
+ *
50
+ * A delivery may be actionable and blocking (queued, coding -- the common
51
+ * case), actionable and non-blocking (`verify_failed` -- has remediation
52
+ * work from a review pass, but the next-ranked queued delivery should not
53
+ * wait on it), or non-actionable and blocking (planning, paused -- gates
54
+ * the queue and the team has nothing to do here).
55
+ *
56
+ * Walk semantics:
57
+ * - Collect every actionable delivery into the spawn set.
58
+ * - Stop the walk when we hit the first blocking-and-not-actionable status
59
+ * (planning, paused). Lower-ranked deliveries past this point are gated.
60
+ * - Skip past non-blocking non-actionable statuses (done, cancelled, verify)
61
+ * without breaking the walk.
62
+ *
63
+ * Returns:
64
+ * - 'planning' when the focus has zero deliveries (agent will scope them).
65
+ * - 'execute' with the collected actionable deliveries.
66
+ * - 'skip' when the walk found zero actionable deliveries.
67
+ *
68
+ * Why verify_failed must be in the spawn set: the auto-review loop
69
+ * routes a delivery from `verify` -> `verify_failed` when the review
70
+ * agent finds remediation work, clears `review_requested_at`, and emits a
71
+ * `review_completed` loop trigger. The next poll re-derives phase from
72
+ * `ACTIVE_STATUSES` (which includes verify_failed), so the focus is
73
+ * eligible to spawn. If this guard then skips past `verify_failed`, no
74
+ * team ever picks up the remediation issues and the loop dies after the
75
+ * first pass. See delivery ac5c69f7.
76
+ */
77
+ export function findActionableDeliveries(deliveries, focusName) {
78
+ if (deliveries.length === 0) {
79
+ return { kind: 'planning' };
80
+ }
81
+ const actionable = [];
82
+ for (const d of deliveries) {
83
+ const status = d.executionStatus ?? '';
84
+ if (isStatusAgentActionable(status)) {
85
+ actionable.push(d);
86
+ continue;
87
+ }
88
+ if (isStatusBlocking(status)) {
89
+ console.log(`[focus-executor] Delivery "${d.name}" (rank ${d.priorityRank}) ` +
90
+ `is in "${status}" state -- blocking subsequent deliveries in focus "${focusName}"`);
91
+ break;
92
+ }
93
+ // non-blocking + non-actionable (done, cancelled, verify):
94
+ // skip past without gating
95
+ }
96
+ if (actionable.length === 0) {
97
+ console.log(`[focus-executor] No actionable deliveries for focus "${focusName}" -- skipping spawn`);
98
+ return { kind: 'skip' };
99
+ }
100
+ return { kind: 'execute', deliveries: actionable };
101
+ }
102
+ /**
103
+ * Phase 1: fetch all spawn context (deliveries / issues / product-context /
104
+ * deployment-profile / loop-context) in one Promise.all, then resolve the PRD
105
+ * milestone push-down. Returns null when the context fetch rejects -- the
106
+ * caller treats null as "tear down the freshly-inserted team and return"
107
+ * (activeTeams.delete). The PRD push-down deliberately propagates on throw,
108
+ * matching the pre-extraction behavior (it sits after the try/catch).
109
+ *
110
+ * Behavior-preserving extraction of the original inline block; the log lines,
111
+ * the deployment-profile .catch fallback, the loop-context try/catch fallback,
112
+ * and the manifest accumulation order are byte-identical.
113
+ */
114
+ export async function fetchSpawnContext(config, focusId, focusName) {
115
+ // Accumulates the assembly manifest (one entry per resolved source) across
116
+ // every recipe composed for this spawn, persisted after the session exists.
117
+ const assemblyManifest = [];
118
+ // Fetch deliveries, issues, deployment profile, and the first-class
119
+ // answered-escalations section (rendered but NOT consumed here -- consumption
120
+ // is deferred to post-dispatch).
121
+ //
122
+ // The DEFAULT_LOOP_CONTEXT_RECIPE (loopContext) is NOT resolved here: its
123
+ // rendered output is emitted only by the legacy buildFocusTeamPrompt, so on the
124
+ // directive path it was a pure dead fetch (and a second focus.injections
125
+ // resolution on top of the directive's own assembly). It is now resolved lazily
126
+ // via resolveLegacyLoopContext, gated on the legacy path (see focus-executor).
127
+ let deliveries;
128
+ let issues;
129
+ let deploymentProfileSnapshot;
130
+ let answeredEscalations;
131
+ try {
132
+ [deliveries, issues, deploymentProfileSnapshot, answeredEscalations] = await Promise.all([
133
+ getFocusDeliveries(focusId),
134
+ getFocusIssues(focusId),
135
+ getProductDeploymentProfileSnapshot(config.productId).catch((err) => {
136
+ console.debug(`[focus-executor] Could not fetch deployment profile snapshot (non-fatal):`, err.message);
137
+ return null;
138
+ }),
139
+ resolveAnsweredEscalations(focusId),
140
+ ]);
141
+ }
142
+ catch (err) {
143
+ console.error(`[focus-executor] Failed to fetch context for focus "${focusName}":`, err.message);
144
+ return null;
145
+ }
146
+ // PRD push-down: if this focus was armed by a PRD, resolve the parent PRD's
147
+ // prd.context (milestone goal/expansion/vision + frontier position) and carry
148
+ // it into the team prompt so the focus inherits coherent milestone intent.
149
+ // Context ONLY -- the steward persona is never pushed to a coder team. A focus
150
+ // not under a PRD yields '' and is unaffected (best-effort, never blocks spawn).
151
+ let prdMilestoneContext = '';
152
+ let prdMilestoneManifest = [];
153
+ {
154
+ const milestoneCtx = {
155
+ focusId,
156
+ deliveryIds: [],
157
+ worktreePath: null,
158
+ config,
159
+ organizationId: config.organizationId,
160
+ productId: config.productId,
161
+ };
162
+ const milestoneResult = await resolveFocusMilestoneContext(focusId, milestoneCtx);
163
+ prdMilestoneContext = milestoneResult.content;
164
+ // Kept SEPARATE (not merged into assemblyManifest): the PRD milestone context
165
+ // is appended to the composed prompt by buildSpawnPrompt, so it is delivered
166
+ // ONLY on the fresh-prompt shapes -- a resume-delta / scoping message drops it.
167
+ // The delivered-manifest assembly (focus-executor) folds it in per shape.
168
+ prdMilestoneManifest = milestoneResult.manifest;
169
+ }
170
+ return { deliveries, issues, deploymentProfileSnapshot, answeredEscalations, prdMilestoneContext, prdMilestoneManifest, assemblyManifest };
171
+ }
172
+ /**
173
+ * Resolve the legacy loop-context recipe (loop.context + focus.injections +
174
+ * focus.endpoint_catalog). Called ONLY on the legacy prompt path
175
+ * (useLegacyFullPrompt), where buildFocusTeamPrompt renders it -- the directive
176
+ * path drops loopContext entirely, so resolving it there was wasted work (and a
177
+ * duplicate focus.injections resolution on top of the directive's own assembly).
178
+ * Fails soft to empty content, never blocking the spawn.
179
+ */
180
+ export async function resolveLegacyLoopContext(config, focusId) {
181
+ try {
182
+ const assemblyCtx = {
183
+ focusId,
184
+ deliveryIds: [],
185
+ worktreePath: null,
186
+ config,
187
+ organizationId: config.organizationId,
188
+ productId: config.productId,
189
+ };
190
+ return await resolveAssemblyRecipeWithManifest(DEFAULT_LOOP_CONTEXT_RECIPE, assemblyCtx);
191
+ }
192
+ catch (err) {
193
+ console.debug(`[focus-executor] Could not fetch loop context (non-fatal):`, err.message);
194
+ return { content: '', manifest: [] };
195
+ }
196
+ }
197
+ /**
198
+ * Phase 2: consume any pending spawn directive, enforce the rank-ordered
199
+ * pre-spawn guard, and record known-delivery bookkeeping on the team state.
200
+ *
201
+ * Mutates `teamState` exactly as the original inline block did
202
+ * (lastConsumedDirectiveHash, sessionType, planningPhase, knownDeliveryIds,
203
+ * deliveryStageIds, mergedDeliveryIds) and emits the same log lines. Returns
204
+ * 'skip' for the findActionableDeliveries skip case (the caller owns the
205
+ * activeTeams.delete + return so the team-state map stays the orchestrator's
206
+ * responsibility). Behavior byte-identical.
207
+ */
208
+ export function resolveActionableDeliveries(args) {
209
+ const { focusId, focusName, deliveries, issues, forceSpawn, teamState } = args;
210
+ // Check for pending spawn directive (e.g., review stage spawn).
211
+ // Record its content hash on team state so the spawn-guard in
212
+ // executeSpawnDirective can detect divergent directives within the 60s
213
+ // skip window.
214
+ const pendingDirective = consumePendingSpawnDirective(focusId);
215
+ if (pendingDirective) {
216
+ teamState.lastConsumedDirectiveHash = pendingDirective.contentHash;
217
+ teamState.sessionType = pendingDirective.sessionType;
218
+ }
219
+ // Pre-spawn guard: enforce rank-ordered execution.
220
+ // Skip when a pending spawn directive exists -- the directive has its own intent.
221
+ let actionableDeliveries = [];
222
+ let isPlanningSpawn = false;
223
+ if (pendingDirective) {
224
+ actionableDeliveries = deliveries.filter(d => isStatusAgentActionable(d.executionStatus ?? ''));
225
+ }
226
+ else if (forceSpawn) {
227
+ // Escalation answer re-arm: spawn to consume a pending answer even when no
228
+ // delivery is actionable. Carry whatever deliveries ARE actionable (usually
229
+ // none -- the focus exited because everything is verify/done); the
230
+ // escalation.answers resolver in the standard recipe injects the answer.
231
+ actionableDeliveries = deliveries.filter(d => isStatusAgentActionable(d.executionStatus ?? ''));
232
+ console.log(`[focus-executor] Focus "${focusName}" force-spawning to consume escalation answer ` +
233
+ `(${actionableDeliveries.length} actionable deliver${actionableDeliveries.length === 1 ? 'y' : 'ies'})`);
234
+ }
235
+ else {
236
+ const decision = findActionableDeliveries(deliveries, focusName);
237
+ if (decision.kind === 'skip') {
238
+ return { kind: 'skip' };
239
+ }
240
+ if (decision.kind === 'planning') {
241
+ isPlanningSpawn = true;
242
+ teamState.planningPhase = true;
243
+ console.log(`[focus-executor] Focus "${focusName}" has no deliveries -- spawning planning team`);
244
+ }
245
+ else {
246
+ actionableDeliveries = decision.deliveries;
247
+ }
248
+ }
249
+ // Track known deliveries, pre-populate already-completed ones.
250
+ // Empty deliveries (planning spawn) yields zero iterations: knownDeliveryIds
251
+ // stays empty until the wake-cycle refresh in handleCompletionEvent picks
252
+ // up MCP-written deliveries, at which point planningPhase is cleared.
253
+ for (const d of deliveries) {
254
+ teamState.knownDeliveryIds.add(d.id);
255
+ teamState.deliveryStageIds.set(d.id, d.currentWorkflowStageId);
256
+ if (!isStatusAgentActionable(d.executionStatus ?? '') && !isStatusBlocking(d.executionStatus ?? '')) {
257
+ teamState.mergedDeliveryIds.add(d.id);
258
+ }
259
+ }
260
+ if (isPlanningSpawn) {
261
+ console.log(` Deliveries: 0 (planning required)`);
262
+ }
263
+ else {
264
+ console.log(` Deliveries: ${deliveries.length} (${actionableDeliveries.length} queued)`);
265
+ }
266
+ console.log(` Issues: ${issues.length}`);
267
+ return { kind: 'proceed', pendingDirective, actionableDeliveries, isPlanningSpawn };
268
+ }
269
+ /**
270
+ * Phase A: resolve the team-lead directive body + spawn metadata (no prompt
271
+ * yet). Priority: pending spawn directive > current-stage directive > legacy
272
+ * full prompt. Pushes any assembled directive manifest entries onto the shared
273
+ * `assemblyManifest` accumulator.
274
+ *
275
+ * Behavior-preserving extraction of the original inline Phase A block -- the
276
+ * "Using pending spawn directive" / "Using stage directive" log lines, the
277
+ * "LEGACY PROMPT FALLBACK" warning and every fallbackReason string, and the
278
+ * directive-manifest accumulation are byte-identical.
279
+ */
280
+ /**
281
+ * Will the composed directive body actually be SENT on this spawn?
282
+ *
283
+ * buildSpawnMessage sends the full composed prompt (which carries the directive
284
+ * body) ONLY on a fresh spawn -- not scoping, no resume id. A forced-fresh
285
+ * scoping spawn sends role-framework + scoping directive, and a resume sends an
286
+ * incremental delta; both discard the directive body. So this returns false for
287
+ * those two shapes, letting resolveDirectiveOrFallback skip the body's expensive
288
+ * assembly recipe (INJ-D). Pure -- mirrors buildSpawnMessage's shape selection
289
+ * (resolveScopingSpawnResume + resolveResumeId) so the skip is unit-testable
290
+ * without a live spawn.
291
+ */
292
+ export function willSendDirectiveBody(args) {
293
+ const spec = resolveLineageSpec({ declared: args.declared, stageName: args.stageName });
294
+ const rawResumeId = resolveResumeId({
295
+ sessionMap: args.claudeSessionIds ?? null,
296
+ lineage: spec.lineage,
297
+ continuity: spec.continuity,
298
+ });
299
+ const { isScopingSpawn } = resolveScopingSpawnResume({
300
+ readOnly: args.readOnly, deliveries: args.deliveries, issues: args.issues, resumeId: rawResumeId,
301
+ });
302
+ return !isScopingSpawn && rawResumeId == null;
303
+ }
304
+ export async function resolveDirectiveOrFallback(args) {
305
+ const { config, focusId, focusName, worktreePath, pendingDirective, assemblyManifest, claudeSessionIds, deliveries, issues, readOnly } = args;
306
+ let directiveBody = null; // appended after the role framework
307
+ let useLegacyFullPrompt = false; // legacy full prompt (no directive)
308
+ let directiveModel = null;
309
+ // Stage directive engine + local-model (Workflow layer of the unified
310
+ // precedence for those two axes); null when the stage pins neither.
311
+ let directiveEngine = null;
312
+ let directiveLocalModel = null;
313
+ // Focus override snapshotted on the pending directive (respawn path only).
314
+ let pendingFocusOverrideModel = null;
315
+ // Workflow stage active at spawn -- stamped onto telemetry as the .stage lever.
316
+ let spawnStageName = null;
317
+ // Lineage + continuity declared by whatever is firing this spawn (pending
318
+ // directive, current stage directive, or none). Resolved uniformly later
319
+ // (INJ-B). For a pending directive these are already resolved upstream, so
320
+ // resolveLineageSpec is idempotent.
321
+ let spawnDirectiveDeclared = null;
322
+ if (pendingDirective && pendingDirective.message.trim()) {
323
+ // Spawn directive from directive-executor (e.g., review stage transition)
324
+ directiveBody = pendingDirective.message;
325
+ directiveModel = pendingDirective.model;
326
+ directiveEngine = pendingDirective.engine ?? null;
327
+ directiveLocalModel = pendingDirective.localModel ?? null;
328
+ pendingFocusOverrideModel = pendingDirective.focusOverrideModel;
329
+ spawnStageName = pendingDirective.sessionType === 'review' ? 'reviewing' : null;
330
+ spawnDirectiveDeclared = { lineage: pendingDirective.lineage, continuity: pendingDirective.continuity };
331
+ console.log(`[focus-executor] Using pending spawn directive for "${focusName}" ` +
332
+ `(${pendingDirective.message.length} chars directive, model: ${directiveModel ?? 'default'})`);
333
+ }
334
+ else {
335
+ // Sync the focus's execution phase from its delivery aggregate, then
336
+ // assemble the matching stage directive. Every focus workflow stage is
337
+ // expected to carry an agent_directive (populated by migration
338
+ // 20260503140420_focus_phase_directives); the legacy hardcoded prompt
339
+ // path below is a safety net that should not fire under normal
340
+ // operation. When it does fire, the warning identifies which guard
341
+ // tripped so the gap can be fixed.
342
+ let stageDirectiveContent = null;
343
+ let stageDirectiveModel = null;
344
+ let fallbackReason = null;
345
+ // True when the stage HAS a usable directive but its content assembly is
346
+ // skipped because the sent message will discard the body (resume-delta /
347
+ // scoping). Distinct from the legacy-fallback path: metadata is resolved, the
348
+ // body is simply not needed -- do NOT flip to the legacy full prompt.
349
+ let directiveContentSkipped = false;
350
+ try {
351
+ const activeFocuses = await getActiveFocuses(config.organizationId, config.productId);
352
+ const focusRecord = activeFocuses.find(s => s.focus_id === focusId);
353
+ const syncedStageId = focusRecord
354
+ ? await syncFocusPhase(focusRecord)
355
+ : null;
356
+ const workflow = await fetchFocusWorkflow(focusId);
357
+ const currentStage = syncedStageId
358
+ ? workflow.stages.find(s => s.id === syncedStageId)
359
+ : workflow.stages.find(s => s.is_initial);
360
+ if (!currentStage) {
361
+ fallbackReason = syncedStageId
362
+ ? `no stage matching synced id ${syncedStageId.slice(0, 8)} in workflow`
363
+ : 'no synced stage and no is_initial stage in workflow';
364
+ }
365
+ else if (!currentStage.agentDirective || isAgentlessDirective(currentStage.agentDirective)) {
366
+ // NULL directive OR an explicit agentless hold (execution: 'none') --
367
+ // treat identically: no stage directive drives the spawn, fall back to
368
+ // the legacy focus-team prompt. Parity keeps a deliberately-agentless
369
+ // stage from being handed to directive assembly.
370
+ spawnStageName = currentStage.name ?? null;
371
+ fallbackReason = currentStage.agentDirective
372
+ ? `stage "${currentStage.name}" is an explicit agentless hold (execution=none)`
373
+ : `stage "${currentStage.name}" has no agent_directive populated`;
374
+ }
375
+ else {
376
+ spawnStageName = currentStage.name ?? null;
377
+ // The current stage's directive declares its own lineage + continuity
378
+ // (INJ-B); resolved uniformly later.
379
+ spawnDirectiveDeclared = currentStage.agentDirective;
380
+ // Will the composed directive body actually be SENT? A resume-delta or
381
+ // forced-fresh scoping spawn discards it -- so skip the expensive assembly
382
+ // recipe there and resolve directive metadata only.
383
+ const willSend = willSendDirectiveBody({
384
+ declared: currentStage.agentDirective,
385
+ stageName: currentStage.name ?? null,
386
+ claudeSessionIds, deliveries, issues, readOnly,
387
+ });
388
+ if (willSend) {
389
+ const { content: directiveContent, manifest: directiveManifest } = await assembleDirectiveContentWithManifest(config, focusId, currentStage.agentDirective, worktreePath);
390
+ if (directiveContent.trim()) {
391
+ stageDirectiveContent = directiveContent;
392
+ stageDirectiveModel = currentStage.agentDirective.model;
393
+ // The stage is the Workflow layer for engine + local model too.
394
+ directiveEngine = currentStage.agentDirective.engine ?? null;
395
+ directiveLocalModel = currentStage.agentDirective.localModel ?? null;
396
+ assemblyManifest.push(...directiveManifest);
397
+ }
398
+ else {
399
+ fallbackReason = `assembly returned empty content for stage "${currentStage.name}"`;
400
+ }
401
+ }
402
+ else {
403
+ // Resume-delta / scoping: the body is discarded downstream, so skip the
404
+ // assembly entirely. Resolve metadata so model/engine/local-model
405
+ // precedence (Focus > Workflow > Default) still holds this pass.
406
+ directiveContentSkipped = true;
407
+ stageDirectiveModel = currentStage.agentDirective.model;
408
+ directiveEngine = currentStage.agentDirective.engine ?? null;
409
+ directiveLocalModel = currentStage.agentDirective.localModel ?? null;
410
+ console.log(`[focus-executor] Skipping directive content assembly for "${focusName}" ` +
411
+ `(resume-delta / scoping spawn -- body discarded; metadata resolved)`);
412
+ }
413
+ }
414
+ }
415
+ catch (err) {
416
+ fallbackReason = `directive lookup threw: ${err.message}`;
417
+ }
418
+ if (stageDirectiveContent) {
419
+ directiveBody = stageDirectiveContent;
420
+ directiveModel = stageDirectiveModel;
421
+ console.log(`[focus-executor] Using stage directive for "${focusName}" (${stageDirectiveContent.length} chars)`);
422
+ }
423
+ else if (directiveContentSkipped) {
424
+ // Body intentionally not assembled (discarded on resume-delta / scoping).
425
+ // Leave directiveBody null and useLegacyFullPrompt false: the composed
426
+ // prompt is thrown away by buildSpawnMessage, so it must NOT trigger the
427
+ // legacy full prompt. Carry the stage model forward for model resolution.
428
+ directiveModel = stageDirectiveModel;
429
+ }
430
+ else {
431
+ console.warn(`[focus-executor] LEGACY PROMPT FALLBACK for "${focusName}": ${fallbackReason ?? 'unknown reason'}`);
432
+ useLegacyFullPrompt = true;
433
+ }
434
+ }
435
+ return { directiveBody, directiveModel, directiveEngine, directiveLocalModel, pendingFocusOverrideModel, spawnStageName, spawnDirectiveDeclared, useLegacyFullPrompt };
436
+ }
437
+ //# sourceMappingURL=spawn-decision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-decision.js","sourceRoot":"","sources":["../../src/spawn/spawn-decision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Worktree + session seam for the focus-team spawn path.
3
+ *
4
+ * Extracted verbatim from focus-executor.ts (behavior-preserving): the initial
5
+ * team-state factory, the worktree resolver (reuse+rebase or inline-create), the
6
+ * team-lead session creator, the best-effort review-context resolver, and the
7
+ * lineage/engine-for-pass resolver. 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 { createSession, type SessionType } from '../supabase.js';
15
+ import { getFocusIssues } from '../queries/focuses.js';
16
+ import { resolveLineageSpec } from '../session-lineage.js';
17
+ import { resolveBackend, type AgentBackend, type EngineOverride, type EnginePass } from '../backends/index.js';
18
+ import type { DirectiveResolution } from './shared.js';
19
+ /**
20
+ * Build the initial FocusTeamState for a spawn. Pure factory -- no side effects;
21
+ * the caller inserts it into the activeTeams map.
22
+ */
23
+ export declare function createInitialTeamState(args: {
24
+ focusId: string;
25
+ focusName: string;
26
+ role: AgentRole;
27
+ config: DaemonConfig;
28
+ executionConfig: FocusTeamState['executionConfig'];
29
+ pipelineConfig: PipelineConfig | null;
30
+ branchName: string;
31
+ readOnly: boolean;
32
+ }): FocusTeamState;
33
+ /**
34
+ * Phase: resolve the focus worktree to spawn into. Reuses the persistent
35
+ * worktree (rebasing onto integration + re-asserting read-only guards) when one
36
+ * exists, else creates one inline. Returns null when the spawn cannot proceed
37
+ * (repo has no commits, or inline creation failed) -- owning its own teardown
38
+ * (activeTeams.delete + recordFocusTeardown) so the caller just returns.
39
+ * Behavior byte-identical to the original inline block.
40
+ */
41
+ export declare function resolveSpawnWorktree(args: {
42
+ config: DaemonConfig;
43
+ focusId: string;
44
+ focusName: string;
45
+ branchName: string;
46
+ readOnly: boolean;
47
+ }): Promise<string | null>;
48
+ /**
49
+ * Phase: create the team-lead session row + register it with the telemetry
50
+ * persistence gate, stamping its id onto the team state. Returns null when
51
+ * createSession fails (owning its own activeTeams.delete teardown). The worktree
52
+ * is focus-owned and persists even when session creation fails.
53
+ *
54
+ * `sessionType` is the AUTHORITATIVE lineage (resolved by resolveEngineForPass,
55
+ * matching teamState.sessionType), so the (focus, lineage) pass this segment is
56
+ * opened against is on the SAME lineage the segment carries -- never a stale
57
+ * 'coding' default while the lineage actually resolved to 'review'.
58
+ */
59
+ export declare function createTeamSession(args: {
60
+ config: DaemonConfig;
61
+ role: AgentRole;
62
+ focusId: string;
63
+ focusName: string;
64
+ branchName: string;
65
+ sessionType: SessionType;
66
+ teamState: FocusTeamState;
67
+ }): Promise<Awaited<ReturnType<typeof createSession>> | null>;
68
+ /**
69
+ * Phase: best-effort review context. When the focus has a recorded
70
+ * review_requested_at, count the open review-filed issues (the remediation
71
+ * directive's working set) and carry the prior findings; also resolve the focus
72
+ * description. A fetch failure leaves the count at zero (normal execution team).
73
+ */
74
+ export declare function resolveReviewContext(args: {
75
+ config: DaemonConfig;
76
+ focusId: string;
77
+ focusName: string;
78
+ issues: Awaited<ReturnType<typeof getFocusIssues>>;
79
+ }): Promise<{
80
+ reviewFiledOpenCount: number;
81
+ priorFindings: Awaited<ReturnType<typeof getFocusIssues>>;
82
+ focusDescription: string | null;
83
+ }>;
84
+ /**
85
+ * Phase B: resolve the session lineage (pass) and the engine backend for it,
86
+ * stamping lineage + sessionType onto the team state. Returns the lineage spec,
87
+ * the derived engine pass, the resolved engine, and the backend object.
88
+ */
89
+ export declare function resolveEngineForPass(args: {
90
+ spawnDirectiveDeclared: DirectiveResolution['spawnDirectiveDeclared'];
91
+ spawnStageName: string | null;
92
+ engineOverride: EngineOverride | null | undefined;
93
+ /** Stage directive engine (Workflow layer of the unified engine precedence). */
94
+ stageDirectiveEngine?: string | null;
95
+ config: DaemonConfig;
96
+ orgDefaultEngine: string | null | undefined;
97
+ focusName: string;
98
+ teamState: FocusTeamState;
99
+ }): {
100
+ spawnSpec: ReturnType<typeof resolveLineageSpec>;
101
+ enginePass: EnginePass;
102
+ resolvedEngine: ReturnType<typeof resolveBackend>;
103
+ backend: AgentBackend;
104
+ };
105
+ //# sourceMappingURL=worktree-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-session.d.ts","sourceRoot":"","sources":["../../src/spawn/worktree-session.ts"],"names":[],"mappings":"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"}