@jonit-dev/night-watch-cli 1.7.17 → 1.7.19

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