@jonit-dev/night-watch-cli 1.7.9 → 1.7.11

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 (350) hide show
  1. package/LICENSE +1 -1
  2. package/dist/cli.js +3 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/dashboard/tab-config.d.ts.map +1 -1
  5. package/dist/commands/dashboard/tab-config.js +9 -1
  6. package/dist/commands/dashboard/tab-config.js.map +1 -1
  7. package/dist/commands/doctor.d.ts.map +1 -1
  8. package/dist/commands/doctor.js +3 -0
  9. package/dist/commands/doctor.js.map +1 -1
  10. package/dist/commands/init.d.ts.map +1 -1
  11. package/dist/commands/init.js +131 -19
  12. package/dist/commands/init.js.map +1 -1
  13. package/dist/commands/install.d.ts +4 -0
  14. package/dist/commands/install.d.ts.map +1 -1
  15. package/dist/commands/install.js +24 -0
  16. package/dist/commands/install.js.map +1 -1
  17. package/dist/commands/qa.d.ts +30 -0
  18. package/dist/commands/qa.d.ts.map +1 -0
  19. package/dist/commands/qa.js +159 -0
  20. package/dist/commands/qa.js.map +1 -0
  21. package/dist/commands/review.d.ts +5 -0
  22. package/dist/commands/review.d.ts.map +1 -1
  23. package/dist/commands/review.js +40 -0
  24. package/dist/commands/review.js.map +1 -1
  25. package/dist/commands/run.d.ts +11 -0
  26. package/dist/commands/run.d.ts.map +1 -1
  27. package/dist/commands/run.js +56 -1
  28. package/dist/commands/run.js.map +1 -1
  29. package/dist/commands/status.d.ts.map +1 -1
  30. package/dist/commands/status.js +3 -0
  31. package/dist/commands/status.js.map +1 -1
  32. package/dist/config.d.ts.map +1 -1
  33. package/dist/config.js +155 -1
  34. package/dist/config.js.map +1 -1
  35. package/dist/constants.d.ts +20 -1
  36. package/dist/constants.d.ts.map +1 -1
  37. package/dist/constants.js +40 -0
  38. package/dist/constants.js.map +1 -1
  39. package/dist/server/index.d.ts.map +1 -1
  40. package/dist/server/index.js +47 -5
  41. package/dist/server/index.js.map +1 -1
  42. package/dist/shared/types.d.ts +223 -0
  43. package/dist/shared/types.d.ts.map +1 -0
  44. package/dist/shared/types.js +7 -0
  45. package/dist/shared/types.js.map +1 -0
  46. package/dist/src/agents/soul-compiler.d.ts +11 -0
  47. package/dist/src/agents/soul-compiler.d.ts.map +1 -0
  48. package/dist/src/agents/soul-compiler.js +103 -0
  49. package/dist/src/agents/soul-compiler.js.map +1 -0
  50. package/dist/src/board/factory.d.ts +3 -0
  51. package/dist/src/board/factory.d.ts.map +1 -0
  52. package/dist/src/board/factory.js +10 -0
  53. package/dist/src/board/factory.js.map +1 -0
  54. package/dist/src/board/providers/github-graphql.d.ts +16 -0
  55. package/dist/src/board/providers/github-graphql.d.ts.map +1 -0
  56. package/dist/src/board/providers/github-graphql.js +43 -0
  57. package/dist/src/board/providers/github-graphql.js.map +1 -0
  58. package/dist/src/board/providers/github-projects.d.ts +51 -0
  59. package/dist/src/board/providers/github-projects.d.ts.map +1 -0
  60. package/dist/src/board/providers/github-projects.js +672 -0
  61. package/dist/src/board/providers/github-projects.js.map +1 -0
  62. package/dist/src/board/types.d.ts +60 -0
  63. package/dist/src/board/types.d.ts.map +1 -0
  64. package/dist/src/board/types.js +4 -0
  65. package/dist/src/board/types.js.map +1 -0
  66. package/dist/src/cli.d.ts +3 -0
  67. package/dist/src/cli.d.ts.map +1 -0
  68. package/dist/src/cli.js +80 -0
  69. package/dist/src/cli.js.map +1 -0
  70. package/dist/src/commands/board.d.ts +9 -0
  71. package/dist/src/commands/board.d.ts.map +1 -0
  72. package/dist/src/commands/board.js +294 -0
  73. package/dist/src/commands/board.js.map +1 -0
  74. package/dist/src/commands/cancel.d.ts +46 -0
  75. package/dist/src/commands/cancel.d.ts.map +1 -0
  76. package/dist/src/commands/cancel.js +241 -0
  77. package/dist/src/commands/cancel.js.map +1 -0
  78. package/dist/src/commands/dashboard/tab-actions.d.ts +10 -0
  79. package/dist/src/commands/dashboard/tab-actions.d.ts.map +1 -0
  80. package/dist/src/commands/dashboard/tab-actions.js +245 -0
  81. package/dist/src/commands/dashboard/tab-actions.js.map +1 -0
  82. package/dist/src/commands/dashboard/tab-config.d.ts +21 -0
  83. package/dist/src/commands/dashboard/tab-config.d.ts.map +1 -0
  84. package/dist/src/commands/dashboard/tab-config.js +829 -0
  85. package/dist/src/commands/dashboard/tab-config.js.map +1 -0
  86. package/dist/src/commands/dashboard/tab-logs.d.ts +10 -0
  87. package/dist/src/commands/dashboard/tab-logs.d.ts.map +1 -0
  88. package/dist/src/commands/dashboard/tab-logs.js +178 -0
  89. package/dist/src/commands/dashboard/tab-logs.js.map +1 -0
  90. package/dist/src/commands/dashboard/tab-schedules.d.ts +21 -0
  91. package/dist/src/commands/dashboard/tab-schedules.d.ts.map +1 -0
  92. package/dist/src/commands/dashboard/tab-schedules.js +304 -0
  93. package/dist/src/commands/dashboard/tab-schedules.js.map +1 -0
  94. package/dist/src/commands/dashboard/tab-status.d.ts +32 -0
  95. package/dist/src/commands/dashboard/tab-status.d.ts.map +1 -0
  96. package/dist/src/commands/dashboard/tab-status.js +421 -0
  97. package/dist/src/commands/dashboard/tab-status.js.map +1 -0
  98. package/dist/src/commands/dashboard/types.d.ts +43 -0
  99. package/dist/src/commands/dashboard/types.d.ts.map +1 -0
  100. package/dist/src/commands/dashboard/types.js +5 -0
  101. package/dist/src/commands/dashboard/types.js.map +1 -0
  102. package/dist/src/commands/dashboard.d.ts +11 -0
  103. package/dist/src/commands/dashboard.d.ts.map +1 -0
  104. package/dist/src/commands/dashboard.js +239 -0
  105. package/dist/src/commands/dashboard.js.map +1 -0
  106. package/dist/src/commands/doctor.d.ts +16 -0
  107. package/dist/src/commands/doctor.d.ts.map +1 -0
  108. package/dist/src/commands/doctor.js +202 -0
  109. package/dist/src/commands/doctor.js.map +1 -0
  110. package/dist/src/commands/history.d.ts +7 -0
  111. package/dist/src/commands/history.d.ts.map +1 -0
  112. package/dist/src/commands/history.js +56 -0
  113. package/dist/src/commands/history.js.map +1 -0
  114. package/dist/src/commands/init.d.ts +25 -0
  115. package/dist/src/commands/init.d.ts.map +1 -0
  116. package/dist/src/commands/init.js +543 -0
  117. package/dist/src/commands/init.js.map +1 -0
  118. package/dist/src/commands/install.d.ts +48 -0
  119. package/dist/src/commands/install.d.ts.map +1 -0
  120. package/dist/src/commands/install.js +303 -0
  121. package/dist/src/commands/install.js.map +1 -0
  122. package/dist/src/commands/logs.d.ts +15 -0
  123. package/dist/src/commands/logs.d.ts.map +1 -0
  124. package/dist/src/commands/logs.js +104 -0
  125. package/dist/src/commands/logs.js.map +1 -0
  126. package/dist/src/commands/prd-state.d.ts +12 -0
  127. package/dist/src/commands/prd-state.d.ts.map +1 -0
  128. package/dist/src/commands/prd-state.js +47 -0
  129. package/dist/src/commands/prd-state.js.map +1 -0
  130. package/dist/src/commands/prd.d.ts +24 -0
  131. package/dist/src/commands/prd.d.ts.map +1 -0
  132. package/dist/src/commands/prd.js +283 -0
  133. package/dist/src/commands/prd.js.map +1 -0
  134. package/dist/src/commands/prds.d.ts +13 -0
  135. package/dist/src/commands/prds.d.ts.map +1 -0
  136. package/dist/src/commands/prds.js +196 -0
  137. package/dist/src/commands/prds.js.map +1 -0
  138. package/dist/src/commands/prs.d.ts +14 -0
  139. package/dist/src/commands/prs.d.ts.map +1 -0
  140. package/dist/src/commands/prs.js +106 -0
  141. package/dist/src/commands/prs.js.map +1 -0
  142. package/dist/src/commands/qa.d.ts +30 -0
  143. package/dist/src/commands/qa.d.ts.map +1 -0
  144. package/dist/src/commands/qa.js +159 -0
  145. package/dist/src/commands/qa.js.map +1 -0
  146. package/dist/src/commands/retry.d.ts +9 -0
  147. package/dist/src/commands/retry.d.ts.map +1 -0
  148. package/dist/src/commands/retry.js +72 -0
  149. package/dist/src/commands/retry.js.map +1 -0
  150. package/dist/src/commands/review.d.ts +35 -0
  151. package/dist/src/commands/review.d.ts.map +1 -0
  152. package/dist/src/commands/review.js +252 -0
  153. package/dist/src/commands/review.js.map +1 -0
  154. package/dist/src/commands/run.d.ts +61 -0
  155. package/dist/src/commands/run.d.ts.map +1 -0
  156. package/dist/src/commands/run.js +364 -0
  157. package/dist/src/commands/run.js.map +1 -0
  158. package/dist/src/commands/serve.d.ts +7 -0
  159. package/dist/src/commands/serve.d.ts.map +1 -0
  160. package/dist/src/commands/serve.js +27 -0
  161. package/dist/src/commands/serve.js.map +1 -0
  162. package/dist/src/commands/slice.d.ts +26 -0
  163. package/dist/src/commands/slice.d.ts.map +1 -0
  164. package/dist/src/commands/slice.js +175 -0
  165. package/dist/src/commands/slice.js.map +1 -0
  166. package/dist/src/commands/state.d.ts +8 -0
  167. package/dist/src/commands/state.d.ts.map +1 -0
  168. package/dist/src/commands/state.js +56 -0
  169. package/dist/src/commands/state.js.map +1 -0
  170. package/dist/src/commands/status.d.ts +14 -0
  171. package/dist/src/commands/status.d.ts.map +1 -0
  172. package/dist/src/commands/status.js +147 -0
  173. package/dist/src/commands/status.js.map +1 -0
  174. package/dist/src/commands/uninstall.d.ts +25 -0
  175. package/dist/src/commands/uninstall.d.ts.map +1 -0
  176. package/dist/src/commands/uninstall.js +141 -0
  177. package/dist/src/commands/uninstall.js.map +1 -0
  178. package/dist/src/commands/update.d.ts +21 -0
  179. package/dist/src/commands/update.d.ts.map +1 -0
  180. package/dist/src/commands/update.js +87 -0
  181. package/dist/src/commands/update.js.map +1 -0
  182. package/dist/src/config.d.ts +23 -0
  183. package/dist/src/config.d.ts.map +1 -0
  184. package/dist/src/config.js +629 -0
  185. package/dist/src/config.js.map +1 -0
  186. package/dist/src/constants.d.ts +60 -0
  187. package/dist/src/constants.d.ts.map +1 -0
  188. package/dist/src/constants.js +118 -0
  189. package/dist/src/constants.js.map +1 -0
  190. package/dist/src/server/index.d.ts +23 -0
  191. package/dist/src/server/index.d.ts.map +1 -0
  192. package/dist/src/server/index.js +1642 -0
  193. package/dist/src/server/index.js.map +1 -0
  194. package/dist/src/slack/channel-manager.d.ts +32 -0
  195. package/dist/src/slack/channel-manager.d.ts.map +1 -0
  196. package/dist/src/slack/channel-manager.js +128 -0
  197. package/dist/src/slack/channel-manager.js.map +1 -0
  198. package/dist/src/slack/client.d.ts +63 -0
  199. package/dist/src/slack/client.d.ts.map +1 -0
  200. package/dist/src/slack/client.js +151 -0
  201. package/dist/src/slack/client.js.map +1 -0
  202. package/dist/src/slack/deliberation.d.ts +45 -0
  203. package/dist/src/slack/deliberation.d.ts.map +1 -0
  204. package/dist/src/slack/deliberation.js +539 -0
  205. package/dist/src/slack/deliberation.js.map +1 -0
  206. package/dist/src/slack/index.d.ts +6 -0
  207. package/dist/src/slack/index.d.ts.map +1 -0
  208. package/dist/src/slack/index.js +5 -0
  209. package/dist/src/slack/index.js.map +1 -0
  210. package/dist/src/slack/interaction-listener.d.ts +47 -0
  211. package/dist/src/slack/interaction-listener.d.ts.map +1 -0
  212. package/dist/src/slack/interaction-listener.js +216 -0
  213. package/dist/src/slack/interaction-listener.js.map +1 -0
  214. package/dist/src/storage/json-state-migrator.d.ts +24 -0
  215. package/dist/src/storage/json-state-migrator.d.ts.map +1 -0
  216. package/dist/src/storage/json-state-migrator.js +197 -0
  217. package/dist/src/storage/json-state-migrator.js.map +1 -0
  218. package/dist/src/storage/repositories/index.d.ts +25 -0
  219. package/dist/src/storage/repositories/index.d.ts.map +1 -0
  220. package/dist/src/storage/repositories/index.js +43 -0
  221. package/dist/src/storage/repositories/index.js.map +1 -0
  222. package/dist/src/storage/repositories/interfaces.d.ts +59 -0
  223. package/dist/src/storage/repositories/interfaces.d.ts.map +1 -0
  224. package/dist/src/storage/repositories/interfaces.js +6 -0
  225. package/dist/src/storage/repositories/interfaces.js.map +1 -0
  226. package/dist/src/storage/repositories/sqlite/agent-persona-repository.d.ts +27 -0
  227. package/dist/src/storage/repositories/sqlite/agent-persona-repository.d.ts.map +1 -0
  228. package/dist/src/storage/repositories/sqlite/agent-persona-repository.js +569 -0
  229. package/dist/src/storage/repositories/sqlite/agent-persona-repository.js.map +1 -0
  230. package/dist/src/storage/repositories/sqlite/execution-history-repository.d.ts +21 -0
  231. package/dist/src/storage/repositories/sqlite/execution-history-repository.d.ts.map +1 -0
  232. package/dist/src/storage/repositories/sqlite/execution-history-repository.js +94 -0
  233. package/dist/src/storage/repositories/sqlite/execution-history-repository.js.map +1 -0
  234. package/dist/src/storage/repositories/sqlite/prd-state-repository.d.ts +17 -0
  235. package/dist/src/storage/repositories/sqlite/prd-state-repository.d.ts.map +1 -0
  236. package/dist/src/storage/repositories/sqlite/prd-state-repository.js +74 -0
  237. package/dist/src/storage/repositories/sqlite/prd-state-repository.js.map +1 -0
  238. package/dist/src/storage/repositories/sqlite/project-registry-repository.d.ts +17 -0
  239. package/dist/src/storage/repositories/sqlite/project-registry-repository.d.ts.map +1 -0
  240. package/dist/src/storage/repositories/sqlite/project-registry-repository.js +43 -0
  241. package/dist/src/storage/repositories/sqlite/project-registry-repository.js.map +1 -0
  242. package/dist/src/storage/repositories/sqlite/roadmap-state-repository.d.ts +14 -0
  243. package/dist/src/storage/repositories/sqlite/roadmap-state-repository.d.ts.map +1 -0
  244. package/dist/src/storage/repositories/sqlite/roadmap-state-repository.js +47 -0
  245. package/dist/src/storage/repositories/sqlite/roadmap-state-repository.js.map +1 -0
  246. package/dist/src/storage/repositories/sqlite/slack-discussion-repository.d.ts +20 -0
  247. package/dist/src/storage/repositories/sqlite/slack-discussion-repository.d.ts.map +1 -0
  248. package/dist/src/storage/repositories/sqlite/slack-discussion-repository.js +88 -0
  249. package/dist/src/storage/repositories/sqlite/slack-discussion-repository.js.map +1 -0
  250. package/dist/src/storage/sqlite/client.d.ts +23 -0
  251. package/dist/src/storage/sqlite/client.d.ts.map +1 -0
  252. package/dist/src/storage/sqlite/client.js +47 -0
  253. package/dist/src/storage/sqlite/client.js.map +1 -0
  254. package/dist/src/storage/sqlite/migrations.d.ts +11 -0
  255. package/dist/src/storage/sqlite/migrations.d.ts.map +1 -0
  256. package/dist/src/storage/sqlite/migrations.js +94 -0
  257. package/dist/src/storage/sqlite/migrations.js.map +1 -0
  258. package/dist/src/templates/prd-template.d.ts +11 -0
  259. package/dist/src/templates/prd-template.d.ts.map +1 -0
  260. package/dist/src/templates/prd-template.js +166 -0
  261. package/dist/src/templates/prd-template.js.map +1 -0
  262. package/dist/src/templates/slicer-prompt.d.ts +54 -0
  263. package/dist/src/templates/slicer-prompt.d.ts.map +1 -0
  264. package/dist/src/templates/slicer-prompt.js +163 -0
  265. package/dist/src/templates/slicer-prompt.js.map +1 -0
  266. package/dist/src/types.d.ts +127 -0
  267. package/dist/src/types.d.ts.map +1 -0
  268. package/dist/src/types.js +5 -0
  269. package/dist/src/types.js.map +1 -0
  270. package/dist/src/utils/checks.d.ts +55 -0
  271. package/dist/src/utils/checks.d.ts.map +1 -0
  272. package/dist/src/utils/checks.js +246 -0
  273. package/dist/src/utils/checks.js.map +1 -0
  274. package/dist/src/utils/config-writer.d.ts +16 -0
  275. package/dist/src/utils/config-writer.d.ts.map +1 -0
  276. package/dist/src/utils/config-writer.js +45 -0
  277. package/dist/src/utils/config-writer.js.map +1 -0
  278. package/dist/src/utils/crontab.d.ts +62 -0
  279. package/dist/src/utils/crontab.d.ts.map +1 -0
  280. package/dist/src/utils/crontab.js +168 -0
  281. package/dist/src/utils/crontab.js.map +1 -0
  282. package/dist/src/utils/execution-history.d.ts +54 -0
  283. package/dist/src/utils/execution-history.d.ts.map +1 -0
  284. package/dist/src/utils/execution-history.js +80 -0
  285. package/dist/src/utils/execution-history.js.map +1 -0
  286. package/dist/src/utils/github.d.ts +40 -0
  287. package/dist/src/utils/github.d.ts.map +1 -0
  288. package/dist/src/utils/github.js +126 -0
  289. package/dist/src/utils/github.js.map +1 -0
  290. package/dist/src/utils/notify.d.ts +63 -0
  291. package/dist/src/utils/notify.d.ts.map +1 -0
  292. package/dist/src/utils/notify.js +389 -0
  293. package/dist/src/utils/notify.js.map +1 -0
  294. package/dist/src/utils/prd-states.d.ts +16 -0
  295. package/dist/src/utils/prd-states.d.ts.map +1 -0
  296. package/dist/src/utils/prd-states.js +28 -0
  297. package/dist/src/utils/prd-states.js.map +1 -0
  298. package/dist/src/utils/registry.d.ts +45 -0
  299. package/dist/src/utils/registry.d.ts.map +1 -0
  300. package/dist/src/utils/registry.js +86 -0
  301. package/dist/src/utils/registry.js.map +1 -0
  302. package/dist/src/utils/roadmap-parser.d.ts +45 -0
  303. package/dist/src/utils/roadmap-parser.d.ts.map +1 -0
  304. package/dist/src/utils/roadmap-parser.js +136 -0
  305. package/dist/src/utils/roadmap-parser.js.map +1 -0
  306. package/dist/src/utils/roadmap-scanner.d.ts +92 -0
  307. package/dist/src/utils/roadmap-scanner.d.ts.map +1 -0
  308. package/dist/src/utils/roadmap-scanner.js +349 -0
  309. package/dist/src/utils/roadmap-scanner.js.map +1 -0
  310. package/dist/src/utils/roadmap-state.d.ts +90 -0
  311. package/dist/src/utils/roadmap-state.d.ts.map +1 -0
  312. package/dist/src/utils/roadmap-state.js +154 -0
  313. package/dist/src/utils/roadmap-state.js.map +1 -0
  314. package/dist/src/utils/script-result.d.ts +12 -0
  315. package/dist/src/utils/script-result.d.ts.map +1 -0
  316. package/dist/src/utils/script-result.js +46 -0
  317. package/dist/src/utils/script-result.js.map +1 -0
  318. package/dist/src/utils/shell.d.ts +27 -0
  319. package/dist/src/utils/shell.d.ts.map +1 -0
  320. package/dist/src/utils/shell.js +64 -0
  321. package/dist/src/utils/shell.js.map +1 -0
  322. package/dist/src/utils/status-data.d.ts +148 -0
  323. package/dist/src/utils/status-data.d.ts.map +1 -0
  324. package/dist/src/utils/status-data.js +593 -0
  325. package/dist/src/utils/status-data.js.map +1 -0
  326. package/dist/src/utils/ui.d.ts +55 -0
  327. package/dist/src/utils/ui.d.ts.map +1 -0
  328. package/dist/src/utils/ui.js +121 -0
  329. package/dist/src/utils/ui.js.map +1 -0
  330. package/dist/types.d.ts +43 -1
  331. package/dist/types.d.ts.map +1 -1
  332. package/dist/utils/notify.d.ts.map +1 -1
  333. package/dist/utils/notify.js +18 -0
  334. package/dist/utils/notify.js.map +1 -1
  335. package/dist/utils/status-data.d.ts +4 -0
  336. package/dist/utils/status-data.d.ts.map +1 -1
  337. package/dist/utils/status-data.js +13 -3
  338. package/dist/utils/status-data.js.map +1 -1
  339. package/package.json +3 -1
  340. package/scripts/night-watch-cron.sh +50 -2
  341. package/scripts/night-watch-helpers.sh +54 -2
  342. package/scripts/night-watch-pr-reviewer-cron.sh +79 -1
  343. package/scripts/night-watch-qa-cron.sh +269 -0
  344. package/templates/night-watch-qa.md +157 -0
  345. package/templates/night-watch.config.json +14 -1
  346. package/web/dist/assets/index-BtxQU4oX.css +1 -0
  347. package/web/dist/assets/index-CsNIryJz.js +473 -0
  348. package/web/dist/index.html +2 -2
  349. package/web/dist/assets/index-C64sy08d.js +0 -360
  350. package/web/dist/assets/index-DzoZeo_Y.css +0 -1
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Run command - executes the PRD cron script
3
+ */
4
+ import { Command } from "commander";
5
+ import { INightWatchConfig, NotificationEvent } from "../types.js";
6
+ /**
7
+ * Options for the run command
8
+ */
9
+ export interface IRunOptions {
10
+ dryRun: boolean;
11
+ timeout?: string;
12
+ provider?: string;
13
+ }
14
+ /**
15
+ * Map executor exit/result state to a notification event.
16
+ * Returns null when the run completed with no actionable work (skip/no-op).
17
+ */
18
+ export declare function resolveRunNotificationEvent(exitCode: number, scriptStatus?: string): NotificationEvent | null;
19
+ /**
20
+ * Return Telegram webhooks that opted in to rate-limit fallback notifications.
21
+ */
22
+ export declare function getRateLimitFallbackTelegramWebhooks(config: INightWatchConfig): Array<{
23
+ botToken: string;
24
+ chatId: string;
25
+ }>;
26
+ /**
27
+ * Whether the bash execution reported a rate-limit fallback trigger.
28
+ */
29
+ export declare function isRateLimitFallbackTriggered(resultData?: Record<string, string>): boolean;
30
+ /**
31
+ * Build environment variables map from config and CLI options
32
+ */
33
+ export declare function buildEnvVars(config: INightWatchConfig, options: IRunOptions): Record<string, string>;
34
+ /**
35
+ * Apply CLI flag overrides to the config
36
+ */
37
+ export declare function applyCliOverrides(config: INightWatchConfig, options: IRunOptions): INightWatchConfig;
38
+ /**
39
+ * Information about a scanned PRD file, including claim status
40
+ */
41
+ export interface IPrdScanItem {
42
+ name: string;
43
+ claimed: boolean;
44
+ claimInfo: {
45
+ hostname: string;
46
+ pid: number;
47
+ timestamp: number;
48
+ } | null;
49
+ }
50
+ /**
51
+ * Scan the PRD directory for eligible PRD files
52
+ */
53
+ export declare function scanPrdDirectory(projectDir: string, prdDir: string, maxRuntime: number): {
54
+ pending: IPrdScanItem[];
55
+ completed: string[];
56
+ };
57
+ /**
58
+ * Register the run command with the program
59
+ */
60
+ export declare function runCommand(program: Command): void;
61
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,iBAAiB,EAAkB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAiBnF;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,GACpB,iBAAiB,GAAG,IAAI,CAW1B;AAED;;GAEG;AACH,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,iBAAiB,GACxB,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAW7C;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAEzF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuEpG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,GAAG,iBAAiB,CAepG;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CA8CzI;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsMjD"}
@@ -0,0 +1,364 @@
1
+ /**
2
+ * Run command - executes the PRD cron script
3
+ */
4
+ import { getScriptPath, loadConfig } from "../config.js";
5
+ import { createBoardProvider } from "../board/factory.js";
6
+ import { executeScriptWithOutput } from "../utils/shell.js";
7
+ import { sendNotifications } from "../utils/notify.js";
8
+ import { fetchPrDetails, fetchPrDetailsForBranch } from "../utils/github.js";
9
+ import { CLAIM_FILE_EXTENSION, CLAUDE_MODEL_IDS, PROVIDER_COMMANDS } from "../constants.js";
10
+ import * as fs from "fs";
11
+ import * as path from "path";
12
+ import { parseScriptResult } from "../utils/script-result.js";
13
+ import { createSpinner, createTable, dim, header, info, error as uiError, } from "../utils/ui.js";
14
+ /**
15
+ * Map executor exit/result state to a notification event.
16
+ * Returns null when the run completed with no actionable work (skip/no-op).
17
+ */
18
+ export function resolveRunNotificationEvent(exitCode, scriptStatus) {
19
+ if (exitCode === 124) {
20
+ return "run_timeout";
21
+ }
22
+ if (exitCode !== 0) {
23
+ return "run_failed";
24
+ }
25
+ if (!scriptStatus || scriptStatus === "success_open_pr") {
26
+ return "run_succeeded";
27
+ }
28
+ return null;
29
+ }
30
+ /**
31
+ * Return Telegram webhooks that opted in to rate-limit fallback notifications.
32
+ */
33
+ export function getRateLimitFallbackTelegramWebhooks(config) {
34
+ return (config.notifications?.webhooks ?? [])
35
+ .filter((wh) => wh.type === "telegram"
36
+ && typeof wh.botToken === "string"
37
+ && wh.botToken.trim().length > 0
38
+ && typeof wh.chatId === "string"
39
+ && wh.chatId.trim().length > 0
40
+ && wh.events.includes("rate_limit_fallback"))
41
+ .map((wh) => ({ botToken: wh.botToken, chatId: wh.chatId }));
42
+ }
43
+ /**
44
+ * Whether the bash execution reported a rate-limit fallback trigger.
45
+ */
46
+ export function isRateLimitFallbackTriggered(resultData) {
47
+ return resultData?.rate_limit_fallback === "1";
48
+ }
49
+ /**
50
+ * Build environment variables map from config and CLI options
51
+ */
52
+ export function buildEnvVars(config, options) {
53
+ const env = {};
54
+ // Provider command - the actual CLI binary to call
55
+ env.NW_PROVIDER_CMD = PROVIDER_COMMANDS[config.provider];
56
+ // Default branch (empty = auto-detect in bash script)
57
+ if (config.defaultBranch) {
58
+ env.NW_DEFAULT_BRANCH = config.defaultBranch;
59
+ }
60
+ // Runtime
61
+ env.NW_MAX_RUNTIME = String(config.maxRuntime);
62
+ env.NW_PRD_DIR = config.prdDir;
63
+ env.NW_BRANCH_PREFIX = config.branchPrefix;
64
+ // Provider environment variables (API keys, base URLs, etc.)
65
+ if (config.providerEnv) {
66
+ Object.assign(env, config.providerEnv);
67
+ }
68
+ // PRD priority order
69
+ if (config.prdPriority && config.prdPriority.length > 0) {
70
+ env.NW_PRD_PRIORITY = config.prdPriority.join(":");
71
+ }
72
+ // Dry run flag
73
+ if (options.dryRun) {
74
+ env.NW_DRY_RUN = "1";
75
+ }
76
+ // Sandbox flag — prevents the agent from modifying crontab during execution
77
+ env.NW_EXECUTION_CONTEXT = "agent";
78
+ // Max retries for rate-limited API calls (minimum 1 attempt)
79
+ const maxRetries = Number.isFinite(config.maxRetries)
80
+ ? Math.max(1, Math.floor(config.maxRetries))
81
+ : 3;
82
+ env.NW_MAX_RETRIES = String(maxRetries);
83
+ // Current CLI executable path for nested CLI calls inside bash scripts.
84
+ if (process.argv[1]) {
85
+ env.NW_CLI_BIN = process.argv[1];
86
+ }
87
+ // Board provider — signal to the cron script to use board mode whenever enabled.
88
+ // If projectNumber is missing, `night-watch board next-issue` auto-bootstraps
89
+ // a board and persists it before continuing.
90
+ if (config.boardProvider?.enabled !== false) {
91
+ env.NW_BOARD_ENABLED = "true";
92
+ }
93
+ // Rate-limit fallback: fall back to native Claude when proxy quota is exhausted
94
+ if (config.fallbackOnRateLimit) {
95
+ env.NW_FALLBACK_ON_RATE_LIMIT = "true";
96
+ }
97
+ // Claude model used for native / fallback execution
98
+ env.NW_CLAUDE_MODEL_ID = CLAUDE_MODEL_IDS[config.claudeModel ?? "sonnet"];
99
+ // Telegram credentials for in-script fallback warnings.
100
+ // Export only webhooks that explicitly subscribed to rate_limit_fallback.
101
+ const fallbackTelegramWebhooks = getRateLimitFallbackTelegramWebhooks(config);
102
+ if (fallbackTelegramWebhooks.length > 0) {
103
+ env.NW_TELEGRAM_RATE_LIMIT_WEBHOOKS = JSON.stringify(fallbackTelegramWebhooks);
104
+ // Backward compatibility for older helper implementations.
105
+ env.NW_TELEGRAM_BOT_TOKEN = fallbackTelegramWebhooks[0].botToken;
106
+ env.NW_TELEGRAM_CHAT_ID = fallbackTelegramWebhooks[0].chatId;
107
+ }
108
+ return env;
109
+ }
110
+ /**
111
+ * Apply CLI flag overrides to the config
112
+ */
113
+ export function applyCliOverrides(config, options) {
114
+ const overridden = { ...config };
115
+ if (options.timeout) {
116
+ const timeout = parseInt(options.timeout, 10);
117
+ if (!isNaN(timeout)) {
118
+ overridden.maxRuntime = timeout;
119
+ }
120
+ }
121
+ if (options.provider) {
122
+ overridden.provider = options.provider;
123
+ }
124
+ return overridden;
125
+ }
126
+ /**
127
+ * Scan the PRD directory for eligible PRD files
128
+ */
129
+ export function scanPrdDirectory(projectDir, prdDir, maxRuntime) {
130
+ const absolutePrdDir = path.join(projectDir, prdDir);
131
+ const doneDir = path.join(absolutePrdDir, "done");
132
+ const pending = [];
133
+ const completed = [];
134
+ // Scan main PRD directory for pending PRDs
135
+ if (fs.existsSync(absolutePrdDir)) {
136
+ const entries = fs.readdirSync(absolutePrdDir, { withFileTypes: true });
137
+ for (const entry of entries) {
138
+ if (entry.isFile() && entry.name.endsWith(".md") && entry.name !== "NIGHT-WATCH-SUMMARY.md") {
139
+ const claimPath = path.join(absolutePrdDir, entry.name + CLAIM_FILE_EXTENSION);
140
+ let claimed = false;
141
+ let claimInfo = null;
142
+ if (fs.existsSync(claimPath)) {
143
+ try {
144
+ const content = fs.readFileSync(claimPath, "utf-8");
145
+ const data = JSON.parse(content);
146
+ const age = Math.floor(Date.now() / 1000) - data.timestamp;
147
+ if (age < maxRuntime) {
148
+ claimed = true;
149
+ claimInfo = { hostname: data.hostname, pid: data.pid, timestamp: data.timestamp };
150
+ }
151
+ }
152
+ catch {
153
+ // Invalid claim file, treat as unclaimed
154
+ }
155
+ }
156
+ pending.push({ name: entry.name, claimed, claimInfo });
157
+ }
158
+ }
159
+ }
160
+ // Scan done directory for completed PRDs
161
+ if (fs.existsSync(doneDir)) {
162
+ const entries = fs.readdirSync(doneDir, { withFileTypes: true });
163
+ for (const entry of entries) {
164
+ if (entry.isFile() && entry.name.endsWith(".md")) {
165
+ completed.push(entry.name);
166
+ }
167
+ }
168
+ }
169
+ return { pending, completed };
170
+ }
171
+ /**
172
+ * Register the run command with the program
173
+ */
174
+ export function runCommand(program) {
175
+ program
176
+ .command("run")
177
+ .description("Run PRD executor now")
178
+ .option("--dry-run", "Show what would be executed without running")
179
+ .option("--timeout <seconds>", "Override max runtime in seconds")
180
+ .option("--provider <string>", "AI provider to use (claude or codex)")
181
+ .action(async (options) => {
182
+ // Get the project directory (current working directory)
183
+ const projectDir = process.cwd();
184
+ // Load config from file and environment
185
+ let config = loadConfig(projectDir);
186
+ // Apply CLI flag overrides
187
+ config = applyCliOverrides(config, options);
188
+ // Build environment variables
189
+ const envVars = buildEnvVars(config, options);
190
+ // Get the script path
191
+ const scriptPath = getScriptPath("night-watch-cron.sh");
192
+ if (options.dryRun) {
193
+ header("Dry Run: PRD Executor");
194
+ // Configuration section with table
195
+ header("Configuration");
196
+ const configTable = createTable({ head: ["Setting", "Value"] });
197
+ configTable.push(["Provider", config.provider]);
198
+ configTable.push(["Provider CLI", PROVIDER_COMMANDS[config.provider]]);
199
+ configTable.push(["Default Branch", config.defaultBranch || "(auto-detect)"]);
200
+ configTable.push(["PRD Directory", config.prdDir]);
201
+ configTable.push(["Max Runtime", `${config.maxRuntime}s (${Math.floor(config.maxRuntime / 60)}min)`]);
202
+ configTable.push(["Branch Prefix", config.branchPrefix]);
203
+ configTable.push(["Auto-merge", config.autoMerge ? `Enabled (${config.autoMergeMethod})` : "Disabled"]);
204
+ console.log(configTable.toString());
205
+ if (envVars.NW_BOARD_ENABLED === "true") {
206
+ header("Board Status");
207
+ if (config.boardProvider?.projectNumber) {
208
+ try {
209
+ const provider = createBoardProvider(config.boardProvider, projectDir);
210
+ const readyIssues = await provider.getIssuesByColumn("Ready");
211
+ if (readyIssues.length === 0) {
212
+ dim(" Ready: (none)");
213
+ }
214
+ else {
215
+ info(`Ready (${readyIssues.length}):`);
216
+ for (const issue of readyIssues.slice(0, 5)) {
217
+ dim(` - #${issue.number} ${issue.title}`);
218
+ }
219
+ if (readyIssues.length > 5) {
220
+ dim(` ... and ${readyIssues.length - 5} more`);
221
+ }
222
+ }
223
+ }
224
+ catch (err) {
225
+ dim(` Could not query board: ${err instanceof Error ? err.message : String(err)}`);
226
+ }
227
+ }
228
+ else {
229
+ dim(" No board configured yet. A board will be auto-created on first board-mode run.");
230
+ }
231
+ }
232
+ else {
233
+ // Scan for PRDs in filesystem mode
234
+ header("PRD Status");
235
+ const prdStatus = scanPrdDirectory(projectDir, config.prdDir, config.maxRuntime);
236
+ if (prdStatus.pending.length === 0) {
237
+ dim(" Pending: (none)");
238
+ }
239
+ else {
240
+ const claimedItems = prdStatus.pending.filter(p => p.claimed);
241
+ const unclaimed = prdStatus.pending.filter(p => !p.claimed);
242
+ info(`Pending (${unclaimed.length} pending, ${claimedItems.length} claimed):`);
243
+ for (const prd of prdStatus.pending) {
244
+ if (prd.claimed && prd.claimInfo) {
245
+ dim(` - ${prd.name} [claimed by ${prd.claimInfo.hostname}:${prd.claimInfo.pid}]`);
246
+ }
247
+ else {
248
+ dim(` - ${prd.name}`);
249
+ }
250
+ }
251
+ }
252
+ if (prdStatus.completed.length === 0) {
253
+ dim(" Completed: (none)");
254
+ }
255
+ else {
256
+ info(`Completed (${prdStatus.completed.length}):`);
257
+ for (const prd of prdStatus.completed.slice(0, 5)) {
258
+ dim(` - ${prd}`);
259
+ }
260
+ if (prdStatus.completed.length > 5) {
261
+ dim(` ... and ${prdStatus.completed.length - 5} more`);
262
+ }
263
+ }
264
+ }
265
+ // Provider invocation command
266
+ header("Provider Invocation");
267
+ const providerCmd = PROVIDER_COMMANDS[config.provider];
268
+ const autoFlag = config.provider === "claude" ? "--dangerously-skip-permissions" : "--yolo";
269
+ dim(` ${providerCmd} ${autoFlag} -p "/night-watch"`);
270
+ // Environment variables
271
+ header("Environment Variables");
272
+ for (const [key, value] of Object.entries(envVars)) {
273
+ dim(` ${key}=${value}`);
274
+ }
275
+ // Full command that would be executed
276
+ header("Command");
277
+ dim(` bash ${scriptPath} ${projectDir}`);
278
+ console.log();
279
+ process.exit(0);
280
+ }
281
+ // Execute the script with spinner
282
+ const spinner = createSpinner("Running PRD executor...");
283
+ spinner.start();
284
+ try {
285
+ const { exitCode, stdout, stderr } = await executeScriptWithOutput(scriptPath, [projectDir], envVars);
286
+ const scriptResult = parseScriptResult(`${stdout}\n${stderr}`);
287
+ if (exitCode === 0) {
288
+ if (scriptResult?.status?.startsWith("skip_")) {
289
+ spinner.succeed("PRD executor completed (no eligible work)");
290
+ }
291
+ else if (scriptResult?.status === "success_already_merged") {
292
+ spinner.succeed("PRD executor completed (PRD already merged)");
293
+ }
294
+ else {
295
+ spinner.succeed("PRD executor completed successfully");
296
+ }
297
+ }
298
+ else {
299
+ spinner.fail(`PRD executor exited with code ${exitCode}`);
300
+ }
301
+ // Send notifications (fire-and-forget, failures do not affect exit code)
302
+ if (!options.dryRun) {
303
+ // Rate-limit fallback notifications are sent immediately to Telegram in bash.
304
+ // Send this event only to non-Telegram webhooks to avoid duplicate alerts.
305
+ if (isRateLimitFallbackTriggered(scriptResult?.data)) {
306
+ const nonTelegramWebhooks = (config.notifications?.webhooks ?? [])
307
+ .filter((wh) => wh.type !== "telegram");
308
+ if (nonTelegramWebhooks.length > 0) {
309
+ await sendNotifications({
310
+ ...config,
311
+ notifications: {
312
+ ...config.notifications,
313
+ webhooks: nonTelegramWebhooks,
314
+ },
315
+ }, {
316
+ event: "rate_limit_fallback",
317
+ projectName: path.basename(projectDir),
318
+ exitCode,
319
+ provider: config.provider,
320
+ });
321
+ }
322
+ }
323
+ // Backward-compatible fallback: if no marker is present, preserve previous behavior.
324
+ const event = resolveRunNotificationEvent(exitCode, scriptResult?.status);
325
+ // Enrich with PR details on success (graceful — null if gh fails)
326
+ let prDetails = null;
327
+ if (event === "run_succeeded") {
328
+ const branch = scriptResult?.data.branch;
329
+ if (branch) {
330
+ prDetails = fetchPrDetailsForBranch(branch, projectDir);
331
+ }
332
+ if (!prDetails) {
333
+ prDetails = fetchPrDetails(config.branchPrefix, projectDir);
334
+ }
335
+ }
336
+ if (event) {
337
+ await sendNotifications(config, {
338
+ event,
339
+ projectName: path.basename(projectDir),
340
+ exitCode,
341
+ provider: config.provider,
342
+ prUrl: prDetails?.url,
343
+ prTitle: prDetails?.title,
344
+ prBody: prDetails?.body,
345
+ prNumber: prDetails?.number,
346
+ filesChanged: prDetails?.changedFiles,
347
+ additions: prDetails?.additions,
348
+ deletions: prDetails?.deletions,
349
+ });
350
+ }
351
+ else {
352
+ info("Skipping completion notification (no actionable run result)");
353
+ }
354
+ }
355
+ process.exit(exitCode);
356
+ }
357
+ catch (err) {
358
+ spinner.fail("Failed to execute run command");
359
+ uiError(`${err instanceof Error ? err.message : String(err)}`);
360
+ process.exit(1);
361
+ }
362
+ });
363
+ }
364
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Serve command for Night Watch CLI
3
+ * Starts the HTTP API server for the Web UI
4
+ */
5
+ import { Command } from "commander";
6
+ export declare function serveCommand(program: Command): void;
7
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/commands/serve.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoBnD"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Serve command for Night Watch CLI
3
+ * Starts the HTTP API server for the Web UI
4
+ */
5
+ import { startGlobalServer, startServer } from "../server/index.js";
6
+ export function serveCommand(program) {
7
+ program
8
+ .command("serve")
9
+ .description("Start the Night Watch web UI server")
10
+ .option("-p, --port <number>", "Port to run the server on", "7575")
11
+ .option("-g, --global", "Start in global mode (manage all registered projects)")
12
+ .action((options) => {
13
+ const port = parseInt(options.port, 10);
14
+ if (isNaN(port) || port < 1 || port > 65535) {
15
+ console.error(`Invalid port: ${options.port}. Port must be between 1 and 65535.`);
16
+ process.exit(1);
17
+ }
18
+ if (options.global) {
19
+ startGlobalServer(port);
20
+ }
21
+ else {
22
+ const projectDir = process.cwd();
23
+ startServer(projectDir, port);
24
+ }
25
+ });
26
+ }
27
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/commands/serve.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEpE,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,CAAC;SAClE,MAAM,CAAC,cAAc,EAAE,uDAAuD,CAAC;SAC/E,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,iBAAiB,OAAO,CAAC,IAAI,qCAAqC,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YACjC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Slice command - executes the roadmap slicer to create PRDs from roadmap items
3
+ */
4
+ import { Command } from "commander";
5
+ import { INightWatchConfig } from "../types.js";
6
+ /**
7
+ * Options for the slice command
8
+ */
9
+ export interface ISliceOptions {
10
+ dryRun: boolean;
11
+ timeout?: string;
12
+ provider?: string;
13
+ }
14
+ /**
15
+ * Build environment variables map from config and CLI options for slicer
16
+ */
17
+ export declare function buildEnvVars(config: INightWatchConfig, options: ISliceOptions): Record<string, string>;
18
+ /**
19
+ * Apply CLI flag overrides to the config for slicer
20
+ */
21
+ export declare function applyCliOverrides(config: INightWatchConfig, options: ISliceOptions): INightWatchConfig;
22
+ /**
23
+ * Register the slice command with the program
24
+ */
25
+ export declare function sliceCommand(program: Command): void;
26
+ //# sourceMappingURL=slice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slice.d.ts","sourceRoot":"","sources":["../../../src/commands/slice.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAqB,MAAM,aAAa,CAAC;AAkBnE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BtG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,GAAG,iBAAiB,CAkBtG;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoInD"}