@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,629 @@
1
+ /**
2
+ * Configuration loader for Night Watch CLI
3
+ * Loads config from: defaults -> config file -> environment variables
4
+ */
5
+ import * as fs from "fs";
6
+ import * as path from "path";
7
+ import { fileURLToPath } from "url";
8
+ import { CONFIG_FILE_NAME, DEFAULT_AUTO_MERGE, DEFAULT_AUTO_MERGE_METHOD, DEFAULT_BOARD_PROVIDER, DEFAULT_BRANCH_PATTERNS, DEFAULT_BRANCH_PREFIX, DEFAULT_CLAUDE_MODEL, DEFAULT_CRON_SCHEDULE, DEFAULT_CRON_SCHEDULE_OFFSET, DEFAULT_DEFAULT_BRANCH, DEFAULT_FALLBACK_ON_RATE_LIMIT, DEFAULT_MAX_LOG_SIZE, DEFAULT_MAX_RETRIES, DEFAULT_MAX_RUNTIME, DEFAULT_MIN_REVIEW_SCORE, DEFAULT_NOTIFICATIONS, DEFAULT_PRD_DIR, DEFAULT_PRD_PRIORITY, DEFAULT_PROVIDER, DEFAULT_PROVIDER_ENV, DEFAULT_QA, DEFAULT_REVIEWER_ENABLED, DEFAULT_REVIEWER_MAX_RUNTIME, DEFAULT_REVIEWER_SCHEDULE, DEFAULT_ROADMAP_SCANNER, DEFAULT_SLACK_BOT_CONFIG, DEFAULT_TEMPLATES_DIR, VALID_CLAUDE_MODELS, VALID_MERGE_METHODS, VALID_PROVIDERS, } from "./constants.js";
9
+ /**
10
+ * Get the default configuration values
11
+ */
12
+ export function getDefaultConfig() {
13
+ return {
14
+ // PRD execution
15
+ defaultBranch: DEFAULT_DEFAULT_BRANCH,
16
+ prdDir: DEFAULT_PRD_DIR,
17
+ maxRuntime: DEFAULT_MAX_RUNTIME,
18
+ reviewerMaxRuntime: DEFAULT_REVIEWER_MAX_RUNTIME,
19
+ branchPrefix: DEFAULT_BRANCH_PREFIX,
20
+ branchPatterns: [...DEFAULT_BRANCH_PATTERNS],
21
+ minReviewScore: DEFAULT_MIN_REVIEW_SCORE,
22
+ maxLogSize: DEFAULT_MAX_LOG_SIZE,
23
+ // Cron scheduling
24
+ cronSchedule: DEFAULT_CRON_SCHEDULE,
25
+ reviewerSchedule: DEFAULT_REVIEWER_SCHEDULE,
26
+ cronScheduleOffset: DEFAULT_CRON_SCHEDULE_OFFSET,
27
+ maxRetries: DEFAULT_MAX_RETRIES,
28
+ // Provider configuration
29
+ provider: DEFAULT_PROVIDER,
30
+ reviewerEnabled: DEFAULT_REVIEWER_ENABLED,
31
+ providerEnv: { ...DEFAULT_PROVIDER_ENV },
32
+ // Notification configuration
33
+ notifications: { ...DEFAULT_NOTIFICATIONS, webhooks: [] },
34
+ // PRD priority
35
+ prdPriority: [...DEFAULT_PRD_PRIORITY],
36
+ // Roadmap scanner
37
+ roadmapScanner: { ...DEFAULT_ROADMAP_SCANNER },
38
+ // Templates
39
+ templatesDir: DEFAULT_TEMPLATES_DIR,
40
+ // Board provider
41
+ boardProvider: { ...DEFAULT_BOARD_PROVIDER },
42
+ // Auto-merge
43
+ autoMerge: DEFAULT_AUTO_MERGE,
44
+ autoMergeMethod: DEFAULT_AUTO_MERGE_METHOD,
45
+ // Rate-limit fallback
46
+ fallbackOnRateLimit: DEFAULT_FALLBACK_ON_RATE_LIMIT,
47
+ claudeModel: DEFAULT_CLAUDE_MODEL,
48
+ // QA process
49
+ qa: { ...DEFAULT_QA },
50
+ // Slack Bot API
51
+ slack: { ...DEFAULT_SLACK_BOT_CONFIG, channels: { ...DEFAULT_SLACK_BOT_CONFIG.channels } },
52
+ };
53
+ }
54
+ /**
55
+ * Load configuration from a JSON file
56
+ */
57
+ function loadConfigFile(configPath) {
58
+ try {
59
+ if (!fs.existsSync(configPath)) {
60
+ return null;
61
+ }
62
+ const content = fs.readFileSync(configPath, "utf-8");
63
+ const rawConfig = JSON.parse(content);
64
+ return normalizeConfig(rawConfig);
65
+ }
66
+ catch (error) {
67
+ // If file exists but can't be parsed, warn but don't fail
68
+ console.warn(`Warning: Could not parse config file at ${configPath}: ${error instanceof Error ? error.message : String(error)}`);
69
+ return null;
70
+ }
71
+ }
72
+ /**
73
+ * Convert legacy/nested config formats to the flat INightWatchConfig shape.
74
+ * Flat keys take precedence over nested aliases when both are present.
75
+ */
76
+ function normalizeConfig(rawConfig) {
77
+ const normalized = {};
78
+ const readString = (value) => typeof value === "string" ? value : undefined;
79
+ const readNumber = (value) => typeof value === "number" && !Number.isNaN(value) ? value : undefined;
80
+ const readBoolean = (value) => typeof value === "boolean" ? value : undefined;
81
+ const readStringArray = (value) => Array.isArray(value) && value.every((v) => typeof v === "string")
82
+ ? value
83
+ : undefined;
84
+ const readObject = (value) => value !== null && typeof value === "object" ? value : undefined;
85
+ const cron = readObject(rawConfig.cron);
86
+ const review = readObject(rawConfig.review);
87
+ const logging = readObject(rawConfig.logging);
88
+ normalized.defaultBranch = readString(rawConfig.defaultBranch);
89
+ normalized.prdDir =
90
+ readString(rawConfig.prdDir) ??
91
+ readString(rawConfig.prdDirectory);
92
+ normalized.maxRuntime = readNumber(rawConfig.maxRuntime);
93
+ normalized.reviewerMaxRuntime = readNumber(rawConfig.reviewerMaxRuntime);
94
+ normalized.branchPrefix = readString(rawConfig.branchPrefix);
95
+ normalized.branchPatterns =
96
+ readStringArray(rawConfig.branchPatterns) ??
97
+ readStringArray(review?.branchPatterns);
98
+ normalized.minReviewScore =
99
+ readNumber(rawConfig.minReviewScore) ??
100
+ readNumber(review?.minScore);
101
+ normalized.maxLogSize =
102
+ readNumber(rawConfig.maxLogSize) ??
103
+ readNumber(logging?.maxLogSize);
104
+ normalized.cronSchedule =
105
+ readString(rawConfig.cronSchedule) ??
106
+ readString(cron?.executorSchedule);
107
+ normalized.reviewerSchedule =
108
+ readString(rawConfig.reviewerSchedule) ??
109
+ readString(cron?.reviewerSchedule);
110
+ normalized.cronScheduleOffset = readNumber(rawConfig.cronScheduleOffset);
111
+ normalized.maxRetries = readNumber(rawConfig.maxRetries);
112
+ normalized.provider = validateProvider(String(rawConfig.provider ?? "")) ?? undefined;
113
+ normalized.reviewerEnabled = readBoolean(rawConfig.reviewerEnabled);
114
+ // providerEnv: Record<string, string> of extra env vars for the provider CLI
115
+ const rawProviderEnv = readObject(rawConfig.providerEnv);
116
+ if (rawProviderEnv) {
117
+ const env = {};
118
+ for (const [key, value] of Object.entries(rawProviderEnv)) {
119
+ if (typeof value === "string") {
120
+ env[key] = value;
121
+ }
122
+ }
123
+ if (Object.keys(env).length > 0) {
124
+ normalized.providerEnv = env;
125
+ }
126
+ }
127
+ // Notifications
128
+ const rawNotifications = readObject(rawConfig.notifications);
129
+ if (rawNotifications) {
130
+ const rawWebhooks = Array.isArray(rawNotifications.webhooks) ? rawNotifications.webhooks : [];
131
+ const webhooks = [];
132
+ for (const wh of rawWebhooks) {
133
+ if (wh && typeof wh === "object" && "type" in wh && "events" in wh) {
134
+ const whObj = wh;
135
+ webhooks.push({
136
+ type: String(whObj.type),
137
+ url: typeof whObj.url === "string" ? whObj.url : undefined,
138
+ botToken: typeof whObj.botToken === "string" ? whObj.botToken : undefined,
139
+ chatId: typeof whObj.chatId === "string" ? whObj.chatId : undefined,
140
+ events: Array.isArray(whObj.events)
141
+ ? whObj.events.filter((e) => typeof e === "string")
142
+ : [],
143
+ });
144
+ }
145
+ }
146
+ normalized.notifications = { webhooks };
147
+ }
148
+ // PRD priority
149
+ normalized.prdPriority = readStringArray(rawConfig.prdPriority);
150
+ // Roadmap Scanner
151
+ const rawRoadmapScanner = readObject(rawConfig.roadmapScanner);
152
+ if (rawRoadmapScanner) {
153
+ const roadmapScanner = {
154
+ enabled: readBoolean(rawRoadmapScanner.enabled) ?? DEFAULT_ROADMAP_SCANNER.enabled,
155
+ roadmapPath: readString(rawRoadmapScanner.roadmapPath) ?? DEFAULT_ROADMAP_SCANNER.roadmapPath,
156
+ autoScanInterval: readNumber(rawRoadmapScanner.autoScanInterval) ?? DEFAULT_ROADMAP_SCANNER.autoScanInterval,
157
+ slicerSchedule: readString(rawRoadmapScanner.slicerSchedule) ?? DEFAULT_ROADMAP_SCANNER.slicerSchedule,
158
+ slicerMaxRuntime: readNumber(rawRoadmapScanner.slicerMaxRuntime) ?? DEFAULT_ROADMAP_SCANNER.slicerMaxRuntime,
159
+ };
160
+ // Validate autoScanInterval has minimum of 30 seconds
161
+ if (roadmapScanner.autoScanInterval < 30) {
162
+ roadmapScanner.autoScanInterval = 30;
163
+ }
164
+ normalized.roadmapScanner = roadmapScanner;
165
+ }
166
+ // Templates Directory
167
+ normalized.templatesDir = readString(rawConfig.templatesDir);
168
+ // Board Provider
169
+ const rawBoardProvider = readObject(rawConfig.boardProvider);
170
+ if (rawBoardProvider) {
171
+ const bp = {
172
+ enabled: readBoolean(rawBoardProvider.enabled) ?? DEFAULT_BOARD_PROVIDER.enabled,
173
+ provider: readString(rawBoardProvider.provider) ?? DEFAULT_BOARD_PROVIDER.provider,
174
+ };
175
+ if (typeof rawBoardProvider.projectNumber === "number") {
176
+ bp.projectNumber = rawBoardProvider.projectNumber;
177
+ }
178
+ if (typeof rawBoardProvider.repo === "string") {
179
+ bp.repo = rawBoardProvider.repo;
180
+ }
181
+ normalized.boardProvider = bp;
182
+ }
183
+ // Rate-limit fallback
184
+ normalized.fallbackOnRateLimit = readBoolean(rawConfig.fallbackOnRateLimit);
185
+ const claudeModelRaw = readString(rawConfig.claudeModel);
186
+ if (claudeModelRaw && VALID_CLAUDE_MODELS.includes(claudeModelRaw)) {
187
+ normalized.claudeModel = claudeModelRaw;
188
+ }
189
+ // Auto-Merge
190
+ normalized.autoMerge = readBoolean(rawConfig.autoMerge);
191
+ const mergeMethod = readString(rawConfig.autoMergeMethod);
192
+ if (mergeMethod && VALID_MERGE_METHODS.includes(mergeMethod)) {
193
+ normalized.autoMergeMethod = mergeMethod;
194
+ }
195
+ // Slack Bot Configuration
196
+ const rawSlack = readObject(rawConfig.slack);
197
+ if (rawSlack) {
198
+ const rawChannels = readObject(rawSlack.channels) ?? {};
199
+ const slack = {
200
+ enabled: readBoolean(rawSlack.enabled) ?? DEFAULT_SLACK_BOT_CONFIG.enabled,
201
+ botToken: readString(rawSlack.botToken) ?? DEFAULT_SLACK_BOT_CONFIG.botToken,
202
+ channels: {
203
+ eng: readString(rawChannels.eng) ?? DEFAULT_SLACK_BOT_CONFIG.channels.eng,
204
+ prs: readString(rawChannels.prs) ?? DEFAULT_SLACK_BOT_CONFIG.channels.prs,
205
+ incidents: readString(rawChannels.incidents) ?? DEFAULT_SLACK_BOT_CONFIG.channels.incidents,
206
+ releases: readString(rawChannels.releases) ?? DEFAULT_SLACK_BOT_CONFIG.channels.releases,
207
+ },
208
+ autoCreateProjectChannels: readBoolean(rawSlack.autoCreateProjectChannels) ??
209
+ DEFAULT_SLACK_BOT_CONFIG.autoCreateProjectChannels,
210
+ discussionEnabled: readBoolean(rawSlack.discussionEnabled) ?? DEFAULT_SLACK_BOT_CONFIG.discussionEnabled,
211
+ };
212
+ if (typeof rawSlack.appToken === "string") {
213
+ slack.appToken = rawSlack.appToken;
214
+ }
215
+ normalized.slack = slack;
216
+ }
217
+ // QA Configuration
218
+ const rawQa = readObject(rawConfig.qa);
219
+ if (rawQa) {
220
+ const artifactsValue = readString(rawQa.artifacts);
221
+ const artifacts = artifactsValue && ["screenshot", "video", "both"].includes(artifactsValue)
222
+ ? artifactsValue
223
+ : DEFAULT_QA.artifacts;
224
+ const qa = {
225
+ enabled: readBoolean(rawQa.enabled) ?? DEFAULT_QA.enabled,
226
+ schedule: readString(rawQa.schedule) ?? DEFAULT_QA.schedule,
227
+ maxRuntime: readNumber(rawQa.maxRuntime) ?? DEFAULT_QA.maxRuntime,
228
+ branchPatterns: readStringArray(rawQa.branchPatterns) ?? DEFAULT_QA.branchPatterns,
229
+ artifacts,
230
+ skipLabel: readString(rawQa.skipLabel) ?? DEFAULT_QA.skipLabel,
231
+ autoInstallPlaywright: readBoolean(rawQa.autoInstallPlaywright) ?? DEFAULT_QA.autoInstallPlaywright,
232
+ };
233
+ normalized.qa = qa;
234
+ }
235
+ return normalized;
236
+ }
237
+ /**
238
+ * Parse a boolean string value
239
+ */
240
+ function parseBoolean(value) {
241
+ const normalized = value.toLowerCase().trim();
242
+ if (normalized === "true" || normalized === "1") {
243
+ return true;
244
+ }
245
+ if (normalized === "false" || normalized === "0") {
246
+ return false;
247
+ }
248
+ return null;
249
+ }
250
+ /**
251
+ * Validate and return a provider value
252
+ */
253
+ function validateProvider(value) {
254
+ if (VALID_PROVIDERS.includes(value)) {
255
+ return value;
256
+ }
257
+ return null;
258
+ }
259
+ /**
260
+ * Validate and return a merge method value
261
+ */
262
+ function validateMergeMethod(value) {
263
+ if (VALID_MERGE_METHODS.includes(value)) {
264
+ return value;
265
+ }
266
+ return null;
267
+ }
268
+ /**
269
+ * Normalize retry count to a safe positive integer.
270
+ */
271
+ function sanitizeMaxRetries(value, fallback) {
272
+ if (!Number.isFinite(value)) {
273
+ return fallback;
274
+ }
275
+ const normalized = Math.floor(value);
276
+ return normalized >= 1 ? normalized : fallback;
277
+ }
278
+ /**
279
+ * Deep merge configuration objects
280
+ * Environment values take precedence over file values
281
+ */
282
+ function mergeConfigs(base, fileConfig, envConfig) {
283
+ const merged = { ...base };
284
+ // Merge file config
285
+ if (fileConfig) {
286
+ if (fileConfig.defaultBranch !== undefined)
287
+ merged.defaultBranch = fileConfig.defaultBranch;
288
+ if (fileConfig.prdDir !== undefined)
289
+ merged.prdDir = fileConfig.prdDir;
290
+ if (fileConfig.maxRuntime !== undefined)
291
+ merged.maxRuntime = fileConfig.maxRuntime;
292
+ if (fileConfig.reviewerMaxRuntime !== undefined)
293
+ merged.reviewerMaxRuntime = fileConfig.reviewerMaxRuntime;
294
+ if (fileConfig.branchPrefix !== undefined)
295
+ merged.branchPrefix = fileConfig.branchPrefix;
296
+ if (fileConfig.branchPatterns !== undefined)
297
+ merged.branchPatterns = [...fileConfig.branchPatterns];
298
+ if (fileConfig.minReviewScore !== undefined)
299
+ merged.minReviewScore = fileConfig.minReviewScore;
300
+ if (fileConfig.maxLogSize !== undefined)
301
+ merged.maxLogSize = fileConfig.maxLogSize;
302
+ if (fileConfig.cronSchedule !== undefined)
303
+ merged.cronSchedule = fileConfig.cronSchedule;
304
+ if (fileConfig.reviewerSchedule !== undefined)
305
+ merged.reviewerSchedule = fileConfig.reviewerSchedule;
306
+ if (fileConfig.cronScheduleOffset !== undefined)
307
+ merged.cronScheduleOffset = fileConfig.cronScheduleOffset;
308
+ if (fileConfig.maxRetries !== undefined)
309
+ merged.maxRetries = fileConfig.maxRetries;
310
+ if (fileConfig.provider !== undefined)
311
+ merged.provider = fileConfig.provider;
312
+ if (fileConfig.reviewerEnabled !== undefined)
313
+ merged.reviewerEnabled = fileConfig.reviewerEnabled;
314
+ if (fileConfig.providerEnv !== undefined)
315
+ merged.providerEnv = { ...merged.providerEnv, ...fileConfig.providerEnv };
316
+ if (fileConfig.notifications !== undefined)
317
+ merged.notifications = fileConfig.notifications;
318
+ if (fileConfig.prdPriority !== undefined)
319
+ merged.prdPriority = [...fileConfig.prdPriority];
320
+ if (fileConfig.roadmapScanner !== undefined)
321
+ merged.roadmapScanner = { ...fileConfig.roadmapScanner };
322
+ if (fileConfig.templatesDir !== undefined)
323
+ merged.templatesDir = fileConfig.templatesDir;
324
+ if (fileConfig.boardProvider !== undefined)
325
+ merged.boardProvider = { ...merged.boardProvider, ...fileConfig.boardProvider };
326
+ if (fileConfig.autoMerge !== undefined)
327
+ merged.autoMerge = fileConfig.autoMerge;
328
+ if (fileConfig.autoMergeMethod !== undefined)
329
+ merged.autoMergeMethod = fileConfig.autoMergeMethod;
330
+ if (fileConfig.fallbackOnRateLimit !== undefined)
331
+ merged.fallbackOnRateLimit = fileConfig.fallbackOnRateLimit;
332
+ if (fileConfig.claudeModel !== undefined)
333
+ merged.claudeModel = fileConfig.claudeModel;
334
+ if (fileConfig.qa !== undefined)
335
+ merged.qa = { ...merged.qa, ...fileConfig.qa };
336
+ if (fileConfig.slack !== undefined)
337
+ merged.slack = { ...merged.slack, ...fileConfig.slack, channels: { ...merged.slack?.channels, ...fileConfig.slack.channels } };
338
+ }
339
+ // Merge env config (takes precedence)
340
+ if (envConfig.defaultBranch !== undefined)
341
+ merged.defaultBranch = envConfig.defaultBranch;
342
+ if (envConfig.prdDir !== undefined)
343
+ merged.prdDir = envConfig.prdDir;
344
+ if (envConfig.maxRuntime !== undefined)
345
+ merged.maxRuntime = envConfig.maxRuntime;
346
+ if (envConfig.reviewerMaxRuntime !== undefined)
347
+ merged.reviewerMaxRuntime = envConfig.reviewerMaxRuntime;
348
+ if (envConfig.branchPrefix !== undefined)
349
+ merged.branchPrefix = envConfig.branchPrefix;
350
+ if (envConfig.branchPatterns !== undefined)
351
+ merged.branchPatterns = [...envConfig.branchPatterns];
352
+ if (envConfig.minReviewScore !== undefined)
353
+ merged.minReviewScore = envConfig.minReviewScore;
354
+ if (envConfig.maxLogSize !== undefined)
355
+ merged.maxLogSize = envConfig.maxLogSize;
356
+ if (envConfig.cronSchedule !== undefined)
357
+ merged.cronSchedule = envConfig.cronSchedule;
358
+ if (envConfig.reviewerSchedule !== undefined)
359
+ merged.reviewerSchedule = envConfig.reviewerSchedule;
360
+ if (envConfig.cronScheduleOffset !== undefined)
361
+ merged.cronScheduleOffset = envConfig.cronScheduleOffset;
362
+ if (envConfig.maxRetries !== undefined)
363
+ merged.maxRetries = envConfig.maxRetries;
364
+ if (envConfig.provider !== undefined)
365
+ merged.provider = envConfig.provider;
366
+ if (envConfig.reviewerEnabled !== undefined)
367
+ merged.reviewerEnabled = envConfig.reviewerEnabled;
368
+ if (envConfig.providerEnv !== undefined)
369
+ merged.providerEnv = { ...merged.providerEnv, ...envConfig.providerEnv };
370
+ if (envConfig.notifications !== undefined)
371
+ merged.notifications = envConfig.notifications;
372
+ if (envConfig.prdPriority !== undefined)
373
+ merged.prdPriority = [...envConfig.prdPriority];
374
+ if (envConfig.roadmapScanner !== undefined)
375
+ merged.roadmapScanner = { ...envConfig.roadmapScanner };
376
+ if (envConfig.templatesDir !== undefined)
377
+ merged.templatesDir = envConfig.templatesDir;
378
+ if (envConfig.boardProvider !== undefined)
379
+ merged.boardProvider = { ...merged.boardProvider, ...envConfig.boardProvider };
380
+ if (envConfig.autoMerge !== undefined)
381
+ merged.autoMerge = envConfig.autoMerge;
382
+ if (envConfig.autoMergeMethod !== undefined)
383
+ merged.autoMergeMethod = envConfig.autoMergeMethod;
384
+ if (envConfig.fallbackOnRateLimit !== undefined)
385
+ merged.fallbackOnRateLimit = envConfig.fallbackOnRateLimit;
386
+ if (envConfig.claudeModel !== undefined)
387
+ merged.claudeModel = envConfig.claudeModel;
388
+ if (envConfig.qa !== undefined)
389
+ merged.qa = { ...merged.qa, ...envConfig.qa };
390
+ if (envConfig.slack !== undefined)
391
+ merged.slack = { ...merged.slack, ...envConfig.slack, channels: { ...merged.slack?.channels, ...envConfig.slack.channels } };
392
+ merged.maxRetries = sanitizeMaxRetries(merged.maxRetries, DEFAULT_MAX_RETRIES);
393
+ return merged;
394
+ }
395
+ /**
396
+ * Load Night Watch configuration
397
+ * Priority: defaults < config file < environment variables
398
+ *
399
+ * @param projectDir - The project directory to load config from
400
+ * @returns Merged configuration object
401
+ */
402
+ export function loadConfig(projectDir) {
403
+ // Start with defaults
404
+ const defaults = getDefaultConfig();
405
+ // Load config file
406
+ const configPath = path.join(projectDir, CONFIG_FILE_NAME);
407
+ const fileConfig = loadConfigFile(configPath);
408
+ // Load environment overrides
409
+ const envConfig = {};
410
+ // NW_* environment variables
411
+ if (process.env.NW_DEFAULT_BRANCH) {
412
+ envConfig.defaultBranch = process.env.NW_DEFAULT_BRANCH;
413
+ }
414
+ if (process.env.NW_PRD_DIR) {
415
+ envConfig.prdDir = process.env.NW_PRD_DIR;
416
+ }
417
+ if (process.env.NW_MAX_RUNTIME) {
418
+ const runtime = parseInt(process.env.NW_MAX_RUNTIME, 10);
419
+ if (!isNaN(runtime)) {
420
+ envConfig.maxRuntime = runtime;
421
+ }
422
+ }
423
+ if (process.env.NW_REVIEWER_MAX_RUNTIME) {
424
+ const runtime = parseInt(process.env.NW_REVIEWER_MAX_RUNTIME, 10);
425
+ if (!isNaN(runtime)) {
426
+ envConfig.reviewerMaxRuntime = runtime;
427
+ }
428
+ }
429
+ if (process.env.NW_BRANCH_PREFIX) {
430
+ envConfig.branchPrefix = process.env.NW_BRANCH_PREFIX;
431
+ }
432
+ if (process.env.NW_BRANCH_PATTERNS) {
433
+ try {
434
+ envConfig.branchPatterns = JSON.parse(process.env.NW_BRANCH_PATTERNS);
435
+ }
436
+ catch {
437
+ // If not valid JSON, treat as comma-separated
438
+ envConfig.branchPatterns = process.env.NW_BRANCH_PATTERNS.split(",").map((s) => s.trim());
439
+ }
440
+ }
441
+ if (process.env.NW_MIN_REVIEW_SCORE) {
442
+ const score = parseInt(process.env.NW_MIN_REVIEW_SCORE, 10);
443
+ if (!isNaN(score)) {
444
+ envConfig.minReviewScore = score;
445
+ }
446
+ }
447
+ if (process.env.NW_MAX_LOG_SIZE) {
448
+ const size = parseInt(process.env.NW_MAX_LOG_SIZE, 10);
449
+ if (!isNaN(size)) {
450
+ envConfig.maxLogSize = size;
451
+ }
452
+ }
453
+ if (process.env.NW_CRON_SCHEDULE) {
454
+ envConfig.cronSchedule = process.env.NW_CRON_SCHEDULE;
455
+ }
456
+ if (process.env.NW_REVIEWER_SCHEDULE) {
457
+ envConfig.reviewerSchedule = process.env.NW_REVIEWER_SCHEDULE;
458
+ }
459
+ if (process.env.NW_CRON_SCHEDULE_OFFSET) {
460
+ const offset = parseInt(process.env.NW_CRON_SCHEDULE_OFFSET, 10);
461
+ if (!isNaN(offset) && offset >= 0 && offset <= 59) {
462
+ envConfig.cronScheduleOffset = offset;
463
+ }
464
+ }
465
+ if (process.env.NW_MAX_RETRIES) {
466
+ const retries = parseInt(process.env.NW_MAX_RETRIES, 10);
467
+ if (!isNaN(retries) && retries >= 1) {
468
+ envConfig.maxRetries = retries;
469
+ }
470
+ }
471
+ // NW_PROVIDER environment variable
472
+ if (process.env.NW_PROVIDER) {
473
+ const provider = validateProvider(process.env.NW_PROVIDER);
474
+ if (provider !== null) {
475
+ envConfig.provider = provider;
476
+ }
477
+ // If invalid, fallback to default (don't set envConfig.provider)
478
+ }
479
+ // NW_REVIEWER_ENABLED environment variable
480
+ if (process.env.NW_REVIEWER_ENABLED) {
481
+ const reviewerEnabled = parseBoolean(process.env.NW_REVIEWER_ENABLED);
482
+ if (reviewerEnabled !== null) {
483
+ envConfig.reviewerEnabled = reviewerEnabled;
484
+ }
485
+ }
486
+ // NW_NOTIFICATIONS environment variable (JSON)
487
+ if (process.env.NW_NOTIFICATIONS) {
488
+ try {
489
+ const parsed = JSON.parse(process.env.NW_NOTIFICATIONS);
490
+ if (parsed && typeof parsed === "object") {
491
+ envConfig.notifications = parsed;
492
+ }
493
+ }
494
+ catch {
495
+ // Invalid JSON, ignore
496
+ }
497
+ }
498
+ // NW_ROADMAP_SCANNER_ENABLED environment variable
499
+ if (process.env.NW_ROADMAP_SCANNER_ENABLED) {
500
+ const roadmapScannerEnabled = parseBoolean(process.env.NW_ROADMAP_SCANNER_ENABLED);
501
+ if (roadmapScannerEnabled !== null) {
502
+ envConfig.roadmapScanner = {
503
+ ...DEFAULT_ROADMAP_SCANNER,
504
+ enabled: roadmapScannerEnabled,
505
+ };
506
+ }
507
+ }
508
+ // NW_TEMPLATES_DIR environment variable
509
+ if (process.env.NW_TEMPLATES_DIR) {
510
+ envConfig.templatesDir = process.env.NW_TEMPLATES_DIR;
511
+ }
512
+ // NW_SLICER_SCHEDULE environment variable
513
+ if (process.env.NW_SLICER_SCHEDULE) {
514
+ envConfig.roadmapScanner = {
515
+ ...(envConfig.roadmapScanner ?? DEFAULT_ROADMAP_SCANNER),
516
+ slicerSchedule: process.env.NW_SLICER_SCHEDULE,
517
+ };
518
+ }
519
+ // NW_SLICER_MAX_RUNTIME environment variable
520
+ if (process.env.NW_SLICER_MAX_RUNTIME) {
521
+ const slicerMaxRuntime = parseInt(process.env.NW_SLICER_MAX_RUNTIME, 10);
522
+ if (!isNaN(slicerMaxRuntime) && slicerMaxRuntime > 0) {
523
+ envConfig.roadmapScanner = {
524
+ ...(envConfig.roadmapScanner ?? DEFAULT_ROADMAP_SCANNER),
525
+ slicerMaxRuntime,
526
+ };
527
+ }
528
+ }
529
+ // NW_AUTO_MERGE environment variable
530
+ if (process.env.NW_AUTO_MERGE) {
531
+ const autoMerge = parseBoolean(process.env.NW_AUTO_MERGE);
532
+ if (autoMerge !== null) {
533
+ envConfig.autoMerge = autoMerge;
534
+ }
535
+ }
536
+ // NW_AUTO_MERGE_METHOD environment variable
537
+ if (process.env.NW_AUTO_MERGE_METHOD) {
538
+ const mergeMethod = validateMergeMethod(process.env.NW_AUTO_MERGE_METHOD);
539
+ if (mergeMethod !== null) {
540
+ envConfig.autoMergeMethod = mergeMethod;
541
+ }
542
+ }
543
+ // NW_FALLBACK_ON_RATE_LIMIT environment variable
544
+ if (process.env.NW_FALLBACK_ON_RATE_LIMIT) {
545
+ const fallback = parseBoolean(process.env.NW_FALLBACK_ON_RATE_LIMIT);
546
+ if (fallback !== null) {
547
+ envConfig.fallbackOnRateLimit = fallback;
548
+ }
549
+ }
550
+ // NW_CLAUDE_MODEL environment variable
551
+ if (process.env.NW_CLAUDE_MODEL) {
552
+ const model = process.env.NW_CLAUDE_MODEL;
553
+ if (VALID_CLAUDE_MODELS.includes(model)) {
554
+ envConfig.claudeModel = model;
555
+ }
556
+ }
557
+ const qaBaseConfig = () => envConfig.qa ?? fileConfig?.qa ?? DEFAULT_QA;
558
+ // QA configuration from env vars
559
+ if (process.env.NW_QA_ENABLED) {
560
+ const qaEnabled = parseBoolean(process.env.NW_QA_ENABLED);
561
+ if (qaEnabled !== null) {
562
+ envConfig.qa = {
563
+ ...qaBaseConfig(),
564
+ enabled: qaEnabled,
565
+ };
566
+ }
567
+ }
568
+ if (process.env.NW_QA_SCHEDULE) {
569
+ envConfig.qa = {
570
+ ...qaBaseConfig(),
571
+ schedule: process.env.NW_QA_SCHEDULE,
572
+ };
573
+ }
574
+ if (process.env.NW_QA_MAX_RUNTIME) {
575
+ const qaMaxRuntime = parseInt(process.env.NW_QA_MAX_RUNTIME, 10);
576
+ if (!isNaN(qaMaxRuntime) && qaMaxRuntime > 0) {
577
+ envConfig.qa = {
578
+ ...qaBaseConfig(),
579
+ maxRuntime: qaMaxRuntime,
580
+ };
581
+ }
582
+ }
583
+ if (process.env.NW_QA_ARTIFACTS) {
584
+ const artifacts = process.env.NW_QA_ARTIFACTS;
585
+ if (["screenshot", "video", "both"].includes(artifacts)) {
586
+ envConfig.qa = {
587
+ ...qaBaseConfig(),
588
+ artifacts: artifacts,
589
+ };
590
+ }
591
+ }
592
+ if (process.env.NW_QA_SKIP_LABEL) {
593
+ envConfig.qa = {
594
+ ...qaBaseConfig(),
595
+ skipLabel: process.env.NW_QA_SKIP_LABEL,
596
+ };
597
+ }
598
+ if (process.env.NW_QA_AUTO_INSTALL_PLAYWRIGHT) {
599
+ const autoInstall = parseBoolean(process.env.NW_QA_AUTO_INSTALL_PLAYWRIGHT);
600
+ if (autoInstall !== null) {
601
+ envConfig.qa = {
602
+ ...qaBaseConfig(),
603
+ autoInstallPlaywright: autoInstall,
604
+ };
605
+ }
606
+ }
607
+ if (process.env.NW_QA_BRANCH_PATTERNS) {
608
+ const patterns = process.env.NW_QA_BRANCH_PATTERNS.split(",").map((s) => s.trim()).filter(Boolean);
609
+ if (patterns.length > 0) {
610
+ envConfig.qa = {
611
+ ...qaBaseConfig(),
612
+ branchPatterns: patterns,
613
+ };
614
+ }
615
+ }
616
+ // Merge all configs
617
+ return mergeConfigs(defaults, fileConfig, envConfig);
618
+ }
619
+ /**
620
+ * Get the path to a bundled script
621
+ * This returns the path to a script in the package's scripts/ directory
622
+ */
623
+ export function getScriptPath(scriptName) {
624
+ const configFilePath = fileURLToPath(import.meta.url);
625
+ // In development, scripts are in scripts/ relative to package root
626
+ // In production (after npm pack), they're still in scripts/
627
+ return path.join(path.dirname(configFilePath), "..", "scripts", scriptName);
628
+ }
629
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}