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

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 (165) hide show
  1. package/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +957 -1906
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/analytics.d.ts +14 -0
  6. package/dist/commands/analytics.d.ts.map +1 -0
  7. package/dist/commands/analytics.js +69 -0
  8. package/dist/commands/analytics.js.map +1 -0
  9. package/dist/commands/audit.d.ts +19 -0
  10. package/dist/commands/audit.d.ts.map +1 -0
  11. package/dist/commands/audit.js +144 -0
  12. package/dist/commands/audit.js.map +1 -0
  13. package/dist/commands/board.d.ts +9 -0
  14. package/dist/commands/board.d.ts.map +1 -0
  15. package/dist/commands/board.js +702 -0
  16. package/dist/commands/board.js.map +1 -0
  17. package/dist/commands/cancel.d.ts +46 -0
  18. package/dist/commands/cancel.d.ts.map +1 -0
  19. package/dist/commands/cancel.js +239 -0
  20. package/dist/commands/cancel.js.map +1 -0
  21. package/dist/commands/cron.d.ts +8 -0
  22. package/dist/commands/cron.d.ts.map +1 -0
  23. package/dist/commands/cron.js +134 -0
  24. package/dist/commands/cron.js.map +1 -0
  25. package/dist/commands/dashboard/tab-actions.d.ts +10 -0
  26. package/dist/commands/dashboard/tab-actions.d.ts.map +1 -0
  27. package/dist/commands/dashboard/tab-actions.js +247 -0
  28. package/dist/commands/dashboard/tab-actions.js.map +1 -0
  29. package/dist/commands/dashboard/tab-config.d.ts +21 -0
  30. package/dist/commands/dashboard/tab-config.d.ts.map +1 -0
  31. package/dist/commands/dashboard/tab-config.js +873 -0
  32. package/dist/commands/dashboard/tab-config.js.map +1 -0
  33. package/dist/commands/dashboard/tab-logs.d.ts +10 -0
  34. package/dist/commands/dashboard/tab-logs.d.ts.map +1 -0
  35. package/dist/commands/dashboard/tab-logs.js +202 -0
  36. package/dist/commands/dashboard/tab-logs.js.map +1 -0
  37. package/dist/commands/dashboard/tab-schedules.d.ts +21 -0
  38. package/dist/commands/dashboard/tab-schedules.d.ts.map +1 -0
  39. package/dist/commands/dashboard/tab-schedules.js +320 -0
  40. package/dist/commands/dashboard/tab-schedules.js.map +1 -0
  41. package/dist/commands/dashboard/tab-status.d.ts +32 -0
  42. package/dist/commands/dashboard/tab-status.d.ts.map +1 -0
  43. package/dist/commands/dashboard/tab-status.js +424 -0
  44. package/dist/commands/dashboard/tab-status.js.map +1 -0
  45. package/dist/commands/dashboard/types.d.ts +42 -0
  46. package/dist/commands/dashboard/types.d.ts.map +1 -0
  47. package/dist/commands/dashboard/types.js +5 -0
  48. package/dist/commands/dashboard/types.js.map +1 -0
  49. package/dist/commands/dashboard.d.ts +11 -0
  50. package/dist/commands/dashboard.d.ts.map +1 -0
  51. package/dist/commands/dashboard.js +242 -0
  52. package/dist/commands/dashboard.js.map +1 -0
  53. package/dist/commands/doctor.d.ts +16 -0
  54. package/dist/commands/doctor.d.ts.map +1 -0
  55. package/dist/commands/doctor.js +195 -0
  56. package/dist/commands/doctor.js.map +1 -0
  57. package/dist/commands/history.d.ts +7 -0
  58. package/dist/commands/history.d.ts.map +1 -0
  59. package/dist/commands/history.js +49 -0
  60. package/dist/commands/history.js.map +1 -0
  61. package/dist/commands/init.d.ts +45 -0
  62. package/dist/commands/init.d.ts.map +1 -0
  63. package/dist/commands/init.js +777 -0
  64. package/dist/commands/init.js.map +1 -0
  65. package/dist/commands/install.d.ts +65 -0
  66. package/dist/commands/install.d.ts.map +1 -0
  67. package/dist/commands/install.js +405 -0
  68. package/dist/commands/install.js.map +1 -0
  69. package/dist/commands/logs.d.ts +15 -0
  70. package/dist/commands/logs.d.ts.map +1 -0
  71. package/dist/commands/logs.js +155 -0
  72. package/dist/commands/logs.js.map +1 -0
  73. package/dist/commands/merge.d.ts +26 -0
  74. package/dist/commands/merge.d.ts.map +1 -0
  75. package/dist/commands/merge.js +159 -0
  76. package/dist/commands/merge.js.map +1 -0
  77. package/dist/commands/notify.d.ts +7 -0
  78. package/dist/commands/notify.d.ts.map +1 -0
  79. package/dist/commands/notify.js +43 -0
  80. package/dist/commands/notify.js.map +1 -0
  81. package/dist/commands/plan.d.ts +19 -0
  82. package/dist/commands/plan.d.ts.map +1 -0
  83. package/dist/commands/plan.js +88 -0
  84. package/dist/commands/plan.js.map +1 -0
  85. package/dist/commands/prd-state.d.ts +12 -0
  86. package/dist/commands/prd-state.d.ts.map +1 -0
  87. package/dist/commands/prd-state.js +47 -0
  88. package/dist/commands/prd-state.js.map +1 -0
  89. package/dist/commands/prd.d.ts +18 -0
  90. package/dist/commands/prd.d.ts.map +1 -0
  91. package/dist/commands/prd.js +363 -0
  92. package/dist/commands/prd.js.map +1 -0
  93. package/dist/commands/prds.d.ts +13 -0
  94. package/dist/commands/prds.d.ts.map +1 -0
  95. package/dist/commands/prds.js +194 -0
  96. package/dist/commands/prds.js.map +1 -0
  97. package/dist/commands/prs.d.ts +14 -0
  98. package/dist/commands/prs.d.ts.map +1 -0
  99. package/dist/commands/prs.js +104 -0
  100. package/dist/commands/prs.js.map +1 -0
  101. package/dist/commands/qa.d.ts +34 -0
  102. package/dist/commands/qa.d.ts.map +1 -0
  103. package/dist/commands/qa.js +214 -0
  104. package/dist/commands/qa.js.map +1 -0
  105. package/dist/commands/queue.d.ts +8 -0
  106. package/dist/commands/queue.d.ts.map +1 -0
  107. package/dist/commands/queue.js +378 -0
  108. package/dist/commands/queue.js.map +1 -0
  109. package/dist/commands/resolve.d.ts +26 -0
  110. package/dist/commands/resolve.d.ts.map +1 -0
  111. package/dist/commands/resolve.js +186 -0
  112. package/dist/commands/resolve.js.map +1 -0
  113. package/dist/commands/retry.d.ts +9 -0
  114. package/dist/commands/retry.d.ts.map +1 -0
  115. package/dist/commands/retry.js +71 -0
  116. package/dist/commands/retry.js.map +1 -0
  117. package/dist/commands/review.d.ts +82 -0
  118. package/dist/commands/review.d.ts.map +1 -0
  119. package/dist/commands/review.js +479 -0
  120. package/dist/commands/review.js.map +1 -0
  121. package/dist/commands/run.d.ts +73 -0
  122. package/dist/commands/run.d.ts.map +1 -0
  123. package/dist/commands/run.js +509 -0
  124. package/dist/commands/run.js.map +1 -0
  125. package/dist/commands/serve.d.ts +19 -0
  126. package/dist/commands/serve.d.ts.map +1 -0
  127. package/dist/commands/serve.js +142 -0
  128. package/dist/commands/serve.js.map +1 -0
  129. package/dist/commands/shared/env-builder.d.ts +49 -0
  130. package/dist/commands/shared/env-builder.d.ts.map +1 -0
  131. package/dist/commands/shared/env-builder.js +150 -0
  132. package/dist/commands/shared/env-builder.js.map +1 -0
  133. package/dist/commands/slice.d.ts +35 -0
  134. package/dist/commands/slice.d.ts.map +1 -0
  135. package/dist/commands/slice.js +316 -0
  136. package/dist/commands/slice.js.map +1 -0
  137. package/dist/commands/state.d.ts +8 -0
  138. package/dist/commands/state.d.ts.map +1 -0
  139. package/dist/commands/state.js +54 -0
  140. package/dist/commands/state.js.map +1 -0
  141. package/dist/commands/status.d.ts +14 -0
  142. package/dist/commands/status.d.ts.map +1 -0
  143. package/dist/commands/status.js +297 -0
  144. package/dist/commands/status.js.map +1 -0
  145. package/dist/commands/summary.d.ts +14 -0
  146. package/dist/commands/summary.d.ts.map +1 -0
  147. package/dist/commands/summary.js +193 -0
  148. package/dist/commands/summary.js.map +1 -0
  149. package/dist/commands/uninstall.d.ts +25 -0
  150. package/dist/commands/uninstall.d.ts.map +1 -0
  151. package/dist/commands/uninstall.js +134 -0
  152. package/dist/commands/uninstall.js.map +1 -0
  153. package/dist/commands/update.d.ts +22 -0
  154. package/dist/commands/update.d.ts.map +1 -0
  155. package/dist/commands/update.js +90 -0
  156. package/dist/commands/update.js.map +1 -0
  157. package/dist/scripts/night-watch-cron.sh +9 -0
  158. package/dist/scripts/night-watch-helpers.sh +65 -7
  159. package/dist/web/assets/index-CgXj_KM1.css +1 -0
  160. package/dist/web/assets/index-Dr4zlyJf.js +406 -0
  161. package/dist/web/index.html +2 -2
  162. package/package.json +1 -1
  163. package/dist/web/assets/index-BUgI2S1s.js +0 -406
  164. package/dist/web/assets/index-CkdLFBd7.js +0 -406
  165. package/dist/web/assets/index-RMfswANB.css +0 -1
@@ -0,0 +1,316 @@
1
+ /**
2
+ * Slice command - executes the roadmap slicer to create PRDs from roadmap items
3
+ */
4
+ import { CLAUDE_MODEL_IDS, LOCK_FILE_PREFIX, PROVIDER_COMMANDS, createBoardProvider, createSpinner, createTable, dim, getRoadmapStatus, header, info, isProcessRunning, loadConfig, projectRuntimeKey, resolveJobProvider, sendNotifications, sliceNextItem, error as uiError, warn, } from '@night-watch/core';
5
+ import { buildBaseEnvVars, getTelegramStatusWebhooks, maybeApplyCronSchedulingDelay, } from './shared/env-builder.js';
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ function plannerLockPath(projectDir) {
9
+ return `${LOCK_FILE_PREFIX}slicer-${projectRuntimeKey(projectDir)}.lock`;
10
+ }
11
+ function acquirePlannerLock(projectDir) {
12
+ const lockFile = plannerLockPath(projectDir);
13
+ if (fs.existsSync(lockFile)) {
14
+ const pidRaw = fs.readFileSync(lockFile, 'utf-8').trim();
15
+ const pid = parseInt(pidRaw, 10);
16
+ if (!Number.isNaN(pid) && isProcessRunning(pid)) {
17
+ return { acquired: false, lockFile, pid };
18
+ }
19
+ // stale lock
20
+ try {
21
+ fs.unlinkSync(lockFile);
22
+ }
23
+ catch {
24
+ // ignore stale-lock cleanup errors
25
+ }
26
+ }
27
+ fs.writeFileSync(lockFile, String(process.pid));
28
+ return { acquired: true, lockFile };
29
+ }
30
+ function releasePlannerLock(lockFile) {
31
+ try {
32
+ if (fs.existsSync(lockFile)) {
33
+ fs.unlinkSync(lockFile);
34
+ }
35
+ }
36
+ catch {
37
+ // ignore cleanup errors
38
+ }
39
+ }
40
+ function resolvePlannerIssueColumn(config) {
41
+ return config.roadmapScanner.issueColumn === 'Draft' ? 'Draft' : 'Ready';
42
+ }
43
+ export function buildPlannerIssueBody(projectDir, config, result) {
44
+ const relativePrdPath = path.join(config.prdDir, result.file ?? '').replace(/\\/g, '/');
45
+ const absolutePrdPath = path.join(projectDir, config.prdDir, result.file ?? '');
46
+ const sourceItem = result.item;
47
+ let prdContent;
48
+ try {
49
+ prdContent = fs.readFileSync(absolutePrdPath, 'utf-8');
50
+ }
51
+ catch {
52
+ prdContent = `Unable to read generated PRD file at \`${relativePrdPath}\`.`;
53
+ }
54
+ const maxBodyChars = 60000;
55
+ const truncated = prdContent.length > maxBodyChars;
56
+ const prdBody = truncated ? `${prdContent.slice(0, maxBodyChars)}\n\n...[truncated]` : prdContent;
57
+ const metaLines = [`- PRD file: \`${relativePrdPath}\``];
58
+ if (sourceItem) {
59
+ metaLines.push(`- Source section: ${sourceItem.section}`);
60
+ if (sourceItem.description) {
61
+ metaLines.push(`- Source summary: ${sourceItem.description}`);
62
+ }
63
+ }
64
+ return [
65
+ prdBody,
66
+ '',
67
+ '<details>',
68
+ '<summary>Source metadata</summary>',
69
+ '',
70
+ ...metaLines,
71
+ '',
72
+ '</details>',
73
+ ].join('\n');
74
+ }
75
+ export async function createPlannerIssue(projectDir, config, result) {
76
+ if (!result.sliced || !result.file || !result.item) {
77
+ return { created: false, skippedReason: 'nothing-created' };
78
+ }
79
+ if (!config.boardProvider?.enabled) {
80
+ return { created: false, skippedReason: 'board-disabled' };
81
+ }
82
+ const provider = createBoardProvider(config.boardProvider, projectDir);
83
+ const board = await provider.getBoard();
84
+ if (!board) {
85
+ return { created: false, skippedReason: 'board-not-configured' };
86
+ }
87
+ const issueTitle = `PRD: ${result.item.title}`;
88
+ const normalizeTitle = (t) => t.replace(/^PRD:\s*/i, '').trim().toLowerCase();
89
+ const existingIssues = await provider.getAllIssues();
90
+ const existing = existingIssues.find((issue) => normalizeTitle(issue.title) === normalizeTitle(result.item.title));
91
+ if (existing) {
92
+ return {
93
+ created: false,
94
+ skippedReason: 'already-exists',
95
+ issueNumber: existing.number,
96
+ issueUrl: existing.url,
97
+ };
98
+ }
99
+ const issue = await provider.createIssue({
100
+ title: issueTitle,
101
+ body: buildPlannerIssueBody(projectDir, config, result),
102
+ column: resolvePlannerIssueColumn(config),
103
+ });
104
+ return {
105
+ created: true,
106
+ issueNumber: issue.number,
107
+ issueUrl: issue.url,
108
+ };
109
+ }
110
+ /**
111
+ * Build environment variables map from config and CLI options for slicer
112
+ */
113
+ export function buildEnvVars(config, options) {
114
+ // Start with base env vars shared by all job types
115
+ const env = buildBaseEnvVars(config, 'slicer', options.dryRun);
116
+ // Slicer runtime
117
+ env.NW_SLICER_MAX_RUNTIME = String(config.roadmapScanner.slicerMaxRuntime);
118
+ // PRD directory for slicer output
119
+ env.NW_PRD_DIR = config.prdDir;
120
+ // Roadmap path
121
+ env.NW_ROADMAP_PATH = config.roadmapScanner.roadmapPath;
122
+ env.NW_CLAUDE_MODEL_ID =
123
+ CLAUDE_MODEL_IDS[config.primaryFallbackModel ?? config.claudeModel ?? 'sonnet'];
124
+ // Telegram status messages from bash scripts (start/progress/final status)
125
+ const telegramWebhooks = getTelegramStatusWebhooks(config);
126
+ if (telegramWebhooks.length > 0) {
127
+ env.NW_TELEGRAM_STATUS_WEBHOOKS = JSON.stringify(telegramWebhooks);
128
+ env.NW_TELEGRAM_BOT_TOKEN = telegramWebhooks[0].botToken;
129
+ env.NW_TELEGRAM_CHAT_ID = telegramWebhooks[0].chatId;
130
+ }
131
+ return env;
132
+ }
133
+ /**
134
+ * Apply CLI flag overrides to the config for slicer
135
+ */
136
+ export function applyCliOverrides(config, options) {
137
+ const overridden = { ...config };
138
+ if (options.timeout) {
139
+ const timeout = parseInt(options.timeout, 10);
140
+ if (!isNaN(timeout)) {
141
+ overridden.roadmapScanner = {
142
+ ...overridden.roadmapScanner,
143
+ slicerMaxRuntime: timeout,
144
+ };
145
+ }
146
+ }
147
+ if (options.provider) {
148
+ // Use _cliProviderOverride to ensure CLI flag takes precedence over jobProviders
149
+ overridden._cliProviderOverride = options.provider;
150
+ }
151
+ return overridden;
152
+ }
153
+ /**
154
+ * Register the slice command with the program
155
+ */
156
+ export function sliceCommand(program) {
157
+ program
158
+ .command('slice')
159
+ .alias('planner')
160
+ .description('Run Planner (roadmap slicer) to create a PRD from the next roadmap item')
161
+ .option('--dry-run', 'Show what would be executed without running')
162
+ .option('--timeout <seconds>', 'Override max runtime in seconds for slicer')
163
+ .option('--provider <string>', 'AI provider to use (claude or codex)')
164
+ .action(async (options) => {
165
+ // Get the project directory (current working directory)
166
+ const projectDir = process.cwd();
167
+ const lockResult = acquirePlannerLock(projectDir);
168
+ if (!lockResult.acquired) {
169
+ info(`Planner is already running${lockResult.pid ? ` (PID ${lockResult.pid})` : ''}`);
170
+ process.exit(0);
171
+ }
172
+ const cleanupLock = () => releasePlannerLock(lockResult.lockFile);
173
+ process.on('exit', cleanupLock);
174
+ // Load config from file and environment
175
+ let config = loadConfig(projectDir);
176
+ // Apply CLI flag overrides
177
+ config = applyCliOverrides(config, options);
178
+ // Build environment variables
179
+ const envVars = buildEnvVars(config, options);
180
+ if (options.dryRun) {
181
+ header('Dry Run: Planner');
182
+ // Resolve slicer-specific provider
183
+ const slicerProvider = resolveJobProvider(config, 'slicer');
184
+ // Configuration section with table
185
+ header('Configuration');
186
+ const configTable = createTable({ head: ['Setting', 'Value'] });
187
+ configTable.push(['Provider', slicerProvider]);
188
+ configTable.push(['Provider CLI', PROVIDER_COMMANDS[slicerProvider]]);
189
+ configTable.push(['PRD Directory', config.prdDir]);
190
+ configTable.push(['Roadmap Path', config.roadmapScanner.roadmapPath]);
191
+ configTable.push([
192
+ 'Planner Max Runtime',
193
+ `${config.roadmapScanner.slicerMaxRuntime}s (${Math.floor(config.roadmapScanner.slicerMaxRuntime / 60)}min)`,
194
+ ]);
195
+ configTable.push(['Planner Schedule', config.roadmapScanner.slicerSchedule]);
196
+ configTable.push(['Planner Priority Mode', config.roadmapScanner.priorityMode]);
197
+ configTable.push(['Planner Issue Column', resolvePlannerIssueColumn(config)]);
198
+ configTable.push(['Scanner Enabled', config.roadmapScanner.enabled ? 'Yes' : 'No']);
199
+ console.log(configTable.toString());
200
+ // Get roadmap status
201
+ header('Roadmap Status');
202
+ const roadmapStatus = getRoadmapStatus(projectDir, config);
203
+ if (!config.roadmapScanner.enabled) {
204
+ dim(' Roadmap scanner is disabled');
205
+ }
206
+ else if (roadmapStatus.status === 'no-roadmap') {
207
+ dim(` ROADMAP.md not found at ${config.roadmapScanner.roadmapPath}`);
208
+ }
209
+ else {
210
+ const statusTable = createTable({ head: ['Metric', 'Count'] });
211
+ statusTable.push(['Total Items', roadmapStatus.totalItems]);
212
+ statusTable.push(['Processed', roadmapStatus.processedItems]);
213
+ statusTable.push(['Pending', roadmapStatus.pendingItems]);
214
+ statusTable.push(['Status', roadmapStatus.status]);
215
+ console.log(statusTable.toString());
216
+ // Show pending items
217
+ if (roadmapStatus.pendingItems > 0) {
218
+ header('Pending Items');
219
+ const pendingItems = roadmapStatus.items.filter((item) => !item.processed && !item.checked);
220
+ for (const item of pendingItems.slice(0, 10)) {
221
+ info(` - ${item.title}`);
222
+ if (item.section) {
223
+ dim(` Section: ${item.section}`);
224
+ }
225
+ }
226
+ if (pendingItems.length > 10) {
227
+ dim(` ... and ${pendingItems.length - 10} more`);
228
+ }
229
+ }
230
+ }
231
+ // Provider invocation command
232
+ header('Provider Invocation');
233
+ if (slicerProvider === 'claude') {
234
+ dim(' claude -p "/night-watch-slicer" --dangerously-skip-permissions');
235
+ }
236
+ else {
237
+ dim(' codex exec --yolo "/night-watch-slicer"');
238
+ }
239
+ // Environment variables
240
+ header('Environment Variables');
241
+ for (const [key, value] of Object.entries(envVars)) {
242
+ dim(` ${key}=${value}`);
243
+ }
244
+ // Full command that would be executed
245
+ header('Action');
246
+ dim(' Would invoke sliceNextItem() to process one roadmap item');
247
+ console.log();
248
+ process.exit(0);
249
+ }
250
+ // Check if roadmap scanner is enabled
251
+ if (!config.roadmapScanner.enabled) {
252
+ info('Planner is disabled in config; skipping run.');
253
+ process.exit(0);
254
+ }
255
+ // Execute planner with spinner
256
+ const spinner = createSpinner('Running Planner...');
257
+ spinner.start();
258
+ try {
259
+ await maybeApplyCronSchedulingDelay(config, 'slicer', projectDir);
260
+ const result = await sliceNextItem(projectDir, config);
261
+ let issueSummary = '';
262
+ if (result.sliced) {
263
+ try {
264
+ const issueResult = await createPlannerIssue(projectDir, config, result);
265
+ if (issueResult.created && issueResult.issueNumber) {
266
+ issueSummary = `; issue #${issueResult.issueNumber} (${resolvePlannerIssueColumn(config)})`;
267
+ }
268
+ else if (issueResult.skippedReason === 'already-exists' && issueResult.issueNumber) {
269
+ issueSummary = `; existing issue #${issueResult.issueNumber}`;
270
+ }
271
+ }
272
+ catch (issueError) {
273
+ warn(`Planner created ${result.file} but failed to create board issue: ${issueError instanceof Error ? issueError.message : String(issueError)}`);
274
+ }
275
+ }
276
+ if (result.sliced) {
277
+ spinner.succeed(`Planner completed successfully: Created ${result.file}${issueSummary}`);
278
+ }
279
+ else if (result.error) {
280
+ if (result.error === 'No pending items to process') {
281
+ spinner.succeed('No pending items to process');
282
+ }
283
+ else {
284
+ spinner.fail(`Planner failed: ${result.error}`);
285
+ }
286
+ }
287
+ // Send notifications (fire-and-forget, failures do not affect exit code)
288
+ const nothingPending = result.error === 'No pending items to process';
289
+ const exitCode = result.sliced || nothingPending ? 0 : 1;
290
+ if (!options.dryRun && result.sliced) {
291
+ await sendNotifications(config, {
292
+ event: 'run_succeeded',
293
+ projectName: path.basename(projectDir),
294
+ exitCode,
295
+ provider: config.provider,
296
+ prTitle: result.item?.title,
297
+ });
298
+ }
299
+ else if (!options.dryRun && !nothingPending) {
300
+ await sendNotifications(config, {
301
+ event: 'run_failed',
302
+ projectName: path.basename(projectDir),
303
+ exitCode,
304
+ provider: config.provider,
305
+ });
306
+ }
307
+ process.exit(exitCode);
308
+ }
309
+ catch (err) {
310
+ spinner.fail('Failed to execute planner command');
311
+ uiError(`${err instanceof Error ? err.message : String(err)}`);
312
+ process.exit(1);
313
+ }
314
+ });
315
+ }
316
+ //# sourceMappingURL=slice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slice.js","sourceRoot":"","sources":["../../src/commands/slice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * State command — manage Night Watch persistent state.
3
+ * Provides the `night-watch state migrate` subcommand for migrating
4
+ * legacy JSON state files into the SQLite backend.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare function createStateCommand(): Command;
8
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/commands/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,kBAAkB,IAAI,OAAO,CAqD5C"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * State command — manage Night Watch persistent state.
3
+ * Provides the `night-watch state migrate` subcommand for migrating
4
+ * legacy JSON state files into the SQLite backend.
5
+ */
6
+ import * as os from 'os';
7
+ import * as path from 'path';
8
+ import chalk from 'chalk';
9
+ import { Command } from 'commander';
10
+ import { GLOBAL_CONFIG_DIR, migrateJsonToSqlite } from '@night-watch/core';
11
+ export function createStateCommand() {
12
+ const state = new Command('state');
13
+ state.description('Manage Night Watch state');
14
+ state
15
+ .command('migrate')
16
+ .description('Migrate legacy JSON state files to SQLite')
17
+ .option('--dry-run', 'Show what would be migrated without making changes')
18
+ .action((opts) => {
19
+ const nightWatchHome = process.env.NIGHT_WATCH_HOME || path.join(os.homedir(), GLOBAL_CONFIG_DIR);
20
+ if (opts.dryRun) {
21
+ console.log(chalk.cyan('Dry-run mode: no changes will be made.\n'));
22
+ console.log(`Legacy JSON files that would be migrated from: ${chalk.bold(nightWatchHome)}`);
23
+ console.log(` ${path.join(nightWatchHome, 'projects.json')}`);
24
+ console.log(` ${path.join(nightWatchHome, 'history.json')}`);
25
+ console.log(` ${path.join(nightWatchHome, 'prd-states.json')}`);
26
+ console.log(` <project>/<prdDir>/.roadmap-state.json (per project)`);
27
+ console.log(chalk.dim('\nRun without --dry-run to apply the migration.'));
28
+ return;
29
+ }
30
+ console.log(chalk.cyan('Migrating legacy JSON state to SQLite...\n'));
31
+ let result;
32
+ try {
33
+ result = migrateJsonToSqlite(nightWatchHome);
34
+ }
35
+ catch (err) {
36
+ const message = err instanceof Error ? err.message : String(err);
37
+ console.error(chalk.red(`Migration failed: ${message}`));
38
+ process.exit(1);
39
+ }
40
+ if (result.alreadyMigrated) {
41
+ console.log(chalk.yellow('Migration already completed previously. Nothing to do.'));
42
+ return;
43
+ }
44
+ console.log(chalk.green('Migration complete.\n'));
45
+ console.log(chalk.bold('Summary:'));
46
+ console.log(` Projects migrated: ${chalk.cyan(String(result.projectsMigrated))}`);
47
+ console.log(` History records migrated: ${chalk.cyan(String(result.historyRecordsMigrated))}`);
48
+ console.log(` PRD states migrated: ${chalk.cyan(String(result.prdStatesMigrated))}`);
49
+ console.log(` Roadmap states migrated: ${chalk.cyan(String(result.roadmapStatesMigrated))}`);
50
+ console.log(`\n Backup directory: ${chalk.dim(result.backupDir)}`);
51
+ });
52
+ return state;
53
+ }
54
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/commands/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,UAAU,kBAAkB;IAChC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,KAAK,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;IAE9C,KAAK;SACF,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,WAAW,EAAE,oDAAoD,CAAC;SACzE,MAAM,CAAC,CAAC,IAA0B,EAAE,EAAE;QACrC,MAAM,cAAc,GAClB,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAE7E,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,kDAAkD,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAC5F,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QAEtE,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wDAAwD,CAAC,CAAC,CAAC;YACpF,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,gCAAgC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CACT,gCAAgC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,CACpF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,gCAAgC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CACT,gCAAgC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,EAAE,CACnF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,kCAAkC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEL,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Status command for Night Watch CLI
3
+ * Shows current status including lock files, PRDs, PRs, and logs
4
+ */
5
+ import { Command } from 'commander';
6
+ export interface IStatusOptions {
7
+ verbose?: boolean;
8
+ json?: boolean;
9
+ }
10
+ /**
11
+ * Status command implementation
12
+ */
13
+ export declare function statusCommand(program: Command): void;
14
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA0GD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmSpD"}