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