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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/dist/cli.js +2309 -1313
  2. package/dist/web/assets/index-BUgI2S1s.js +406 -0
  3. package/dist/web/assets/index-CkdLFBd7.js +406 -0
  4. package/dist/web/assets/index-RMfswANB.css +1 -0
  5. package/dist/web/index.html +2 -2
  6. package/package.json +1 -1
  7. package/dist/cli.d.ts +0 -3
  8. package/dist/cli.d.ts.map +0 -1
  9. package/dist/cli.js.map +0 -1
  10. package/dist/commands/analytics.d.ts +0 -14
  11. package/dist/commands/analytics.d.ts.map +0 -1
  12. package/dist/commands/analytics.js +0 -69
  13. package/dist/commands/analytics.js.map +0 -1
  14. package/dist/commands/audit.d.ts +0 -19
  15. package/dist/commands/audit.d.ts.map +0 -1
  16. package/dist/commands/audit.js +0 -144
  17. package/dist/commands/audit.js.map +0 -1
  18. package/dist/commands/board.d.ts +0 -9
  19. package/dist/commands/board.d.ts.map +0 -1
  20. package/dist/commands/board.js +0 -702
  21. package/dist/commands/board.js.map +0 -1
  22. package/dist/commands/cancel.d.ts +0 -46
  23. package/dist/commands/cancel.d.ts.map +0 -1
  24. package/dist/commands/cancel.js +0 -239
  25. package/dist/commands/cancel.js.map +0 -1
  26. package/dist/commands/cron.d.ts +0 -8
  27. package/dist/commands/cron.d.ts.map +0 -1
  28. package/dist/commands/cron.js +0 -134
  29. package/dist/commands/cron.js.map +0 -1
  30. package/dist/commands/dashboard/tab-actions.d.ts +0 -10
  31. package/dist/commands/dashboard/tab-actions.d.ts.map +0 -1
  32. package/dist/commands/dashboard/tab-actions.js +0 -247
  33. package/dist/commands/dashboard/tab-actions.js.map +0 -1
  34. package/dist/commands/dashboard/tab-config.d.ts +0 -21
  35. package/dist/commands/dashboard/tab-config.d.ts.map +0 -1
  36. package/dist/commands/dashboard/tab-config.js +0 -873
  37. package/dist/commands/dashboard/tab-config.js.map +0 -1
  38. package/dist/commands/dashboard/tab-logs.d.ts +0 -10
  39. package/dist/commands/dashboard/tab-logs.d.ts.map +0 -1
  40. package/dist/commands/dashboard/tab-logs.js +0 -202
  41. package/dist/commands/dashboard/tab-logs.js.map +0 -1
  42. package/dist/commands/dashboard/tab-schedules.d.ts +0 -21
  43. package/dist/commands/dashboard/tab-schedules.d.ts.map +0 -1
  44. package/dist/commands/dashboard/tab-schedules.js +0 -320
  45. package/dist/commands/dashboard/tab-schedules.js.map +0 -1
  46. package/dist/commands/dashboard/tab-status.d.ts +0 -32
  47. package/dist/commands/dashboard/tab-status.d.ts.map +0 -1
  48. package/dist/commands/dashboard/tab-status.js +0 -424
  49. package/dist/commands/dashboard/tab-status.js.map +0 -1
  50. package/dist/commands/dashboard/types.d.ts +0 -42
  51. package/dist/commands/dashboard/types.d.ts.map +0 -1
  52. package/dist/commands/dashboard/types.js +0 -5
  53. package/dist/commands/dashboard/types.js.map +0 -1
  54. package/dist/commands/dashboard.d.ts +0 -11
  55. package/dist/commands/dashboard.d.ts.map +0 -1
  56. package/dist/commands/dashboard.js +0 -242
  57. package/dist/commands/dashboard.js.map +0 -1
  58. package/dist/commands/doctor.d.ts +0 -16
  59. package/dist/commands/doctor.d.ts.map +0 -1
  60. package/dist/commands/doctor.js +0 -195
  61. package/dist/commands/doctor.js.map +0 -1
  62. package/dist/commands/history.d.ts +0 -7
  63. package/dist/commands/history.d.ts.map +0 -1
  64. package/dist/commands/history.js +0 -49
  65. package/dist/commands/history.js.map +0 -1
  66. package/dist/commands/init.d.ts +0 -45
  67. package/dist/commands/init.d.ts.map +0 -1
  68. package/dist/commands/init.js +0 -777
  69. package/dist/commands/init.js.map +0 -1
  70. package/dist/commands/install.d.ts +0 -65
  71. package/dist/commands/install.d.ts.map +0 -1
  72. package/dist/commands/install.js +0 -405
  73. package/dist/commands/install.js.map +0 -1
  74. package/dist/commands/logs.d.ts +0 -15
  75. package/dist/commands/logs.d.ts.map +0 -1
  76. package/dist/commands/logs.js +0 -155
  77. package/dist/commands/logs.js.map +0 -1
  78. package/dist/commands/merge.d.ts +0 -26
  79. package/dist/commands/merge.d.ts.map +0 -1
  80. package/dist/commands/merge.js +0 -159
  81. package/dist/commands/merge.js.map +0 -1
  82. package/dist/commands/notify.d.ts +0 -7
  83. package/dist/commands/notify.d.ts.map +0 -1
  84. package/dist/commands/notify.js +0 -43
  85. package/dist/commands/notify.js.map +0 -1
  86. package/dist/commands/plan.d.ts +0 -19
  87. package/dist/commands/plan.d.ts.map +0 -1
  88. package/dist/commands/plan.js +0 -88
  89. package/dist/commands/plan.js.map +0 -1
  90. package/dist/commands/prd-state.d.ts +0 -12
  91. package/dist/commands/prd-state.d.ts.map +0 -1
  92. package/dist/commands/prd-state.js +0 -47
  93. package/dist/commands/prd-state.js.map +0 -1
  94. package/dist/commands/prd.d.ts +0 -18
  95. package/dist/commands/prd.d.ts.map +0 -1
  96. package/dist/commands/prd.js +0 -363
  97. package/dist/commands/prd.js.map +0 -1
  98. package/dist/commands/prds.d.ts +0 -13
  99. package/dist/commands/prds.d.ts.map +0 -1
  100. package/dist/commands/prds.js +0 -194
  101. package/dist/commands/prds.js.map +0 -1
  102. package/dist/commands/prs.d.ts +0 -14
  103. package/dist/commands/prs.d.ts.map +0 -1
  104. package/dist/commands/prs.js +0 -104
  105. package/dist/commands/prs.js.map +0 -1
  106. package/dist/commands/qa.d.ts +0 -34
  107. package/dist/commands/qa.d.ts.map +0 -1
  108. package/dist/commands/qa.js +0 -214
  109. package/dist/commands/qa.js.map +0 -1
  110. package/dist/commands/queue.d.ts +0 -8
  111. package/dist/commands/queue.d.ts.map +0 -1
  112. package/dist/commands/queue.js +0 -376
  113. package/dist/commands/queue.js.map +0 -1
  114. package/dist/commands/resolve.d.ts +0 -26
  115. package/dist/commands/resolve.d.ts.map +0 -1
  116. package/dist/commands/resolve.js +0 -186
  117. package/dist/commands/resolve.js.map +0 -1
  118. package/dist/commands/retry.d.ts +0 -9
  119. package/dist/commands/retry.d.ts.map +0 -1
  120. package/dist/commands/retry.js +0 -71
  121. package/dist/commands/retry.js.map +0 -1
  122. package/dist/commands/review.d.ts +0 -82
  123. package/dist/commands/review.d.ts.map +0 -1
  124. package/dist/commands/review.js +0 -479
  125. package/dist/commands/review.js.map +0 -1
  126. package/dist/commands/run.d.ts +0 -73
  127. package/dist/commands/run.d.ts.map +0 -1
  128. package/dist/commands/run.js +0 -509
  129. package/dist/commands/run.js.map +0 -1
  130. package/dist/commands/serve.d.ts +0 -19
  131. package/dist/commands/serve.d.ts.map +0 -1
  132. package/dist/commands/serve.js +0 -142
  133. package/dist/commands/serve.js.map +0 -1
  134. package/dist/commands/shared/env-builder.d.ts +0 -49
  135. package/dist/commands/shared/env-builder.d.ts.map +0 -1
  136. package/dist/commands/shared/env-builder.js +0 -150
  137. package/dist/commands/shared/env-builder.js.map +0 -1
  138. package/dist/commands/slice.d.ts +0 -35
  139. package/dist/commands/slice.d.ts.map +0 -1
  140. package/dist/commands/slice.js +0 -316
  141. package/dist/commands/slice.js.map +0 -1
  142. package/dist/commands/state.d.ts +0 -8
  143. package/dist/commands/state.d.ts.map +0 -1
  144. package/dist/commands/state.js +0 -54
  145. package/dist/commands/state.js.map +0 -1
  146. package/dist/commands/status.d.ts +0 -14
  147. package/dist/commands/status.d.ts.map +0 -1
  148. package/dist/commands/status.js +0 -297
  149. package/dist/commands/status.js.map +0 -1
  150. package/dist/commands/summary.d.ts +0 -14
  151. package/dist/commands/summary.d.ts.map +0 -1
  152. package/dist/commands/summary.js +0 -193
  153. package/dist/commands/summary.js.map +0 -1
  154. package/dist/commands/uninstall.d.ts +0 -25
  155. package/dist/commands/uninstall.d.ts.map +0 -1
  156. package/dist/commands/uninstall.js +0 -134
  157. package/dist/commands/uninstall.js.map +0 -1
  158. package/dist/commands/update.d.ts +0 -22
  159. package/dist/commands/update.d.ts.map +0 -1
  160. package/dist/commands/update.js +0 -90
  161. package/dist/commands/update.js.map +0 -1
  162. package/dist/web/assets/index-2JY0x_Ij.js +0 -381
  163. package/dist/web/assets/index-3h8pgmqL.css +0 -1
  164. package/dist/web/assets/index-B-wbyZq7.js +0 -386
  165. package/dist/web/assets/index-B1BnOpiO.css +0 -1
  166. package/dist/web/assets/index-B3CnV08_.js +0 -365
  167. package/dist/web/assets/index-B5QjuFh9.css +0 -1
  168. package/dist/web/assets/index-B8FW2ecQ.js +0 -370
  169. package/dist/web/assets/index-BFxPiKyy.js +0 -381
  170. package/dist/web/assets/index-BGqNh_Da.js +0 -365
  171. package/dist/web/assets/index-BIONU0qz.css +0 -1
  172. package/dist/web/assets/index-B_l_3wnA.js +0 -370
  173. package/dist/web/assets/index-Ba-4YvTQ.js +0 -365
  174. package/dist/web/assets/index-Bbb4-39N.js +0 -370
  175. package/dist/web/assets/index-BdgdShEN.js +0 -365
  176. package/dist/web/assets/index-BhiC4Z-G.js +0 -381
  177. package/dist/web/assets/index-BjhCFjZi.js +0 -381
  178. package/dist/web/assets/index-BlRxmrnQ.css +0 -1
  179. package/dist/web/assets/index-BqwbXsHS.js +0 -365
  180. package/dist/web/assets/index-BsC7RT48.css +0 -1
  181. package/dist/web/assets/index-Bvh8XI8_.js +0 -370
  182. package/dist/web/assets/index-C01r2ymn.js +0 -381
  183. package/dist/web/assets/index-C51Rbsmk.js +0 -381
  184. package/dist/web/assets/index-C7lMNxRE.js +0 -370
  185. package/dist/web/assets/index-CJLObgsn.js +0 -386
  186. package/dist/web/assets/index-CLuRf7Zt.js +0 -381
  187. package/dist/web/assets/index-CM3xFd3e.css +0 -1
  188. package/dist/web/assets/index-CNkBtDK7.js +0 -370
  189. package/dist/web/assets/index-CPQbZ1BL.css +0 -1
  190. package/dist/web/assets/index-CTy5dUDU.css +0 -1
  191. package/dist/web/assets/index-CU15COKs.js +0 -370
  192. package/dist/web/assets/index-CiRJZI4z.js +0 -386
  193. package/dist/web/assets/index-Cp7RYjoy.css +0 -1
  194. package/dist/web/assets/index-CvPkZOWT.js +0 -381
  195. package/dist/web/assets/index-CvUk-33B.css +0 -1
  196. package/dist/web/assets/index-Cvmj-oF6.css +0 -1
  197. package/dist/web/assets/index-CxE5iQVO.js +0 -381
  198. package/dist/web/assets/index-D7lZQpFV.js +0 -365
  199. package/dist/web/assets/index-DAyP4GOi.css +0 -1
  200. package/dist/web/assets/index-DCG0n8Kg.js +0 -386
  201. package/dist/web/assets/index-DEEI8cyF.css +0 -1
  202. package/dist/web/assets/index-DF99BowV.js +0 -381
  203. package/dist/web/assets/index-DGWsvFj6.css +0 -1
  204. package/dist/web/assets/index-DGpU39Cp.css +0 -1
  205. package/dist/web/assets/index-DI4kFgOi.js +0 -370
  206. package/dist/web/assets/index-DIyTcPw5.css +0 -1
  207. package/dist/web/assets/index-DTsfDC7m.js +0 -381
  208. package/dist/web/assets/index-DcgNAi4A.js +0 -386
  209. package/dist/web/assets/index-DgOAgkZy.css +0 -1
  210. package/dist/web/assets/index-DnHkqbOa.js +0 -386
  211. package/dist/web/assets/index-DnR7Idcf.css +0 -1
  212. package/dist/web/assets/index-DpVirMEe.css +0 -1
  213. package/dist/web/assets/index-DsYIWZ86.css +0 -1
  214. package/dist/web/assets/index-DtrDkci5.js +0 -381
  215. package/dist/web/assets/index-DyjIth5M.js +0 -386
  216. package/dist/web/assets/index-FwIKfHPL.css +0 -1
  217. package/dist/web/assets/index-IKrZymWk.css +0 -1
  218. package/dist/web/assets/index-MA6fM0ab.js +0 -381
  219. package/dist/web/assets/index-N_QxaSEg.css +0 -1
  220. package/dist/web/assets/index-OcU-0TCQ.css +0 -1
  221. package/dist/web/assets/index-OyhrmG-L.js +0 -381
  222. package/dist/web/assets/index-SQlBKu_s.js +0 -386
  223. package/dist/web/assets/index-Sv2B60J4.js +0 -370
  224. package/dist/web/assets/index-Vgyivb5u.js +0 -365
  225. package/dist/web/assets/index-ZABWMEZR.js +0 -381
  226. package/dist/web/assets/index-ZE5lOeJp.js +0 -386
  227. package/dist/web/assets/index-aCHmkAcJ.css +0 -1
  228. package/dist/web/assets/index-bFijnpuU.js +0 -381
  229. package/dist/web/assets/index-bUPZgSoZ.css +0 -1
  230. package/dist/web/assets/index-mz1VIYsP.css +0 -1
  231. package/dist/web/assets/index-oOp_MFeE.js +0 -376
  232. package/dist/web/assets/index-rfU713Zm.js +0 -386
  233. package/dist/web/assets/index-tuNH9gmb.js +0 -448
  234. package/dist/web/assets/index-viSwHyDD.js +0 -365
  235. package/dist/web/assets/index-yKEQysks.js +0 -365
@@ -1,376 +0,0 @@
1
- /**
2
- * Queue command — manage the global job queue.
3
- * Provides subcommands for viewing, clearing, and dispatching queued jobs.
4
- */
5
- import * as path from 'path';
6
- import { spawn } from 'child_process';
7
- import chalk from 'chalk';
8
- import { Command } from 'commander';
9
- import { DEFAULT_QUEUE_MAX_WAIT_TIME, canStartJob, claimJobSlot, clearQueue, dispatchNextJob, enqueueJob, expireStaleJobs, getQueueStatus, getScriptPath, loadConfig, markJobRunning, removeJob, resolveJobProvider, resolvePreset, resolveProviderBucketKey, updateJobStatus, } from '@night-watch/core';
10
- import { createLogger } from '@night-watch/core';
11
- import { buildQueuedJobEnv } from './shared/env-builder.js';
12
- const logger = createLogger('queue');
13
- const VALID_JOB_TYPES = [
14
- 'executor',
15
- 'reviewer',
16
- 'qa',
17
- 'audit',
18
- 'slicer',
19
- 'planner',
20
- 'pr-resolver',
21
- 'merger',
22
- ];
23
- function formatTimestamp(unixTs) {
24
- if (unixTs === null)
25
- return '-';
26
- return new Date(unixTs * 1000).toLocaleString();
27
- }
28
- function formatDuration(unixTs) {
29
- const now = Math.floor(Date.now() / 1000);
30
- const diff = now - unixTs;
31
- if (diff < 60)
32
- return `${diff}s ago`;
33
- if (diff < 3600)
34
- return `${Math.floor(diff / 60)}m ago`;
35
- if (diff < 86400)
36
- return `${Math.floor(diff / 3600)}h ago`;
37
- return `${Math.floor(diff / 86400)}d ago`;
38
- }
39
- function printQueueEntry(entry, indent = '') {
40
- console.log(`${indent}${chalk.bold(`[${entry.id}]`)} ${chalk.cyan(entry.jobType)} for ${chalk.dim(entry.projectName)}`);
41
- console.log(`${indent} Status: ${entry.status} | Priority: ${entry.priority} | Enqueued: ${formatDuration(entry.enqueuedAt)}`);
42
- if (entry.dispatchedAt) {
43
- console.log(`${indent} Dispatched: ${formatTimestamp(entry.dispatchedAt)}`);
44
- }
45
- }
46
- export function createQueueCommand() {
47
- const queue = new Command('queue');
48
- queue.description('Manage the global job queue');
49
- // night-watch queue status
50
- queue
51
- .command('status')
52
- .description('Show current queue status')
53
- .option('--json', 'Output as JSON')
54
- .action((opts) => {
55
- const status = getQueueStatus();
56
- if (opts.json) {
57
- console.log(JSON.stringify({ ...status, enabled: true }, null, 2));
58
- return;
59
- }
60
- console.log(chalk.bold('\n📦 Global Job Queue Status\n'));
61
- if (status.running) {
62
- console.log(chalk.yellow('🔄 Running:'));
63
- printQueueEntry(status.running, ' ');
64
- console.log();
65
- }
66
- else {
67
- console.log(chalk.dim(' No job currently running'));
68
- }
69
- console.log();
70
- console.log(chalk.bold(`📋 Pending: ${status.pending.total} jobs`));
71
- if (status.pending.total > 0) {
72
- const byType = Object.entries(status.pending.byType);
73
- if (byType.length > 0) {
74
- console.log(' By type:');
75
- for (const [type, count] of byType) {
76
- console.log(` ${type}: ${count}`);
77
- }
78
- }
79
- console.log();
80
- console.log(chalk.dim(' Next up:'));
81
- const nextUp = status.items.find((i) => i.status === 'pending');
82
- if (nextUp) {
83
- printQueueEntry(nextUp, ' ');
84
- }
85
- }
86
- if (status.items.length > 1) {
87
- console.log();
88
- console.log(chalk.dim(' All queued items:'));
89
- for (const item of status.items) {
90
- if (item.status === 'pending') {
91
- printQueueEntry(item, ' ');
92
- }
93
- }
94
- }
95
- console.log();
96
- });
97
- // night-watch queue list
98
- queue
99
- .command('list')
100
- .description('List all queue entries')
101
- .option('--status <status>', 'Filter by status (pending, running, dispatched, expired)')
102
- .option('--json', 'Output as JSON')
103
- .action((opts) => {
104
- const status = getQueueStatus();
105
- let items = status.items;
106
- if (opts.status) {
107
- items = items.filter((i) => i.status === opts.status);
108
- }
109
- if (opts.json) {
110
- console.log(JSON.stringify(items, null, 2));
111
- return;
112
- }
113
- if (items.length === 0) {
114
- console.log(chalk.dim('No queue entries found.'));
115
- return;
116
- }
117
- console.log(chalk.bold(`\n📋 Queue Entries (${items.length})\n`));
118
- for (const item of items) {
119
- printQueueEntry(item);
120
- console.log();
121
- }
122
- });
123
- // night-watch queue clear
124
- queue
125
- .command('clear')
126
- .description('Clear pending jobs from the queue')
127
- .option('--type <type>', 'Only clear jobs of this type')
128
- .option('--all', 'Clear all entries including running (dangerous)')
129
- .action((opts) => {
130
- if (opts.type && !VALID_JOB_TYPES.includes(opts.type)) {
131
- console.error(chalk.red(`Invalid job type: ${opts.type}`));
132
- console.error(chalk.dim(`Valid types: ${VALID_JOB_TYPES.join(', ')}`));
133
- process.exit(1);
134
- }
135
- const count = clearQueue(opts.type);
136
- console.log(chalk.green(`Cleared ${count} pending job(s) from the queue.`));
137
- });
138
- // night-watch queue enqueue
139
- queue
140
- .command('enqueue <job-type> <project-dir>')
141
- .description('Manually enqueue a job')
142
- .option('--env <json>', 'JSON object of environment variables to store', '{}')
143
- .option('--provider-key <key>', 'Provider bucket key (e.g. claude-native, codex)')
144
- .action((jobType, projectDir, opts) => {
145
- if (!VALID_JOB_TYPES.includes(jobType)) {
146
- console.error(chalk.red(`Invalid job type: ${jobType}`));
147
- console.error(chalk.dim(`Valid types: ${VALID_JOB_TYPES.join(', ')}`));
148
- process.exit(1);
149
- }
150
- let envVars = {};
151
- if (opts.env) {
152
- try {
153
- envVars = JSON.parse(opts.env);
154
- }
155
- catch {
156
- console.error(chalk.red('Invalid JSON for --env'));
157
- process.exit(1);
158
- }
159
- }
160
- const projectName = path.basename(projectDir);
161
- const queueConfig = loadConfig(projectDir).queue;
162
- const id = enqueueJob(projectDir, projectName, jobType, envVars, queueConfig, opts.providerKey);
163
- console.log(chalk.green(`Enqueued ${jobType} for ${projectName} (ID: ${id})`));
164
- });
165
- // night-watch queue resolve-key
166
- queue
167
- .command('resolve-key')
168
- .description('Resolve the provider bucket key for a given project and job type')
169
- .requiredOption('--project <dir>', 'Project directory')
170
- .requiredOption('--job-type <type>', 'Job type (executor, reviewer, qa, audit, slicer, planner, pr-resolver, merger)')
171
- .action((opts) => {
172
- try {
173
- const config = loadConfig(opts.project);
174
- const presetId = resolveJobProvider(config, opts.jobType);
175
- const preset = resolvePreset(config, presetId);
176
- const effectiveProviderEnv = {
177
- ...(config.providerEnv ?? {}),
178
- ...(preset.envVars ?? {}),
179
- };
180
- const key = resolveProviderBucketKey(preset.command, effectiveProviderEnv);
181
- process.stdout.write(`${key}\n`);
182
- }
183
- catch {
184
- process.stdout.write('');
185
- }
186
- process.exit(0);
187
- });
188
- // night-watch queue dispatch
189
- queue
190
- .command('dispatch')
191
- .description('Dispatch the next pending job (used by cron scripts)')
192
- .option('--log <file>', 'Log file to write dispatch output')
193
- .option('--project-dir <dir>', 'Project directory to load queue config from (defaults to cwd)')
194
- .action((_opts) => {
195
- const configDir = _opts.projectDir ?? process.cwd();
196
- const entry = dispatchNextJob(loadConfig(configDir).queue);
197
- if (!entry) {
198
- logger.info('No pending jobs to dispatch');
199
- return;
200
- }
201
- logger.info(`Dispatching ${entry.jobType} for ${entry.projectName} (ID: ${entry.id})`);
202
- // Construct the spawn command based on job type
203
- const scriptName = getScriptNameForJobType(entry.jobType);
204
- if (!scriptName) {
205
- logger.error(`Unknown job type: ${entry.jobType}`);
206
- return;
207
- }
208
- // Rebuild env from queued project's config (not from dispatcher process.env)
209
- // This ensures provider-specific env (ANTHROPIC_BASE_URL, API keys, model ids)
210
- // always comes from the queued job's own project config.
211
- let projectEnv;
212
- try {
213
- projectEnv = buildQueuedJobEnv(entry);
214
- }
215
- catch {
216
- // If config load fails, fall back to process env
217
- projectEnv = {};
218
- }
219
- const env = {
220
- ...process.env,
221
- ...projectEnv,
222
- // Overlay persisted runtime-only NW_* queue markers from the queue entry
223
- // (These are queue-specific flags, not provider identity)
224
- ...filterQueueMarkers(entry.envJson),
225
- NW_QUEUE_DISPATCHED: '1',
226
- NW_QUEUE_ENTRY_ID: String(entry.id),
227
- };
228
- // Resolve the bundled script path for the current install context.
229
- const scriptPath = getScriptPath(scriptName);
230
- logger.info(`Spawning: ${scriptPath} ${entry.projectPath}`);
231
- try {
232
- // Spawn as detached to let it run independently
233
- const child = spawn('bash', [scriptPath, entry.projectPath], {
234
- detached: true,
235
- stdio: 'ignore',
236
- env,
237
- cwd: entry.projectPath,
238
- });
239
- child.unref();
240
- logger.info(`Spawned PID: ${child.pid}`);
241
- // Mark as running now that the process is launched
242
- markJobRunning(entry.id);
243
- }
244
- catch (error) {
245
- updateJobStatus(entry.id, 'pending');
246
- logger.error(`Failed to dispatch ${entry.jobType} for ${entry.projectName}: ${error instanceof Error ? error.message : String(error)}`);
247
- process.exit(1);
248
- }
249
- });
250
- // night-watch queue claim
251
- queue
252
- .command('claim <job-type> <project-dir>')
253
- .description('Atomically claim a concurrency slot and insert a running entry (used by cron scripts)')
254
- .option('--provider-key <key>', 'Provider bucket key (e.g. claude-native, codex)')
255
- .action((jobType, projectDir, opts) => {
256
- if (!VALID_JOB_TYPES.includes(jobType)) {
257
- console.error(`Invalid job type: ${jobType}`);
258
- console.error(`Valid types: ${VALID_JOB_TYPES.join(', ')}`);
259
- process.exit(1);
260
- }
261
- const queueConfig = loadConfig(projectDir).queue;
262
- const projectName = path.basename(projectDir);
263
- const result = claimJobSlot(projectDir, projectName, jobType, opts.providerKey, queueConfig);
264
- if (!result.claimed) {
265
- process.exit(1);
266
- }
267
- // Print only the numeric ID so bash callers can capture it cleanly.
268
- process.stdout.write(`${result.id}\n`);
269
- process.exit(0);
270
- });
271
- queue
272
- .command('complete <id>')
273
- .description('Remove a completed queue entry (used by cron scripts)')
274
- .action((id) => {
275
- const queueId = parseInt(id, 10);
276
- if (isNaN(queueId) || queueId < 1) {
277
- console.error(chalk.red('Queue entry id must be a positive integer'));
278
- process.exit(1);
279
- }
280
- removeJob(queueId);
281
- });
282
- queue
283
- .command('can-start')
284
- .description('Return a zero exit status when the global queue has an available slot')
285
- .option('--project-dir <dir>', 'Project directory to load queue config from (defaults to cwd)')
286
- .action((opts) => {
287
- const configDir = opts.projectDir ?? process.cwd();
288
- const queueConfig = loadConfig(configDir).queue;
289
- process.exit(canStartJob(queueConfig) ? 0 : 1);
290
- });
291
- // night-watch queue expire
292
- queue
293
- .command('expire')
294
- .description('Expire stale queued jobs')
295
- .option('--max-wait <seconds>', 'Maximum wait time in seconds', String(DEFAULT_QUEUE_MAX_WAIT_TIME))
296
- .action((opts) => {
297
- const maxWait = parseInt(opts.maxWait, 10);
298
- if (isNaN(maxWait) || maxWait < 60) {
299
- console.error(chalk.red('--max-wait must be at least 60 seconds'));
300
- process.exit(1);
301
- }
302
- const count = expireStaleJobs(maxWait);
303
- if (count > 0) {
304
- console.log(chalk.yellow(`Expired ${count} stale job(s)`));
305
- }
306
- else {
307
- console.log(chalk.dim('No stale jobs to expire'));
308
- }
309
- });
310
- return queue;
311
- }
312
- /**
313
- * NW_* env keys that are legitimate queue/runtime markers (not provider identity keys).
314
- * Only these keys from a queued entry's envJson are forwarded at dispatch time.
315
- * Provider identity (ANTHROPIC_BASE_URL, API keys, model ids) is always recomputed
316
- * from the queued job's own project config via buildQueuedJobEnv.
317
- */
318
- const QUEUE_MARKER_KEYS = new Set([
319
- 'NW_DRY_RUN',
320
- 'NW_CRON_TRIGGER',
321
- 'NW_DEFAULT_BRANCH',
322
- 'NW_TARGET_PR',
323
- 'NW_REVIEWER_WORKER_MODE',
324
- 'NW_REVIEWER_PARALLEL',
325
- 'NW_REVIEWER_WORKER_STAGGER',
326
- 'NW_REVIEWER_MAX_RUNTIME',
327
- 'NW_REVIEWER_MAX_RETRIES',
328
- 'NW_REVIEWER_RETRY_DELAY',
329
- 'NW_REVIEWER_MAX_PRS_PER_RUN',
330
- 'NW_MIN_REVIEW_SCORE',
331
- 'NW_BRANCH_PATTERNS',
332
- 'NW_PRD_DIR',
333
- 'NW_AUTO_MERGE',
334
- 'NW_AUTO_MERGE_METHOD',
335
- 'NW_MAX_RUNTIME',
336
- 'NW_QA_MAX_RUNTIME',
337
- ]);
338
- /**
339
- * Filter envJson to only pass through legitimate queue/runtime markers.
340
- * Drops any provider identity keys that may have been persisted in the queue entry.
341
- */
342
- function filterQueueMarkers(envJson) {
343
- const result = {};
344
- for (const [key, value] of Object.entries(envJson)) {
345
- if (QUEUE_MARKER_KEYS.has(key)) {
346
- result[key] = value;
347
- }
348
- }
349
- return result;
350
- }
351
- function getScriptNameForJobType(jobType) {
352
- switch (jobType) {
353
- case 'executor':
354
- return 'night-watch-cron.sh';
355
- case 'reviewer':
356
- return 'night-watch-pr-reviewer-cron.sh';
357
- case 'qa':
358
- return 'night-watch-qa-cron.sh';
359
- case 'audit':
360
- return 'night-watch-audit-cron.sh';
361
- case 'slicer':
362
- return 'night-watch-slicer-cron.sh';
363
- case 'planner':
364
- return 'night-watch-plan-cron.sh';
365
- case 'pr-resolver':
366
- return 'night-watch-pr-resolver-cron.sh';
367
- case 'merger':
368
- return 'night-watch-merger-cron.sh';
369
- default:
370
- return null;
371
- }
372
- }
373
- export function queueCommand(program) {
374
- program.addCommand(createQueueCommand());
375
- }
376
- //# sourceMappingURL=queue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/commands/queue.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Resolve command - executes the PR resolver cron script
3
- */
4
- import { Command } from 'commander';
5
- import { INightWatchConfig } from '@night-watch/core';
6
- /**
7
- * Options for the resolve command
8
- */
9
- export interface IResolveOptions {
10
- dryRun: boolean;
11
- timeout?: string;
12
- provider?: string;
13
- }
14
- /**
15
- * Build environment variables map from config and CLI options for PR resolver
16
- */
17
- export declare function buildEnvVars(config: INightWatchConfig, options: IResolveOptions): Record<string, string>;
18
- /**
19
- * Apply CLI flag overrides to the config for PR resolver
20
- */
21
- export declare function applyCliOverrides(config: INightWatchConfig, options: IResolveOptions): INightWatchConfig;
22
- /**
23
- * Register the resolve command with the program
24
- */
25
- export declare function resolveCommand(program: Command): void;
26
- //# sourceMappingURL=resolve.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/commands/resolve.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,iBAAiB,EAalB,MAAM,mBAAmB,CAAC;AAS3B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,eAAe,GACvB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcxB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,eAAe,GACvB,iBAAiB,CAgBnB;AA6BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyIrD"}
@@ -1,186 +0,0 @@
1
- /**
2
- * Resolve command - executes the PR resolver cron script
3
- */
4
- import { createSpinner, createTable, dim, executeScriptWithOutput, getScriptPath, header, info, loadConfig, parseScriptResult, resolveJobProvider, sendNotifications, error as uiError, } from '@night-watch/core';
5
- import { buildBaseEnvVars, formatProviderDisplay, maybeApplyCronSchedulingDelay, } from './shared/env-builder.js';
6
- import { execFileSync } from 'child_process';
7
- import * as path from 'path';
8
- /**
9
- * Build environment variables map from config and CLI options for PR resolver
10
- */
11
- export function buildEnvVars(config, options) {
12
- // Start with base env vars shared by all job types
13
- const env = buildBaseEnvVars(config, 'pr-resolver', options.dryRun);
14
- // Runtime for PR resolver (uses NW_PR_RESOLVER_* variables)
15
- env.NW_PR_RESOLVER_MAX_RUNTIME = String(config.prResolver.maxRuntime);
16
- env.NW_PR_RESOLVER_MAX_PRS_PER_RUN = String(config.prResolver.maxPrsPerRun);
17
- env.NW_PR_RESOLVER_PER_PR_TIMEOUT = String(config.prResolver.perPrTimeout);
18
- env.NW_PR_RESOLVER_AI_CONFLICT_RESOLUTION = config.prResolver.aiConflictResolution ? '1' : '0';
19
- env.NW_PR_RESOLVER_AI_REVIEW_RESOLUTION = config.prResolver.aiReviewResolution ? '1' : '0';
20
- env.NW_PR_RESOLVER_READY_LABEL = config.prResolver.readyLabel;
21
- env.NW_PR_RESOLVER_BRANCH_PATTERNS = config.prResolver.branchPatterns.join(',');
22
- return env;
23
- }
24
- /**
25
- * Apply CLI flag overrides to the config for PR resolver
26
- */
27
- export function applyCliOverrides(config, options) {
28
- const overridden = { ...config, prResolver: { ...config.prResolver } };
29
- if (options.timeout) {
30
- const timeout = parseInt(options.timeout, 10);
31
- if (!isNaN(timeout)) {
32
- overridden.prResolver.maxRuntime = timeout;
33
- }
34
- }
35
- if (options.provider) {
36
- // Use _cliProviderOverride to ensure CLI flag takes precedence over jobProviders
37
- overridden._cliProviderOverride = options.provider;
38
- }
39
- return overridden;
40
- }
41
- /**
42
- * Get open PRs with conflict status (no branch pattern filtering)
43
- */
44
- function getOpenPrs() {
45
- try {
46
- const args = ['pr', 'list', '--state', 'open', '--json', 'number,title,headRefName,mergeable'];
47
- const result = execFileSync('gh', args, {
48
- encoding: 'utf-8',
49
- stdio: ['pipe', 'pipe', 'pipe'],
50
- });
51
- const prs = JSON.parse(result.trim() || '[]');
52
- return prs.map((pr) => ({
53
- number: pr.number,
54
- title: pr.title,
55
- branch: pr.headRefName,
56
- mergeable: pr.mergeable,
57
- }));
58
- }
59
- catch {
60
- // gh CLI not available or not authenticated
61
- return [];
62
- }
63
- }
64
- /**
65
- * Register the resolve command with the program
66
- */
67
- export function resolveCommand(program) {
68
- program
69
- .command('resolve')
70
- .description('Run PR conflict resolver now')
71
- .option('--dry-run', 'Show what would be executed without running')
72
- .option('--timeout <seconds>', 'Override max runtime')
73
- .option('--provider <string>', 'AI provider to use')
74
- .action(async (options) => {
75
- // Get the project directory (current working directory)
76
- const projectDir = process.cwd();
77
- // Load config from file and environment
78
- let config = loadConfig(projectDir);
79
- // Apply CLI flag overrides
80
- config = applyCliOverrides(config, options);
81
- if (!config.prResolver.enabled && !options.dryRun) {
82
- info('PR resolver is disabled in config; skipping.');
83
- process.exit(0);
84
- }
85
- // Build environment variables
86
- const envVars = buildEnvVars(config, options);
87
- // Get the script path
88
- const scriptPath = getScriptPath('night-watch-pr-resolver-cron.sh');
89
- if (options.dryRun) {
90
- header('Dry Run: PR Resolver');
91
- // Resolve resolver-specific provider
92
- const resolverProvider = resolveJobProvider(config, 'pr-resolver');
93
- // Configuration section with table
94
- header('Configuration');
95
- const configTable = createTable({ head: ['Setting', 'Value'] });
96
- configTable.push(['Provider', resolverProvider]);
97
- configTable.push([
98
- 'Max Runtime',
99
- `${config.prResolver.maxRuntime}s (${Math.floor(config.prResolver.maxRuntime / 60)}min)`,
100
- ]);
101
- configTable.push([
102
- 'Max PRs Per Run',
103
- config.prResolver.maxPrsPerRun === 0
104
- ? 'Unlimited'
105
- : String(config.prResolver.maxPrsPerRun),
106
- ]);
107
- configTable.push(['Per-PR Timeout', `${config.prResolver.perPrTimeout}s`]);
108
- configTable.push([
109
- 'AI Conflict Resolution',
110
- config.prResolver.aiConflictResolution ? 'Enabled' : 'Disabled',
111
- ]);
112
- configTable.push([
113
- 'AI Review Resolution',
114
- config.prResolver.aiReviewResolution ? 'Enabled' : 'Disabled',
115
- ]);
116
- configTable.push(['Ready Label', config.prResolver.readyLabel]);
117
- configTable.push([
118
- 'Branch Patterns',
119
- config.prResolver.branchPatterns.length > 0
120
- ? config.prResolver.branchPatterns.join(', ')
121
- : '(all)',
122
- ]);
123
- console.log(configTable.toString());
124
- // Check for open PRs
125
- header('Open PRs');
126
- const openPrs = getOpenPrs();
127
- if (openPrs.length === 0) {
128
- dim(' (no open PRs found)');
129
- }
130
- else {
131
- for (const pr of openPrs) {
132
- const conflictStatus = pr.mergeable === 'CONFLICTING' ? ' [CONFLICT]' : '';
133
- info(`#${pr.number}: ${pr.title}${conflictStatus}`);
134
- dim(` Branch: ${pr.branch}`);
135
- }
136
- }
137
- // Environment variables
138
- header('Environment Variables');
139
- for (const [key, value] of Object.entries(envVars)) {
140
- dim(` ${key}=${value}`);
141
- }
142
- // Full command that would be executed
143
- header('Command');
144
- dim(` bash ${scriptPath} ${projectDir}`);
145
- console.log();
146
- process.exit(0);
147
- }
148
- // Execute the script with spinner
149
- const spinner = createSpinner('Running PR resolver...');
150
- spinner.start();
151
- try {
152
- await maybeApplyCronSchedulingDelay(config, 'pr-resolver', projectDir);
153
- const { exitCode, stdout, stderr } = await executeScriptWithOutput(scriptPath, [projectDir], envVars);
154
- const scriptResult = parseScriptResult(`${stdout}\n${stderr}`);
155
- if (exitCode === 0) {
156
- if (scriptResult?.status === 'queued') {
157
- spinner.succeed('PR resolver queued — another job is currently running');
158
- }
159
- else if (scriptResult?.status?.startsWith('skip_')) {
160
- spinner.succeed('PR resolver completed (no PRs needed resolution)');
161
- }
162
- else {
163
- spinner.succeed('PR resolver completed successfully');
164
- }
165
- }
166
- else {
167
- spinner.fail(`PR resolver exited with code ${exitCode}`);
168
- }
169
- // Send notifications (fire-and-forget, failures do not affect exit code)
170
- const notificationEvent = exitCode === 0 ? 'pr_resolver_completed' : 'pr_resolver_failed';
171
- await sendNotifications(config, {
172
- event: notificationEvent,
173
- projectName: path.basename(projectDir),
174
- exitCode,
175
- provider: formatProviderDisplay(envVars.NW_PROVIDER_CMD, envVars.NW_PROVIDER_LABEL),
176
- });
177
- process.exit(exitCode);
178
- }
179
- catch (err) {
180
- spinner.fail('Failed to execute resolve command');
181
- uiError(`${err instanceof Error ? err.message : String(err)}`);
182
- process.exit(1);
183
- }
184
- });
185
- }
186
- //# sourceMappingURL=resolve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/commands/resolve.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Retry command — Move a completed PRD back to pending for re-execution.
3
- */
4
- import { Command } from 'commander';
5
- /**
6
- * Register the retry command with the program
7
- */
8
- export declare function retryCommand(program: Command): void;
9
- //# sourceMappingURL=retry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/commands/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+CnD"}