@mainwp/control 1.0.0

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 (204) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +583 -0
  3. package/bin/_exit.js +12 -0
  4. package/bin/dev.js +7 -0
  5. package/bin/run.js +7 -0
  6. package/dist/chat/chat-engine.d.ts +213 -0
  7. package/dist/chat/chat-engine.d.ts.map +1 -0
  8. package/dist/chat/chat-engine.js +636 -0
  9. package/dist/chat/chat-engine.js.map +1 -0
  10. package/dist/chat/index.d.ts +10 -0
  11. package/dist/chat/index.d.ts.map +1 -0
  12. package/dist/chat/index.js +14 -0
  13. package/dist/chat/index.js.map +1 -0
  14. package/dist/chat/providers/anthropic.d.ts +52 -0
  15. package/dist/chat/providers/anthropic.d.ts.map +1 -0
  16. package/dist/chat/providers/anthropic.js +292 -0
  17. package/dist/chat/providers/anthropic.js.map +1 -0
  18. package/dist/chat/providers/gemini.d.ts +52 -0
  19. package/dist/chat/providers/gemini.d.ts.map +1 -0
  20. package/dist/chat/providers/gemini.js +284 -0
  21. package/dist/chat/providers/gemini.js.map +1 -0
  22. package/dist/chat/providers/index.d.ts +19 -0
  23. package/dist/chat/providers/index.d.ts.map +1 -0
  24. package/dist/chat/providers/index.js +23 -0
  25. package/dist/chat/providers/index.js.map +1 -0
  26. package/dist/chat/providers/local.d.ts +37 -0
  27. package/dist/chat/providers/local.d.ts.map +1 -0
  28. package/dist/chat/providers/local.js +130 -0
  29. package/dist/chat/providers/local.js.map +1 -0
  30. package/dist/chat/providers/openai-compatible.d.ts +155 -0
  31. package/dist/chat/providers/openai-compatible.d.ts.map +1 -0
  32. package/dist/chat/providers/openai-compatible.js +264 -0
  33. package/dist/chat/providers/openai-compatible.js.map +1 -0
  34. package/dist/chat/providers/openai.d.ts +24 -0
  35. package/dist/chat/providers/openai.d.ts.map +1 -0
  36. package/dist/chat/providers/openai.js +62 -0
  37. package/dist/chat/providers/openai.js.map +1 -0
  38. package/dist/chat/providers/openrouter.d.ts +26 -0
  39. package/dist/chat/providers/openrouter.d.ts.map +1 -0
  40. package/dist/chat/providers/openrouter.js +65 -0
  41. package/dist/chat/providers/openrouter.js.map +1 -0
  42. package/dist/chat/providers/provider-fetch.d.ts +15 -0
  43. package/dist/chat/providers/provider-fetch.d.ts.map +1 -0
  44. package/dist/chat/providers/provider-fetch.js +35 -0
  45. package/dist/chat/providers/provider-fetch.js.map +1 -0
  46. package/dist/chat/providers/provider.d.ts +214 -0
  47. package/dist/chat/providers/provider.d.ts.map +1 -0
  48. package/dist/chat/providers/provider.js +166 -0
  49. package/dist/chat/providers/provider.js.map +1 -0
  50. package/dist/chat/providers/sse-reader.d.ts +21 -0
  51. package/dist/chat/providers/sse-reader.d.ts.map +1 -0
  52. package/dist/chat/providers/sse-reader.js +48 -0
  53. package/dist/chat/providers/sse-reader.js.map +1 -0
  54. package/dist/chat/system-prompt.d.ts +33 -0
  55. package/dist/chat/system-prompt.d.ts.map +1 -0
  56. package/dist/chat/system-prompt.js +166 -0
  57. package/dist/chat/system-prompt.js.map +1 -0
  58. package/dist/chat/tool-envelope.d.ts +72 -0
  59. package/dist/chat/tool-envelope.d.ts.map +1 -0
  60. package/dist/chat/tool-envelope.js +263 -0
  61. package/dist/chat/tool-envelope.js.map +1 -0
  62. package/dist/commands/abilities/info.d.ts +21 -0
  63. package/dist/commands/abilities/info.d.ts.map +1 -0
  64. package/dist/commands/abilities/info.js +80 -0
  65. package/dist/commands/abilities/info.js.map +1 -0
  66. package/dist/commands/abilities/list.d.ts +19 -0
  67. package/dist/commands/abilities/list.d.ts.map +1 -0
  68. package/dist/commands/abilities/list.js +98 -0
  69. package/dist/commands/abilities/list.js.map +1 -0
  70. package/dist/commands/abilities/run.d.ts +75 -0
  71. package/dist/commands/abilities/run.d.ts.map +1 -0
  72. package/dist/commands/abilities/run.js +468 -0
  73. package/dist/commands/abilities/run.js.map +1 -0
  74. package/dist/commands/chat.d.ts +54 -0
  75. package/dist/commands/chat.d.ts.map +1 -0
  76. package/dist/commands/chat.js +384 -0
  77. package/dist/commands/chat.js.map +1 -0
  78. package/dist/commands/config/show.d.ts +54 -0
  79. package/dist/commands/config/show.d.ts.map +1 -0
  80. package/dist/commands/config/show.js +324 -0
  81. package/dist/commands/config/show.js.map +1 -0
  82. package/dist/commands/doctor.d.ts +77 -0
  83. package/dist/commands/doctor.d.ts.map +1 -0
  84. package/dist/commands/doctor.js +412 -0
  85. package/dist/commands/doctor.js.map +1 -0
  86. package/dist/commands/jobs/watch.d.ts +50 -0
  87. package/dist/commands/jobs/watch.d.ts.map +1 -0
  88. package/dist/commands/jobs/watch.js +269 -0
  89. package/dist/commands/jobs/watch.js.map +1 -0
  90. package/dist/commands/login.d.ts +25 -0
  91. package/dist/commands/login.d.ts.map +1 -0
  92. package/dist/commands/login.js +165 -0
  93. package/dist/commands/login.js.map +1 -0
  94. package/dist/commands/profile/delete.d.ts +22 -0
  95. package/dist/commands/profile/delete.d.ts.map +1 -0
  96. package/dist/commands/profile/delete.js +57 -0
  97. package/dist/commands/profile/delete.js.map +1 -0
  98. package/dist/commands/profile/list.d.ts +19 -0
  99. package/dist/commands/profile/list.d.ts.map +1 -0
  100. package/dist/commands/profile/list.js +53 -0
  101. package/dist/commands/profile/list.js.map +1 -0
  102. package/dist/commands/profile/use.d.ts +22 -0
  103. package/dist/commands/profile/use.d.ts.map +1 -0
  104. package/dist/commands/profile/use.js +46 -0
  105. package/dist/commands/profile/use.js.map +1 -0
  106. package/dist/config/fs-utils.d.ts +14 -0
  107. package/dist/config/fs-utils.d.ts.map +1 -0
  108. package/dist/config/fs-utils.js +31 -0
  109. package/dist/config/fs-utils.js.map +1 -0
  110. package/dist/config/keychain.d.ts +53 -0
  111. package/dist/config/keychain.d.ts.map +1 -0
  112. package/dist/config/keychain.js +175 -0
  113. package/dist/config/keychain.js.map +1 -0
  114. package/dist/config/profile-store.d.ts +85 -0
  115. package/dist/config/profile-store.d.ts.map +1 -0
  116. package/dist/config/profile-store.js +228 -0
  117. package/dist/config/profile-store.js.map +1 -0
  118. package/dist/config/settings.d.ts +71 -0
  119. package/dist/config/settings.d.ts.map +1 -0
  120. package/dist/config/settings.js +151 -0
  121. package/dist/config/settings.js.map +1 -0
  122. package/dist/core/abilities-executor.d.ts +126 -0
  123. package/dist/core/abilities-executor.d.ts.map +1 -0
  124. package/dist/core/abilities-executor.js +264 -0
  125. package/dist/core/abilities-executor.js.map +1 -0
  126. package/dist/core/batch-manager.d.ts +113 -0
  127. package/dist/core/batch-manager.d.ts.map +1 -0
  128. package/dist/core/batch-manager.js +244 -0
  129. package/dist/core/batch-manager.js.map +1 -0
  130. package/dist/core/http-client.d.ts +111 -0
  131. package/dist/core/http-client.d.ts.map +1 -0
  132. package/dist/core/http-client.js +329 -0
  133. package/dist/core/http-client.js.map +1 -0
  134. package/dist/core/safety-controller.d.ts +114 -0
  135. package/dist/core/safety-controller.d.ts.map +1 -0
  136. package/dist/core/safety-controller.js +229 -0
  137. package/dist/core/safety-controller.js.map +1 -0
  138. package/dist/hooks/command-not-found.d.ts +12 -0
  139. package/dist/hooks/command-not-found.d.ts.map +1 -0
  140. package/dist/hooks/command-not-found.js +58 -0
  141. package/dist/hooks/command-not-found.js.map +1 -0
  142. package/dist/index.d.ts +7 -0
  143. package/dist/index.d.ts.map +1 -0
  144. package/dist/index.js +7 -0
  145. package/dist/index.js.map +1 -0
  146. package/dist/lib/base-command.d.ts +123 -0
  147. package/dist/lib/base-command.d.ts.map +1 -0
  148. package/dist/lib/base-command.js +285 -0
  149. package/dist/lib/base-command.js.map +1 -0
  150. package/dist/output/formatter.d.ts +48 -0
  151. package/dist/output/formatter.d.ts.map +1 -0
  152. package/dist/output/formatter.js +138 -0
  153. package/dist/output/formatter.js.map +1 -0
  154. package/dist/output/json-envelope.d.ts +43 -0
  155. package/dist/output/json-envelope.d.ts.map +1 -0
  156. package/dist/output/json-envelope.js +73 -0
  157. package/dist/output/json-envelope.js.map +1 -0
  158. package/dist/utils/audit-logger.d.ts +97 -0
  159. package/dist/utils/audit-logger.d.ts.map +1 -0
  160. package/dist/utils/audit-logger.js +169 -0
  161. package/dist/utils/audit-logger.js.map +1 -0
  162. package/dist/utils/colors.d.ts +29 -0
  163. package/dist/utils/colors.d.ts.map +1 -0
  164. package/dist/utils/colors.js +36 -0
  165. package/dist/utils/colors.js.map +1 -0
  166. package/dist/utils/errors.d.ts +107 -0
  167. package/dist/utils/errors.d.ts.map +1 -0
  168. package/dist/utils/errors.js +149 -0
  169. package/dist/utils/errors.js.map +1 -0
  170. package/dist/utils/exit-codes.d.ts +21 -0
  171. package/dist/utils/exit-codes.d.ts.map +1 -0
  172. package/dist/utils/exit-codes.js +20 -0
  173. package/dist/utils/exit-codes.js.map +1 -0
  174. package/dist/utils/format.d.ts +64 -0
  175. package/dist/utils/format.d.ts.map +1 -0
  176. package/dist/utils/format.js +69 -0
  177. package/dist/utils/format.js.map +1 -0
  178. package/dist/utils/prompt.d.ts +34 -0
  179. package/dist/utils/prompt.d.ts.map +1 -0
  180. package/dist/utils/prompt.js +132 -0
  181. package/dist/utils/prompt.js.map +1 -0
  182. package/dist/utils/retry.d.ts +59 -0
  183. package/dist/utils/retry.d.ts.map +1 -0
  184. package/dist/utils/retry.js +96 -0
  185. package/dist/utils/retry.js.map +1 -0
  186. package/dist/utils/terminal-sanitizer.d.ts +60 -0
  187. package/dist/utils/terminal-sanitizer.d.ts.map +1 -0
  188. package/dist/utils/terminal-sanitizer.js +166 -0
  189. package/dist/utils/terminal-sanitizer.js.map +1 -0
  190. package/dist/validation/input-sanitizer.d.ts +76 -0
  191. package/dist/validation/input-sanitizer.d.ts.map +1 -0
  192. package/dist/validation/input-sanitizer.js +199 -0
  193. package/dist/validation/input-sanitizer.js.map +1 -0
  194. package/dist/validation/schema-validator.d.ts +75 -0
  195. package/dist/validation/schema-validator.d.ts.map +1 -0
  196. package/dist/validation/schema-validator.js +147 -0
  197. package/dist/validation/schema-validator.js.map +1 -0
  198. package/oclif.manifest.json +857 -0
  199. package/package.json +101 -0
  200. package/scripts/completions/README.md +221 -0
  201. package/scripts/completions/mainwpcontrol.bash +193 -0
  202. package/scripts/completions/mainwpcontrol.zsh +267 -0
  203. package/scripts/completions/profile-completer.sh +35 -0
  204. package/scripts/completions/regenerate.sh +78 -0
@@ -0,0 +1,412 @@
1
+ /**
2
+ * Doctor Command for mainwpcontrol
3
+ *
4
+ * Diagnoses configuration issues and validates connectivity.
5
+ *
6
+ * Checks:
7
+ * - Profile configuration
8
+ * - Credential storage (keychain)
9
+ * - Dashboard connectivity
10
+ * - Abilities API availability
11
+ * - LLM provider configuration
12
+ */
13
+ import { Flags } from '@oclif/core';
14
+ import { BaseCommand, commonFlags } from '../lib/base-command.js';
15
+ import { getProfileStore } from '../config/profile-store.js';
16
+ import { getKeychain } from '../config/keychain.js';
17
+ import { PROVIDER_ENV_VARS, resolveProviderSelection, } from '../chat/providers/provider.js';
18
+ import { ExitCode } from '../utils/exit-codes.js';
19
+ import { maskPassword, maskApiKey } from '../utils/format.js';
20
+ import { color, colors } from '../utils/colors.js';
21
+ /** Check names whose failure means the system is not ready */
22
+ const CRITICAL_CHECKS = ['Profiles', 'Active Profile', 'Credentials', 'Dashboard Connection'];
23
+ export default class DoctorCommand extends BaseCommand {
24
+ static description = 'Diagnose configuration and connectivity issues';
25
+ static examples = [
26
+ {
27
+ command: '<%= config.bin %> doctor',
28
+ description: 'Run all diagnostic checks',
29
+ },
30
+ {
31
+ command: '<%= config.bin %> doctor --json',
32
+ description: 'Output results in JSON format',
33
+ },
34
+ ];
35
+ static flags = {
36
+ ...commonFlags,
37
+ verbose: Flags.boolean({
38
+ char: 'v',
39
+ description: 'Show detailed output',
40
+ default: false,
41
+ }),
42
+ };
43
+ /**
44
+ * Don't require a profile for doctor command
45
+ */
46
+ needsProfile() {
47
+ return false;
48
+ }
49
+ async run() {
50
+ const { flags } = await this.parse(DoctorCommand);
51
+ await this.initCommon(flags);
52
+ const checks = [];
53
+ // Run all checks
54
+ checks.push(await this.checkProfiles());
55
+ checks.push(await this.checkKeychain());
56
+ checks.push(await this.checkActiveProfile());
57
+ checks.push(await this.checkCredentials());
58
+ // Fetch abilities once for both dashboard and API checks
59
+ const { abilities, connectionCheck } = await this.fetchAbilities();
60
+ checks.push(connectionCheck);
61
+ checks.push(this.checkAbilitiesFromList(abilities));
62
+ checks.push(await this.checkLLMProvider());
63
+ // Build report
64
+ const report = this.buildReport(checks);
65
+ // Output
66
+ if (this.jsonOutput) {
67
+ this.output(report);
68
+ }
69
+ else {
70
+ this.displayReport(report, flags.verbose);
71
+ }
72
+ // Exit with error if not ready
73
+ if (!report.ready) {
74
+ this.exit(ExitCode.INPUT_ERROR);
75
+ }
76
+ }
77
+ /**
78
+ * Check if profiles are configured
79
+ */
80
+ async checkProfiles() {
81
+ try {
82
+ const profileStore = getProfileStore();
83
+ const profiles = await profileStore.list();
84
+ if (profiles.length === 0) {
85
+ return {
86
+ name: 'Profiles',
87
+ status: 'fail',
88
+ message: 'No profiles configured',
89
+ details: 'Run `mainwpcontrol login` to create a profile',
90
+ };
91
+ }
92
+ return {
93
+ name: 'Profiles',
94
+ status: 'pass',
95
+ message: `${profiles.length} profile(s) configured`,
96
+ details: profiles.map((p) => p.name).join(', '),
97
+ };
98
+ }
99
+ catch (error) {
100
+ return {
101
+ name: 'Profiles',
102
+ status: 'fail',
103
+ message: 'Failed to read profiles',
104
+ details: error instanceof Error ? error.message : String(error),
105
+ };
106
+ }
107
+ }
108
+ /**
109
+ * Check keychain availability
110
+ */
111
+ async checkKeychain() {
112
+ try {
113
+ const keychain = getKeychain();
114
+ const available = await keychain.isAvailable();
115
+ if (!available) {
116
+ return {
117
+ name: 'Keychain',
118
+ status: 'warn',
119
+ message: 'OS keychain not available',
120
+ details: 'Credentials will use MAINWP_APP_PASSWORD environment variable. ' +
121
+ 'Consider installing keytar for secure storage.',
122
+ };
123
+ }
124
+ return {
125
+ name: 'Keychain',
126
+ status: 'pass',
127
+ message: 'OS keychain available',
128
+ };
129
+ }
130
+ catch (error) {
131
+ return {
132
+ name: 'Keychain',
133
+ status: 'warn',
134
+ message: 'Could not check keychain',
135
+ details: error instanceof Error ? error.message : String(error),
136
+ };
137
+ }
138
+ }
139
+ /**
140
+ * Check active profile
141
+ */
142
+ async checkActiveProfile() {
143
+ try {
144
+ const profileStore = getProfileStore();
145
+ const activeProfile = await profileStore.getActive();
146
+ if (!activeProfile) {
147
+ return {
148
+ name: 'Active Profile',
149
+ status: 'fail',
150
+ message: 'No active profile',
151
+ details: 'Run `mainwpcontrol login` or `mainwpcontrol profile use <name>`',
152
+ };
153
+ }
154
+ this.currentProfile = activeProfile;
155
+ return {
156
+ name: 'Active Profile',
157
+ status: 'pass',
158
+ message: `Active: ${activeProfile.name}`,
159
+ details: activeProfile.dashboardUrl,
160
+ };
161
+ }
162
+ catch (error) {
163
+ return {
164
+ name: 'Active Profile',
165
+ status: 'fail',
166
+ message: 'Failed to load active profile',
167
+ details: error instanceof Error ? error.message : String(error),
168
+ };
169
+ }
170
+ }
171
+ /**
172
+ * Check credentials
173
+ */
174
+ async checkCredentials() {
175
+ if (!this.currentProfile) {
176
+ return {
177
+ name: 'Credentials',
178
+ status: 'fail',
179
+ message: 'No profile to check',
180
+ };
181
+ }
182
+ try {
183
+ const keychain = getKeychain();
184
+ const password = await keychain.get(this.currentProfile.name);
185
+ if (!password) {
186
+ return {
187
+ name: 'Credentials',
188
+ status: 'fail',
189
+ message: 'No credentials found',
190
+ details: 'Run `mainwpcontrol login` or set MAINWP_APP_PASSWORD environment variable',
191
+ };
192
+ }
193
+ // Mask password for display
194
+ const masked = maskPassword(password);
195
+ return {
196
+ name: 'Credentials',
197
+ status: 'pass',
198
+ message: 'Credentials available',
199
+ details: `Application Password: ${masked}`,
200
+ };
201
+ }
202
+ catch (error) {
203
+ return {
204
+ name: 'Credentials',
205
+ status: 'fail',
206
+ message: 'Failed to load credentials',
207
+ details: error instanceof Error ? error.message : String(error),
208
+ };
209
+ }
210
+ }
211
+ /**
212
+ * Fetch abilities once for both dashboard connection and API checks
213
+ */
214
+ async fetchAbilities() {
215
+ if (!this.currentProfile) {
216
+ return {
217
+ abilities: [],
218
+ connectionCheck: {
219
+ name: 'Dashboard Connection',
220
+ status: 'fail',
221
+ message: 'No profile to check',
222
+ },
223
+ };
224
+ }
225
+ try {
226
+ const executor = await this.getExecutor();
227
+ const abilities = await executor.listAbilities();
228
+ return {
229
+ abilities,
230
+ connectionCheck: {
231
+ name: 'Dashboard Connection',
232
+ status: 'pass',
233
+ message: 'Connected to Dashboard',
234
+ details: `${abilities.length} abilities available`,
235
+ },
236
+ };
237
+ }
238
+ catch (error) {
239
+ const message = error instanceof Error ? error.message : String(error);
240
+ let details = message;
241
+ if (message.includes('ECONNREFUSED')) {
242
+ details = 'Connection refused. Is the Dashboard running?';
243
+ }
244
+ else if (message.includes('ENOTFOUND')) {
245
+ details = 'Host not found. Check the Dashboard URL.';
246
+ }
247
+ else if (message.includes('certificate')) {
248
+ details = 'SSL certificate error. Use --skip-ssl-verify if needed.';
249
+ }
250
+ else if (message.includes('401') || message.includes('Authentication')) {
251
+ details = 'Authentication failed. Check your credentials.';
252
+ }
253
+ return {
254
+ abilities: [],
255
+ connectionCheck: {
256
+ name: 'Dashboard Connection',
257
+ status: 'fail',
258
+ message: 'Cannot connect to Dashboard',
259
+ details,
260
+ },
261
+ };
262
+ }
263
+ }
264
+ /**
265
+ * Check Abilities API from pre-fetched list
266
+ */
267
+ checkAbilitiesFromList(abilities) {
268
+ if (abilities.length === 0) {
269
+ return {
270
+ name: 'Abilities API',
271
+ status: 'fail',
272
+ message: 'No abilities available',
273
+ details: 'Dashboard connection may have failed',
274
+ };
275
+ }
276
+ const requiredAbilities = ['list-sites-v1', 'get-site-v1'];
277
+ const missing = requiredAbilities.filter((name) => !abilities.find((a) => a.name === name));
278
+ if (missing.length > 0) {
279
+ return {
280
+ name: 'Abilities API',
281
+ status: 'warn',
282
+ message: 'Some abilities missing',
283
+ details: `Missing: ${missing.join(', ')}`,
284
+ };
285
+ }
286
+ const destructive = abilities.filter((a) => a.meta?.annotations?.destructive);
287
+ return {
288
+ name: 'Abilities API',
289
+ status: 'pass',
290
+ message: `${abilities.length} abilities available`,
291
+ details: `${destructive.length} destructive abilities (safety enforced)`,
292
+ };
293
+ }
294
+ /**
295
+ * Check LLM provider configuration
296
+ */
297
+ async checkLLMProvider() {
298
+ const resolution = resolveProviderSelection({
299
+ envProvider: process.env['MAINWP_LLM_PROVIDER'],
300
+ settingsProvider: this.settings.llmProvider,
301
+ timeout: this.settings.timeout,
302
+ });
303
+ if (!resolution.name) {
304
+ // List all possible env vars
305
+ const envVars = Object.entries(PROVIDER_ENV_VARS)
306
+ .map(([name, config]) => ` ${name}: ${config.key}`)
307
+ .join('\n');
308
+ return {
309
+ name: 'LLM Provider',
310
+ status: 'warn',
311
+ message: 'No LLM provider configured',
312
+ details: [...resolution.warnings, 'Chat mode will not work. Set one of these environment variables:'].join('\n') + '\n' +
313
+ envVars,
314
+ };
315
+ }
316
+ if (!resolution.configured) {
317
+ return {
318
+ name: 'LLM Provider',
319
+ status: 'warn',
320
+ message: `${resolution.name} selected but no API key`,
321
+ details: [
322
+ ...resolution.warnings,
323
+ `Source: ${resolution.source}`,
324
+ `Set ${PROVIDER_ENV_VARS[resolution.name]?.key ?? 'API key'}`,
325
+ ].join('\n'),
326
+ };
327
+ }
328
+ // Mask API key
329
+ const masked = maskApiKey(resolution.config.apiKey);
330
+ return {
331
+ name: 'LLM Provider',
332
+ status: 'pass',
333
+ message: `${resolution.name} configured`,
334
+ details: [`Source: ${resolution.source}`, `API Key: ${masked}`].join('\n'),
335
+ };
336
+ }
337
+ /**
338
+ * Build summary report
339
+ */
340
+ buildReport(checks) {
341
+ const summary = {
342
+ passed: checks.filter((c) => c.status === 'pass').length,
343
+ warnings: checks.filter((c) => c.status === 'warn').length,
344
+ failed: checks.filter((c) => c.status === 'fail').length,
345
+ };
346
+ // Ready if no critical failures (connection to dashboard)
347
+ const criticalFailed = checks.some((c) => CRITICAL_CHECKS.includes(c.name) && c.status === 'fail');
348
+ return {
349
+ checks,
350
+ summary,
351
+ ready: !criticalFailed,
352
+ };
353
+ }
354
+ /**
355
+ * Display report in human-readable format
356
+ */
357
+ displayReport(report, verbose) {
358
+ this.log('\n MainWP Control CLI - System Check\n');
359
+ this.log(' ' + '─'.repeat(40));
360
+ for (const check of report.checks) {
361
+ const icon = this.getStatusIcon(check.status);
362
+ const statusColor = this.getStatusColorCode(check.status);
363
+ this.log(` ${icon} ${check.name}`);
364
+ this.log(` ${color(check.message, statusColor)}`);
365
+ if (verbose && check.details) {
366
+ const detailLines = check.details.split('\n');
367
+ for (const line of detailLines) {
368
+ this.log(` ${color(line, colors.gray)}`);
369
+ }
370
+ }
371
+ }
372
+ this.log(' ' + '─'.repeat(40));
373
+ // Summary
374
+ this.log(` Summary: ${color(`${report.summary.passed} passed`, colors.green)}, ` +
375
+ `${color(`${report.summary.warnings} warnings`, colors.yellow)}, ` +
376
+ `${color(`${report.summary.failed} failed`, colors.red)}`);
377
+ if (report.ready) {
378
+ this.log(`\n ${color('✓ System is ready', colors.green)}\n`);
379
+ }
380
+ else {
381
+ this.log(`\n ${color('✗ System has critical issues', colors.red)}`);
382
+ this.log(' Run with -v for more details\n');
383
+ }
384
+ }
385
+ /**
386
+ * Get status icon
387
+ */
388
+ getStatusIcon(status) {
389
+ switch (status) {
390
+ case 'pass':
391
+ return color('✓', colors.green);
392
+ case 'warn':
393
+ return color('⚠', colors.yellow);
394
+ case 'fail':
395
+ return color('✗', colors.red);
396
+ }
397
+ }
398
+ /**
399
+ * Get status color code string
400
+ */
401
+ getStatusColorCode(status) {
402
+ switch (status) {
403
+ case 'pass':
404
+ return colors.green;
405
+ case 'warn':
406
+ return colors.yellow;
407
+ case 'fail':
408
+ return colors.red;
409
+ }
410
+ }
411
+ }
412
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Jobs watch command for mainwpcontrol
3
+ *
4
+ * Monitor batch job status with exponential backoff polling.
5
+ * Streams progress updates until job completes or times out.
6
+ */
7
+ import { BaseCommand } from '../../lib/base-command.js';
8
+ export default class JobsWatch extends BaseCommand {
9
+ static description: string;
10
+ static examples: string[];
11
+ static flags: {
12
+ timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'initial-delay': import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
14
+ 'max-delay': import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
15
+ 'no-progress': import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
17
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
+ profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
+ };
21
+ static args: {
22
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
23
+ };
24
+ run(): Promise<void>;
25
+ /**
26
+ * Watch job with progress updates
27
+ */
28
+ private watchJob;
29
+ /**
30
+ * Display progress update
31
+ */
32
+ private displayProgress;
33
+ /**
34
+ * Calculate progress percentage from processed/total
35
+ */
36
+ private calculateProgress;
37
+ /**
38
+ * Format status text with color
39
+ */
40
+ private formatStatusText;
41
+ /**
42
+ * Output final result
43
+ */
44
+ private outputResult;
45
+ /**
46
+ * Format human-readable output
47
+ */
48
+ private formatHumanOutput;
49
+ }
50
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/commands/jobs/watch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAe,MAAM,2BAA2B,CAAC;AA0BrE,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,WAAW,SAA8B;IAEhD,MAAM,CAAC,QAAQ,WAYb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;MAmBV;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA4C1B;;OAEG;YACW,QAAQ;IAyCtB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAuE1B"}