@jonit-dev/night-watch-cli 1.8.10-beta.1 → 1.8.10-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/dist/cli.js +2309 -1313
  2. package/dist/scripts/night-watch-cron.sh +1 -3
  3. package/dist/scripts/night-watch-merger-cron.sh +1 -1
  4. package/dist/scripts/night-watch-plan-cron.sh +1 -1
  5. package/dist/scripts/night-watch-slicer-cron.sh +1 -1
  6. package/dist/web/assets/index-BUgI2S1s.js +406 -0
  7. package/dist/web/assets/index-CkdLFBd7.js +406 -0
  8. package/dist/web/assets/index-RMfswANB.css +1 -0
  9. package/dist/web/index.html +2 -2
  10. package/package.json +1 -1
  11. package/dist/cli.d.ts +0 -3
  12. package/dist/cli.d.ts.map +0 -1
  13. package/dist/cli.js.map +0 -1
  14. package/dist/commands/analytics.d.ts +0 -14
  15. package/dist/commands/analytics.d.ts.map +0 -1
  16. package/dist/commands/analytics.js +0 -69
  17. package/dist/commands/analytics.js.map +0 -1
  18. package/dist/commands/audit.d.ts +0 -19
  19. package/dist/commands/audit.d.ts.map +0 -1
  20. package/dist/commands/audit.js +0 -144
  21. package/dist/commands/audit.js.map +0 -1
  22. package/dist/commands/board.d.ts +0 -9
  23. package/dist/commands/board.d.ts.map +0 -1
  24. package/dist/commands/board.js +0 -702
  25. package/dist/commands/board.js.map +0 -1
  26. package/dist/commands/cancel.d.ts +0 -46
  27. package/dist/commands/cancel.d.ts.map +0 -1
  28. package/dist/commands/cancel.js +0 -239
  29. package/dist/commands/cancel.js.map +0 -1
  30. package/dist/commands/cron.d.ts +0 -8
  31. package/dist/commands/cron.d.ts.map +0 -1
  32. package/dist/commands/cron.js +0 -134
  33. package/dist/commands/cron.js.map +0 -1
  34. package/dist/commands/dashboard/tab-actions.d.ts +0 -10
  35. package/dist/commands/dashboard/tab-actions.d.ts.map +0 -1
  36. package/dist/commands/dashboard/tab-actions.js +0 -247
  37. package/dist/commands/dashboard/tab-actions.js.map +0 -1
  38. package/dist/commands/dashboard/tab-config.d.ts +0 -21
  39. package/dist/commands/dashboard/tab-config.d.ts.map +0 -1
  40. package/dist/commands/dashboard/tab-config.js +0 -873
  41. package/dist/commands/dashboard/tab-config.js.map +0 -1
  42. package/dist/commands/dashboard/tab-logs.d.ts +0 -10
  43. package/dist/commands/dashboard/tab-logs.d.ts.map +0 -1
  44. package/dist/commands/dashboard/tab-logs.js +0 -202
  45. package/dist/commands/dashboard/tab-logs.js.map +0 -1
  46. package/dist/commands/dashboard/tab-schedules.d.ts +0 -21
  47. package/dist/commands/dashboard/tab-schedules.d.ts.map +0 -1
  48. package/dist/commands/dashboard/tab-schedules.js +0 -320
  49. package/dist/commands/dashboard/tab-schedules.js.map +0 -1
  50. package/dist/commands/dashboard/tab-status.d.ts +0 -32
  51. package/dist/commands/dashboard/tab-status.d.ts.map +0 -1
  52. package/dist/commands/dashboard/tab-status.js +0 -424
  53. package/dist/commands/dashboard/tab-status.js.map +0 -1
  54. package/dist/commands/dashboard/types.d.ts +0 -42
  55. package/dist/commands/dashboard/types.d.ts.map +0 -1
  56. package/dist/commands/dashboard/types.js +0 -5
  57. package/dist/commands/dashboard/types.js.map +0 -1
  58. package/dist/commands/dashboard.d.ts +0 -11
  59. package/dist/commands/dashboard.d.ts.map +0 -1
  60. package/dist/commands/dashboard.js +0 -242
  61. package/dist/commands/dashboard.js.map +0 -1
  62. package/dist/commands/doctor.d.ts +0 -16
  63. package/dist/commands/doctor.d.ts.map +0 -1
  64. package/dist/commands/doctor.js +0 -195
  65. package/dist/commands/doctor.js.map +0 -1
  66. package/dist/commands/history.d.ts +0 -7
  67. package/dist/commands/history.d.ts.map +0 -1
  68. package/dist/commands/history.js +0 -49
  69. package/dist/commands/history.js.map +0 -1
  70. package/dist/commands/init.d.ts +0 -45
  71. package/dist/commands/init.d.ts.map +0 -1
  72. package/dist/commands/init.js +0 -777
  73. package/dist/commands/init.js.map +0 -1
  74. package/dist/commands/install.d.ts +0 -65
  75. package/dist/commands/install.d.ts.map +0 -1
  76. package/dist/commands/install.js +0 -405
  77. package/dist/commands/install.js.map +0 -1
  78. package/dist/commands/logs.d.ts +0 -15
  79. package/dist/commands/logs.d.ts.map +0 -1
  80. package/dist/commands/logs.js +0 -155
  81. package/dist/commands/logs.js.map +0 -1
  82. package/dist/commands/merge.d.ts +0 -26
  83. package/dist/commands/merge.d.ts.map +0 -1
  84. package/dist/commands/merge.js +0 -159
  85. package/dist/commands/merge.js.map +0 -1
  86. package/dist/commands/notify.d.ts +0 -7
  87. package/dist/commands/notify.d.ts.map +0 -1
  88. package/dist/commands/notify.js +0 -43
  89. package/dist/commands/notify.js.map +0 -1
  90. package/dist/commands/plan.d.ts +0 -19
  91. package/dist/commands/plan.d.ts.map +0 -1
  92. package/dist/commands/plan.js +0 -88
  93. package/dist/commands/plan.js.map +0 -1
  94. package/dist/commands/prd-state.d.ts +0 -12
  95. package/dist/commands/prd-state.d.ts.map +0 -1
  96. package/dist/commands/prd-state.js +0 -47
  97. package/dist/commands/prd-state.js.map +0 -1
  98. package/dist/commands/prd.d.ts +0 -18
  99. package/dist/commands/prd.d.ts.map +0 -1
  100. package/dist/commands/prd.js +0 -363
  101. package/dist/commands/prd.js.map +0 -1
  102. package/dist/commands/prds.d.ts +0 -13
  103. package/dist/commands/prds.d.ts.map +0 -1
  104. package/dist/commands/prds.js +0 -194
  105. package/dist/commands/prds.js.map +0 -1
  106. package/dist/commands/prs.d.ts +0 -14
  107. package/dist/commands/prs.d.ts.map +0 -1
  108. package/dist/commands/prs.js +0 -104
  109. package/dist/commands/prs.js.map +0 -1
  110. package/dist/commands/qa.d.ts +0 -34
  111. package/dist/commands/qa.d.ts.map +0 -1
  112. package/dist/commands/qa.js +0 -214
  113. package/dist/commands/qa.js.map +0 -1
  114. package/dist/commands/queue.d.ts +0 -8
  115. package/dist/commands/queue.d.ts.map +0 -1
  116. package/dist/commands/queue.js +0 -376
  117. package/dist/commands/queue.js.map +0 -1
  118. package/dist/commands/resolve.d.ts +0 -26
  119. package/dist/commands/resolve.d.ts.map +0 -1
  120. package/dist/commands/resolve.js +0 -186
  121. package/dist/commands/resolve.js.map +0 -1
  122. package/dist/commands/retry.d.ts +0 -9
  123. package/dist/commands/retry.d.ts.map +0 -1
  124. package/dist/commands/retry.js +0 -71
  125. package/dist/commands/retry.js.map +0 -1
  126. package/dist/commands/review.d.ts +0 -82
  127. package/dist/commands/review.d.ts.map +0 -1
  128. package/dist/commands/review.js +0 -479
  129. package/dist/commands/review.js.map +0 -1
  130. package/dist/commands/run.d.ts +0 -73
  131. package/dist/commands/run.d.ts.map +0 -1
  132. package/dist/commands/run.js +0 -509
  133. package/dist/commands/run.js.map +0 -1
  134. package/dist/commands/serve.d.ts +0 -19
  135. package/dist/commands/serve.d.ts.map +0 -1
  136. package/dist/commands/serve.js +0 -142
  137. package/dist/commands/serve.js.map +0 -1
  138. package/dist/commands/shared/env-builder.d.ts +0 -49
  139. package/dist/commands/shared/env-builder.d.ts.map +0 -1
  140. package/dist/commands/shared/env-builder.js +0 -150
  141. package/dist/commands/shared/env-builder.js.map +0 -1
  142. package/dist/commands/slice.d.ts +0 -35
  143. package/dist/commands/slice.d.ts.map +0 -1
  144. package/dist/commands/slice.js +0 -316
  145. package/dist/commands/slice.js.map +0 -1
  146. package/dist/commands/state.d.ts +0 -8
  147. package/dist/commands/state.d.ts.map +0 -1
  148. package/dist/commands/state.js +0 -54
  149. package/dist/commands/state.js.map +0 -1
  150. package/dist/commands/status.d.ts +0 -14
  151. package/dist/commands/status.d.ts.map +0 -1
  152. package/dist/commands/status.js +0 -297
  153. package/dist/commands/status.js.map +0 -1
  154. package/dist/commands/summary.d.ts +0 -14
  155. package/dist/commands/summary.d.ts.map +0 -1
  156. package/dist/commands/summary.js +0 -193
  157. package/dist/commands/summary.js.map +0 -1
  158. package/dist/commands/uninstall.d.ts +0 -25
  159. package/dist/commands/uninstall.d.ts.map +0 -1
  160. package/dist/commands/uninstall.js +0 -134
  161. package/dist/commands/uninstall.js.map +0 -1
  162. package/dist/commands/update.d.ts +0 -22
  163. package/dist/commands/update.d.ts.map +0 -1
  164. package/dist/commands/update.js +0 -90
  165. package/dist/commands/update.js.map +0 -1
  166. package/dist/web/assets/index-2JY0x_Ij.js +0 -381
  167. package/dist/web/assets/index-3h8pgmqL.css +0 -1
  168. package/dist/web/assets/index-B-wbyZq7.js +0 -386
  169. package/dist/web/assets/index-B1BnOpiO.css +0 -1
  170. package/dist/web/assets/index-B3CnV08_.js +0 -365
  171. package/dist/web/assets/index-B5QjuFh9.css +0 -1
  172. package/dist/web/assets/index-B8FW2ecQ.js +0 -370
  173. package/dist/web/assets/index-BFxPiKyy.js +0 -381
  174. package/dist/web/assets/index-BGqNh_Da.js +0 -365
  175. package/dist/web/assets/index-BIONU0qz.css +0 -1
  176. package/dist/web/assets/index-B_l_3wnA.js +0 -370
  177. package/dist/web/assets/index-Ba-4YvTQ.js +0 -365
  178. package/dist/web/assets/index-Bbb4-39N.js +0 -370
  179. package/dist/web/assets/index-BdgdShEN.js +0 -365
  180. package/dist/web/assets/index-BhiC4Z-G.js +0 -381
  181. package/dist/web/assets/index-BjhCFjZi.js +0 -381
  182. package/dist/web/assets/index-BlRxmrnQ.css +0 -1
  183. package/dist/web/assets/index-BqwbXsHS.js +0 -365
  184. package/dist/web/assets/index-BsC7RT48.css +0 -1
  185. package/dist/web/assets/index-Bvh8XI8_.js +0 -370
  186. package/dist/web/assets/index-C01r2ymn.js +0 -381
  187. package/dist/web/assets/index-C51Rbsmk.js +0 -381
  188. package/dist/web/assets/index-C7lMNxRE.js +0 -370
  189. package/dist/web/assets/index-CJLObgsn.js +0 -386
  190. package/dist/web/assets/index-CLuRf7Zt.js +0 -381
  191. package/dist/web/assets/index-CM3xFd3e.css +0 -1
  192. package/dist/web/assets/index-CNkBtDK7.js +0 -370
  193. package/dist/web/assets/index-CPQbZ1BL.css +0 -1
  194. package/dist/web/assets/index-CTy5dUDU.css +0 -1
  195. package/dist/web/assets/index-CU15COKs.js +0 -370
  196. package/dist/web/assets/index-CiRJZI4z.js +0 -386
  197. package/dist/web/assets/index-Cp7RYjoy.css +0 -1
  198. package/dist/web/assets/index-CvPkZOWT.js +0 -381
  199. package/dist/web/assets/index-CvUk-33B.css +0 -1
  200. package/dist/web/assets/index-Cvmj-oF6.css +0 -1
  201. package/dist/web/assets/index-CxE5iQVO.js +0 -381
  202. package/dist/web/assets/index-D7lZQpFV.js +0 -365
  203. package/dist/web/assets/index-DAyP4GOi.css +0 -1
  204. package/dist/web/assets/index-DCG0n8Kg.js +0 -386
  205. package/dist/web/assets/index-DEEI8cyF.css +0 -1
  206. package/dist/web/assets/index-DF99BowV.js +0 -381
  207. package/dist/web/assets/index-DGWsvFj6.css +0 -1
  208. package/dist/web/assets/index-DGpU39Cp.css +0 -1
  209. package/dist/web/assets/index-DI4kFgOi.js +0 -370
  210. package/dist/web/assets/index-DIyTcPw5.css +0 -1
  211. package/dist/web/assets/index-DTsfDC7m.js +0 -381
  212. package/dist/web/assets/index-DcgNAi4A.js +0 -386
  213. package/dist/web/assets/index-DgOAgkZy.css +0 -1
  214. package/dist/web/assets/index-DnHkqbOa.js +0 -386
  215. package/dist/web/assets/index-DnR7Idcf.css +0 -1
  216. package/dist/web/assets/index-DpVirMEe.css +0 -1
  217. package/dist/web/assets/index-DsYIWZ86.css +0 -1
  218. package/dist/web/assets/index-DtrDkci5.js +0 -381
  219. package/dist/web/assets/index-DyjIth5M.js +0 -386
  220. package/dist/web/assets/index-FwIKfHPL.css +0 -1
  221. package/dist/web/assets/index-IKrZymWk.css +0 -1
  222. package/dist/web/assets/index-MA6fM0ab.js +0 -381
  223. package/dist/web/assets/index-N_QxaSEg.css +0 -1
  224. package/dist/web/assets/index-OcU-0TCQ.css +0 -1
  225. package/dist/web/assets/index-OyhrmG-L.js +0 -381
  226. package/dist/web/assets/index-SQlBKu_s.js +0 -386
  227. package/dist/web/assets/index-Sv2B60J4.js +0 -370
  228. package/dist/web/assets/index-Vgyivb5u.js +0 -365
  229. package/dist/web/assets/index-ZABWMEZR.js +0 -381
  230. package/dist/web/assets/index-ZE5lOeJp.js +0 -386
  231. package/dist/web/assets/index-aCHmkAcJ.css +0 -1
  232. package/dist/web/assets/index-bFijnpuU.js +0 -381
  233. package/dist/web/assets/index-bUPZgSoZ.css +0 -1
  234. package/dist/web/assets/index-mz1VIYsP.css +0 -1
  235. package/dist/web/assets/index-oOp_MFeE.js +0 -376
  236. package/dist/web/assets/index-rfU713Zm.js +0 -386
  237. package/dist/web/assets/index-tuNH9gmb.js +0 -448
  238. package/dist/web/assets/index-viSwHyDD.js +0 -365
  239. package/dist/web/assets/index-yKEQysks.js +0 -365
@@ -1,155 +0,0 @@
1
- /**
2
- * Logs command for Night Watch CLI
3
- * View log output from Night Watch jobs
4
- */
5
- import { spawn } from 'child_process';
6
- import * as path from 'path';
7
- import * as fs from 'fs';
8
- import { ANALYTICS_LOG_NAME, AUDIT_LOG_NAME, EXECUTOR_LOG_FILE, LOG_DIR, MERGER_LOG_NAME, PLANNER_LOG_NAME, QA_LOG_NAME, REVIEWER_LOG_FILE, dim, header, } from '@night-watch/core';
9
- /**
10
- * Get last N lines from a file
11
- */
12
- function getLastLines(filePath, lineCount) {
13
- if (!fs.existsSync(filePath)) {
14
- return `Log file not found: ${filePath}`;
15
- }
16
- try {
17
- const content = fs.readFileSync(filePath, 'utf-8');
18
- const lines = content.trim().split('\n');
19
- return lines.slice(-lineCount).join('\n');
20
- }
21
- catch (error) {
22
- return `Error reading log file: ${error instanceof Error ? error.message : String(error)}`;
23
- }
24
- }
25
- /**
26
- * Follow log file in real-time using tail -f
27
- */
28
- function followLog(filePath) {
29
- if (!fs.existsSync(filePath)) {
30
- console.log(`Log file not found: ${filePath}`);
31
- console.log('The log file will be created when the first execution runs.');
32
- return;
33
- }
34
- const tail = spawn('tail', ['-f', filePath], {
35
- stdio: 'inherit',
36
- });
37
- tail.on('error', (error) => {
38
- console.error(`Error following log: ${error.message}`);
39
- });
40
- // Handle Ctrl+C gracefully
41
- process.on('SIGINT', () => {
42
- tail.kill();
43
- process.exit(0);
44
- });
45
- }
46
- /**
47
- * Logs command implementation
48
- */
49
- export function logsCommand(program) {
50
- program
51
- .command('logs')
52
- .description('View night-watch log output')
53
- .option('-n, --lines <count>', 'Number of lines to show', '50')
54
- .option('-f, --follow', 'Follow log output (tail -f)')
55
- .option('-t, --type <type>', 'Log type to view (executor|reviewer|qa|audit|planner|analytics|merger|all)', 'all')
56
- .action(async (options) => {
57
- try {
58
- const projectDir = process.cwd();
59
- const logDir = path.join(projectDir, LOG_DIR);
60
- const lineCount = parseInt(options.lines || '50', 10);
61
- const executorLog = path.join(logDir, EXECUTOR_LOG_FILE);
62
- const reviewerLog = path.join(logDir, REVIEWER_LOG_FILE);
63
- const qaLog = path.join(logDir, `${QA_LOG_NAME}.log`);
64
- const auditLog = path.join(logDir, `${AUDIT_LOG_NAME}.log`);
65
- const plannerLog = path.join(logDir, `${PLANNER_LOG_NAME}.log`);
66
- const analyticsLog = path.join(logDir, `${ANALYTICS_LOG_NAME}.log`);
67
- const mergerLog = path.join(logDir, `${MERGER_LOG_NAME}.log`);
68
- // Determine which logs to show
69
- const logType = options.type?.toLowerCase() || 'all';
70
- const showExecutor = logType === 'all' || logType === 'run' || logType === 'executor';
71
- const showReviewer = logType === 'all' || logType === 'review' || logType === 'reviewer';
72
- const showQa = logType === 'all' || logType === 'qa';
73
- const showAudit = logType === 'all' || logType === 'audit';
74
- const showPlanner = logType === 'all' || logType === 'planner' || logType === 'slice' || logType === 'slicer';
75
- const showAnalytics = logType === 'all' || logType === 'analytics';
76
- const showMerger = logType === 'all' || logType === 'merge' || logType === 'merger';
77
- // Handle --follow mode
78
- if (options.follow) {
79
- if (logType === 'all') {
80
- dim('Note: Following all logs is not supported. Showing executor log.');
81
- dim('Use --type reviewer|qa|audit|planner|analytics|merger for other logs.\n');
82
- }
83
- let targetLog = executorLog;
84
- if (showReviewer)
85
- targetLog = reviewerLog;
86
- else if (showQa)
87
- targetLog = qaLog;
88
- else if (showAudit)
89
- targetLog = auditLog;
90
- else if (showPlanner)
91
- targetLog = plannerLog;
92
- else if (showAnalytics)
93
- targetLog = analyticsLog;
94
- else if (showMerger)
95
- targetLog = mergerLog;
96
- followLog(targetLog);
97
- return;
98
- }
99
- // Show static log output
100
- console.log();
101
- if (showExecutor) {
102
- header('Executor Log');
103
- dim(`File: ${executorLog}`);
104
- console.log();
105
- console.log(getLastLines(executorLog, lineCount));
106
- }
107
- if (showReviewer) {
108
- header('Reviewer Log');
109
- dim(`File: ${reviewerLog}`);
110
- console.log();
111
- console.log(getLastLines(reviewerLog, lineCount));
112
- }
113
- if (showQa) {
114
- header('QA Log');
115
- dim(`File: ${qaLog}`);
116
- console.log();
117
- console.log(getLastLines(qaLog, lineCount));
118
- }
119
- if (showAudit) {
120
- header('Audit Log');
121
- dim(`File: ${auditLog}`);
122
- console.log();
123
- console.log(getLastLines(auditLog, lineCount));
124
- }
125
- if (showPlanner) {
126
- header('Planner Log');
127
- dim(`File: ${plannerLog}`);
128
- console.log();
129
- console.log(getLastLines(plannerLog, lineCount));
130
- }
131
- if (showAnalytics) {
132
- header('Analytics Log');
133
- dim(`File: ${analyticsLog}`);
134
- console.log();
135
- console.log(getLastLines(analyticsLog, lineCount));
136
- }
137
- if (showMerger) {
138
- header('Merger Log');
139
- dim(`File: ${mergerLog}`);
140
- console.log();
141
- console.log(getLastLines(mergerLog, lineCount));
142
- }
143
- // Add tip
144
- console.log();
145
- dim('---');
146
- dim('Tip: Use -f to follow logs in real-time');
147
- dim(' Use --type executor|reviewer|qa|audit|planner|analytics|merger to view specific logs');
148
- }
149
- catch (err) {
150
- console.error(`Error reading logs: ${err instanceof Error ? err.message : String(err)}`);
151
- process.exit(1);
152
- }
153
- });
154
- }
155
- //# sourceMappingURL=logs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Merge command - executes the merger cron script
3
- */
4
- import { Command } from 'commander';
5
- import { INightWatchConfig } from '@night-watch/core';
6
- /**
7
- * Options for the merge command
8
- */
9
- export interface IMergeOptions {
10
- dryRun: boolean;
11
- timeout?: string;
12
- provider?: string;
13
- }
14
- /**
15
- * Build environment variables map from config and CLI options for merger
16
- */
17
- export declare function buildEnvVars(config: INightWatchConfig, options: IMergeOptions): Record<string, string>;
18
- /**
19
- * Apply CLI flag overrides to the config for merger
20
- */
21
- export declare function applyCliOverrides(config: INightWatchConfig, options: IMergeOptions): INightWatchConfig;
22
- /**
23
- * Register the merge command with the program
24
- */
25
- export declare function mergeCommand(program: Command): void;
26
- //# sourceMappingURL=merge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/commands/merge.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,iBAAiB,EAalB,MAAM,mBAAmB,CAAC;AAQ3B;;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,CAC1B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBxB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,iBAAiB,CAgBnB;AAgED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgFnD"}
@@ -1,159 +0,0 @@
1
- /**
2
- * Merge command - executes the merger cron script
3
- */
4
- import { createSpinner, createTable, dim, executeScriptWithOutput, getScriptPath, header, info, loadConfig, parseScriptResult, resolveJobProvider, sendNotifications, error as uiError, } from '@night-watch/core';
5
- import { buildBaseEnvVars, formatProviderDisplay, maybeApplyCronSchedulingDelay, } from './shared/env-builder.js';
6
- import * as path from 'path';
7
- /**
8
- * Build environment variables map from config and CLI options for merger
9
- */
10
- export function buildEnvVars(config, options) {
11
- // Start with base env vars shared by all job types
12
- const env = buildBaseEnvVars(config, 'merger', options.dryRun);
13
- // Runtime for merger (uses NW_MERGER_* variables)
14
- env.NW_MERGER_MAX_RUNTIME = String(config.merger.maxRuntime);
15
- env.NW_MERGER_MERGE_METHOD = config.merger.mergeMethod;
16
- env.NW_MERGER_MIN_REVIEW_SCORE = String(config.merger.minReviewScore);
17
- env.NW_MERGER_BRANCH_PATTERNS = (config.merger.branchPatterns.length > 0
18
- ? config.merger.branchPatterns
19
- : config.branchPatterns).join(',');
20
- env.NW_MERGER_REBASE_BEFORE_MERGE = config.merger.rebaseBeforeMerge ? '1' : '0';
21
- env.NW_MERGER_MAX_PRS_PER_RUN = String(config.merger.maxPrsPerRun);
22
- return env;
23
- }
24
- /**
25
- * Apply CLI flag overrides to the config for merger
26
- */
27
- export function applyCliOverrides(config, options) {
28
- const overridden = { ...config, merger: { ...config.merger } };
29
- if (options.timeout) {
30
- const timeout = parseInt(options.timeout, 10);
31
- if (!isNaN(timeout)) {
32
- overridden.merger.maxRuntime = timeout;
33
- }
34
- }
35
- if (options.provider) {
36
- // Use _cliProviderOverride to ensure CLI flag takes precedence over jobProviders
37
- overridden._cliProviderOverride = options.provider;
38
- }
39
- return overridden;
40
- }
41
- /**
42
- * Resolve which notification event to emit based on the script outcome
43
- */
44
- function resolveMergeNotificationEvent(exitCode, mergedCount, failedCount) {
45
- if (exitCode === 0 && mergedCount > 0) {
46
- return 'merge_completed';
47
- }
48
- if (exitCode !== 0 || failedCount > 0) {
49
- return 'merge_failed';
50
- }
51
- return null;
52
- }
53
- /**
54
- * Print dry-run output for the merge command
55
- */
56
- function printDryRun(config, envVars, scriptPath, projectDir) {
57
- header('Dry Run: Merge Orchestrator');
58
- const mergerProvider = resolveJobProvider(config, 'merger');
59
- header('Configuration');
60
- const configTable = createTable({ head: ['Setting', 'Value'] });
61
- configTable.push(['Provider', mergerProvider]);
62
- configTable.push([
63
- 'Max Runtime',
64
- `${config.merger.maxRuntime}s (${Math.floor(config.merger.maxRuntime / 60)}min)`,
65
- ]);
66
- configTable.push(['Merge Method', config.merger.mergeMethod]);
67
- configTable.push(['Min Review Score', `${config.merger.minReviewScore}/100`]);
68
- configTable.push([
69
- 'Branch Patterns',
70
- config.merger.branchPatterns.length > 0
71
- ? config.merger.branchPatterns.join(', ')
72
- : '(top-level)',
73
- ]);
74
- configTable.push(['Rebase Before Merge', config.merger.rebaseBeforeMerge ? 'Yes' : 'No']);
75
- configTable.push([
76
- 'Max PRs Per Run',
77
- config.merger.maxPrsPerRun === 0 ? 'Unlimited' : String(config.merger.maxPrsPerRun),
78
- ]);
79
- console.log(configTable.toString());
80
- header('Environment Variables');
81
- for (const [key, value] of Object.entries(envVars)) {
82
- dim(` ${key}=${value}`);
83
- }
84
- header('Command');
85
- dim(` bash ${scriptPath} ${projectDir}`);
86
- console.log();
87
- }
88
- /**
89
- * Register the merge command with the program
90
- */
91
- export function mergeCommand(program) {
92
- program
93
- .command('merge')
94
- .description('Merge eligible PRs in FIFO order')
95
- .option('--dry-run', 'Show what would be executed without running')
96
- .option('--timeout <seconds>', 'Override max runtime')
97
- .option('--provider <string>', 'AI provider to use')
98
- .action(async (options) => {
99
- // Get the project directory (current working directory)
100
- const projectDir = process.cwd();
101
- // Load config from file and environment
102
- let config = loadConfig(projectDir);
103
- // Apply CLI flag overrides
104
- config = applyCliOverrides(config, options);
105
- if (!config.merger.enabled && !options.dryRun) {
106
- info('Merge orchestrator is disabled in config; skipping.');
107
- process.exit(0);
108
- }
109
- // Build environment variables
110
- const envVars = buildEnvVars(config, options);
111
- // Get the script path
112
- const scriptPath = getScriptPath('night-watch-merger-cron.sh');
113
- if (options.dryRun) {
114
- printDryRun(config, envVars, scriptPath, projectDir);
115
- process.exit(0);
116
- }
117
- // Execute the script with spinner
118
- const spinner = createSpinner('Running merge orchestrator...');
119
- spinner.start();
120
- try {
121
- await maybeApplyCronSchedulingDelay(config, 'merger', projectDir);
122
- const { exitCode, stdout, stderr } = await executeScriptWithOutput(scriptPath, [projectDir], envVars);
123
- const scriptResult = parseScriptResult(`${stdout}\n${stderr}`);
124
- if (exitCode === 0) {
125
- if (scriptResult?.status === 'queued') {
126
- spinner.succeed('Merge orchestrator queued — another job is currently running');
127
- }
128
- else if (scriptResult?.status?.startsWith('skip_')) {
129
- spinner.succeed('Merge orchestrator completed (no eligible PRs)');
130
- }
131
- else {
132
- spinner.succeed('Merge orchestrator completed successfully');
133
- }
134
- }
135
- else {
136
- spinner.fail(`Merge orchestrator exited with code ${exitCode}`);
137
- }
138
- // Parse result for notification data
139
- const mergedCount = parseInt(scriptResult?.data?.merged ?? '0', 10);
140
- const failedCount = parseInt(scriptResult?.data?.failed ?? '0', 10);
141
- const notificationEvent = resolveMergeNotificationEvent(exitCode, mergedCount, failedCount);
142
- if (notificationEvent) {
143
- await sendNotifications(config, {
144
- event: notificationEvent,
145
- projectName: path.basename(projectDir),
146
- exitCode,
147
- provider: formatProviderDisplay(envVars.NW_PROVIDER_CMD, envVars.NW_PROVIDER_LABEL),
148
- });
149
- }
150
- process.exit(exitCode);
151
- }
152
- catch (err) {
153
- spinner.fail('Failed to execute merge command');
154
- uiError(`${err instanceof Error ? err.message : String(err)}`);
155
- process.exit(1);
156
- }
157
- });
158
- }
159
- //# sourceMappingURL=merge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/commands/merge.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Notify command — sends a notification event via configured webhooks.
3
- * Designed for bash script integration.
4
- */
5
- import { Command } from 'commander';
6
- export declare function notifyCommand(program: Command): void;
7
- //# sourceMappingURL=notify.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/commands/notify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyCpD"}
@@ -1,43 +0,0 @@
1
- /**
2
- * Notify command — sends a notification event via configured webhooks.
3
- * Designed for bash script integration.
4
- */
5
- import { basename } from 'path';
6
- import { loadConfig, sendNotifications } from '@night-watch/core';
7
- const VALID_EVENTS = [
8
- 'run_started',
9
- 'run_succeeded',
10
- 'run_failed',
11
- 'run_timeout',
12
- 'review_completed',
13
- 'rate_limit_fallback',
14
- 'pr_auto_merged',
15
- 'qa_completed',
16
- ];
17
- export function notifyCommand(program) {
18
- program
19
- .command('notify <event> <projectDir>')
20
- .description('Send a notification event via configured webhooks')
21
- .option('--prd <name>', 'PRD name')
22
- .option('--branch <name>', 'Branch name')
23
- .option('--provider <name>', 'Provider name')
24
- .option('--exit-code <n>', 'Exit code', '0')
25
- .option('--pr-number <n>', 'PR number')
26
- .action(async (event, projectDir, options) => {
27
- if (!VALID_EVENTS.includes(event)) {
28
- process.stderr.write(`Invalid event: ${event}. Must be one of: ${VALID_EVENTS.join(', ')}\n`);
29
- process.exit(2);
30
- }
31
- const config = loadConfig(projectDir);
32
- await sendNotifications(config, {
33
- event: event,
34
- projectName: basename(projectDir),
35
- prdName: options.prd,
36
- branchName: options.branch,
37
- provider: options.provider ?? config.provider,
38
- exitCode: parseInt(options.exitCode, 10) || 0,
39
- prNumber: options.prNumber ? parseInt(options.prNumber, 10) : undefined,
40
- });
41
- });
42
- }
43
- //# sourceMappingURL=notify.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/commands/notify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGlE,MAAM,YAAY,GAAwB;IACxC,aAAa;IACb,eAAe;IACf,YAAY;IACZ,aAAa;IACb,kBAAkB;IAClB,qBAAqB;IACrB,gBAAgB;IAChB,cAAc;CACf,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,6BAA6B,CAAC;SACtC,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,cAAc,EAAE,UAAU,CAAC;SAClC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC;SAC5C,MAAM,CAAC,iBAAiB,EAAE,WAAW,EAAE,GAAG,CAAC;SAC3C,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC;SACtC,MAAM,CACL,KAAK,EACH,KAAa,EACb,UAAkB,EAClB,OAMC,EACD,EAAE;QACF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAA0B,CAAC,EAAE,CAAC;YACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kBAAkB,KAAK,qBAAqB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CACxE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QAEtC,MAAM,iBAAiB,CAAC,MAAM,EAAE;YAC9B,KAAK,EAAE,KAA0B;YACjC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;YACjC,OAAO,EAAE,OAAO,CAAC,GAAG;YACpB,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;YAC7C,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC;YAC7C,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;SACxE,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACN,CAAC"}
@@ -1,19 +0,0 @@
1
- /**
2
- * Plan command - runs the AI provider with the prd-creator skill to plan a feature
3
- */
4
- import { Command } from 'commander';
5
- import { INightWatchConfig } from '@night-watch/core';
6
- export interface IPlanOptions {
7
- dryRun: boolean;
8
- timeout?: string;
9
- provider?: string;
10
- }
11
- /**
12
- * Build environment variables for the plan command
13
- */
14
- export declare function buildEnvVars(config: INightWatchConfig, options: IPlanOptions, task: string): Record<string, string>;
15
- /**
16
- * Register the plan command with the program
17
- */
18
- export declare function planCommand(program: Command): void;
19
- //# sourceMappingURL=plan.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAEL,iBAAiB,EAWlB,MAAM,mBAAmB,CAAC;AAI3B,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6ElD"}
@@ -1,88 +0,0 @@
1
- /**
2
- * Plan command - runs the AI provider with the prd-creator skill to plan a feature
3
- */
4
- import { CLAUDE_MODEL_IDS, PROVIDER_COMMANDS, createSpinner, createTable, dim, executeScriptWithOutput, getScriptPath, header, loadConfig, parseScriptResult, resolveJobProvider, } from '@night-watch/core';
5
- import { buildBaseEnvVars } from './shared/env-builder.js';
6
- import * as path from 'path';
7
- /**
8
- * Build environment variables for the plan command
9
- */
10
- export function buildEnvVars(config, options, task) {
11
- const env = buildBaseEnvVars(config, 'planner', options.dryRun);
12
- env.NW_PLAN_MAX_RUNTIME = String(options.timeout ? parseInt(options.timeout, 10) : 1800);
13
- env.NW_PRD_DIR = config.prdDir;
14
- env.NW_PLAN_TASK = task;
15
- env.NW_CLAUDE_MODEL_ID =
16
- CLAUDE_MODEL_IDS[config.primaryFallbackModel ?? config.claudeModel ?? 'sonnet'];
17
- return env;
18
- }
19
- /**
20
- * Register the plan command with the program
21
- */
22
- export function planCommand(program) {
23
- program
24
- .command('plan [task]')
25
- .description('Plan a feature: runs the prd-creator skill to write a PRD')
26
- .option('--dry-run', 'Show what would be executed without running')
27
- .option('--timeout <seconds>', 'Override max runtime in seconds')
28
- .option('--provider <string>', 'AI provider to use (claude or codex)')
29
- .action(async (task, options) => {
30
- const projectDir = process.cwd();
31
- let config = loadConfig(projectDir);
32
- if (options.provider) {
33
- config = {
34
- ...config,
35
- _cliProviderOverride: options.provider,
36
- };
37
- }
38
- const resolvedTask = task ?? '';
39
- const envVars = buildEnvVars(config, options, resolvedTask);
40
- const scriptPath = getScriptPath('night-watch-plan-cron.sh');
41
- if (options.dryRun) {
42
- header('Dry Run: PRD Planner');
43
- const plannerProvider = resolveJobProvider(config, 'planner');
44
- header('Configuration');
45
- const configTable = createTable({ head: ['Setting', 'Value'] });
46
- configTable.push(['Provider', plannerProvider]);
47
- configTable.push(['Provider CLI', PROVIDER_COMMANDS[plannerProvider]]);
48
- configTable.push(['PRD Directory', config.prdDir]);
49
- configTable.push(['Task', resolvedTask || '(interactive)']);
50
- console.log(configTable.toString());
51
- header('Provider Invocation');
52
- if (plannerProvider === 'claude') {
53
- dim(` ${PROVIDER_COMMANDS[plannerProvider]} -p "<prd-creator instructions + task>" --dangerously-skip-permissions`);
54
- }
55
- else {
56
- dim(` ${PROVIDER_COMMANDS[plannerProvider]} exec --yolo "<prd-creator instructions + task>"`);
57
- }
58
- header('Command');
59
- dim(` bash ${scriptPath} ${projectDir}`);
60
- console.log();
61
- process.exit(0);
62
- }
63
- const label = resolvedTask ? `Planning: ${resolvedTask}` : 'Running PRD planner...';
64
- const spinner = createSpinner(label);
65
- spinner.start();
66
- try {
67
- const { exitCode, stdout, stderr } = await executeScriptWithOutput(scriptPath, [projectDir], envVars, { cwd: projectDir });
68
- const scriptResult = parseScriptResult(`${stdout}\n${stderr}`);
69
- if (exitCode === 0) {
70
- spinner.succeed(`PRD planner complete — PRD written to ${path.join(projectDir, config.prdDir)}/`);
71
- }
72
- else if (exitCode === 124) {
73
- spinner.fail('PRD planner timed out');
74
- process.exit(1);
75
- }
76
- else {
77
- const statusSuffix = scriptResult?.status ? ` (${scriptResult.status})` : '';
78
- spinner.fail(`PRD planner exited with code ${exitCode}${statusSuffix}`);
79
- process.exit(exitCode || 1);
80
- }
81
- }
82
- catch (err) {
83
- spinner.fail(`PRD planner failed: ${err instanceof Error ? err.message : String(err)}`);
84
- process.exit(1);
85
- }
86
- });
87
- }
88
- //# sourceMappingURL=plan.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,gBAAgB,EAEhB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,GAAG,EACH,uBAAuB,EACvB,aAAa,EACb,MAAM,EACN,UAAU,EACV,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAQ7B;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAyB,EACzB,OAAqB,EACrB,IAAY;IAEZ,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhE,GAAG,CAAC,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACzF,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC;IACxB,GAAG,CAAC,kBAAkB;QACpB,gBAAgB,CAAC,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC;IAElF,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,2DAA2D,CAAC;SACxE,MAAM,CAAC,WAAW,EAAE,6CAA6C,CAAC;SAClE,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;SAChE,MAAM,CAAC,qBAAqB,EAAE,sCAAsC,CAAC;SACrE,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,OAAqB,EAAE,EAAE;QAChE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,GAAG;gBACP,GAAG,MAAM;gBACT,oBAAoB,EAAE,OAAO,CAAC,QAAyC;aACxE,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,aAAa,CAAC,0BAA0B,CAAC,CAAC;QAE7D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAE/B,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAE9D,MAAM,CAAC,eAAe,CAAC,CAAC;YACxB,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAChE,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;YAChD,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACvE,WAAW,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACnD,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,YAAY,IAAI,eAAe,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEpC,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC9B,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;gBACjC,GAAG,CAAC,KAAK,iBAAiB,CAAC,eAAe,CAAC,wEAAwE,CAAC,CAAC;YACvH,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,KAAK,iBAAiB,CAAC,eAAe,CAAC,kDAAkD,CAAC,CAAC;YACjG,CAAC;YAED,MAAM,CAAC,SAAS,CAAC,CAAC;YAClB,GAAG,CAAC,UAAU,UAAU,IAAI,UAAU,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,aAAa,YAAY,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC;QACpF,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAChE,UAAU,EACV,CAAC,UAAU,CAAC,EACZ,OAAO,EACP,EAAE,GAAG,EAAE,UAAU,EAAE,CACpB,CAAC;YACF,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;YAE/D,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnB,OAAO,CAAC,OAAO,CAAC,yCAAyC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpG,CAAC;iBAAM,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,OAAO,CAAC,IAAI,CAAC,gCAAgC,QAAQ,GAAG,YAAY,EAAE,CAAC,CAAC;gBACxE,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * prd-state command — manage PRD state entries in ~/.night-watch/prd-states.json
3
- * Used by bash scripts to track pending-review state without moving files.
4
- *
5
- * Subcommands:
6
- * set <projectDir> <prdName> pending-review [--branch <branch>]
7
- * clear <projectDir> <prdName>
8
- * list <projectDir> [--status <status>]
9
- */
10
- import { Command } from 'commander';
11
- export declare function prdStateCommand(program: Command): void;
12
- //# sourceMappingURL=prd-state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prd-state.d.ts","sourceRoot":"","sources":["../../src/commands/prd-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsCtD"}
@@ -1,47 +0,0 @@
1
- /**
2
- * prd-state command — manage PRD state entries in ~/.night-watch/prd-states.json
3
- * Used by bash scripts to track pending-review state without moving files.
4
- *
5
- * Subcommands:
6
- * set <projectDir> <prdName> pending-review [--branch <branch>]
7
- * clear <projectDir> <prdName>
8
- * list <projectDir> [--status <status>]
9
- */
10
- import { clearPrdState, listPrdStatesByStatus, writePrdState } from '@night-watch/core';
11
- export function prdStateCommand(program) {
12
- const prdState = program
13
- .command('prd-state')
14
- .description('Manage PRD state entries in ~/.night-watch/prd-states.json');
15
- prdState
16
- .command('set <projectDir> <prdName>')
17
- .description('Set a PRD state to pending-review')
18
- .option('--branch <branch>', 'Branch name associated with the PR', '')
19
- .action((projectDir, prdName, options) => {
20
- writePrdState(projectDir, prdName, {
21
- status: 'pending-review',
22
- branch: options.branch,
23
- timestamp: Math.floor(Date.now() / 1000),
24
- });
25
- });
26
- prdState
27
- .command('clear <projectDir> <prdName>')
28
- .description('Remove a PRD state entry')
29
- .action((projectDir, prdName) => {
30
- clearPrdState(projectDir, prdName);
31
- });
32
- prdState
33
- .command('list <projectDir>')
34
- .description('List PRD names with a given state (default: pending-review)')
35
- .option('--status <status>', 'Filter by status', 'pending-review')
36
- .action((projectDir, options) => {
37
- if (options.status !== 'pending-review') {
38
- // Future statuses can be added here
39
- return;
40
- }
41
- const names = listPrdStatesByStatus(projectDir, 'pending-review');
42
- for (const name of names) {
43
- console.log(name);
44
- }
45
- });
46
- }
47
- //# sourceMappingURL=prd-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prd-state.js","sourceRoot":"","sources":["../../src/commands/prd-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAExF,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,4DAA4D,CAAC,CAAC;IAE7E,QAAQ;SACL,OAAO,CAAC,4BAA4B,CAAC;SACrC,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,EAAE,CAAC;SACrE,MAAM,CAAC,CAAC,UAAkB,EAAE,OAAe,EAAE,OAA2B,EAAE,EAAE;QAC3E,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE;YACjC,MAAM,EAAE,gBAAgB;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;SACzC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,QAAQ;SACL,OAAO,CAAC,8BAA8B,CAAC;SACvC,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,CAAC,UAAkB,EAAE,OAAe,EAAE,EAAE;QAC9C,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEL,QAAQ;SACL,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,gBAAgB,CAAC;SACjE,MAAM,CAAC,CAAC,UAAkB,EAAE,OAA2B,EAAE,EAAE;QAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;YACxC,oCAAoC;YACpC,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,qBAAqB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAClE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,18 +0,0 @@
1
- /**
2
- * PRD command group - manage PRD files
3
- */
4
- import { Command } from 'commander';
5
- export interface IPrdCreateOptions {
6
- number?: boolean;
7
- model?: string;
8
- }
9
- export declare function slugify(name: string): string;
10
- export declare function getNextPrdNumber(prdDir: string): number;
11
- export declare function extractPrdMarkdown(response: string): string;
12
- export declare function extractPrdTitle(markdown: string): string | null;
13
- export declare function buildPrdPrompt(description: string, projectDir: string, planningPrinciples: string): string;
14
- export declare function buildNativeClaudeEnv(baseEnv?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
15
- export declare function resolvePrdCreateDir(): string;
16
- export declare function buildGithubIssueBody(prdPath: string, projectDir: string, prdContent: string): string;
17
- export declare function prdCommand(program: Command): void;
18
- //# sourceMappingURL=prd.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prd.d.ts","sourceRoot":"","sources":["../../src/commands/prd.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK5C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG/D;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,GACzB,MAAM,CAsBR;AAED,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAwBhG;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAmCD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAKpG;AAmJD,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiIjD"}