@telora/daemon 0.17.33 → 0.17.40

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 (344) hide show
  1. package/build-info.json +5 -3
  2. package/dist/assembly-engine.d.ts +6 -0
  3. package/dist/assembly-engine.d.ts.map +1 -1
  4. package/dist/assembly-engine.js +19 -0
  5. package/dist/assembly-engine.js.map +1 -1
  6. package/dist/assembly-resolvers.d.ts +17 -8
  7. package/dist/assembly-resolvers.d.ts.map +1 -1
  8. package/dist/assembly-resolvers.js +19 -8
  9. package/dist/assembly-resolvers.js.map +1 -1
  10. package/dist/cli/connect.d.ts.map +1 -1
  11. package/dist/cli/connect.js +4 -0
  12. package/dist/cli/connect.js.map +1 -1
  13. package/dist/cli/session-state.d.ts +10 -0
  14. package/dist/cli/session-state.d.ts.map +1 -1
  15. package/dist/cli/session-state.js +31 -0
  16. package/dist/cli/session-state.js.map +1 -1
  17. package/dist/completion/completion-decision.d.ts +83 -0
  18. package/dist/completion/completion-decision.d.ts.map +1 -0
  19. package/dist/completion/completion-decision.js +48 -0
  20. package/dist/completion/completion-decision.js.map +1 -0
  21. package/dist/completion/event-escalations.d.ts +97 -0
  22. package/dist/completion/event-escalations.d.ts.map +1 -0
  23. package/dist/completion/event-escalations.js +213 -0
  24. package/dist/completion/event-escalations.js.map +1 -0
  25. package/dist/completion/event.d.ts +1 -72
  26. package/dist/completion/event.d.ts.map +1 -1
  27. package/dist/completion/event.js +149 -329
  28. package/dist/completion/event.js.map +1 -1
  29. package/dist/completion/exit-classification.d.ts +82 -0
  30. package/dist/completion/exit-classification.d.ts.map +1 -0
  31. package/dist/completion/exit-classification.js +61 -0
  32. package/dist/completion/exit-classification.js.map +1 -0
  33. package/dist/completion/index.d.ts +14 -5
  34. package/dist/completion/index.d.ts.map +1 -1
  35. package/dist/completion/index.js +14 -5
  36. package/dist/completion/index.js.map +1 -1
  37. package/dist/completion/merge-phase.d.ts +114 -0
  38. package/dist/completion/merge-phase.d.ts.map +1 -0
  39. package/dist/completion/merge-phase.js +198 -0
  40. package/dist/completion/merge-phase.js.map +1 -0
  41. package/dist/completion/review-exit-phase.d.ts +82 -0
  42. package/dist/completion/review-exit-phase.d.ts.map +1 -0
  43. package/dist/completion/review-exit-phase.js +228 -0
  44. package/dist/completion/review-exit-phase.js.map +1 -0
  45. package/dist/completion/status-advance-phase.d.ts +61 -0
  46. package/dist/completion/status-advance-phase.d.ts.map +1 -0
  47. package/dist/completion/status-advance-phase.js +182 -0
  48. package/dist/completion/status-advance-phase.js.map +1 -0
  49. package/dist/completion/team-completion.d.ts +28 -269
  50. package/dist/completion/team-completion.d.ts.map +1 -1
  51. package/dist/completion/team-completion.js +145 -676
  52. package/dist/completion/team-completion.js.map +1 -1
  53. package/dist/config.d.ts.map +1 -1
  54. package/dist/config.js +70 -41
  55. package/dist/config.js.map +1 -1
  56. package/dist/daemon-process.d.ts +18 -2
  57. package/dist/daemon-process.d.ts.map +1 -1
  58. package/dist/daemon-process.js +15 -2
  59. package/dist/daemon-process.js.map +1 -1
  60. package/dist/directive/close-loop-stage.d.ts +50 -0
  61. package/dist/directive/close-loop-stage.d.ts.map +1 -0
  62. package/dist/directive/close-loop-stage.js +196 -0
  63. package/dist/directive/close-loop-stage.js.map +1 -0
  64. package/dist/directive/directive-assembly.d.ts +33 -0
  65. package/dist/directive/directive-assembly.d.ts.map +1 -0
  66. package/dist/directive/directive-assembly.js +77 -0
  67. package/dist/directive/directive-assembly.js.map +1 -0
  68. package/dist/directive/directive-dispatch.d.ts +103 -0
  69. package/dist/directive/directive-dispatch.d.ts.map +1 -0
  70. package/dist/directive/directive-dispatch.js +279 -0
  71. package/dist/directive/directive-dispatch.js.map +1 -0
  72. package/dist/directive/phase-sync.d.ts +89 -0
  73. package/dist/directive/phase-sync.d.ts.map +1 -0
  74. package/dist/directive/phase-sync.js +173 -0
  75. package/dist/directive/phase-sync.js.map +1 -0
  76. package/dist/directive-executor.d.ts +21 -223
  77. package/dist/directive-executor.d.ts.map +1 -1
  78. package/dist/directive-executor.js +28 -687
  79. package/dist/directive-executor.js.map +1 -1
  80. package/dist/focus-engine.d.ts.map +1 -1
  81. package/dist/focus-engine.js +16 -10
  82. package/dist/focus-engine.js.map +1 -1
  83. package/dist/focus-executor.d.ts +29 -8
  84. package/dist/focus-executor.d.ts.map +1 -1
  85. package/dist/focus-executor.js +29 -10
  86. package/dist/focus-executor.js.map +1 -1
  87. package/dist/focus-stage-lifecycle.d.ts +7 -5
  88. package/dist/focus-stage-lifecycle.d.ts.map +1 -1
  89. package/dist/focus-stage-lifecycle.js +11 -6
  90. package/dist/focus-stage-lifecycle.js.map +1 -1
  91. package/dist/index.js +8 -0
  92. package/dist/index.js.map +1 -1
  93. package/dist/merge-back-loop.d.ts.map +1 -1
  94. package/dist/merge-back-loop.js +4 -10
  95. package/dist/merge-back-loop.js.map +1 -1
  96. package/dist/pipeline-config.d.ts +13 -0
  97. package/dist/pipeline-config.d.ts.map +1 -1
  98. package/dist/pipeline-config.js +15 -0
  99. package/dist/pipeline-config.js.map +1 -1
  100. package/dist/resolvers/agent-escalations.d.ts +8 -1
  101. package/dist/resolvers/agent-escalations.d.ts.map +1 -1
  102. package/dist/resolvers/agent-escalations.js +25 -22
  103. package/dist/resolvers/agent-escalations.js.map +1 -1
  104. package/dist/resolvers/agent-session-summaries.d.ts +8 -1
  105. package/dist/resolvers/agent-session-summaries.d.ts.map +1 -1
  106. package/dist/resolvers/agent-session-summaries.js +21 -18
  107. package/dist/resolvers/agent-session-summaries.js.map +1 -1
  108. package/dist/resolvers/delivery-acceptance-criteria.d.ts +7 -1
  109. package/dist/resolvers/delivery-acceptance-criteria.d.ts.map +1 -1
  110. package/dist/resolvers/delivery-acceptance-criteria.js +14 -11
  111. package/dist/resolvers/delivery-acceptance-criteria.js.map +1 -1
  112. package/dist/resolvers/delivery-description.d.ts +7 -1
  113. package/dist/resolvers/delivery-description.d.ts.map +1 -1
  114. package/dist/resolvers/delivery-description.js +14 -11
  115. package/dist/resolvers/delivery-description.js.map +1 -1
  116. package/dist/resolvers/delivery-issues.d.ts +8 -1
  117. package/dist/resolvers/delivery-issues.d.ts.map +1 -1
  118. package/dist/resolvers/delivery-issues.js +51 -48
  119. package/dist/resolvers/delivery-issues.js.map +1 -1
  120. package/dist/resolvers/delivery-listing.d.ts +16 -1
  121. package/dist/resolvers/delivery-listing.d.ts.map +1 -1
  122. package/dist/resolvers/delivery-listing.js +36 -33
  123. package/dist/resolvers/delivery-listing.js.map +1 -1
  124. package/dist/resolvers/delivery-tech-context.d.ts +7 -1
  125. package/dist/resolvers/delivery-tech-context.d.ts.map +1 -1
  126. package/dist/resolvers/delivery-tech-context.js +14 -11
  127. package/dist/resolvers/delivery-tech-context.js.map +1 -1
  128. package/dist/resolvers/deployment-profile.d.ts +8 -1
  129. package/dist/resolvers/deployment-profile.d.ts.map +1 -1
  130. package/dist/resolvers/deployment-profile.js +20 -17
  131. package/dist/resolvers/deployment-profile.js.map +1 -1
  132. package/dist/resolvers/focus-anchoring-injections.d.ts +26 -1
  133. package/dist/resolvers/focus-anchoring-injections.d.ts.map +1 -1
  134. package/dist/resolvers/focus-anchoring-injections.js +91 -88
  135. package/dist/resolvers/focus-anchoring-injections.js.map +1 -1
  136. package/dist/resolvers/focus-context.d.ts +9 -1
  137. package/dist/resolvers/focus-context.d.ts.map +1 -1
  138. package/dist/resolvers/focus-context.js +38 -35
  139. package/dist/resolvers/focus-context.js.map +1 -1
  140. package/dist/resolvers/focus-injections.d.ts +13 -1
  141. package/dist/resolvers/focus-injections.d.ts.map +1 -1
  142. package/dist/resolvers/focus-injections.js +60 -57
  143. package/dist/resolvers/focus-injections.js.map +1 -1
  144. package/dist/resolvers/focus-last-review-report.d.ts +2 -1
  145. package/dist/resolvers/focus-last-review-report.d.ts.map +1 -1
  146. package/dist/resolvers/focus-last-review-report.js +33 -30
  147. package/dist/resolvers/focus-last-review-report.js.map +1 -1
  148. package/dist/resolvers/focus-reality-tree.d.ts +15 -1
  149. package/dist/resolvers/focus-reality-tree.d.ts.map +1 -1
  150. package/dist/resolvers/focus-reality-tree.js +35 -32
  151. package/dist/resolvers/focus-reality-tree.js.map +1 -1
  152. package/dist/resolvers/git-diff-against-base.d.ts +8 -1
  153. package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
  154. package/dist/resolvers/git-diff-against-base.js +33 -30
  155. package/dist/resolvers/git-diff-against-base.js.map +1 -1
  156. package/dist/resolvers/guards-evaluation-results.d.ts +7 -1
  157. package/dist/resolvers/guards-evaluation-results.d.ts.map +1 -1
  158. package/dist/resolvers/guards-evaluation-results.js +25 -22
  159. package/dist/resolvers/guards-evaluation-results.js.map +1 -1
  160. package/dist/resolvers/index.d.ts +22 -40
  161. package/dist/resolvers/index.d.ts.map +1 -1
  162. package/dist/resolvers/index.js +112 -41
  163. package/dist/resolvers/index.js.map +1 -1
  164. package/dist/resolvers/loop-context.d.ts +18 -1
  165. package/dist/resolvers/loop-context.d.ts.map +1 -1
  166. package/dist/resolvers/loop-context.js +21 -18
  167. package/dist/resolvers/loop-context.js.map +1 -1
  168. package/dist/resolvers/loop-delivery-index.d.ts +17 -1
  169. package/dist/resolvers/loop-delivery-index.d.ts.map +1 -1
  170. package/dist/resolvers/loop-delivery-index.js +51 -48
  171. package/dist/resolvers/loop-delivery-index.js.map +1 -1
  172. package/dist/resolvers/loop-documents.d.ts +9 -1
  173. package/dist/resolvers/loop-documents.d.ts.map +1 -1
  174. package/dist/resolvers/loop-documents.js +22 -19
  175. package/dist/resolvers/loop-documents.js.map +1 -1
  176. package/dist/resolvers/loop-expected-effects.d.ts +11 -1
  177. package/dist/resolvers/loop-expected-effects.d.ts.map +1 -1
  178. package/dist/resolvers/loop-expected-effects.js +53 -50
  179. package/dist/resolvers/loop-expected-effects.js.map +1 -1
  180. package/dist/resolvers/loop-frt-statement.d.ts +11 -1
  181. package/dist/resolvers/loop-frt-statement.d.ts.map +1 -1
  182. package/dist/resolvers/loop-frt-statement.js +28 -25
  183. package/dist/resolvers/loop-frt-statement.js.map +1 -1
  184. package/dist/resolvers/loop-injection.d.ts +10 -1
  185. package/dist/resolvers/loop-injection.d.ts.map +1 -1
  186. package/dist/resolvers/loop-injection.js +38 -35
  187. package/dist/resolvers/loop-injection.js.map +1 -1
  188. package/dist/resolvers/loop-persona.d.ts +20 -1
  189. package/dist/resolvers/loop-persona.d.ts.map +1 -1
  190. package/dist/resolvers/loop-persona.js +20 -17
  191. package/dist/resolvers/loop-persona.js.map +1 -1
  192. package/dist/resolvers/loop-questions.d.ts +8 -1
  193. package/dist/resolvers/loop-questions.d.ts.map +1 -1
  194. package/dist/resolvers/loop-questions.js +39 -36
  195. package/dist/resolvers/loop-questions.js.map +1 -1
  196. package/dist/resolvers/loop-upstream-udes.d.ts +11 -1
  197. package/dist/resolvers/loop-upstream-udes.d.ts.map +1 -1
  198. package/dist/resolvers/loop-upstream-udes.js +74 -71
  199. package/dist/resolvers/loop-upstream-udes.js.map +1 -1
  200. package/dist/resolvers/prd-context.d.ts +2 -0
  201. package/dist/resolvers/prd-context.d.ts.map +1 -1
  202. package/dist/resolvers/prd-context.js +16 -13
  203. package/dist/resolvers/prd-context.js.map +1 -1
  204. package/dist/resolvers/prd-persona.d.ts +2 -0
  205. package/dist/resolvers/prd-persona.d.ts.map +1 -1
  206. package/dist/resolvers/prd-persona.js +6 -3
  207. package/dist/resolvers/prd-persona.js.map +1 -1
  208. package/dist/resolvers/reality-metrics.d.ts +8 -1
  209. package/dist/resolvers/reality-metrics.d.ts.map +1 -1
  210. package/dist/resolvers/reality-metrics.js +73 -70
  211. package/dist/resolvers/reality-metrics.js.map +1 -1
  212. package/dist/resolvers/reality-projections.d.ts +7 -1
  213. package/dist/resolvers/reality-projections.d.ts.map +1 -1
  214. package/dist/resolvers/reality-projections.js +35 -32
  215. package/dist/resolvers/reality-projections.js.map +1 -1
  216. package/dist/resolvers/reality-tree-snapshot.d.ts +10 -1
  217. package/dist/resolvers/reality-tree-snapshot.d.ts.map +1 -1
  218. package/dist/resolvers/reality-tree-snapshot.js +34 -31
  219. package/dist/resolvers/reality-tree-snapshot.js.map +1 -1
  220. package/dist/resolvers/retired-injections.d.ts +10 -1
  221. package/dist/resolvers/retired-injections.d.ts.map +1 -1
  222. package/dist/resolvers/retired-injections.js +68 -65
  223. package/dist/resolvers/retired-injections.js.map +1 -1
  224. package/dist/resolvers/review-outcomes.d.ts +11 -1
  225. package/dist/resolvers/review-outcomes.d.ts.map +1 -1
  226. package/dist/resolvers/review-outcomes.js +27 -24
  227. package/dist/resolvers/review-outcomes.js.map +1 -1
  228. package/dist/resolvers/security-advisory.d.ts +2 -1
  229. package/dist/resolvers/security-advisory.d.ts.map +1 -1
  230. package/dist/resolvers/security-advisory.js +47 -44
  231. package/dist/resolvers/security-advisory.js.map +1 -1
  232. package/dist/resolvers/wiki-search.d.ts +8 -1
  233. package/dist/resolvers/wiki-search.d.ts.map +1 -1
  234. package/dist/resolvers/wiki-search.js +17 -14
  235. package/dist/resolvers/wiki-search.js.map +1 -1
  236. package/dist/resolvers/wiki-topic.d.ts +9 -1
  237. package/dist/resolvers/wiki-topic.d.ts.map +1 -1
  238. package/dist/resolvers/wiki-topic.js +21 -18
  239. package/dist/resolvers/wiki-topic.js.map +1 -1
  240. package/dist/resolvers/workflow-stages.d.ts +7 -1
  241. package/dist/resolvers/workflow-stages.d.ts.map +1 -1
  242. package/dist/resolvers/workflow-stages.js +20 -17
  243. package/dist/resolvers/workflow-stages.js.map +1 -1
  244. package/dist/review-defect-detector.d.ts +4 -1
  245. package/dist/review-defect-detector.d.ts.map +1 -1
  246. package/dist/review-defect-detector.js +6 -8
  247. package/dist/review-defect-detector.js.map +1 -1
  248. package/dist/self-update.d.ts +6 -0
  249. package/dist/self-update.d.ts.map +1 -1
  250. package/dist/self-update.js +6 -1
  251. package/dist/self-update.js.map +1 -1
  252. package/dist/spawner/index.d.ts +2 -1
  253. package/dist/spawner/index.d.ts.map +1 -1
  254. package/dist/spawner/index.js +2 -1
  255. package/dist/spawner/index.js.map +1 -1
  256. package/dist/spawner/spawn-team.d.ts +14 -52
  257. package/dist/spawner/spawn-team.d.ts.map +1 -1
  258. package/dist/spawner/spawn-team.js +14 -469
  259. package/dist/spawner/spawn-team.js.map +1 -1
  260. package/dist/staleness.d.ts +124 -0
  261. package/dist/staleness.d.ts.map +1 -0
  262. package/dist/staleness.js +215 -0
  263. package/dist/staleness.js.map +1 -0
  264. package/dist/state-cascade.d.ts +3 -2
  265. package/dist/state-cascade.d.ts.map +1 -1
  266. package/dist/state-cascade.js +7 -3
  267. package/dist/state-cascade.js.map +1 -1
  268. package/dist/types/focus.d.ts +5 -4
  269. package/dist/types/focus.d.ts.map +1 -1
  270. package/dist/types/index.d.ts +0 -1
  271. package/dist/types/index.d.ts.map +1 -1
  272. package/dist/types/index.js +0 -1
  273. package/dist/types/index.js.map +1 -1
  274. package/dist/types/session.d.ts +2 -3
  275. package/dist/types/session.d.ts.map +1 -1
  276. package/dist/unified-engine-lifecycle.d.ts.map +1 -1
  277. package/dist/unified-engine-lifecycle.js +2 -23
  278. package/dist/unified-engine-lifecycle.js.map +1 -1
  279. package/dist/unified-shell-config.d.ts +2 -7
  280. package/dist/unified-shell-config.d.ts.map +1 -1
  281. package/dist/unified-shell-config.js +2 -23
  282. package/dist/unified-shell-config.js.map +1 -1
  283. package/dist/unified-shell-status.d.ts.map +1 -1
  284. package/dist/unified-shell-status.js +2 -4
  285. package/dist/unified-shell-status.js.map +1 -1
  286. package/dist/unified-shell.d.ts.map +1 -1
  287. package/dist/unified-shell.js +21 -24
  288. package/dist/unified-shell.js.map +1 -1
  289. package/dist/version-check.d.ts.map +1 -1
  290. package/dist/version-check.js +6 -4
  291. package/dist/version-check.js.map +1 -1
  292. package/package.json +3 -3
  293. package/dist/pm/adaptive-poller.d.ts +0 -26
  294. package/dist/pm/adaptive-poller.d.ts.map +0 -1
  295. package/dist/pm/adaptive-poller.js +0 -53
  296. package/dist/pm/adaptive-poller.js.map +0 -1
  297. package/dist/pm/cascade-evaluator.d.ts +0 -29
  298. package/dist/pm/cascade-evaluator.d.ts.map +0 -1
  299. package/dist/pm/cascade-evaluator.js +0 -135
  300. package/dist/pm/cascade-evaluator.js.map +0 -1
  301. package/dist/pm/channel-email.d.ts +0 -42
  302. package/dist/pm/channel-email.d.ts.map +0 -1
  303. package/dist/pm/channel-email.js +0 -47
  304. package/dist/pm/channel-email.js.map +0 -1
  305. package/dist/pm/channel-slack.d.ts +0 -40
  306. package/dist/pm/channel-slack.d.ts.map +0 -1
  307. package/dist/pm/channel-slack.js +0 -46
  308. package/dist/pm/channel-slack.js.map +0 -1
  309. package/dist/pm/communication-drafter.d.ts +0 -44
  310. package/dist/pm/communication-drafter.d.ts.map +0 -1
  311. package/dist/pm/communication-drafter.js +0 -84
  312. package/dist/pm/communication-drafter.js.map +0 -1
  313. package/dist/pm/dialog-handler.d.ts +0 -32
  314. package/dist/pm/dialog-handler.d.ts.map +0 -1
  315. package/dist/pm/dialog-handler.js +0 -107
  316. package/dist/pm/dialog-handler.js.map +0 -1
  317. package/dist/pm/mitigation-correlator.d.ts +0 -29
  318. package/dist/pm/mitigation-correlator.d.ts.map +0 -1
  319. package/dist/pm/mitigation-correlator.js +0 -147
  320. package/dist/pm/mitigation-correlator.js.map +0 -1
  321. package/dist/pm/risk-scanner.d.ts +0 -28
  322. package/dist/pm/risk-scanner.d.ts.map +0 -1
  323. package/dist/pm/risk-scanner.js +0 -112
  324. package/dist/pm/risk-scanner.js.map +0 -1
  325. package/dist/pm-engine.d.ts +0 -96
  326. package/dist/pm-engine.d.ts.map +0 -1
  327. package/dist/pm-engine.js +0 -540
  328. package/dist/pm-engine.js.map +0 -1
  329. package/dist/pm-process.d.ts +0 -45
  330. package/dist/pm-process.d.ts.map +0 -1
  331. package/dist/pm-process.js +0 -195
  332. package/dist/pm-process.js.map +0 -1
  333. package/dist/pm-prompt-builder.d.ts +0 -23
  334. package/dist/pm-prompt-builder.d.ts.map +0 -1
  335. package/dist/pm-prompt-builder.js +0 -64
  336. package/dist/pm-prompt-builder.js.map +0 -1
  337. package/dist/session-lifecycle.d.ts +0 -78
  338. package/dist/session-lifecycle.d.ts.map +0 -1
  339. package/dist/session-lifecycle.js +0 -382
  340. package/dist/session-lifecycle.js.map +0 -1
  341. package/dist/types/pm.d.ts +0 -53
  342. package/dist/types/pm.d.ts.map +0 -1
  343. package/dist/types/pm.js +0 -10
  344. package/dist/types/pm.js.map +0 -1
@@ -1,195 +0,0 @@
1
- /**
2
- * PM process state and lifecycle management.
3
- *
4
- * Manages the spawning, monitoring, and termination of PM Claude Code
5
- * processes. Each product gets one PM process that runs /loop for its
6
- * PM cycle.
7
- */
8
- import { spawn } from 'node:child_process';
9
- import { buildStreamJsonArgs, stripClaudeCodeEnvVars, sendMessage, } from '@telora/daemon-core';
10
- import { DEFAULT_PM_PROCESS_CONFIG } from './types/pm.js';
11
- import { buildPMPrompt } from './pm-prompt-builder.js';
12
- import { callApi } from './queries/shared.js';
13
- // ---------------------------------------------------------------------------
14
- // Active processes
15
- // ---------------------------------------------------------------------------
16
- /** Map of productId -> PMProcessState for active PM processes. */
17
- const activeProcesses = new Map();
18
- // ---------------------------------------------------------------------------
19
- // Spawn
20
- // ---------------------------------------------------------------------------
21
- /**
22
- * Spawn a PM Claude Code process for a product.
23
- *
24
- * The process runs in the product's repo directory with the PM CLAUDE.md
25
- * as context, and is given a /loop command to run the PM cycle periodically.
26
- */
27
- export async function spawnPMProcess(config, productId, repoPath, governor, pmConfig = DEFAULT_PM_PROCESS_CONFIG, existingSessionId) {
28
- // Acquire governor slot
29
- await governor.acquireSlot('pm');
30
- // Use existing session if provided (from poll), otherwise create one
31
- let pmSessionId;
32
- if (existingSessionId) {
33
- pmSessionId = existingSessionId;
34
- }
35
- else {
36
- try {
37
- const result = await callApi('pm_session_create', {
38
- productId,
39
- });
40
- pmSessionId = result?.session?.id ?? `pm-${productId}`;
41
- }
42
- catch {
43
- pmSessionId = `pm-${productId}`;
44
- }
45
- }
46
- // Fetch product info
47
- let productName = productId;
48
- try {
49
- const productResult = await callApi('product_get', {
50
- productId,
51
- });
52
- productName = productResult?.name ?? productId;
53
- }
54
- catch {
55
- // Use productId as fallback name
56
- }
57
- // Build initial prompt
58
- const initialPrompt = await buildPMPrompt(repoPath, { id: productId, name: productName }, pmConfig.loopIntervalMinutes);
59
- // Build CLI args
60
- const args = buildStreamJsonArgs();
61
- // Build environment (strip inherited Claude Code vars)
62
- const spawnEnv = stripClaudeCodeEnvVars(process.env, {
63
- preserve: ['CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS'],
64
- });
65
- // Spawn Claude Code process in the product repo
66
- const proc = spawn(config.claudeCodePath, args, {
67
- cwd: repoPath,
68
- env: spawnEnv,
69
- stdio: ['pipe', 'pipe', 'pipe'],
70
- });
71
- const state = {
72
- productId,
73
- proc,
74
- pmSessionId,
75
- phase: 'starting',
76
- restartCount: 0,
77
- lastRestartAt: null,
78
- stdin: proc.stdin,
79
- spawnedAt: new Date(),
80
- };
81
- activeProcesses.set(productId, state);
82
- // Send initial prompt
83
- sendMessage(proc.stdin, initialPrompt);
84
- state.phase = 'running';
85
- // Log stdout (simple line-by-line)
86
- proc.stdout.on('data', (data) => {
87
- const lines = data.toString().split('\n').filter(Boolean);
88
- for (const line of lines) {
89
- try {
90
- const event = JSON.parse(line);
91
- // Capture Claude session ID from init event
92
- if (event.type === 'system' && event.sessionId) {
93
- state.claudeSessionId = event.sessionId;
94
- }
95
- }
96
- catch {
97
- // Non-JSON output -- log as-is
98
- }
99
- }
100
- });
101
- proc.stderr.on('data', (data) => {
102
- console.log(`[PM] stderr (${productId}): ${data.toString().trim()}`);
103
- });
104
- // Handle process exit
105
- proc.on('close', (code) => {
106
- console.log(`[PM] Process exited for product ${productId} (code: ${code})`);
107
- state.phase = 'crashed';
108
- governor.releaseSlot('pm');
109
- activeProcesses.delete(productId);
110
- });
111
- proc.on('error', (err) => {
112
- console.log(`[PM] Process error for product ${productId}: ${err.message}`);
113
- state.phase = 'crashed';
114
- governor.releaseSlot('pm');
115
- activeProcesses.delete(productId);
116
- });
117
- console.log(`[PM] Spawned process for product ${productId} (pid: ${proc.pid})`);
118
- return state;
119
- }
120
- // ---------------------------------------------------------------------------
121
- // Terminate
122
- // ---------------------------------------------------------------------------
123
- /**
124
- * Gracefully terminate a PM process for a product.
125
- */
126
- export function terminatePMProcess(productId) {
127
- const state = activeProcesses.get(productId);
128
- if (!state)
129
- return false;
130
- state.phase = 'stopping';
131
- // Try graceful shutdown: close stdin, then SIGTERM
132
- try {
133
- state.stdin.end();
134
- }
135
- catch {
136
- // Already closed
137
- }
138
- setTimeout(() => {
139
- if (state.proc.exitCode === null) {
140
- state.proc.kill('SIGTERM');
141
- }
142
- }, 5000);
143
- setTimeout(() => {
144
- if (state.proc.exitCode === null) {
145
- state.proc.kill('SIGKILL');
146
- }
147
- }, 15000);
148
- return true;
149
- }
150
- /**
151
- * Terminate all active PM processes.
152
- */
153
- export function terminateAllPMProcesses() {
154
- for (const productId of activeProcesses.keys()) {
155
- terminatePMProcess(productId);
156
- }
157
- }
158
- // ---------------------------------------------------------------------------
159
- // Query
160
- // ---------------------------------------------------------------------------
161
- /**
162
- * Get the active PM process for a product, or undefined if none.
163
- */
164
- export function getPMProcess(productId) {
165
- return activeProcesses.get(productId);
166
- }
167
- /**
168
- * Get all active PM processes.
169
- */
170
- export function getActivePMProcesses() {
171
- return activeProcesses;
172
- }
173
- /**
174
- * Check if a PM process is running for a product.
175
- */
176
- export function isPMProcessRunning(productId) {
177
- const state = activeProcesses.get(productId);
178
- return state !== undefined && state.phase === 'running';
179
- }
180
- // ---------------------------------------------------------------------------
181
- // Backoff
182
- // ---------------------------------------------------------------------------
183
- /**
184
- * Calculate exponential backoff delay for PM process restart.
185
- *
186
- * Backoff schedule: 1m, 2m, 4m, 8m, 16m, 30m (capped)
187
- * Returns delay in milliseconds.
188
- */
189
- export function calculateRestartDelay(restartCount) {
190
- const baseMs = 60_000; // 1 minute
191
- const maxMs = 30 * 60_000; // 30 minutes
192
- const delay = Math.min(baseMs * Math.pow(2, restartCount), maxMs);
193
- return delay;
194
- }
195
- //# sourceMappingURL=pm-process.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pm-process.js","sourceRoot":"","sources":["../src/pm-process.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- /**
2
- * PM prompt builder -- builds the initial prompt for a PM Claude Code process.
3
- *
4
- * Reads pm/CLAUDE.md from the product repo, fetches product details and PM
5
- * session state, and composes the initial prompt that boots the PM agent
6
- * with /loop at the configured interval.
7
- */
8
- interface ProductInfo {
9
- id: string;
10
- name: string;
11
- }
12
- /**
13
- * Build the initial prompt for a PM Claude Code process.
14
- *
15
- * The prompt includes:
16
- * 1. pm/CLAUDE.md contents (the PM agent's system instructions)
17
- * 2. Product context (name, ID)
18
- * 3. PM session state (last assessment, pending items)
19
- * 4. /loop instruction at the configured interval
20
- */
21
- export declare function buildPMPrompt(repoPath: string, product: ProductInfo, loopIntervalMinutes: number): Promise<string>;
22
- export {};
23
- //# sourceMappingURL=pm-prompt-builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pm-prompt-builder.d.ts","sourceRoot":"","sources":["../src/pm-prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAYD;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,EACpB,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,MAAM,CAAC,CA+CjB"}
@@ -1,64 +0,0 @@
1
- /**
2
- * PM prompt builder -- builds the initial prompt for a PM Claude Code process.
3
- *
4
- * Reads pm/CLAUDE.md from the product repo, fetches product details and PM
5
- * session state, and composes the initial prompt that boots the PM agent
6
- * with /loop at the configured interval.
7
- */
8
- import { readFile } from 'node:fs/promises';
9
- import { join } from 'node:path';
10
- import { callApi } from './queries/shared.js';
11
- // ---------------------------------------------------------------------------
12
- // Builder
13
- // ---------------------------------------------------------------------------
14
- /**
15
- * Build the initial prompt for a PM Claude Code process.
16
- *
17
- * The prompt includes:
18
- * 1. pm/CLAUDE.md contents (the PM agent's system instructions)
19
- * 2. Product context (name, ID)
20
- * 3. PM session state (last assessment, pending items)
21
- * 4. /loop instruction at the configured interval
22
- */
23
- export async function buildPMPrompt(repoPath, product, loopIntervalMinutes) {
24
- const parts = [];
25
- // 1. Read pm/CLAUDE.md from the product repo
26
- const pmClaudeMdPath = join(repoPath, 'pm', 'CLAUDE.md');
27
- let pmInstructions = '';
28
- try {
29
- pmInstructions = await readFile(pmClaudeMdPath, 'utf-8');
30
- }
31
- catch {
32
- // If pm/CLAUDE.md doesn't exist, use a minimal fallback
33
- pmInstructions = '# PM Agent\n\nYou are a PM agent. Run your cycle to check inbox, review action plan, and generate reports.';
34
- }
35
- parts.push(pmInstructions);
36
- // 2. Product context
37
- parts.push(`\n## Product\n\n- **Name**: ${product.name}\n- **ID**: ${product.id}`);
38
- // 3. PM session state
39
- let sessionState = null;
40
- try {
41
- const sessionResult = await callApi('pm_session_get', {
42
- productId: product.id,
43
- });
44
- sessionState = sessionResult?.session ?? null;
45
- }
46
- catch {
47
- // Session may not exist yet -- PM will create it during first cycle
48
- }
49
- if (sessionState) {
50
- parts.push('\n## Session State\n');
51
- if (sessionState.lastCycleAt) {
52
- parts.push(`- **Last cycle**: ${sessionState.lastCycleAt}`);
53
- }
54
- if (sessionState.lastAssessment) {
55
- parts.push(`- **Last assessment**: ${JSON.stringify(sessionState.lastAssessment, null, 2)}`);
56
- }
57
- }
58
- // 4. /loop instruction
59
- parts.push(`\n## Instructions\n\n` +
60
- `Run the PM cycle now, then continue running it on a loop.\n\n` +
61
- `/loop ${loopIntervalMinutes}m /pm-cycle`);
62
- return parts.join('\n');
63
- }
64
- //# sourceMappingURL=pm-prompt-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pm-prompt-builder.js","sourceRoot":"","sources":["../src/pm-prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAiB9C,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,OAAoB,EACpB,mBAA2B;IAE3B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,6CAA6C;IAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACzD,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;QACxD,cAAc,GAAG,4GAA4G,CAAC;IAChI,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAE3B,qBAAqB;IACrB,KAAK,CAAC,IAAI,CAAC,+BAA+B,OAAO,CAAC,IAAI,eAAe,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAEnF,sBAAsB;IACtB,IAAI,YAAY,GAA0B,IAAI,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE;YACpD,SAAS,EAAE,OAAO,CAAC,EAAE;SACtB,CAAiC,CAAC;QACnC,YAAY,GAAG,aAAa,EAAE,OAAO,IAAI,IAAI,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;IACtE,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,qBAAqB,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,KAAK,CAAC,IAAI,CACR,uBAAuB;QACvB,+DAA+D;QAC/D,SAAS,mBAAmB,aAAa,CAC1C,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,78 +0,0 @@
1
- /**
2
- * Session lifecycle management for focus teams.
3
- *
4
- * Extracted from focus-executor.ts. Contains functions for session
5
- * start/end, cleanup, error handling, team completion detection,
6
- * termination, and deactivation checks.
7
- */
8
- import type { ChildProcess } from 'node:child_process';
9
- import type { DaemonConfig, FocusTeamState } from './types.js';
10
- import type { CompletionDetector } from './completion/index.js';
11
- import type { ActivityTracker } from './activity-tracker.js';
12
- import type { SpawnFocusTeamParams } from './spawner/index.js';
13
- import type { LogStreams } from './types.js';
14
- export interface SessionLifecycleContext {
15
- proc: ChildProcess;
16
- params: SpawnFocusTeamParams;
17
- teamState: FocusTeamState;
18
- sessionId: string;
19
- focusId: string;
20
- focusName: string;
21
- completionDetector: CompletionDetector;
22
- activityTracker: ActivityTracker;
23
- logStreams: LogStreams;
24
- resumeId: string | null;
25
- spawnedAt: number;
26
- config: DaemonConfig;
27
- }
28
- /**
29
- * Attach session lifecycle handlers to a team lead process.
30
- *
31
- * Wires up the 'complete', 'close', and 'error' event handlers that manage
32
- * the full lifecycle of the team lead process: completion detection,
33
- * resume-failure retry, cleanup, and error reporting.
34
- */
35
- export declare function attachSessionLifecycle(ctx: SessionLifecycleContext): void;
36
- /**
37
- * Terminate a focus team.
38
- *
39
- * Sends a deactivation message via stdin (if open) before SIGTERM
40
- * to allow the team lead to process the shutdown gracefully.
41
- */
42
- export declare function terminateTeam(focusId: string): boolean;
43
- /**
44
- * Wait for a team's process to exit (leave activeTeams).
45
- *
46
- * Polls activeTeams until the focus is no longer present,
47
- * which happens when handleTeamCompletion runs on the 'close' event.
48
- * If the timeout expires, sends SIGKILL and waits briefly.
49
- *
50
- * @param focusId - Focus to wait for
51
- * @param timeoutMs - Max wait time in ms (default 30s)
52
- * @returns true if team exited within timeout, false if forced
53
- */
54
- export declare function waitForTeamExit(focusId: string, timeoutMs?: number): Promise<boolean>;
55
- /**
56
- * Terminate all active teams.
57
- */
58
- export declare function terminateAllTeams(): void;
59
- /**
60
- * Detect focuses that have been deactivated (agent role removed)
61
- * and shut down their active teams.
62
- */
63
- export declare function detectDeactivatedFocuses(config: DaemonConfig): Promise<void>;
64
- /**
65
- * Check active teams for newly completed deliveries and merge
66
- * the focus branch to integration incrementally.
67
- *
68
- * Called from the poll loop. For each active team, queries delivery
69
- * statuses and triggers a merge when any delivery reaches verify/done
70
- * that hasn't already been merged mid-flight.
71
- *
72
- * After processing merges, checks if ALL active deliveries are terminal
73
- * and merged. If so, terminates the team proactively since no more work
74
- * remains. The focus stays active in the DB -- if new deliveries
75
- * arrive later, the next poll cycle spawns a fresh team.
76
- */
77
- export declare function checkAndMergeCompletedDeliveries(config: DaemonConfig): Promise<void>;
78
- //# sourceMappingURL=session-lifecycle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-lifecycle.d.ts","sourceRoot":"","sources":["../src/session-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAM/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAc7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA0F7C,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,uBAAuB,GAAG,IAAI,CA6HzE;AAID;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CA2CtD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAsB1F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CA0Ff"}