sensorium-mcp 3.1.2 → 3.1.3-board.10

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 (625) hide show
  1. package/Install-Sensorium.ps1 +257 -43
  2. package/README.md +2 -0
  3. package/dist/board/api/api.js +84 -0
  4. package/dist/board/api/api.test.ts +23 -0
  5. package/dist/board/api/client.js +113 -0
  6. package/dist/board/components/BottomNav.js +32 -0
  7. package/dist/board/components/Card.js +78 -0
  8. package/dist/board/components/Combobox.js +79 -0
  9. package/dist/board/components/CommentComposer.js +29 -0
  10. package/dist/board/components/CommentList.js +42 -0
  11. package/dist/board/components/DirTreePicker.js +128 -0
  12. package/dist/board/components/Dropdown.js +67 -0
  13. package/dist/board/components/Lane.js +47 -0
  14. package/dist/board/components/PriorityChip.js +20 -0
  15. package/dist/board/components/ProfileSummary.js +89 -0
  16. package/dist/board/components/StateBanner.js +24 -0
  17. package/dist/board/components/StatusChip.js +26 -0
  18. package/dist/board/components/rateLimit.js +32 -0
  19. package/dist/board/components/rateLimit.test.ts +16 -0
  20. package/dist/board/components/time.js +14 -0
  21. package/dist/board/config.js +56 -0
  22. package/dist/board/index.html +18 -0
  23. package/dist/board/main.js +37 -0
  24. package/dist/board/mock/api.mock.js +491 -0
  25. package/dist/board/mock/api.mock.test.ts +460 -0
  26. package/dist/board/mock/fixtures.js +512 -0
  27. package/dist/board/schema/policy.js +261 -0
  28. package/dist/board/state/recur.js +24 -0
  29. package/dist/board/state/recur.test.ts +24 -0
  30. package/dist/board/state/useBoard.js +161 -0
  31. package/dist/board/state/useBuilder.js +357 -0
  32. package/dist/board/state/useBuilder.test.ts +468 -0
  33. package/dist/board/state/useCard.js +193 -0
  34. package/dist/board/state/useCard.test.ts +435 -0
  35. package/dist/board/state/useDirBrowser.js +23 -0
  36. package/dist/board/styles/board.css +2885 -0
  37. package/dist/board/styles/tokens.css +72 -0
  38. package/dist/board/vendor/vue.esm-browser.js +9 -0
  39. package/dist/board/views/App.js +61 -0
  40. package/dist/board/views/BoardView.js +153 -0
  41. package/dist/board/views/BuilderView.js +582 -0
  42. package/dist/board/views/CardView.js +382 -0
  43. package/dist/board/views/SettingsView.js +152 -0
  44. package/dist/config/agent-settings.d.ts +11 -0
  45. package/dist/config/agent-settings.d.ts.map +1 -1
  46. package/dist/config/agent-settings.js +79 -0
  47. package/dist/config/agent-settings.js.map +1 -1
  48. package/dist/config/detail-grant.d.ts +7 -16
  49. package/dist/config/detail-grant.d.ts.map +1 -1
  50. package/dist/config/detail-grant.js +12 -35
  51. package/dist/config/detail-grant.js.map +1 -1
  52. package/dist/config/index.d.ts +2 -0
  53. package/dist/config/index.d.ts.map +1 -1
  54. package/dist/config/index.js +17 -0
  55. package/dist/config/index.js.map +1 -1
  56. package/dist/config/mcp-settings.d.ts +7 -1
  57. package/dist/config/mcp-settings.d.ts.map +1 -1
  58. package/dist/config/mcp-settings.js +9 -0
  59. package/dist/config/mcp-settings.js.map +1 -1
  60. package/dist/config/misc-settings.d.ts +22 -1
  61. package/dist/config/misc-settings.d.ts.map +1 -1
  62. package/dist/config/misc-settings.js +93 -3
  63. package/dist/config/misc-settings.js.map +1 -1
  64. package/dist/config/operator-grant.d.ts +9 -0
  65. package/dist/config/operator-grant.d.ts.map +1 -0
  66. package/dist/config/operator-grant.js +24 -0
  67. package/dist/config/operator-grant.js.map +1 -0
  68. package/dist/config/voice-grant.d.ts +10 -0
  69. package/dist/config/voice-grant.d.ts.map +1 -0
  70. package/dist/config/voice-grant.js +18 -0
  71. package/dist/config/voice-grant.js.map +1 -0
  72. package/dist/dashboard/board-static.d.ts +22 -0
  73. package/dist/dashboard/board-static.d.ts.map +1 -0
  74. package/dist/dashboard/board-static.js +130 -0
  75. package/dist/dashboard/board-static.js.map +1 -0
  76. package/dist/dashboard/presets.d.ts +1 -1
  77. package/dist/dashboard/presets.d.ts.map +1 -1
  78. package/dist/dashboard/presets.js +1 -1
  79. package/dist/dashboard/presets.js.map +1 -1
  80. package/dist/dashboard/routes/agent-templates.d.ts.map +1 -1
  81. package/dist/dashboard/routes/agent-templates.js +6 -9
  82. package/dist/dashboard/routes/agent-templates.js.map +1 -1
  83. package/dist/dashboard/routes/board-body.d.ts +8 -0
  84. package/dist/dashboard/routes/board-body.d.ts.map +1 -0
  85. package/dist/dashboard/routes/board-body.js +20 -0
  86. package/dist/dashboard/routes/board-body.js.map +1 -0
  87. package/dist/dashboard/routes/board-dir-listing.d.ts +70 -0
  88. package/dist/dashboard/routes/board-dir-listing.d.ts.map +1 -0
  89. package/dist/dashboard/routes/board-dir-listing.js +192 -0
  90. package/dist/dashboard/routes/board-dir-listing.js.map +1 -0
  91. package/dist/dashboard/routes/board-lane-groups.d.ts +6 -0
  92. package/dist/dashboard/routes/board-lane-groups.d.ts.map +1 -0
  93. package/dist/dashboard/routes/board-lane-groups.js +52 -0
  94. package/dist/dashboard/routes/board-lane-groups.js.map +1 -0
  95. package/dist/dashboard/routes/board-policy.d.ts +224 -0
  96. package/dist/dashboard/routes/board-policy.d.ts.map +1 -0
  97. package/dist/dashboard/routes/board-policy.js +214 -0
  98. package/dist/dashboard/routes/board-policy.js.map +1 -0
  99. package/dist/dashboard/routes/board-profile-parse.d.ts +32 -0
  100. package/dist/dashboard/routes/board-profile-parse.d.ts.map +1 -0
  101. package/dist/dashboard/routes/board-profile-parse.js +338 -0
  102. package/dist/dashboard/routes/board-profile-parse.js.map +1 -0
  103. package/dist/dashboard/routes/board.d.ts +90 -0
  104. package/dist/dashboard/routes/board.d.ts.map +1 -0
  105. package/dist/dashboard/routes/board.js +721 -0
  106. package/dist/dashboard/routes/board.js.map +1 -0
  107. package/dist/dashboard/routes/codex.d.ts +14 -0
  108. package/dist/dashboard/routes/codex.d.ts.map +1 -0
  109. package/dist/dashboard/routes/codex.js +92 -0
  110. package/dist/dashboard/routes/codex.js.map +1 -0
  111. package/dist/dashboard/routes/prompts.d.ts +2 -2
  112. package/dist/dashboard/routes/prompts.d.ts.map +1 -1
  113. package/dist/dashboard/routes/prompts.js +2 -2
  114. package/dist/dashboard/routes/prompts.js.map +1 -1
  115. package/dist/dashboard/routes/settings.d.ts +2 -0
  116. package/dist/dashboard/routes/settings.d.ts.map +1 -1
  117. package/dist/dashboard/routes/settings.js +24 -1
  118. package/dist/dashboard/routes/settings.js.map +1 -1
  119. package/dist/dashboard/routes/skills.d.ts +7 -1
  120. package/dist/dashboard/routes/skills.d.ts.map +1 -1
  121. package/dist/dashboard/routes/skills.js +6 -6
  122. package/dist/dashboard/routes/skills.js.map +1 -1
  123. package/dist/dashboard/routes/snapshots.d.ts +2 -1
  124. package/dist/dashboard/routes/snapshots.d.ts.map +1 -1
  125. package/dist/dashboard/routes/snapshots.js +24 -18
  126. package/dist/dashboard/routes/snapshots.js.map +1 -1
  127. package/dist/dashboard/routes/templates.js +5 -5
  128. package/dist/dashboard/routes/templates.js.map +1 -1
  129. package/dist/dashboard/routes/threads-create.d.ts +17 -0
  130. package/dist/dashboard/routes/threads-create.d.ts.map +1 -1
  131. package/dist/dashboard/routes/threads-create.js +32 -10
  132. package/dist/dashboard/routes/threads-create.js.map +1 -1
  133. package/dist/dashboard/routes/threads-helpers.d.ts +11 -2
  134. package/dist/dashboard/routes/threads-helpers.d.ts.map +1 -1
  135. package/dist/dashboard/routes/threads-helpers.js +20 -3
  136. package/dist/dashboard/routes/threads-helpers.js.map +1 -1
  137. package/dist/dashboard/routes/threads-read.d.ts +16 -4
  138. package/dist/dashboard/routes/threads-read.d.ts.map +1 -1
  139. package/dist/dashboard/routes/threads-read.js +61 -55
  140. package/dist/dashboard/routes/threads-read.js.map +1 -1
  141. package/dist/dashboard/routes/threads.d.ts +2 -2
  142. package/dist/dashboard/routes/threads.d.ts.map +1 -1
  143. package/dist/dashboard/routes/threads.js +143 -29
  144. package/dist/dashboard/routes/threads.js.map +1 -1
  145. package/dist/dashboard/routes/types.d.ts +6 -0
  146. package/dist/dashboard/routes/types.d.ts.map +1 -1
  147. package/dist/dashboard/routes/types.js.map +1 -1
  148. package/dist/dashboard/routes.d.ts +2 -2
  149. package/dist/dashboard/routes.d.ts.map +1 -1
  150. package/dist/dashboard/routes.js +85 -7
  151. package/dist/dashboard/routes.js.map +1 -1
  152. package/dist/dashboard/spa.html +15 -12
  153. package/dist/data/board/board-schema.d.ts +29 -0
  154. package/dist/data/board/board-schema.d.ts.map +1 -0
  155. package/dist/data/board/board-schema.js +202 -0
  156. package/dist/data/board/board-schema.js.map +1 -0
  157. package/dist/data/board/board-types.d.ts +175 -0
  158. package/dist/data/board/board-types.d.ts.map +1 -0
  159. package/dist/data/board/board-types.js +9 -0
  160. package/dist/data/board/board-types.js.map +1 -0
  161. package/dist/data/board/card.repository.d.ts +137 -0
  162. package/dist/data/board/card.repository.d.ts.map +1 -0
  163. package/dist/data/board/card.repository.js +470 -0
  164. package/dist/data/board/card.repository.js.map +1 -0
  165. package/dist/data/board/comment.repository.d.ts +14 -0
  166. package/dist/data/board/comment.repository.d.ts.map +1 -0
  167. package/dist/data/board/comment.repository.js +42 -0
  168. package/dist/data/board/comment.repository.js.map +1 -0
  169. package/dist/data/board/lane-group.repository.d.ts +19 -0
  170. package/dist/data/board/lane-group.repository.d.ts.map +1 -0
  171. package/dist/data/board/lane-group.repository.js +66 -0
  172. package/dist/data/board/lane-group.repository.js.map +1 -0
  173. package/dist/data/board/profile-defaults.d.ts +17 -0
  174. package/dist/data/board/profile-defaults.d.ts.map +1 -0
  175. package/dist/data/board/profile-defaults.js +107 -0
  176. package/dist/data/board/profile-defaults.js.map +1 -0
  177. package/dist/data/interfaces.d.ts +1 -0
  178. package/dist/data/interfaces.d.ts.map +1 -1
  179. package/dist/data/memory/bootstrap.d.ts +1 -8
  180. package/dist/data/memory/bootstrap.d.ts.map +1 -1
  181. package/dist/data/memory/bootstrap.js +27 -37
  182. package/dist/data/memory/bootstrap.js.map +1 -1
  183. package/dist/data/memory/consolidation.d.ts +9 -31
  184. package/dist/data/memory/consolidation.d.ts.map +1 -1
  185. package/dist/data/memory/consolidation.js +22 -32
  186. package/dist/data/memory/consolidation.js.map +1 -1
  187. package/dist/data/memory/db-maintenance.d.ts +54 -0
  188. package/dist/data/memory/db-maintenance.d.ts.map +1 -0
  189. package/dist/data/memory/db-maintenance.js +81 -0
  190. package/dist/data/memory/db-maintenance.js.map +1 -0
  191. package/dist/data/memory/episodes.d.ts +2 -1
  192. package/dist/data/memory/episodes.d.ts.map +1 -1
  193. package/dist/data/memory/episodes.js +5 -1
  194. package/dist/data/memory/episodes.js.map +1 -1
  195. package/dist/data/memory/index.d.ts +0 -4
  196. package/dist/data/memory/index.d.ts.map +1 -1
  197. package/dist/data/memory/index.js +0 -4
  198. package/dist/data/memory/index.js.map +1 -1
  199. package/dist/data/memory/key-knowledge.d.ts +51 -0
  200. package/dist/data/memory/key-knowledge.d.ts.map +1 -0
  201. package/dist/data/memory/key-knowledge.js +128 -0
  202. package/dist/data/memory/key-knowledge.js.map +1 -0
  203. package/dist/data/memory/migration-runner.d.ts +1 -1
  204. package/dist/data/memory/migration-runner.d.ts.map +1 -1
  205. package/dist/data/memory/migration-runner.js +407 -1
  206. package/dist/data/memory/migration-runner.js.map +1 -1
  207. package/dist/data/memory/narrative-lint.d.ts +2 -2
  208. package/dist/data/memory/narrative-lint.d.ts.map +1 -1
  209. package/dist/data/memory/narrative-lint.js +23 -13
  210. package/dist/data/memory/narrative-lint.js.map +1 -1
  211. package/dist/data/memory/narrative-resolutions.d.ts +9 -2
  212. package/dist/data/memory/narrative-resolutions.d.ts.map +1 -1
  213. package/dist/data/memory/narrative-resolutions.js +9 -8
  214. package/dist/data/memory/narrative-resolutions.js.map +1 -1
  215. package/dist/data/memory/narrative-sources.d.ts +1 -1
  216. package/dist/data/memory/narrative-sources.d.ts.map +1 -1
  217. package/dist/data/memory/narrative-sources.js +8 -3
  218. package/dist/data/memory/narrative-sources.js.map +1 -1
  219. package/dist/data/memory/narrative-store.d.ts +24 -0
  220. package/dist/data/memory/narrative-store.d.ts.map +1 -1
  221. package/dist/data/memory/narrative-store.js +73 -35
  222. package/dist/data/memory/narrative-store.js.map +1 -1
  223. package/dist/data/memory/narrative.d.ts.map +1 -1
  224. package/dist/data/memory/narrative.js +47 -29
  225. package/dist/data/memory/narrative.js.map +1 -1
  226. package/dist/data/memory/note-archival.d.ts +1 -1
  227. package/dist/data/memory/note-archival.d.ts.map +1 -1
  228. package/dist/data/memory/note-archival.js +7 -3
  229. package/dist/data/memory/note-archival.js.map +1 -1
  230. package/dist/data/memory/note-embeddings.d.ts +7 -0
  231. package/dist/data/memory/note-embeddings.d.ts.map +1 -1
  232. package/dist/data/memory/note-embeddings.js +6 -2
  233. package/dist/data/memory/note-embeddings.js.map +1 -1
  234. package/dist/data/memory/passive-notice.repository.d.ts +70 -0
  235. package/dist/data/memory/passive-notice.repository.d.ts.map +1 -0
  236. package/dist/data/memory/passive-notice.repository.js +85 -0
  237. package/dist/data/memory/passive-notice.repository.js.map +1 -0
  238. package/dist/data/memory/schema-ddl.d.ts +120 -1
  239. package/dist/data/memory/schema-ddl.d.ts.map +1 -1
  240. package/dist/data/memory/schema-ddl.js +171 -4
  241. package/dist/data/memory/schema-ddl.js.map +1 -1
  242. package/dist/data/memory/schema-guard.d.ts.map +1 -1
  243. package/dist/data/memory/schema-guard.js +5 -41
  244. package/dist/data/memory/schema-guard.js.map +1 -1
  245. package/dist/data/memory/schema.d.ts.map +1 -1
  246. package/dist/data/memory/schema.js +10 -34
  247. package/dist/data/memory/schema.js.map +1 -1
  248. package/dist/data/memory/semantic-notes.d.ts +13 -8
  249. package/dist/data/memory/semantic-notes.d.ts.map +1 -1
  250. package/dist/data/memory/semantic-notes.js +12 -17
  251. package/dist/data/memory/semantic-notes.js.map +1 -1
  252. package/dist/data/memory/thread-registry.d.ts +330 -15
  253. package/dist/data/memory/thread-registry.d.ts.map +1 -1
  254. package/dist/data/memory/thread-registry.js +523 -67
  255. package/dist/data/memory/thread-registry.js.map +1 -1
  256. package/dist/data/memory/utils.d.ts +6 -0
  257. package/dist/data/memory/utils.d.ts.map +1 -1
  258. package/dist/data/memory/utils.js +13 -0
  259. package/dist/data/memory/utils.js.map +1 -1
  260. package/dist/data/memory/worker-lifecycle.repository.d.ts +308 -0
  261. package/dist/data/memory/worker-lifecycle.repository.d.ts.map +1 -0
  262. package/dist/data/memory/worker-lifecycle.repository.js +428 -0
  263. package/dist/data/memory/worker-lifecycle.repository.js.map +1 -0
  264. package/dist/data/optional.d.ts +16 -0
  265. package/dist/data/optional.d.ts.map +1 -0
  266. package/dist/data/optional.js +47 -0
  267. package/dist/data/optional.js.map +1 -0
  268. package/dist/index.js +156 -24
  269. package/dist/index.js.map +1 -1
  270. package/dist/integrations/openai/speech.d.ts.map +1 -1
  271. package/dist/integrations/openai/speech.js +52 -19
  272. package/dist/integrations/openai/speech.js.map +1 -1
  273. package/dist/integrations/openai/video.d.ts +1 -1
  274. package/dist/integrations/openai/video.d.ts.map +1 -1
  275. package/dist/integrations/openai/video.js +13 -8
  276. package/dist/integrations/openai/video.js.map +1 -1
  277. package/dist/integrations/telegram/types.d.ts +11 -0
  278. package/dist/integrations/telegram/types.d.ts.map +1 -1
  279. package/dist/lib/http-retry.d.ts +91 -0
  280. package/dist/lib/http-retry.d.ts.map +1 -0
  281. package/dist/lib/http-retry.js +177 -0
  282. package/dist/lib/http-retry.js.map +1 -0
  283. package/dist/lib/mcp-http-port.d.ts +12 -0
  284. package/dist/lib/mcp-http-port.d.ts.map +1 -0
  285. package/dist/lib/mcp-http-port.js +19 -0
  286. package/dist/lib/mcp-http-port.js.map +1 -0
  287. package/dist/lib/paths.d.ts +29 -4
  288. package/dist/lib/paths.d.ts.map +1 -1
  289. package/dist/lib/paths.js +31 -4
  290. package/dist/lib/paths.js.map +1 -1
  291. package/dist/lib/types.d.ts +2 -0
  292. package/dist/lib/types.d.ts.map +1 -1
  293. package/dist/lib/usage-metering/pricing.js +1 -1
  294. package/dist/lib/usage-metering/pricing.js.map +1 -1
  295. package/dist/lib/usage-metering/sink.d.ts +4 -0
  296. package/dist/lib/usage-metering/sink.d.ts.map +1 -1
  297. package/dist/lib/usage-metering/sink.js +6 -4
  298. package/dist/lib/usage-metering/sink.js.map +1 -1
  299. package/dist/lib/utils.d.ts +31 -0
  300. package/dist/lib/utils.d.ts.map +1 -1
  301. package/dist/lib/utils.js +49 -0
  302. package/dist/lib/utils.js.map +1 -1
  303. package/dist/llm/prompts/narrative.d.ts.map +1 -1
  304. package/dist/llm/prompts/narrative.js +27 -86
  305. package/dist/llm/prompts/narrative.js.map +1 -1
  306. package/dist/log-parsing/log-events.d.ts +38 -0
  307. package/dist/log-parsing/log-events.d.ts.map +1 -0
  308. package/dist/log-parsing/log-events.js +2 -0
  309. package/dist/log-parsing/log-events.js.map +1 -0
  310. package/dist/log-parsing/parser-registry.d.ts +4 -0
  311. package/dist/log-parsing/parser-registry.d.ts.map +1 -0
  312. package/dist/log-parsing/parser-registry.js +18 -0
  313. package/dist/log-parsing/parser-registry.js.map +1 -0
  314. package/dist/log-parsing/parsers/claude.d.ts +6 -0
  315. package/dist/log-parsing/parsers/claude.d.ts.map +1 -0
  316. package/dist/log-parsing/parsers/claude.js +100 -0
  317. package/dist/log-parsing/parsers/claude.js.map +1 -0
  318. package/dist/log-parsing/parsers/codex.d.ts +6 -0
  319. package/dist/log-parsing/parsers/codex.d.ts.map +1 -0
  320. package/dist/log-parsing/parsers/codex.js +116 -0
  321. package/dist/log-parsing/parsers/codex.js.map +1 -0
  322. package/dist/log-parsing/parsers/copilot.d.ts +6 -0
  323. package/dist/log-parsing/parsers/copilot.d.ts.map +1 -0
  324. package/dist/log-parsing/parsers/copilot.js +65 -0
  325. package/dist/log-parsing/parsers/copilot.js.map +1 -0
  326. package/dist/log-parsing/parsers/json-lines.d.ts +9 -0
  327. package/dist/log-parsing/parsers/json-lines.d.ts.map +1 -0
  328. package/dist/log-parsing/parsers/json-lines.js +25 -0
  329. package/dist/log-parsing/parsers/json-lines.js.map +1 -0
  330. package/dist/log-parsing/render.d.ts +33 -0
  331. package/dist/log-parsing/render.d.ts.map +1 -0
  332. package/dist/log-parsing/render.js +113 -0
  333. package/dist/log-parsing/render.js.map +1 -0
  334. package/dist/log-parsing/text.d.ts +8 -0
  335. package/dist/log-parsing/text.d.ts.map +1 -0
  336. package/dist/log-parsing/text.js +20 -0
  337. package/dist/log-parsing/text.js.map +1 -0
  338. package/dist/server/http-server.d.ts +8 -1
  339. package/dist/server/http-server.d.ts.map +1 -1
  340. package/dist/server/http-server.js +41 -19
  341. package/dist/server/http-server.js.map +1 -1
  342. package/dist/server/port-holder.d.ts +94 -0
  343. package/dist/server/port-holder.d.ts.map +1 -0
  344. package/dist/server/port-holder.js +122 -0
  345. package/dist/server/port-holder.js.map +1 -0
  346. package/dist/services/agent-spawn.service.d.ts +50 -5
  347. package/dist/services/agent-spawn.service.d.ts.map +1 -1
  348. package/dist/services/agent-spawn.service.js +59 -66
  349. package/dist/services/agent-spawn.service.js.map +1 -1
  350. package/dist/services/background-runner.d.ts +0 -1
  351. package/dist/services/background-runner.d.ts.map +1 -1
  352. package/dist/services/background-runner.js +0 -58
  353. package/dist/services/background-runner.js.map +1 -1
  354. package/dist/services/board/board-signals.d.ts +45 -0
  355. package/dist/services/board/board-signals.d.ts.map +1 -0
  356. package/dist/services/board/board-signals.js +170 -0
  357. package/dist/services/board/board-signals.js.map +1 -0
  358. package/dist/services/board/card-briefing.d.ts +24 -0
  359. package/dist/services/board/card-briefing.d.ts.map +1 -0
  360. package/dist/services/board/card-briefing.js +132 -0
  361. package/dist/services/board/card-briefing.js.map +1 -0
  362. package/dist/services/board/card-diagnostics.d.ts +25 -0
  363. package/dist/services/board/card-diagnostics.d.ts.map +1 -0
  364. package/dist/services/board/card-diagnostics.js +50 -0
  365. package/dist/services/board/card-diagnostics.js.map +1 -0
  366. package/dist/services/board/live-root-thread.d.ts +8 -0
  367. package/dist/services/board/live-root-thread.d.ts.map +1 -0
  368. package/dist/services/board/live-root-thread.js +2 -0
  369. package/dist/services/board/live-root-thread.js.map +1 -0
  370. package/dist/services/board/orchestrator.service.d.ts +119 -0
  371. package/dist/services/board/orchestrator.service.d.ts.map +1 -0
  372. package/dist/services/board/orchestrator.service.js +387 -0
  373. package/dist/services/board/orchestrator.service.js.map +1 -0
  374. package/dist/services/board/release-worker.d.ts +43 -0
  375. package/dist/services/board/release-worker.d.ts.map +1 -0
  376. package/dist/services/board/release-worker.js +96 -0
  377. package/dist/services/board/release-worker.js.map +1 -0
  378. package/dist/services/board/report-capture.d.ts +94 -0
  379. package/dist/services/board/report-capture.d.ts.map +1 -0
  380. package/dist/services/board/report-capture.js +398 -0
  381. package/dist/services/board/report-capture.js.map +1 -0
  382. package/dist/services/board/worker-spawn.d.ts +89 -0
  383. package/dist/services/board/worker-spawn.d.ts.map +1 -0
  384. package/dist/services/board/worker-spawn.js +177 -0
  385. package/dist/services/board/worker-spawn.js.map +1 -0
  386. package/dist/services/board/worktree.d.ts +45 -0
  387. package/dist/services/board/worktree.d.ts.map +1 -0
  388. package/dist/services/board/worktree.js +183 -0
  389. package/dist/services/board/worktree.js.map +1 -0
  390. package/dist/services/broker-client.d.ts +84 -2
  391. package/dist/services/broker-client.d.ts.map +1 -1
  392. package/dist/services/broker-client.js +72 -6
  393. package/dist/services/broker-client.js.map +1 -1
  394. package/dist/services/claude-spawn.service.d.ts +5 -0
  395. package/dist/services/claude-spawn.service.d.ts.map +1 -1
  396. package/dist/services/claude-spawn.service.js +37 -21
  397. package/dist/services/claude-spawn.service.js.map +1 -1
  398. package/dist/services/codex-spawn.service.d.ts +8 -3
  399. package/dist/services/codex-spawn.service.d.ts.map +1 -1
  400. package/dist/services/codex-spawn.service.js +84 -67
  401. package/dist/services/codex-spawn.service.js.map +1 -1
  402. package/dist/services/consolidation.service.d.ts.map +1 -1
  403. package/dist/services/consolidation.service.js +5 -49
  404. package/dist/services/consolidation.service.js.map +1 -1
  405. package/dist/services/copilot-spawn.service.d.ts +1 -1
  406. package/dist/services/copilot-spawn.service.d.ts.map +1 -1
  407. package/dist/services/copilot-spawn.service.js +10 -5
  408. package/dist/services/copilot-spawn.service.js.map +1 -1
  409. package/dist/services/daily-session.d.ts +24 -11
  410. package/dist/services/daily-session.d.ts.map +1 -1
  411. package/dist/services/daily-session.js +113 -33
  412. package/dist/services/daily-session.js.map +1 -1
  413. package/dist/services/death-alert.service.d.ts +55 -0
  414. package/dist/services/death-alert.service.d.ts.map +1 -0
  415. package/dist/services/death-alert.service.js +64 -0
  416. package/dist/services/death-alert.service.js.map +1 -0
  417. package/dist/services/dispatcher/broker.d.ts +66 -0
  418. package/dist/services/dispatcher/broker.d.ts.map +1 -1
  419. package/dist/services/dispatcher/broker.js +60 -52
  420. package/dist/services/dispatcher/broker.js.map +1 -1
  421. package/dist/services/dispatcher/poller.d.ts.map +1 -1
  422. package/dist/services/dispatcher/poller.js +31 -24
  423. package/dist/services/dispatcher/poller.js.map +1 -1
  424. package/dist/services/http-retry.d.ts +1 -90
  425. package/dist/services/http-retry.d.ts.map +1 -1
  426. package/dist/services/http-retry.js +1 -176
  427. package/dist/services/http-retry.js.map +1 -1
  428. package/dist/services/intent.d.ts +15 -1
  429. package/dist/services/intent.d.ts.map +1 -1
  430. package/dist/services/intent.js +39 -27
  431. package/dist/services/intent.js.map +1 -1
  432. package/dist/services/keeper.service.d.ts +76 -3
  433. package/dist/services/keeper.service.d.ts.map +1 -1
  434. package/dist/services/keeper.service.js +112 -35
  435. package/dist/services/keeper.service.js.map +1 -1
  436. package/dist/services/mcp-config.service.d.ts.map +1 -1
  437. package/dist/services/mcp-config.service.js +14 -1
  438. package/dist/services/mcp-config.service.js.map +1 -1
  439. package/dist/services/memory-briefing.service.d.ts +1 -1
  440. package/dist/services/memory-briefing.service.d.ts.map +1 -1
  441. package/dist/services/memory-briefing.service.js +28 -73
  442. package/dist/services/memory-briefing.service.js.map +1 -1
  443. package/dist/services/passive-notice.service.d.ts +56 -0
  444. package/dist/services/passive-notice.service.d.ts.map +1 -0
  445. package/dist/services/passive-notice.service.js +92 -0
  446. package/dist/services/passive-notice.service.js.map +1 -0
  447. package/dist/services/predefined-prompts.d.ts +11 -0
  448. package/dist/services/predefined-prompts.d.ts.map +1 -0
  449. package/dist/services/predefined-prompts.js +25 -0
  450. package/dist/services/predefined-prompts.js.map +1 -0
  451. package/dist/services/process.service.d.ts +111 -27
  452. package/dist/services/process.service.d.ts.map +1 -1
  453. package/dist/services/process.service.js +245 -173
  454. package/dist/services/process.service.js.map +1 -1
  455. package/dist/services/spawn-common.d.ts +281 -5
  456. package/dist/services/spawn-common.d.ts.map +1 -1
  457. package/dist/services/spawn-common.js +884 -188
  458. package/dist/services/spawn-common.js.map +1 -1
  459. package/dist/services/spawn-exit-watcher.d.ts +45 -35
  460. package/dist/services/spawn-exit-watcher.d.ts.map +1 -1
  461. package/dist/services/spawn-exit-watcher.js +120 -100
  462. package/dist/services/spawn-exit-watcher.js.map +1 -1
  463. package/dist/services/telegram.d.ts +31 -8
  464. package/dist/services/telegram.d.ts.map +1 -1
  465. package/dist/services/telegram.js +58 -26
  466. package/dist/services/telegram.js.map +1 -1
  467. package/dist/services/thread-health.service.d.ts +8 -0
  468. package/dist/services/thread-health.service.d.ts.map +1 -1
  469. package/dist/services/thread-health.service.js +14 -10
  470. package/dist/services/thread-health.service.js.map +1 -1
  471. package/dist/services/thread-lifecycle.service.d.ts +17 -1
  472. package/dist/services/thread-lifecycle.service.d.ts.map +1 -1
  473. package/dist/services/thread-lifecycle.service.js +47 -6
  474. package/dist/services/thread-lifecycle.service.js.map +1 -1
  475. package/dist/services/thread-log-reader.d.ts +81 -0
  476. package/dist/services/thread-log-reader.d.ts.map +1 -0
  477. package/dist/services/thread-log-reader.js +141 -0
  478. package/dist/services/thread-log-reader.js.map +1 -0
  479. package/dist/services/thread-purge.service.d.ts +200 -0
  480. package/dist/services/thread-purge.service.d.ts.map +1 -0
  481. package/dist/services/thread-purge.service.js +644 -0
  482. package/dist/services/thread-purge.service.js.map +1 -0
  483. package/dist/services/topic.service.d.ts +44 -2
  484. package/dist/services/topic.service.d.ts.map +1 -1
  485. package/dist/services/topic.service.js +74 -13
  486. package/dist/services/topic.service.js.map +1 -1
  487. package/dist/services/usage/usage-inbox-notifier.d.ts +50 -0
  488. package/dist/services/usage/usage-inbox-notifier.d.ts.map +1 -0
  489. package/dist/services/usage/usage-inbox-notifier.js +118 -0
  490. package/dist/services/usage/usage-inbox-notifier.js.map +1 -0
  491. package/dist/services/usage/usage-poller.service.d.ts +41 -0
  492. package/dist/services/usage/usage-poller.service.d.ts.map +1 -0
  493. package/dist/services/usage/usage-poller.service.js +67 -0
  494. package/dist/services/usage/usage-poller.service.js.map +1 -0
  495. package/dist/services/usage/usage-snapshot-provider.d.ts +40 -0
  496. package/dist/services/usage/usage-snapshot-provider.d.ts.map +1 -0
  497. package/dist/services/usage/usage-snapshot-provider.js +89 -0
  498. package/dist/services/usage/usage-snapshot-provider.js.map +1 -0
  499. package/dist/services/usage/usage-types.d.ts +28 -0
  500. package/dist/services/usage/usage-types.d.ts.map +1 -0
  501. package/dist/services/usage/usage-types.js +14 -0
  502. package/dist/services/usage/usage-types.js.map +1 -0
  503. package/dist/services/worker-birth.d.ts +154 -0
  504. package/dist/services/worker-birth.d.ts.map +1 -0
  505. package/dist/services/worker-birth.js +274 -0
  506. package/dist/services/worker-birth.js.map +1 -0
  507. package/dist/services/worker-cleanup.service.d.ts +242 -19
  508. package/dist/services/worker-cleanup.service.d.ts.map +1 -1
  509. package/dist/services/worker-cleanup.service.js +893 -355
  510. package/dist/services/worker-cleanup.service.js.map +1 -1
  511. package/dist/services/worker-lifecycle-executor.d.ts +42 -0
  512. package/dist/services/worker-lifecycle-executor.d.ts.map +1 -0
  513. package/dist/services/worker-lifecycle-executor.js +63 -0
  514. package/dist/services/worker-lifecycle-executor.js.map +1 -0
  515. package/dist/services/worker-single-use.d.ts +92 -0
  516. package/dist/services/worker-single-use.d.ts.map +1 -0
  517. package/dist/services/worker-single-use.js +155 -0
  518. package/dist/services/worker-single-use.js.map +1 -0
  519. package/dist/sessions/mcp-registry.d.ts +33 -2
  520. package/dist/sessions/mcp-registry.d.ts.map +1 -1
  521. package/dist/sessions/mcp-registry.js +153 -30
  522. package/dist/sessions/mcp-registry.js.map +1 -1
  523. package/dist/test-bootstrap.d.ts +19 -12
  524. package/dist/test-bootstrap.d.ts.map +1 -1
  525. package/dist/test-bootstrap.js +69 -21
  526. package/dist/test-bootstrap.js.map +1 -1
  527. package/dist/test-tripwire.test-support.d.ts +75 -0
  528. package/dist/test-tripwire.test-support.d.ts.map +1 -0
  529. package/dist/test-tripwire.test-support.js +353 -0
  530. package/dist/test-tripwire.test-support.js.map +1 -0
  531. package/dist/tools/defs/memory-defs.d.ts.map +1 -1
  532. package/dist/tools/defs/memory-defs.js +12 -4
  533. package/dist/tools/defs/memory-defs.js.map +1 -1
  534. package/dist/tools/defs/session-defs.d.ts.map +1 -1
  535. package/dist/tools/defs/session-defs.js +26 -10
  536. package/dist/tools/defs/session-defs.js.map +1 -1
  537. package/dist/tools/defs/utility-defs.js +1 -1
  538. package/dist/tools/defs/utility-defs.js.map +1 -1
  539. package/dist/tools/delegate-tool.d.ts +81 -1
  540. package/dist/tools/delegate-tool.d.ts.map +1 -1
  541. package/dist/tools/delegate-tool.js +840 -219
  542. package/dist/tools/delegate-tool.js.map +1 -1
  543. package/dist/tools/memory-tools.d.ts.map +1 -1
  544. package/dist/tools/memory-tools.js +66 -9
  545. package/dist/tools/memory-tools.js.map +1 -1
  546. package/dist/tools/response-builders.d.ts.map +1 -1
  547. package/dist/tools/response-builders.js +12 -8
  548. package/dist/tools/response-builders.js.map +1 -1
  549. package/dist/tools/session-tools.d.ts.map +1 -1
  550. package/dist/tools/session-tools.js +3 -32
  551. package/dist/tools/session-tools.js.map +1 -1
  552. package/dist/tools/skill-tools.js +1 -1
  553. package/dist/tools/skill-tools.js.map +1 -1
  554. package/dist/tools/start-session-tool.d.ts.map +1 -1
  555. package/dist/tools/start-session-tool.js +66 -20
  556. package/dist/tools/start-session-tool.js.map +1 -1
  557. package/dist/tools/utility-tools.d.ts.map +1 -1
  558. package/dist/tools/utility-tools.js +38 -3
  559. package/dist/tools/utility-tools.js.map +1 -1
  560. package/dist/tools/wait/auto-forward.d.ts.map +1 -1
  561. package/dist/tools/wait/auto-forward.js +8 -3
  562. package/dist/tools/wait/auto-forward.js.map +1 -1
  563. package/dist/tools/wait/consolidation-strategy.d.ts +42 -0
  564. package/dist/tools/wait/consolidation-strategy.d.ts.map +1 -0
  565. package/dist/tools/wait/consolidation-strategy.js +50 -0
  566. package/dist/tools/wait/consolidation-strategy.js.map +1 -0
  567. package/dist/tools/wait/drive-handler.d.ts +5 -7
  568. package/dist/tools/wait/drive-handler.d.ts.map +1 -1
  569. package/dist/tools/wait/drive-handler.js +45 -59
  570. package/dist/tools/wait/drive-handler.js.map +1 -1
  571. package/dist/tools/wait/media-processor.d.ts.map +1 -1
  572. package/dist/tools/wait/media-processor.js +8 -4
  573. package/dist/tools/wait/media-processor.js.map +1 -1
  574. package/dist/tools/wait/message-delivery.d.ts +9 -6
  575. package/dist/tools/wait/message-delivery.d.ts.map +1 -1
  576. package/dist/tools/wait/message-delivery.js +77 -58
  577. package/dist/tools/wait/message-delivery.js.map +1 -1
  578. package/dist/tools/wait/message-processing.d.ts.map +1 -1
  579. package/dist/tools/wait/message-processing.js +2 -1
  580. package/dist/tools/wait/message-processing.js.map +1 -1
  581. package/dist/tools/wait/poll-loop.d.ts.map +1 -1
  582. package/dist/tools/wait/poll-loop.js +339 -239
  583. package/dist/tools/wait/poll-loop.js.map +1 -1
  584. package/package.json +4 -3
  585. package/templates/azure-devops-securevault.default.md +20 -6
  586. package/templates/board-quality-checklist.default.md +121 -0
  587. package/templates/buildless-vue-preview.default.md +47 -0
  588. package/templates/expert-code-review.default.md +12 -0
  589. package/templates/handoff.default.md +41 -18
  590. package/templates/increment-pr-pipeline.default.md +79 -0
  591. package/templates/swarm.default.md +1 -0
  592. package/templates/worker-autonomous.default.md +1 -0
  593. package/templates/worker-delegate.default.md +1 -0
  594. package/dist/dashboard/log-parser.d.ts +0 -65
  595. package/dist/dashboard/log-parser.d.ts.map +0 -1
  596. package/dist/dashboard/log-parser.js +0 -219
  597. package/dist/dashboard/log-parser.js.map +0 -1
  598. package/dist/data/memory/reflection-dedup.d.ts +0 -17
  599. package/dist/data/memory/reflection-dedup.d.ts.map +0 -1
  600. package/dist/data/memory/reflection-dedup.js +0 -55
  601. package/dist/data/memory/reflection-dedup.js.map +0 -1
  602. package/dist/data/memory/reflection-gates.d.ts +0 -40
  603. package/dist/data/memory/reflection-gates.d.ts.map +0 -1
  604. package/dist/data/memory/reflection-gates.js +0 -220
  605. package/dist/data/memory/reflection-gates.js.map +0 -1
  606. package/dist/data/memory/reflection-sources.d.ts +0 -13
  607. package/dist/data/memory/reflection-sources.d.ts.map +0 -1
  608. package/dist/data/memory/reflection-sources.js +0 -115
  609. package/dist/data/memory/reflection-sources.js.map +0 -1
  610. package/dist/data/memory/reflection.d.ts +0 -43
  611. package/dist/data/memory/reflection.d.ts.map +0 -1
  612. package/dist/data/memory/reflection.js +0 -329
  613. package/dist/data/memory/reflection.js.map +0 -1
  614. package/dist/llm/prompts/reflection.d.ts +0 -6
  615. package/dist/llm/prompts/reflection.d.ts.map +0 -1
  616. package/dist/llm/prompts/reflection.js +0 -77
  617. package/dist/llm/prompts/reflection.js.map +0 -1
  618. package/dist/services/memory-pruning.service.d.ts +0 -12
  619. package/dist/services/memory-pruning.service.d.ts.map +0 -1
  620. package/dist/services/memory-pruning.service.js +0 -179
  621. package/dist/services/memory-pruning.service.js.map +0 -1
  622. package/templates/daily-review.default.md +0 -26
  623. package/templates/fire-and-forget.default.md +0 -76
  624. package/templates/offload.default.md +0 -33
  625. package/templates/sensorium-repair.default.md +0 -114
@@ -0,0 +1,122 @@
1
+ /**
2
+ * The port holder's end of life (inc68). "The HTTP port is the lock" (inc66 M1):
3
+ * the exit watcher, the background runner, the keeper, the board orchestrator and the keepAlive
4
+ * spawn run only in the process that bound the port. This module is what makes
5
+ * that process let go cleanly, on both of its exits — a signal shutdown and a
6
+ * legacy self-update hand-over:
7
+ *
8
+ * - {@link PortHolderJobs} starts every port-holder job through ONE gate, and
9
+ * {@link PortHolderJobs.release} closes it for good. A start that arrives late
10
+ * (after the port was handed over) starts nothing, so the old process cannot
11
+ * run a second nightly purge or a second keeper next to the new holder.
12
+ * - {@link createPortHolderStop} is the one stop step both exits run: close
13
+ * the gate, stop the exit watcher, the runner, the keeper and the board orchestrator, and
14
+ * settle once the board tick and the nightly pass in flight are done. A
15
+ * keepAlive spawn already running is fire-and-forget and is NOT waited for
16
+ * (pre-existing, carded).
17
+ * - {@link createShutdown} finishes that in-flight work (a board tick
18
+ * mid-spawn, a nightly pass mid-purge) before the teardown frees the port,
19
+ * with a bounded wait.
20
+ */
21
+ /** How long a signal shutdown waits for in-flight port-holder work before it
22
+ * frees the port anyway. A board tick can be mid-spawn, and the broker gives a
23
+ * spawn 30 s (SPAWN_TIMEOUT_MS in broker-client.ts), so ONE healthy spawn
24
+ * settles inside this bound and gets bound to its card. A tick dispatches up
25
+ * to globalCap cards one after another, though, so a multi-card tick can be
26
+ * cut after its first spawn — that residual is accepted: the next holder's
27
+ * reconcile deals with it, a longer Ctrl+C hang would be worse, and the Unix
28
+ * supervisor SIGKILLs after 5 s regardless. A nightly pass that outlasts the
29
+ * bound is cut the same way and dies with this process. Cutting the wait is
30
+ * logged. */
31
+ export const SHUTDOWN_DRAIN_BOUND_MS = 30_000;
32
+ /** One start gate for every job that may run only in the port holder. */
33
+ export class PortHolderJobs {
34
+ jobs;
35
+ log;
36
+ released = false;
37
+ constructor(jobs, log) {
38
+ this.jobs = jobs;
39
+ this.log = log;
40
+ }
41
+ /** Start every job, unless the port has already been released. Checked once,
42
+ * here, so a job added to the list later is covered without its own latch. */
43
+ startAll() {
44
+ if (this.released) {
45
+ this.log.info("[startup] port already released — port-holder jobs not started");
46
+ return;
47
+ }
48
+ for (const job of this.jobs)
49
+ job.start();
50
+ }
51
+ /** The process is giving the port up (shutdown or hand-over). End-of-life: a
52
+ * later startAll() is ignored. Stopping jobs that already run stays with the
53
+ * caller, which knows what each one has to finish. */
54
+ release() {
55
+ this.released = true;
56
+ }
57
+ }
58
+ /**
59
+ * Build the step both ways of giving the port up run (the signal drain and the
60
+ * self-update hand-over), so neither can skip a job it stops. It closes the
61
+ * gate, stops the exit watcher, the runner and the keeper (the keeper would otherwise respawn a
62
+ * thread that exits during the wait), and stops the board — all synchronously,
63
+ * on the call. Its promise settles once the work in flight has finished: the
64
+ * board tick (a spawn bound to its card) and the nightly pass (the next holder
65
+ * starts its own runner, and two purges must not share a thread — inc66 M1).
66
+ * Each caller awaits it before it frees the port.
67
+ *
68
+ * Not every job: a keepAlive spawn already running is fire-and-forget and is
69
+ * not awaited here — a residual that predates inc68 and is carded.
70
+ */
71
+ export function createPortHolderStop(deps) {
72
+ return async () => {
73
+ deps.gate.release();
74
+ deps.exitWatcher.stop();
75
+ deps.backgroundRunner.stop();
76
+ deps.keeper.stop();
77
+ await Promise.all([
78
+ deps.boardOrchestrator.stop(),
79
+ deps.dailyRotationSettled(),
80
+ deps.exitWatcher.settled(),
81
+ ]);
82
+ };
83
+ }
84
+ /**
85
+ * Build the signal-shutdown sequence: wait for every drain (bounded by
86
+ * `boundMs`), then run `teardown`, which frees the port and exits. Returns a
87
+ * function that runs the sequence ONCE — a second signal while it runs is a
88
+ * no-op, so each drain is started exactly once.
89
+ */
90
+ export function createShutdown(deps) {
91
+ let started = false;
92
+ return async (reason) => {
93
+ if (started)
94
+ return;
95
+ started = true;
96
+ deps.log.info(`[shutdown] Graceful shutdown initiated (${reason})…`);
97
+ await drainWithin(deps.drains, deps.boundMs, deps.log);
98
+ await deps.teardown();
99
+ };
100
+ }
101
+ async function drainWithin(drains, boundMs, log) {
102
+ const settled = await new Promise((resolve) => {
103
+ const bound = setTimeout(() => resolve(false), boundMs);
104
+ // Each drain is invoked inside a promise, so one that throws synchronously
105
+ // settles as a rejection instead of escaping — and allSettled never rejects:
106
+ // a drain that fails must not keep the teardown from running.
107
+ const outcomes = drains.map((drain) => Promise.resolve().then(drain));
108
+ void Promise.allSettled(outcomes).then((results) => {
109
+ clearTimeout(bound);
110
+ for (const result of results) {
111
+ if (result.status === "rejected") {
112
+ log.warn(`[shutdown] a drain failed: ${result.reason} — tearing down anyway`);
113
+ }
114
+ }
115
+ resolve(true);
116
+ });
117
+ });
118
+ if (!settled) {
119
+ log.warn(`[shutdown] in-flight work did not settle within ${boundMs} ms — freeing the port anyway`);
120
+ }
121
+ }
122
+ //# sourceMappingURL=port-holder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port-holder.js","sourceRoot":"","sources":["../../src/server/port-holder.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@
7
7
  * importers keep a single entry point.
8
8
  */
9
9
  import { type AgentType } from "../config/index.js";
10
+ import { type ThreadRegistryEntry } from "../data/memory/thread-registry.js";
10
11
  import { type Database } from "../data/memory/schema.js";
11
12
  import { type ThreadLifecycleService } from "./thread-lifecycle.service.js";
12
13
  import { type SpawnResult } from "./spawn-common.js";
@@ -17,12 +18,56 @@ export { resolveCodexPath, spawnCodexProcess } from "./codex-spawn.service.js";
17
18
  * Resolve the right spawn function for `agentType` and call it.
18
19
  * Handles CLI path resolution and error reporting internally.
19
20
  *
20
- * When `db` is provided and the thread is in `Created` state, transitions
21
- * Created → Spawning before the process starts, then Spawning → Active on
22
- * success. This implements the explicit state machine for newly registered
23
- * threads without affecting existing restart flows (Exited/Active → Active).
21
+ * The one place a process is born, and therefore the one place the worker single-use
22
+ * rule is stated: {@link claimWorkerBirth} runs FIRST, above the state machine and
23
+ * above every CLI resolution, so a refused birth transitions nothing and starts
24
+ * nothing. It is a CLAIM and not a question — admitting a worker spends its one launch
25
+ * window — so this call happens exactly once per dispatch, and a caller that merely
26
+ * wants to know whether a birth is possible must not route through here. Read
27
+ * `worker-single-use.ts` before adding a caller — it names the re-exported per-agent
28
+ * spawn functions as forbidden entry points, because they would bypass this.
29
+ *
30
+ * `db` is REQUIRED, which is why the three trailing optionals moved into `opts` with
31
+ * it: TypeScript cannot put a required parameter after an optional one, so leaving
32
+ * `opts` eighth would have meant a default — and a refusal that fails open on an
33
+ * absent handle reopens the hole at the three call sites that used to omit it. Every
34
+ * caller holds a handle already. Requiring it also makes the two state transitions
35
+ * below unconditional: the silent no-state-transition mode this function used to have
36
+ * is gone.
37
+ *
38
+ * A thread in `Created` state transitions Created → Spawning before the process
39
+ * starts, then Spawning → Active on success. This implements the explicit state
40
+ * machine for newly registered threads without affecting existing restart flows
41
+ * (Exited/Active → Active).
42
+ */
43
+ export interface SpawnDispatch {
44
+ db: Database;
45
+ workingDirectory?: string;
46
+ memorySourceThreadId?: number;
47
+ runtimeThreadType?: "worker" | "branch";
48
+ modelOverride?: string;
49
+ /**
50
+ * The ONE exception to the single-use rule: the born-dead net relaunching a process
51
+ * that died before it ever read its task. Set at exactly one call site
52
+ * (`runBirthDeathNet`), and AUDITED rather than trusted — see
53
+ * `worker-single-use.ts`, which re-derives the net's verdict from state this flag
54
+ * cannot forge.
55
+ */
56
+ relaunchBornDead?: boolean;
57
+ }
58
+ export declare function dispatchSpawn(agentType: AgentType, name: string, threadId: number, threadLifecycle: ThreadLifecycleService, opts: SpawnDispatch): Promise<SpawnResult>;
59
+ /**
60
+ * Whether boot may put a process back on this thread's id.
61
+ *
62
+ * `type !== 'worker'` is the term the keeper's own SQL already carries
63
+ * (getKeepAliveThreads, thread-registry.ts:256-263) and this filter lacked. A worker
64
+ * is single-use, so boot must never respawn one on its old id — however its
65
+ * keep_alive flag came to be set.
66
+ *
67
+ * Extracted so the rule is reachable without starting processes; the call site is
68
+ * the single `filter` in spawnKeepAliveThreads below.
24
69
  */
25
- export declare function dispatchSpawn(agentType: AgentType, name: string, threadId: number, threadLifecycle: ThreadLifecycleService, workingDirectory?: string, memorySourceThreadId?: number, runtimeThreadType?: "worker" | "branch", db?: Database): Promise<SpawnResult>;
70
+ export declare function isKeepAliveSpawnCandidate(thread: ThreadRegistryEntry): boolean;
26
71
  export declare function spawnKeepAliveThreads(threadLifecycle: ThreadLifecycleService): Promise<{
27
72
  spawned: number;
28
73
  errors: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"agent-spawn.service.d.ts","sourceRoot":"","sources":["../../src/services/agent-spawn.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAKvE,OAAO,EAAe,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAA+B,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKlF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE/E;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,sBAAsB,EACvC,gBAAgB,CAAC,EAAE,MAAM,EACzB,oBAAoB,CAAC,EAAE,MAAM,EAC7B,iBAAiB,CAAC,EAAE,QAAQ,GAAG,QAAQ,EACvC,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CAAC,WAAW,CAAC,CAsFtB;AAED,wBAAsB,qBAAqB,CAAC,eAAe,EAAE,sBAAsB,GAAG,OAAO,CAAC;IAC5F,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC,CAgFD"}
1
+ {"version":3,"file":"agent-spawn.service.d.ts","sourceRoot":"","sources":["../../src/services/agent-spawn.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEjF,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC5F,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAKvE,OAAO,EAAe,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAA+B,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMlF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,QAAQ,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,sBAAsB,EACvC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,WAAW,CAAC,CAoGtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAM9E;AAED,wBAAsB,qBAAqB,CAAC,eAAe,EAAE,sBAAsB,GAAG,OAAO,CAAC;IAC5F,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC,CAgED"}
@@ -6,32 +6,29 @@
6
6
  * The per-agent CLI resolvers and spawn functions are re-exported so existing
7
7
  * importers keep a single entry point.
8
8
  */
9
- import { unlinkSync } from "node:fs";
10
9
  import { getAgentType, getFableModel } from "../config/index.js";
11
10
  import { log } from "../lib/logger.js";
12
11
  import { getAllThreads } from "../data/memory/thread-registry.js";
13
12
  import { initMemoryDb } from "../data/memory/schema.js";
14
13
  import { errorMessage } from "../lib/utils.js";
15
- import { ensureDirs, isThreadAlive, readPidFiles, spawnedThreads } from "./process.service.js";
14
+ import { ensureDirs, isThreadAlive, readPidFiles } from "./process.service.js";
16
15
  import { brokerAdopt } from "./broker-client.js";
17
16
  import { ThreadState } from "./thread-lifecycle.service.js";
18
17
  import { setStartupCleanupInProgress } from "./spawn-common.js";
19
18
  import { resolveClaudePath, spawnAgentProcess } from "./claude-spawn.service.js";
20
19
  import { resolveCopilotPath, spawnCopilotProcess } from "./copilot-spawn.service.js";
21
20
  import { resolveCodexPath, spawnCodexProcess } from "./codex-spawn.service.js";
21
+ import { claimWorkerBirth } from "./worker-single-use.js";
22
22
  export { resolveClaudePath, spawnAgentProcess } from "./claude-spawn.service.js";
23
23
  export { resolveCopilotPath, spawnCopilotProcess } from "./copilot-spawn.service.js";
24
24
  export { resolveCodexPath, spawnCodexProcess } from "./codex-spawn.service.js";
25
- /**
26
- * Resolve the right spawn function for `agentType` and call it.
27
- * Handles CLI path resolution and error reporting internally.
28
- *
29
- * When `db` is provided and the thread is in `Created` state, transitions
30
- * Created → Spawning before the process starts, then Spawning → Active on
31
- * success. This implements the explicit state machine for newly registered
32
- * threads without affecting existing restart flows (Exited/Active → Active).
33
- */
34
- export async function dispatchSpawn(agentType, name, threadId, threadLifecycle, workingDirectory, memorySourceThreadId, runtimeThreadType, db) {
25
+ export async function dispatchSpawn(agentType, name, threadId, threadLifecycle, opts) {
26
+ const { db, workingDirectory, memorySourceThreadId, runtimeThreadType, modelOverride, relaunchBornDead = false, } = opts;
27
+ const refusal = claimWorkerBirth(db, threadId, relaunchBornDead);
28
+ if (refusal.has()) {
29
+ log.warn(`[spawn] refusing to start a process on thread ${threadId}: ${refusal.get()}`);
30
+ return { error: refusal.get() };
31
+ }
35
32
  // Legacy agent types (copilot_claude / copilot_codex) were removed, but threads
36
33
  // persisted before the removal may still carry them. Without this, they fall
37
34
  // through to the Claude branch below and get relaunched as a different agent on
@@ -41,52 +38,66 @@ export async function dispatchSpawn(agentType, name, threadId, threadLifecycle,
41
38
  agentType = "copilot";
42
39
  }
43
40
  // Created → Spawning when a pre-registered thread is about to start
44
- if (db) {
45
- const currentState = threadLifecycle.getThreadState(db, threadId);
46
- if (currentState === ThreadState.Created) {
47
- try {
48
- threadLifecycle.transitionThread(db, threadId, ThreadState.Spawning);
49
- }
50
- catch (err) {
51
- log.warn(`[start_thread] Created→Spawning transition failed for ${threadId}: ${errorMessage(err)}`);
52
- }
41
+ const currentState = threadLifecycle.getThreadState(db, threadId);
42
+ if (currentState === ThreadState.Created) {
43
+ try {
44
+ threadLifecycle.transitionThread(db, threadId, ThreadState.Spawning);
45
+ }
46
+ catch (err) {
47
+ log.warn(`[start_thread] Created→Spawning transition failed for ${threadId}: ${errorMessage(err)}`);
53
48
  }
54
49
  }
55
50
  let result;
51
+ const trimmedModelOverride = modelOverride?.trim() || undefined;
56
52
  if (agentType === "copilot") {
57
53
  const cliPath = resolveCopilotPath();
58
54
  result = cliPath
59
- ? await spawnCopilotProcess(cliPath, name, threadId, threadLifecycle, workingDirectory, memorySourceThreadId, runtimeThreadType)
55
+ ? await spawnCopilotProcess(cliPath, name, threadId, threadLifecycle, workingDirectory, memorySourceThreadId, runtimeThreadType, trimmedModelOverride)
60
56
  : { error: `Thread ${threadId} (${name}): copilot CLI not found` };
61
57
  }
62
58
  else if (agentType === "codex" || agentType === "openai_codex") {
63
59
  const cliPath = resolveCodexPath();
64
60
  result = cliPath
65
- ? await spawnCodexProcess(cliPath, name, threadId, threadLifecycle, workingDirectory, memorySourceThreadId, runtimeThreadType)
61
+ ? await spawnCodexProcess(cliPath, name, threadId, threadLifecycle, workingDirectory, memorySourceThreadId, runtimeThreadType, trimmedModelOverride)
66
62
  : { error: `Thread ${threadId} (${name}): codex CLI not found` };
67
63
  }
68
64
  else {
69
65
  // "fable" is a Claude-CLI thread pinned to a distinct (premium) model.
70
66
  const cliPath = resolveClaudePath();
71
- const modelOverride = agentType === "fable" ? getFableModel() : undefined;
67
+ // Fable is intentionally pinned to its configured premium model; card-level
68
+ // overrides apply only to ordinary Claude workers.
69
+ const providerModelOverride = agentType === "fable" ? getFableModel() : trimmedModelOverride;
72
70
  result = cliPath
73
- ? await spawnAgentProcess(cliPath, name, threadId, threadLifecycle, workingDirectory, memorySourceThreadId, runtimeThreadType, modelOverride)
71
+ ? await spawnAgentProcess(cliPath, name, threadId, threadLifecycle, workingDirectory, memorySourceThreadId, runtimeThreadType, providerModelOverride)
74
72
  : { error: `Thread ${threadId} (${name}): claude CLI not found` };
75
73
  }
76
74
  // Spawning → Active on successful process start
77
- if (db && "pid" in result) {
78
- const currentState = threadLifecycle.getThreadState(db, threadId);
79
- if (currentState === ThreadState.Spawning) {
80
- try {
81
- threadLifecycle.transitionThread(db, threadId, ThreadState.Active);
82
- }
83
- catch (err) {
84
- log.warn(`[start_thread] Spawning→Active transition failed for ${threadId}: ${errorMessage(err)}`);
85
- }
75
+ if ("pid" in result && threadLifecycle.getThreadState(db, threadId) === ThreadState.Spawning) {
76
+ try {
77
+ threadLifecycle.transitionThread(db, threadId, ThreadState.Active);
78
+ }
79
+ catch (err) {
80
+ log.warn(`[start_thread] Spawning→Active transition failed for ${threadId}: ${errorMessage(err)}`);
86
81
  }
87
82
  }
88
83
  return result;
89
84
  }
85
+ /**
86
+ * Whether boot may put a process back on this thread's id.
87
+ *
88
+ * `type !== 'worker'` is the term the keeper's own SQL already carries
89
+ * (getKeepAliveThreads, thread-registry.ts:256-263) and this filter lacked. A worker
90
+ * is single-use, so boot must never respawn one on its old id — however its
91
+ * keep_alive flag came to be set.
92
+ *
93
+ * Extracted so the rule is reachable without starting processes; the call site is
94
+ * the single `filter` in spawnKeepAliveThreads below.
95
+ */
96
+ export function isKeepAliveSpawnCandidate(thread) {
97
+ return (thread.keepAlive &&
98
+ thread.type !== "worker" &&
99
+ (thread.status === "active" || thread.status === "exited"));
100
+ }
90
101
  export async function spawnKeepAliveThreads(threadLifecycle) {
91
102
  const result = { spawned: 0, errors: [] };
92
103
  setStartupCleanupInProgress(true);
@@ -100,39 +111,22 @@ export async function spawnKeepAliveThreads(threadLifecycle) {
100
111
  }
101
112
  let threads;
102
113
  try {
103
- for (const { pid, filePath, threadId, name, threadType, startedAt } of readPidFiles()) {
104
- if (spawnedThreads.some((t) => t.threadId === threadId))
105
- continue;
114
+ for (const pidEntry of await readPidFiles()) {
115
+ const { pid, threadId, threadType, startedAt } = pidEntry;
106
116
  // THREAD-scoped (mirror reconcileState): a keepAlive agent that survived a
107
117
  // server self-update has a dead launcher pid but a live forked child in its
108
- // job. A pid-first isProcessAlive() would read it dead and unlink its pid file
109
- // — destroying the reconcile anchor AND skipping brokerAdopt — then the loop
110
- // below would spawn a duplicate. Treat-alive on unreachable; known:false falls
111
- // back to the pid check (dev mode / pre-broker process).
118
+ // job. A pid-first isProcessAlive() would read it dead and skip brokerAdopt.
119
+ // Treat-alive on unreachable; known:false falls back to the pid check (dev
120
+ // mode / pre-broker process). A dead one's PID file is left to the exit
121
+ // watcher, which resolves it through the exit path with its exit code.
112
122
  if (await isThreadAlive(threadId, pid, startedAt)) {
113
- spawnedThreads.push({
114
- pid,
115
- threadId,
116
- name: name ?? `thread-${threadId}`,
117
- startedAt: startedAt ?? Date.now(),
118
- createdAt: startedAt ?? Date.now(),
119
- logFile: "",
120
- ...(threadType ? { threadType } : {}),
121
- });
122
123
  // Safe cutover (Phase 3): a process that predates broker-owned spawning
123
124
  // is invisible to jobs/registry — ask the broker to adopt it now instead
124
125
  // of waiting for the next supervisor restart. Idempotent; best-effort.
125
126
  void brokerAdopt(threadId, pid, startedAt, threadType ?? "agent");
126
127
  }
127
- else
128
- try {
129
- unlinkSync(filePath);
130
- }
131
- catch {
132
- /* stale PID file locked or already gone */
133
- }
134
128
  }
135
- threads = getAllThreads(db).filter((thread) => thread.keepAlive && (thread.status === "active" || thread.status === "exited"));
129
+ threads = getAllThreads(db).filter(isKeepAliveSpawnCandidate);
136
130
  }
137
131
  finally {
138
132
  setStartupCleanupInProgress(false);
@@ -143,17 +137,16 @@ export async function spawnKeepAliveThreads(threadLifecycle) {
143
137
  for (const thread of threads) {
144
138
  // THREAD-scoped: findAliveThread is pid-first and would re-declare a surviving
145
139
  // keepAlive agent (dead launcher pid) dead, re-spawning a duplicate onto the
146
- // live thread every boot. Source the anchor pid from the pid file / in-memory
147
- // entry and ask the broker by threadId; treat-alive on unreachable so we never
140
+ // live thread every boot. Source the anchor pid from the pid file and ask the broker by threadId; treat-alive on unreachable so we never
148
141
  // duplicate-spawn on unknown (broker spawn idempotency remains the backstop).
149
- const alivePidEntry = readPidFiles().find((e) => e.threadId === thread.threadId);
150
- const aliveInMem = spawnedThreads.find((t) => t.threadId === thread.threadId);
151
- const aliveFallbackPid = alivePidEntry?.pid ?? aliveInMem?.pid;
152
- const aliveStartedAt = alivePidEntry?.startedAt ?? aliveInMem?.startedAt;
153
- if (await isThreadAlive(thread.threadId, aliveFallbackPid, aliveStartedAt))
142
+ const alivePidEntry = (await readPidFiles()).find((e) => e.threadId === thread.threadId);
143
+ if (await isThreadAlive(thread.threadId, alivePidEntry?.pid, alivePidEntry?.startedAt))
154
144
  continue;
155
145
  const client = thread.client ?? getAgentType();
156
- const spawnResult = await dispatchSpawn(client, thread.name, thread.threadId, threadLifecycle, thread.workingDirectory ?? undefined);
146
+ const spawnResult = await dispatchSpawn(client, thread.name, thread.threadId, threadLifecycle, {
147
+ db,
148
+ ...(thread.workingDirectory ? { workingDirectory: thread.workingDirectory } : {}),
149
+ });
157
150
  if ("error" in spawnResult) {
158
151
  result.errors.push(spawnResult.error);
159
152
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-spawn.service.js","sourceRoot":"","sources":["../../src/services/agent-spawn.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-spawn.service.js","sourceRoot":"","sources":["../../src/services/agent-spawn.service.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,6 @@ export declare class BackgroundJobRunner {
20
20
  start(): void;
21
21
  stop(): void;
22
22
  private runWorkerCleanup;
23
- private runDeadWorkerSweep;
24
23
  private runDailyRotationCheck;
25
24
  }
26
25
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"background-runner.d.ts","sourceRoot":"","sources":["../../src/services/background-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAW5E,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;IACnD,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,sBAAsB,CAAC;IACxC,GAAG,EAAE;QACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;CACH;AAED,qBAAa,mBAAmB;IAIlB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,oBAAoB,CAAuB;gBAEtB,IAAI,EAAE,oBAAoB;IAEvD,KAAK,IAAI,IAAI;IA0Bb,IAAI,IAAI,IAAI;YAOE,gBAAgB;YAuBhB,kBAAkB;YA0DlB,qBAAqB;CAqCpC"}
1
+ {"version":3,"file":"background-runner.d.ts","sourceRoot":"","sources":["../../src/services/background-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAQ5E,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;IACnD,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,sBAAsB,CAAC;IACxC,GAAG,EAAE;QACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;CACH;AAED,qBAAa,mBAAmB;IAIlB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,oBAAoB,CAAuB;gBAEtB,IAAI,EAAE,oBAAoB;IAEvD,KAAK,IAAI,IAAI;IAmBb,IAAI,IAAI,IAAI;YAOE,gBAAgB;YAuBhB,qBAAqB;CAqCpC"}
@@ -1,9 +1,6 @@
1
1
  import { rotateAllDailySessions } from "./daily-session.js";
2
2
  import { cleanupExpiredWorkers } from "./worker-cleanup.service.js";
3
3
  import { errorMessage } from "../lib/utils.js";
4
- import { getAllThreads } from "../data/memory/thread-registry.js";
5
- import { isThreadAlive, readPidFiles, spawnedThreads } from "./process.service.js";
6
- import { decommissionWorker } from "./worker-cleanup.service.js";
7
4
  import { hasRunToday } from "../data/daily-marker.js";
8
5
  const DAILY_ROTATION_INTERVAL_MS = 5 * 60_000;
9
6
  const DAILY_ROTATION_HOUR = 4;
@@ -20,16 +17,12 @@ export class BackgroundJobRunner {
20
17
  return;
21
18
  void this.runWorkerCleanup();
22
19
  void this.runDailyRotationCheck();
23
- void this.runDeadWorkerSweep();
24
20
  this.intervals.push(setInterval(() => {
25
21
  void this.runWorkerCleanup();
26
22
  }, WORKER_CLEANUP_INTERVAL_MS));
27
23
  this.intervals.push(setInterval(() => {
28
24
  void this.runDailyRotationCheck();
29
25
  }, DAILY_ROTATION_INTERVAL_MS));
30
- this.intervals.push(setInterval(() => {
31
- void this.runDeadWorkerSweep();
32
- }, WORKER_CLEANUP_INTERVAL_MS));
33
26
  }
34
27
  stop() {
35
28
  for (const interval of this.intervals) {
@@ -55,57 +48,6 @@ export class BackgroundJobRunner {
55
48
  // Phase 2). Its replacement is job-membership reconciliation in the broker
56
49
  // once Phase 3 spawns agents into named job objects.
57
50
  }
58
- async runDeadWorkerSweep() {
59
- try {
60
- const db = this.deps.getMemoryDb();
61
- const workers = getAllThreads(db).filter((t) => t.type === "worker" && (t.status === "active" || t.status === "exited"));
62
- const pidEntries = readPidFiles();
63
- for (const w of workers) {
64
- // THREAD-scoped liveness (mirror cleanupExpiredWorkers): a broker-spawned
65
- // worker's launcher pid reads dead ~20s after spawn while its forked child
66
- // lives on in the job. A pid-first isThreadRunning()/findAliveThread here
67
- // would BOTH mis-declare that live worker dead AND splice it out of
68
- // spawnedThreads — so the inMemory branch below would fall through to a full
69
- // decommissionWorker (job-kill + topic delete + note/DB archive) of a running
70
- // worker every sweep. Source the fallback pid + startedAt exactly where
71
- // cleanupExpiredWorkers does, then ask the broker by threadId; the broker's
72
- // job/registry verdict (or treat-alive-on-unreachable) gates the sweep, and
73
- // isThreadAlive never mutates spawnedThreads so the inMemory branch stays
74
- // correct for a genuinely-dead worker still tracked in memory.
75
- const pidEntry = pidEntries.find((e) => e.threadId === w.threadId);
76
- const inMemEntry = spawnedThreads.find((t) => t.threadId === w.threadId);
77
- const fallbackPid = pidEntry?.pid ?? inMemEntry?.pid;
78
- const startedAt = pidEntry?.startedAt ?? inMemEntry?.startedAt;
79
- if (!(await isThreadAlive(w.threadId, fallbackPid, startedAt))) {
80
- const inMemory = spawnedThreads.some((t) => t.threadId === w.threadId);
81
- try {
82
- if (inMemory) {
83
- // Still tracked in spawnedThreads: archive DB record now for dashboard accuracy.
84
- // Full decommission (topic deletion, memory synthesis) happens via TTL cleanup.
85
- this.deps.threadLifecycle.archiveThread(db, w.threadId);
86
- }
87
- else {
88
- // Not in spawnedThreads: the TTL cleanup's SQL path won't reach an already-archived
89
- // thread, so the Telegram topic would leak. Do a full decommission now.
90
- await decommissionWorker({ threadId: w.threadId, name: w.name }, {
91
- db,
92
- telegram: this.deps.telegram,
93
- chatId: this.deps.chatId,
94
- threadLifecycle: this.deps.threadLifecycle,
95
- });
96
- }
97
- this.deps.log.info(`[dead-worker-sweep] Archived dead worker ${w.threadId} (${w.name})`);
98
- }
99
- catch (err) {
100
- this.deps.log.warn(`[dead-worker-sweep] Failed to archive ${w.threadId}: ${errorMessage(err)}`);
101
- }
102
- }
103
- }
104
- }
105
- catch (err) {
106
- this.deps.log.error(`Dead worker sweep error: ${errorMessage(err)}`);
107
- }
108
- }
109
51
  async runDailyRotationCheck() {
110
52
  const now = new Date();
111
53
  // Fire once we're at/past the rotation hour for the day, not only inside a
@@ -1 +1 @@
1
- {"version":3,"file":"background-runner.js","sourceRoot":"","sources":["../../src/services/background-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"background-runner.js","sourceRoot":"","sources":["../../src/services/background-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Board awareness signals — exactly four kinds, one line each, no description
3
+ * (invariant #4). STARTED / DONE / BLOCKED / DECISION_NEEDED reach the board bot
4
+ * or the configured operator main thread.
5
+ *
6
+ * Delivery mode is deliberately isolated in this one function while decision
7
+ * #2 is with the operator (thread 1327, 2026-08-01):
8
+ * - "passive" (default, orchestrator's lean): rides the passive-notice
9
+ * channel — seen on the main thread's next delivered turn, never acted on.
10
+ * - "mailbox": appended to the main thread's pending-task mailbox
11
+ * — wakes it with an FYI-framed line.
12
+ * Flip via BOARD_SIGNAL_DELIVERY=mailbox; no other code changes.
13
+ */
14
+ import { TelegramClient } from "../telegram.js";
15
+ import type { BoardCard } from "../../data/board/board-types.js";
16
+ import type { Database } from "../../data/memory/db-types.js";
17
+ import { Optional } from "../../data/optional.js";
18
+ export type BoardSignalKind = "STARTED" | "DONE" | "BLOCKED" | "DECISION_NEEDED";
19
+ type BoardBot = Pick<TelegramClient, "sendMessage">;
20
+ type BoardWarningSink = (message: string) => void;
21
+ export interface BoardSignalDelivery {
22
+ boardBot: Optional<BoardBot>;
23
+ boardBotToken: Optional<string>;
24
+ boardChatId: Optional<string>;
25
+ warningSink: Optional<BoardWarningSink>;
26
+ mainThreadId: Optional<number>;
27
+ }
28
+ /** Production delivery: the configured board bot, else the main thread from the environment. */
29
+ export declare const DEFAULT_BOARD_SIGNAL_DELIVERY: BoardSignalDelivery;
30
+ /** One-line, FYI-framed state transition. `detail` is used for BLOCKED and
31
+ * DECISION_NEEDED, where it makes the ping actionable for the operator. */
32
+ export declare function sendBoardSignal(db: Database, card: BoardCard, kind: BoardSignalKind, detail?: string, delivery?: BoardSignalDelivery): void;
33
+ /** Resolve the optional operator main thread from the process boundary. */
34
+ export declare function resolveBoardMainThreadId(): Optional<number>;
35
+ /**
36
+ * Selective escalation (invariant #4): a card the operator hand-flagged
37
+ * "important to me" mirrors its notable updates (worker reports, block
38
+ * reasons) into the main thread as passive notices — aware, not commanded.
39
+ * Deterministic: no agent judges importance; the flag decides, always.
40
+ */
41
+ export declare function mirrorEscalatedUpdate(db: Database, card: BoardCard, text: string, delivery?: BoardSignalDelivery): void;
42
+ /** A decision cannot proceed without the operator, regardless of card priority. */
43
+ export declare function sendDecisionPing(db: Database, card: BoardCard, question: string, delivery?: BoardSignalDelivery): void;
44
+ export {};
45
+ //# sourceMappingURL=board-signals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-signals.d.ts","sourceRoot":"","sources":["../../../src/services/board/board-signals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAMjF,KAAK,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AACpD,KAAK,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7B,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,WAAW,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACxC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAChC;AAED,gGAAgG;AAChG,eAAO,MAAM,6BAA6B,EAAE,mBAM3C,CAAC;AAkDF;4EAC4E;AAC5E,wBAAgB,eAAe,CAC7B,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,eAAe,EACrB,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,GAAE,mBAAmD,GAC5D,IAAI,CAmCN;AAED,2EAA2E;AAC3E,wBAAgB,wBAAwB,IAAI,QAAQ,CAAC,MAAM,CAAC,CAG3D;AAOD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,mBAAmD,GAC5D,IAAI,CAkBN;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,mBAAmD,GAC5D,IAAI,CAaN"}