@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,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"}