@lumenflow/core 3.1.1 → 3.1.3

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 (1008) hide show
  1. package/README.md +16 -16
  2. package/dist/cli/is-agent-branch.js +31 -10
  3. package/dist/index.js +3 -0
  4. package/package.json +5 -2
  5. package/dist/active-wu-detector.d.ts +0 -25
  6. package/dist/active-wu-detector.d.ts.map +0 -1
  7. package/dist/active-wu-detector.js +0 -109
  8. package/dist/active-wu-detector.js.map +0 -1
  9. package/dist/adapters/context-adapters.d.ts +0 -101
  10. package/dist/adapters/context-adapters.d.ts.map +0 -1
  11. package/dist/adapters/context-adapters.js +0 -98
  12. package/dist/adapters/context-adapters.js.map +0 -1
  13. package/dist/adapters/filesystem-metrics.adapter.d.ts +0 -91
  14. package/dist/adapters/filesystem-metrics.adapter.d.ts.map +0 -1
  15. package/dist/adapters/filesystem-metrics.adapter.js +0 -530
  16. package/dist/adapters/filesystem-metrics.adapter.js.map +0 -1
  17. package/dist/adapters/index.d.ts +0 -15
  18. package/dist/adapters/index.d.ts.map +0 -1
  19. package/dist/adapters/index.js +0 -21
  20. package/dist/adapters/index.js.map +0 -1
  21. package/dist/adapters/mock-dashboard-renderer.adapter.d.ts +0 -86
  22. package/dist/adapters/mock-dashboard-renderer.adapter.d.ts.map +0 -1
  23. package/dist/adapters/mock-dashboard-renderer.adapter.js +0 -93
  24. package/dist/adapters/mock-dashboard-renderer.adapter.js.map +0 -1
  25. package/dist/adapters/recovery-adapters.d.ts +0 -41
  26. package/dist/adapters/recovery-adapters.d.ts.map +0 -1
  27. package/dist/adapters/recovery-adapters.js +0 -32
  28. package/dist/adapters/recovery-adapters.js.map +0 -1
  29. package/dist/adapters/terminal-renderer.adapter.d.ts +0 -86
  30. package/dist/adapters/terminal-renderer.adapter.d.ts.map +0 -1
  31. package/dist/adapters/terminal-renderer.adapter.js +0 -342
  32. package/dist/adapters/terminal-renderer.adapter.js.map +0 -1
  33. package/dist/adapters/validation-adapters.d.ts +0 -53
  34. package/dist/adapters/validation-adapters.d.ts.map +0 -1
  35. package/dist/adapters/validation-adapters.js +0 -48
  36. package/dist/adapters/validation-adapters.js.map +0 -1
  37. package/dist/agent-patterns-registry.d.ts +0 -141
  38. package/dist/agent-patterns-registry.d.ts.map +0 -1
  39. package/dist/agent-patterns-registry.js +0 -319
  40. package/dist/agent-patterns-registry.js.map +0 -1
  41. package/dist/arg-parser.d.ts +0 -94
  42. package/dist/arg-parser.d.ts.map +0 -1
  43. package/dist/arg-parser.js +0 -774
  44. package/dist/arg-parser.js.map +0 -1
  45. package/dist/atomic-merge.d.ts +0 -21
  46. package/dist/atomic-merge.d.ts.map +0 -1
  47. package/dist/atomic-merge.js +0 -87
  48. package/dist/atomic-merge.js.map +0 -1
  49. package/dist/backlog-editor.d.ts +0 -103
  50. package/dist/backlog-editor.d.ts.map +0 -1
  51. package/dist/backlog-editor.js +0 -158
  52. package/dist/backlog-editor.js.map +0 -1
  53. package/dist/backlog-generator.d.ts +0 -90
  54. package/dist/backlog-generator.d.ts.map +0 -1
  55. package/dist/backlog-generator.js +0 -536
  56. package/dist/backlog-generator.js.map +0 -1
  57. package/dist/backlog-parser.d.ts +0 -46
  58. package/dist/backlog-parser.d.ts.map +0 -1
  59. package/dist/backlog-parser.js +0 -105
  60. package/dist/backlog-parser.js.map +0 -1
  61. package/dist/backlog-sync-validator.d.ts +0 -88
  62. package/dist/backlog-sync-validator.d.ts.map +0 -1
  63. package/dist/backlog-sync-validator.js +0 -324
  64. package/dist/backlog-sync-validator.js.map +0 -1
  65. package/dist/beacon-migration.d.ts +0 -56
  66. package/dist/beacon-migration.js +0 -101
  67. package/dist/branch-check.d.ts +0 -63
  68. package/dist/branch-check.d.ts.map +0 -1
  69. package/dist/branch-check.js +0 -197
  70. package/dist/branch-check.js.map +0 -1
  71. package/dist/branch-drift.d.ts +0 -24
  72. package/dist/branch-drift.d.ts.map +0 -1
  73. package/dist/branch-drift.js +0 -54
  74. package/dist/branch-drift.js.map +0 -1
  75. package/dist/cleanup-install-config.d.ts +0 -24
  76. package/dist/cleanup-install-config.d.ts.map +0 -1
  77. package/dist/cleanup-install-config.js +0 -40
  78. package/dist/cleanup-install-config.js.map +0 -1
  79. package/dist/cleanup-lock.d.ts +0 -125
  80. package/dist/cleanup-lock.d.ts.map +0 -1
  81. package/dist/cleanup-lock.js +0 -325
  82. package/dist/cleanup-lock.js.map +0 -1
  83. package/dist/cli/is-agent-branch.d.ts +0 -15
  84. package/dist/cli/is-agent-branch.d.ts.map +0 -1
  85. package/dist/cli/is-agent-branch.js.map +0 -1
  86. package/dist/cloud-detect.d.ts +0 -145
  87. package/dist/cloud-detect.d.ts.map +0 -1
  88. package/dist/cloud-detect.js +0 -116
  89. package/dist/cloud-detect.js.map +0 -1
  90. package/dist/code-path-validator.d.ts +0 -147
  91. package/dist/code-path-validator.d.ts.map +0 -1
  92. package/dist/code-path-validator.js +0 -551
  93. package/dist/code-path-validator.js.map +0 -1
  94. package/dist/code-paths-overlap.d.ts +0 -50
  95. package/dist/code-paths-overlap.d.ts.map +0 -1
  96. package/dist/code-paths-overlap.js +0 -248
  97. package/dist/code-paths-overlap.js.map +0 -1
  98. package/dist/color-support.d.ts +0 -21
  99. package/dist/color-support.d.ts.map +0 -1
  100. package/dist/color-support.js +0 -67
  101. package/dist/color-support.js.map +0 -1
  102. package/dist/commands-logger.d.ts +0 -71
  103. package/dist/commands-logger.d.ts.map +0 -1
  104. package/dist/commands-logger.js +0 -256
  105. package/dist/commands-logger.js.map +0 -1
  106. package/dist/commit-message-utils.d.ts +0 -26
  107. package/dist/commit-message-utils.d.ts.map +0 -1
  108. package/dist/commit-message-utils.js +0 -44
  109. package/dist/commit-message-utils.js.map +0 -1
  110. package/dist/compliance-parser.d.ts +0 -125
  111. package/dist/compliance-parser.d.ts.map +0 -1
  112. package/dist/compliance-parser.js +0 -457
  113. package/dist/compliance-parser.js.map +0 -1
  114. package/dist/constants/backlog-patterns.d.ts +0 -21
  115. package/dist/constants/backlog-patterns.d.ts.map +0 -1
  116. package/dist/constants/backlog-patterns.js +0 -26
  117. package/dist/constants/backlog-patterns.js.map +0 -1
  118. package/dist/constants/dora-constants.d.ts +0 -50
  119. package/dist/constants/dora-constants.d.ts.map +0 -1
  120. package/dist/constants/dora-constants.js +0 -56
  121. package/dist/constants/dora-constants.js.map +0 -1
  122. package/dist/constants/gate-constants.d.ts +0 -16
  123. package/dist/constants/gate-constants.d.ts.map +0 -1
  124. package/dist/constants/gate-constants.js +0 -18
  125. package/dist/constants/gate-constants.js.map +0 -1
  126. package/dist/constants/linter-constants.d.ts +0 -17
  127. package/dist/constants/linter-constants.d.ts.map +0 -1
  128. package/dist/constants/linter-constants.js +0 -19
  129. package/dist/constants/linter-constants.js.map +0 -1
  130. package/dist/constants/tokenizer-constants.d.ts +0 -16
  131. package/dist/constants/tokenizer-constants.d.ts.map +0 -1
  132. package/dist/constants/tokenizer-constants.js +0 -18
  133. package/dist/constants/tokenizer-constants.js.map +0 -1
  134. package/dist/context/context-computer.d.ts +0 -36
  135. package/dist/context/context-computer.d.ts.map +0 -1
  136. package/dist/context/context-computer.js +0 -128
  137. package/dist/context/context-computer.js.map +0 -1
  138. package/dist/context/git-state-reader.d.ts +0 -37
  139. package/dist/context/git-state-reader.d.ts.map +0 -1
  140. package/dist/context/git-state-reader.js +0 -64
  141. package/dist/context/git-state-reader.js.map +0 -1
  142. package/dist/context/index.d.ts +0 -18
  143. package/dist/context/index.d.ts.map +0 -1
  144. package/dist/context/index.js +0 -20
  145. package/dist/context/index.js.map +0 -1
  146. package/dist/context/location-resolver.d.ts +0 -34
  147. package/dist/context/location-resolver.d.ts.map +0 -1
  148. package/dist/context/location-resolver.js +0 -179
  149. package/dist/context/location-resolver.js.map +0 -1
  150. package/dist/context/wu-state-reader.d.ts +0 -30
  151. package/dist/context/wu-state-reader.d.ts.map +0 -1
  152. package/dist/context/wu-state-reader.js +0 -126
  153. package/dist/context/wu-state-reader.js.map +0 -1
  154. package/dist/context-di.d.ts +0 -185
  155. package/dist/context-di.d.ts.map +0 -1
  156. package/dist/context-di.js +0 -165
  157. package/dist/context-di.js.map +0 -1
  158. package/dist/context-validation-integration.d.ts +0 -69
  159. package/dist/context-validation-integration.d.ts.map +0 -1
  160. package/dist/context-validation-integration.js +0 -161
  161. package/dist/context-validation-integration.js.map +0 -1
  162. package/dist/core/scope-checker.d.ts +0 -80
  163. package/dist/core/scope-checker.d.ts.map +0 -1
  164. package/dist/core/scope-checker.js +0 -166
  165. package/dist/core/scope-checker.js.map +0 -1
  166. package/dist/core/tool-runner.d.ts +0 -136
  167. package/dist/core/tool-runner.d.ts.map +0 -1
  168. package/dist/core/tool-runner.js +0 -396
  169. package/dist/core/tool-runner.js.map +0 -1
  170. package/dist/core/tool.constants.d.ts +0 -106
  171. package/dist/core/tool.constants.d.ts.map +0 -1
  172. package/dist/core/tool.constants.js +0 -104
  173. package/dist/core/tool.constants.js.map +0 -1
  174. package/dist/core/tool.schemas.d.ts +0 -227
  175. package/dist/core/tool.schemas.d.ts.map +0 -1
  176. package/dist/core/tool.schemas.js +0 -229
  177. package/dist/core/tool.schemas.js.map +0 -1
  178. package/dist/core/worktree-guard.d.ts +0 -115
  179. package/dist/core/worktree-guard.d.ts.map +0 -1
  180. package/dist/core/worktree-guard.js +0 -245
  181. package/dist/core/worktree-guard.js.map +0 -1
  182. package/dist/coverage-gate.d.ts +0 -126
  183. package/dist/coverage-gate.d.ts.map +0 -1
  184. package/dist/coverage-gate.js +0 -209
  185. package/dist/coverage-gate.js.map +0 -1
  186. package/dist/cycle-detector.d.ts +0 -52
  187. package/dist/cycle-detector.d.ts.map +0 -1
  188. package/dist/cycle-detector.js +0 -84
  189. package/dist/cycle-detector.js.map +0 -1
  190. package/dist/date-utils.d.ts +0 -66
  191. package/dist/date-utils.d.ts.map +0 -1
  192. package/dist/date-utils.js +0 -143
  193. package/dist/date-utils.js.map +0 -1
  194. package/dist/delegation-escalation.d.ts +0 -71
  195. package/dist/delegation-escalation.d.ts.map +0 -1
  196. package/dist/delegation-escalation.js +0 -264
  197. package/dist/delegation-escalation.js.map +0 -1
  198. package/dist/delegation-monitor.d.ts +0 -262
  199. package/dist/delegation-monitor.d.ts.map +0 -1
  200. package/dist/delegation-monitor.js +0 -678
  201. package/dist/delegation-monitor.js.map +0 -1
  202. package/dist/delegation-recovery.d.ts +0 -62
  203. package/dist/delegation-recovery.d.ts.map +0 -1
  204. package/dist/delegation-recovery.js +0 -304
  205. package/dist/delegation-recovery.js.map +0 -1
  206. package/dist/delegation-registry-schema.d.ts +0 -75
  207. package/dist/delegation-registry-schema.d.ts.map +0 -1
  208. package/dist/delegation-registry-schema.js +0 -93
  209. package/dist/delegation-registry-schema.js.map +0 -1
  210. package/dist/delegation-registry-store.d.ts +0 -145
  211. package/dist/delegation-registry-store.d.ts.map +0 -1
  212. package/dist/delegation-registry-store.js +0 -308
  213. package/dist/delegation-registry-store.js.map +0 -1
  214. package/dist/delegation-tree.d.ts +0 -52
  215. package/dist/delegation-tree.d.ts.map +0 -1
  216. package/dist/delegation-tree.js +0 -205
  217. package/dist/delegation-tree.js.map +0 -1
  218. package/dist/dependency-graph.d.ts +0 -169
  219. package/dist/dependency-graph.d.ts.map +0 -1
  220. package/dist/dependency-graph.js +0 -612
  221. package/dist/dependency-graph.js.map +0 -1
  222. package/dist/dependency-guard.d.ts +0 -41
  223. package/dist/dependency-guard.d.ts.map +0 -1
  224. package/dist/dependency-guard.js +0 -145
  225. package/dist/dependency-guard.js.map +0 -1
  226. package/dist/dependency-validator.d.ts +0 -89
  227. package/dist/dependency-validator.d.ts.map +0 -1
  228. package/dist/dependency-validator.js +0 -155
  229. package/dist/dependency-validator.js.map +0 -1
  230. package/dist/docs-path-validator.d.ts +0 -16
  231. package/dist/docs-path-validator.d.ts.map +0 -1
  232. package/dist/docs-path-validator.js +0 -98
  233. package/dist/docs-path-validator.js.map +0 -1
  234. package/dist/domain/context.schemas.d.ts +0 -170
  235. package/dist/domain/context.schemas.d.ts.map +0 -1
  236. package/dist/domain/context.schemas.js +0 -151
  237. package/dist/domain/context.schemas.js.map +0 -1
  238. package/dist/domain/index.d.ts +0 -15
  239. package/dist/domain/index.d.ts.map +0 -1
  240. package/dist/domain/index.js +0 -23
  241. package/dist/domain/index.js.map +0 -1
  242. package/dist/domain/orchestration.constants.d.ts +0 -111
  243. package/dist/domain/orchestration.constants.d.ts.map +0 -1
  244. package/dist/domain/orchestration.constants.js +0 -130
  245. package/dist/domain/orchestration.constants.js.map +0 -1
  246. package/dist/domain/orchestration.schemas.d.ts +0 -307
  247. package/dist/domain/orchestration.schemas.d.ts.map +0 -1
  248. package/dist/domain/orchestration.schemas.js +0 -214
  249. package/dist/domain/orchestration.schemas.js.map +0 -1
  250. package/dist/domain/orchestration.types.d.ts +0 -134
  251. package/dist/domain/orchestration.types.d.ts.map +0 -1
  252. package/dist/domain/orchestration.types.js +0 -5
  253. package/dist/domain/orchestration.types.js.map +0 -1
  254. package/dist/domain/recovery.schemas.d.ts +0 -164
  255. package/dist/domain/recovery.schemas.d.ts.map +0 -1
  256. package/dist/domain/recovery.schemas.js +0 -134
  257. package/dist/domain/recovery.schemas.js.map +0 -1
  258. package/dist/domain/validation.schemas.d.ts +0 -147
  259. package/dist/domain/validation.schemas.d.ts.map +0 -1
  260. package/dist/domain/validation.schemas.js +0 -117
  261. package/dist/domain/validation.schemas.js.map +0 -1
  262. package/dist/error-handler.d.ts +0 -144
  263. package/dist/error-handler.d.ts.map +0 -1
  264. package/dist/error-handler.js +0 -214
  265. package/dist/error-handler.js.map +0 -1
  266. package/dist/file-classifiers.d.ts +0 -63
  267. package/dist/file-classifiers.d.ts.map +0 -1
  268. package/dist/file-classifiers.js +0 -111
  269. package/dist/file-classifiers.js.map +0 -1
  270. package/dist/force-bypass-audit.d.ts +0 -47
  271. package/dist/force-bypass-audit.d.ts.map +0 -1
  272. package/dist/force-bypass-audit.js +0 -146
  273. package/dist/force-bypass-audit.js.map +0 -1
  274. package/dist/gates-agent-mode.d.ts +0 -107
  275. package/dist/gates-agent-mode.d.ts.map +0 -1
  276. package/dist/gates-agent-mode.js +0 -138
  277. package/dist/gates-agent-mode.js.map +0 -1
  278. package/dist/gates-config.d.ts +0 -268
  279. package/dist/gates-config.d.ts.map +0 -1
  280. package/dist/gates-config.js +0 -644
  281. package/dist/gates-config.js.map +0 -1
  282. package/dist/generate-traceability.d.ts +0 -106
  283. package/dist/generate-traceability.d.ts.map +0 -1
  284. package/dist/generate-traceability.js +0 -387
  285. package/dist/generate-traceability.js.map +0 -1
  286. package/dist/git-adapter.d.ts +0 -406
  287. package/dist/git-adapter.d.ts.map +0 -1
  288. package/dist/git-adapter.js +0 -686
  289. package/dist/git-adapter.js.map +0 -1
  290. package/dist/git-context-extractor.d.ts +0 -102
  291. package/dist/git-context-extractor.d.ts.map +0 -1
  292. package/dist/git-context-extractor.js +0 -571
  293. package/dist/git-context-extractor.js.map +0 -1
  294. package/dist/git-staged-validator.d.ts +0 -33
  295. package/dist/git-staged-validator.d.ts.map +0 -1
  296. package/dist/git-staged-validator.js +0 -52
  297. package/dist/git-staged-validator.js.map +0 -1
  298. package/dist/hardcoded-strings.d.ts +0 -67
  299. package/dist/hardcoded-strings.d.ts.map +0 -1
  300. package/dist/hardcoded-strings.js +0 -276
  301. package/dist/hardcoded-strings.js.map +0 -1
  302. package/dist/incremental-lint.d.ts +0 -71
  303. package/dist/incremental-lint.d.ts.map +0 -1
  304. package/dist/incremental-lint.js +0 -132
  305. package/dist/incremental-lint.js.map +0 -1
  306. package/dist/incremental-test.d.ts +0 -33
  307. package/dist/incremental-test.d.ts.map +0 -1
  308. package/dist/incremental-test.js +0 -64
  309. package/dist/incremental-test.js.map +0 -1
  310. package/dist/index.d.ts +0 -104
  311. package/dist/index.d.ts.map +0 -1
  312. package/dist/index.js.map +0 -1
  313. package/dist/invariants/check-automated-tests.d.ts +0 -42
  314. package/dist/invariants/check-automated-tests.d.ts.map +0 -1
  315. package/dist/invariants/check-automated-tests.js +0 -171
  316. package/dist/invariants/check-automated-tests.js.map +0 -1
  317. package/dist/invariants-runner.d.ts +0 -108
  318. package/dist/invariants-runner.d.ts.map +0 -1
  319. package/dist/invariants-runner.js +0 -547
  320. package/dist/invariants-runner.js.map +0 -1
  321. package/dist/lane-checker.d.ts +0 -132
  322. package/dist/lane-checker.d.ts.map +0 -1
  323. package/dist/lane-checker.js +0 -743
  324. package/dist/lane-checker.js.map +0 -1
  325. package/dist/lane-inference.d.ts +0 -29
  326. package/dist/lane-inference.d.ts.map +0 -1
  327. package/dist/lane-inference.js +0 -210
  328. package/dist/lane-inference.js.map +0 -1
  329. package/dist/lane-lock.d.ts +0 -220
  330. package/dist/lane-lock.d.ts.map +0 -1
  331. package/dist/lane-lock.js +0 -499
  332. package/dist/lane-lock.js.map +0 -1
  333. package/dist/lane-suggest-prompt.d.ts +0 -97
  334. package/dist/lane-suggest-prompt.d.ts.map +0 -1
  335. package/dist/lane-suggest-prompt.js +0 -362
  336. package/dist/lane-suggest-prompt.js.map +0 -1
  337. package/dist/lane-validator.d.ts +0 -49
  338. package/dist/lane-validator.d.ts.map +0 -1
  339. package/dist/lane-validator.js +0 -117
  340. package/dist/lane-validator.js.map +0 -1
  341. package/dist/logs-lib.d.ts +0 -89
  342. package/dist/logs-lib.d.ts.map +0 -1
  343. package/dist/logs-lib.js +0 -214
  344. package/dist/logs-lib.js.map +0 -1
  345. package/dist/lumenflow-config-schema.d.ts +0 -1428
  346. package/dist/lumenflow-config-schema.d.ts.map +0 -1
  347. package/dist/lumenflow-config-schema.js +0 -1255
  348. package/dist/lumenflow-config-schema.js.map +0 -1
  349. package/dist/lumenflow-config.d.ts +0 -94
  350. package/dist/lumenflow-config.d.ts.map +0 -1
  351. package/dist/lumenflow-config.js +0 -253
  352. package/dist/lumenflow-config.js.map +0 -1
  353. package/dist/lumenflow-home.d.ts +0 -118
  354. package/dist/lumenflow-home.d.ts.map +0 -1
  355. package/dist/lumenflow-home.js +0 -214
  356. package/dist/lumenflow-home.js.map +0 -1
  357. package/dist/manual-test-validator.d.ts +0 -84
  358. package/dist/manual-test-validator.d.ts.map +0 -1
  359. package/dist/manual-test-validator.js +0 -206
  360. package/dist/manual-test-validator.js.map +0 -1
  361. package/dist/merge-lock.d.ts +0 -107
  362. package/dist/merge-lock.d.ts.map +0 -1
  363. package/dist/merge-lock.js +0 -263
  364. package/dist/merge-lock.js.map +0 -1
  365. package/dist/micro-worktree-shared.d.ts +0 -128
  366. package/dist/micro-worktree-shared.d.ts.map +0 -1
  367. package/dist/micro-worktree-shared.js +0 -352
  368. package/dist/micro-worktree-shared.js.map +0 -1
  369. package/dist/micro-worktree.d.ts +0 -165
  370. package/dist/micro-worktree.d.ts.map +0 -1
  371. package/dist/micro-worktree.js +0 -463
  372. package/dist/micro-worktree.js.map +0 -1
  373. package/dist/migration-deployer.d.ts +0 -70
  374. package/dist/migration-deployer.d.ts.map +0 -1
  375. package/dist/migration-deployer.js +0 -152
  376. package/dist/migration-deployer.js.map +0 -1
  377. package/dist/normalize-config-keys.d.ts +0 -10
  378. package/dist/normalize-config-keys.d.ts.map +0 -1
  379. package/dist/normalize-config-keys.js +0 -70
  380. package/dist/normalize-config-keys.js.map +0 -1
  381. package/dist/orchestration-advisory-loader.d.ts +0 -19
  382. package/dist/orchestration-advisory-loader.d.ts.map +0 -1
  383. package/dist/orchestration-advisory-loader.js +0 -94
  384. package/dist/orchestration-advisory-loader.js.map +0 -1
  385. package/dist/orchestration-advisory.d.ts +0 -49
  386. package/dist/orchestration-advisory.d.ts.map +0 -1
  387. package/dist/orchestration-advisory.js +0 -97
  388. package/dist/orchestration-advisory.js.map +0 -1
  389. package/dist/orchestration-di.d.ts +0 -36
  390. package/dist/orchestration-di.d.ts.map +0 -1
  391. package/dist/orchestration-di.js +0 -60
  392. package/dist/orchestration-di.js.map +0 -1
  393. package/dist/orchestration-rules.d.ts +0 -60
  394. package/dist/orchestration-rules.d.ts.map +0 -1
  395. package/dist/orchestration-rules.js +0 -212
  396. package/dist/orchestration-rules.js.map +0 -1
  397. package/dist/orphan-detector.d.ts +0 -148
  398. package/dist/orphan-detector.d.ts.map +0 -1
  399. package/dist/orphan-detector.js +0 -253
  400. package/dist/orphan-detector.js.map +0 -1
  401. package/dist/pack-authoring-template-engine.d.ts +0 -54
  402. package/dist/pack-authoring-template-engine.d.ts.map +0 -1
  403. package/dist/pack-authoring-template-engine.js +0 -510
  404. package/dist/pack-authoring-template-engine.js.map +0 -1
  405. package/dist/path-classifiers.d.ts +0 -58
  406. package/dist/path-classifiers.d.ts.map +0 -1
  407. package/dist/path-classifiers.js +0 -96
  408. package/dist/path-classifiers.js.map +0 -1
  409. package/dist/patrol-loop.d.ts +0 -171
  410. package/dist/patrol-loop.d.ts.map +0 -1
  411. package/dist/patrol-loop.js +0 -197
  412. package/dist/patrol-loop.js.map +0 -1
  413. package/dist/piped-command-detector.d.ts +0 -25
  414. package/dist/piped-command-detector.d.ts.map +0 -1
  415. package/dist/piped-command-detector.js +0 -67
  416. package/dist/piped-command-detector.js.map +0 -1
  417. package/dist/ports/context.ports.d.ts +0 -136
  418. package/dist/ports/context.ports.d.ts.map +0 -1
  419. package/dist/ports/context.ports.js +0 -4
  420. package/dist/ports/context.ports.js.map +0 -1
  421. package/dist/ports/core-tools.ports.d.ts +0 -282
  422. package/dist/ports/core-tools.ports.d.ts.map +0 -1
  423. package/dist/ports/core-tools.ports.js +0 -4
  424. package/dist/ports/core-tools.ports.js.map +0 -1
  425. package/dist/ports/dashboard-renderer.port.d.ts +0 -113
  426. package/dist/ports/dashboard-renderer.port.d.ts.map +0 -1
  427. package/dist/ports/dashboard-renderer.port.js +0 -4
  428. package/dist/ports/dashboard-renderer.port.js.map +0 -1
  429. package/dist/ports/git-validator.ports.d.ts +0 -114
  430. package/dist/ports/git-validator.ports.d.ts.map +0 -1
  431. package/dist/ports/git-validator.ports.js +0 -4
  432. package/dist/ports/git-validator.ports.js.map +0 -1
  433. package/dist/ports/index.d.ts +0 -21
  434. package/dist/ports/index.d.ts.map +0 -1
  435. package/dist/ports/index.js +0 -23
  436. package/dist/ports/index.js.map +0 -1
  437. package/dist/ports/metrics-collector.port.d.ts +0 -133
  438. package/dist/ports/metrics-collector.port.d.ts.map +0 -1
  439. package/dist/ports/metrics-collector.port.js +0 -4
  440. package/dist/ports/metrics-collector.port.js.map +0 -1
  441. package/dist/ports/recovery.ports.d.ts +0 -59
  442. package/dist/ports/recovery.ports.d.ts.map +0 -1
  443. package/dist/ports/recovery.ports.js +0 -4
  444. package/dist/ports/recovery.ports.js.map +0 -1
  445. package/dist/ports/validation.ports.d.ts +0 -75
  446. package/dist/ports/validation.ports.d.ts.map +0 -1
  447. package/dist/ports/validation.ports.js +0 -4
  448. package/dist/ports/validation.ports.js.map +0 -1
  449. package/dist/ports/wu-helpers.ports.d.ts +0 -227
  450. package/dist/ports/wu-helpers.ports.d.ts.map +0 -1
  451. package/dist/ports/wu-helpers.ports.js +0 -4
  452. package/dist/ports/wu-helpers.ports.js.map +0 -1
  453. package/dist/process-detector.d.ts +0 -69
  454. package/dist/process-detector.d.ts.map +0 -1
  455. package/dist/process-detector.js +0 -175
  456. package/dist/process-detector.js.map +0 -1
  457. package/dist/prompt-linter.d.ts +0 -66
  458. package/dist/prompt-linter.d.ts.map +0 -1
  459. package/dist/prompt-linter.js +0 -323
  460. package/dist/prompt-linter.js.map +0 -1
  461. package/dist/prompt-monitor.d.ts +0 -6
  462. package/dist/prompt-monitor.d.ts.map +0 -1
  463. package/dist/prompt-monitor.js +0 -218
  464. package/dist/prompt-monitor.js.map +0 -1
  465. package/dist/rebase-artifact-cleanup.d.ts +0 -156
  466. package/dist/rebase-artifact-cleanup.d.ts.map +0 -1
  467. package/dist/rebase-artifact-cleanup.js +0 -475
  468. package/dist/rebase-artifact-cleanup.js.map +0 -1
  469. package/dist/recovery/index.d.ts +0 -12
  470. package/dist/recovery/index.d.ts.map +0 -1
  471. package/dist/recovery/index.js +0 -14
  472. package/dist/recovery/index.js.map +0 -1
  473. package/dist/recovery/recovery-analyzer.d.ts +0 -49
  474. package/dist/recovery/recovery-analyzer.d.ts.map +0 -1
  475. package/dist/recovery/recovery-analyzer.js +0 -149
  476. package/dist/recovery/recovery-analyzer.js.map +0 -1
  477. package/dist/resolve-policy.d.ts +0 -257
  478. package/dist/resolve-policy.d.ts.map +0 -1
  479. package/dist/resolve-policy.js +0 -269
  480. package/dist/resolve-policy.js.map +0 -1
  481. package/dist/retry-strategy.d.ts +0 -191
  482. package/dist/retry-strategy.d.ts.map +0 -1
  483. package/dist/retry-strategy.js +0 -286
  484. package/dist/retry-strategy.js.map +0 -1
  485. package/dist/risk-detector.d.ts +0 -109
  486. package/dist/risk-detector.d.ts.map +0 -1
  487. package/dist/risk-detector.js +0 -253
  488. package/dist/risk-detector.js.map +0 -1
  489. package/dist/rollback-utils.d.ts +0 -129
  490. package/dist/rollback-utils.d.ts.map +0 -1
  491. package/dist/rollback-utils.js +0 -217
  492. package/dist/rollback-utils.js.map +0 -1
  493. package/dist/sandbox-allowlist.d.ts +0 -16
  494. package/dist/sandbox-allowlist.d.ts.map +0 -1
  495. package/dist/sandbox-allowlist.js +0 -77
  496. package/dist/sandbox-allowlist.js.map +0 -1
  497. package/dist/sandbox-backend-linux.d.ts +0 -6
  498. package/dist/sandbox-backend-linux.d.ts.map +0 -1
  499. package/dist/sandbox-backend-linux.js +0 -67
  500. package/dist/sandbox-backend-linux.js.map +0 -1
  501. package/dist/sandbox-backend-macos.d.ts +0 -6
  502. package/dist/sandbox-backend-macos.d.ts.map +0 -1
  503. package/dist/sandbox-backend-macos.js +0 -66
  504. package/dist/sandbox-backend-macos.js.map +0 -1
  505. package/dist/sandbox-backend-windows.d.ts +0 -6
  506. package/dist/sandbox-backend-windows.d.ts.map +0 -1
  507. package/dist/sandbox-backend-windows.js +0 -30
  508. package/dist/sandbox-backend-windows.js.map +0 -1
  509. package/dist/sandbox-profile.d.ts +0 -53
  510. package/dist/sandbox-profile.d.ts.map +0 -1
  511. package/dist/sandbox-profile.js +0 -64
  512. package/dist/sandbox-profile.js.map +0 -1
  513. package/dist/schemas/arg-validators.d.ts +0 -58
  514. package/dist/schemas/arg-validators.d.ts.map +0 -1
  515. package/dist/schemas/arg-validators.js +0 -193
  516. package/dist/schemas/arg-validators.js.map +0 -1
  517. package/dist/schemas/command-schemas.d.ts +0 -171
  518. package/dist/schemas/command-schemas.d.ts.map +0 -1
  519. package/dist/schemas/command-schemas.js +0 -145
  520. package/dist/schemas/command-schemas.js.map +0 -1
  521. package/dist/schemas/flow-arg-validators.d.ts +0 -32
  522. package/dist/schemas/flow-arg-validators.d.ts.map +0 -1
  523. package/dist/schemas/flow-arg-validators.js +0 -57
  524. package/dist/schemas/flow-arg-validators.js.map +0 -1
  525. package/dist/schemas/flow-schemas.d.ts +0 -152
  526. package/dist/schemas/flow-schemas.d.ts.map +0 -1
  527. package/dist/schemas/flow-schemas.js +0 -105
  528. package/dist/schemas/flow-schemas.js.map +0 -1
  529. package/dist/schemas/index.d.ts +0 -33
  530. package/dist/schemas/index.d.ts.map +0 -1
  531. package/dist/schemas/index.js +0 -96
  532. package/dist/schemas/index.js.map +0 -1
  533. package/dist/schemas/initiative-arg-validators.d.ts +0 -64
  534. package/dist/schemas/initiative-arg-validators.d.ts.map +0 -1
  535. package/dist/schemas/initiative-arg-validators.js +0 -65
  536. package/dist/schemas/initiative-arg-validators.js.map +0 -1
  537. package/dist/schemas/initiative-schemas.d.ts +0 -256
  538. package/dist/schemas/initiative-schemas.d.ts.map +0 -1
  539. package/dist/schemas/initiative-schemas.js +0 -186
  540. package/dist/schemas/initiative-schemas.js.map +0 -1
  541. package/dist/schemas/memory-arg-validators.d.ts +0 -91
  542. package/dist/schemas/memory-arg-validators.d.ts.map +0 -1
  543. package/dist/schemas/memory-arg-validators.js +0 -75
  544. package/dist/schemas/memory-arg-validators.js.map +0 -1
  545. package/dist/schemas/memory-schemas.d.ts +0 -287
  546. package/dist/schemas/memory-schemas.d.ts.map +0 -1
  547. package/dist/schemas/memory-schemas.js +0 -242
  548. package/dist/schemas/memory-schemas.js.map +0 -1
  549. package/dist/schemas/schema-utils.d.ts +0 -87
  550. package/dist/schemas/schema-utils.d.ts.map +0 -1
  551. package/dist/schemas/schema-utils.js +0 -320
  552. package/dist/schemas/schema-utils.js.map +0 -1
  553. package/dist/schemas/setup-arg-validators.d.ts +0 -91
  554. package/dist/schemas/setup-arg-validators.d.ts.map +0 -1
  555. package/dist/schemas/setup-arg-validators.js +0 -98
  556. package/dist/schemas/setup-arg-validators.js.map +0 -1
  557. package/dist/schemas/setup-schemas.d.ts +0 -335
  558. package/dist/schemas/setup-schemas.d.ts.map +0 -1
  559. package/dist/schemas/setup-schemas.js +0 -260
  560. package/dist/schemas/setup-schemas.js.map +0 -1
  561. package/dist/schemas/validation-arg-validators.d.ts +0 -18
  562. package/dist/schemas/validation-arg-validators.d.ts.map +0 -1
  563. package/dist/schemas/validation-arg-validators.js +0 -59
  564. package/dist/schemas/validation-arg-validators.js.map +0 -1
  565. package/dist/schemas/validation-schemas.d.ts +0 -80
  566. package/dist/schemas/validation-schemas.d.ts.map +0 -1
  567. package/dist/schemas/validation-schemas.js +0 -88
  568. package/dist/schemas/validation-schemas.js.map +0 -1
  569. package/dist/schemas/wu-lifecycle-arg-validators.d.ts +0 -118
  570. package/dist/schemas/wu-lifecycle-arg-validators.d.ts.map +0 -1
  571. package/dist/schemas/wu-lifecycle-arg-validators.js +0 -82
  572. package/dist/schemas/wu-lifecycle-arg-validators.js.map +0 -1
  573. package/dist/schemas/wu-lifecycle-schemas.d.ts +0 -362
  574. package/dist/schemas/wu-lifecycle-schemas.d.ts.map +0 -1
  575. package/dist/schemas/wu-lifecycle-schemas.js +0 -284
  576. package/dist/schemas/wu-lifecycle-schemas.js.map +0 -1
  577. package/dist/section-headings.d.ts +0 -35
  578. package/dist/section-headings.d.ts.map +0 -1
  579. package/dist/section-headings.js +0 -54
  580. package/dist/section-headings.js.map +0 -1
  581. package/dist/spawn-escalation.d.ts +0 -91
  582. package/dist/spawn-escalation.d.ts.map +0 -1
  583. package/dist/spawn-escalation.js +0 -258
  584. package/dist/spawn-escalation.js.map +0 -1
  585. package/dist/spawn-monitor.d.ts +0 -230
  586. package/dist/spawn-monitor.d.ts.map +0 -1
  587. package/dist/spawn-monitor.js +0 -675
  588. package/dist/spawn-monitor.js.map +0 -1
  589. package/dist/spawn-prompt-schema.d.ts +0 -107
  590. package/dist/spawn-prompt-schema.d.ts.map +0 -1
  591. package/dist/spawn-prompt-schema.js +0 -163
  592. package/dist/spawn-prompt-schema.js.map +0 -1
  593. package/dist/spawn-recovery.d.ts +0 -83
  594. package/dist/spawn-recovery.d.ts.map +0 -1
  595. package/dist/spawn-recovery.js +0 -299
  596. package/dist/spawn-recovery.js.map +0 -1
  597. package/dist/spawn-registry-schema.d.ts +0 -122
  598. package/dist/spawn-registry-schema.d.ts.map +0 -1
  599. package/dist/spawn-registry-schema.js +0 -129
  600. package/dist/spawn-registry-schema.js.map +0 -1
  601. package/dist/spawn-registry-store.d.ts +0 -161
  602. package/dist/spawn-registry-store.d.ts.map +0 -1
  603. package/dist/spawn-registry-store.js +0 -301
  604. package/dist/spawn-registry-store.js.map +0 -1
  605. package/dist/spawn-strategy.d.ts +0 -60
  606. package/dist/spawn-strategy.d.ts.map +0 -1
  607. package/dist/spawn-strategy.js +0 -112
  608. package/dist/spawn-strategy.js.map +0 -1
  609. package/dist/spawn-tree.d.ts +0 -125
  610. package/dist/spawn-tree.d.ts.map +0 -1
  611. package/dist/spawn-tree.js +0 -286
  612. package/dist/spawn-tree.js.map +0 -1
  613. package/dist/stamp-status-validator.d.ts +0 -77
  614. package/dist/stamp-status-validator.d.ts.map +0 -1
  615. package/dist/stamp-status-validator.js +0 -138
  616. package/dist/stamp-status-validator.js.map +0 -1
  617. package/dist/stamp-tracking.d.ts +0 -12
  618. package/dist/stamp-tracking.d.ts.map +0 -1
  619. package/dist/stamp-tracking.js +0 -43
  620. package/dist/stamp-tracking.js.map +0 -1
  621. package/dist/stamp-utils.d.ts +0 -94
  622. package/dist/stamp-utils.d.ts.map +0 -1
  623. package/dist/stamp-utils.js +0 -245
  624. package/dist/stamp-utils.js.map +0 -1
  625. package/dist/state-cleanup-core.d.ts +0 -206
  626. package/dist/state-cleanup-core.d.ts.map +0 -1
  627. package/dist/state-cleanup-core.js +0 -225
  628. package/dist/state-cleanup-core.js.map +0 -1
  629. package/dist/state-doctor-core.d.ts +0 -177
  630. package/dist/state-doctor-core.d.ts.map +0 -1
  631. package/dist/state-doctor-core.js +0 -395
  632. package/dist/state-doctor-core.js.map +0 -1
  633. package/dist/state-machine.d.ts +0 -10
  634. package/dist/state-machine.d.ts.map +0 -1
  635. package/dist/state-machine.js +0 -89
  636. package/dist/state-machine.js.map +0 -1
  637. package/dist/stream-error-handler.d.ts +0 -68
  638. package/dist/stream-error-handler.d.ts.map +0 -1
  639. package/dist/stream-error-handler.js +0 -77
  640. package/dist/stream-error-handler.js.map +0 -1
  641. package/dist/system-map-validator.d.ts +0 -111
  642. package/dist/system-map-validator.d.ts.map +0 -1
  643. package/dist/system-map-validator.js +0 -383
  644. package/dist/system-map-validator.js.map +0 -1
  645. package/dist/telemetry.d.ts +0 -81
  646. package/dist/telemetry.d.ts.map +0 -1
  647. package/dist/telemetry.js +0 -219
  648. package/dist/telemetry.js.map +0 -1
  649. package/dist/template-loader.d.ts +0 -151
  650. package/dist/template-loader.d.ts.map +0 -1
  651. package/dist/template-loader.js +0 -400
  652. package/dist/template-loader.js.map +0 -1
  653. package/dist/test-baseline.d.ts +0 -177
  654. package/dist/test-baseline.d.ts.map +0 -1
  655. package/dist/test-baseline.js +0 -286
  656. package/dist/test-baseline.js.map +0 -1
  657. package/dist/token-counter.d.ts +0 -50
  658. package/dist/token-counter.d.ts.map +0 -1
  659. package/dist/token-counter.js +0 -144
  660. package/dist/token-counter.js.map +0 -1
  661. package/dist/usecases/analyze-recovery.usecase.d.ts +0 -43
  662. package/dist/usecases/analyze-recovery.usecase.d.ts.map +0 -1
  663. package/dist/usecases/analyze-recovery.usecase.js +0 -34
  664. package/dist/usecases/analyze-recovery.usecase.js.map +0 -1
  665. package/dist/usecases/compute-context.usecase.d.ts +0 -63
  666. package/dist/usecases/compute-context.usecase.d.ts.map +0 -1
  667. package/dist/usecases/compute-context.usecase.js +0 -91
  668. package/dist/usecases/compute-context.usecase.js.map +0 -1
  669. package/dist/usecases/get-dashboard-data.usecase.d.ts +0 -53
  670. package/dist/usecases/get-dashboard-data.usecase.d.ts.map +0 -1
  671. package/dist/usecases/get-dashboard-data.usecase.js +0 -54
  672. package/dist/usecases/get-dashboard-data.usecase.js.map +0 -1
  673. package/dist/usecases/get-suggestions.usecase.d.ts +0 -101
  674. package/dist/usecases/get-suggestions.usecase.d.ts.map +0 -1
  675. package/dist/usecases/get-suggestions.usecase.js +0 -148
  676. package/dist/usecases/get-suggestions.usecase.js.map +0 -1
  677. package/dist/usecases/index.d.ts +0 -15
  678. package/dist/usecases/index.d.ts.map +0 -1
  679. package/dist/usecases/index.js +0 -21
  680. package/dist/usecases/index.js.map +0 -1
  681. package/dist/usecases/validate-command.usecase.d.ts +0 -56
  682. package/dist/usecases/validate-command.usecase.d.ts.map +0 -1
  683. package/dist/usecases/validate-command.usecase.js +0 -143
  684. package/dist/usecases/validate-command.usecase.js.map +0 -1
  685. package/dist/user-normalizer.d.ts +0 -36
  686. package/dist/user-normalizer.d.ts.map +0 -1
  687. package/dist/user-normalizer.js +0 -149
  688. package/dist/user-normalizer.js.map +0 -1
  689. package/dist/validation/command-registry.d.ts +0 -26
  690. package/dist/validation/command-registry.d.ts.map +0 -1
  691. package/dist/validation/command-registry.js +0 -269
  692. package/dist/validation/command-registry.js.map +0 -1
  693. package/dist/validation/index.d.ts +0 -16
  694. package/dist/validation/index.d.ts.map +0 -1
  695. package/dist/validation/index.js +0 -18
  696. package/dist/validation/index.js.map +0 -1
  697. package/dist/validation/types.d.ts +0 -140
  698. package/dist/validation/types.d.ts.map +0 -1
  699. package/dist/validation/types.js +0 -4
  700. package/dist/validation/types.js.map +0 -1
  701. package/dist/validation/validate-command.d.ts +0 -16
  702. package/dist/validation/validate-command.d.ts.map +0 -1
  703. package/dist/validation/validate-command.js +0 -163
  704. package/dist/validation/validate-command.js.map +0 -1
  705. package/dist/validators/backlog-sync.d.ts +0 -11
  706. package/dist/validators/backlog-sync.d.ts.map +0 -1
  707. package/dist/validators/backlog-sync.js +0 -65
  708. package/dist/validators/backlog-sync.js.map +0 -1
  709. package/dist/validators/phi-constants.d.ts +0 -98
  710. package/dist/validators/phi-constants.d.ts.map +0 -1
  711. package/dist/validators/phi-constants.js +0 -153
  712. package/dist/validators/phi-constants.js.map +0 -1
  713. package/dist/validators/phi-scanner.d.ts +0 -59
  714. package/dist/validators/phi-scanner.d.ts.map +0 -1
  715. package/dist/validators/phi-scanner.js +0 -222
  716. package/dist/validators/phi-scanner.js.map +0 -1
  717. package/dist/validators/supabase-docs-linter.d.ts +0 -15
  718. package/dist/validators/supabase-docs-linter.d.ts.map +0 -1
  719. package/dist/validators/supabase-docs-linter.js +0 -45
  720. package/dist/validators/supabase-docs-linter.js.map +0 -1
  721. package/dist/validators/wu-tasks.d.ts +0 -21
  722. package/dist/validators/wu-tasks.d.ts.map +0 -1
  723. package/dist/validators/wu-tasks.js +0 -93
  724. package/dist/validators/wu-tasks.js.map +0 -1
  725. package/dist/work-classifier.d.ts +0 -95
  726. package/dist/work-classifier.d.ts.map +0 -1
  727. package/dist/work-classifier.js +0 -408
  728. package/dist/work-classifier.js.map +0 -1
  729. package/dist/worktree-ownership.d.ts +0 -51
  730. package/dist/worktree-ownership.d.ts.map +0 -1
  731. package/dist/worktree-ownership.js +0 -77
  732. package/dist/worktree-ownership.js.map +0 -1
  733. package/dist/worktree-scanner.d.ts +0 -118
  734. package/dist/worktree-scanner.d.ts.map +0 -1
  735. package/dist/worktree-scanner.js +0 -171
  736. package/dist/worktree-scanner.js.map +0 -1
  737. package/dist/worktree-symlink.d.ts +0 -86
  738. package/dist/worktree-symlink.d.ts.map +0 -1
  739. package/dist/worktree-symlink.js +0 -349
  740. package/dist/worktree-symlink.js.map +0 -1
  741. package/dist/wu-backlog-updater.d.ts +0 -10
  742. package/dist/wu-backlog-updater.d.ts.map +0 -1
  743. package/dist/wu-backlog-updater.js +0 -40
  744. package/dist/wu-backlog-updater.js.map +0 -1
  745. package/dist/wu-checkpoint.d.ts +0 -110
  746. package/dist/wu-checkpoint.d.ts.map +0 -1
  747. package/dist/wu-checkpoint.js +0 -236
  748. package/dist/wu-checkpoint.js.map +0 -1
  749. package/dist/wu-claim-helpers.d.ts +0 -21
  750. package/dist/wu-claim-helpers.d.ts.map +0 -1
  751. package/dist/wu-claim-helpers.js +0 -66
  752. package/dist/wu-claim-helpers.js.map +0 -1
  753. package/dist/wu-claim-resume.d.ts +0 -106
  754. package/dist/wu-claim-resume.d.ts.map +0 -1
  755. package/dist/wu-claim-resume.js +0 -279
  756. package/dist/wu-claim-resume.js.map +0 -1
  757. package/dist/wu-cli-constants.d.ts +0 -425
  758. package/dist/wu-cli-constants.d.ts.map +0 -1
  759. package/dist/wu-cli-constants.js +0 -430
  760. package/dist/wu-cli-constants.js.map +0 -1
  761. package/dist/wu-consistency-checker.d.ts +0 -189
  762. package/dist/wu-consistency-checker.d.ts.map +0 -1
  763. package/dist/wu-consistency-checker.js +0 -1026
  764. package/dist/wu-consistency-checker.js.map +0 -1
  765. package/dist/wu-constants.d.ts +0 -29
  766. package/dist/wu-constants.d.ts.map +0 -1
  767. package/dist/wu-constants.js +0 -37
  768. package/dist/wu-constants.js.map +0 -1
  769. package/dist/wu-context-constants.d.ts +0 -270
  770. package/dist/wu-context-constants.d.ts.map +0 -1
  771. package/dist/wu-context-constants.js +0 -267
  772. package/dist/wu-context-constants.js.map +0 -1
  773. package/dist/wu-create-defaults.d.ts +0 -11
  774. package/dist/wu-create-defaults.d.ts.map +0 -1
  775. package/dist/wu-create-defaults.js +0 -13
  776. package/dist/wu-create-defaults.js.map +0 -1
  777. package/dist/wu-create-validators.d.ts +0 -89
  778. package/dist/wu-create-validators.d.ts.map +0 -1
  779. package/dist/wu-create-validators.js +0 -215
  780. package/dist/wu-create-validators.js.map +0 -1
  781. package/dist/wu-domain-constants.d.ts +0 -295
  782. package/dist/wu-domain-constants.d.ts.map +0 -1
  783. package/dist/wu-domain-constants.js +0 -399
  784. package/dist/wu-domain-constants.js.map +0 -1
  785. package/dist/wu-done-branch-only.d.ts +0 -120
  786. package/dist/wu-done-branch-only.d.ts.map +0 -1
  787. package/dist/wu-done-branch-only.js +0 -412
  788. package/dist/wu-done-branch-only.js.map +0 -1
  789. package/dist/wu-done-branch-utils.d.ts +0 -8
  790. package/dist/wu-done-branch-utils.d.ts.map +0 -1
  791. package/dist/wu-done-branch-utils.js +0 -34
  792. package/dist/wu-done-branch-utils.js.map +0 -1
  793. package/dist/wu-done-cleanup.d.ts +0 -6
  794. package/dist/wu-done-cleanup.d.ts.map +0 -1
  795. package/dist/wu-done-cleanup.js +0 -161
  796. package/dist/wu-done-cleanup.js.map +0 -1
  797. package/dist/wu-done-concurrent-merge.d.ts +0 -103
  798. package/dist/wu-done-concurrent-merge.d.ts.map +0 -1
  799. package/dist/wu-done-concurrent-merge.js +0 -375
  800. package/dist/wu-done-concurrent-merge.js.map +0 -1
  801. package/dist/wu-done-docs-generate.d.ts +0 -72
  802. package/dist/wu-done-docs-generate.d.ts.map +0 -1
  803. package/dist/wu-done-docs-generate.js +0 -129
  804. package/dist/wu-done-docs-generate.js.map +0 -1
  805. package/dist/wu-done-docs-only.d.ts +0 -16
  806. package/dist/wu-done-docs-only.d.ts.map +0 -1
  807. package/dist/wu-done-docs-only.js +0 -68
  808. package/dist/wu-done-docs-only.js.map +0 -1
  809. package/dist/wu-done-errors.d.ts +0 -13
  810. package/dist/wu-done-errors.d.ts.map +0 -1
  811. package/dist/wu-done-errors.js +0 -27
  812. package/dist/wu-done-errors.js.map +0 -1
  813. package/dist/wu-done-initiative-sync.d.ts +0 -13
  814. package/dist/wu-done-initiative-sync.d.ts.map +0 -1
  815. package/dist/wu-done-initiative-sync.js +0 -235
  816. package/dist/wu-done-initiative-sync.js.map +0 -1
  817. package/dist/wu-done-inputs.d.ts +0 -10
  818. package/dist/wu-done-inputs.d.ts.map +0 -1
  819. package/dist/wu-done-inputs.js +0 -55
  820. package/dist/wu-done-inputs.js.map +0 -1
  821. package/dist/wu-done-machine.d.ts +0 -175
  822. package/dist/wu-done-machine.d.ts.map +0 -1
  823. package/dist/wu-done-machine.js +0 -227
  824. package/dist/wu-done-machine.js.map +0 -1
  825. package/dist/wu-done-merged-worktree.d.ts +0 -65
  826. package/dist/wu-done-merged-worktree.d.ts.map +0 -1
  827. package/dist/wu-done-merged-worktree.js +0 -197
  828. package/dist/wu-done-merged-worktree.js.map +0 -1
  829. package/dist/wu-done-messages.d.ts +0 -120
  830. package/dist/wu-done-messages.d.ts.map +0 -1
  831. package/dist/wu-done-messages.js +0 -191
  832. package/dist/wu-done-messages.js.map +0 -1
  833. package/dist/wu-done-metadata.d.ts +0 -123
  834. package/dist/wu-done-metadata.d.ts.map +0 -1
  835. package/dist/wu-done-metadata.js +0 -240
  836. package/dist/wu-done-metadata.js.map +0 -1
  837. package/dist/wu-done-paths.d.ts +0 -87
  838. package/dist/wu-done-paths.d.ts.map +0 -1
  839. package/dist/wu-done-paths.js +0 -263
  840. package/dist/wu-done-paths.js.map +0 -1
  841. package/dist/wu-done-pr.d.ts +0 -76
  842. package/dist/wu-done-pr.d.ts.map +0 -1
  843. package/dist/wu-done-pr.js +0 -189
  844. package/dist/wu-done-pr.js.map +0 -1
  845. package/dist/wu-done-preflight.d.ts +0 -65
  846. package/dist/wu-done-preflight.d.ts.map +0 -1
  847. package/dist/wu-done-preflight.js +0 -205
  848. package/dist/wu-done-preflight.js.map +0 -1
  849. package/dist/wu-done-retry-helpers.d.ts +0 -75
  850. package/dist/wu-done-retry-helpers.d.ts.map +0 -1
  851. package/dist/wu-done-retry-helpers.js +0 -175
  852. package/dist/wu-done-retry-helpers.js.map +0 -1
  853. package/dist/wu-done-ui.d.ts +0 -29
  854. package/dist/wu-done-ui.d.ts.map +0 -1
  855. package/dist/wu-done-ui.js +0 -74
  856. package/dist/wu-done-ui.js.map +0 -1
  857. package/dist/wu-done-validation.d.ts +0 -128
  858. package/dist/wu-done-validation.d.ts.map +0 -1
  859. package/dist/wu-done-validation.js +0 -530
  860. package/dist/wu-done-validation.js.map +0 -1
  861. package/dist/wu-done-validators.d.ts +0 -16
  862. package/dist/wu-done-validators.d.ts.map +0 -1
  863. package/dist/wu-done-validators.js +0 -16
  864. package/dist/wu-done-validators.js.map +0 -1
  865. package/dist/wu-done-worktree-services.d.ts +0 -174
  866. package/dist/wu-done-worktree-services.d.ts.map +0 -1
  867. package/dist/wu-done-worktree-services.js +0 -274
  868. package/dist/wu-done-worktree-services.js.map +0 -1
  869. package/dist/wu-done-worktree.d.ts +0 -229
  870. package/dist/wu-done-worktree.d.ts.map +0 -1
  871. package/dist/wu-done-worktree.js +0 -1290
  872. package/dist/wu-done-worktree.js.map +0 -1
  873. package/dist/wu-events-cleanup.d.ts +0 -131
  874. package/dist/wu-events-cleanup.d.ts.map +0 -1
  875. package/dist/wu-events-cleanup.js +0 -404
  876. package/dist/wu-events-cleanup.js.map +0 -1
  877. package/dist/wu-git-constants.d.ts +0 -176
  878. package/dist/wu-git-constants.d.ts.map +0 -1
  879. package/dist/wu-git-constants.js +0 -178
  880. package/dist/wu-git-constants.js.map +0 -1
  881. package/dist/wu-helpers.d.ts +0 -133
  882. package/dist/wu-helpers.d.ts.map +0 -1
  883. package/dist/wu-helpers.js +0 -268
  884. package/dist/wu-helpers.js.map +0 -1
  885. package/dist/wu-id-generator.d.ts +0 -51
  886. package/dist/wu-id-generator.d.ts.map +0 -1
  887. package/dist/wu-id-generator.js +0 -110
  888. package/dist/wu-id-generator.js.map +0 -1
  889. package/dist/wu-lint.d.ts +0 -191
  890. package/dist/wu-lint.d.ts.map +0 -1
  891. package/dist/wu-lint.js +0 -338
  892. package/dist/wu-lint.js.map +0 -1
  893. package/dist/wu-list.d.ts +0 -76
  894. package/dist/wu-list.d.ts.map +0 -1
  895. package/dist/wu-list.js +0 -181
  896. package/dist/wu-list.js.map +0 -1
  897. package/dist/wu-paths-constants.d.ts +0 -264
  898. package/dist/wu-paths-constants.d.ts.map +0 -1
  899. package/dist/wu-paths-constants.js +0 -272
  900. package/dist/wu-paths-constants.js.map +0 -1
  901. package/dist/wu-paths.d.ts +0 -211
  902. package/dist/wu-paths.d.ts.map +0 -1
  903. package/dist/wu-paths.js +0 -223
  904. package/dist/wu-paths.js.map +0 -1
  905. package/dist/wu-preflight-validators.d.ts +0 -64
  906. package/dist/wu-preflight-validators.d.ts.map +0 -1
  907. package/dist/wu-preflight-validators.js +0 -277
  908. package/dist/wu-preflight-validators.js.map +0 -1
  909. package/dist/wu-recovery.d.ts +0 -220
  910. package/dist/wu-recovery.d.ts.map +0 -1
  911. package/dist/wu-recovery.js +0 -470
  912. package/dist/wu-recovery.js.map +0 -1
  913. package/dist/wu-repair-core.d.ts +0 -150
  914. package/dist/wu-repair-core.d.ts.map +0 -1
  915. package/dist/wu-repair-core.js +0 -718
  916. package/dist/wu-repair-core.js.map +0 -1
  917. package/dist/wu-rules-core.d.ts +0 -95
  918. package/dist/wu-rules-core.d.ts.map +0 -1
  919. package/dist/wu-rules-core.js +0 -401
  920. package/dist/wu-rules-core.js.map +0 -1
  921. package/dist/wu-rules-engine.d.ts +0 -29
  922. package/dist/wu-rules-engine.d.ts.map +0 -1
  923. package/dist/wu-rules-engine.js +0 -61
  924. package/dist/wu-rules-engine.js.map +0 -1
  925. package/dist/wu-rules-resolvers.d.ts +0 -19
  926. package/dist/wu-rules-resolvers.d.ts.map +0 -1
  927. package/dist/wu-rules-resolvers.js +0 -210
  928. package/dist/wu-rules-resolvers.js.map +0 -1
  929. package/dist/wu-schema-normalization.d.ts +0 -18
  930. package/dist/wu-schema-normalization.d.ts.map +0 -1
  931. package/dist/wu-schema-normalization.js +0 -87
  932. package/dist/wu-schema-normalization.js.map +0 -1
  933. package/dist/wu-schema.d.ts +0 -772
  934. package/dist/wu-schema.d.ts.map +0 -1
  935. package/dist/wu-schema.js +0 -897
  936. package/dist/wu-schema.js.map +0 -1
  937. package/dist/wu-spawn-context.d.ts +0 -66
  938. package/dist/wu-spawn-context.d.ts.map +0 -1
  939. package/dist/wu-spawn-context.js +0 -185
  940. package/dist/wu-spawn-context.js.map +0 -1
  941. package/dist/wu-spawn-helpers.d.ts +0 -110
  942. package/dist/wu-spawn-helpers.d.ts.map +0 -1
  943. package/dist/wu-spawn-helpers.js +0 -276
  944. package/dist/wu-spawn-helpers.js.map +0 -1
  945. package/dist/wu-spawn-skills.d.ts +0 -39
  946. package/dist/wu-spawn-skills.d.ts.map +0 -1
  947. package/dist/wu-spawn-skills.js +0 -214
  948. package/dist/wu-spawn-skills.js.map +0 -1
  949. package/dist/wu-spawn.d.ts +0 -394
  950. package/dist/wu-spawn.d.ts.map +0 -1
  951. package/dist/wu-spawn.js +0 -1977
  952. package/dist/wu-spawn.js.map +0 -1
  953. package/dist/wu-state-schema.d.ts +0 -237
  954. package/dist/wu-state-schema.d.ts.map +0 -1
  955. package/dist/wu-state-schema.js +0 -172
  956. package/dist/wu-state-schema.js.map +0 -1
  957. package/dist/wu-state-store.d.ts +0 -275
  958. package/dist/wu-state-store.d.ts.map +0 -1
  959. package/dist/wu-state-store.js +0 -1057
  960. package/dist/wu-state-store.js.map +0 -1
  961. package/dist/wu-status-transition.d.ts +0 -58
  962. package/dist/wu-status-transition.d.ts.map +0 -1
  963. package/dist/wu-status-transition.js +0 -370
  964. package/dist/wu-status-transition.js.map +0 -1
  965. package/dist/wu-status-updater.d.ts +0 -18
  966. package/dist/wu-status-updater.d.ts.map +0 -1
  967. package/dist/wu-status-updater.js +0 -123
  968. package/dist/wu-status-updater.js.map +0 -1
  969. package/dist/wu-statuses.d.ts +0 -154
  970. package/dist/wu-statuses.d.ts.map +0 -1
  971. package/dist/wu-statuses.js +0 -176
  972. package/dist/wu-statuses.js.map +0 -1
  973. package/dist/wu-transaction-collectors.d.ts +0 -116
  974. package/dist/wu-transaction-collectors.d.ts.map +0 -1
  975. package/dist/wu-transaction-collectors.js +0 -273
  976. package/dist/wu-transaction-collectors.js.map +0 -1
  977. package/dist/wu-transaction.d.ts +0 -172
  978. package/dist/wu-transaction.d.ts.map +0 -1
  979. package/dist/wu-transaction.js +0 -288
  980. package/dist/wu-transaction.js.map +0 -1
  981. package/dist/wu-type-helpers.d.ts +0 -26
  982. package/dist/wu-type-helpers.d.ts.map +0 -1
  983. package/dist/wu-type-helpers.js +0 -45
  984. package/dist/wu-type-helpers.js.map +0 -1
  985. package/dist/wu-ui-constants.d.ts +0 -235
  986. package/dist/wu-ui-constants.d.ts.map +0 -1
  987. package/dist/wu-ui-constants.js +0 -237
  988. package/dist/wu-ui-constants.js.map +0 -1
  989. package/dist/wu-validation-constants.d.ts +0 -61
  990. package/dist/wu-validation-constants.d.ts.map +0 -1
  991. package/dist/wu-validation-constants.js +0 -69
  992. package/dist/wu-validation-constants.js.map +0 -1
  993. package/dist/wu-validation.d.ts +0 -121
  994. package/dist/wu-validation.d.ts.map +0 -1
  995. package/dist/wu-validation.js +0 -266
  996. package/dist/wu-validation.js.map +0 -1
  997. package/dist/wu-validator.d.ts +0 -128
  998. package/dist/wu-validator.d.ts.map +0 -1
  999. package/dist/wu-validator.js +0 -445
  1000. package/dist/wu-validator.js.map +0 -1
  1001. package/dist/wu-yaml-fixer.d.ts +0 -74
  1002. package/dist/wu-yaml-fixer.d.ts.map +0 -1
  1003. package/dist/wu-yaml-fixer.js +0 -273
  1004. package/dist/wu-yaml-fixer.js.map +0 -1
  1005. package/dist/wu-yaml.d.ts +0 -110
  1006. package/dist/wu-yaml.d.ts.map +0 -1
  1007. package/dist/wu-yaml.js +0 -300
  1008. package/dist/wu-yaml.js.map +0 -1
@@ -1,1057 +0,0 @@
1
- // Copyright (c) 2026 Hellmai Ltd
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- /**
4
- * WU State Store (WU-1570, WU-2240)
5
- *
6
- * Event-sourced state store for WU lifecycle following INIT-007 pattern.
7
- * Stores events in .lumenflow/state/wu-events.jsonl (append-only, git-friendly).
8
- *
9
- * Features:
10
- * - Event sourcing with replay for current state
11
- * - Atomic append operations (WU-2240: temp file + fsync + rename)
12
- * - O(1) queries by status and lane via in-memory indexes
13
- * - State machine validation for legal transitions
14
- * - File locking with stale detection (WU-2240)
15
- * - Corruption recovery via repairStateFile (WU-2240)
16
- *
17
- * @see {@link packages/@lumenflow/cli/src/__tests__/state-store-concurrent.test.ts} - Concurrent access tests
18
- * @see {@link packages/@lumenflow/cli/src/lib/wu-state-schema.ts} - Schema definitions
19
- */
20
- import fs from 'node:fs/promises';
21
- import { existsSync, readFileSync, writeFileSync, mkdirSync, copyFileSync, readdirSync, statSync, renameSync, unlinkSync, openSync, closeSync, fsyncSync, } from 'node:fs';
22
- import path from 'node:path';
23
- import os from 'node:os';
24
- import { parse as parseYaml } from 'yaml';
25
- import { validateWUEvent } from './wu-state-schema.js';
26
- import { LUMENFLOW_PATHS, PATTERNS, WU_STATUS } from './wu-constants.js';
27
- /**
28
- * Lock timeout in milliseconds (5 minutes)
29
- */
30
- const LOCK_TIMEOUT_MS = 5 * 60 * 1000;
31
- /**
32
- * Lock retry configuration
33
- */
34
- const LOCK_RETRY_DELAY_MS = 50;
35
- const LOCK_MAX_RETRIES = 100; // 5 seconds total
36
- /**
37
- * WU events file name constant
38
- */
39
- export const WU_EVENTS_FILE_NAME = 'wu-events.jsonl';
40
- /**
41
- * Delegation cutover constants (WU-1674)
42
- */
43
- const DELEGATION_CUTOVER = Object.freeze({
44
- MARKER_FILE: '.delegation-cutover-done',
45
- ARCHIVE_DIR: 'archive',
46
- ARCHIVE_PREFIX: 'delegation-cutover-',
47
- LEGACY_REGISTRY_FILE: 'spawn-registry.jsonl',
48
- DELEGATION_REGISTRY_FILE: 'delegation-registry.jsonl',
49
- LEGACY_EVENT_TYPE: 'spawn',
50
- RELATIONSHIP_EVENT_TYPE: 'delegation',
51
- DONE_STAMP_SUFFIX: '.done',
52
- WU_FILE_PREFIX: 'WU-',
53
- });
54
- const DELEGATION_CUTOVER_PATHS = Object.freeze({
55
- WU_DOCS_SEGMENTS: ['docs', '04-operations', 'tasks', 'wu'],
56
- STAMP_SEGMENTS: [LUMENFLOW_PATHS.BASE, 'stamps'],
57
- });
58
- const BOOTSTRAP_STATUSES = Object.freeze({
59
- READY: WU_STATUS.READY,
60
- BACKLOG: WU_STATUS.BACKLOG,
61
- TODO: WU_STATUS.TODO,
62
- BLOCKED: WU_STATUS.BLOCKED,
63
- DONE: WU_STATUS.DONE,
64
- COMPLETED: WU_STATUS.COMPLETED,
65
- });
66
- const BOOTSTRAP_REASON = Object.freeze({
67
- BLOCKED: 'Bootstrapped from WU YAML (original reason unknown)',
68
- });
69
- /**
70
- * Returns true when the state dir matches the canonical project location:
71
- * <repo>/.lumenflow/state
72
- */
73
- function isCanonicalStateDir(stateDir) {
74
- const stateLeaf = path.basename(LUMENFLOW_PATHS.STATE_DIR);
75
- return (path.basename(stateDir) === stateLeaf &&
76
- path.basename(path.dirname(stateDir)) === LUMENFLOW_PATHS.BASE);
77
- }
78
- function sanitizeTimestamp(timestamp) {
79
- return timestamp.replace(/[:.]/g, '-');
80
- }
81
- function toIsoTimestamp(raw, fallback) {
82
- const candidate = raw ?? fallback;
83
- if (!candidate) {
84
- return new Date().toISOString();
85
- }
86
- if (candidate.includes('T')) {
87
- const parsed = new Date(candidate);
88
- if (!Number.isNaN(parsed.getTime())) {
89
- return parsed.toISOString();
90
- }
91
- }
92
- const parsed = new Date(candidate);
93
- if (Number.isNaN(parsed.getTime())) {
94
- return new Date().toISOString();
95
- }
96
- return parsed.toISOString();
97
- }
98
- function readLegacyEventType(eventPath) {
99
- const eventTypes = new Set();
100
- if (!existsSync(eventPath)) {
101
- return eventTypes;
102
- }
103
- const lines = readFileSync(eventPath, 'utf-8').split('\n');
104
- for (const rawLine of lines) {
105
- const line = rawLine.trim();
106
- if (!line) {
107
- continue;
108
- }
109
- try {
110
- const parsed = JSON.parse(line);
111
- if (typeof parsed.type === 'string') {
112
- eventTypes.add(parsed.type);
113
- }
114
- }
115
- catch {
116
- // Corrupt legacy line: treat as legacy to force archival/rebootstrap.
117
- eventTypes.add(DELEGATION_CUTOVER.LEGACY_EVENT_TYPE);
118
- break;
119
- }
120
- }
121
- return eventTypes;
122
- }
123
- function isLegacyCutoverRequired(stateDir, eventsPath) {
124
- const legacyRegistryPath = path.join(stateDir, DELEGATION_CUTOVER.LEGACY_REGISTRY_FILE);
125
- if (existsSync(legacyRegistryPath)) {
126
- return true;
127
- }
128
- const eventTypes = readLegacyEventType(eventsPath);
129
- return eventTypes.has(DELEGATION_CUTOVER.LEGACY_EVENT_TYPE);
130
- }
131
- function resolveProjectRoot(stateDir) {
132
- let current = stateDir;
133
- for (let depth = 0; depth < 6; depth++) {
134
- const wuDir = path.join(current, ...DELEGATION_CUTOVER_PATHS.WU_DOCS_SEGMENTS);
135
- if (existsSync(wuDir)) {
136
- return current;
137
- }
138
- const parent = path.dirname(current);
139
- if (parent === current) {
140
- break;
141
- }
142
- current = parent;
143
- }
144
- if (isCanonicalStateDir(stateDir)) {
145
- return path.dirname(path.dirname(stateDir));
146
- }
147
- return path.dirname(stateDir);
148
- }
149
- function moveFileToArchive(sourcePath, archivePath) {
150
- if (!existsSync(sourcePath)) {
151
- return;
152
- }
153
- mkdirSync(path.dirname(archivePath), { recursive: true });
154
- try {
155
- renameSync(sourcePath, archivePath);
156
- }
157
- catch (error) {
158
- const nodeError = error;
159
- if (nodeError.code === 'EXDEV') {
160
- copyFileSync(sourcePath, archivePath);
161
- unlinkSync(sourcePath);
162
- return;
163
- }
164
- throw error;
165
- }
166
- }
167
- function loadWuBootstrapInfo(filePath) {
168
- try {
169
- const content = readFileSync(filePath, 'utf-8');
170
- const parsed = parseYaml(content);
171
- if (!parsed || typeof parsed !== 'object') {
172
- return null;
173
- }
174
- const id = typeof parsed.id === 'string' ? parsed.id : undefined;
175
- if (!id || !PATTERNS.WU_ID.test(id)) {
176
- return null;
177
- }
178
- return {
179
- id,
180
- status: typeof parsed.status === 'string' ? parsed.status : BOOTSTRAP_STATUSES.READY,
181
- lane: typeof parsed.lane === 'string' ? parsed.lane : 'Unknown',
182
- title: typeof parsed.title === 'string' ? parsed.title : 'Untitled',
183
- created: typeof parsed.created === 'string' ? parsed.created : undefined,
184
- claimed_at: typeof parsed.claimed_at === 'string' ? parsed.claimed_at : undefined,
185
- completed_at: typeof parsed.completed_at === 'string' ? parsed.completed_at : undefined,
186
- };
187
- }
188
- catch {
189
- return null;
190
- }
191
- }
192
- function readBootstrapWUs(projectRoot) {
193
- const wuDir = path.join(projectRoot, ...DELEGATION_CUTOVER_PATHS.WU_DOCS_SEGMENTS);
194
- if (!existsSync(wuDir)) {
195
- return [];
196
- }
197
- const results = [];
198
- const entries = readdirSync(wuDir, { withFileTypes: true });
199
- for (const entry of entries) {
200
- if (!entry.isFile()) {
201
- continue;
202
- }
203
- if (!entry.name.startsWith(DELEGATION_CUTOVER.WU_FILE_PREFIX)) {
204
- continue;
205
- }
206
- if (!entry.name.endsWith('.yaml')) {
207
- continue;
208
- }
209
- const info = loadWuBootstrapInfo(path.join(wuDir, entry.name));
210
- if (info) {
211
- results.push(info);
212
- }
213
- }
214
- return results;
215
- }
216
- function readDoneStampTimes(projectRoot) {
217
- const stampDir = path.join(projectRoot, ...DELEGATION_CUTOVER_PATHS.STAMP_SEGMENTS);
218
- const doneStamps = new Map();
219
- if (!existsSync(stampDir)) {
220
- return doneStamps;
221
- }
222
- const entries = readdirSync(stampDir, { withFileTypes: true });
223
- for (const entry of entries) {
224
- if (!entry.isFile() || !entry.name.endsWith(DELEGATION_CUTOVER.DONE_STAMP_SUFFIX)) {
225
- continue;
226
- }
227
- const wuId = entry.name.slice(0, -DELEGATION_CUTOVER.DONE_STAMP_SUFFIX.length);
228
- if (!PATTERNS.WU_ID.test(wuId)) {
229
- continue;
230
- }
231
- try {
232
- const stampPath = path.join(stampDir, entry.name);
233
- doneStamps.set(wuId, statSync(stampPath).mtime.toISOString());
234
- }
235
- catch {
236
- // Ignore unreadable stamp files during bootstrap.
237
- }
238
- }
239
- return doneStamps;
240
- }
241
- function buildBootstrapEvents(wus, doneStampTimes) {
242
- const events = [];
243
- for (const wu of wus) {
244
- const normalizedStatus = wu.status.toLowerCase();
245
- const stampCompletedAt = doneStampTimes.get(wu.id);
246
- const isDone = normalizedStatus === BOOTSTRAP_STATUSES.DONE ||
247
- normalizedStatus === BOOTSTRAP_STATUSES.COMPLETED ||
248
- stampCompletedAt !== undefined;
249
- const isReadyLike = normalizedStatus === BOOTSTRAP_STATUSES.READY ||
250
- normalizedStatus === BOOTSTRAP_STATUSES.BACKLOG ||
251
- normalizedStatus === BOOTSTRAP_STATUSES.TODO;
252
- if (isReadyLike && !isDone) {
253
- continue;
254
- }
255
- const claimTimestamp = toIsoTimestamp(wu.claimed_at, wu.created ?? stampCompletedAt);
256
- events.push({
257
- type: 'claim',
258
- wuId: wu.id,
259
- lane: wu.lane,
260
- title: wu.title,
261
- timestamp: claimTimestamp,
262
- });
263
- if (normalizedStatus === BOOTSTRAP_STATUSES.BLOCKED && !isDone) {
264
- const blockedAt = new Date(claimTimestamp);
265
- blockedAt.setSeconds(blockedAt.getSeconds() + 1);
266
- events.push({
267
- type: 'block',
268
- wuId: wu.id,
269
- reason: BOOTSTRAP_REASON.BLOCKED,
270
- timestamp: blockedAt.toISOString(),
271
- });
272
- continue;
273
- }
274
- if (isDone) {
275
- const completedAt = toIsoTimestamp(wu.completed_at, stampCompletedAt ?? claimTimestamp);
276
- events.push({
277
- type: 'complete',
278
- wuId: wu.id,
279
- timestamp: completedAt,
280
- });
281
- }
282
- }
283
- return events.sort((left, right) => {
284
- return new Date(left.timestamp).getTime() - new Date(right.timestamp).getTime();
285
- });
286
- }
287
- function writeBootstrappedEvents(eventsPath, events) {
288
- mkdirSync(path.dirname(eventsPath), { recursive: true });
289
- const lines = events.map((event) => {
290
- const validation = validateWUEvent(event);
291
- if (!validation.success) {
292
- throw new Error('Generated bootstrap event failed validation');
293
- }
294
- return JSON.stringify(validation.data);
295
- });
296
- const content = lines.length > 0 ? `${lines.join('\n')}\n` : '';
297
- writeFileSync(eventsPath, content, 'utf-8');
298
- }
299
- /**
300
- * WU State Store class
301
- *
302
- * Manages WU lifecycle state via event sourcing pattern.
303
- * Events are appended to JSONL file, state is rebuilt by replaying events.
304
- */
305
- export class WUStateStore {
306
- baseDir;
307
- eventsFilePath;
308
- wuState;
309
- byStatus;
310
- byLane;
311
- byParent;
312
- constructor(baseDir) {
313
- this.baseDir = baseDir;
314
- this.eventsFilePath = path.join(baseDir, WU_EVENTS_FILE_NAME);
315
- // In-memory state (rebuilt from events)
316
- this.wuState = new Map();
317
- this.byStatus = new Map();
318
- this.byLane = new Map();
319
- this.byParent = new Map();
320
- }
321
- /**
322
- * WU-1674: On first run, archive spawn-era state files and rebuild wu-events.jsonl
323
- * using delegation-era semantics. This migration only runs for canonical state dirs
324
- * (<repo>/.lumenflow/state) and is guarded by a one-time marker file.
325
- */
326
- async _runDelegationCutoverIfNeeded() {
327
- if (!isCanonicalStateDir(this.baseDir)) {
328
- return;
329
- }
330
- const markerPath = path.join(this.baseDir, DELEGATION_CUTOVER.MARKER_FILE);
331
- if (existsSync(markerPath)) {
332
- return;
333
- }
334
- if (!isLegacyCutoverRequired(this.baseDir, this.eventsFilePath)) {
335
- return;
336
- }
337
- const archiveDir = path.join(this.baseDir, DELEGATION_CUTOVER.ARCHIVE_DIR, `${DELEGATION_CUTOVER.ARCHIVE_PREFIX}${sanitizeTimestamp(new Date().toISOString())}`);
338
- mkdirSync(archiveDir, { recursive: true });
339
- const legacyRegistryPath = path.join(this.baseDir, DELEGATION_CUTOVER.LEGACY_REGISTRY_FILE);
340
- moveFileToArchive(this.eventsFilePath, path.join(archiveDir, WU_EVENTS_FILE_NAME));
341
- moveFileToArchive(legacyRegistryPath, path.join(archiveDir, DELEGATION_CUTOVER.LEGACY_REGISTRY_FILE));
342
- const projectRoot = resolveProjectRoot(this.baseDir);
343
- const wus = readBootstrapWUs(projectRoot);
344
- const doneStampTimes = readDoneStampTimes(projectRoot);
345
- const bootstrapEvents = buildBootstrapEvents(wus, doneStampTimes);
346
- writeBootstrappedEvents(this.eventsFilePath, bootstrapEvents);
347
- const delegationRegistryPath = path.join(this.baseDir, DELEGATION_CUTOVER.DELEGATION_REGISTRY_FILE);
348
- if (!existsSync(delegationRegistryPath)) {
349
- writeFileSync(delegationRegistryPath, '', 'utf-8');
350
- }
351
- const markerPayload = {
352
- migratedAt: new Date().toISOString(),
353
- archiveDir,
354
- bootstrapEvents: bootstrapEvents.length,
355
- };
356
- writeFileSync(markerPath, `${JSON.stringify(markerPayload, null, 2)}\n`, 'utf-8');
357
- }
358
- /**
359
- * Loads and replays events from JSONL file into current state.
360
- *
361
- * Handles:
362
- * - Missing file: returns empty state
363
- * - Empty file: returns empty state
364
- * - Empty lines: skipped gracefully
365
- * - Malformed JSON: throws error with line info
366
- * - Invalid events: throws validation error
367
- *
368
- * @throws Error If file contains malformed JSON or invalid events
369
- *
370
- * @example
371
- * const store = new WUStateStore('/path/to/project');
372
- * await store.load();
373
- * const inProgress = store.getByStatus('in_progress');
374
- */
375
- async load() {
376
- // Reset state
377
- this.wuState.clear();
378
- this.byStatus.clear();
379
- this.byLane.clear();
380
- this.byParent.clear();
381
- await this._runDelegationCutoverIfNeeded();
382
- // Check if file exists
383
- let content;
384
- try {
385
- content = await fs.readFile(this.eventsFilePath, 'utf-8');
386
- }
387
- catch (error) {
388
- if (error.code === 'ENOENT') {
389
- // File doesn't exist - return empty state
390
- return;
391
- }
392
- throw error;
393
- }
394
- // Parse JSONL content
395
- const lines = content.split('\n');
396
- for (let i = 0; i < lines.length; i++) {
397
- const rawLine = lines[i];
398
- if (typeof rawLine !== 'string') {
399
- continue;
400
- }
401
- const line = rawLine.trim();
402
- // Skip empty lines
403
- if (!line) {
404
- continue;
405
- }
406
- // Parse JSON line
407
- let parsed;
408
- try {
409
- parsed = JSON.parse(line);
410
- }
411
- catch (error) {
412
- throw new Error(`Malformed JSON on line ${i + 1}: ${error.message}`, {
413
- cause: error,
414
- });
415
- }
416
- // Validate against schema
417
- const validation = validateWUEvent(parsed);
418
- if (!validation.success) {
419
- const issues = validation.error.issues
420
- .map((issue) => `${issue.path.join('.')}: ${issue.message}`)
421
- .join(', ');
422
- throw new Error(`Validation error on line ${i + 1}: ${issues}`);
423
- }
424
- const event = validation.data;
425
- // Apply event to state
426
- this._applyEvent(event);
427
- }
428
- }
429
- /**
430
- * Transition WU to a new status if it exists.
431
- */
432
- _transitionToStatus(wuId, newStatus) {
433
- const current = this.wuState.get(wuId);
434
- if (current) {
435
- this._setState(wuId, newStatus, current.lane, current.title);
436
- }
437
- }
438
- /**
439
- * Applies an event to the in-memory state.
440
- */
441
- _applyEvent(event) {
442
- const { wuId, type } = event;
443
- if (type === 'create' || type === 'claim') {
444
- const claimEvent = event;
445
- this._setState(wuId, WU_STATUS.IN_PROGRESS, claimEvent.lane, claimEvent.title);
446
- return;
447
- }
448
- if (type === 'block') {
449
- this._transitionToStatus(wuId, WU_STATUS.BLOCKED);
450
- return;
451
- }
452
- if (type === 'unblock') {
453
- this._transitionToStatus(wuId, WU_STATUS.IN_PROGRESS);
454
- return;
455
- }
456
- if (type === 'complete') {
457
- this._transitionToStatus(wuId, WU_STATUS.DONE);
458
- // WU-2244: Store completion timestamp for accurate date reporting
459
- const current = this.wuState.get(wuId);
460
- if (current) {
461
- current.completedAt = event.timestamp;
462
- }
463
- return;
464
- }
465
- if (type === 'checkpoint') {
466
- const checkpointEvent = event;
467
- const currentCheckpoint = this.wuState.get(wuId);
468
- if (currentCheckpoint) {
469
- currentCheckpoint.lastCheckpoint = event.timestamp;
470
- currentCheckpoint.lastCheckpointNote = checkpointEvent.note;
471
- }
472
- return;
473
- }
474
- if (type === DELEGATION_CUTOVER.RELATIONSHIP_EVENT_TYPE) {
475
- const delegationEvent = event;
476
- const { parentWuId } = delegationEvent;
477
- if (!this.byParent.has(parentWuId)) {
478
- this.byParent.set(parentWuId, new Set());
479
- }
480
- this.byParent.get(parentWuId).add(wuId);
481
- return;
482
- }
483
- // WU-1080: Handle release event - transitions from in_progress to ready
484
- if (type === 'release') {
485
- this._transitionToStatus(wuId, WU_STATUS.READY);
486
- }
487
- }
488
- /**
489
- * Sets WU state and updates indexes.
490
- */
491
- _setState(wuId, status, lane, title) {
492
- // Remove from old status index
493
- const oldState = this.wuState.get(wuId);
494
- if (oldState) {
495
- const oldStatusSet = this.byStatus.get(oldState.status);
496
- if (oldStatusSet) {
497
- oldStatusSet.delete(wuId);
498
- }
499
- // Remove from old lane index
500
- const oldLaneSet = this.byLane.get(oldState.lane);
501
- if (oldLaneSet) {
502
- oldLaneSet.delete(wuId);
503
- }
504
- }
505
- // Update state
506
- this.wuState.set(wuId, { status, lane, title });
507
- // Add to new status index
508
- if (!this.byStatus.has(status)) {
509
- this.byStatus.set(status, new Set());
510
- }
511
- this.byStatus.get(status).add(wuId);
512
- // Add to new lane index
513
- if (!this.byLane.has(lane)) {
514
- this.byLane.set(lane, new Set());
515
- }
516
- this.byLane.get(lane).add(wuId);
517
- }
518
- /**
519
- * Appends an event to the events file.
520
- *
521
- * Uses append mode to avoid full file rewrite.
522
- * Creates file and parent directories if they don't exist.
523
- * Validates event before appending.
524
- *
525
- * @throws Error If event fails validation
526
- */
527
- async _appendEvent(event) {
528
- // Validate event before appending
529
- const validation = validateWUEvent(event);
530
- if (!validation.success) {
531
- const issues = validation.error.issues
532
- .map((issue) => `${issue.path.join('.')}: ${issue.message}`)
533
- .join(', ');
534
- throw new Error(`Validation error: ${issues}`);
535
- }
536
- const line = `${JSON.stringify(event)}\n`;
537
- // WU-1740: Ensure parent directory exists before appending
538
- // fs.appendFile creates the file but not parent directories
539
- await fs.mkdir(this.baseDir, { recursive: true });
540
- // Use append flag to avoid rewriting the file
541
- await fs.appendFile(this.eventsFilePath, line, 'utf-8');
542
- }
543
- /**
544
- * Claims a WU (transitions to in_progress).
545
- *
546
- * @throws Error If WU is already in_progress
547
- *
548
- * @example
549
- * await store.claim('WU-1570', 'Operations: Tooling', 'Test WU');
550
- */
551
- async claim(wuId, lane, title) {
552
- // Check state machine: can't claim if already in_progress
553
- const currentState = this.wuState.get(wuId);
554
- if (currentState && currentState.status === WU_STATUS.IN_PROGRESS) {
555
- throw new Error(`WU ${wuId} is already ${WU_STATUS.IN_PROGRESS}`);
556
- }
557
- const event = {
558
- type: 'claim',
559
- wuId,
560
- lane,
561
- title,
562
- timestamp: new Date().toISOString(),
563
- };
564
- await this._appendEvent(event);
565
- this._applyEvent(event);
566
- }
567
- /**
568
- * Completes a WU (transitions to done).
569
- *
570
- * @throws Error If WU is not in_progress
571
- *
572
- * @example
573
- * await store.complete('WU-1570');
574
- */
575
- async complete(wuId) {
576
- // Check state machine: can only complete if in_progress
577
- const currentState = this.wuState.get(wuId);
578
- if (!currentState || currentState.status !== WU_STATUS.IN_PROGRESS) {
579
- throw new Error(`WU ${wuId} is not ${WU_STATUS.IN_PROGRESS}`);
580
- }
581
- const event = {
582
- type: 'complete',
583
- wuId,
584
- timestamp: new Date().toISOString(),
585
- };
586
- await this._appendEvent(event);
587
- this._applyEvent(event);
588
- }
589
- /**
590
- * Get current in-memory state for a WU.
591
- */
592
- getWUState(wuId) {
593
- return this.wuState.get(wuId);
594
- }
595
- /**
596
- * Create a complete event without writing to disk.
597
- *
598
- * Used by transactional flows where event log writes are staged and committed atomically.
599
- *
600
- * @throws Error If WU is not in_progress or event fails validation
601
- */
602
- createCompleteEvent(wuId, timestamp = new Date().toISOString()) {
603
- const currentState = this.wuState.get(wuId);
604
- if (!currentState || currentState.status !== WU_STATUS.IN_PROGRESS) {
605
- throw new Error(`WU ${wuId} is not ${WU_STATUS.IN_PROGRESS}`);
606
- }
607
- const event = { type: 'complete', wuId, timestamp };
608
- const validation = validateWUEvent(event);
609
- if (!validation.success) {
610
- const issues = validation.error.issues
611
- .map((issue) => `${issue.path.join('.')}: ${issue.message}`)
612
- .join(', ');
613
- throw new Error(`Validation error: ${issues}`);
614
- }
615
- return validation.data;
616
- }
617
- /**
618
- * Apply a validated event to in-memory state without writing to disk.
619
- *
620
- * @throws Error If event fails validation
621
- */
622
- applyEvent(event) {
623
- const validation = validateWUEvent(event);
624
- if (!validation.success) {
625
- const issues = validation.error.issues
626
- .map((issue) => `${issue.path.join('.')}: ${issue.message}`)
627
- .join(', ');
628
- throw new Error(`Validation error: ${issues}`);
629
- }
630
- this._applyEvent(validation.data);
631
- }
632
- /**
633
- * Blocks a WU (transitions to blocked).
634
- *
635
- * @throws Error If WU is not in_progress
636
- *
637
- * @example
638
- * await store.block('WU-1570', 'Blocked by dependency');
639
- */
640
- async block(wuId, reason) {
641
- // Check state machine: can only block if in_progress
642
- const currentState = this.wuState.get(wuId);
643
- if (!currentState || currentState.status !== WU_STATUS.IN_PROGRESS) {
644
- throw new Error(`WU ${wuId} is not ${WU_STATUS.IN_PROGRESS}`);
645
- }
646
- const event = {
647
- type: 'block',
648
- wuId,
649
- reason,
650
- timestamp: new Date().toISOString(),
651
- };
652
- await this._appendEvent(event);
653
- this._applyEvent(event);
654
- }
655
- /**
656
- * Unblocks a WU (transitions back to in_progress).
657
- *
658
- * @throws Error If WU is not blocked
659
- *
660
- * @example
661
- * await store.unblock('WU-1570');
662
- */
663
- async unblock(wuId) {
664
- // Check state machine: can only unblock if blocked
665
- const currentState = this.wuState.get(wuId);
666
- if (!currentState || currentState.status !== WU_STATUS.BLOCKED) {
667
- throw new Error(`WU ${wuId} is not ${WU_STATUS.BLOCKED}`);
668
- }
669
- const event = {
670
- type: 'unblock',
671
- wuId,
672
- timestamp: new Date().toISOString(),
673
- };
674
- await this._appendEvent(event);
675
- this._applyEvent(event);
676
- }
677
- /**
678
- * Records a checkpoint for a WU (WU-1748: cross-agent visibility).
679
- *
680
- * Checkpoints are recorded for visibility but don't change WU state.
681
- * Used to track progress and detect abandoned WUs.
682
- *
683
- * @example
684
- * await store.checkpoint('WU-1748', 'Completed worktree scanner', {
685
- * progress: 'Scanner implemented and tests passing',
686
- * nextSteps: 'Integrate into orchestrate:monitor'
687
- * });
688
- */
689
- async checkpoint(wuId, note, options = {}) {
690
- const { sessionId, progress, nextSteps } = options;
691
- const event = {
692
- type: 'checkpoint',
693
- wuId,
694
- note,
695
- timestamp: new Date().toISOString(),
696
- };
697
- if (sessionId)
698
- event.sessionId = sessionId;
699
- if (progress)
700
- event.progress = progress;
701
- if (nextSteps)
702
- event.nextSteps = nextSteps;
703
- await this._appendEvent(event);
704
- this._applyEvent(event);
705
- }
706
- /**
707
- * Gets WU IDs by status (O(1) lookup).
708
- *
709
- * @example
710
- * const inProgress = store.getByStatus('in_progress');
711
- * for (const wuId of inProgress) {
712
- * console.log(wuId);
713
- * }
714
- */
715
- getByStatus(status) {
716
- return this.byStatus.get(status) ?? new Set();
717
- }
718
- /**
719
- * Gets WU IDs by lane (O(1) lookup).
720
- *
721
- * @example
722
- * const tooling = store.getByLane('Operations: Tooling');
723
- * for (const wuId of tooling) {
724
- * console.log(wuId);
725
- * }
726
- */
727
- getByLane(lane) {
728
- return this.byLane.get(lane) ?? new Set();
729
- }
730
- /**
731
- * Gets child WU IDs delegated from a parent WU (O(1) lookup).
732
- * WU-1947: Parent-child relationship tracking.
733
- *
734
- * @example
735
- * const children = store.getChildWUs('WU-100');
736
- * for (const childId of children) {
737
- * console.log(`Child WU: ${childId}`);
738
- * }
739
- */
740
- getChildWUs(parentWuId) {
741
- return this.byParent.get(parentWuId) ?? new Set();
742
- }
743
- /**
744
- * Records a delegation relationship between parent and child WUs.
745
- * WU-1947: Parent-child relationship tracking.
746
- *
747
- * @example
748
- * await store.delegate('WU-200', 'WU-100', 'dlg-abc123');
749
- */
750
- async delegate(childWuId, parentWuId, delegationId) {
751
- const event = {
752
- type: DELEGATION_CUTOVER.RELATIONSHIP_EVENT_TYPE,
753
- wuId: childWuId,
754
- parentWuId,
755
- delegationId,
756
- timestamp: new Date().toISOString(),
757
- };
758
- await this._appendEvent(event);
759
- this._applyEvent(event);
760
- }
761
- /**
762
- * Releases an in_progress WU back to ready state (WU-1080: orphan recovery).
763
- *
764
- * Use this when an agent is interrupted mid-WU and the WU needs to be
765
- * made available for reclaiming by another agent.
766
- *
767
- * @throws Error If WU is not in_progress
768
- *
769
- * @example
770
- * await store.release('WU-1080', 'Agent interrupted mid-WU');
771
- */
772
- async release(wuId, reason) {
773
- // Check state machine: can only release if in_progress
774
- const currentState = this.wuState.get(wuId);
775
- if (!currentState || currentState.status !== WU_STATUS.IN_PROGRESS) {
776
- throw new Error(`WU ${wuId} is not ${WU_STATUS.IN_PROGRESS}`);
777
- }
778
- const event = {
779
- type: 'release',
780
- wuId,
781
- reason,
782
- timestamp: new Date().toISOString(),
783
- };
784
- await this._appendEvent(event);
785
- this._applyEvent(event);
786
- }
787
- /**
788
- * Create a release event without writing to disk.
789
- *
790
- * Used by transactional flows where event log writes are staged and committed atomically.
791
- * WU-1080: Orphan recovery support.
792
- *
793
- * @throws Error If WU is not in_progress or event fails validation
794
- */
795
- createReleaseEvent(wuId, reason, timestamp = new Date().toISOString()) {
796
- const currentState = this.wuState.get(wuId);
797
- if (!currentState || currentState.status !== WU_STATUS.IN_PROGRESS) {
798
- throw new Error(`WU ${wuId} is not ${WU_STATUS.IN_PROGRESS}`);
799
- }
800
- const event = { type: 'release', wuId, reason, timestamp };
801
- const validation = validateWUEvent(event);
802
- if (!validation.success) {
803
- const issues = validation.error.issues
804
- .map((issue) => `${issue.path.join('.')}: ${issue.message}`)
805
- .join(', ');
806
- throw new Error(`Validation error: ${issues}`);
807
- }
808
- return validation.data;
809
- }
810
- }
811
- /**
812
- * Check if a process with given PID is running
813
- */
814
- function isProcessRunning(pid) {
815
- try {
816
- // Sending signal 0 checks if process exists without affecting it
817
- process.kill(pid, 0);
818
- return true;
819
- }
820
- catch {
821
- return false;
822
- }
823
- }
824
- /**
825
- * Check if a lock is stale (expired or dead process)
826
- *
827
- * WU-2240: Prepared for proper-lockfile integration
828
- */
829
- export function isLockStale(lockData) {
830
- const now = Date.now();
831
- const lockAge = now - lockData.timestamp;
832
- // Check timeout first (5 minutes)
833
- if (lockAge > LOCK_TIMEOUT_MS) {
834
- return true;
835
- }
836
- // Check if on same host - if different host, can't check PID
837
- if (lockData.hostname !== os.hostname()) {
838
- // Different host, only rely on timeout
839
- return false;
840
- }
841
- // Same host - check if process is still alive
842
- return !isProcessRunning(lockData.pid);
843
- }
844
- /**
845
- * Safely remove a lock file, ignoring errors
846
- */
847
- function safeUnlink(lockPath) {
848
- try {
849
- unlinkSync(lockPath);
850
- }
851
- catch {
852
- // Ignore removal errors
853
- }
854
- }
855
- /**
856
- * Read and parse existing lock file
857
- */
858
- function readLockFile(lockPath) {
859
- try {
860
- const content = readFileSync(lockPath, 'utf-8');
861
- return JSON.parse(content);
862
- }
863
- catch {
864
- return null;
865
- }
866
- }
867
- /**
868
- * Handle existing lock file - returns true if should retry
869
- */
870
- async function handleExistingLock(lockPath) {
871
- const existingLock = readLockFile(lockPath);
872
- if (!existingLock) {
873
- // Corrupted lock file - remove and retry
874
- safeUnlink(lockPath);
875
- return true;
876
- }
877
- if (isLockStale(existingLock)) {
878
- safeUnlink(lockPath);
879
- return true;
880
- }
881
- // Lock is held by active process - wait and retry
882
- await new Promise((resolve) => setTimeout(resolve, LOCK_RETRY_DELAY_MS));
883
- return true;
884
- }
885
- /**
886
- * Try to create a lock file atomically
887
- */
888
- async function tryCreateLock(lockPath, lockData) {
889
- try {
890
- mkdirSync(path.dirname(lockPath), { recursive: true });
891
- const fd = openSync(lockPath, 'wx');
892
- const content = JSON.stringify(lockData);
893
- writeFileSync(fd, content, 'utf-8');
894
- fsyncSync(fd);
895
- closeSync(fd);
896
- return true;
897
- }
898
- catch (error) {
899
- if (error.code === 'EEXIST') {
900
- await new Promise((resolve) => setTimeout(resolve, LOCK_RETRY_DELAY_MS));
901
- return false;
902
- }
903
- throw error;
904
- }
905
- }
906
- /**
907
- * Acquire a file lock for the events file
908
- *
909
- * Uses a JSON lock file containing PID, timestamp, and hostname.
910
- * Implements stale lock detection via:
911
- * - PID check (on same host)
912
- * - 5-minute timeout (across hosts)
913
- *
914
- * WU-2240: Prepared for proper-lockfile integration
915
- *
916
- * @throws Error If lock cannot be acquired after retries
917
- */
918
- export async function acquireLock(lockPath) {
919
- const lockData = {
920
- pid: process.pid,
921
- timestamp: Date.now(),
922
- hostname: os.hostname(),
923
- };
924
- for (let attempt = 0; attempt < LOCK_MAX_RETRIES; attempt++) {
925
- if (existsSync(lockPath)) {
926
- const shouldRetry = await handleExistingLock(lockPath);
927
- if (shouldRetry)
928
- continue;
929
- }
930
- const acquired = await tryCreateLock(lockPath, lockData);
931
- if (acquired)
932
- return;
933
- }
934
- throw new Error(`Failed to acquire lock after ${LOCK_MAX_RETRIES} attempts`);
935
- }
936
- /**
937
- * Release a file lock
938
- *
939
- * WU-2240: Prepared for proper-lockfile integration
940
- */
941
- export function releaseLock(lockPath) {
942
- safeUnlink(lockPath);
943
- }
944
- /**
945
- * Repair a corrupted state file by removing invalid lines.
946
- *
947
- * WU-2240: Corruption recovery for wu-events.jsonl
948
- *
949
- * Features:
950
- * - Creates backup before repair
951
- * - Removes malformed JSON lines
952
- * - Removes lines that fail schema validation
953
- * - Returns detailed repair statistics
954
- *
955
- * @example
956
- * const stateFilePath = path.join(process.cwd(), '.lumenflow', 'state', 'wu-events.jsonl');
957
- * const result = await repairStateFile(stateFilePath);
958
- * if (result.success) {
959
- * console.log(`Repaired: kept ${result.linesKept}, removed ${result.linesRemoved}`);
960
- * }
961
- */
962
- export async function repairStateFile(filePath) {
963
- const warnings = [];
964
- let linesKept = 0;
965
- let linesRemoved = 0;
966
- // Check if file exists
967
- if (!existsSync(filePath)) {
968
- return {
969
- success: true,
970
- linesKept: 0,
971
- linesRemoved: 0,
972
- backupPath: null,
973
- warnings: ['File does not exist, nothing to repair'],
974
- };
975
- }
976
- // Read the original content
977
- const originalContent = readFileSync(filePath, 'utf-8');
978
- const lines = originalContent.split('\n');
979
- // Create backup with timestamp
980
- const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
981
- const backupPath = `${filePath}.backup.${timestamp}`;
982
- writeFileSync(backupPath, originalContent, 'utf-8');
983
- // Process each line
984
- const validLines = [];
985
- for (let i = 0; i < lines.length; i++) {
986
- const rawLine = lines[i];
987
- if (typeof rawLine !== 'string') {
988
- continue;
989
- }
990
- const line = rawLine.trim();
991
- // Skip empty lines
992
- if (!line) {
993
- continue;
994
- }
995
- // Try to parse JSON
996
- let parsed;
997
- try {
998
- parsed = JSON.parse(line);
999
- }
1000
- catch {
1001
- linesRemoved++;
1002
- warnings.push(`Line ${i + 1}: Malformed JSON removed`);
1003
- continue;
1004
- }
1005
- // Validate against schema
1006
- const validation = validateWUEvent(parsed);
1007
- if (!validation.success) {
1008
- linesRemoved++;
1009
- const issues = validation.error.issues
1010
- .map((issue) => `${issue.path.join('.')}: ${issue.message}`)
1011
- .join(', ');
1012
- warnings.push(`Line ${i + 1}: Invalid event removed (${issues})`);
1013
- continue;
1014
- }
1015
- // Line is valid
1016
- validLines.push(line);
1017
- linesKept++;
1018
- }
1019
- // Write repaired file atomically
1020
- const tempPath = `${filePath}.tmp.${process.pid}`;
1021
- const repairedContent = validLines.length > 0 ? `${validLines.join('\n')}\n` : '';
1022
- try {
1023
- const fd = openSync(tempPath, 'w');
1024
- writeFileSync(fd, repairedContent, 'utf-8');
1025
- fsyncSync(fd);
1026
- closeSync(fd);
1027
- // Atomic rename
1028
- renameSync(tempPath, filePath);
1029
- // Fsync directory
1030
- const dirPath = path.dirname(filePath);
1031
- const dirFd = openSync(dirPath, 'r');
1032
- fsyncSync(dirFd);
1033
- closeSync(dirFd);
1034
- }
1035
- catch (error) {
1036
- // Cleanup temp file on failure
1037
- try {
1038
- unlinkSync(tempPath);
1039
- }
1040
- catch {
1041
- // Ignore cleanup errors
1042
- }
1043
- throw error;
1044
- }
1045
- // Add warning if file is now empty
1046
- if (linesKept === 0 && linesRemoved > 0) {
1047
- warnings.push('All lines were invalid - file is now empty');
1048
- }
1049
- return {
1050
- success: true,
1051
- linesKept,
1052
- linesRemoved,
1053
- backupPath,
1054
- warnings,
1055
- };
1056
- }
1057
- //# sourceMappingURL=wu-state-store.js.map