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

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