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

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