@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,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":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,cAAc,EACd,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACf,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAML,KAAK,sBAAsB,EAC5B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAA2D,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC5H,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;IAC3D,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC;IACnD,eAAe,EAAE,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACnD,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,yBAAyB,EAAE,YAAY,CAAC,2BAA2B,CAAC,CAAC;IACrE,QAAQ,EAAE,OAAO,CAAC;IAClB,gGAAgG;IAChG,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,sBAAsB,CAsBzB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,IAAI,EAAE,SAAS,CAAC;IAChB,aAAa,EAAE,sBAAsB,CAAC;IACtC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;;;;;OAOG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAyCT;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB;;;;;;;;OAQG;IACH,IAAI,EAAE,SAAS,CAAC;IAChB,aAAa,EAAE,sBAAsB,CAAC;IACtC,SAAS,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;IACjD,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;IAC3D,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC;IAC1D;;;;;;;OAOG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC/C,GAAG,OAAO,CAAC,MAAM,CAAC,CAiGlB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;IAC3D,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC;IACnD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,GAAG;IAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAQvD;AAED,wBAAgB,qCAAqC,CACnD,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,EAC1D,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,GACjD,OAAO,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAWhD;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;CAC5D,GAAG,MAAM,CA+BT"}