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

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 (168) hide show
  1. package/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +957 -1906
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/analytics.d.ts +14 -0
  6. package/dist/commands/analytics.d.ts.map +1 -0
  7. package/dist/commands/analytics.js +69 -0
  8. package/dist/commands/analytics.js.map +1 -0
  9. package/dist/commands/audit.d.ts +19 -0
  10. package/dist/commands/audit.d.ts.map +1 -0
  11. package/dist/commands/audit.js +144 -0
  12. package/dist/commands/audit.js.map +1 -0
  13. package/dist/commands/board.d.ts +9 -0
  14. package/dist/commands/board.d.ts.map +1 -0
  15. package/dist/commands/board.js +702 -0
  16. package/dist/commands/board.js.map +1 -0
  17. package/dist/commands/cancel.d.ts +46 -0
  18. package/dist/commands/cancel.d.ts.map +1 -0
  19. package/dist/commands/cancel.js +239 -0
  20. package/dist/commands/cancel.js.map +1 -0
  21. package/dist/commands/cron.d.ts +8 -0
  22. package/dist/commands/cron.d.ts.map +1 -0
  23. package/dist/commands/cron.js +134 -0
  24. package/dist/commands/cron.js.map +1 -0
  25. package/dist/commands/dashboard/tab-actions.d.ts +10 -0
  26. package/dist/commands/dashboard/tab-actions.d.ts.map +1 -0
  27. package/dist/commands/dashboard/tab-actions.js +247 -0
  28. package/dist/commands/dashboard/tab-actions.js.map +1 -0
  29. package/dist/commands/dashboard/tab-config.d.ts +21 -0
  30. package/dist/commands/dashboard/tab-config.d.ts.map +1 -0
  31. package/dist/commands/dashboard/tab-config.js +873 -0
  32. package/dist/commands/dashboard/tab-config.js.map +1 -0
  33. package/dist/commands/dashboard/tab-logs.d.ts +10 -0
  34. package/dist/commands/dashboard/tab-logs.d.ts.map +1 -0
  35. package/dist/commands/dashboard/tab-logs.js +202 -0
  36. package/dist/commands/dashboard/tab-logs.js.map +1 -0
  37. package/dist/commands/dashboard/tab-schedules.d.ts +21 -0
  38. package/dist/commands/dashboard/tab-schedules.d.ts.map +1 -0
  39. package/dist/commands/dashboard/tab-schedules.js +320 -0
  40. package/dist/commands/dashboard/tab-schedules.js.map +1 -0
  41. package/dist/commands/dashboard/tab-status.d.ts +32 -0
  42. package/dist/commands/dashboard/tab-status.d.ts.map +1 -0
  43. package/dist/commands/dashboard/tab-status.js +424 -0
  44. package/dist/commands/dashboard/tab-status.js.map +1 -0
  45. package/dist/commands/dashboard/types.d.ts +42 -0
  46. package/dist/commands/dashboard/types.d.ts.map +1 -0
  47. package/dist/commands/dashboard/types.js +5 -0
  48. package/dist/commands/dashboard/types.js.map +1 -0
  49. package/dist/commands/dashboard.d.ts +11 -0
  50. package/dist/commands/dashboard.d.ts.map +1 -0
  51. package/dist/commands/dashboard.js +242 -0
  52. package/dist/commands/dashboard.js.map +1 -0
  53. package/dist/commands/doctor.d.ts +16 -0
  54. package/dist/commands/doctor.d.ts.map +1 -0
  55. package/dist/commands/doctor.js +195 -0
  56. package/dist/commands/doctor.js.map +1 -0
  57. package/dist/commands/history.d.ts +7 -0
  58. package/dist/commands/history.d.ts.map +1 -0
  59. package/dist/commands/history.js +49 -0
  60. package/dist/commands/history.js.map +1 -0
  61. package/dist/commands/init.d.ts +45 -0
  62. package/dist/commands/init.d.ts.map +1 -0
  63. package/dist/commands/init.js +777 -0
  64. package/dist/commands/init.js.map +1 -0
  65. package/dist/commands/install.d.ts +65 -0
  66. package/dist/commands/install.d.ts.map +1 -0
  67. package/dist/commands/install.js +405 -0
  68. package/dist/commands/install.js.map +1 -0
  69. package/dist/commands/logs.d.ts +15 -0
  70. package/dist/commands/logs.d.ts.map +1 -0
  71. package/dist/commands/logs.js +155 -0
  72. package/dist/commands/logs.js.map +1 -0
  73. package/dist/commands/merge.d.ts +26 -0
  74. package/dist/commands/merge.d.ts.map +1 -0
  75. package/dist/commands/merge.js +159 -0
  76. package/dist/commands/merge.js.map +1 -0
  77. package/dist/commands/notify.d.ts +7 -0
  78. package/dist/commands/notify.d.ts.map +1 -0
  79. package/dist/commands/notify.js +43 -0
  80. package/dist/commands/notify.js.map +1 -0
  81. package/dist/commands/plan.d.ts +19 -0
  82. package/dist/commands/plan.d.ts.map +1 -0
  83. package/dist/commands/plan.js +88 -0
  84. package/dist/commands/plan.js.map +1 -0
  85. package/dist/commands/prd-state.d.ts +12 -0
  86. package/dist/commands/prd-state.d.ts.map +1 -0
  87. package/dist/commands/prd-state.js +47 -0
  88. package/dist/commands/prd-state.js.map +1 -0
  89. package/dist/commands/prd.d.ts +18 -0
  90. package/dist/commands/prd.d.ts.map +1 -0
  91. package/dist/commands/prd.js +363 -0
  92. package/dist/commands/prd.js.map +1 -0
  93. package/dist/commands/prds.d.ts +13 -0
  94. package/dist/commands/prds.d.ts.map +1 -0
  95. package/dist/commands/prds.js +194 -0
  96. package/dist/commands/prds.js.map +1 -0
  97. package/dist/commands/prs.d.ts +14 -0
  98. package/dist/commands/prs.d.ts.map +1 -0
  99. package/dist/commands/prs.js +104 -0
  100. package/dist/commands/prs.js.map +1 -0
  101. package/dist/commands/qa.d.ts +34 -0
  102. package/dist/commands/qa.d.ts.map +1 -0
  103. package/dist/commands/qa.js +214 -0
  104. package/dist/commands/qa.js.map +1 -0
  105. package/dist/commands/queue.d.ts +8 -0
  106. package/dist/commands/queue.d.ts.map +1 -0
  107. package/dist/commands/queue.js +378 -0
  108. package/dist/commands/queue.js.map +1 -0
  109. package/dist/commands/resolve.d.ts +26 -0
  110. package/dist/commands/resolve.d.ts.map +1 -0
  111. package/dist/commands/resolve.js +186 -0
  112. package/dist/commands/resolve.js.map +1 -0
  113. package/dist/commands/retry.d.ts +9 -0
  114. package/dist/commands/retry.d.ts.map +1 -0
  115. package/dist/commands/retry.js +71 -0
  116. package/dist/commands/retry.js.map +1 -0
  117. package/dist/commands/review.d.ts +82 -0
  118. package/dist/commands/review.d.ts.map +1 -0
  119. package/dist/commands/review.js +479 -0
  120. package/dist/commands/review.js.map +1 -0
  121. package/dist/commands/run.d.ts +73 -0
  122. package/dist/commands/run.d.ts.map +1 -0
  123. package/dist/commands/run.js +509 -0
  124. package/dist/commands/run.js.map +1 -0
  125. package/dist/commands/serve.d.ts +19 -0
  126. package/dist/commands/serve.d.ts.map +1 -0
  127. package/dist/commands/serve.js +142 -0
  128. package/dist/commands/serve.js.map +1 -0
  129. package/dist/commands/shared/env-builder.d.ts +49 -0
  130. package/dist/commands/shared/env-builder.d.ts.map +1 -0
  131. package/dist/commands/shared/env-builder.js +150 -0
  132. package/dist/commands/shared/env-builder.js.map +1 -0
  133. package/dist/commands/slice.d.ts +35 -0
  134. package/dist/commands/slice.d.ts.map +1 -0
  135. package/dist/commands/slice.js +316 -0
  136. package/dist/commands/slice.js.map +1 -0
  137. package/dist/commands/state.d.ts +8 -0
  138. package/dist/commands/state.d.ts.map +1 -0
  139. package/dist/commands/state.js +54 -0
  140. package/dist/commands/state.js.map +1 -0
  141. package/dist/commands/status.d.ts +14 -0
  142. package/dist/commands/status.d.ts.map +1 -0
  143. package/dist/commands/status.js +297 -0
  144. package/dist/commands/status.js.map +1 -0
  145. package/dist/commands/summary.d.ts +14 -0
  146. package/dist/commands/summary.d.ts.map +1 -0
  147. package/dist/commands/summary.js +193 -0
  148. package/dist/commands/summary.js.map +1 -0
  149. package/dist/commands/uninstall.d.ts +25 -0
  150. package/dist/commands/uninstall.d.ts.map +1 -0
  151. package/dist/commands/uninstall.js +134 -0
  152. package/dist/commands/uninstall.js.map +1 -0
  153. package/dist/commands/update.d.ts +22 -0
  154. package/dist/commands/update.d.ts.map +1 -0
  155. package/dist/commands/update.js +90 -0
  156. package/dist/commands/update.js.map +1 -0
  157. package/dist/scripts/night-watch-cron.sh +1 -3
  158. package/dist/scripts/night-watch-helpers.sh +52 -7
  159. package/dist/scripts/night-watch-merger-cron.sh +1 -1
  160. package/dist/scripts/night-watch-plan-cron.sh +1 -1
  161. package/dist/scripts/night-watch-slicer-cron.sh +1 -1
  162. package/dist/web/assets/index-CgXj_KM1.css +1 -0
  163. package/dist/web/assets/index-Dr4zlyJf.js +406 -0
  164. package/dist/web/index.html +2 -2
  165. package/package.json +1 -1
  166. package/dist/web/assets/index-BUgI2S1s.js +0 -406
  167. package/dist/web/assets/index-CkdLFBd7.js +0 -406
  168. package/dist/web/assets/index-RMfswANB.css +0 -1
@@ -0,0 +1,297 @@
1
+ /**
2
+ * Status command for Night Watch CLI
3
+ * Shows current status including lock files, PRDs, PRs, and logs
4
+ */
5
+ import chalk from 'chalk';
6
+ import { createTable, dim, fetchStatusSnapshot, formatInstalledStatus, formatRunningStatus, header, loadConfig, } from '@night-watch/core';
7
+ /**
8
+ * Format bytes to human-readable size
9
+ */
10
+ function formatBytes(bytes) {
11
+ if (bytes === 0)
12
+ return '0 B';
13
+ const k = 1024;
14
+ const sizes = ['B', 'KB', 'MB', 'GB'];
15
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
16
+ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;
17
+ }
18
+ /**
19
+ * Status command implementation
20
+ */
21
+ export function statusCommand(program) {
22
+ program
23
+ .command('status')
24
+ .description('Show current night-watch status')
25
+ .option('-v, --verbose', 'Show detailed status information')
26
+ .option('--json', 'Output status as JSON')
27
+ .action(async (options) => {
28
+ try {
29
+ const projectDir = process.cwd();
30
+ const config = loadConfig(projectDir);
31
+ const snapshot = await fetchStatusSnapshot(projectDir, config);
32
+ // Derive legacy status shape from snapshot for backward-compatible JSON output
33
+ const executorProc = snapshot.processes.find((p) => p.name === 'executor');
34
+ const reviewerProc = snapshot.processes.find((p) => p.name === 'reviewer');
35
+ const qaProc = snapshot.processes.find((p) => p.name === 'qa');
36
+ const auditProc = snapshot.processes.find((p) => p.name === 'audit');
37
+ const plannerProc = snapshot.processes.find((p) => p.name === 'planner');
38
+ const analyticsProc = snapshot.processes.find((p) => p.name === 'analytics');
39
+ const mergerProc = snapshot.processes.find((p) => p.name === 'merger');
40
+ const executorLog = snapshot.logs.find((l) => l.name === 'executor');
41
+ const reviewerLog = snapshot.logs.find((l) => l.name === 'reviewer');
42
+ const qaLog = snapshot.logs.find((l) => l.name === 'qa');
43
+ const auditLog = snapshot.logs.find((l) => l.name === 'audit');
44
+ const plannerLog = snapshot.logs.find((l) => l.name === 'planner');
45
+ const analyticsLog = snapshot.logs.find((l) => l.name === 'analytics');
46
+ const mergerLog = snapshot.logs.find((l) => l.name === 'merger');
47
+ const pendingPrds = snapshot.prds.filter((p) => p.status === 'ready' || p.status === 'blocked').length;
48
+ const claimedPrds = snapshot.prds.filter((p) => p.status === 'in-progress').length;
49
+ const donePrds = snapshot.prds.filter((p) => p.status === 'done').length;
50
+ const status = {
51
+ projectName: snapshot.projectName,
52
+ projectDir: snapshot.projectDir,
53
+ provider: config.provider,
54
+ reviewerEnabled: config.reviewerEnabled,
55
+ autoMerge: config.autoMerge,
56
+ autoMergeMethod: config.autoMergeMethod,
57
+ executor: { running: executorProc?.running ?? false, pid: executorProc?.pid ?? null },
58
+ reviewer: { running: reviewerProc?.running ?? false, pid: reviewerProc?.pid ?? null },
59
+ qa: { running: qaProc?.running ?? false, pid: qaProc?.pid ?? null },
60
+ audit: { running: auditProc?.running ?? false, pid: auditProc?.pid ?? null },
61
+ planner: { running: plannerProc?.running ?? false, pid: plannerProc?.pid ?? null },
62
+ analytics: { running: analyticsProc?.running ?? false, pid: analyticsProc?.pid ?? null },
63
+ merger: { running: mergerProc?.running ?? false, pid: mergerProc?.pid ?? null },
64
+ prds: { pending: pendingPrds, claimed: claimedPrds, done: donePrds },
65
+ prs: { open: snapshot.prs.length },
66
+ crontab: snapshot.crontab,
67
+ logs: {
68
+ executor: executorLog
69
+ ? {
70
+ path: executorLog.path,
71
+ lastLines: executorLog.lastLines,
72
+ exists: executorLog.exists,
73
+ size: executorLog.size,
74
+ }
75
+ : undefined,
76
+ reviewer: reviewerLog
77
+ ? {
78
+ path: reviewerLog.path,
79
+ lastLines: reviewerLog.lastLines,
80
+ exists: reviewerLog.exists,
81
+ size: reviewerLog.size,
82
+ }
83
+ : undefined,
84
+ qa: qaLog
85
+ ? {
86
+ path: qaLog.path,
87
+ lastLines: qaLog.lastLines,
88
+ exists: qaLog.exists,
89
+ size: qaLog.size,
90
+ }
91
+ : undefined,
92
+ audit: auditLog
93
+ ? {
94
+ path: auditLog.path,
95
+ lastLines: auditLog.lastLines,
96
+ exists: auditLog.exists,
97
+ size: auditLog.size,
98
+ }
99
+ : undefined,
100
+ planner: plannerLog
101
+ ? {
102
+ path: plannerLog.path,
103
+ lastLines: plannerLog.lastLines,
104
+ exists: plannerLog.exists,
105
+ size: plannerLog.size,
106
+ }
107
+ : undefined,
108
+ analytics: analyticsLog
109
+ ? {
110
+ path: analyticsLog.path,
111
+ lastLines: analyticsLog.lastLines,
112
+ exists: analyticsLog.exists,
113
+ size: analyticsLog.size,
114
+ }
115
+ : undefined,
116
+ merger: mergerLog
117
+ ? {
118
+ path: mergerLog.path,
119
+ lastLines: mergerLog.lastLines,
120
+ exists: mergerLog.exists,
121
+ size: mergerLog.size,
122
+ }
123
+ : undefined,
124
+ },
125
+ };
126
+ // Output as JSON if requested
127
+ if (options.json) {
128
+ console.log(JSON.stringify(status, null, 2));
129
+ return;
130
+ }
131
+ // Print formatted status dashboard
132
+ console.log();
133
+ console.log(chalk.bold.cyan(`Night Watch Status: ${status.projectName}`));
134
+ console.log(chalk.dim('─'.repeat(40)));
135
+ console.log();
136
+ dim(`Project Directory: ${status.projectDir}`);
137
+ // Configuration section with table
138
+ header('Configuration');
139
+ const configTable = createTable({ head: ['Setting', 'Value'] });
140
+ configTable.push(['Provider', status.provider]);
141
+ configTable.push(['Reviewer', status.reviewerEnabled ? 'Enabled' : 'Disabled']);
142
+ configTable.push([
143
+ 'Auto-merge',
144
+ status.autoMerge ? `Enabled (${status.autoMergeMethod})` : 'Disabled',
145
+ ]);
146
+ console.log(configTable.toString());
147
+ // Process status section with colored indicators
148
+ header('Process Status');
149
+ const processTable = createTable({ head: ['Process', 'Status'] });
150
+ processTable.push([
151
+ 'Executor',
152
+ formatRunningStatus(status.executor.running, status.executor.pid),
153
+ ]);
154
+ processTable.push([
155
+ 'Reviewer',
156
+ formatRunningStatus(status.reviewer.running, status.reviewer.pid),
157
+ ]);
158
+ processTable.push(['QA', formatRunningStatus(status.qa.running, status.qa.pid)]);
159
+ processTable.push(['Audit', formatRunningStatus(status.audit.running, status.audit.pid)]);
160
+ processTable.push([
161
+ 'Planner',
162
+ formatRunningStatus(status.planner.running, status.planner.pid),
163
+ ]);
164
+ processTable.push([
165
+ 'Analytics',
166
+ formatRunningStatus(status.analytics.running, status.analytics.pid),
167
+ ]);
168
+ processTable.push([
169
+ 'Merger',
170
+ formatRunningStatus(status.merger.running, status.merger.pid),
171
+ ]);
172
+ console.log(processTable.toString());
173
+ // PRD status section with table
174
+ header('PRD Status');
175
+ const prdTable = createTable({ head: ['Status', 'Count'] });
176
+ prdTable.push(['Pending', String(status.prds.pending)]);
177
+ prdTable.push(['Claimed', String(status.prds.claimed)]);
178
+ prdTable.push(['Completed', String(status.prds.done)]);
179
+ console.log(prdTable.toString());
180
+ // PR status section with table
181
+ header('PR Status');
182
+ const prTable = createTable({ head: ['Type', 'Count'] });
183
+ prTable.push(['Open PRs (night-watch/feat branches)', String(status.prs.open)]);
184
+ console.log(prTable.toString());
185
+ // Crontab status section with colored output
186
+ header('Crontab Status');
187
+ console.log(` ${formatInstalledStatus(status.crontab.installed)}`);
188
+ if (status.crontab.installed && options.verbose) {
189
+ console.log();
190
+ dim(' Entries:');
191
+ status.crontab.entries.forEach((entry) => dim(` ${entry}`));
192
+ }
193
+ console.log();
194
+ // Log status section with table
195
+ header('Log Files');
196
+ const logTable = createTable({ head: ['Log', 'Size', 'Status'] });
197
+ if (status.logs.executor) {
198
+ logTable.push([
199
+ 'Executor',
200
+ status.logs.executor.exists ? formatBytes(status.logs.executor.size) : '-',
201
+ status.logs.executor.exists ? 'Exists' : 'Not found',
202
+ ]);
203
+ }
204
+ if (status.logs.reviewer) {
205
+ logTable.push([
206
+ 'Reviewer',
207
+ status.logs.reviewer.exists ? formatBytes(status.logs.reviewer.size) : '-',
208
+ status.logs.reviewer.exists ? 'Exists' : 'Not found',
209
+ ]);
210
+ }
211
+ if (status.logs.qa) {
212
+ logTable.push([
213
+ 'QA',
214
+ status.logs.qa.exists ? formatBytes(status.logs.qa.size) : '-',
215
+ status.logs.qa.exists ? 'Exists' : 'Not found',
216
+ ]);
217
+ }
218
+ if (status.logs.audit) {
219
+ logTable.push([
220
+ 'Audit',
221
+ status.logs.audit.exists ? formatBytes(status.logs.audit.size) : '-',
222
+ status.logs.audit.exists ? 'Exists' : 'Not found',
223
+ ]);
224
+ }
225
+ if (status.logs.planner) {
226
+ logTable.push([
227
+ 'Planner',
228
+ status.logs.planner.exists ? formatBytes(status.logs.planner.size) : '-',
229
+ status.logs.planner.exists ? 'Exists' : 'Not found',
230
+ ]);
231
+ }
232
+ if (status.logs.analytics) {
233
+ logTable.push([
234
+ 'Analytics',
235
+ status.logs.analytics.exists ? formatBytes(status.logs.analytics.size) : '-',
236
+ status.logs.analytics.exists ? 'Exists' : 'Not found',
237
+ ]);
238
+ }
239
+ if (status.logs.merger) {
240
+ logTable.push([
241
+ 'Merger',
242
+ status.logs.merger.exists ? formatBytes(status.logs.merger.size) : '-',
243
+ status.logs.merger.exists ? 'Exists' : 'Not found',
244
+ ]);
245
+ }
246
+ console.log(logTable.toString());
247
+ // Show last lines in verbose mode
248
+ if (options.verbose) {
249
+ if (status.logs.executor?.exists && status.logs.executor.lastLines.length > 0) {
250
+ dim(' Executor last 5 lines:');
251
+ status.logs.executor.lastLines.forEach((line) => dim(` ${line}`));
252
+ }
253
+ if (status.logs.reviewer?.exists && status.logs.reviewer.lastLines.length > 0) {
254
+ dim(' Reviewer last 5 lines:');
255
+ status.logs.reviewer.lastLines.forEach((line) => dim(` ${line}`));
256
+ }
257
+ if (status.logs.qa?.exists && status.logs.qa.lastLines.length > 0) {
258
+ dim(' QA last 5 lines:');
259
+ status.logs.qa.lastLines.forEach((line) => dim(` ${line}`));
260
+ }
261
+ if (status.logs.audit?.exists && status.logs.audit.lastLines.length > 0) {
262
+ dim(' Audit last 5 lines:');
263
+ status.logs.audit.lastLines.forEach((line) => dim(` ${line}`));
264
+ }
265
+ if (status.logs.planner?.exists && status.logs.planner.lastLines.length > 0) {
266
+ dim(' Planner last 5 lines:');
267
+ status.logs.planner.lastLines.forEach((line) => dim(` ${line}`));
268
+ }
269
+ if (status.logs.analytics?.exists && status.logs.analytics.lastLines.length > 0) {
270
+ dim(' Analytics last 5 lines:');
271
+ status.logs.analytics.lastLines.forEach((line) => dim(` ${line}`));
272
+ }
273
+ if (status.logs.merger?.exists && status.logs.merger.lastLines.length > 0) {
274
+ dim(' Merger last 5 lines:');
275
+ status.logs.merger.lastLines.forEach((line) => dim(` ${line}`));
276
+ }
277
+ }
278
+ // Tips section with dim styling
279
+ header('Commands');
280
+ dim(' night-watch install - Install crontab entries');
281
+ dim(' night-watch logs - View logs');
282
+ dim(' night-watch run - Run executor now');
283
+ dim(' night-watch review - Run reviewer now');
284
+ dim(' night-watch qa - Run QA now');
285
+ dim(' night-watch audit - Run audit now');
286
+ dim(' night-watch planner - Run planner now');
287
+ dim(' night-watch analytics - Run analytics now');
288
+ dim(' night-watch merge - Run merger now');
289
+ console.log();
290
+ }
291
+ catch (error) {
292
+ console.error(`Error getting status: ${error instanceof Error ? error.message : String(error)}`);
293
+ process.exit(1);
294
+ }
295
+ });
296
+ }
297
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,WAAW,EACX,GAAG,EACH,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,MAAM,EACN,UAAU,GACX,MAAM,mBAAmB,CAAC;AAoG3B;;GAEG;AACH,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,GAAG,UAAU,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC;SAC3D,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAE/D,+EAA+E;YAC/E,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YAC3E,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YAC3E,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAC/D,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YACrE,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YACzE,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;YAC7E,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YACvE,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YACrE,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YAC/D,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YACnE,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;YACvE,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YAEjE,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CACtD,CAAC,MAAM,CAAC;YACT,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,MAAM,CAAC;YACnF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;YAEzE,MAAM,MAAM,GAAgB;gBAC1B,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,QAAQ,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,IAAI,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,IAAI,IAAI,EAAE;gBACrF,QAAQ,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,IAAI,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,IAAI,IAAI,EAAE;gBACrF,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE;gBACnE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,IAAI,EAAE;gBAC5E,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,IAAI,IAAI,EAAE;gBAClF,SAAS,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,IAAI,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,IAAI,IAAI,EAAE;gBACxF,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,IAAI,IAAI,EAAE;gBAC/E,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACpE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE;gBAClC,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI,EAAE;oBACJ,QAAQ,EAAE,WAAW;wBACnB,CAAC,CAAC;4BACE,IAAI,EAAE,WAAW,CAAC,IAAI;4BACtB,SAAS,EAAE,WAAW,CAAC,SAAS;4BAChC,MAAM,EAAE,WAAW,CAAC,MAAM;4BAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;yBACvB;wBACH,CAAC,CAAC,SAAS;oBACb,QAAQ,EAAE,WAAW;wBACnB,CAAC,CAAC;4BACE,IAAI,EAAE,WAAW,CAAC,IAAI;4BACtB,SAAS,EAAE,WAAW,CAAC,SAAS;4BAChC,MAAM,EAAE,WAAW,CAAC,MAAM;4BAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;yBACvB;wBACH,CAAC,CAAC,SAAS;oBACb,EAAE,EAAE,KAAK;wBACP,CAAC,CAAC;4BACE,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,SAAS,EAAE,KAAK,CAAC,SAAS;4BAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;4BACpB,IAAI,EAAE,KAAK,CAAC,IAAI;yBACjB;wBACH,CAAC,CAAC,SAAS;oBACb,KAAK,EAAE,QAAQ;wBACb,CAAC,CAAC;4BACE,IAAI,EAAE,QAAQ,CAAC,IAAI;4BACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;4BAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM;4BACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;yBACpB;wBACH,CAAC,CAAC,SAAS;oBACb,OAAO,EAAE,UAAU;wBACjB,CAAC,CAAC;4BACE,IAAI,EAAE,UAAU,CAAC,IAAI;4BACrB,SAAS,EAAE,UAAU,CAAC,SAAS;4BAC/B,MAAM,EAAE,UAAU,CAAC,MAAM;4BACzB,IAAI,EAAE,UAAU,CAAC,IAAI;yBACtB;wBACH,CAAC,CAAC,SAAS;oBACb,SAAS,EAAE,YAAY;wBACrB,CAAC,CAAC;4BACE,IAAI,EAAE,YAAY,CAAC,IAAI;4BACvB,SAAS,EAAE,YAAY,CAAC,SAAS;4BACjC,MAAM,EAAE,YAAY,CAAC,MAAM;4BAC3B,IAAI,EAAE,YAAY,CAAC,IAAI;yBACxB;wBACH,CAAC,CAAC,SAAS;oBACb,MAAM,EAAE,SAAS;wBACf,CAAC,CAAC;4BACE,IAAI,EAAE,SAAS,CAAC,IAAI;4BACpB,SAAS,EAAE,SAAS,CAAC,SAAS;4BAC9B,MAAM,EAAE,SAAS,CAAC,MAAM;4BACxB,IAAI,EAAE,SAAS,CAAC,IAAI;yBACrB;wBACH,CAAC,CAAC,SAAS;iBACd;aACF,CAAC;YAEF,8BAA8B;YAC9B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,mCAAmC;YACnC,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,sBAAsB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAE/C,mCAAmC;YACnC,MAAM,CAAC,eAAe,CAAC,CAAC;YACxB,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAChE,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;YAChF,WAAW,CAAC,IAAI,CAAC;gBACf,YAAY;gBACZ,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,UAAU;aACtE,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEpC,iDAAiD;YACjD,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACzB,MAAM,YAAY,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YAClE,YAAY,CAAC,IAAI,CAAC;gBAChB,UAAU;gBACV,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;aAClE,CAAC,CAAC;YACH,YAAY,CAAC,IAAI,CAAC;gBAChB,UAAU;gBACV,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;aAClE,CAAC,CAAC;YACH,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjF,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1F,YAAY,CAAC,IAAI,CAAC;gBAChB,SAAS;gBACT,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;aAChE,CAAC,CAAC;YACH,YAAY,CAAC,IAAI,CAAC;gBAChB,WAAW;gBACX,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;aACpE,CAAC,CAAC;YACH,YAAY,CAAC,IAAI,CAAC;gBAChB,QAAQ;gBACR,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;aAC9D,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;YAErC,gCAAgC;YAChC,MAAM,CAAC,YAAY,CAAC,CAAC;YACrB,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5D,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACxD,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACxD,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEjC,+BAA+B;YAC/B,MAAM,CAAC,WAAW,CAAC,CAAC;YACpB,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,sCAAsC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEhC,6CAA6C;YAC7C,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACpE,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBAChD,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,YAAY,CAAC,CAAC;gBAClB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,gCAAgC;YAChC,MAAM,CAAC,WAAW,CAAC,CAAC;YACpB,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YAClE,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC;oBACZ,UAAU;oBACV,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG;oBAC1E,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;iBACrD,CAAC,CAAC;YACL,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC;oBACZ,UAAU;oBACV,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG;oBAC1E,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;iBACrD,CAAC,CAAC;YACL,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACnB,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI;oBACJ,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG;oBAC9D,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;iBAC/C,CAAC,CAAC;YACL,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtB,QAAQ,CAAC,IAAI,CAAC;oBACZ,OAAO;oBACP,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG;oBACpE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;iBAClD,CAAC,CAAC;YACL,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC;oBACZ,SAAS;oBACT,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG;oBACxE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;iBACpD,CAAC,CAAC;YACL,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC1B,QAAQ,CAAC,IAAI,CAAC;oBACZ,WAAW;oBACX,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG;oBAC5E,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;iBACtD,CAAC,CAAC;YACL,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvB,QAAQ,CAAC,IAAI,CAAC;oBACZ,QAAQ;oBACR,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG;oBACtE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;iBACnD,CAAC,CAAC;YACL,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEjC,kCAAkC;YAClC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9E,GAAG,CAAC,0BAA0B,CAAC,CAAC;oBAChC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;gBACvE,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9E,GAAG,CAAC,0BAA0B,CAAC,CAAC;oBAChC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;gBACvE,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClE,GAAG,CAAC,oBAAoB,CAAC,CAAC;oBAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;gBACjE,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxE,GAAG,CAAC,uBAAuB,CAAC,CAAC;oBAC7B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;gBACpE,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5E,GAAG,CAAC,yBAAyB,CAAC,CAAC;oBAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;gBACtE,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAChF,GAAG,CAAC,2BAA2B,CAAC,CAAC;oBACjC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;gBACxE,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1E,GAAG,CAAC,wBAAwB,CAAC,CAAC;oBAC9B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,MAAM,CAAC,UAAU,CAAC,CAAC;YACnB,GAAG,CAAC,kDAAkD,CAAC,CAAC;YACxD,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAC1C,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACjD,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACjD,GAAG,CAAC,qCAAqC,CAAC,CAAC;YAC3C,GAAG,CAAC,wCAAwC,CAAC,CAAC;YAC9C,GAAG,CAAC,0CAA0C,CAAC,CAAC;YAChD,GAAG,CAAC,6CAA6C,CAAC,CAAC;YACnD,GAAG,CAAC,0CAA0C,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Summary command for Night Watch CLI
3
+ * Shows a "morning briefing" combining job runs, PRs, and queue status
4
+ */
5
+ import { Command } from 'commander';
6
+ export interface ISummaryOptions {
7
+ hours?: string;
8
+ json?: boolean;
9
+ }
10
+ /**
11
+ * Summary command implementation
12
+ */
13
+ export declare function summaryCommand(program: Command): void;
14
+ //# sourceMappingURL=summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/commands/summary.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA2DD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyIrD"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Summary command for Night Watch CLI
3
+ * Shows a "morning briefing" combining job runs, PRs, and queue status
4
+ */
5
+ import path from 'path';
6
+ import chalk from 'chalk';
7
+ import { DEFAULT_SUMMARY_WINDOW_HOURS, createTable, dim, getSummaryData, header, info, loadConfig, } from '@night-watch/core';
8
+ /**
9
+ * Format duration from seconds to human-readable string (e.g., "8m 32s")
10
+ */
11
+ function formatDuration(seconds) {
12
+ if (seconds === null)
13
+ return '-';
14
+ const mins = Math.floor(seconds / 60);
15
+ const secs = seconds % 60;
16
+ if (mins === 0)
17
+ return `${secs}s`;
18
+ return `${mins}m ${secs}s`;
19
+ }
20
+ /**
21
+ * Format CI status with color coding
22
+ */
23
+ function formatCiStatus(status) {
24
+ if (status === 'pass')
25
+ return chalk.green('pass');
26
+ if (status === 'fail')
27
+ return chalk.red('fail');
28
+ if (status === 'pending')
29
+ return chalk.yellow('pending');
30
+ return chalk.dim('unknown');
31
+ }
32
+ /**
33
+ * Format review score with color coding
34
+ */
35
+ function formatReviewScore(score) {
36
+ if (score === null)
37
+ return chalk.dim('-');
38
+ if (score >= 80)
39
+ return chalk.green(String(score));
40
+ if (score >= 60)
41
+ return chalk.yellow(String(score));
42
+ return chalk.red(String(score));
43
+ }
44
+ /**
45
+ * Format job status with color coding
46
+ */
47
+ function formatJobStatus(status) {
48
+ if (status === 'success')
49
+ return chalk.green('success');
50
+ if (status === 'failure')
51
+ return chalk.red('failure');
52
+ if (status === 'timeout')
53
+ return chalk.yellow('timeout');
54
+ if (status === 'rate_limited')
55
+ return chalk.magenta('rate_limited');
56
+ if (status === 'skipped')
57
+ return chalk.dim('skipped');
58
+ return chalk.dim(status);
59
+ }
60
+ /**
61
+ * Extract project name from path
62
+ */
63
+ function getProjectName(projectPath) {
64
+ return path.basename(projectPath) || projectPath;
65
+ }
66
+ /**
67
+ * Format provider key for display
68
+ */
69
+ function formatProvider(providerKey) {
70
+ return providerKey.split(':')[0] || providerKey;
71
+ }
72
+ /**
73
+ * Summary command implementation
74
+ */
75
+ export function summaryCommand(program) {
76
+ program
77
+ .command('summary')
78
+ .description('Show a summary of recent Night Watch activity')
79
+ .option('--hours <n>', 'Time window in hours (default: 12)', String(DEFAULT_SUMMARY_WINDOW_HOURS))
80
+ .option('--json', 'Output summary as JSON')
81
+ .action(async (options) => {
82
+ try {
83
+ const projectDir = process.cwd();
84
+ const config = loadConfig(projectDir);
85
+ const hours = parseInt(options.hours || String(DEFAULT_SUMMARY_WINDOW_HOURS), 10);
86
+ if (isNaN(hours) || hours <= 0) {
87
+ console.error('Error: --hours must be a positive integer');
88
+ process.exit(1);
89
+ }
90
+ const data = await getSummaryData(projectDir, hours, config.branchPatterns);
91
+ // Output as JSON if requested
92
+ if (options.json) {
93
+ console.log(JSON.stringify(data, null, 2));
94
+ return;
95
+ }
96
+ // Print header
97
+ console.log();
98
+ console.log(chalk.bold.cyan(`Night Watch Summary (last ${data.windowHours}h)`));
99
+ console.log(chalk.dim('─'.repeat(40)));
100
+ console.log();
101
+ // Jobs executed section
102
+ if (data.jobRuns.length === 0) {
103
+ info('No recent activity in this time window.');
104
+ console.log();
105
+ }
106
+ else {
107
+ // Job counts with colored indicators
108
+ const countParts = [];
109
+ if (data.counts.succeeded > 0) {
110
+ countParts.push(chalk.green(`✓ ${data.counts.succeeded} succeeded`));
111
+ }
112
+ if (data.counts.failed > 0) {
113
+ countParts.push(chalk.red(`✗ ${data.counts.failed} failed`));
114
+ }
115
+ if (data.counts.timedOut > 0) {
116
+ countParts.push(chalk.yellow(`⏱ ${data.counts.timedOut} timed out`));
117
+ }
118
+ if (data.counts.rateLimited > 0) {
119
+ countParts.push(chalk.magenta(`⏳ ${data.counts.rateLimited} rate limited`));
120
+ }
121
+ if (data.counts.skipped > 0) {
122
+ countParts.push(chalk.dim(`${data.counts.skipped} skipped`));
123
+ }
124
+ console.log(`Jobs Executed: ${data.counts.total}`);
125
+ if (countParts.length > 0) {
126
+ console.log(` ${countParts.join(' ')}`);
127
+ }
128
+ console.log();
129
+ // Job runs table
130
+ const table = createTable({
131
+ head: ['Job', 'Status', 'Project', 'Provider', 'Duration'],
132
+ colWidths: [12, 12, 20, 12, 12],
133
+ });
134
+ for (const run of data.jobRuns.slice(0, 10)) {
135
+ table.push([
136
+ run.jobType,
137
+ formatJobStatus(run.status),
138
+ getProjectName(run.projectPath),
139
+ formatProvider(run.providerKey),
140
+ formatDuration(run.durationSeconds),
141
+ ]);
142
+ }
143
+ console.log(table.toString());
144
+ if (data.jobRuns.length > 10) {
145
+ dim(` ... and ${data.jobRuns.length - 10} more`);
146
+ }
147
+ console.log();
148
+ }
149
+ // Open PRs section
150
+ if (data.openPrs.length > 0) {
151
+ header(`Open PRs (${data.openPrs.length})`);
152
+ const prTable = createTable({
153
+ head: ['#', 'Title', 'CI', 'Score'],
154
+ colWidths: [6, 40, 10, 8],
155
+ });
156
+ for (const pr of data.openPrs) {
157
+ const title = pr.title.length > 37 ? pr.title.substring(0, 34) + '...' : pr.title;
158
+ prTable.push([
159
+ String(pr.number),
160
+ title,
161
+ formatCiStatus(pr.ciStatus),
162
+ formatReviewScore(pr.reviewScore),
163
+ ]);
164
+ }
165
+ console.log(prTable.toString());
166
+ console.log();
167
+ }
168
+ // Queue section
169
+ if (data.pendingQueueItems.length > 0) {
170
+ const jobTypes = [...new Set(data.pendingQueueItems.map((item) => item.jobType))];
171
+ const projectNames = [...new Set(data.pendingQueueItems.map((item) => item.projectName))];
172
+ dim(`Queue: ${data.pendingQueueItems.length} pending (${jobTypes.join(', ')}) for ${projectNames.join(', ')}`);
173
+ console.log();
174
+ }
175
+ // Action items or "all healthy" message
176
+ if (data.actionItems.length > 0) {
177
+ console.log(chalk.yellow('⚠ Action needed:'));
178
+ for (const item of data.actionItems) {
179
+ console.log(` • ${item}`);
180
+ }
181
+ }
182
+ else {
183
+ console.log(chalk.green('✓ No action needed — all jobs healthy.'));
184
+ }
185
+ console.log();
186
+ }
187
+ catch (error) {
188
+ console.error(`Error getting summary: ${error instanceof Error ? error.message : String(error)}`);
189
+ process.exit(1);
190
+ }
191
+ });
192
+ }
193
+ //# sourceMappingURL=summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/commands/summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Uninstall command for Night Watch CLI
3
+ * Removes crontab entries for the current project
4
+ */
5
+ import { Command } from 'commander';
6
+ export interface IUninstallOptions {
7
+ keepLogs?: boolean;
8
+ }
9
+ export interface IUninstallResult {
10
+ success: boolean;
11
+ removedCount: number;
12
+ error?: string;
13
+ }
14
+ /**
15
+ * Core uninstall logic, reusable from dashboard.
16
+ * Returns result without printing to console.
17
+ */
18
+ export declare function performUninstall(projectDir: string, options?: {
19
+ keepLogs?: boolean;
20
+ }): IUninstallResult;
21
+ /**
22
+ * Uninstall crontab entries for night-watch
23
+ */
24
+ export declare function uninstallCommand(program: Command): void;
25
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC/B,gBAAgB,CAoDlB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgFvD"}