@jonit-dev/night-watch-cli 1.7.29 → 1.7.31

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 (384) hide show
  1. package/bin/night-watch.mjs +1 -1
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/{src/cli.js → cli.js} +1 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/{src/commands → commands}/audit.d.ts +2 -2
  7. package/dist/commands/audit.d.ts.map +1 -0
  8. package/dist/commands/audit.js +105 -0
  9. package/dist/commands/audit.js.map +1 -0
  10. package/dist/{src/commands → commands}/board.d.ts +1 -1
  11. package/dist/commands/board.d.ts.map +1 -0
  12. package/dist/commands/board.js +664 -0
  13. package/dist/commands/board.js.map +1 -0
  14. package/dist/{src/commands → commands}/cancel.d.ts +3 -3
  15. package/dist/commands/cancel.d.ts.map +1 -0
  16. package/dist/{src/commands → commands}/cancel.js +18 -20
  17. package/dist/commands/cancel.js.map +1 -0
  18. package/dist/commands/dashboard/tab-actions.d.ts.map +1 -0
  19. package/dist/commands/dashboard/tab-actions.js.map +1 -0
  20. package/dist/{src/commands → commands}/dashboard/tab-config.d.ts +3 -3
  21. package/dist/commands/dashboard/tab-config.d.ts.map +1 -0
  22. package/dist/{src/commands → commands}/dashboard/tab-config.js +250 -187
  23. package/dist/commands/dashboard/tab-config.js.map +1 -0
  24. package/dist/{src/commands → commands}/dashboard/tab-logs.d.ts +1 -1
  25. package/dist/commands/dashboard/tab-logs.d.ts.map +1 -0
  26. package/dist/{src/commands → commands}/dashboard/tab-logs.js +62 -38
  27. package/dist/commands/dashboard/tab-logs.js.map +1 -0
  28. package/dist/{src/commands → commands}/dashboard/tab-schedules.d.ts +1 -1
  29. package/dist/commands/dashboard/tab-schedules.d.ts.map +1 -0
  30. package/dist/{src/commands → commands}/dashboard/tab-schedules.js +85 -76
  31. package/dist/commands/dashboard/tab-schedules.js.map +1 -0
  32. package/dist/{src/commands → commands}/dashboard/tab-status.d.ts +7 -7
  33. package/dist/commands/dashboard/tab-status.d.ts.map +1 -0
  34. package/dist/{src/commands → commands}/dashboard/tab-status.js +98 -95
  35. package/dist/commands/dashboard/tab-status.js.map +1 -0
  36. package/dist/{src/commands → commands}/dashboard/types.d.ts +3 -4
  37. package/dist/commands/dashboard/types.d.ts.map +1 -0
  38. package/dist/commands/dashboard/types.js.map +1 -0
  39. package/dist/{src/commands → commands}/dashboard.d.ts +2 -2
  40. package/dist/commands/dashboard.d.ts.map +1 -0
  41. package/dist/{src/commands → commands}/dashboard.js +32 -33
  42. package/dist/commands/dashboard.js.map +1 -0
  43. package/dist/{src/commands → commands}/doctor.d.ts +2 -2
  44. package/dist/commands/doctor.d.ts.map +1 -0
  45. package/dist/{src/commands → commands}/doctor.js +40 -43
  46. package/dist/commands/doctor.js.map +1 -0
  47. package/dist/{src/commands → commands}/history.d.ts +1 -1
  48. package/dist/commands/history.d.ts.map +1 -0
  49. package/dist/{src/commands → commands}/history.js +11 -18
  50. package/dist/commands/history.js.map +1 -0
  51. package/dist/{src/commands → commands}/init.d.ts +1 -1
  52. package/dist/commands/init.d.ts.map +1 -0
  53. package/dist/{src/commands → commands}/init.js +62 -36
  54. package/dist/commands/init.js.map +1 -0
  55. package/dist/{src/commands → commands}/install.d.ts +2 -2
  56. package/dist/commands/install.d.ts.map +1 -0
  57. package/dist/{src/commands → commands}/install.js +48 -50
  58. package/dist/commands/install.js.map +1 -0
  59. package/dist/{src/commands → commands}/logs.d.ts +1 -1
  60. package/dist/commands/logs.d.ts.map +1 -0
  61. package/dist/{src/commands → commands}/logs.js +29 -30
  62. package/dist/commands/logs.js.map +1 -0
  63. package/dist/{src/commands → commands}/prd-state.d.ts +1 -1
  64. package/dist/commands/prd-state.d.ts.map +1 -0
  65. package/dist/{src/commands → commands}/prd-state.js +14 -14
  66. package/dist/commands/prd-state.js.map +1 -0
  67. package/dist/{src/commands → commands}/prd.d.ts +1 -1
  68. package/dist/commands/prd.d.ts.map +1 -0
  69. package/dist/{src/commands → commands}/prd.js +57 -66
  70. package/dist/commands/prd.js.map +1 -0
  71. package/dist/{src/commands → commands}/prds.d.ts +1 -1
  72. package/dist/commands/prds.d.ts.map +1 -0
  73. package/dist/{src/commands → commands}/prds.js +51 -53
  74. package/dist/commands/prds.js.map +1 -0
  75. package/dist/{src/commands → commands}/prs.d.ts +1 -1
  76. package/dist/commands/prs.d.ts.map +1 -0
  77. package/dist/{src/commands → commands}/prs.js +22 -24
  78. package/dist/commands/prs.js.map +1 -0
  79. package/dist/{src/commands → commands}/qa.d.ts +2 -2
  80. package/dist/commands/qa.d.ts.map +1 -0
  81. package/dist/{src/commands → commands}/qa.js +50 -51
  82. package/dist/commands/qa.js.map +1 -0
  83. package/dist/{src/commands → commands}/retry.d.ts +1 -1
  84. package/dist/commands/retry.d.ts.map +1 -0
  85. package/dist/{src/commands → commands}/retry.js +9 -10
  86. package/dist/commands/retry.js.map +1 -0
  87. package/dist/{src/commands → commands}/review.d.ts +2 -2
  88. package/dist/commands/review.d.ts.map +1 -0
  89. package/dist/{src/commands → commands}/review.js +68 -59
  90. package/dist/commands/review.js.map +1 -0
  91. package/dist/{src/commands → commands}/run.d.ts +2 -2
  92. package/dist/commands/run.d.ts.map +1 -0
  93. package/dist/{src/commands → commands}/run.js +87 -83
  94. package/dist/commands/run.js.map +1 -0
  95. package/dist/{src/commands → commands}/serve.d.ts +2 -2
  96. package/dist/commands/serve.d.ts.map +1 -0
  97. package/dist/{src/commands → commands}/serve.js +18 -18
  98. package/dist/commands/serve.js.map +1 -0
  99. package/dist/{src/commands → commands}/slice.d.ts +2 -2
  100. package/dist/commands/slice.d.ts.map +1 -0
  101. package/dist/{src/commands → commands}/slice.js +50 -46
  102. package/dist/commands/slice.js.map +1 -0
  103. package/dist/{src/commands → commands}/state.d.ts +1 -1
  104. package/dist/commands/state.d.ts.map +1 -0
  105. package/dist/{src/commands → commands}/state.js +20 -22
  106. package/dist/commands/state.js.map +1 -0
  107. package/dist/{src/commands → commands}/status.d.ts +1 -1
  108. package/dist/commands/status.d.ts.map +1 -0
  109. package/dist/{src/commands → commands}/status.js +75 -54
  110. package/dist/commands/status.js.map +1 -0
  111. package/dist/{src/commands → commands}/uninstall.d.ts +1 -1
  112. package/dist/commands/uninstall.d.ts.map +1 -0
  113. package/dist/{src/commands → commands}/uninstall.js +12 -14
  114. package/dist/commands/uninstall.js.map +1 -0
  115. package/dist/{src/commands → commands}/update.d.ts +1 -1
  116. package/dist/commands/update.d.ts.map +1 -0
  117. package/dist/{src/commands → commands}/update.js +23 -23
  118. package/dist/commands/update.js.map +1 -0
  119. package/package.json +18 -42
  120. package/LICENSE +0 -21
  121. package/README.md +0 -132
  122. package/dist/shared/types.d.ts +0 -226
  123. package/dist/shared/types.d.ts.map +0 -1
  124. package/dist/shared/types.js +0 -7
  125. package/dist/shared/types.js.map +0 -1
  126. package/dist/src/agents/soul-compiler.d.ts +0 -11
  127. package/dist/src/agents/soul-compiler.d.ts.map +0 -1
  128. package/dist/src/agents/soul-compiler.js +0 -157
  129. package/dist/src/agents/soul-compiler.js.map +0 -1
  130. package/dist/src/board/factory.d.ts +0 -3
  131. package/dist/src/board/factory.d.ts.map +0 -1
  132. package/dist/src/board/factory.js +0 -10
  133. package/dist/src/board/factory.js.map +0 -1
  134. package/dist/src/board/providers/github-graphql.d.ts +0 -16
  135. package/dist/src/board/providers/github-graphql.d.ts.map +0 -1
  136. package/dist/src/board/providers/github-graphql.js +0 -43
  137. package/dist/src/board/providers/github-graphql.js.map +0 -1
  138. package/dist/src/board/providers/github-projects.d.ts +0 -51
  139. package/dist/src/board/providers/github-projects.d.ts.map +0 -1
  140. package/dist/src/board/providers/github-projects.js +0 -672
  141. package/dist/src/board/providers/github-projects.js.map +0 -1
  142. package/dist/src/board/types.d.ts +0 -60
  143. package/dist/src/board/types.d.ts.map +0 -1
  144. package/dist/src/board/types.js +0 -4
  145. package/dist/src/board/types.js.map +0 -1
  146. package/dist/src/cli.d.ts +0 -3
  147. package/dist/src/cli.d.ts.map +0 -1
  148. package/dist/src/cli.js.map +0 -1
  149. package/dist/src/commands/audit.d.ts.map +0 -1
  150. package/dist/src/commands/audit.js +0 -98
  151. package/dist/src/commands/audit.js.map +0 -1
  152. package/dist/src/commands/board.d.ts.map +0 -1
  153. package/dist/src/commands/board.js +0 -294
  154. package/dist/src/commands/board.js.map +0 -1
  155. package/dist/src/commands/cancel.d.ts.map +0 -1
  156. package/dist/src/commands/cancel.js.map +0 -1
  157. package/dist/src/commands/dashboard/tab-actions.d.ts.map +0 -1
  158. package/dist/src/commands/dashboard/tab-actions.js.map +0 -1
  159. package/dist/src/commands/dashboard/tab-config.d.ts.map +0 -1
  160. package/dist/src/commands/dashboard/tab-config.js.map +0 -1
  161. package/dist/src/commands/dashboard/tab-logs.d.ts.map +0 -1
  162. package/dist/src/commands/dashboard/tab-logs.js.map +0 -1
  163. package/dist/src/commands/dashboard/tab-schedules.d.ts.map +0 -1
  164. package/dist/src/commands/dashboard/tab-schedules.js.map +0 -1
  165. package/dist/src/commands/dashboard/tab-status.d.ts.map +0 -1
  166. package/dist/src/commands/dashboard/tab-status.js.map +0 -1
  167. package/dist/src/commands/dashboard/types.d.ts.map +0 -1
  168. package/dist/src/commands/dashboard/types.js.map +0 -1
  169. package/dist/src/commands/dashboard.d.ts.map +0 -1
  170. package/dist/src/commands/dashboard.js.map +0 -1
  171. package/dist/src/commands/doctor.d.ts.map +0 -1
  172. package/dist/src/commands/doctor.js.map +0 -1
  173. package/dist/src/commands/history.d.ts.map +0 -1
  174. package/dist/src/commands/history.js.map +0 -1
  175. package/dist/src/commands/init.d.ts.map +0 -1
  176. package/dist/src/commands/init.js.map +0 -1
  177. package/dist/src/commands/install.d.ts.map +0 -1
  178. package/dist/src/commands/install.js.map +0 -1
  179. package/dist/src/commands/logs.d.ts.map +0 -1
  180. package/dist/src/commands/logs.js.map +0 -1
  181. package/dist/src/commands/prd-state.d.ts.map +0 -1
  182. package/dist/src/commands/prd-state.js.map +0 -1
  183. package/dist/src/commands/prd.d.ts.map +0 -1
  184. package/dist/src/commands/prd.js.map +0 -1
  185. package/dist/src/commands/prds.d.ts.map +0 -1
  186. package/dist/src/commands/prds.js.map +0 -1
  187. package/dist/src/commands/prs.d.ts.map +0 -1
  188. package/dist/src/commands/prs.js.map +0 -1
  189. package/dist/src/commands/qa.d.ts.map +0 -1
  190. package/dist/src/commands/qa.js.map +0 -1
  191. package/dist/src/commands/retry.d.ts.map +0 -1
  192. package/dist/src/commands/retry.js.map +0 -1
  193. package/dist/src/commands/review.d.ts.map +0 -1
  194. package/dist/src/commands/review.js.map +0 -1
  195. package/dist/src/commands/run.d.ts.map +0 -1
  196. package/dist/src/commands/run.js.map +0 -1
  197. package/dist/src/commands/serve.d.ts.map +0 -1
  198. package/dist/src/commands/serve.js.map +0 -1
  199. package/dist/src/commands/slice.d.ts.map +0 -1
  200. package/dist/src/commands/slice.js.map +0 -1
  201. package/dist/src/commands/state.d.ts.map +0 -1
  202. package/dist/src/commands/state.js.map +0 -1
  203. package/dist/src/commands/status.d.ts.map +0 -1
  204. package/dist/src/commands/status.js.map +0 -1
  205. package/dist/src/commands/uninstall.d.ts.map +0 -1
  206. package/dist/src/commands/uninstall.js.map +0 -1
  207. package/dist/src/commands/update.d.ts.map +0 -1
  208. package/dist/src/commands/update.js.map +0 -1
  209. package/dist/src/config.d.ts +0 -23
  210. package/dist/src/config.d.ts.map +0 -1
  211. package/dist/src/config.js +0 -671
  212. package/dist/src/config.js.map +0 -1
  213. package/dist/src/constants.d.ts +0 -67
  214. package/dist/src/constants.d.ts.map +0 -1
  215. package/dist/src/constants.js +0 -131
  216. package/dist/src/constants.js.map +0 -1
  217. package/dist/src/server/index.d.ts +0 -23
  218. package/dist/src/server/index.d.ts.map +0 -1
  219. package/dist/src/server/index.js +0 -1704
  220. package/dist/src/server/index.js.map +0 -1
  221. package/dist/src/slack/channel-manager.d.ts +0 -32
  222. package/dist/src/slack/channel-manager.d.ts.map +0 -1
  223. package/dist/src/slack/channel-manager.js +0 -128
  224. package/dist/src/slack/channel-manager.js.map +0 -1
  225. package/dist/src/slack/client.d.ts +0 -76
  226. package/dist/src/slack/client.d.ts.map +0 -1
  227. package/dist/src/slack/client.js +0 -193
  228. package/dist/src/slack/client.js.map +0 -1
  229. package/dist/src/slack/deliberation.d.ts +0 -87
  230. package/dist/src/slack/deliberation.d.ts.map +0 -1
  231. package/dist/src/slack/deliberation.js +0 -1354
  232. package/dist/src/slack/deliberation.js.map +0 -1
  233. package/dist/src/slack/index.d.ts +0 -6
  234. package/dist/src/slack/index.d.ts.map +0 -1
  235. package/dist/src/slack/index.js +0 -5
  236. package/dist/src/slack/index.js.map +0 -1
  237. package/dist/src/slack/interaction-listener.d.ts +0 -130
  238. package/dist/src/slack/interaction-listener.d.ts.map +0 -1
  239. package/dist/src/slack/interaction-listener.js +0 -1329
  240. package/dist/src/slack/interaction-listener.js.map +0 -1
  241. package/dist/src/storage/json-state-migrator.d.ts +0 -24
  242. package/dist/src/storage/json-state-migrator.d.ts.map +0 -1
  243. package/dist/src/storage/json-state-migrator.js +0 -197
  244. package/dist/src/storage/json-state-migrator.js.map +0 -1
  245. package/dist/src/storage/repositories/index.d.ts +0 -25
  246. package/dist/src/storage/repositories/index.d.ts.map +0 -1
  247. package/dist/src/storage/repositories/index.js +0 -45
  248. package/dist/src/storage/repositories/index.js.map +0 -1
  249. package/dist/src/storage/repositories/interfaces.d.ts +0 -60
  250. package/dist/src/storage/repositories/interfaces.d.ts.map +0 -1
  251. package/dist/src/storage/repositories/interfaces.js +0 -6
  252. package/dist/src/storage/repositories/interfaces.js.map +0 -1
  253. package/dist/src/storage/repositories/sqlite/agent-persona-repository.d.ts +0 -33
  254. package/dist/src/storage/repositories/sqlite/agent-persona-repository.d.ts.map +0 -1
  255. package/dist/src/storage/repositories/sqlite/agent-persona-repository.js +0 -715
  256. package/dist/src/storage/repositories/sqlite/agent-persona-repository.js.map +0 -1
  257. package/dist/src/storage/repositories/sqlite/execution-history-repository.d.ts +0 -21
  258. package/dist/src/storage/repositories/sqlite/execution-history-repository.d.ts.map +0 -1
  259. package/dist/src/storage/repositories/sqlite/execution-history-repository.js +0 -94
  260. package/dist/src/storage/repositories/sqlite/execution-history-repository.js.map +0 -1
  261. package/dist/src/storage/repositories/sqlite/prd-state-repository.d.ts +0 -17
  262. package/dist/src/storage/repositories/sqlite/prd-state-repository.d.ts.map +0 -1
  263. package/dist/src/storage/repositories/sqlite/prd-state-repository.js +0 -74
  264. package/dist/src/storage/repositories/sqlite/prd-state-repository.js.map +0 -1
  265. package/dist/src/storage/repositories/sqlite/project-registry-repository.d.ts +0 -17
  266. package/dist/src/storage/repositories/sqlite/project-registry-repository.d.ts.map +0 -1
  267. package/dist/src/storage/repositories/sqlite/project-registry-repository.js +0 -43
  268. package/dist/src/storage/repositories/sqlite/project-registry-repository.js.map +0 -1
  269. package/dist/src/storage/repositories/sqlite/roadmap-state-repository.d.ts +0 -14
  270. package/dist/src/storage/repositories/sqlite/roadmap-state-repository.d.ts.map +0 -1
  271. package/dist/src/storage/repositories/sqlite/roadmap-state-repository.js +0 -47
  272. package/dist/src/storage/repositories/sqlite/roadmap-state-repository.js.map +0 -1
  273. package/dist/src/storage/repositories/sqlite/slack-discussion-repository.d.ts +0 -20
  274. package/dist/src/storage/repositories/sqlite/slack-discussion-repository.d.ts.map +0 -1
  275. package/dist/src/storage/repositories/sqlite/slack-discussion-repository.js +0 -88
  276. package/dist/src/storage/repositories/sqlite/slack-discussion-repository.js.map +0 -1
  277. package/dist/src/storage/sqlite/client.d.ts +0 -23
  278. package/dist/src/storage/sqlite/client.d.ts.map +0 -1
  279. package/dist/src/storage/sqlite/client.js +0 -47
  280. package/dist/src/storage/sqlite/client.js.map +0 -1
  281. package/dist/src/storage/sqlite/migrations.d.ts +0 -11
  282. package/dist/src/storage/sqlite/migrations.d.ts.map +0 -1
  283. package/dist/src/storage/sqlite/migrations.js +0 -94
  284. package/dist/src/storage/sqlite/migrations.js.map +0 -1
  285. package/dist/src/templates/prd-template.d.ts +0 -11
  286. package/dist/src/templates/prd-template.d.ts.map +0 -1
  287. package/dist/src/templates/prd-template.js +0 -166
  288. package/dist/src/templates/prd-template.js.map +0 -1
  289. package/dist/src/templates/slicer-prompt.d.ts +0 -54
  290. package/dist/src/templates/slicer-prompt.d.ts.map +0 -1
  291. package/dist/src/templates/slicer-prompt.js +0 -163
  292. package/dist/src/templates/slicer-prompt.js.map +0 -1
  293. package/dist/src/types.d.ts +0 -140
  294. package/dist/src/types.d.ts.map +0 -1
  295. package/dist/src/types.js +0 -5
  296. package/dist/src/types.js.map +0 -1
  297. package/dist/src/utils/avatar-generator.d.ts +0 -6
  298. package/dist/src/utils/avatar-generator.d.ts.map +0 -1
  299. package/dist/src/utils/avatar-generator.js +0 -133
  300. package/dist/src/utils/avatar-generator.js.map +0 -1
  301. package/dist/src/utils/checks.d.ts +0 -55
  302. package/dist/src/utils/checks.d.ts.map +0 -1
  303. package/dist/src/utils/checks.js +0 -246
  304. package/dist/src/utils/checks.js.map +0 -1
  305. package/dist/src/utils/config-writer.d.ts +0 -16
  306. package/dist/src/utils/config-writer.d.ts.map +0 -1
  307. package/dist/src/utils/config-writer.js +0 -45
  308. package/dist/src/utils/config-writer.js.map +0 -1
  309. package/dist/src/utils/crontab.d.ts +0 -62
  310. package/dist/src/utils/crontab.d.ts.map +0 -1
  311. package/dist/src/utils/crontab.js +0 -168
  312. package/dist/src/utils/crontab.js.map +0 -1
  313. package/dist/src/utils/execution-history.d.ts +0 -54
  314. package/dist/src/utils/execution-history.d.ts.map +0 -1
  315. package/dist/src/utils/execution-history.js +0 -80
  316. package/dist/src/utils/execution-history.js.map +0 -1
  317. package/dist/src/utils/github.d.ts +0 -40
  318. package/dist/src/utils/github.d.ts.map +0 -1
  319. package/dist/src/utils/github.js +0 -126
  320. package/dist/src/utils/github.js.map +0 -1
  321. package/dist/src/utils/notify.d.ts +0 -64
  322. package/dist/src/utils/notify.d.ts.map +0 -1
  323. package/dist/src/utils/notify.js +0 -405
  324. package/dist/src/utils/notify.js.map +0 -1
  325. package/dist/src/utils/prd-states.d.ts +0 -16
  326. package/dist/src/utils/prd-states.d.ts.map +0 -1
  327. package/dist/src/utils/prd-states.js +0 -28
  328. package/dist/src/utils/prd-states.js.map +0 -1
  329. package/dist/src/utils/registry.d.ts +0 -45
  330. package/dist/src/utils/registry.d.ts.map +0 -1
  331. package/dist/src/utils/registry.js +0 -86
  332. package/dist/src/utils/registry.js.map +0 -1
  333. package/dist/src/utils/roadmap-parser.d.ts +0 -45
  334. package/dist/src/utils/roadmap-parser.d.ts.map +0 -1
  335. package/dist/src/utils/roadmap-parser.js +0 -136
  336. package/dist/src/utils/roadmap-parser.js.map +0 -1
  337. package/dist/src/utils/roadmap-scanner.d.ts +0 -92
  338. package/dist/src/utils/roadmap-scanner.d.ts.map +0 -1
  339. package/dist/src/utils/roadmap-scanner.js +0 -349
  340. package/dist/src/utils/roadmap-scanner.js.map +0 -1
  341. package/dist/src/utils/roadmap-state.d.ts +0 -90
  342. package/dist/src/utils/roadmap-state.d.ts.map +0 -1
  343. package/dist/src/utils/roadmap-state.js +0 -154
  344. package/dist/src/utils/roadmap-state.js.map +0 -1
  345. package/dist/src/utils/script-result.d.ts +0 -12
  346. package/dist/src/utils/script-result.d.ts.map +0 -1
  347. package/dist/src/utils/script-result.js +0 -46
  348. package/dist/src/utils/script-result.js.map +0 -1
  349. package/dist/src/utils/shell.d.ts +0 -27
  350. package/dist/src/utils/shell.d.ts.map +0 -1
  351. package/dist/src/utils/shell.js +0 -64
  352. package/dist/src/utils/shell.js.map +0 -1
  353. package/dist/src/utils/status-data.d.ts +0 -148
  354. package/dist/src/utils/status-data.d.ts.map +0 -1
  355. package/dist/src/utils/status-data.js +0 -548
  356. package/dist/src/utils/status-data.js.map +0 -1
  357. package/dist/src/utils/ui.d.ts +0 -55
  358. package/dist/src/utils/ui.d.ts.map +0 -1
  359. package/dist/src/utils/ui.js +0 -121
  360. package/dist/src/utils/ui.js.map +0 -1
  361. package/scripts/night-watch-audit-cron.sh +0 -149
  362. package/scripts/night-watch-cron.sh +0 -484
  363. package/scripts/night-watch-helpers.sh +0 -499
  364. package/scripts/night-watch-pr-reviewer-cron.sh +0 -528
  365. package/scripts/night-watch-qa-cron.sh +0 -281
  366. package/scripts/night-watch-slicer-cron.sh +0 -90
  367. package/scripts/test-helpers.bats +0 -77
  368. package/templates/night-watch-pr-reviewer.md +0 -174
  369. package/templates/night-watch-qa.md +0 -157
  370. package/templates/night-watch-slicer.md +0 -219
  371. package/templates/night-watch.config.json +0 -30
  372. package/templates/night-watch.md +0 -94
  373. package/templates/prd-executor.md +0 -235
  374. package/templates/prd.md +0 -26
  375. package/web/dist/assets/index-BiJf9LFT.js +0 -458
  376. package/web/dist/assets/index-OpSgvsYu.css +0 -1
  377. package/web/dist/avatars/carlos.webp +0 -0
  378. package/web/dist/avatars/dev.webp +0 -0
  379. package/web/dist/avatars/maya.webp +0 -0
  380. package/web/dist/avatars/priya.webp +0 -0
  381. package/web/dist/index.html +0 -82
  382. /package/dist/{src/commands → commands}/dashboard/tab-actions.d.ts +0 -0
  383. /package/dist/{src/commands → commands}/dashboard/tab-actions.js +0 -0
  384. /package/dist/{src/commands → commands}/dashboard/types.js +0 -0
@@ -1,136 +0,0 @@
1
- /**
2
- * Roadmap Parser for Night Watch CLI
3
- * Parses ROADMAP.md files into structured items
4
- */
5
- import * as crypto from "crypto";
6
- /**
7
- * Generate a hash for an item based on its title
8
- * Uses first 8 characters of SHA-256 hash of lowercase trimmed title
9
- */
10
- export function generateItemHash(title) {
11
- const normalizedTitle = title.toLowerCase().trim();
12
- return crypto.createHash("sha256").update(normalizedTitle).digest("hex").slice(0, 8);
13
- }
14
- /**
15
- * Parse ROADMAP.md content into structured items
16
- *
17
- * Supports two formats:
18
- * 1. Checklist format: Lines matching `- [ ] Title` or `- [x] Title`
19
- * with optional description on following indented lines
20
- * 2. Heading format: `### Title` followed by body text (until next heading)
21
- *
22
- * @param content - The raw ROADMAP.md content
23
- * @returns Array of parsed roadmap items
24
- */
25
- export function parseRoadmap(content) {
26
- const items = [];
27
- const lines = content.split("\n");
28
- let currentSection = "General";
29
- for (let i = 0; i < lines.length; i++) {
30
- const line = lines[i];
31
- // Track section headers (## headings)
32
- const sectionMatch = line.match(/^##\s+(.+)$/);
33
- if (sectionMatch) {
34
- currentSection = sectionMatch[1].trim();
35
- continue;
36
- }
37
- // Parse checklist items: - [ ] Title or - [x] Title
38
- const checklistMatch = line.match(/^-\s+\[([ xX])\]\s+(.+)$/);
39
- if (checklistMatch) {
40
- const checked = checklistMatch[1].toLowerCase() === "x";
41
- const title = checklistMatch[2].trim();
42
- // Collect description from following indented lines
43
- const description = collectDescription(lines, i + 1);
44
- items.push({
45
- hash: generateItemHash(title),
46
- title,
47
- description,
48
- checked,
49
- section: currentSection,
50
- });
51
- continue;
52
- }
53
- // Parse heading-based items: ### Title followed by body
54
- const headingMatch = line.match(/^###\s+(.+)$/);
55
- if (headingMatch) {
56
- const title = headingMatch[1].trim();
57
- // Collect description from following lines until next heading
58
- const description = collectDescriptionUntilNextHeading(lines, i + 1);
59
- items.push({
60
- hash: generateItemHash(title),
61
- title,
62
- description,
63
- checked: false, // Heading-based items are never checked
64
- section: currentSection,
65
- });
66
- continue;
67
- }
68
- }
69
- return items;
70
- }
71
- /**
72
- * Collect description from indented lines following a checklist item
73
- * Stops when reaching a non-indented line, another list item, or a heading
74
- */
75
- function collectDescription(lines, startIndex) {
76
- const descriptionLines = [];
77
- for (let i = startIndex; i < lines.length; i++) {
78
- const line = lines[i];
79
- // Stop at empty line
80
- if (line.trim() === "") {
81
- break;
82
- }
83
- // Stop at non-indented line (including headings, other list items)
84
- if (!line.startsWith(" ") && !line.startsWith("\t")) {
85
- break;
86
- }
87
- // Add the line, stripping leading indentation
88
- descriptionLines.push(line.trim());
89
- }
90
- return descriptionLines.join("\n");
91
- }
92
- /**
93
- * Collect description from lines following a ### heading
94
- * Stops when reaching another heading (## or ###)
95
- */
96
- function collectDescriptionUntilNextHeading(lines, startIndex) {
97
- const descriptionLines = [];
98
- for (let i = startIndex; i < lines.length; i++) {
99
- const line = lines[i];
100
- // Stop at any heading
101
- if (line.match(/^#{1,3}\s+/)) {
102
- break;
103
- }
104
- // Stop at empty line followed by another heading
105
- if (line.trim() === "") {
106
- // Look ahead for heading
107
- if (i + 1 < lines.length && lines[i + 1].match(/^#{1,3}\s+/)) {
108
- break;
109
- }
110
- }
111
- descriptionLines.push(line);
112
- }
113
- // Trim trailing empty lines and join
114
- const result = descriptionLines.join("\n").trim();
115
- return result;
116
- }
117
- /**
118
- * Filter roadmap items to only unchecked items (pending work)
119
- */
120
- export function getUncheckedItems(items) {
121
- return items.filter((item) => !item.checked);
122
- }
123
- /**
124
- * Group roadmap items by section
125
- */
126
- export function groupBySection(items) {
127
- const groups = {};
128
- for (const item of items) {
129
- if (!groups[item.section]) {
130
- groups[item.section] = [];
131
- }
132
- groups[item.section].push(item);
133
- }
134
- return groups;
135
- }
136
- //# sourceMappingURL=roadmap-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"roadmap-parser.js","sourceRoot":"","sources":["../../../src/utils/roadmap-parser.ts"],"names":[],"mappings":"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"}
@@ -1,92 +0,0 @@
1
- /**
2
- * Roadmap Scanner for Night Watch CLI
3
- * Scans ROADMAP.md files and generates PRD skeleton files
4
- */
5
- import { INightWatchConfig } from "../types.js";
6
- import { IRoadmapItem } from "./roadmap-parser.js";
7
- /**
8
- * Status of the roadmap scanner
9
- */
10
- export interface IRoadmapStatus {
11
- /** Whether ROADMAP.md file was found */
12
- found: boolean;
13
- /** Whether the scanner is enabled in config */
14
- enabled: boolean;
15
- /** Total number of items in roadmap */
16
- totalItems: number;
17
- /** Number of items that have been processed */
18
- processedItems: number;
19
- /** Number of items pending processing */
20
- pendingItems: number;
21
- /** Current status of the scanner */
22
- status: "idle" | "scanning" | "complete" | "disabled" | "no-roadmap";
23
- /** All roadmap items with processing status */
24
- items: Array<IRoadmapItem & {
25
- processed: boolean;
26
- prdFile?: string;
27
- }>;
28
- }
29
- /**
30
- * Result of a roadmap scan operation
31
- */
32
- export interface IScanResult {
33
- /** List of PRD files created */
34
- created: string[];
35
- /** List of items skipped (already processed or checked) */
36
- skipped: string[];
37
- /** List of errors encountered */
38
- errors: string[];
39
- }
40
- /**
41
- * Result of slicing a single roadmap item
42
- */
43
- export interface ISliceResult {
44
- /** Whether slicing was successful */
45
- sliced: boolean;
46
- /** The created PRD file path (relative to PRD dir) */
47
- file?: string;
48
- /** Error message if slicing failed */
49
- error?: string;
50
- /** The roadmap item that was processed */
51
- item?: IRoadmapItem;
52
- }
53
- /**
54
- * Get the current status of the roadmap scanner
55
- *
56
- * @param projectDir - The project directory
57
- * @param config - The Night Watch configuration
58
- * @returns The roadmap scanner status
59
- */
60
- export declare function getRoadmapStatus(projectDir: string, config: INightWatchConfig): IRoadmapStatus;
61
- /**
62
- * Slice a single roadmap item into a PRD using the AI provider
63
- *
64
- * @param projectDir - The project directory
65
- * @param prdDir - The PRD directory
66
- * @param item - The roadmap item to slice
67
- * @param config - The Night Watch configuration
68
- * @returns The slice result
69
- */
70
- export declare function sliceRoadmapItem(projectDir: string, prdDir: string, item: IRoadmapItem, config: INightWatchConfig): Promise<ISliceResult>;
71
- /**
72
- * Slice the next unprocessed roadmap item
73
- *
74
- * @param projectDir - The project directory
75
- * @param config - The Night Watch configuration
76
- * @returns The slice result
77
- */
78
- export declare function sliceNextItem(projectDir: string, config: INightWatchConfig): Promise<ISliceResult>;
79
- /**
80
- * Scan the roadmap and slice ONE item
81
- * This is now async and processes only a single item per call
82
- *
83
- * @param projectDir - The project directory
84
- * @param config - The Night Watch configuration
85
- * @returns The scan result with created, skipped, and error lists
86
- */
87
- export declare function scanRoadmap(projectDir: string, config: INightWatchConfig): Promise<IScanResult>;
88
- /**
89
- * Check if there are new (unprocessed) items in the roadmap
90
- */
91
- export declare function hasNewItems(projectDir: string, config: INightWatchConfig): boolean;
92
- //# sourceMappingURL=roadmap-scanner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"roadmap-scanner.d.ts","sourceRoot":"","sources":["../../../src/utils/roadmap-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,iBAAiB,EAAY,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAgB,MAAM,qBAAqB,CAAC;AAajE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;IACrE,+CAA+C;IAC/C,KAAK,EAAE,KAAK,CAAC,YAAY,GAAG;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iCAAiC;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,GACxB,cAAc,CA+EhB;AA8CD;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,YAAY,CAAC,CAiHvB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,YAAY,CAAC,CAqFvB;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,WAAW,CAAC,CA2BtB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAGT"}
@@ -1,349 +0,0 @@
1
- /**
2
- * Roadmap Scanner for Night Watch CLI
3
- * Scans ROADMAP.md files and generates PRD skeleton files
4
- */
5
- import * as fs from "fs";
6
- import * as path from "path";
7
- import { spawn } from "child_process";
8
- import { getNextPrdNumber, slugify } from "../commands/prd.js";
9
- import { parseRoadmap } from "./roadmap-parser.js";
10
- import { isItemProcessed, loadRoadmapState, markItemProcessed, saveRoadmapState, } from "./roadmap-state.js";
11
- import { createSlicerPromptVars, renderSlicerPrompt, } from "../templates/slicer-prompt.js";
12
- /**
13
- * Get the current status of the roadmap scanner
14
- *
15
- * @param projectDir - The project directory
16
- * @param config - The Night Watch configuration
17
- * @returns The roadmap scanner status
18
- */
19
- export function getRoadmapStatus(projectDir, config) {
20
- const roadmapPath = path.join(projectDir, config.roadmapScanner.roadmapPath);
21
- // Check if enabled
22
- if (!config.roadmapScanner.enabled) {
23
- return {
24
- found: false,
25
- enabled: false,
26
- totalItems: 0,
27
- processedItems: 0,
28
- pendingItems: 0,
29
- status: "disabled",
30
- items: [],
31
- };
32
- }
33
- // Check if roadmap file exists
34
- if (!fs.existsSync(roadmapPath)) {
35
- return {
36
- found: false,
37
- enabled: true,
38
- totalItems: 0,
39
- processedItems: 0,
40
- pendingItems: 0,
41
- status: "no-roadmap",
42
- items: [],
43
- };
44
- }
45
- // Parse roadmap
46
- const content = fs.readFileSync(roadmapPath, "utf-8");
47
- const items = parseRoadmap(content);
48
- // Load state
49
- const prdDir = path.join(projectDir, config.prdDir);
50
- const state = loadRoadmapState(prdDir);
51
- // Scan existing PRD files for title-based duplicate detection
52
- const existingPrdSlugs = scanExistingPrdSlugs(prdDir);
53
- // Build status items
54
- const statusItems = items.map((item) => {
55
- const processed = isItemProcessed(state, item.hash);
56
- const stateItem = state.items[item.hash];
57
- // Also check for duplicates by title match
58
- const itemSlug = slugify(item.title);
59
- const isDuplicateByTitle = existingPrdSlugs.has(itemSlug) && !processed;
60
- return {
61
- ...item,
62
- processed: processed || isDuplicateByTitle,
63
- prdFile: stateItem?.prdFile,
64
- };
65
- });
66
- // Count processed and pending
67
- const processedItems = statusItems.filter((item) => item.processed).length;
68
- const pendingItems = statusItems.filter((item) => !item.processed && !item.checked).length;
69
- // Determine status
70
- let status;
71
- if (pendingItems === 0 && statusItems.length > 0) {
72
- status = "complete";
73
- }
74
- else {
75
- status = "idle";
76
- }
77
- return {
78
- found: true,
79
- enabled: true,
80
- totalItems: items.length,
81
- processedItems,
82
- pendingItems,
83
- status,
84
- items: statusItems,
85
- };
86
- }
87
- /**
88
- * Scan existing PRD files and extract their slugs for duplicate detection
89
- */
90
- function scanExistingPrdSlugs(prdDir) {
91
- const slugs = new Set();
92
- if (!fs.existsSync(prdDir)) {
93
- return slugs;
94
- }
95
- const files = fs.readdirSync(prdDir);
96
- for (const file of files) {
97
- // Skip non-markdown files and special files
98
- if (!file.endsWith(".md") || file === "NIGHT-WATCH-SUMMARY.md") {
99
- continue;
100
- }
101
- // Extract slug from filename (e.g., "01-feature-name.md" -> "feature-name")
102
- const match = file.match(/^\d+-(.+)\.md$/);
103
- if (match) {
104
- slugs.add(match[1]);
105
- }
106
- else {
107
- // Handle files without number prefix
108
- const slugMatch = file.match(/^(.+)\.md$/);
109
- if (slugMatch) {
110
- slugs.add(slugMatch[1]);
111
- }
112
- }
113
- }
114
- return slugs;
115
- }
116
- /**
117
- * Build provider CLI arguments based on provider type
118
- */
119
- function buildProviderArgs(provider, prompt) {
120
- if (provider === "codex") {
121
- return ["--quiet", "--yolo", "--prompt", prompt];
122
- }
123
- // Default: claude
124
- return ["-p", prompt, "--dangerously-skip-permissions"];
125
- }
126
- /**
127
- * Slice a single roadmap item into a PRD using the AI provider
128
- *
129
- * @param projectDir - The project directory
130
- * @param prdDir - The PRD directory
131
- * @param item - The roadmap item to slice
132
- * @param config - The Night Watch configuration
133
- * @returns The slice result
134
- */
135
- export async function sliceRoadmapItem(projectDir, prdDir, item, config) {
136
- // Check for duplicate by slug
137
- const itemSlug = slugify(item.title);
138
- const existingPrdSlugs = scanExistingPrdSlugs(prdDir);
139
- if (existingPrdSlugs.has(itemSlug)) {
140
- return {
141
- sliced: false,
142
- error: `Duplicate detected: PRD with slug "${itemSlug}" already exists`,
143
- item,
144
- };
145
- }
146
- // Compute next PRD number and filename
147
- const nextNum = getNextPrdNumber(prdDir);
148
- const padded = String(nextNum).padStart(2, "0");
149
- const filename = `${padded}-${itemSlug}.md`;
150
- const filePath = path.join(prdDir, filename);
151
- // Ensure PRD directory exists
152
- if (!fs.existsSync(prdDir)) {
153
- fs.mkdirSync(prdDir, { recursive: true });
154
- }
155
- // Build slicer prompt
156
- const promptVars = createSlicerPromptVars(item.title, item.section, item.description, prdDir, filename);
157
- const prompt = renderSlicerPrompt(promptVars);
158
- // Spawn the AI provider
159
- const providerArgs = buildProviderArgs(config.provider, prompt);
160
- // Create log file for stdout/stderr
161
- const logDir = path.join(projectDir, "logs");
162
- if (!fs.existsSync(logDir)) {
163
- fs.mkdirSync(logDir, { recursive: true });
164
- }
165
- const logFile = path.join(logDir, `slicer-${itemSlug}.log`);
166
- const logStream = fs.createWriteStream(logFile, { flags: "w" });
167
- // Handle log stream errors silently (don't fail the slice on logging errors)
168
- logStream.on("error", () => {
169
- // Silently ignore log file errors - the main operation is more important
170
- });
171
- return new Promise((resolve) => {
172
- // Merge providerEnv with process.env
173
- const childEnv = {
174
- ...process.env,
175
- ...config.providerEnv,
176
- };
177
- const child = spawn(config.provider, providerArgs, {
178
- env: childEnv,
179
- cwd: projectDir,
180
- stdio: ["inherit", "pipe", "pipe"],
181
- });
182
- // Pipe stdout to log file
183
- child.stdout?.on("data", (data) => {
184
- logStream.write(data);
185
- });
186
- // Pipe stderr to log file
187
- child.stderr?.on("data", (data) => {
188
- logStream.write(data);
189
- });
190
- // Handle process errors
191
- child.on("error", (error) => {
192
- logStream.end();
193
- resolve({
194
- sliced: false,
195
- error: `Failed to spawn provider: ${error.message}`,
196
- item,
197
- });
198
- });
199
- // Handle process completion
200
- child.on("close", (code) => {
201
- logStream.end();
202
- if (code !== 0) {
203
- resolve({
204
- sliced: false,
205
- error: `Provider exited with code ${code ?? 1}`,
206
- item,
207
- });
208
- return;
209
- }
210
- // Verify output file was created
211
- if (!fs.existsSync(filePath)) {
212
- resolve({
213
- sliced: false,
214
- error: `Provider did not create expected file: ${filePath}`,
215
- item,
216
- });
217
- return;
218
- }
219
- resolve({
220
- sliced: true,
221
- file: filename,
222
- item,
223
- });
224
- });
225
- });
226
- }
227
- /**
228
- * Slice the next unprocessed roadmap item
229
- *
230
- * @param projectDir - The project directory
231
- * @param config - The Night Watch configuration
232
- * @returns The slice result
233
- */
234
- export async function sliceNextItem(projectDir, config) {
235
- // Check if scanner is enabled
236
- if (!config.roadmapScanner.enabled) {
237
- return {
238
- sliced: false,
239
- error: "Roadmap scanner is disabled",
240
- };
241
- }
242
- const roadmapPath = path.join(projectDir, config.roadmapScanner.roadmapPath);
243
- // Check if roadmap file exists
244
- if (!fs.existsSync(roadmapPath)) {
245
- return {
246
- sliced: false,
247
- error: "ROADMAP.md not found",
248
- };
249
- }
250
- // Parse roadmap
251
- const content = fs.readFileSync(roadmapPath, "utf-8");
252
- const items = parseRoadmap(content);
253
- if (items.length === 0) {
254
- return {
255
- sliced: false,
256
- error: "No items in roadmap",
257
- };
258
- }
259
- // Setup PRD directory
260
- const prdDir = path.join(projectDir, config.prdDir);
261
- // Load state
262
- const state = loadRoadmapState(prdDir);
263
- // Scan existing PRD files for duplicate detection
264
- const existingPrdSlugs = scanExistingPrdSlugs(prdDir);
265
- // Find first unprocessed, unchecked, non-duplicate item
266
- let targetItem;
267
- for (const item of items) {
268
- // Skip checked items
269
- if (item.checked) {
270
- continue;
271
- }
272
- // Skip already processed items
273
- if (isItemProcessed(state, item.hash)) {
274
- continue;
275
- }
276
- // Skip duplicates by title
277
- const itemSlug = slugify(item.title);
278
- if (existingPrdSlugs.has(itemSlug)) {
279
- continue;
280
- }
281
- targetItem = item;
282
- break;
283
- }
284
- if (!targetItem) {
285
- return {
286
- sliced: false,
287
- error: "No pending items to process",
288
- };
289
- }
290
- // Slice the item
291
- const result = await sliceRoadmapItem(projectDir, prdDir, targetItem, config);
292
- // On success, update state
293
- if (result.sliced && result.file) {
294
- let updatedState = loadRoadmapState(prdDir);
295
- const stateItem = {
296
- title: targetItem.title,
297
- prdFile: result.file,
298
- createdAt: new Date().toISOString(),
299
- };
300
- updatedState = markItemProcessed(updatedState, targetItem.hash, stateItem);
301
- saveRoadmapState(prdDir, updatedState);
302
- }
303
- return result;
304
- }
305
- /**
306
- * Scan the roadmap and slice ONE item
307
- * This is now async and processes only a single item per call
308
- *
309
- * @param projectDir - The project directory
310
- * @param config - The Night Watch configuration
311
- * @returns The scan result with created, skipped, and error lists
312
- */
313
- export async function scanRoadmap(projectDir, config) {
314
- const result = {
315
- created: [],
316
- skipped: [],
317
- errors: [],
318
- };
319
- // Slice just one item
320
- const sliceResult = await sliceNextItem(projectDir, config);
321
- if (sliceResult.sliced && sliceResult.file) {
322
- result.created.push(sliceResult.file);
323
- }
324
- else if (sliceResult.item) {
325
- // Item was found but not sliced
326
- if (sliceResult.error?.includes("checked")) {
327
- result.skipped.push(`${sliceResult.item.title} (checked)`);
328
- }
329
- else if (sliceResult.error?.includes("processed")) {
330
- result.skipped.push(`${sliceResult.item.title} (processed)`);
331
- }
332
- else if (sliceResult.error?.includes("duplicate")) {
333
- result.skipped.push(`${sliceResult.item.title} (duplicate)`);
334
- }
335
- else if (sliceResult.error) {
336
- result.errors.push(`${sliceResult.item.title}: ${sliceResult.error}`);
337
- }
338
- }
339
- // If no item was found (all done or no items), return empty result
340
- return result;
341
- }
342
- /**
343
- * Check if there are new (unprocessed) items in the roadmap
344
- */
345
- export function hasNewItems(projectDir, config) {
346
- const status = getRoadmapStatus(projectDir, config);
347
- return status.pendingItems > 0;
348
- }
349
- //# sourceMappingURL=roadmap-scanner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"roadmap-scanner.js","sourceRoot":"","sources":["../../../src/utils/roadmap-scanner.ts"],"names":[],"mappings":"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"}