@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,363 +0,0 @@
1
- /**
2
- * PRD command group - manage PRD files
3
- */
4
- import { execSync, spawn, spawnSync } from 'child_process';
5
- import * as fs from 'fs';
6
- import * as path from 'path';
7
- import { fileURLToPath } from 'url';
8
- import { dirname } from 'path';
9
- import { CLAIM_FILE_EXTENSION, CLAUDE_MODEL_IDS, createTable, dim, header, info, loadConfig, success, error as uiError, } from '@night-watch/core';
10
- const __filename = fileURLToPath(import.meta.url);
11
- const __dirname = dirname(__filename);
12
- function findTemplatesDir(startDir) {
13
- let current = startDir;
14
- for (let i = 0; i < 8; i++) {
15
- const candidate = path.join(current, 'templates');
16
- if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
17
- return candidate;
18
- }
19
- current = path.dirname(current);
20
- }
21
- return path.join(startDir, 'templates');
22
- }
23
- const TEMPLATES_DIR = findTemplatesDir(__dirname);
24
- export function slugify(name) {
25
- return name
26
- .toLowerCase()
27
- .replace(/[^a-z0-9]+/g, '-')
28
- .replace(/^-|-$/g, '');
29
- }
30
- export function getNextPrdNumber(prdDir) {
31
- if (!fs.existsSync(prdDir))
32
- return 1;
33
- const files = fs.readdirSync(prdDir).filter((f) => f.endsWith('.md'));
34
- const numbers = files.map((f) => {
35
- const match = f.match(/^(\d+)-/);
36
- return match ? parseInt(match[1], 10) : 0;
37
- });
38
- return Math.max(0, ...numbers) + 1;
39
- }
40
- export function extractPrdMarkdown(response) {
41
- const match = response.match(/(^#\s+[\s\S]*)/m);
42
- return match ? match[1].trim() : response.trim();
43
- }
44
- export function extractPrdTitle(markdown) {
45
- const match = markdown.match(/^#\s+PRD:\s*(.+)/m);
46
- return match ? match[1].trim() : null;
47
- }
48
- export function buildPrdPrompt(description, projectDir, planningPrinciples) {
49
- return `You are generating a PRD markdown file for Night Watch.
50
-
51
- Return only the final PRD markdown.
52
-
53
- Hard requirements:
54
- - Start with: # PRD: <title>
55
- - Do not ask follow-up questions
56
- - Do not add any preamble, commentary, or code fences
57
- - Do not describe what you are going to do
58
- - Do not mention these instructions
59
- - Treat the planning guide below as mandatory instructions, not background context
60
-
61
- Project directory: ${projectDir}
62
-
63
- Planning guide:
64
- ${planningPrinciples}
65
-
66
- User request:
67
- ${description}
68
-
69
- Now write the complete PRD markdown file.`;
70
- }
71
- export function buildNativeClaudeEnv(baseEnv = process.env) {
72
- const env = { ...baseEnv };
73
- delete env.ANTHROPIC_BASE_URL;
74
- delete env.ANTHROPIC_API_KEY;
75
- delete env.ANTHROPIC_AUTH_TOKEN;
76
- delete env.ANTHROPIC_DEFAULT_SONNET_MODEL;
77
- delete env.ANTHROPIC_DEFAULT_OPUS_MODEL;
78
- delete env.API_TIMEOUT_MS;
79
- delete env.CLAUDE_CODE_SSE_PORT;
80
- delete env.CLAUDE_NIGHTS_WATCH_DIR;
81
- delete env.NW_CLAUDE_MODEL_ID;
82
- delete env.NW_CLAUDE_PRIMARY_MODEL_ID;
83
- delete env.NW_CLAUDE_SECONDARY_MODEL_ID;
84
- delete env.NW_PROVIDER_CMD;
85
- delete env.NW_PROVIDER_SUBCOMMAND;
86
- delete env.NW_PROVIDER_PROMPT_FLAG;
87
- delete env.NW_PROVIDER_APPROVE_FLAG;
88
- delete env.NW_PROVIDER_WORKDIR_FLAG;
89
- delete env.NW_PROVIDER_MODEL_FLAG;
90
- delete env.NW_PROVIDER_MODEL;
91
- delete env.NW_PROVIDER_LABEL;
92
- return env;
93
- }
94
- export function resolvePrdCreateDir() {
95
- return 'docs/PRDs';
96
- }
97
- function resolveGitHubBlobUrl(projectDir, relPath) {
98
- try {
99
- const remoteUrl = execSync('git remote get-url origin', {
100
- cwd: projectDir,
101
- encoding: 'utf-8',
102
- stdio: ['ignore', 'pipe', 'pipe'],
103
- }).trim();
104
- const branch = execSync('git rev-parse --abbrev-ref HEAD', {
105
- cwd: projectDir,
106
- encoding: 'utf-8',
107
- stdio: ['ignore', 'pipe', 'pipe'],
108
- }).trim();
109
- const httpsBase = remoteUrl
110
- .replace(/^git@github\.com:/, 'https://github.com/')
111
- .replace(/^ssh:\/\/git@github\.com\//, 'https://github.com/')
112
- .replace(/\.git$/, '');
113
- if (!httpsBase.startsWith('https://github.com/')) {
114
- return null;
115
- }
116
- const ref = branch && branch !== 'HEAD' ? branch : 'main';
117
- return `${httpsBase}/blob/${encodeURIComponent(ref).replace(/%2F/g, '/')}/${relPath
118
- .split(path.sep)
119
- .map((segment) => encodeURIComponent(segment))
120
- .join('/')}`;
121
- }
122
- catch {
123
- return null;
124
- }
125
- }
126
- export function buildGithubIssueBody(prdPath, projectDir, prdContent) {
127
- const relPath = path.relative(projectDir, prdPath);
128
- const blobUrl = resolveGitHubBlobUrl(projectDir, relPath);
129
- const fileLine = blobUrl ? `PRD file: [\`${relPath}\`](${blobUrl})` : `PRD file: \`${relPath}\``;
130
- return `${fileLine}\n\n${prdContent}\n\n---\nCreated via \`night-watch prd create\`.`;
131
- }
132
- async function generatePrdWithClaude(description, projectDir, model) {
133
- const bundledTemplatePath = path.join(TEMPLATES_DIR, 'prd-creator.md');
134
- const installedTemplatePath = path.join(projectDir, 'instructions', 'prd-creator.md');
135
- const templatePath = fs.existsSync(installedTemplatePath)
136
- ? installedTemplatePath
137
- : bundledTemplatePath;
138
- if (!fs.existsSync(templatePath)) {
139
- return null;
140
- }
141
- const planningPrinciples = fs.readFileSync(templatePath, 'utf-8');
142
- const prompt = buildPrdPrompt(description, projectDir, planningPrinciples);
143
- const modelId = model ?? CLAUDE_MODEL_IDS.opus;
144
- const env = buildNativeClaudeEnv(process.env);
145
- return await new Promise((resolve) => {
146
- const child = spawn('claude', [
147
- '-p',
148
- '--verbose',
149
- '--output-format',
150
- 'stream-json',
151
- '--include-partial-messages',
152
- '--model',
153
- modelId,
154
- prompt,
155
- ], { env, stdio: ['ignore', 'pipe', 'pipe'] });
156
- let stdoutBuffer = '';
157
- let finalResult = '';
158
- child.stdout.on('data', (chunk) => {
159
- stdoutBuffer += chunk.toString('utf-8');
160
- while (stdoutBuffer.includes('\n')) {
161
- const newlineIndex = stdoutBuffer.indexOf('\n');
162
- const line = stdoutBuffer.slice(0, newlineIndex).trim();
163
- stdoutBuffer = stdoutBuffer.slice(newlineIndex + 1);
164
- if (!line)
165
- continue;
166
- try {
167
- const payload = JSON.parse(line);
168
- if (payload.type === 'stream_event') {
169
- const event = payload.event;
170
- const delta = event?.delta;
171
- if (delta?.type === 'text_delta' && typeof delta.text === 'string') {
172
- process.stdout.write(delta.text);
173
- }
174
- continue;
175
- }
176
- if (payload.type === 'result' && typeof payload.result === 'string') {
177
- finalResult = payload.result;
178
- }
179
- }
180
- catch {
181
- // Ignore non-JSON metadata lines.
182
- }
183
- }
184
- });
185
- child.stderr.on('data', (chunk) => process.stderr.write(chunk));
186
- child.on('close', (code) => {
187
- if (stdoutBuffer.trim().length > 0) {
188
- try {
189
- const payload = JSON.parse(stdoutBuffer.trim());
190
- if (payload.type === 'result' && typeof payload.result === 'string') {
191
- finalResult = payload.result;
192
- }
193
- }
194
- catch {
195
- // Ignore trailing partial data.
196
- }
197
- }
198
- process.stdout.write('\n');
199
- resolve(code === 0 && finalResult ? extractPrdMarkdown(finalResult) : null);
200
- });
201
- child.on('error', () => resolve(null));
202
- });
203
- }
204
- function runGh(args, cwd) {
205
- const result = spawnSync('gh', args, { cwd, encoding: 'utf-8' });
206
- if (result.status === 0)
207
- return (result.stdout ?? '').trim();
208
- return null;
209
- }
210
- function createGithubIssue(title, prdPath, projectDir, prdContent) {
211
- const tmpFile = path.join(projectDir, `.prd-issue-body-${Date.now()}.tmp`);
212
- try {
213
- const body = buildGithubIssueBody(prdPath, projectDir, prdContent);
214
- fs.writeFileSync(tmpFile, body, 'utf-8');
215
- const baseArgs = ['issue', 'create', '--title', `PRD: ${title}`, '--body-file', tmpFile];
216
- return (runGh([...baseArgs, '--label', 'prd'], projectDir) ??
217
- runGh(baseArgs, projectDir));
218
- }
219
- catch {
220
- return null;
221
- }
222
- finally {
223
- try {
224
- fs.unlinkSync(tmpFile);
225
- }
226
- catch { /* ignore */ }
227
- }
228
- }
229
- function parseDependencies(content) {
230
- const match = content.match(/\*\*Depends on:\*\*\s*(.+)/i) || content.match(/Depends on:\s*(.+)/i);
231
- if (!match)
232
- return [];
233
- return match[1]
234
- .split(',')
235
- .map((d) => d.replace(/`/g, '').trim())
236
- .filter(Boolean);
237
- }
238
- function isClaimActive(claimPath, maxRuntime) {
239
- try {
240
- if (!fs.existsSync(claimPath)) {
241
- return { active: false };
242
- }
243
- const content = fs.readFileSync(claimPath, 'utf-8');
244
- const claim = JSON.parse(content);
245
- const age = Math.floor(Date.now() / 1000) - claim.timestamp;
246
- if (age < maxRuntime) {
247
- return { active: true, hostname: claim.hostname, pid: claim.pid };
248
- }
249
- return { active: false };
250
- }
251
- catch {
252
- return { active: false };
253
- }
254
- }
255
- export function prdCommand(program) {
256
- const prd = program.command('prd').description('Manage PRD files');
257
- prd
258
- .command('create')
259
- .description('Generate a new PRD markdown file using Claude')
260
- .argument('<name>', 'PRD description')
261
- .option('--number', 'Add auto-numbering prefix to the filename', false)
262
- .option('--model <model>', 'Claude model to use (e.g. sonnet, opus, or a full model ID)')
263
- .action(async (name, options) => {
264
- const projectDir = process.cwd();
265
- const prdDir = path.join(projectDir, resolvePrdCreateDir());
266
- if (!fs.existsSync(prdDir)) {
267
- fs.mkdirSync(prdDir, { recursive: true });
268
- }
269
- const resolvedModel = options.model
270
- ? (CLAUDE_MODEL_IDS[options.model] ?? options.model)
271
- : undefined;
272
- const modelLabel = resolvedModel ?? CLAUDE_MODEL_IDS.opus;
273
- dim(`Calling Claude (${modelLabel}) to generate the PRD. It can take several minutes, please hang on!\n`);
274
- const generated = await generatePrdWithClaude(name, projectDir, resolvedModel);
275
- if (!generated) {
276
- uiError('Claude generation failed. Is the provider configured and available?');
277
- process.exit(1);
278
- }
279
- const prdTitle = extractPrdTitle(generated) ?? name;
280
- const slug = slugify(prdTitle);
281
- const filename = options.number
282
- ? `${String(getNextPrdNumber(prdDir)).padStart(2, '0')}-${slug}.md`
283
- : `${slug}.md`;
284
- const filePath = path.join(prdDir, filename);
285
- if (fs.existsSync(filePath)) {
286
- uiError(`File already exists: ${filePath}`);
287
- dim('Use a different name or remove the existing file.');
288
- process.exit(1);
289
- }
290
- fs.writeFileSync(filePath, generated, 'utf-8');
291
- header('PRD Created');
292
- success(`Created: ${filePath}`);
293
- const issueUrl = createGithubIssue(prdTitle, filePath, projectDir, generated);
294
- if (issueUrl) {
295
- info(`Issue: ${issueUrl}`);
296
- }
297
- else {
298
- dim('GitHub issue creation skipped (gh not available or not in a GitHub repo).');
299
- }
300
- });
301
- prd
302
- .command('list')
303
- .description('List all PRDs with status')
304
- .option('--json', 'Output as JSON')
305
- .action(async (options) => {
306
- const projectDir = process.cwd();
307
- const config = loadConfig(projectDir);
308
- const absolutePrdDir = path.join(projectDir, config.prdDir);
309
- const doneDir = path.join(absolutePrdDir, 'done');
310
- const pending = [];
311
- if (fs.existsSync(absolutePrdDir)) {
312
- const files = fs.readdirSync(absolutePrdDir).filter((f) => f.endsWith('.md'));
313
- for (const file of files) {
314
- const content = fs.readFileSync(path.join(absolutePrdDir, file), 'utf-8');
315
- const deps = parseDependencies(content);
316
- const claimPath = path.join(absolutePrdDir, file + CLAIM_FILE_EXTENSION);
317
- const claimStatus = isClaimActive(claimPath, config.maxRuntime);
318
- pending.push({
319
- name: file,
320
- dependencies: deps,
321
- claimed: claimStatus.active,
322
- claimInfo: claimStatus.active
323
- ? { hostname: claimStatus.hostname, pid: claimStatus.pid }
324
- : undefined,
325
- });
326
- }
327
- }
328
- const done = [];
329
- if (fs.existsSync(doneDir)) {
330
- const files = fs.readdirSync(doneDir).filter((f) => f.endsWith('.md'));
331
- for (const file of files) {
332
- const content = fs.readFileSync(path.join(doneDir, file), 'utf-8');
333
- const deps = parseDependencies(content);
334
- done.push({ name: file, dependencies: deps });
335
- }
336
- }
337
- if (options.json) {
338
- console.log(JSON.stringify({ pending, done }, null, 2));
339
- return;
340
- }
341
- header('PRD Status');
342
- if (pending.length === 0 && done.length === 0) {
343
- dim(' No PRDs found.');
344
- return;
345
- }
346
- const table = createTable({ head: ['Name', 'Status', 'Dependencies'] });
347
- for (const prdEntry of pending) {
348
- const status = prdEntry.claimed ? 'claimed' : 'pending';
349
- const statusDisplay = prdEntry.claimed && prdEntry.claimInfo
350
- ? `claimed (${prdEntry.claimInfo.hostname}:${prdEntry.claimInfo.pid})`
351
- : status;
352
- table.push([prdEntry.name, statusDisplay, prdEntry.dependencies.join(', ') || '-']);
353
- }
354
- for (const prdEntry of done) {
355
- table.push([prdEntry.name, 'done', prdEntry.dependencies.join(', ') || '-']);
356
- }
357
- console.log(table.toString());
358
- const claimedCount = pending.filter((p) => p.claimed).length;
359
- const pendingCount = pending.length - claimedCount;
360
- info(`${pendingCount} pending, ${claimedCount} claimed, ${done.length} done`);
361
- });
362
- }
363
- //# sourceMappingURL=prd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prd.js","sourceRoot":"","sources":["../../src/commands/prd.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * PRDs command for Night Watch CLI
3
- * Lists all PRDs with their status (ready/blocked/in-progress/done) and dependencies
4
- */
5
- import { Command } from 'commander';
6
- export interface IPrdsOptions {
7
- json?: boolean;
8
- }
9
- /**
10
- * PRDs command implementation
11
- */
12
- export declare function prdsCommand(program: Command): void;
13
- //# sourceMappingURL=prds.d.ts.map
@@ -1,194 +0,0 @@
1
- /**
2
- * PRDs command for Night Watch CLI
3
- * Lists all PRDs with their status (ready/blocked/in-progress/done) and dependencies
4
- */
5
- import chalk from 'chalk';
6
- import { collectPrdInfo, createTable, dim, header, loadConfig } from '@night-watch/core';
7
- import { execSync } from 'child_process';
8
- /**
9
- * Get open PR branch names using gh CLI
10
- */
11
- function getOpenPrBranches(projectDir) {
12
- try {
13
- execSync('git rev-parse --git-dir', {
14
- cwd: projectDir,
15
- encoding: 'utf-8',
16
- stdio: ['pipe', 'pipe', 'pipe'],
17
- });
18
- }
19
- catch {
20
- return new Set();
21
- }
22
- try {
23
- execSync('which gh', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
24
- }
25
- catch {
26
- return new Set();
27
- }
28
- try {
29
- const output = execSync('gh pr list --state open --json headRefName', {
30
- cwd: projectDir,
31
- encoding: 'utf-8',
32
- stdio: ['pipe', 'pipe', 'pipe'],
33
- });
34
- const prs = JSON.parse(output);
35
- return new Set(prs.map((pr) => pr.headRefName));
36
- }
37
- catch {
38
- return new Set();
39
- }
40
- }
41
- /**
42
- * Derive a branch name from a PRD name
43
- * Converts "01-feature-name.md" or "01-feature-name" to potential branch patterns
44
- */
45
- function deriveBranchPatterns(prdName, branchPrefix) {
46
- // Remove .md extension if present
47
- const baseName = prdName.replace(/\.md$/, '');
48
- // Common patterns:
49
- // 1. night-watch/01-feature-name
50
- // 2. feat/01-feature-name
51
- // 3. feature/01-feature-name
52
- return [`${branchPrefix}${baseName}`, `feat/${baseName}`, `feature/${baseName}`];
53
- }
54
- /**
55
- * Find matching PR for a PRD
56
- */
57
- function findMatchingPr(prdName, openPrBranches, branchPrefix) {
58
- const patterns = deriveBranchPatterns(prdName, branchPrefix);
59
- for (const pattern of patterns) {
60
- // Check for exact match
61
- if (openPrBranches.has(pattern)) {
62
- return pattern;
63
- }
64
- // Check for partial match (branch might have additional suffix)
65
- for (const branch of openPrBranches) {
66
- if (branch === pattern ||
67
- branch.startsWith(`${pattern}-`) ||
68
- branch.startsWith(`${pattern}/`)) {
69
- return branch;
70
- }
71
- }
72
- }
73
- return null;
74
- }
75
- /**
76
- * Format status with color
77
- */
78
- function formatStatus(status) {
79
- switch (status) {
80
- case 'ready':
81
- return chalk.green('ready');
82
- case 'blocked':
83
- return chalk.yellow('blocked');
84
- case 'in-progress':
85
- return chalk.cyan('in-progress');
86
- case 'pending-review':
87
- return chalk.magenta('pending-review');
88
- case 'done':
89
- return chalk.dim('done');
90
- default:
91
- return status;
92
- }
93
- }
94
- /**
95
- * Format dependencies list
96
- */
97
- function formatDependencies(dependencies, unmetDependencies) {
98
- if (dependencies.length === 0) {
99
- return chalk.dim('-');
100
- }
101
- return dependencies
102
- .map((dep) => {
103
- const isUnmet = unmetDependencies.includes(dep);
104
- return isUnmet ? chalk.red(dep) : chalk.green(dep);
105
- })
106
- .join(', ');
107
- }
108
- /**
109
- * PRDs command implementation
110
- */
111
- export function prdsCommand(program) {
112
- program
113
- .command('prds')
114
- .description('List all PRDs with their status and dependencies')
115
- .option('--json', 'Output as JSON')
116
- .action(async (options) => {
117
- try {
118
- const projectDir = process.cwd();
119
- const config = loadConfig(projectDir);
120
- // Collect PRD info using existing utility
121
- const prds = collectPrdInfo(projectDir, config.prdDir, config.maxRuntime);
122
- // Get open PR branches for in-progress detection
123
- const openPrBranches = getOpenPrBranches(projectDir);
124
- // Filter out summary file and update in-progress status based on open PRs
125
- const filteredPrds = prds;
126
- // Update status based on open PRs
127
- for (const prd of filteredPrds) {
128
- if (prd.status !== 'done') {
129
- const matchingPr = findMatchingPr(prd.name, openPrBranches, config.branchPrefix);
130
- if (matchingPr) {
131
- prd.status = 'in-progress';
132
- prd.prBranch = matchingPr;
133
- }
134
- }
135
- }
136
- // Sort: ready first, then blocked, then in-progress, then done
137
- const statusOrder = {
138
- ready: 0,
139
- blocked: 1,
140
- 'in-progress': 2,
141
- 'pending-review': 3,
142
- done: 4,
143
- };
144
- filteredPrds.sort((a, b) => statusOrder[a.status] - statusOrder[b.status]);
145
- // Output as JSON if requested
146
- if (options.json) {
147
- const jsonOutput = filteredPrds.map((prd) => ({
148
- name: prd.name,
149
- status: prd.status,
150
- dependencies: prd.dependencies,
151
- unmetDependencies: prd.unmetDependencies,
152
- pr: prd.prBranch || null,
153
- }));
154
- console.log(JSON.stringify(jsonOutput, null, 2));
155
- return;
156
- }
157
- // Display header
158
- header('PRD Status');
159
- if (filteredPrds.length === 0) {
160
- dim('No PRDs found.');
161
- return;
162
- }
163
- // Create and populate table
164
- const table = createTable({
165
- head: ['Name', 'Status', 'Dependencies', 'PR'],
166
- colWidths: [35, 12, 40, 30],
167
- });
168
- for (const prd of filteredPrds) {
169
- const prBranch = prd.prBranch;
170
- table.push([
171
- prd.status === 'done' ? chalk.dim(prd.name) : prd.name,
172
- formatStatus(prd.status),
173
- formatDependencies(prd.dependencies, prd.unmetDependencies),
174
- prBranch ? chalk.cyan(prBranch) : chalk.dim('-'),
175
- ]);
176
- }
177
- console.log(table.toString());
178
- // Summary counts
179
- const ready = filteredPrds.filter((p) => p.status === 'ready').length;
180
- const blocked = filteredPrds.filter((p) => p.status === 'blocked').length;
181
- const inProgress = filteredPrds.filter((p) => p.status === 'in-progress').length;
182
- const pendingReview = filteredPrds.filter((p) => p.status === 'pending-review').length;
183
- const done = filteredPrds.filter((p) => p.status === 'done').length;
184
- console.log();
185
- dim(` Ready: ${ready} | Blocked: ${blocked} | In Progress: ${inProgress} | Pending Review: ${pendingReview} | Done: ${done}`);
186
- console.log();
187
- }
188
- catch (error) {
189
- console.error(`Error listing PRDs: ${error instanceof Error ? error.message : String(error)}`);
190
- process.exit(1);
191
- }
192
- });
193
- }
194
- //# sourceMappingURL=prds.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prds.js","sourceRoot":"","sources":["../../src/commands/prds.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- /**
2
- * PRs command for Night Watch CLI
3
- * Lists matching PRs with their CI status and review scores
4
- */
5
- import { Command } from 'commander';
6
- export interface IPrsOptions {
7
- json?: boolean;
8
- debug?: boolean;
9
- }
10
- /**
11
- * PRs command implementation
12
- */
13
- export declare function prsCommand(program: Command): void;
14
- //# sourceMappingURL=prs.d.ts.map