@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,474 +1,19 @@
1
1
  /**
2
- * Team spawning logic for focus execution.
2
+ * DEPRECATED SHIM -- the real spawn implementation lives in focus-executor.ts.
3
3
  *
4
- * Extracted from focus-executor.ts. Contains the core spawnFocusTeam
5
- * function decomposed into phases: worktree setup, context fetching, session
6
- * creation, and process spawning.
7
- */
8
- import { spawn } from 'node:child_process';
9
- import { mkdirSync, existsSync, createWriteStream } from 'node:fs';
10
- import { join } from 'node:path';
11
- import { createSession, updateSession, } from '../supabase.js';
12
- import { createWorktree, runGitSync, repoHasCommits } from '../git.js';
13
- import { installAuditPreCommitHook } from '../audit-hooks.js';
14
- import { getFocusWorktree, setFocusWorktree } from '../focus-worktree-state.js';
15
- import { recordActivity } from '../heartbeat.js';
16
- import { buildFocusTeamPrompt } from '../focus-prompt-builder.js';
17
- import { getFocusDeliveries, getFocusIssues, getProductContextForFocus, getProductDeploymentProfileSnapshot } from '../queries/focuses.js';
18
- import { buildLeveredSpawnEnvironment, fetchBackendEnvExtras } from '../spawn-environment.js';
19
- import { sanitizeGitSegment } from '../git-utils.js';
20
- import { recordFocusTeardown } from '../spawn-cooldown.js';
21
- import { markSessionPersisted } from '../telemetry-writer.js';
22
- import { consumePendingSpawnDirective } from '../directive-executor.js';
23
- import { isStatusAgentActionable, isStatusBlocking } from '../stage-classifier.js';
24
- import { getActiveTeams, deriveExecutionConfig, } from '../focus-team-state.js';
25
- import { setupOutputMonitoring } from '../output-monitor.js';
26
- import { resolveResumeId } from '../session-lineage.js';
27
- import { getBackend, resolveBackend } from '../backends/index.js';
28
- // ── Resource governor (optional, injected by FocusEngine) ─────────
29
- let governor = null;
30
- /** Inject the resource governor for global concurrency limiting. */
31
- export function initGovernor(gov) {
32
- governor = gov;
33
- }
34
- /** Get the current resource governor (for use by session-lifecycle). */
35
- export function getGovernor() {
36
- return governor;
37
- }
38
- // ── Team spawning helpers ─────────────────────────────────────────────
39
- /**
40
- * Generate branch name for focus-level work.
41
- */
42
- export function generateFocusBranchName(role, focusName, focusId) {
43
- const sanitizedRoleName = sanitizeGitSegment(role.name);
44
- const shortId = focusId.slice(0, 8);
45
- const sanitizedFocusName = sanitizeGitSegment(focusName);
46
- return `agent/${sanitizedRoleName}/${sanitizedFocusName}-${shortId}`;
47
- }
48
- /**
49
- * Build CLI args for the team lead via the selected backend.
50
- *
51
- * Engine-specific flag construction (Claude's `--teammate-mode` + stream-json,
52
- * Codex's `exec --json`, ...) lives in the backend. Resume uses the backend's
53
- * dedicated resume-arg builder because some engines (Codex) resume via a
54
- * different subcommand than they spawn.
55
- */
56
- export function buildAgentArgs(backend, config, worktreePath, pipelineConfig, resumeSessionId) {
57
- const base = { config, worktreePath, model: pipelineConfig?.model ?? null };
58
- return resumeSessionId
59
- ? backend.buildResumeArgs({ ...base, resumeSessionId })
60
- : backend.buildSpawnArgs(base);
61
- }
62
- // ── Phase functions ───────────────────────────────────────────────────
63
- /**
64
- * Set up or reuse a worktree for the focus.
65
- * Returns the worktree path, or null if setup fails.
66
- */
67
- async function setupWorktree(config, focusId, focusName, branchName, readOnly) {
68
- const existingWorktree = getFocusWorktree(focusId);
69
- if (existingWorktree) {
70
- const worktreePath = existingWorktree.worktreePath;
71
- // Rebase onto integration to pick up latest changes from other focuses
72
- const rebaseResult = runGitSync(['rebase', config.integrationBranch], worktreePath);
73
- if (!rebaseResult.success) {
74
- runGitSync(['rebase', '--abort'], worktreePath);
75
- console.warn(`[focus-executor] Rebase failed for "${focusName}", continuing with existing state`);
76
- }
77
- console.log(` Worktree (reused): ${worktreePath}`);
78
- return worktreePath;
79
- }
80
- // Guard: can't create worktrees in a repo with no commits
81
- if (!repoHasCommits(config.repoPath)) {
82
- console.warn(`[focus-executor] Repository has no commits -- cannot create worktree for "${focusName}"`);
83
- return null;
84
- }
85
- // Fallback: worktree doesn't exist yet (race condition or first poll)
86
- console.warn(`[focus-executor] No persistent worktree for "${focusName}", creating inline`);
87
- try {
88
- const worktreePath = await createWorktree(config, branchName);
89
- setFocusWorktree(focusId, {
90
- focusId,
91
- focusName,
92
- worktreePath,
93
- branchName,
94
- createdAt: new Date(),
95
- });
96
- console.log(` Worktree (created inline): ${worktreePath}`);
97
- // Install audit pre-commit hook for read-only focuses
98
- if (readOnly) {
99
- installAuditPreCommitHook(worktreePath);
100
- console.log(` Installed audit pre-commit hook (read-only mode)`);
101
- }
102
- return worktreePath;
103
- }
104
- catch (err) {
105
- console.error(`[focus-executor] Failed to create worktree for focus "${focusName}":`, err instanceof Error ? err.message : String(err));
106
- return null;
107
- }
108
- }
109
- /**
110
- * Fetch all focus context: deliveries, issues, product context, deployment profile.
111
- */
112
- async function fetchFocusContext(config, focusId, _focusName) {
113
- const [deliveries, issues, productContextDocs, deploymentProfileSnapshot] = await Promise.all([
114
- getFocusDeliveries(focusId),
115
- getFocusIssues(focusId),
116
- getProductContextForFocus(config.productId, focusId),
117
- getProductDeploymentProfileSnapshot(config.productId).catch((err) => {
118
- console.debug(`[focus-executor] Could not fetch deployment profile snapshot (non-fatal):`, err.message);
119
- return null;
120
- }),
121
- ]);
122
- return { deliveries, issues, productContextDocs, deploymentProfileSnapshot };
123
- }
124
- /**
125
- * Create a session record for the team lead.
126
- * Returns the session, or null if creation fails.
127
- */
128
- async function createTeamSession(config, role, focusId, branchName, focusName, sessionType = 'coding') {
129
- try {
130
- const session = await createSession({
131
- organizationId: config.organizationId,
132
- roleId: role.id,
133
- issueId: null,
134
- focusId,
135
- branchName,
136
- sessionType,
137
- });
138
- // Register so the telemetry writer's persistence gate keeps the session_id
139
- // intact for any OTLP rows tagged with this id. Mirrors the pattern in
140
- // focus-executor.ts:markSessionPersisted (defensive: this code path is
141
- // currently unreachable but must be correct if it becomes reachable).
142
- markSessionPersisted(session.id);
143
- return session;
144
- }
145
- catch (err) {
146
- console.error(`[focus-executor] Failed to create session for focus "${focusName}":`, err.message);
147
- return null;
148
- }
149
- }
150
- /**
151
- * Open log file streams for the team lead process.
152
- */
153
- function openLogStreams(config, branchName, focusName) {
154
- // Ensure log directory exists
155
- if (!existsSync(config.logDir)) {
156
- mkdirSync(config.logDir, { recursive: true, mode: 0o700 });
157
- }
158
- const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
159
- const logPrefix = `focus-${branchName.replace(/\//g, '-')}-${timestamp}`;
160
- const stdoutPath = join(config.logDir, `${logPrefix}.stdout.log`);
161
- const stderrPath = join(config.logDir, `${logPrefix}.stderr.log`);
162
- const jsonlPath = join(config.logDir, `${logPrefix}.stream.jsonl`);
163
- const stdoutLogStream = createWriteStream(stdoutPath, { mode: 0o600 });
164
- const stderrStream = createWriteStream(stderrPath, { mode: 0o600 });
165
- const jsonlStream = createWriteStream(jsonlPath, { mode: 0o600 });
166
- // Attach error handlers to prevent unhandled 'error' events from crashing the daemon
167
- stdoutLogStream.on('error', (err) => {
168
- console.warn(`[focus-executor] stdout log stream error for "${focusName}": ${err.message}`);
169
- });
170
- stderrStream.on('error', (err) => {
171
- console.warn(`[focus-executor] stderr log stream error for "${focusName}": ${err.message}`);
172
- });
173
- jsonlStream.on('error', (err) => {
174
- console.warn(`[focus-executor] jsonl log stream error for "${focusName}": ${err.message}`);
175
- });
176
- return { stdoutLogStream, stderrStream, jsonlStream, stdoutPath, stderrPath };
177
- }
178
- /**
179
- * Build args, env, acquire governor slot, and spawn the Claude Code process.
180
- * Returns the child process, or null if governor denied the slot.
181
- */
182
- async function buildAndSpawnProcess(config, backend, pipelineConfig, resumeId, sessionId, focusId, focusName, worktreePath,
183
- /**
184
- * Loop/execution phase to stamp on telemetry (the controllable lever). The
185
- * focus team-lead runs the focus's execute phase; review-lineage spawns run
186
- * the gate phase. Mirrors focus-executor.ts so both team-lead spawn paths
187
- * tag spend identically.
188
- */
189
- spawnPhase,
190
- /**
191
- * Workflow stage active at spawn. This module does not resolve the workflow
192
- * stage NAME from the delivery's currentWorkflowStageId (a UUID); the caller
193
- * passes the coding-stage default, which is the correct stage for the normal
194
- * focus team-lead spawn this module drives.
195
- */
196
- spawnStage) {
197
- const args = buildAgentArgs(backend, config, worktreePath, pipelineConfig, resumeId);
198
- if (resumeId) {
199
- console.log(`[focus-executor] Resuming ${backend.displayName} session ${resumeId} for "${focusName}"`);
200
- }
201
- // Levered spawn: phase + stage are REQUIRED by buildLeveredSpawnEnvironment,
202
- // so this team-lead path can no longer drop the telemetry lever silently.
203
- const spawnEnv = buildLeveredSpawnEnvironment(config, {
204
- orgId: config.organizationId,
205
- focusId,
206
- sessionId,
207
- phase: spawnPhase,
208
- stage: spawnStage,
209
- });
210
- // Inject backend-specific org secrets (e.g. CODEX_API_KEY for the codex backend).
211
- // Non-fatal: fetchBackendEnvExtras returns {} on any error, falling back to host creds.
212
- Object.assign(spawnEnv, await fetchBackendEnvExtras(backend.id));
213
- // Acquire governor slot (if governor is configured)
214
- if (governor) {
215
- try {
216
- await governor.acquireSlot('focus');
217
- }
218
- catch (err) {
219
- console.warn(`[focus-executor] Governor denied slot for "${focusName}":`, err.message);
220
- return null;
221
- }
222
- }
223
- // Spawn the team lead process
224
- const proc = spawn(backend.resolveCommand(config), args, {
225
- cwd: worktreePath,
226
- env: spawnEnv,
227
- stdio: ['pipe', 'pipe', 'pipe'],
228
- });
229
- return proc;
230
- }
231
- // ── Main spawn function ───────────────────────────────────────────────
232
- /**
233
- * Spawn a focus team to execute all deliveries in a focus.
4
+ * This file held a 612-line decomposed near-duplicate of focus-executor's
5
+ * spawnFocusTeam. The two copies had to be kept in sync by hand, and the
6
+ * duplicate (reachable only via the dead session-lifecycle retry loop)
7
+ * silently drifted: it resolved its resume-failure respawn and its resource
8
+ * governor from module-local bindings nothing initialized. The Daemon
9
+ * Orchestration Decomposition focus (injection #12) unified the paths: ONE
10
+ * spawn implementation -- focus-executor.spawnFocusTeam -- serves all callers
11
+ * (the listener poll loop, directive spawn mode via the pending-directive
12
+ * queue, and the resume-failure retry injected into
13
+ * spawner/helpers.handleTeamProcessClose).
234
14
  *
235
- * Creates a single Agent Team (lead process) that reads all deliveries
236
- * and issues, builds a task DAG, and coordinates worker execution.
15
+ * Kept as a re-export shim so the spawner barrel (index.ts) and any direct
16
+ * importers keep resolving the SAME live symbols. Do not add logic here.
237
17
  */
238
- export async function spawnFocusTeam(params) {
239
- const { config, focusId, focusName, role, pipelineConfig, readOnly = false, claudeSessionIds, engineOverride, orgDefaultEngine } = params;
240
- const activeTeams = getActiveTeams();
241
- // The agent backend is resolved per-pass below, once the spawn's lineage
242
- // (coding vs review) is known from the pending directive (D3).
243
- // Prevent double-spawn
244
- if (activeTeams.has(focusId)) {
245
- console.warn(`[focus-executor] Team already active for focus "${focusName}", skipping spawn`);
246
- return;
247
- }
248
- const executionConfig = deriveExecutionConfig(pipelineConfig);
249
- const branchName = generateFocusBranchName(role, focusName, focusId);
250
- // Initialize team state
251
- const teamState = {
252
- focusId,
253
- focusName,
254
- roleId: role.id,
255
- roleName: role.name,
256
- organizationId: config.organizationId,
257
- productId: config.productId,
258
- executionConfig,
259
- pipelineConfig,
260
- startedAt: new Date(),
261
- phase: 'initializing',
262
- knownDeliveryIds: new Set(),
263
- mergedDeliveryIds: new Set(),
264
- planningPhase: false,
265
- shutdownReason: null,
266
- deliveryStageIds: new Map(),
267
- leadSessionId: null,
268
- leadPid: null,
269
- leadStdin: null,
270
- branchName,
271
- worktreePath: null,
272
- resolvingMergeConflict: false,
273
- readOnly,
274
- completionDetector: null,
275
- claudeSessionId: null,
276
- lastProgressSnapshot: null,
277
- noProgressCycles: 0,
278
- lastConsumedDirectiveHash: null,
279
- sessionType: 'coding',
280
- lineage: 'coding',
281
- };
282
- activeTeams.set(focusId, teamState);
283
- console.log(`[focus-executor] Spawning team for focus "${focusName}"${readOnly ? ' [READ-ONLY]' : ''}`);
284
- console.log(` Role: ${role.name}`);
285
- console.log(` Model: ${pipelineConfig?.model ?? '(CLI default)'}`);
286
- console.log(` Max workers: ${executionConfig.maxWorkers}`);
287
- console.log(` Branch: ${branchName}`);
288
- // Fetch all deliveries, issues, product context, and deployment profile for the focus
289
- let deliveries;
290
- let issues;
291
- let productContextDocs;
292
- let deploymentProfileSnapshot;
293
- try {
294
- ({ deliveries, issues, productContextDocs, deploymentProfileSnapshot } =
295
- await fetchFocusContext(config, focusId, focusName));
296
- }
297
- catch (err) {
298
- console.error(`[focus-executor] Failed to fetch context for focus "${focusName}":`, err.message);
299
- activeTeams.delete(focusId);
300
- return;
301
- }
302
- // Check for pending spawn directive (e.g., stage directive spawn).
303
- // Record its content hash on team state so the spawn-guard in
304
- // executeSpawnDirective can detect divergent directives within the 60s
305
- // skip window.
306
- const pendingDirective = consumePendingSpawnDirective(focusId);
307
- if (pendingDirective) {
308
- teamState.lastConsumedDirectiveHash = pendingDirective.contentHash;
309
- teamState.sessionType = pendingDirective.sessionType;
310
- teamState.lineage = pendingDirective.lineage;
311
- }
312
- // Resolve the engine backend for this spawn's pass (coding vs review) via the
313
- // single resolveBackend() selection point (D3). Nulls => 'claude' (parity).
314
- const enginePass = teamState.lineage === 'review' ? 'review' : 'coding';
315
- const resolvedEngine = resolveBackend({ focusOverride: engineOverride, pass: enginePass, orgDefault: orgDefaultEngine });
316
- const backend = getBackend(resolvedEngine.engineId);
317
- console.log(`[focus-executor] Engine for "${focusName}" pass=${enginePass}: ` +
318
- `${resolvedEngine.engineId} (source: ${resolvedEngine.source})`);
319
- // Pre-spawn guard: enforce rank-ordered execution.
320
- // Walk deliveries in priority_rank order (already sorted by API).
321
- // A delivery is actionable only if all lower-ranked deliveries are non-blocking.
322
- // Skip this guard when a pending directive exists -- the directive has its own intent.
323
- if (!pendingDirective) {
324
- let nextActionable = null;
325
- for (const d of deliveries) {
326
- const status = d.executionStatus ?? '';
327
- if (!isStatusBlocking(status))
328
- continue;
329
- if (isStatusAgentActionable(status)) {
330
- nextActionable = d;
331
- }
332
- else {
333
- // Blocking status (planning, paused) prevents subsequent deliveries
334
- console.log(`[focus-executor] Delivery "${d.name}" (rank ${d.priorityRank}) ` +
335
- `is in "${status}" state -- blocking subsequent deliveries in focus "${focusName}"`);
336
- }
337
- break;
338
- }
339
- if (!nextActionable || !isStatusAgentActionable(nextActionable.executionStatus ?? '')) {
340
- console.log(`[focus-executor] No actionable deliveries for focus "${focusName}" -- skipping spawn`);
341
- activeTeams.delete(focusId);
342
- return;
343
- }
344
- }
345
- const actionableDeliveries = deliveries.filter(d => isStatusAgentActionable(d.executionStatus ?? ''));
346
- // Track known deliveries, pre-populate already-completed ones.
347
- // Empty deliveries (planning spawn) yields zero iterations.
348
- for (const d of deliveries) {
349
- teamState.knownDeliveryIds.add(d.id);
350
- teamState.deliveryStageIds.set(d.id, d.currentWorkflowStageId);
351
- if (!isStatusAgentActionable(d.executionStatus ?? '') && !isStatusBlocking(d.executionStatus ?? '')) {
352
- teamState.mergedDeliveryIds.add(d.id);
353
- }
354
- }
355
- console.log(` Deliveries: ${deliveries.length} (${actionableDeliveries.length} queued)`);
356
- console.log(` Issues: ${issues.length}`);
357
- // Set up worktree
358
- const worktreePath = await setupWorktree(config, focusId, focusName, branchName, readOnly);
359
- if (!worktreePath) {
360
- activeTeams.delete(focusId);
361
- // Record a cooldown so the daemon backs off instead of retrying every poll cycle
362
- recordFocusTeardown(focusId);
363
- return;
364
- }
365
- teamState.worktreePath = worktreePath;
366
- // Create session record for the team lead
367
- const session = await createTeamSession(config, role, focusId, branchName, focusName, 'coding');
368
- if (!session) {
369
- // Worktree is focus-owned and persists even if session creation fails
370
- activeTeams.delete(focusId);
371
- return;
372
- }
373
- teamState.leadSessionId = session.id;
374
- recordActivity();
375
- // Build the team lead prompt with full focus context
376
- const prompt = buildFocusTeamPrompt(role, {
377
- focusId,
378
- focusName,
379
- organizationId: config.organizationId,
380
- productId: config.productId,
381
- deliveries,
382
- issues,
383
- executionConfig,
384
- pipelineConfig,
385
- productContextDocs,
386
- deploymentProfileSnapshot,
387
- readOnly,
388
- engineId: backend.id,
389
- });
390
- // Open log streams
391
- const logStreams = openLogStreams(config, branchName, focusName);
392
- // Build args and env, acquire governor slot, spawn process.
393
- // Resolve the resume id from the focus's per-lineage session map (INJ-A),
394
- // honoring the spawn's declared continuity policy (INJ-B). The legacy
395
- // non-directive path defaults to coding/resume.
396
- const spawnContinuity = pendingDirective?.continuity ?? 'resume';
397
- const resumeId = resolveResumeId({
398
- sessionMap: claudeSessionIds,
399
- lineage: teamState.lineage,
400
- continuity: spawnContinuity,
401
- });
402
- // Update session to starting with log paths
403
- await updateSession(session.id, {
404
- status: 'starting',
405
- started_at: new Date().toISOString(),
406
- stdout_path: logStreams.stdoutPath,
407
- stderr_path: logStreams.stderrPath,
408
- });
409
- // If a spawn directive specifies a model override, use it
410
- const effectivePipelineConfig = pendingDirective?.model
411
- ? { ...pipelineConfig, model: pendingDirective.model }
412
- : pipelineConfig;
413
- // Tag spend with the lever. The team-lead runs the focus's execute phase;
414
- // a review-lineage spawn runs the gate phase (mirrors focus-executor.ts).
415
- // Stage: this module does not resolve the workflow-stage name, so the
416
- // team-lead spawn uses the coding-stage default (the stage a normal
417
- // execute-phase team runs in). Review spawns are tagged 'reviewing'.
418
- const spawnPhase = teamState.lineage === 'review' ? 'gate' : 'execute';
419
- const spawnStage = teamState.lineage === 'review' ? 'reviewing' : 'coding';
420
- const proc = await buildAndSpawnProcess(config, backend, effectivePipelineConfig, resumeId, session.id, focusId, focusName, worktreePath, spawnPhase, spawnStage);
421
- if (!proc) {
422
- activeTeams.delete(focusId);
423
- logStreams.stdoutLogStream.end();
424
- logStreams.stderrStream.end();
425
- logStreams.jsonlStream.end();
426
- return;
427
- }
428
- teamState.leadPid = proc.pid ?? null;
429
- teamState.leadStdin = proc.stdin;
430
- teamState.phase = 'executing';
431
- // Set up output monitoring (stream parsing, activity tracking, event logging)
432
- const { completionDetector, activityTracker } = setupOutputMonitoring({
433
- proc,
434
- backend,
435
- teamState,
436
- focusId,
437
- focusName,
438
- sessionId: session.id,
439
- logStreams,
440
- });
441
- // Stderr pipes to log
442
- proc.stderr?.pipe(logStreams.stderrStream);
443
- // Send prompt via stdin (engine-specific input encoding lives in the backend)
444
- proc.stdin.write(backend.encodeInput(prompt));
445
- // If a spawn directive is pending, send its assembled content as a follow-up message
446
- if (pendingDirective && pendingDirective.message.trim()) {
447
- console.log(`[focus-executor] Sending pending spawn directive to "${focusName}" ` +
448
- `(${pendingDirective.message.length} chars, model: ${pendingDirective.model ?? 'default'})`);
449
- proc.stdin.write(backend.encodeInput(pendingDirective.message));
450
- }
451
- // Update session to running
452
- await updateSession(session.id, {
453
- status: 'running',
454
- pid: proc.pid,
455
- });
456
- console.log(`[focus-executor] Team lead spawned for "${focusName}" (PID: ${proc.pid}, session: ${session.id})`);
457
- // Set up session lifecycle handlers (completion, close, error)
458
- const { attachSessionLifecycle } = await import('../session-lifecycle.js');
459
- attachSessionLifecycle({
460
- proc,
461
- params,
462
- teamState,
463
- sessionId: session.id,
464
- focusId,
465
- focusName,
466
- completionDetector,
467
- activityTracker,
468
- logStreams,
469
- resumeId,
470
- spawnedAt: Date.now(),
471
- config,
472
- });
473
- }
18
+ export { spawnFocusTeam, generateFocusBranchName, buildAgentArgs, initGovernor, getGovernor, } from '../focus-executor.js';
474
19
  //# sourceMappingURL=spawn-team.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spawn-team.js","sourceRoot":"","sources":["../../src/spawner/spawn-team.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spawn-team.js","sourceRoot":"","sources":["../../src/spawner/spawn-team.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,YAAY,EACZ,WAAW,GAEZ,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Staleness signal: is the RUNNING daemon behind the latest published release?
3
+ *
4
+ * Consumed by `telora-daemon status` and `telora-daemon session-state` to
5
+ * surface a one-line warning when the running daemon version is behind the
6
+ * latest published @telora/daemon. The CLI binary executing those commands may
7
+ * be a DIFFERENT install than the running daemon (repo checkout vs npx cache),
8
+ * so the running version comes from daemon.meta.json -- stamped by the daemon
9
+ * itself at startup -- never from the CLI's own package.json.
10
+ *
11
+ * Design constraints:
12
+ * - Silent degradation: never writes to stdout; any failure (no meta, legacy
13
+ * meta without a version stamp, daemon not running, registry unreachable)
14
+ * returns null so callers print their normal output unchanged. The
15
+ * underlying checkForUpdates console.warns on failure -- that goes to
16
+ * stderr, which the session-state stdout contract tolerates.
17
+ * - Cached: the registry answer is cached in the global state dir
18
+ * (version-check-cache.json) with a 6h TTL. An EXPIRED cache is never used
19
+ * as a fallback -- a failed refresh returns null rather than reporting
20
+ * staleness from old data (no stale-cache false positives).
21
+ * - Latency split: session-state is CACHE-ONLY (zero network -- the
22
+ * SessionStart hook blocks Claude Code on this command, and an unreachable
23
+ * registry would otherwise hang it for the full fetch timeout). The async
24
+ * half of "async or cached" lives in the RUNNING DAEMON, which refreshes
25
+ * the cache on a timer (startVersionCacheRefreshLoop) in every install
26
+ * mode, including npx with auto-update disabled -- the case the signal
27
+ * exists for. `status` keeps the live registry fallback: it is an
28
+ * interactive command where a few seconds for a fresh answer is fine.
29
+ */
30
+ import { type DaemonMeta } from './daemon-process.js';
31
+ import { type VersionCheckResult } from './version-check.js';
32
+ import type { InstallMode } from './self-update.js';
33
+ export interface StalenessInfo {
34
+ /** Version of the running daemon (from daemon.meta.json). */
35
+ runningVersion: string;
36
+ /** Latest published version (registry or fresh cache). */
37
+ latestVersion: string;
38
+ /** True when latestVersion is strictly newer than runningVersion. */
39
+ updateAvailable: boolean;
40
+ /** Install mode of the running daemon, when stamped. */
41
+ installMode?: InstallMode;
42
+ /** Whether the running daemon has auto-update enabled, when stamped. */
43
+ autoUpdateEnabled?: boolean;
44
+ }
45
+ /** On-disk shape of the version-check cache file. */
46
+ export interface VersionCheckCache {
47
+ checkedAt: string;
48
+ latestVersion: string;
49
+ }
50
+ /** Cache freshness window. Within this, no network call is made. */
51
+ export declare const VERSION_CHECK_CACHE_TTL_MS: number;
52
+ /** Cache file name within the global state dir (~/.telora/). */
53
+ export declare const VERSION_CHECK_CACHE_FILE = "version-check-cache.json";
54
+ /** Injectable dependencies for {@link getStalenessInfoCore} (tests). */
55
+ export interface StalenessDeps {
56
+ readMeta: () => DaemonMeta | null;
57
+ isDaemonRunning: () => boolean;
58
+ readCache: () => VersionCheckCache | null;
59
+ writeCache: (cache: VersionCheckCache) => void;
60
+ checkForUpdates: (currentVersion: string) => Promise<VersionCheckResult | null>;
61
+ now: () => number;
62
+ }
63
+ export declare function resolveVersionCheckCachePath(): string;
64
+ /** Options for {@link getStalenessInfoCore} / {@link getStalenessInfo}. */
65
+ export interface StalenessOptions {
66
+ /**
67
+ * Never touch the network: answer from a fresh cache or return null.
68
+ * Used by session-state, whose stdout the SessionStart hook blocks on --
69
+ * an unreachable registry must not add even one fetch-timeout of latency.
70
+ * The running daemon's refresh loop keeps the cache warm.
71
+ */
72
+ cacheOnly?: boolean;
73
+ }
74
+ /**
75
+ * Compute staleness info for the running daemon, with injected dependencies.
76
+ *
77
+ * Returns null whenever the signal cannot be established with confidence:
78
+ * no meta file, legacy meta without a version stamp, daemon not running,
79
+ * or no fresh latest-version answer (expired cache + failed registry check,
80
+ * or expired cache in cacheOnly mode).
81
+ */
82
+ export declare function getStalenessInfoCore(deps: StalenessDeps, opts?: StalenessOptions): Promise<StalenessInfo | null>;
83
+ /**
84
+ * Compute staleness info for the running daemon (production deps).
85
+ * Never throws; never writes stdout. Returns null when no signal applies.
86
+ */
87
+ export declare function getStalenessInfo(opts?: StalenessOptions): Promise<StalenessInfo | null>;
88
+ /** Injectable dependencies for {@link maybeRefreshVersionCheckCacheCore} (tests). */
89
+ export interface CacheRefreshDeps {
90
+ readCache: () => VersionCheckCache | null;
91
+ writeCache: (cache: VersionCheckCache) => void;
92
+ checkForUpdates: (currentVersion: string) => Promise<VersionCheckResult | null>;
93
+ now: () => number;
94
+ }
95
+ /**
96
+ * Refresh the version-check cache when it is missing or expired.
97
+ * Returns true when a fresh registry answer was written, false when the
98
+ * cache was already fresh or the registry was unreachable (no write -- an
99
+ * expired cache stays expired rather than being re-stamped with old data).
100
+ */
101
+ export declare function maybeRefreshVersionCheckCacheCore(deps: CacheRefreshDeps, currentVersion: string): Promise<boolean>;
102
+ /** Production wrapper for {@link maybeRefreshVersionCheckCacheCore}. Never throws. */
103
+ export declare function maybeRefreshVersionCheckCache(currentVersion: string): Promise<boolean>;
104
+ /** Default interval for the daemon-side cache refresh loop (1h, like auto-update). */
105
+ export declare const VERSION_CACHE_REFRESH_INTERVAL_MS: number;
106
+ /**
107
+ * Start the daemon-side version-cache refresh loop.
108
+ *
109
+ * Runs in EVERY install mode regardless of the auto-update flag -- npx with
110
+ * auto-update disabled is precisely the configuration the staleness signal
111
+ * exists for. Each tick refreshes the cache only when it is missing/expired
112
+ * (the TTL throttles registry traffic to ~one fetch per 6h). The unref'd
113
+ * timer never blocks process exit. Returns a cleanup function.
114
+ */
115
+ export declare function startVersionCacheRefreshLoop(currentVersion: string, intervalMs?: number): () => void;
116
+ /**
117
+ * Format the one-line staleness warning, or null when no warning applies.
118
+ *
119
+ * When the daemon runs from an npx cache with auto-update disabled, the line
120
+ * carries the explicit escape hatch: self-update cannot replace an npx-cached
121
+ * binary in place, so a global install + restart is the fix.
122
+ */
123
+ export declare function formatStalenessWarning(info: StalenessInfo | null): string | null;
124
+ //# sourceMappingURL=staleness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staleness.d.ts","sourceRoot":"","sources":["../src/staleness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAmC,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAMpD,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,eAAe,EAAE,OAAO,CAAC;IACzB,wDAAwD;IACxD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,oEAAoE;AACpE,eAAO,MAAM,0BAA0B,QAAqB,CAAC;AAE7D,gEAAgE;AAChE,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAEnE,wEAAwE;AACxE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC;IAClC,eAAe,EAAE,MAAM,OAAO,CAAC;IAC/B,SAAS,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC;IAC1C,UAAU,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC/C,eAAe,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAChF,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAMD,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAiCD,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,aAAa,EACnB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAmC/B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAajG;AAMD,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC;IAC1C,UAAU,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC/C,eAAe,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAChF,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,gBAAgB,EACtB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAelB;AAED,sFAAsF;AACtF,wBAAsB,6BAA6B,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAW5F;AAED,sFAAsF;AACtF,eAAO,MAAM,iCAAiC,QAAiB,CAAC;AAEhE;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC1C,cAAc,EAAE,MAAM,EACtB,UAAU,GAAE,MAA0C,GACrD,MAAM,IAAI,CAaZ;AAMD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAShF"}