@mclawnet/swarm 0.1.13 → 0.1.15

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 (320) hide show
  1. package/dist/__tests__/always-on-activity-reader.test.d.ts +2 -0
  2. package/dist/__tests__/always-on-activity-reader.test.d.ts.map +1 -0
  3. package/dist/__tests__/always-on-activity-reader.test.js +193 -0
  4. package/dist/__tests__/always-on-activity-reader.test.js.map +1 -0
  5. package/dist/__tests__/always-on-config.test.d.ts +2 -0
  6. package/dist/__tests__/always-on-config.test.d.ts.map +1 -0
  7. package/dist/__tests__/always-on-config.test.js +285 -0
  8. package/dist/__tests__/always-on-config.test.js.map +1 -0
  9. package/dist/__tests__/always-on-manager.test.d.ts +2 -0
  10. package/dist/__tests__/always-on-manager.test.d.ts.map +1 -0
  11. package/dist/__tests__/always-on-manager.test.js +797 -0
  12. package/dist/__tests__/always-on-manager.test.js.map +1 -0
  13. package/dist/__tests__/always-on-parity.test.d.ts +2 -0
  14. package/dist/__tests__/always-on-parity.test.d.ts.map +1 -0
  15. package/dist/__tests__/always-on-parity.test.js +20 -0
  16. package/dist/__tests__/always-on-parity.test.js.map +1 -0
  17. package/dist/__tests__/cascade-picker.test.d.ts +2 -0
  18. package/dist/__tests__/cascade-picker.test.d.ts.map +1 -0
  19. package/dist/__tests__/cascade-picker.test.js +122 -0
  20. package/dist/__tests__/cascade-picker.test.js.map +1 -0
  21. package/dist/__tests__/coordinator-shipment.test.d.ts +2 -0
  22. package/dist/__tests__/coordinator-shipment.test.d.ts.map +1 -0
  23. package/dist/__tests__/coordinator-shipment.test.js +280 -0
  24. package/dist/__tests__/coordinator-shipment.test.js.map +1 -0
  25. package/dist/__tests__/coordinator-workspace-recover.test.d.ts +2 -0
  26. package/dist/__tests__/coordinator-workspace-recover.test.d.ts.map +1 -0
  27. package/dist/__tests__/coordinator-workspace-recover.test.js +140 -0
  28. package/dist/__tests__/coordinator-workspace-recover.test.js.map +1 -0
  29. package/dist/__tests__/coordinator-workspace.test.d.ts +2 -0
  30. package/dist/__tests__/coordinator-workspace.test.d.ts.map +1 -0
  31. package/dist/__tests__/coordinator-workspace.test.js +135 -0
  32. package/dist/__tests__/coordinator-workspace.test.js.map +1 -0
  33. package/dist/__tests__/default-runner-epipe.test.d.ts +2 -0
  34. package/dist/__tests__/default-runner-epipe.test.d.ts.map +1 -0
  35. package/dist/__tests__/default-runner-epipe.test.js +43 -0
  36. package/dist/__tests__/default-runner-epipe.test.js.map +1 -0
  37. package/dist/__tests__/discovery-scheduler.test.d.ts +2 -0
  38. package/dist/__tests__/discovery-scheduler.test.d.ts.map +1 -0
  39. package/dist/__tests__/discovery-scheduler.test.js +367 -0
  40. package/dist/__tests__/discovery-scheduler.test.js.map +1 -0
  41. package/dist/__tests__/env-forward-e2e.test.d.ts +2 -0
  42. package/dist/__tests__/env-forward-e2e.test.d.ts.map +1 -0
  43. package/dist/__tests__/env-forward-e2e.test.js +57 -0
  44. package/dist/__tests__/env-forward-e2e.test.js.map +1 -0
  45. package/dist/__tests__/gh-pr-creator.test.d.ts +2 -0
  46. package/dist/__tests__/gh-pr-creator.test.d.ts.map +1 -0
  47. package/dist/__tests__/gh-pr-creator.test.js +107 -0
  48. package/dist/__tests__/gh-pr-creator.test.js.map +1 -0
  49. package/dist/__tests__/git-worktree-provider.test.d.ts +2 -0
  50. package/dist/__tests__/git-worktree-provider.test.d.ts.map +1 -0
  51. package/dist/__tests__/git-worktree-provider.test.js +98 -0
  52. package/dist/__tests__/git-worktree-provider.test.js.map +1 -0
  53. package/dist/__tests__/gitignore-check.test.d.ts +2 -0
  54. package/dist/__tests__/gitignore-check.test.d.ts.map +1 -0
  55. package/dist/__tests__/gitignore-check.test.js +39 -0
  56. package/dist/__tests__/gitignore-check.test.js.map +1 -0
  57. package/dist/__tests__/idea-research-source.test.d.ts +2 -0
  58. package/dist/__tests__/idea-research-source.test.d.ts.map +1 -0
  59. package/dist/__tests__/idea-research-source.test.js +425 -0
  60. package/dist/__tests__/idea-research-source.test.js.map +1 -0
  61. package/dist/__tests__/idea-todo-source.test.d.ts +2 -0
  62. package/dist/__tests__/idea-todo-source.test.d.ts.map +1 -0
  63. package/dist/__tests__/idea-todo-source.test.js +258 -0
  64. package/dist/__tests__/idea-todo-source.test.js.map +1 -0
  65. package/dist/__tests__/introspection-dedupe.test.d.ts +2 -0
  66. package/dist/__tests__/introspection-dedupe.test.d.ts.map +1 -0
  67. package/dist/__tests__/introspection-dedupe.test.js +484 -0
  68. package/dist/__tests__/introspection-dedupe.test.js.map +1 -0
  69. package/dist/__tests__/introspection-source.test.d.ts +2 -0
  70. package/dist/__tests__/introspection-source.test.d.ts.map +1 -0
  71. package/dist/__tests__/introspection-source.test.js +1051 -0
  72. package/dist/__tests__/introspection-source.test.js.map +1 -0
  73. package/dist/__tests__/migration-roles.test.js +1 -22
  74. package/dist/__tests__/migration-roles.test.js.map +1 -1
  75. package/dist/__tests__/reconcile-researching.test.d.ts +2 -0
  76. package/dist/__tests__/reconcile-researching.test.d.ts.map +1 -0
  77. package/dist/__tests__/reconcile-researching.test.js +224 -0
  78. package/dist/__tests__/reconcile-researching.test.js.map +1 -0
  79. package/dist/__tests__/role-loader-preamble-all.test.js +3 -1
  80. package/dist/__tests__/role-loader-preamble-all.test.js.map +1 -1
  81. package/dist/__tests__/role-loader.test.js +95 -0
  82. package/dist/__tests__/role-loader.test.js.map +1 -1
  83. package/dist/__tests__/role-prompt-no-legacy-protocol.test.js +3 -1
  84. package/dist/__tests__/role-prompt-no-legacy-protocol.test.js.map +1 -1
  85. package/dist/__tests__/secret-scrub.test.d.ts +2 -0
  86. package/dist/__tests__/secret-scrub.test.d.ts.map +1 -0
  87. package/dist/__tests__/secret-scrub.test.js +55 -0
  88. package/dist/__tests__/secret-scrub.test.js.map +1 -0
  89. package/dist/__tests__/shipment-actions.test.d.ts +2 -0
  90. package/dist/__tests__/shipment-actions.test.d.ts.map +1 -0
  91. package/dist/__tests__/shipment-actions.test.js +378 -0
  92. package/dist/__tests__/shipment-actions.test.js.map +1 -0
  93. package/dist/__tests__/shipment-persistence.test.d.ts +2 -0
  94. package/dist/__tests__/shipment-persistence.test.d.ts.map +1 -0
  95. package/dist/__tests__/shipment-persistence.test.js +120 -0
  96. package/dist/__tests__/shipment-persistence.test.js.map +1 -0
  97. package/dist/__tests__/shipment-pipeline.test.d.ts +2 -0
  98. package/dist/__tests__/shipment-pipeline.test.d.ts.map +1 -0
  99. package/dist/__tests__/shipment-pipeline.test.js +392 -0
  100. package/dist/__tests__/shipment-pipeline.test.js.map +1 -0
  101. package/dist/__tests__/shipment-report.test.d.ts +2 -0
  102. package/dist/__tests__/shipment-report.test.d.ts.map +1 -0
  103. package/dist/__tests__/shipment-report.test.js +78 -0
  104. package/dist/__tests__/shipment-report.test.js.map +1 -0
  105. package/dist/__tests__/shipment-stdin-integration.test.d.ts +2 -0
  106. package/dist/__tests__/shipment-stdin-integration.test.d.ts.map +1 -0
  107. package/dist/__tests__/shipment-stdin-integration.test.js +49 -0
  108. package/dist/__tests__/shipment-stdin-integration.test.js.map +1 -0
  109. package/dist/__tests__/shipment-type-parity.test.d.ts +2 -0
  110. package/dist/__tests__/shipment-type-parity.test.d.ts.map +1 -0
  111. package/dist/__tests__/shipment-type-parity.test.js +10 -0
  112. package/dist/__tests__/shipment-type-parity.test.js.map +1 -0
  113. package/dist/__tests__/snapshot-copy-provider.test.d.ts +2 -0
  114. package/dist/__tests__/snapshot-copy-provider.test.d.ts.map +1 -0
  115. package/dist/__tests__/snapshot-copy-provider.test.js +88 -0
  116. package/dist/__tests__/snapshot-copy-provider.test.js.map +1 -0
  117. package/dist/__tests__/swarm-coordinator-backend.test.js +153 -0
  118. package/dist/__tests__/swarm-coordinator-backend.test.js.map +1 -1
  119. package/dist/__tests__/swarm-coordinator-complete-intercept.test.d.ts +2 -0
  120. package/dist/__tests__/swarm-coordinator-complete-intercept.test.d.ts.map +1 -0
  121. package/dist/__tests__/swarm-coordinator-complete-intercept.test.js +111 -0
  122. package/dist/__tests__/swarm-coordinator-complete-intercept.test.js.map +1 -0
  123. package/dist/__tests__/task-store-source.test.d.ts +2 -0
  124. package/dist/__tests__/task-store-source.test.d.ts.map +1 -0
  125. package/dist/__tests__/task-store-source.test.js +56 -0
  126. package/dist/__tests__/task-store-source.test.js.map +1 -0
  127. package/dist/__tests__/transport-detect.test.d.ts +2 -0
  128. package/dist/__tests__/transport-detect.test.d.ts.map +1 -0
  129. package/dist/__tests__/transport-detect.test.js +92 -0
  130. package/dist/__tests__/transport-detect.test.js.map +1 -0
  131. package/dist/__tests__/workcycle-runner-cascade.test.d.ts +2 -0
  132. package/dist/__tests__/workcycle-runner-cascade.test.d.ts.map +1 -0
  133. package/dist/__tests__/workcycle-runner-cascade.test.js +203 -0
  134. package/dist/__tests__/workcycle-runner-cascade.test.js.map +1 -0
  135. package/dist/__tests__/workcycle-runner.test.d.ts +2 -0
  136. package/dist/__tests__/workcycle-runner.test.d.ts.map +1 -0
  137. package/dist/__tests__/workcycle-runner.test.js +369 -0
  138. package/dist/__tests__/workcycle-runner.test.js.map +1 -0
  139. package/dist/__tests__/workspace-diff.test.d.ts +2 -0
  140. package/dist/__tests__/workspace-diff.test.d.ts.map +1 -0
  141. package/dist/__tests__/workspace-diff.test.js +62 -0
  142. package/dist/__tests__/workspace-diff.test.js.map +1 -0
  143. package/dist/__tests__/workspace-manager.test.d.ts +2 -0
  144. package/dist/__tests__/workspace-manager.test.d.ts.map +1 -0
  145. package/dist/__tests__/workspace-manager.test.js +120 -0
  146. package/dist/__tests__/workspace-manager.test.js.map +1 -0
  147. package/dist/__tests__/workspace-types.test.d.ts +2 -0
  148. package/dist/__tests__/workspace-types.test.d.ts.map +1 -0
  149. package/dist/__tests__/workspace-types.test.js +37 -0
  150. package/dist/__tests__/workspace-types.test.js.map +1 -0
  151. package/dist/__tests__/worktree-gc.test.d.ts +2 -0
  152. package/dist/__tests__/worktree-gc.test.d.ts.map +1 -0
  153. package/dist/__tests__/worktree-gc.test.js +183 -0
  154. package/dist/__tests__/worktree-gc.test.js.map +1 -0
  155. package/dist/always-on/activity-reader.d.ts +27 -0
  156. package/dist/always-on/activity-reader.d.ts.map +1 -0
  157. package/dist/always-on/activity-reader.js +95 -0
  158. package/dist/always-on/activity-reader.js.map +1 -0
  159. package/dist/always-on/always-on-manager.d.ts +170 -0
  160. package/dist/always-on/always-on-manager.d.ts.map +1 -0
  161. package/dist/always-on/always-on-manager.js +538 -0
  162. package/dist/always-on/always-on-manager.js.map +1 -0
  163. package/dist/always-on/config.d.ts +141 -0
  164. package/dist/always-on/config.d.ts.map +1 -0
  165. package/dist/always-on/config.js +324 -0
  166. package/dist/always-on/config.js.map +1 -0
  167. package/dist/always-on/discovery-scheduler.d.ts +60 -0
  168. package/dist/always-on/discovery-scheduler.d.ts.map +1 -0
  169. package/dist/always-on/discovery-scheduler.js +287 -0
  170. package/dist/always-on/discovery-scheduler.js.map +1 -0
  171. package/dist/always-on/ideas-client.d.ts +23 -0
  172. package/dist/always-on/ideas-client.d.ts.map +1 -0
  173. package/dist/always-on/ideas-client.js +13 -0
  174. package/dist/always-on/ideas-client.js.map +1 -0
  175. package/dist/always-on/reconcile-researching.d.ts +42 -0
  176. package/dist/always-on/reconcile-researching.d.ts.map +1 -0
  177. package/dist/always-on/reconcile-researching.js +133 -0
  178. package/dist/always-on/reconcile-researching.js.map +1 -0
  179. package/dist/always-on/task-sources/cascade-picker.d.ts +42 -0
  180. package/dist/always-on/task-sources/cascade-picker.d.ts.map +1 -0
  181. package/dist/always-on/task-sources/cascade-picker.js +65 -0
  182. package/dist/always-on/task-sources/cascade-picker.js.map +1 -0
  183. package/dist/always-on/task-sources/idea-dedupe.d.ts +62 -0
  184. package/dist/always-on/task-sources/idea-dedupe.d.ts.map +1 -0
  185. package/dist/always-on/task-sources/idea-dedupe.js +130 -0
  186. package/dist/always-on/task-sources/idea-dedupe.js.map +1 -0
  187. package/dist/always-on/task-sources/idea-research-source.d.ts +46 -0
  188. package/dist/always-on/task-sources/idea-research-source.d.ts.map +1 -0
  189. package/dist/always-on/task-sources/idea-research-source.js +308 -0
  190. package/dist/always-on/task-sources/idea-research-source.js.map +1 -0
  191. package/dist/always-on/task-sources/idea-sort.d.ts +3 -0
  192. package/dist/always-on/task-sources/idea-sort.d.ts.map +1 -0
  193. package/dist/always-on/task-sources/idea-sort.js +25 -0
  194. package/dist/always-on/task-sources/idea-sort.js.map +1 -0
  195. package/dist/always-on/task-sources/idea-todo-source.d.ts +48 -0
  196. package/dist/always-on/task-sources/idea-todo-source.d.ts.map +1 -0
  197. package/dist/always-on/task-sources/idea-todo-source.js +226 -0
  198. package/dist/always-on/task-sources/idea-todo-source.js.map +1 -0
  199. package/dist/always-on/task-sources/introspection-source.d.ts +101 -0
  200. package/dist/always-on/task-sources/introspection-source.d.ts.map +1 -0
  201. package/dist/always-on/task-sources/introspection-source.js +695 -0
  202. package/dist/always-on/task-sources/introspection-source.js.map +1 -0
  203. package/dist/always-on/task-sources/task-store-source.d.ts +15 -0
  204. package/dist/always-on/task-sources/task-store-source.d.ts.map +1 -0
  205. package/dist/always-on/task-sources/task-store-source.js +59 -0
  206. package/dist/always-on/task-sources/task-store-source.js.map +1 -0
  207. package/dist/always-on/task-sources/types.d.ts +108 -0
  208. package/dist/always-on/task-sources/types.d.ts.map +1 -0
  209. package/dist/always-on/task-sources/types.js +13 -0
  210. package/dist/always-on/task-sources/types.js.map +1 -0
  211. package/dist/always-on/types.d.ts +76 -0
  212. package/dist/always-on/types.d.ts.map +1 -0
  213. package/dist/always-on/types.js +17 -0
  214. package/dist/always-on/types.js.map +1 -0
  215. package/dist/always-on/workcycle-runner.d.ts +115 -0
  216. package/dist/always-on/workcycle-runner.d.ts.map +1 -0
  217. package/dist/always-on/workcycle-runner.js +285 -0
  218. package/dist/always-on/workcycle-runner.js.map +1 -0
  219. package/dist/always-on/worktree-gc.d.ts +41 -0
  220. package/dist/always-on/worktree-gc.d.ts.map +1 -0
  221. package/dist/always-on/worktree-gc.js +167 -0
  222. package/dist/always-on/worktree-gc.js.map +1 -0
  223. package/dist/index.d.ts +26 -2
  224. package/dist/index.d.ts.map +1 -1
  225. package/dist/index.js +24 -1
  226. package/dist/index.js.map +1 -1
  227. package/dist/persistence.d.ts +37 -1
  228. package/dist/persistence.d.ts.map +1 -1
  229. package/dist/persistence.js +48 -0
  230. package/dist/persistence.js.map +1 -1
  231. package/dist/retrospective.d.ts.map +1 -1
  232. package/dist/retrospective.js +6 -0
  233. package/dist/retrospective.js.map +1 -1
  234. package/dist/roles/role-loader.d.ts +1 -1
  235. package/dist/roles/role-loader.d.ts.map +1 -1
  236. package/dist/roles/role-loader.js +18 -0
  237. package/dist/roles/role-loader.js.map +1 -1
  238. package/dist/roles/types.d.ts +12 -0
  239. package/dist/roles/types.d.ts.map +1 -1
  240. package/dist/shipment/gh-pr-creator.d.ts +28 -0
  241. package/dist/shipment/gh-pr-creator.d.ts.map +1 -0
  242. package/dist/shipment/gh-pr-creator.js +80 -0
  243. package/dist/shipment/gh-pr-creator.js.map +1 -0
  244. package/dist/shipment/report.d.ts +27 -0
  245. package/dist/shipment/report.d.ts.map +1 -0
  246. package/dist/shipment/report.js +41 -0
  247. package/dist/shipment/report.js.map +1 -0
  248. package/dist/shipment/secret-scrub.d.ts +12 -0
  249. package/dist/shipment/secret-scrub.d.ts.map +1 -0
  250. package/dist/shipment/secret-scrub.js +30 -0
  251. package/dist/shipment/secret-scrub.js.map +1 -0
  252. package/dist/shipment/shipment-actions.d.ts +85 -0
  253. package/dist/shipment/shipment-actions.d.ts.map +1 -0
  254. package/dist/shipment/shipment-actions.js +190 -0
  255. package/dist/shipment/shipment-actions.js.map +1 -0
  256. package/dist/shipment/shipment-pipeline.d.ts +48 -0
  257. package/dist/shipment/shipment-pipeline.d.ts.map +1 -0
  258. package/dist/shipment/shipment-pipeline.js +256 -0
  259. package/dist/shipment/shipment-pipeline.js.map +1 -0
  260. package/dist/shipment/transport-detect.d.ts +16 -0
  261. package/dist/shipment/transport-detect.d.ts.map +1 -0
  262. package/dist/shipment/transport-detect.js +54 -0
  263. package/dist/shipment/transport-detect.js.map +1 -0
  264. package/dist/shipment/workspace-diff.d.ts +39 -0
  265. package/dist/shipment/workspace-diff.d.ts.map +1 -0
  266. package/dist/shipment/workspace-diff.js +64 -0
  267. package/dist/shipment/workspace-diff.js.map +1 -0
  268. package/dist/swarm-coordinator.d.ts +20 -1
  269. package/dist/swarm-coordinator.d.ts.map +1 -1
  270. package/dist/swarm-coordinator.js +193 -10
  271. package/dist/swarm-coordinator.js.map +1 -1
  272. package/dist/types.d.ts +62 -0
  273. package/dist/types.d.ts.map +1 -1
  274. package/dist/workspace/git-worktree-provider.d.ts +11 -0
  275. package/dist/workspace/git-worktree-provider.d.ts.map +1 -0
  276. package/dist/workspace/git-worktree-provider.js +123 -0
  277. package/dist/workspace/git-worktree-provider.js.map +1 -0
  278. package/dist/workspace/gitignore-check.d.ts +10 -0
  279. package/dist/workspace/gitignore-check.d.ts.map +1 -0
  280. package/dist/workspace/gitignore-check.js +25 -0
  281. package/dist/workspace/gitignore-check.js.map +1 -0
  282. package/dist/workspace/index.d.ts +5 -0
  283. package/dist/workspace/index.d.ts.map +1 -0
  284. package/dist/workspace/index.js +5 -0
  285. package/dist/workspace/index.js.map +1 -0
  286. package/dist/workspace/snapshot-copy-provider.d.ts +11 -0
  287. package/dist/workspace/snapshot-copy-provider.d.ts.map +1 -0
  288. package/dist/workspace/snapshot-copy-provider.js +66 -0
  289. package/dist/workspace/snapshot-copy-provider.js.map +1 -0
  290. package/dist/workspace/types.d.ts +36 -0
  291. package/dist/workspace/types.d.ts.map +1 -0
  292. package/dist/workspace/types.js +2 -0
  293. package/dist/workspace/types.js.map +1 -0
  294. package/dist/workspace/workspace-manager.d.ts +30 -0
  295. package/dist/workspace/workspace-manager.d.ts.map +1 -0
  296. package/dist/workspace/workspace-manager.js +104 -0
  297. package/dist/workspace/workspace-manager.js.map +1 -0
  298. package/package.json +4 -4
  299. package/roles/queen.md +1 -0
  300. package/templates/introspection.md +64 -0
  301. package/templates/research-only.md +58 -0
  302. package/roles/preset-analyst-simons.md +0 -39
  303. package/roles/preset-architect-knuth.md +0 -39
  304. package/roles/preset-designer-norman.md +0 -39
  305. package/roles/preset-designer.md +0 -39
  306. package/roles/preset-dev-carmack.md +0 -39
  307. package/roles/preset-dev-gosling.md +0 -39
  308. package/roles/preset-developer.md +0 -52
  309. package/roles/preset-manager-grove.md +0 -39
  310. package/roles/preset-manager-musk.md +0 -39
  311. package/roles/preset-pm.md +0 -78
  312. package/roles/preset-researcher-feynman.md +0 -39
  313. package/roles/preset-reviewer.md +0 -46
  314. package/roles/preset-strategist-buffett.md +0 -39
  315. package/roles/preset-strategist-munger.md +0 -39
  316. package/roles/preset-strategist-sunzi.md +0 -39
  317. package/roles/preset-tester-beck.md +0 -40
  318. package/roles/preset-tester.md +0 -47
  319. package/roles/preset-writer-orwell.md +0 -39
  320. package/roles/preset-writer.md +0 -39
@@ -0,0 +1,538 @@
1
+ // AlwaysOnManager — M7.3 per-project scheduler lifecycle owner.
2
+ //
3
+ // One instance per agent process. Manages a DiscoveryScheduler +
4
+ // WorkCycleRunner pair for every project that has opted into always-on
5
+ // mode. Bridges:
6
+ // - on-disk config (loadAlwaysOnConfig / saveAlwaysOnConfig)
7
+ // - live counters that must survive agent restart (ticksToday +
8
+ // lastFireAt + ticksTodayDate)
9
+ // - the userActive gate (last inbound hub message timestamp)
10
+ // - the pausedUntil gate
11
+ // - per-project jsonl log (`<projectRoot>/always-on.log`) with rotation.
12
+ import { renameSync, statSync, appendFileSync, mkdirSync } from "node:fs";
13
+ import { join, dirname } from "node:path";
14
+ import { createLogger } from "@mclawnet/logger";
15
+ import { projectRoot as projRoot } from "@mclawnet/task";
16
+ import { DiscoveryScheduler } from "./discovery-scheduler.js";
17
+ import { WorkCycleRunner } from "./workcycle-runner.js";
18
+ import { createCascadePicker } from "./task-sources/cascade-picker.js";
19
+ import { createTaskStoreSource } from "./task-sources/task-store-source.js";
20
+ import { gcWorktrees } from "./worktree-gc.js";
21
+ import { loadAlwaysOnConfig, saveAlwaysOnConfig, mergeAlwaysOnConfig, localYMD, resolveTaskSources, DEFAULT_ALWAYS_ON_TEMPLATE, } from "./config.js";
22
+ const log = createLogger({ module: "always-on-manager" });
23
+ /** 30 min default user-active window — matches design Q3=A. */
24
+ const USER_ACTIVE_WINDOW_MS = 30 * 60 * 1000;
25
+ /** Log file size cap before rotation. Single .1 backup is kept. */
26
+ const LOG_ROTATE_BYTES = 10 * 1024 * 1024;
27
+ const LOG_FILENAME = "always-on.log";
28
+ function logFilePath(workDir, home) {
29
+ return join(projRoot(workDir, home), LOG_FILENAME);
30
+ }
31
+ export class AlwaysOnManager {
32
+ home;
33
+ swarmCoordinator;
34
+ pickNextTask;
35
+ cascadePicker;
36
+ /**
37
+ * R3 I-B — kept around so `drainPending(workDir)` can iterate sources
38
+ * BEFORE the cascade runs each tick. The cascade picker itself only
39
+ * exposes filtered-pick semantics; the drain must bypass the filter so
40
+ * a source whose toggle was flipped off mid-flight still gets to reap
41
+ * its in-flight work.
42
+ */
43
+ taskSources;
44
+ now;
45
+ userActiveWindowMs;
46
+ logRotateBytes;
47
+ runnerFactory;
48
+ entries = new Map();
49
+ constructor(opts) {
50
+ this.home = opts.home;
51
+ this.swarmCoordinator = opts.swarmCoordinator;
52
+ // Resolve the picker strategy. Precedence:
53
+ // 1. Explicit `taskSources` → build a CascadePicker (M8.0 path).
54
+ // 2. Explicit `pickNextTask` → use it directly (M7 back-compat).
55
+ // 3. Explicit `taskStore` factory → wrap into a single-source cascade
56
+ // so we still get the (currently no-op) lifecycle hooks plumbing.
57
+ // 4. None → throw; the manager has nothing to pick with.
58
+ //
59
+ // Hotfix C1: the cascade picker is built once with the full source list,
60
+ // but is given a per-pick `filter` callback that re-reads each project's
61
+ // always-on config and skips any source whose toggle is off. This makes
62
+ // UI flips (taskSources.* in always-on.json) take effect on the very next
63
+ // tick without any picker/runner rebuild — there is no "missed pick"
64
+ // window between the PATCH and the agent noticing.
65
+ if (opts.taskSources && opts.taskSources.length > 0) {
66
+ this.taskSources = opts.taskSources;
67
+ this.cascadePicker = createCascadePicker(opts.taskSources, log, {
68
+ filter: (source, workDir) => this.isSourceEnabledForProject(source, workDir),
69
+ });
70
+ this.pickNextTask = (workDir) => this.cascadePicker.pickNextTask(workDir);
71
+ }
72
+ else if (opts.pickNextTask) {
73
+ this.taskSources = [];
74
+ this.cascadePicker = null;
75
+ this.pickNextTask = opts.pickNextTask;
76
+ }
77
+ else if (opts.taskStore) {
78
+ const source = createTaskStoreSource({ taskStore: opts.taskStore });
79
+ this.taskSources = [source];
80
+ this.cascadePicker = createCascadePicker([source], log);
81
+ this.pickNextTask = (workDir) => this.cascadePicker.pickNextTask(workDir);
82
+ }
83
+ else {
84
+ throw new Error("AlwaysOnManager requires one of: taskSources, pickNextTask, or taskStore");
85
+ }
86
+ this.now = opts.now ?? (() => new Date());
87
+ this.userActiveWindowMs = opts.userActiveWindowMs ?? USER_ACTIVE_WINDOW_MS;
88
+ this.logRotateBytes = opts.logRotateBytes ?? LOG_ROTATE_BYTES;
89
+ if (opts.runnerFactory)
90
+ this.runnerFactory = opts.runnerFactory;
91
+ }
92
+ /**
93
+ * Boot (or rebuild) the scheduler for one project. Loads config from disk;
94
+ * restores ticksToday/lastFireAt when the persisted date matches today; if
95
+ * mode === "off", the scheduler is created but left stopped (cheap, lets
96
+ * `applyConfig` flip the switch later without re-instantiating).
97
+ *
98
+ * Idempotent: calling start() twice for the same project rebuilds; the old
99
+ * scheduler is stopped first to avoid duplicate timers.
100
+ */
101
+ async start(workDir) {
102
+ // Tear down any prior entry — guards against accidental double-start.
103
+ await this.stop(workDir);
104
+ const cfg = loadAlwaysOnConfig(workDir, this.home);
105
+ const today = localYMD(this.now());
106
+ const runner = this.runnerFactory?.(workDir) ??
107
+ new WorkCycleRunner({
108
+ swarmCoordinator: this.swarmCoordinator,
109
+ pickNextTask: this.pickNextTask,
110
+ ...(this.cascadePicker
111
+ ? { resolveTaskSource: (ref) => this.cascadePicker.resolveSource(ref) }
112
+ : {}),
113
+ });
114
+ const scheduler = new DiscoveryScheduler({
115
+ mode: cfg.mode,
116
+ dailyBudget: cfg.dailyBudget,
117
+ now: this.now,
118
+ gates: this.buildGates(workDir),
119
+ onFire: async () => {
120
+ // Re-read config so a recently-PATCHed templateName picks up without a
121
+ // scheduler restart. Cheap (single JSON parse) compared to the swarm
122
+ // spawn that follows.
123
+ const live = loadAlwaysOnConfig(workDir, this.home);
124
+ // R3 I-B — pre-cascade drain. Runs before any source.pick() so a
125
+ // source whose toggle is currently OFF still gets to reap its
126
+ // in-flight work (e.g. IntrospectionSource ingests a fire-and-forget
127
+ // swarm spawned on a prior tick when introspection was on). The
128
+ // cascade-picker filter blocks the source's pick() entirely when
129
+ // disabled, but the drain hook is filter-independent.
130
+ await this.drainAllSources(workDir);
131
+ const result = await runner.run({
132
+ projectRoot: workDir,
133
+ templateName: live.templateName ?? DEFAULT_ALWAYS_ON_TEMPLATE,
134
+ });
135
+ // B5: stash cycle meta for the onTick log writer to drain. Optional
136
+ // fields are omitted when the runner skipped before picking anything.
137
+ const entry = this.entries.get(workDir);
138
+ if (entry) {
139
+ const meta = {
140
+ cycleId: result.cycleId,
141
+ cycleStatus: result.status,
142
+ swarmId: result.swarmId,
143
+ };
144
+ // result.taskRef is the runner's base TaskRef at the type level,
145
+ // but at runtime the cascade picker always stamps it with the
146
+ // extended fields from task-sources/types — sourceKind in
147
+ // particular. The cast picks up the runtime shape without
148
+ // requiring the runner to expose the extended type to all M7
149
+ // callers. TODO(M9 cleanup): collapse base+extended TaskRef.
150
+ const sourceKind = result.taskRef?.sourceKind;
151
+ if (typeof sourceKind === "string")
152
+ meta.source = sourceKind;
153
+ entry.pendingCycleMeta = meta;
154
+ // PR-B Sub-PR-B4: run worktree GC once per fired cycle. Best-
155
+ // effort — failures inside gcWorktrees are caught and surface as
156
+ // a zero-result, never throw back to the scheduler loop.
157
+ try {
158
+ const gc = gcWorktrees({ workDir, home: this.home });
159
+ entry.pendingGcResult = {
160
+ scanned: gc.scanned,
161
+ removed: gc.removed,
162
+ retained: gc.retained,
163
+ };
164
+ if (gc.removed > 0) {
165
+ log.info({ workDir, ...entry.pendingGcResult }, "worktree GC: reaped stale dirs");
166
+ }
167
+ }
168
+ catch (err) {
169
+ log.warn({ err: err instanceof Error ? err.message : String(err), workDir }, "worktree GC pass failed (continuing)");
170
+ }
171
+ }
172
+ log.info({
173
+ workDir,
174
+ cycleId: result.cycleId,
175
+ swarmId: result.swarmId,
176
+ status: result.status,
177
+ }, "always-on work cycle finished");
178
+ },
179
+ onTick: (record) => this.onTick(workDir, record),
180
+ });
181
+ // Restore counters when today matches — otherwise a stale ticksToday from
182
+ // yesterday could be carried into a brand-new day.
183
+ if (cfg.ticksTodayDate === today && typeof cfg.ticksToday === "number") {
184
+ scheduler.restoreState({
185
+ ticksToday: cfg.ticksToday,
186
+ lastFireAt: cfg.lastFireAt ? new Date(cfg.lastFireAt) : null,
187
+ });
188
+ }
189
+ else if (cfg.lastFireAt) {
190
+ // Keep lastFireAt even when the date rolled over so the UI can still
191
+ // show "last fired yesterday at 14:00".
192
+ scheduler.restoreState({ ticksToday: 0, lastFireAt: new Date(cfg.lastFireAt) });
193
+ }
194
+ this.entries.set(workDir, {
195
+ workDir,
196
+ scheduler,
197
+ runner,
198
+ // N1 hotfix: this is "today" unconditionally; the prior ternary always
199
+ // returned `today` on both branches.
200
+ ticksTodayDate: today,
201
+ lastActivityAt: null,
202
+ pendingCycleMeta: null,
203
+ pendingGcResult: null,
204
+ });
205
+ if (cfg.mode !== "off")
206
+ scheduler.start();
207
+ log.info({ workDir, mode: cfg.mode, dailyBudget: cfg.dailyBudget, ticksToday: cfg.ticksToday ?? 0 }, "always-on scheduler booted");
208
+ }
209
+ /** Stop the scheduler for a project and drop the entry. Idempotent. */
210
+ async stop(workDir) {
211
+ const e = this.entries.get(workDir);
212
+ if (!e)
213
+ return;
214
+ e.scheduler.stop();
215
+ this.entries.delete(workDir);
216
+ }
217
+ /**
218
+ * Returns the live snapshot serialised to the wire format (Date → ISO),
219
+ * or null when no scheduler is booted for the project.
220
+ */
221
+ snapshot(workDir) {
222
+ const e = this.entries.get(workDir);
223
+ if (!e)
224
+ return null;
225
+ const s = e.scheduler.snapshot();
226
+ return {
227
+ mode: s.mode,
228
+ ticksToday: s.ticksToday,
229
+ lastFireAt: s.lastFireAt ? s.lastFireAt.toISOString() : null,
230
+ nextTickAt: s.nextTickAt ? s.nextTickAt.toISOString() : null,
231
+ recentTicks: s.recentTicks.map((r) => ({
232
+ at: r.at.toISOString(),
233
+ decision: r.decision,
234
+ gateBreakdown: r.gateBreakdown.map((g) => ({
235
+ gate: g.gate,
236
+ decision: g.decision,
237
+ })),
238
+ durationMs: r.durationMs,
239
+ })),
240
+ };
241
+ }
242
+ /**
243
+ * Re-sync the live scheduler with whatever's on disk right now (M7.3).
244
+ * The M7.2 projects-handler already does load→merge→save, then calls our
245
+ * hook with the new config. Rather than re-doing the persistence here we
246
+ * just pull the canonical state off disk and push it into the scheduler.
247
+ * Auto-boots if the project never started; idempotent otherwise.
248
+ */
249
+ async refreshFromDisk(workDir) {
250
+ const entry = this.entries.get(workDir);
251
+ if (!entry) {
252
+ await this.start(workDir);
253
+ return;
254
+ }
255
+ const cfg = loadAlwaysOnConfig(workDir, this.home);
256
+ entry.scheduler.setDailyBudget(cfg.dailyBudget);
257
+ entry.scheduler.setMode(cfg.mode);
258
+ // setMode rearms the timer when running; for the off→on transition on a
259
+ // never-started entry we still need start() — idempotent when already
260
+ // running. (S2: previously this path also had an early-return inside
261
+ // setMode that made the redundant start() necessary; setMode now lets
262
+ // schedule() decide.)
263
+ if (cfg.mode !== "off")
264
+ entry.scheduler.start();
265
+ }
266
+ /**
267
+ * Apply a config patch: merges over the persisted baseline, writes it back,
268
+ * updates the live scheduler in place. Auto-boots the scheduler when the
269
+ * project has never been started (UI may flip a mode on a fresh project).
270
+ *
271
+ * Returns the merged config and the post-update snapshot so callers can
272
+ * hand both back to the UI in one round trip.
273
+ */
274
+ async applyConfig(workDir, patch) {
275
+ // Lazily boot if the UI flipped a switch on a never-started project. This
276
+ // mirrors the start() codepath but avoids a wasted no-op restart.
277
+ let entry = this.entries.get(workDir);
278
+ if (!entry) {
279
+ await this.start(workDir);
280
+ entry = this.entries.get(workDir);
281
+ }
282
+ const current = loadAlwaysOnConfig(workDir, this.home);
283
+ const next = mergeAlwaysOnConfig(current, patch);
284
+ saveAlwaysOnConfig(workDir, this.home, next);
285
+ // S2 hotfix: collapsed dance. Budget first (so a bump permits the next
286
+ // tick immediately); setMode handles off→on / on→off internally; explicit
287
+ // start() needed only when scheduler was created stopped (mode=off at
288
+ // boot) and the user just flipped it on.
289
+ entry.scheduler.setDailyBudget(next.dailyBudget);
290
+ entry.scheduler.setMode(next.mode);
291
+ if (next.mode !== "off")
292
+ entry.scheduler.start();
293
+ return {
294
+ config: next,
295
+ snapshot: this.snapshot(workDir) ?? {
296
+ mode: next.mode,
297
+ ticksToday: 0,
298
+ lastFireAt: null,
299
+ nextTickAt: null,
300
+ recentTicks: [],
301
+ },
302
+ };
303
+ }
304
+ /**
305
+ * Record agent activity for the userActive gate. S1 hotfix: scoped per
306
+ * project. Pass `workDir` to update one project only; omit (or pass null)
307
+ * to broadcast to every entry — preserves the old global behaviour for
308
+ * callers that can't resolve a workDir from an inbound hub frame.
309
+ */
310
+ recordActivity(workDir) {
311
+ const t = this.now().getTime();
312
+ if (workDir) {
313
+ const e = this.entries.get(workDir);
314
+ if (e)
315
+ e.lastActivityAt = t;
316
+ return;
317
+ }
318
+ for (const e of this.entries.values())
319
+ e.lastActivityAt = t;
320
+ }
321
+ /**
322
+ * B6 — force a tick immediately, clearing the per-project userActive
323
+ * timestamp first so the gate cascade doesn't skip on "user active <30min
324
+ * ago". Dev-only entrypoint: the hub gates the corresponding HTTP route on
325
+ * `NODE_ENV !== "production"` so this never reaches the agent in prod.
326
+ *
327
+ * Returns the TickRecord (decision + gateBreakdown + durationMs) and the
328
+ * post-tick snapshot in one call so the caller can show in dev tooling
329
+ * whether the force-tick fired or still skipped (e.g. on a real
330
+ * pausedUntil that genuinely should block).
331
+ *
332
+ * Note: only `lastActivityAt` is cleared. Other gates (pausedUntil,
333
+ * dailyBudget) intentionally still apply — force-tick is for bypassing
334
+ * the "I'm typing, don't fire" UX gate, not the user's explicit pause or
335
+ * the daily budget. Throws when no scheduler is booted for the project.
336
+ */
337
+ async forceTick(workDir) {
338
+ const entry = this.entries.get(workDir);
339
+ if (!entry) {
340
+ throw new Error(`AlwaysOnManager.forceTick: no scheduler for ${workDir}`);
341
+ }
342
+ entry.lastActivityAt = null;
343
+ const r = await entry.scheduler.tickNow();
344
+ // Convert to wire shape so the agent handler can pass through unchanged.
345
+ // Mirrors the mapping in snapshot() above.
346
+ const record = {
347
+ at: r.at.toISOString(),
348
+ decision: r.decision,
349
+ gateBreakdown: r.gateBreakdown.map((g) => ({
350
+ gate: g.gate,
351
+ decision: g.decision,
352
+ })),
353
+ durationMs: r.durationMs,
354
+ };
355
+ return { record, snapshot: this.snapshot(workDir) };
356
+ }
357
+ /** Stop every per-project scheduler. Called on agent shutdown. */
358
+ async disposeAll() {
359
+ for (const [workDir] of this.entries) {
360
+ await this.stop(workDir);
361
+ }
362
+ }
363
+ /**
364
+ * R3 I-B — public test/ops hook. Invokes `drainPending(workDir)` on every
365
+ * TaskSource that defines it, regardless of whether its toggle is on. This
366
+ * is the same drain that runs automatically inside `onFire` before each
367
+ * tick; exposed publicly so:
368
+ * - tests can simulate "user toggled off mid-flight → next tick reaps
369
+ * cleanly" without driving the scheduler timer, and
370
+ * - future ops surfaces (admin reseed, manual reconcile) can request a
371
+ * drain pass without firing a work cycle.
372
+ * Failures inside a single source are logged and swallowed — one source's
373
+ * drain must not break the manager's tick loop.
374
+ */
375
+ async drainAllSources(workDir) {
376
+ for (const source of this.taskSources) {
377
+ if (typeof source.drainPending !== "function")
378
+ continue;
379
+ try {
380
+ await source.drainPending(workDir);
381
+ }
382
+ catch (err) {
383
+ log.warn({
384
+ err: err instanceof Error ? err.message : String(err),
385
+ source: source.name,
386
+ workDir,
387
+ }, "always-on drainPending failed (best-effort)");
388
+ }
389
+ }
390
+ }
391
+ // ── internal ──────────────────────────────────────────────────────────
392
+ /**
393
+ * Hotfix C1 — map a TaskSource onto its taskSources toggle flag and
394
+ * resolve against the project's persisted config. Unknown source names
395
+ * default to enabled so non-standard sources (e.g. tests, future M9
396
+ * sources not yet listed in `AlwaysOnTaskSourcesConfig`) aren't silently
397
+ * dropped. Called fresh per pick by the cascade picker filter, so toggling
398
+ * a source on/off in the UI takes effect on the very next tick — no
399
+ * scheduler/picker rebuild required (the JSON read is cheap compared to a
400
+ * swarm spawn).
401
+ */
402
+ isSourceEnabledForProject(source, workDir) {
403
+ const cfg = loadAlwaysOnConfig(workDir, this.home);
404
+ const flags = resolveTaskSources(cfg.taskSources);
405
+ // S6 hotfix — prefer source.kind (explicit TaskSourceKind union); fall
406
+ // back to source.name for sources that haven't adopted the kind field.
407
+ const kind = (source.kind ?? source.name);
408
+ switch (kind) {
409
+ case "task-store":
410
+ return flags.taskStore;
411
+ case "idea-todo":
412
+ return flags.ideaTodo;
413
+ case "idea-research":
414
+ return flags.ideaResearch;
415
+ case "queen-introspection":
416
+ return flags.introspection;
417
+ default:
418
+ return true;
419
+ }
420
+ }
421
+ /** User-facing gates: pausedUntil + userActive. */
422
+ buildGates(workDir) {
423
+ return [
424
+ {
425
+ name: "pausedUntil",
426
+ evaluate: (_ctx) => {
427
+ const cfg = loadAlwaysOnConfig(workDir, this.home);
428
+ if (!cfg.pausedUntil)
429
+ return { kind: "fire" };
430
+ const until = Date.parse(cfg.pausedUntil);
431
+ if (Number.isFinite(until) && until > this.now().getTime()) {
432
+ return {
433
+ kind: "skip",
434
+ reason: `paused until ${cfg.pausedUntil}`,
435
+ };
436
+ }
437
+ return { kind: "fire" };
438
+ },
439
+ },
440
+ {
441
+ name: "userActive",
442
+ evaluate: (_ctx) => {
443
+ // S1 hotfix: per-project lastActivityAt. Falls back to "fire" when
444
+ // the entry vanished (race during a stop/restart) — safer than
445
+ // crashing the tick loop.
446
+ const entry = this.entries.get(workDir);
447
+ const lastAt = entry?.lastActivityAt ?? null;
448
+ if (lastAt === null)
449
+ return { kind: "fire" };
450
+ const since = this.now().getTime() - lastAt;
451
+ if (since < this.userActiveWindowMs) {
452
+ return {
453
+ kind: "skip",
454
+ reason: `user active ${Math.round(since / 1000)}s ago (<${Math.round(this.userActiveWindowMs / 1000)}s)`,
455
+ };
456
+ }
457
+ return { kind: "fire" };
458
+ },
459
+ },
460
+ ];
461
+ }
462
+ /**
463
+ * Persist ticksToday/lastFireAt AND append a jsonl line to always-on.log.
464
+ * Hooked into DiscoveryScheduler.onTick so every fired / skipped / halted
465
+ * decision is captured. Best-effort — write failures are logged but never
466
+ * thrown back into the scheduler tick loop.
467
+ */
468
+ onTick(workDir, record) {
469
+ const entry = this.entries.get(workDir);
470
+ if (!entry)
471
+ return;
472
+ const today = localYMD(record.at);
473
+ if (record.decision === "fired") {
474
+ try {
475
+ const current = loadAlwaysOnConfig(workDir, this.home);
476
+ const liveTicks = entry.scheduler.snapshot().ticksToday;
477
+ const updated = {
478
+ ...current,
479
+ ticksToday: liveTicks,
480
+ ticksTodayDate: today,
481
+ lastFireAt: record.at.toISOString(),
482
+ };
483
+ saveAlwaysOnConfig(workDir, this.home, updated);
484
+ entry.ticksTodayDate = today;
485
+ }
486
+ catch (err) {
487
+ log.warn({ err: err instanceof Error ? err.message : String(err), workDir }, "failed to persist always-on counters");
488
+ }
489
+ }
490
+ // Append jsonl line for every tick (fired/skipped/halted) so ops can grep.
491
+ try {
492
+ this.appendLog(workDir, record, entry);
493
+ }
494
+ catch (err) {
495
+ log.warn({ err: err instanceof Error ? err.message : String(err), workDir }, "failed to write always-on.log");
496
+ }
497
+ }
498
+ appendLog(workDir, record, entry) {
499
+ const path = logFilePath(workDir, this.home);
500
+ mkdirSync(dirname(path), { recursive: true });
501
+ // Rotate when the existing file exceeds the cap. One backup is kept
502
+ // (.1) — we explicitly overwrite the old backup to bound disk usage.
503
+ // S4 hotfix: ENOENT is expected on first write; other errors (EACCES,
504
+ // ENOSPC, EBUSY on Windows) must surface so silent rotation bugs don't
505
+ // mask a wedged log dir.
506
+ try {
507
+ const st = statSync(path);
508
+ if (st.size >= this.logRotateBytes) {
509
+ renameSync(path, `${path}.1`);
510
+ }
511
+ }
512
+ catch (err) {
513
+ const code = err?.code;
514
+ if (code !== "ENOENT") {
515
+ log.warn({ err: err instanceof Error ? err.message : String(err), path, code }, "always-on.log rotation failed");
516
+ }
517
+ }
518
+ const line = JSON.stringify({
519
+ at: record.at.toISOString(),
520
+ decision: record.decision,
521
+ gateBreakdown: record.gateBreakdown,
522
+ durationMs: record.durationMs,
523
+ // B5: drain the cycle meta stashed by onFire (filled only when the
524
+ // cycle actually ran — i.e. record.decision === "fired"). Skipped /
525
+ // halted ticks have no meta to attach. Always clear after read so a
526
+ // stale meta from a prior cycle can't leak into a later skipped tick.
527
+ ...(entry.pendingCycleMeta ? { cycle: entry.pendingCycleMeta } : {}),
528
+ // PR-B Sub-PR-B4: drain worktree GC summary if present (only on
529
+ // fired ticks — GC doesn't run on skipped/halted). Same one-shot
530
+ // drain semantics as cycle meta.
531
+ ...(entry.pendingGcResult ? { gc: entry.pendingGcResult } : {}),
532
+ });
533
+ entry.pendingCycleMeta = null;
534
+ entry.pendingGcResult = null;
535
+ appendFileSync(path, line + "\n", "utf-8");
536
+ }
537
+ }
538
+ //# sourceMappingURL=always-on-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"always-on-manager.js","sourceRoot":"","sources":["../../src/always-on/always-on-manager.ts"],"names":[],"mappings":"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"}