@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,242 +0,0 @@
1
- /**
2
- * Dashboard command for Night Watch CLI
3
- * Tabbed TUI with Status, Config, Schedules, Actions, and Logs tabs
4
- */
5
- import blessed from 'blessed';
6
- import { fetchStatusSnapshot, loadConfig } from '@night-watch/core';
7
- import { createStatusTab } from './dashboard/tab-status.js';
8
- import { createConfigTab } from './dashboard/tab-config.js';
9
- import { createSchedulesTab } from './dashboard/tab-schedules.js';
10
- import { createActionsTab } from './dashboard/tab-actions.js';
11
- import { createLogsTab } from './dashboard/tab-logs.js';
12
- // Re-export render functions for backward compatibility (used by tests)
13
- export { renderPrdPane, renderProcessPane, renderPrPane, renderLogPane, } from './dashboard/tab-status.js';
14
- /**
15
- * Show a temporary flash message overlay
16
- */
17
- function showMessage(screen, text, type, durationMs = 2000) {
18
- const colors = { success: 'green', error: 'red', info: 'cyan' };
19
- const msgBox = blessed.box({
20
- top: 'center',
21
- left: 'center',
22
- width: Math.min(60, text.length + 6),
23
- height: 3,
24
- content: `{center}${text}{/center}`,
25
- tags: true,
26
- border: { type: 'line' },
27
- style: { border: { fg: colors[type] }, fg: 'white', bg: 'black' },
28
- });
29
- screen.append(msgBox);
30
- screen.render();
31
- setTimeout(() => {
32
- msgBox.destroy();
33
- screen.render();
34
- }, durationMs);
35
- }
36
- export function dashboardCommand(program) {
37
- program
38
- .command('dashboard')
39
- .description('Live terminal dashboard [experimental]')
40
- .option('--interval <seconds>', 'Refresh interval in seconds', '10')
41
- .action(async (options) => {
42
- const projectDir = process.cwd();
43
- let config = loadConfig(projectDir);
44
- // Create blessed screen
45
- const screen = blessed.screen({
46
- smartCSR: true,
47
- title: 'Night Watch Dashboard',
48
- fullUnicode: true,
49
- });
50
- // --- Layout ---
51
- // Header: row 0, height 1
52
- const headerBox = blessed.box({
53
- top: 0,
54
- left: 0,
55
- width: '100%',
56
- height: 1,
57
- content: '{center}Night Watch Dashboard{/center}',
58
- tags: true,
59
- style: { fg: 'cyan', bold: true },
60
- });
61
- // Tab bar: row 1, height 1
62
- const tabBar = blessed.box({
63
- top: 1,
64
- left: 0,
65
- width: '100%',
66
- height: 1,
67
- tags: true,
68
- style: { fg: 'white', bg: 'black' },
69
- content: '',
70
- });
71
- // Content area: rows 2..n-2
72
- const contentArea = blessed.box({
73
- top: 2,
74
- left: 0,
75
- width: '100%',
76
- height: '100%-4',
77
- });
78
- // Footer: bottom row
79
- const footerBox = blessed.box({
80
- bottom: 0,
81
- left: 0,
82
- width: '100%',
83
- height: 1,
84
- content: '',
85
- tags: true,
86
- style: { fg: 'white', bg: 'blue' },
87
- });
88
- screen.append(headerBox);
89
- screen.append(tabBar);
90
- screen.append(contentArea);
91
- screen.append(footerBox);
92
- // --- Create tabs ---
93
- const tabs = [
94
- createStatusTab(),
95
- createConfigTab(),
96
- createSchedulesTab(),
97
- createActionsTab(),
98
- createLogsTab(),
99
- ];
100
- // Append all tab containers to content area
101
- for (const tab of tabs) {
102
- contentArea.append(tab.container);
103
- }
104
- // --- State ---
105
- let activeTabIndex = 0;
106
- let isEditing = false;
107
- let snapshot = await fetchStatusSnapshot(projectDir, config);
108
- // --- Tab context ---
109
- const ctx = {
110
- screen,
111
- projectDir,
112
- config,
113
- snapshot,
114
- reloadConfig: () => {
115
- config = loadConfig(projectDir);
116
- ctx.config = config;
117
- return config;
118
- },
119
- refreshSnapshot: async () => {
120
- snapshot = await fetchStatusSnapshot(projectDir, config);
121
- ctx.snapshot = snapshot;
122
- return snapshot;
123
- },
124
- setFooter: (text) => {
125
- footerBox.setContent(text);
126
- },
127
- showMessage: (text, type, durationMs) => {
128
- showMessage(screen, text, type, durationMs);
129
- },
130
- setEditing: (editing) => {
131
- isEditing = editing;
132
- },
133
- };
134
- // --- Tab bar rendering ---
135
- function renderTabBar() {
136
- const parts = tabs.map((tab, idx) => {
137
- const num = idx + 1;
138
- if (idx === activeTabIndex) {
139
- return `{white-bg}{black-fg} ${num}:${tab.name} {/black-fg}{/white-bg}`;
140
- }
141
- return ` {blue-fg}${num}:${tab.name}{/blue-fg} `;
142
- });
143
- tabBar.setContent(parts.join(''));
144
- }
145
- // --- Tab switching ---
146
- function switchTab(newIndex) {
147
- if (newIndex === activeTabIndex)
148
- return;
149
- if (newIndex < 0 || newIndex >= tabs.length)
150
- return;
151
- if (isEditing)
152
- return; // Don't switch while editing
153
- // Deactivate current tab
154
- tabs[activeTabIndex].deactivate();
155
- tabs[activeTabIndex].container.hide();
156
- // Activate new tab
157
- activeTabIndex = newIndex;
158
- tabs[activeTabIndex].container.show();
159
- renderTabBar();
160
- tabs[activeTabIndex].activate(ctx);
161
- screen.render();
162
- }
163
- // --- Header ---
164
- const intervalSeconds = parseInt(options.interval, 10) || 10;
165
- let countdown = intervalSeconds;
166
- function updateHeader() {
167
- headerBox.setContent(`{center}Night Watch: ${snapshot.projectName} | Provider: ${config.provider} | Last: ${snapshot.timestamp.toLocaleTimeString()} | Next: ${countdown}s{/center}`);
168
- }
169
- // --- Refresh ---
170
- async function refreshData() {
171
- config = loadConfig(projectDir);
172
- ctx.config = config;
173
- snapshot = await fetchStatusSnapshot(projectDir, config);
174
- ctx.snapshot = snapshot;
175
- countdown = intervalSeconds;
176
- updateHeader();
177
- tabs[activeTabIndex].refresh(ctx);
178
- screen.render();
179
- }
180
- // --- Timer ---
181
- const timer = setInterval(() => {
182
- countdown--;
183
- updateHeader();
184
- screen.render();
185
- if (countdown <= 0) {
186
- refreshData().catch(() => {
187
- // Silently ignore errors during refresh
188
- });
189
- }
190
- }, 1000);
191
- // --- Global keyboard handlers ---
192
- screen.key(['q', 'escape'], () => {
193
- if (isEditing)
194
- return;
195
- clearInterval(timer);
196
- for (const tab of tabs) {
197
- tab.destroy();
198
- }
199
- screen.destroy();
200
- process.exit(0);
201
- });
202
- screen.key(['r'], () => {
203
- if (isEditing)
204
- return;
205
- refreshData().catch(() => {
206
- // Silently ignore errors during refresh
207
- });
208
- });
209
- // Tab switching via number keys
210
- for (let i = 0; i < tabs.length; i++) {
211
- const idx = i;
212
- screen.key([String(i + 1)], () => {
213
- if (isEditing)
214
- return;
215
- switchTab(idx);
216
- });
217
- }
218
- // Tab cycling is handled per-tab (Status tab uses Tab for pane focus)
219
- // Shift+Tab always cycles tabs
220
- screen.key(['S-tab'], () => {
221
- if (isEditing)
222
- return;
223
- const newIndex = (activeTabIndex - 1 + tabs.length) % tabs.length;
224
- switchTab(newIndex);
225
- });
226
- // --- Initial render ---
227
- // Show only the first tab's container
228
- for (let i = 0; i < tabs.length; i++) {
229
- if (i === 0) {
230
- tabs[i].container.show();
231
- }
232
- else {
233
- tabs[i].container.hide();
234
- }
235
- }
236
- renderTabBar();
237
- updateHeader();
238
- tabs[activeTabIndex].activate(ctx);
239
- screen.render();
240
- });
241
- }
242
- //# sourceMappingURL=dashboard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,wEAAwE;AACxE,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,aAAa,GACd,MAAM,2BAA2B,CAAC;AAMnC;;GAEG;AACH,SAAS,WAAW,CAClB,MAA8B,EAC9B,IAAY,EACZ,IAAkC,EAClC,aAAqB,IAAI;IAEzB,MAAM,MAAM,GAA2B,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACxF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;QACzB,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,WAAW,IAAI,WAAW;QACnC,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACxB,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE;KAClE,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,MAAM,CAAC,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC,EAAE,UAAU,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,sBAAsB,EAAE,6BAA6B,EAAE,IAAI,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;QAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,wBAAwB;QACxB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC5B,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAEH,iBAAiB;QACjB,0BAA0B;QAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;YAC5B,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,wCAAwC;YACjD,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;SAClC,CAAC,CAAC;QAEH,2BAA2B;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;YACzB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE;YACnC,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;QAEH,4BAA4B;QAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;YAC9B,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QAEH,qBAAqB;QACrB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;YAC5B,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE;SACnC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEzB,sBAAsB;QACtB,MAAM,IAAI,GAAW;YACnB,eAAe,EAAE;YACjB,eAAe,EAAE;YACjB,kBAAkB,EAAE;YACpB,gBAAgB,EAAE;YAClB,aAAa,EAAE;SAChB,CAAC;QAEF,4CAA4C;QAC5C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QAED,gBAAgB;QAChB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,QAAQ,GAAG,MAAM,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE7D,sBAAsB;QACtB,MAAM,GAAG,GAAgB;YACvB,MAAM;YACN,UAAU;YACV,MAAM;YACN,QAAQ;YACR,YAAY,EAAE,GAAG,EAAE;gBACjB,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;gBAChC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;gBACpB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,eAAe,EAAE,KAAK,IAAI,EAAE;gBAC1B,QAAQ,GAAG,MAAM,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBACzD,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACxB,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE;gBAC1B,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YACD,WAAW,EAAE,CAAC,IAAY,EAAE,IAAkC,EAAE,UAAmB,EAAE,EAAE;gBACrF,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YAC9C,CAAC;YACD,UAAU,EAAE,CAAC,OAAgB,EAAE,EAAE;gBAC/B,SAAS,GAAG,OAAO,CAAC;YACtB,CAAC;SACF,CAAC;QAEF,4BAA4B;QAC5B,SAAS,YAAY;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBAClC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;gBACpB,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;oBAC3B,OAAO,wBAAwB,GAAG,IAAI,GAAG,CAAC,IAAI,yBAAyB,CAAC;gBAC1E,CAAC;gBACD,OAAO,aAAa,GAAG,IAAI,GAAG,CAAC,IAAI,aAAa,CAAC;YACnD,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;QAED,wBAAwB;QACxB,SAAS,SAAS,CAAC,QAAgB;YACjC,IAAI,QAAQ,KAAK,cAAc;gBAAE,OAAO;YACxC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpD,IAAI,SAAS;gBAAE,OAAO,CAAC,6BAA6B;YAEpD,yBAAyB;YACzB,IAAI,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAEtC,mBAAmB;YACnB,cAAc,GAAG,QAAQ,CAAC;YAC1B,IAAI,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACtC,YAAY,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QAED,iBAAiB;QACjB,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAC7D,IAAI,SAAS,GAAG,eAAe,CAAC;QAEhC,SAAS,YAAY;YACnB,SAAS,CAAC,UAAU,CAClB,wBAAwB,QAAQ,CAAC,WAAW,gBAAgB,MAAM,CAAC,QAAQ,YAAY,QAAQ,CAAC,SAAS,CAAC,kBAAkB,EAAE,YAAY,SAAS,YAAY,CAChK,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,KAAK,UAAU,WAAW;YACxB,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;YAChC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;YACpB,QAAQ,GAAG,MAAM,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACzD,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACxB,SAAS,GAAG,eAAe,CAAC;YAC5B,YAAY,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QAED,gBAAgB;QAChB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;gBACnB,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;oBACvB,wCAAwC;gBAC1C,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,mCAAmC;QACnC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE;YAC/B,IAAI,SAAS;gBAAE,OAAO;YACtB,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,CAAC;YACD,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE;YACrB,IAAI,SAAS;gBAAE,OAAO;YACtB,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;gBACvB,wCAAwC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,gCAAgC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE;gBAC/B,IAAI,SAAS;oBAAE,OAAO;gBACtB,SAAS,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,sEAAsE;QACtE,+BAA+B;QAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE;YACzB,IAAI,SAAS;gBAAE,OAAO;YACtB,MAAM,QAAQ,GAAG,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAClE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,yBAAyB;QACzB,sCAAsC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACZ,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Doctor command for Night Watch CLI
3
- * Validates environment setup and system health
4
- */
5
- import { Command } from 'commander';
6
- import { IWebhookConfig } from '@night-watch/core';
7
- /**
8
- * Validate a single webhook configuration and return a list of issues.
9
- * Returns an empty array if the webhook is valid.
10
- */
11
- export declare function validateWebhook(webhook: IWebhookConfig): string[];
12
- /**
13
- * Register the doctor command on the program
14
- */
15
- export declare function doctorCommand(program: Command): void;
16
- //# sourceMappingURL=doctor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAEL,cAAc,EAiBf,MAAM,mBAAmB,CAAC;AAG3B;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,EAAE,CAqDjE;AAiDD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyHpD"}
@@ -1,195 +0,0 @@
1
- /**
2
- * Doctor command for Night Watch CLI
3
- * Validates environment setup and system health
4
- */
5
- import { BUILT_IN_PRESETS, checkConfigFile, checkCrontabAccess, checkGhCli, checkGitRepo, checkLogsDirectory, checkNodeVersion, checkProviderCli, header, info, label, loadConfig, step, success, error as uiError, warn, } from '@night-watch/core';
6
- /**
7
- * Validate a single webhook configuration and return a list of issues.
8
- * Returns an empty array if the webhook is valid.
9
- */
10
- export function validateWebhook(webhook) {
11
- const issues = [];
12
- // Validate events
13
- if (!webhook.events || webhook.events.length === 0) {
14
- issues.push('No events configured');
15
- }
16
- else {
17
- const validEvents = [
18
- 'run_started',
19
- 'run_succeeded',
20
- 'run_failed',
21
- 'run_timeout',
22
- 'review_completed',
23
- 'pr_auto_merged',
24
- 'rate_limit_fallback',
25
- 'qa_completed',
26
- ];
27
- for (const event of webhook.events) {
28
- if (!validEvents.includes(event)) {
29
- issues.push(`Invalid event: ${event}`);
30
- }
31
- }
32
- }
33
- // Platform-specific validation
34
- switch (webhook.type) {
35
- case 'slack':
36
- if (!webhook.url) {
37
- issues.push('Missing URL');
38
- }
39
- else if (!webhook.url.startsWith('https://hooks.slack.com/')) {
40
- issues.push('URL should start with https://hooks.slack.com/');
41
- }
42
- break;
43
- case 'discord':
44
- if (!webhook.url) {
45
- issues.push('Missing URL');
46
- }
47
- else if (!webhook.url.startsWith('https://discord.com/api/webhooks/')) {
48
- issues.push('URL should start with https://discord.com/api/webhooks/');
49
- }
50
- break;
51
- case 'telegram':
52
- if (!webhook.botToken) {
53
- issues.push('Missing botToken');
54
- }
55
- if (!webhook.chatId) {
56
- issues.push('Missing chatId');
57
- }
58
- break;
59
- default:
60
- issues.push(`Unknown webhook type: ${webhook.type}`);
61
- }
62
- return issues;
63
- }
64
- /**
65
- * Run a single check and print the result
66
- */
67
- function runCheck(checkNum, total, checkName, checkFn, options) {
68
- step(checkNum, total, `Checking ${checkName}...`);
69
- const result = checkFn();
70
- if (result.passed) {
71
- success(result.message);
72
- return { passed: true, fixed: false };
73
- }
74
- // Check failed
75
- if (options.fix && result.fixable && result.fix) {
76
- result.fix();
77
- // Re-run check after fix
78
- const recheckResult = checkFn();
79
- if (recheckResult.passed) {
80
- success(`Fixed: ${checkName}`);
81
- return { passed: true, fixed: true };
82
- }
83
- else {
84
- uiError(`Failed to fix: ${checkName}`);
85
- return { passed: false, fixed: false };
86
- }
87
- }
88
- if (result.fixable) {
89
- warn(`${result.message} (run with --fix to auto-fix)`);
90
- }
91
- else {
92
- uiError(result.message);
93
- }
94
- return { passed: false, fixed: false };
95
- }
96
- /**
97
- * Register the doctor command on the program
98
- */
99
- export function doctorCommand(program) {
100
- program
101
- .command('doctor')
102
- .description('Check Night Watch configuration and system health')
103
- .option('--fix', 'Automatically fix fixable issues')
104
- .action(async (options) => {
105
- const projectDir = process.cwd();
106
- const config = loadConfig(projectDir);
107
- const totalChecks = 7;
108
- let checkNum = 1;
109
- let passedChecks = 0;
110
- let fixedChecks = 0;
111
- header('Night Watch Doctor');
112
- // Check 1: Node.js version
113
- const nodeResult = runCheck(checkNum++, totalChecks, 'Node.js version', () => checkNodeVersion(18), options);
114
- if (nodeResult.passed)
115
- passedChecks++;
116
- if (nodeResult.fixed)
117
- fixedChecks++;
118
- // Check 2: Git repository
119
- const gitResult = runCheck(checkNum++, totalChecks, 'git repository', () => checkGitRepo(projectDir), options);
120
- if (gitResult.passed)
121
- passedChecks++;
122
- if (gitResult.fixed)
123
- fixedChecks++;
124
- // Check 3: GitHub CLI
125
- const ghResult = runCheck(checkNum++, totalChecks, 'GitHub CLI', () => checkGhCli(), options);
126
- if (ghResult.passed)
127
- passedChecks++;
128
- if (ghResult.fixed)
129
- fixedChecks++;
130
- // Check 4: Provider CLI — resolve the actual CLI command for preset providers
131
- // (e.g. glm-5 and glm-47 use the 'claude' binary with env vars)
132
- const resolvedProviderCli = BUILT_IN_PRESETS[config.provider]?.command ?? config.provider;
133
- const providerResult = runCheck(checkNum++, totalChecks, 'provider CLI', () => checkProviderCli(resolvedProviderCli), options);
134
- if (providerResult.passed)
135
- passedChecks++;
136
- if (providerResult.fixed)
137
- fixedChecks++;
138
- // Check 5: Config file
139
- const configResult = runCheck(checkNum++, totalChecks, 'config file', () => checkConfigFile(projectDir), options);
140
- if (configResult.passed)
141
- passedChecks++;
142
- if (configResult.fixed)
143
- fixedChecks++;
144
- // Check 6: Logs directory
145
- const logsResult = runCheck(checkNum++, totalChecks, 'logs directory', () => checkLogsDirectory(projectDir), options);
146
- if (logsResult.passed)
147
- passedChecks++;
148
- if (logsResult.fixed)
149
- fixedChecks++;
150
- // Check 7: Webhook configuration
151
- step(checkNum, totalChecks, 'Checking webhook configuration...');
152
- if (!config.notifications || config.notifications.webhooks.length === 0) {
153
- info('No webhooks configured (optional)');
154
- passedChecks++;
155
- }
156
- else {
157
- let webhookErrors = 0;
158
- for (const webhook of config.notifications.webhooks) {
159
- const issues = validateWebhook(webhook);
160
- if (issues.length === 0) {
161
- success(`${webhook.type} webhook: OK`);
162
- }
163
- else {
164
- for (const issue of issues) {
165
- warn(`${webhook.type} webhook: ${issue}`);
166
- }
167
- webhookErrors++;
168
- }
169
- }
170
- if (webhookErrors === 0) {
171
- success(`All ${config.notifications.webhooks.length} webhook(s) valid`);
172
- passedChecks++;
173
- }
174
- }
175
- // Check crontab access (non-blocking, informational only)
176
- const crontabResult = checkCrontabAccess();
177
- info(crontabResult.message);
178
- // Summary
179
- console.log();
180
- header('Summary');
181
- label('Checks passed', `${passedChecks}/${totalChecks}`);
182
- if (fixedChecks > 0) {
183
- label('Issues fixed', `${fixedChecks}`);
184
- }
185
- console.log();
186
- if (passedChecks === totalChecks) {
187
- success('All checks passed');
188
- }
189
- else {
190
- uiError('Issues found — fix errors above before running Night Watch');
191
- process.exit(1);
192
- }
193
- });
194
- }
195
- //# sourceMappingURL=doctor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * History command — CLI interface to the execution history ledger.
3
- * Designed for bash script integration (silent stdout, exit-code signaling).
4
- */
5
- import { Command } from 'commander';
6
- export declare function historyCommand(program: Command): void;
7
- //# sourceMappingURL=history.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuDrD"}
@@ -1,49 +0,0 @@
1
- /**
2
- * History command — CLI interface to the execution history ledger.
3
- * Designed for bash script integration (silent stdout, exit-code signaling).
4
- */
5
- import { isInCooldown, recordExecution } from '@night-watch/core';
6
- const VALID_OUTCOMES = ['success', 'failure', 'timeout', 'rate_limited'];
7
- export function historyCommand(program) {
8
- const history = program.command('history').description('Manage PRD execution history ledger');
9
- history
10
- .command('record <projectDir> <prdFile> <outcome>')
11
- .description('Record a PRD execution result')
12
- .option('--exit-code <n>', 'Process exit code', '0')
13
- .option('--attempt <n>', 'Attempt number', '1')
14
- .action((projectDir, prdFile, outcome, options) => {
15
- if (!VALID_OUTCOMES.includes(outcome)) {
16
- process.stderr.write(`Invalid outcome: ${outcome}. Must be one of: ${VALID_OUTCOMES.join(', ')}\n`);
17
- process.exit(2);
18
- }
19
- const exitCode = parseInt(options.exitCode, 10);
20
- const attempt = parseInt(options.attempt, 10);
21
- if (isNaN(exitCode)) {
22
- process.stderr.write(`Invalid exit code: ${options.exitCode}\n`);
23
- process.exit(2);
24
- }
25
- if (isNaN(attempt) || attempt < 1) {
26
- process.stderr.write(`Invalid attempt: ${options.attempt}\n`);
27
- process.exit(2);
28
- }
29
- recordExecution(projectDir, prdFile, outcome, exitCode, attempt);
30
- });
31
- history
32
- .command('check <projectDir> <prdFile>')
33
- .description('Check if a PRD is in cooldown (exit 0 = in cooldown, exit 1 = eligible)')
34
- .option('--cooldown <seconds>', 'Cooldown period in seconds', '7200')
35
- .action((projectDir, prdFile, options) => {
36
- const cooldownPeriod = parseInt(options.cooldown, 10);
37
- if (isNaN(cooldownPeriod) || cooldownPeriod < 0) {
38
- process.stderr.write(`Invalid cooldown period: ${options.cooldown}\n`);
39
- process.exit(2);
40
- }
41
- if (isInCooldown(projectDir, prdFile, cooldownPeriod)) {
42
- process.exit(0); // in cooldown — caller should skip
43
- }
44
- else {
45
- process.exit(1); // eligible — caller should proceed
46
- }
47
- });
48
- }
49
- //# sourceMappingURL=history.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGlE,MAAM,cAAc,GAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AAE7F,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,qCAAqC,CAAC,CAAC;IAE9F,OAAO;SACJ,OAAO,CAAC,yCAAyC,CAAC;SAClD,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,CAAC;SACnD,MAAM,CAAC,eAAe,EAAE,gBAAgB,EAAE,GAAG,CAAC;SAC9C,MAAM,CACL,CACE,UAAkB,EAClB,OAAe,EACf,OAAe,EACf,OAA8C,EAC9C,EAAE;QACF,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAA2B,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oBAAoB,OAAO,qBAAqB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAC9E,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAE9C,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,OAA2B,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvF,CAAC,CACF,CAAC;IAEJ,OAAO;SACJ,OAAO,CAAC,8BAA8B,CAAC;SACvC,WAAW,CAAC,yEAAyE,CAAC;SACtF,MAAM,CAAC,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,CAAC;SACpE,MAAM,CAAC,CAAC,UAAkB,EAAE,OAAe,EAAE,OAA6B,EAAE,EAAE;QAC7E,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAmC;QACtD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAmC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,45 +0,0 @@
1
- #!/usr/bin/env node
2
- import { Command } from 'commander';
3
- import { INightWatchConfig, Provider } from '@night-watch/core';
4
- interface IGeneratedInitConfig extends Omit<INightWatchConfig, '_cliProviderOverride'> {
5
- $schema: string;
6
- projectName: string;
7
- providerLabel: string;
8
- }
9
- interface IGitHubRemoteStatus {
10
- hasGitHubRemote: boolean;
11
- remoteUrl: string | null;
12
- }
13
- export declare function isInteractiveInitSession(): boolean;
14
- export declare function chooseProviderForNonInteractive(providers: Provider[]): Provider;
15
- export declare function getGitHubRemoteStatus(cwd: string): IGitHubRemoteStatus;
16
- /**
17
- * Get the default branch name for the repository
18
- */
19
- export declare function getDefaultBranch(cwd: string): string;
20
- export declare function buildInitConfig(params: {
21
- projectName: string;
22
- defaultBranch: string;
23
- provider: Provider;
24
- reviewerEnabled: boolean;
25
- prdDir: string;
26
- }): IGeneratedInitConfig;
27
- /**
28
- * Result of template path resolution
29
- */
30
- interface ITemplateResolution {
31
- path: string;
32
- source: 'custom' | 'bundled';
33
- }
34
- /**
35
- * Resolve a template path with per-file fallback.
36
- * If customTemplatesDir is non-null and the file exists there, return custom path.
37
- * Otherwise return the bundled template path.
38
- */
39
- export declare function resolveTemplatePath(templateName: string, customTemplatesDir: string | null, bundledTemplatesDir: string): ITemplateResolution;
40
- /**
41
- * Main init command implementation
42
- */
43
- export declare function initCommand(program: Command): void;
44
- export default initCommand;
45
- //# sourceMappingURL=init.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,EAIL,iBAAiB,EAEjB,QAAQ,EAkBT,MAAM,mBAAmB,CAAC;AA6C3B,UAAU,oBAAqB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;IACpF,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,mBAAmB;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAiFD,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAK/E;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAkBtE;AAuBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiEpD;AAsCD,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,oBAAoB,CAsDvB;AAED;;GAEG;AACH,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,MAAM,GAAG,IAAI,EACjC,mBAAmB,EAAE,MAAM,GAC1B,mBAAmB,CAQrB;AAqJD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoblD;AAED,eAAe,WAAW,CAAC"}