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

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 (209) hide show
  1. package/dist/cli.js +2453 -1378
  2. package/dist/commands/dashboard/tab-config.d.ts.map +1 -1
  3. package/dist/commands/queue.d.ts.map +1 -1
  4. package/dist/commands/shared/env-builder.d.ts.map +1 -1
  5. package/dist/scripts/night-watch-audit-cron.sh +6 -0
  6. package/dist/scripts/night-watch-cron.sh +352 -53
  7. package/dist/scripts/night-watch-helpers.sh +212 -12
  8. package/dist/scripts/night-watch-merger-cron.sh +8 -2
  9. package/dist/scripts/night-watch-plan-cron.sh +1 -1
  10. package/dist/scripts/night-watch-pr-resolver-cron.sh +7 -3
  11. package/dist/scripts/night-watch-pr-reviewer-cron.sh +11 -0
  12. package/dist/scripts/night-watch-qa-cron.sh +11 -0
  13. package/dist/scripts/night-watch-slicer-cron.sh +1 -1
  14. package/dist/web/assets/index-B6E6kOoR.js +406 -0
  15. package/dist/web/assets/index-DIMUXIP8.css +1 -0
  16. package/dist/web/assets/index-Ds8OqaCa.css +1 -0
  17. package/dist/web/assets/index-NR27JE3b.js +406 -0
  18. package/dist/web/index.html +2 -2
  19. package/package.json +1 -1
  20. package/dist/cli.d.ts +0 -3
  21. package/dist/cli.js.map +0 -1
  22. package/dist/commands/analytics.d.ts +0 -14
  23. package/dist/commands/analytics.js +0 -69
  24. package/dist/commands/analytics.js.map +0 -1
  25. package/dist/commands/audit.d.ts +0 -19
  26. package/dist/commands/audit.js +0 -144
  27. package/dist/commands/audit.js.map +0 -1
  28. package/dist/commands/board.d.ts +0 -9
  29. package/dist/commands/board.js +0 -702
  30. package/dist/commands/board.js.map +0 -1
  31. package/dist/commands/cancel.d.ts +0 -46
  32. package/dist/commands/cancel.js +0 -239
  33. package/dist/commands/cancel.js.map +0 -1
  34. package/dist/commands/cron.d.ts +0 -8
  35. package/dist/commands/cron.js +0 -134
  36. package/dist/commands/cron.js.map +0 -1
  37. package/dist/commands/dashboard/tab-actions.d.ts +0 -10
  38. package/dist/commands/dashboard/tab-actions.js +0 -247
  39. package/dist/commands/dashboard/tab-actions.js.map +0 -1
  40. package/dist/commands/dashboard/tab-config.d.ts +0 -21
  41. package/dist/commands/dashboard/tab-config.js +0 -873
  42. package/dist/commands/dashboard/tab-config.js.map +0 -1
  43. package/dist/commands/dashboard/tab-logs.d.ts +0 -10
  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.js +0 -320
  48. package/dist/commands/dashboard/tab-schedules.js.map +0 -1
  49. package/dist/commands/dashboard/tab-status.d.ts +0 -32
  50. package/dist/commands/dashboard/tab-status.js +0 -424
  51. package/dist/commands/dashboard/tab-status.js.map +0 -1
  52. package/dist/commands/dashboard/types.d.ts +0 -42
  53. package/dist/commands/dashboard/types.js +0 -5
  54. package/dist/commands/dashboard/types.js.map +0 -1
  55. package/dist/commands/dashboard.d.ts +0 -11
  56. package/dist/commands/dashboard.js +0 -242
  57. package/dist/commands/dashboard.js.map +0 -1
  58. package/dist/commands/doctor.d.ts +0 -16
  59. package/dist/commands/doctor.js +0 -195
  60. package/dist/commands/doctor.js.map +0 -1
  61. package/dist/commands/history.d.ts +0 -7
  62. package/dist/commands/history.js +0 -49
  63. package/dist/commands/history.js.map +0 -1
  64. package/dist/commands/init.d.ts +0 -45
  65. package/dist/commands/init.js +0 -777
  66. package/dist/commands/init.js.map +0 -1
  67. package/dist/commands/install.d.ts +0 -65
  68. package/dist/commands/install.js +0 -405
  69. package/dist/commands/install.js.map +0 -1
  70. package/dist/commands/logs.d.ts +0 -15
  71. package/dist/commands/logs.js +0 -155
  72. package/dist/commands/logs.js.map +0 -1
  73. package/dist/commands/merge.d.ts +0 -26
  74. package/dist/commands/merge.js +0 -159
  75. package/dist/commands/merge.js.map +0 -1
  76. package/dist/commands/notify.d.ts +0 -7
  77. package/dist/commands/notify.js +0 -43
  78. package/dist/commands/notify.js.map +0 -1
  79. package/dist/commands/plan.d.ts +0 -19
  80. package/dist/commands/plan.js +0 -88
  81. package/dist/commands/plan.js.map +0 -1
  82. package/dist/commands/prd-state.d.ts +0 -12
  83. package/dist/commands/prd-state.js +0 -47
  84. package/dist/commands/prd-state.js.map +0 -1
  85. package/dist/commands/prd.d.ts +0 -18
  86. package/dist/commands/prd.js +0 -363
  87. package/dist/commands/prd.js.map +0 -1
  88. package/dist/commands/prds.d.ts +0 -13
  89. package/dist/commands/prds.js +0 -194
  90. package/dist/commands/prds.js.map +0 -1
  91. package/dist/commands/prs.d.ts +0 -14
  92. package/dist/commands/prs.js +0 -104
  93. package/dist/commands/prs.js.map +0 -1
  94. package/dist/commands/qa.d.ts +0 -34
  95. package/dist/commands/qa.js +0 -214
  96. package/dist/commands/qa.js.map +0 -1
  97. package/dist/commands/queue.d.ts +0 -8
  98. package/dist/commands/queue.js +0 -376
  99. package/dist/commands/queue.js.map +0 -1
  100. package/dist/commands/resolve.d.ts +0 -26
  101. package/dist/commands/resolve.js +0 -186
  102. package/dist/commands/resolve.js.map +0 -1
  103. package/dist/commands/retry.d.ts +0 -9
  104. package/dist/commands/retry.js +0 -71
  105. package/dist/commands/retry.js.map +0 -1
  106. package/dist/commands/review.d.ts +0 -82
  107. package/dist/commands/review.js +0 -479
  108. package/dist/commands/review.js.map +0 -1
  109. package/dist/commands/run.d.ts +0 -73
  110. package/dist/commands/run.js +0 -509
  111. package/dist/commands/run.js.map +0 -1
  112. package/dist/commands/serve.d.ts +0 -19
  113. package/dist/commands/serve.js +0 -142
  114. package/dist/commands/serve.js.map +0 -1
  115. package/dist/commands/shared/env-builder.d.ts +0 -49
  116. package/dist/commands/shared/env-builder.js +0 -150
  117. package/dist/commands/shared/env-builder.js.map +0 -1
  118. package/dist/commands/slice.d.ts +0 -35
  119. package/dist/commands/slice.js +0 -316
  120. package/dist/commands/slice.js.map +0 -1
  121. package/dist/commands/state.d.ts +0 -8
  122. package/dist/commands/state.js +0 -54
  123. package/dist/commands/state.js.map +0 -1
  124. package/dist/commands/status.d.ts +0 -14
  125. package/dist/commands/status.js +0 -297
  126. package/dist/commands/status.js.map +0 -1
  127. package/dist/commands/summary.d.ts +0 -14
  128. package/dist/commands/summary.js +0 -193
  129. package/dist/commands/summary.js.map +0 -1
  130. package/dist/commands/uninstall.d.ts +0 -25
  131. package/dist/commands/uninstall.js +0 -134
  132. package/dist/commands/uninstall.js.map +0 -1
  133. package/dist/commands/update.d.ts +0 -22
  134. package/dist/commands/update.js +0 -90
  135. package/dist/commands/update.js.map +0 -1
  136. package/dist/web/assets/index-2JY0x_Ij.js +0 -381
  137. package/dist/web/assets/index-3h8pgmqL.css +0 -1
  138. package/dist/web/assets/index-B-wbyZq7.js +0 -386
  139. package/dist/web/assets/index-B1BnOpiO.css +0 -1
  140. package/dist/web/assets/index-B3CnV08_.js +0 -365
  141. package/dist/web/assets/index-B5QjuFh9.css +0 -1
  142. package/dist/web/assets/index-B8FW2ecQ.js +0 -370
  143. package/dist/web/assets/index-BFxPiKyy.js +0 -381
  144. package/dist/web/assets/index-BGqNh_Da.js +0 -365
  145. package/dist/web/assets/index-BIONU0qz.css +0 -1
  146. package/dist/web/assets/index-B_l_3wnA.js +0 -370
  147. package/dist/web/assets/index-Ba-4YvTQ.js +0 -365
  148. package/dist/web/assets/index-Bbb4-39N.js +0 -370
  149. package/dist/web/assets/index-BdgdShEN.js +0 -365
  150. package/dist/web/assets/index-BhiC4Z-G.js +0 -381
  151. package/dist/web/assets/index-BjhCFjZi.js +0 -381
  152. package/dist/web/assets/index-BlRxmrnQ.css +0 -1
  153. package/dist/web/assets/index-BqwbXsHS.js +0 -365
  154. package/dist/web/assets/index-BsC7RT48.css +0 -1
  155. package/dist/web/assets/index-Bvh8XI8_.js +0 -370
  156. package/dist/web/assets/index-C01r2ymn.js +0 -381
  157. package/dist/web/assets/index-C51Rbsmk.js +0 -381
  158. package/dist/web/assets/index-C7lMNxRE.js +0 -370
  159. package/dist/web/assets/index-CJLObgsn.js +0 -386
  160. package/dist/web/assets/index-CLuRf7Zt.js +0 -381
  161. package/dist/web/assets/index-CM3xFd3e.css +0 -1
  162. package/dist/web/assets/index-CNkBtDK7.js +0 -370
  163. package/dist/web/assets/index-CPQbZ1BL.css +0 -1
  164. package/dist/web/assets/index-CTy5dUDU.css +0 -1
  165. package/dist/web/assets/index-CU15COKs.js +0 -370
  166. package/dist/web/assets/index-CiRJZI4z.js +0 -386
  167. package/dist/web/assets/index-Cp7RYjoy.css +0 -1
  168. package/dist/web/assets/index-CvPkZOWT.js +0 -381
  169. package/dist/web/assets/index-CvUk-33B.css +0 -1
  170. package/dist/web/assets/index-Cvmj-oF6.css +0 -1
  171. package/dist/web/assets/index-CxE5iQVO.js +0 -381
  172. package/dist/web/assets/index-D7lZQpFV.js +0 -365
  173. package/dist/web/assets/index-DAyP4GOi.css +0 -1
  174. package/dist/web/assets/index-DCG0n8Kg.js +0 -386
  175. package/dist/web/assets/index-DEEI8cyF.css +0 -1
  176. package/dist/web/assets/index-DF99BowV.js +0 -381
  177. package/dist/web/assets/index-DGWsvFj6.css +0 -1
  178. package/dist/web/assets/index-DGpU39Cp.css +0 -1
  179. package/dist/web/assets/index-DI4kFgOi.js +0 -370
  180. package/dist/web/assets/index-DIyTcPw5.css +0 -1
  181. package/dist/web/assets/index-DTsfDC7m.js +0 -381
  182. package/dist/web/assets/index-DcgNAi4A.js +0 -386
  183. package/dist/web/assets/index-DgOAgkZy.css +0 -1
  184. package/dist/web/assets/index-DnHkqbOa.js +0 -386
  185. package/dist/web/assets/index-DnR7Idcf.css +0 -1
  186. package/dist/web/assets/index-DpVirMEe.css +0 -1
  187. package/dist/web/assets/index-DsYIWZ86.css +0 -1
  188. package/dist/web/assets/index-DtrDkci5.js +0 -381
  189. package/dist/web/assets/index-DyjIth5M.js +0 -386
  190. package/dist/web/assets/index-FwIKfHPL.css +0 -1
  191. package/dist/web/assets/index-IKrZymWk.css +0 -1
  192. package/dist/web/assets/index-MA6fM0ab.js +0 -381
  193. package/dist/web/assets/index-N_QxaSEg.css +0 -1
  194. package/dist/web/assets/index-OcU-0TCQ.css +0 -1
  195. package/dist/web/assets/index-OyhrmG-L.js +0 -381
  196. package/dist/web/assets/index-SQlBKu_s.js +0 -386
  197. package/dist/web/assets/index-Sv2B60J4.js +0 -370
  198. package/dist/web/assets/index-Vgyivb5u.js +0 -365
  199. package/dist/web/assets/index-ZABWMEZR.js +0 -381
  200. package/dist/web/assets/index-ZE5lOeJp.js +0 -386
  201. package/dist/web/assets/index-aCHmkAcJ.css +0 -1
  202. package/dist/web/assets/index-bFijnpuU.js +0 -381
  203. package/dist/web/assets/index-bUPZgSoZ.css +0 -1
  204. package/dist/web/assets/index-mz1VIYsP.css +0 -1
  205. package/dist/web/assets/index-oOp_MFeE.js +0 -376
  206. package/dist/web/assets/index-rfU713Zm.js +0 -386
  207. package/dist/web/assets/index-tuNH9gmb.js +0 -448
  208. package/dist/web/assets/index-viSwHyDD.js +0 -365
  209. 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,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,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,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,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