@sudocode-ai/cli 0.1.11 → 0.1.13

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 (88) hide show
  1. package/dist/cli/init-commands.d.ts.map +1 -1
  2. package/dist/cli/init-commands.js +6 -2
  3. package/dist/cli/init-commands.js.map +1 -1
  4. package/dist/cli/plugin-commands.d.ts +62 -0
  5. package/dist/cli/plugin-commands.d.ts.map +1 -0
  6. package/dist/cli/plugin-commands.js +595 -0
  7. package/dist/cli/plugin-commands.js.map +1 -0
  8. package/dist/cli.js +73 -1
  9. package/dist/cli.js.map +1 -1
  10. package/dist/config.d.ts +40 -0
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +35 -0
  13. package/dist/config.js.map +1 -1
  14. package/dist/export.d.ts +10 -5
  15. package/dist/export.d.ts.map +1 -1
  16. package/dist/export.js +88 -18
  17. package/dist/export.js.map +1 -1
  18. package/dist/import.d.ts.map +1 -1
  19. package/dist/import.js +20 -0
  20. package/dist/import.js.map +1 -1
  21. package/dist/integrations/base-provider.d.ts +108 -0
  22. package/dist/integrations/base-provider.d.ts.map +1 -0
  23. package/dist/integrations/base-provider.js +80 -0
  24. package/dist/integrations/base-provider.js.map +1 -0
  25. package/dist/integrations/config-resolver.d.ts +62 -0
  26. package/dist/integrations/config-resolver.d.ts.map +1 -0
  27. package/dist/integrations/config-resolver.js +69 -0
  28. package/dist/integrations/config-resolver.js.map +1 -0
  29. package/dist/integrations/config-validator.d.ts +75 -0
  30. package/dist/integrations/config-validator.d.ts.map +1 -0
  31. package/dist/integrations/config-validator.js +129 -0
  32. package/dist/integrations/config-validator.js.map +1 -0
  33. package/dist/integrations/index.d.ts +14 -0
  34. package/dist/integrations/index.d.ts.map +1 -0
  35. package/dist/integrations/index.js +20 -0
  36. package/dist/integrations/index.js.map +1 -0
  37. package/dist/integrations/plugin-loader.d.ts +69 -0
  38. package/dist/integrations/plugin-loader.d.ts.map +1 -0
  39. package/dist/integrations/plugin-loader.js +172 -0
  40. package/dist/integrations/plugin-loader.js.map +1 -0
  41. package/dist/integrations/registry.d.ts +67 -0
  42. package/dist/integrations/registry.d.ts.map +1 -0
  43. package/dist/integrations/registry.js +77 -0
  44. package/dist/integrations/registry.js.map +1 -0
  45. package/dist/integrations/sync-coordinator.d.ts +186 -0
  46. package/dist/integrations/sync-coordinator.d.ts.map +1 -0
  47. package/dist/integrations/sync-coordinator.js +776 -0
  48. package/dist/integrations/sync-coordinator.js.map +1 -0
  49. package/dist/integrations/types.d.ts +142 -0
  50. package/dist/integrations/types.d.ts.map +1 -0
  51. package/dist/integrations/types.js +6 -0
  52. package/dist/integrations/types.js.map +1 -0
  53. package/dist/integrations/utils/conflict-resolver.d.ts +79 -0
  54. package/dist/integrations/utils/conflict-resolver.d.ts.map +1 -0
  55. package/dist/integrations/utils/conflict-resolver.js +106 -0
  56. package/dist/integrations/utils/conflict-resolver.js.map +1 -0
  57. package/dist/operations/external-links.d.ts +106 -0
  58. package/dist/operations/external-links.d.ts.map +1 -0
  59. package/dist/operations/external-links.js +300 -0
  60. package/dist/operations/external-links.js.map +1 -0
  61. package/dist/operations/feedback.d.ts.map +1 -1
  62. package/dist/operations/feedback.js +3 -1
  63. package/dist/operations/feedback.js.map +1 -1
  64. package/dist/operations/index.d.ts +1 -0
  65. package/dist/operations/index.d.ts.map +1 -1
  66. package/dist/operations/index.js +1 -0
  67. package/dist/operations/index.js.map +1 -1
  68. package/dist/operations/issues.d.ts +2 -0
  69. package/dist/operations/issues.d.ts.map +1 -1
  70. package/dist/operations/issues.js +34 -5
  71. package/dist/operations/issues.js.map +1 -1
  72. package/dist/operations/relationships.d.ts.map +1 -1
  73. package/dist/operations/relationships.js +6 -2
  74. package/dist/operations/relationships.js.map +1 -1
  75. package/dist/operations/specs.d.ts +2 -0
  76. package/dist/operations/specs.d.ts.map +1 -1
  77. package/dist/operations/specs.js +32 -4
  78. package/dist/operations/specs.js.map +1 -1
  79. package/dist/sync.d.ts +3 -3
  80. package/dist/sync.d.ts.map +1 -1
  81. package/dist/sync.js +2 -0
  82. package/dist/sync.js.map +1 -1
  83. package/dist/types.d.ts +1 -1
  84. package/dist/types.d.ts.map +1 -1
  85. package/dist/watcher.d.ts.map +1 -1
  86. package/dist/watcher.js +11 -6
  87. package/dist/watcher.js.map +1 -1
  88. package/package.json +2 -2
@@ -0,0 +1,595 @@
1
+ /**
2
+ * CLI handlers for plugin management commands
3
+ */
4
+ import { spawn } from "child_process";
5
+ import chalk from "chalk";
6
+ import { getFirstPartyPlugins, loadPlugin, resolvePluginPath, testProviderConnection, } from "../integrations/plugin-loader.js";
7
+ import { getConfig, updateConfig } from "../config.js";
8
+ /**
9
+ * Check if a package is installed
10
+ */
11
+ async function isPackageInstalled(packageName) {
12
+ try {
13
+ await import(packageName);
14
+ return true;
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ }
20
+ /**
21
+ * List available plugins
22
+ */
23
+ export async function handlePluginList(ctx, _options) {
24
+ const firstPartyPlugins = getFirstPartyPlugins();
25
+ if (ctx.jsonOutput) {
26
+ const pluginStatuses = await Promise.all(firstPartyPlugins.map(async (p) => ({
27
+ name: p.name,
28
+ package: p.package,
29
+ installed: await isPackageInstalled(p.package),
30
+ })));
31
+ console.log(JSON.stringify(pluginStatuses, null, 2));
32
+ return;
33
+ }
34
+ console.log(chalk.blue.bold("Available Integration Plugins"));
35
+ console.log();
36
+ for (const plugin of firstPartyPlugins) {
37
+ const installed = await isPackageInstalled(plugin.package);
38
+ const status = installed
39
+ ? chalk.green("✓ installed")
40
+ : chalk.gray("not installed");
41
+ console.log(` ${chalk.bold(plugin.name)}`);
42
+ console.log(` Package: ${chalk.gray(plugin.package)}`);
43
+ console.log(` Status: ${status}`);
44
+ console.log();
45
+ }
46
+ console.log(chalk.gray("Install a plugin with: sudocode plugin install <name>"));
47
+ }
48
+ /**
49
+ * Install a plugin
50
+ */
51
+ export async function handlePluginInstall(ctx, pluginName, options) {
52
+ const packageName = resolvePluginPath(pluginName);
53
+ // Check if already installed
54
+ const alreadyInstalled = await isPackageInstalled(packageName);
55
+ if (alreadyInstalled) {
56
+ if (ctx.jsonOutput) {
57
+ console.log(JSON.stringify({
58
+ success: true,
59
+ plugin: pluginName,
60
+ package: packageName,
61
+ message: "Already installed",
62
+ }));
63
+ }
64
+ else {
65
+ console.log(chalk.yellow(`Plugin '${pluginName}' (${packageName}) is already installed`));
66
+ }
67
+ return;
68
+ }
69
+ if (!ctx.jsonOutput) {
70
+ console.log(chalk.blue(`Installing plugin '${pluginName}'...`));
71
+ console.log(chalk.gray(`Package: ${packageName}`));
72
+ console.log();
73
+ }
74
+ // Build npm install command
75
+ const args = ["install", packageName];
76
+ if (options.global) {
77
+ args.splice(1, 0, "-g");
78
+ }
79
+ return new Promise((resolve, reject) => {
80
+ const child = spawn("npm", args, {
81
+ stdio: ctx.jsonOutput ? "pipe" : "inherit",
82
+ shell: true,
83
+ });
84
+ let stdout = "";
85
+ let stderr = "";
86
+ if (ctx.jsonOutput) {
87
+ child.stdout?.on("data", (data) => {
88
+ stdout += data.toString();
89
+ });
90
+ child.stderr?.on("data", (data) => {
91
+ stderr += data.toString();
92
+ });
93
+ }
94
+ child.on("close", (code) => {
95
+ if (code === 0) {
96
+ if (ctx.jsonOutput) {
97
+ console.log(JSON.stringify({
98
+ success: true,
99
+ plugin: pluginName,
100
+ package: packageName,
101
+ message: "Installed successfully",
102
+ }));
103
+ }
104
+ else {
105
+ console.log();
106
+ console.log(chalk.green(`✓ Plugin '${pluginName}' installed successfully`));
107
+ console.log();
108
+ console.log(chalk.gray("Configure in .sudocode/config.json:"));
109
+ console.log(chalk.gray(`
110
+ "integrations": {
111
+ "${pluginName}": {
112
+ "enabled": true,
113
+ "options": {
114
+ "path": ".${pluginName}"
115
+ }
116
+ }
117
+ }
118
+ `));
119
+ }
120
+ resolve();
121
+ }
122
+ else {
123
+ if (ctx.jsonOutput) {
124
+ console.log(JSON.stringify({
125
+ success: false,
126
+ plugin: pluginName,
127
+ package: packageName,
128
+ error: stderr || `npm install exited with code ${code}`,
129
+ }));
130
+ }
131
+ else {
132
+ console.error(chalk.red(`✗ Failed to install plugin '${pluginName}'`));
133
+ console.error(chalk.gray(`Exit code: ${code}`));
134
+ }
135
+ reject(new Error(`npm install failed with code ${code}`));
136
+ }
137
+ });
138
+ child.on("error", (error) => {
139
+ if (ctx.jsonOutput) {
140
+ console.log(JSON.stringify({
141
+ success: false,
142
+ plugin: pluginName,
143
+ package: packageName,
144
+ error: error.message,
145
+ }));
146
+ }
147
+ else {
148
+ console.error(chalk.red(`✗ Failed to install plugin '${pluginName}'`));
149
+ console.error(chalk.gray(error.message));
150
+ }
151
+ reject(error);
152
+ });
153
+ });
154
+ }
155
+ /**
156
+ * Show status of configured plugins
157
+ */
158
+ export async function handlePluginStatus(ctx) {
159
+ const firstPartyPlugins = getFirstPartyPlugins();
160
+ const statuses = await Promise.all(firstPartyPlugins.map(async (p) => {
161
+ const installed = await isPackageInstalled(p.package);
162
+ let version;
163
+ let displayName;
164
+ if (installed) {
165
+ const plugin = await loadPlugin(p.name);
166
+ if (plugin) {
167
+ version = plugin.version;
168
+ displayName = plugin.displayName;
169
+ }
170
+ }
171
+ return {
172
+ name: p.name,
173
+ displayName,
174
+ package: p.package,
175
+ installed,
176
+ version,
177
+ };
178
+ }));
179
+ if (ctx.jsonOutput) {
180
+ console.log(JSON.stringify(statuses, null, 2));
181
+ return;
182
+ }
183
+ const installed = statuses.filter((s) => s.installed);
184
+ const notInstalled = statuses.filter((s) => !s.installed);
185
+ if (installed.length === 0) {
186
+ console.log(chalk.yellow("No integration plugins installed"));
187
+ console.log();
188
+ console.log(chalk.gray("Install a plugin with: sudocode plugin install <name>"));
189
+ console.log(chalk.gray("List available plugins with: sudocode plugin list"));
190
+ return;
191
+ }
192
+ console.log(chalk.blue.bold("Installed Plugins"));
193
+ console.log();
194
+ for (const status of installed) {
195
+ console.log(` ${chalk.green("✓")} ${chalk.bold(status.displayName || status.name)}`);
196
+ console.log(` Package: ${chalk.gray(status.package)}`);
197
+ console.log(` Version: ${chalk.gray(status.version || "unknown")}`);
198
+ console.log();
199
+ }
200
+ if (notInstalled.length > 0) {
201
+ console.log(chalk.gray.bold("Available (not installed)"));
202
+ console.log();
203
+ for (const status of notInstalled) {
204
+ console.log(` ${chalk.gray("○")} ${status.name}`);
205
+ }
206
+ console.log();
207
+ }
208
+ }
209
+ /**
210
+ * Uninstall a plugin
211
+ */
212
+ export async function handlePluginUninstall(ctx, pluginName, options) {
213
+ const packageName = resolvePluginPath(pluginName);
214
+ // Check if installed
215
+ const isInstalled = await isPackageInstalled(packageName);
216
+ if (!isInstalled) {
217
+ if (ctx.jsonOutput) {
218
+ console.log(JSON.stringify({
219
+ success: false,
220
+ plugin: pluginName,
221
+ package: packageName,
222
+ error: "Not installed",
223
+ }));
224
+ }
225
+ else {
226
+ console.log(chalk.yellow(`Plugin '${pluginName}' (${packageName}) is not installed`));
227
+ }
228
+ return;
229
+ }
230
+ if (!ctx.jsonOutput) {
231
+ console.log(chalk.blue(`Uninstalling plugin '${pluginName}'...`));
232
+ }
233
+ const args = ["uninstall", packageName];
234
+ if (options.global) {
235
+ args.splice(1, 0, "-g");
236
+ }
237
+ return new Promise((resolve, reject) => {
238
+ const child = spawn("npm", args, {
239
+ stdio: ctx.jsonOutput ? "pipe" : "inherit",
240
+ shell: true,
241
+ });
242
+ child.on("close", (code) => {
243
+ if (code === 0) {
244
+ if (ctx.jsonOutput) {
245
+ console.log(JSON.stringify({
246
+ success: true,
247
+ plugin: pluginName,
248
+ package: packageName,
249
+ message: "Uninstalled successfully",
250
+ }));
251
+ }
252
+ else {
253
+ console.log();
254
+ console.log(chalk.green(`✓ Plugin '${pluginName}' uninstalled`));
255
+ }
256
+ resolve();
257
+ }
258
+ else {
259
+ if (ctx.jsonOutput) {
260
+ console.log(JSON.stringify({
261
+ success: false,
262
+ plugin: pluginName,
263
+ package: packageName,
264
+ error: `npm uninstall exited with code ${code}`,
265
+ }));
266
+ }
267
+ else {
268
+ console.error(chalk.red(`✗ Failed to uninstall plugin '${pluginName}'`));
269
+ }
270
+ reject(new Error(`npm uninstall failed with code ${code}`));
271
+ }
272
+ });
273
+ child.on("error", (error) => {
274
+ if (ctx.jsonOutput) {
275
+ console.log(JSON.stringify({
276
+ success: false,
277
+ plugin: pluginName,
278
+ package: packageName,
279
+ error: error.message,
280
+ }));
281
+ }
282
+ else {
283
+ console.error(chalk.red(`✗ Failed to uninstall plugin '${pluginName}'`));
284
+ console.error(chalk.gray(error.message));
285
+ }
286
+ reject(error);
287
+ });
288
+ });
289
+ }
290
+ /**
291
+ * Configure a plugin
292
+ */
293
+ export async function handlePluginConfigure(ctx, pluginName, options) {
294
+ // Load the plugin to validate it exists and get config schema
295
+ const plugin = await loadPlugin(pluginName);
296
+ if (!plugin) {
297
+ if (ctx.jsonOutput) {
298
+ console.log(JSON.stringify({
299
+ success: false,
300
+ plugin: pluginName,
301
+ error: "Plugin not installed. Install with: sudocode plugin install " + pluginName,
302
+ }));
303
+ }
304
+ else {
305
+ console.error(chalk.red(`✗ Plugin '${pluginName}' not installed.`));
306
+ console.log(chalk.gray(`Install with: sudocode plugin install ${pluginName}`));
307
+ }
308
+ return;
309
+ }
310
+ // Get current config
311
+ const config = getConfig(ctx.outputDir);
312
+ const integrations = config.integrations || {};
313
+ const existingConfig = integrations[pluginName] || { enabled: false };
314
+ // Parse options
315
+ let pluginOptions = existingConfig.options || {};
316
+ // Apply --options JSON if provided
317
+ if (options.options) {
318
+ try {
319
+ const parsed = JSON.parse(options.options);
320
+ pluginOptions = { ...pluginOptions, ...parsed };
321
+ }
322
+ catch (e) {
323
+ if (ctx.jsonOutput) {
324
+ console.log(JSON.stringify({
325
+ success: false,
326
+ plugin: pluginName,
327
+ error: "Invalid JSON in --options",
328
+ }));
329
+ }
330
+ else {
331
+ console.error(chalk.red("✗ Invalid JSON in --options"));
332
+ }
333
+ return;
334
+ }
335
+ }
336
+ // Apply --set key=value pairs
337
+ if (options.set && options.set.length > 0) {
338
+ for (const pair of options.set) {
339
+ const eqIdx = pair.indexOf("=");
340
+ if (eqIdx === -1) {
341
+ if (ctx.jsonOutput) {
342
+ console.log(JSON.stringify({
343
+ success: false,
344
+ plugin: pluginName,
345
+ error: `Invalid --set format: ${pair}. Expected key=value`,
346
+ }));
347
+ }
348
+ else {
349
+ console.error(chalk.red(`✗ Invalid --set format: ${pair}. Expected key=value`));
350
+ }
351
+ return;
352
+ }
353
+ const key = pair.slice(0, eqIdx);
354
+ const value = pair.slice(eqIdx + 1);
355
+ // Try to parse as JSON for booleans/numbers, otherwise use as string
356
+ try {
357
+ pluginOptions[key] = JSON.parse(value);
358
+ }
359
+ catch {
360
+ pluginOptions[key] = value;
361
+ }
362
+ }
363
+ }
364
+ // Validate the configuration
365
+ const validation = plugin.validateConfig(pluginOptions);
366
+ if (!validation.valid) {
367
+ if (ctx.jsonOutput) {
368
+ console.log(JSON.stringify({
369
+ success: false,
370
+ plugin: pluginName,
371
+ errors: validation.errors,
372
+ warnings: validation.warnings,
373
+ }));
374
+ }
375
+ else {
376
+ console.error(chalk.red("✗ Configuration validation failed:"));
377
+ for (const error of validation.errors) {
378
+ console.error(chalk.red(` - ${error}`));
379
+ }
380
+ if (validation.warnings.length > 0) {
381
+ console.log(chalk.yellow("\nWarnings:"));
382
+ for (const warning of validation.warnings) {
383
+ console.log(chalk.yellow(` - ${warning}`));
384
+ }
385
+ }
386
+ }
387
+ return;
388
+ }
389
+ // Show warnings even on success
390
+ if (!ctx.jsonOutput && validation.warnings.length > 0) {
391
+ console.log(chalk.yellow("Warnings:"));
392
+ for (const warning of validation.warnings) {
393
+ console.log(chalk.yellow(` - ${warning}`));
394
+ }
395
+ console.log();
396
+ }
397
+ // Build the new provider config
398
+ const newConfig = {
399
+ ...existingConfig,
400
+ options: pluginOptions,
401
+ };
402
+ // Apply enable/disable flags
403
+ if (options.enable) {
404
+ newConfig.enabled = true;
405
+ }
406
+ else if (options.disable) {
407
+ newConfig.enabled = false;
408
+ }
409
+ else if (existingConfig.enabled === undefined) {
410
+ // Enable by default when first configuring
411
+ newConfig.enabled = true;
412
+ }
413
+ // Apply other flags
414
+ if (options.autoSync !== undefined) {
415
+ newConfig.auto_sync = options.autoSync;
416
+ }
417
+ if (options.autoImport !== undefined) {
418
+ newConfig.auto_import = options.autoImport;
419
+ }
420
+ if (options.deleteBehavior) {
421
+ newConfig.delete_behavior = options.deleteBehavior;
422
+ }
423
+ // Update config
424
+ integrations[pluginName] = newConfig;
425
+ updateConfig(ctx.outputDir, { integrations });
426
+ if (ctx.jsonOutput) {
427
+ console.log(JSON.stringify({
428
+ success: true,
429
+ plugin: pluginName,
430
+ config: newConfig,
431
+ message: "Configuration saved",
432
+ }));
433
+ }
434
+ else {
435
+ console.log(chalk.green(`✓ Plugin '${pluginName}' configured successfully`));
436
+ console.log();
437
+ console.log(chalk.bold("Configuration:"));
438
+ console.log(chalk.gray(` Enabled: ${newConfig.enabled}`));
439
+ console.log(chalk.gray(` Auto-sync: ${newConfig.auto_sync ?? false}`));
440
+ console.log(chalk.gray(` Auto-import: ${newConfig.auto_import ?? true}`));
441
+ console.log(chalk.gray(` Delete behavior: ${newConfig.delete_behavior ?? "close"}`));
442
+ console.log(chalk.gray(` Options:`));
443
+ for (const [key, value] of Object.entries(newConfig.options || {})) {
444
+ console.log(chalk.gray(` ${key}: ${JSON.stringify(value)}`));
445
+ }
446
+ }
447
+ // Run test if requested
448
+ if (options.test) {
449
+ console.log();
450
+ await handlePluginTest(ctx, pluginName);
451
+ }
452
+ }
453
+ /**
454
+ * Test a plugin's connection
455
+ */
456
+ export async function handlePluginTest(ctx, pluginName) {
457
+ // Get current config
458
+ const config = getConfig(ctx.outputDir);
459
+ const integrations = config.integrations || {};
460
+ const providerConfig = integrations[pluginName];
461
+ if (!providerConfig) {
462
+ if (ctx.jsonOutput) {
463
+ console.log(JSON.stringify({
464
+ success: false,
465
+ plugin: pluginName,
466
+ error: "Plugin not configured. Configure with: sudocode plugin configure " + pluginName,
467
+ }));
468
+ }
469
+ else {
470
+ console.error(chalk.red(`✗ Plugin '${pluginName}' not configured.`));
471
+ console.log(chalk.gray(`Configure with: sudocode plugin configure ${pluginName} --set path=.beads`));
472
+ }
473
+ return;
474
+ }
475
+ if (!ctx.jsonOutput) {
476
+ console.log(chalk.blue(`Testing plugin '${pluginName}'...`));
477
+ }
478
+ // Get project root (parent of .sudocode)
479
+ const projectPath = ctx.outputDir.replace(/[/\\]\.sudocode$/, "");
480
+ // Run the test
481
+ const result = await testProviderConnection(pluginName, providerConfig, projectPath);
482
+ if (ctx.jsonOutput) {
483
+ console.log(JSON.stringify({
484
+ plugin: pluginName,
485
+ ...result,
486
+ }));
487
+ }
488
+ else {
489
+ if (result.success) {
490
+ console.log(chalk.green(`✓ Plugin '${pluginName}' test passed`));
491
+ if (result.details) {
492
+ console.log();
493
+ console.log(chalk.bold("Details:"));
494
+ for (const [key, value] of Object.entries(result.details)) {
495
+ console.log(chalk.gray(` ${key}: ${JSON.stringify(value)}`));
496
+ }
497
+ }
498
+ }
499
+ else {
500
+ console.error(chalk.red(`✗ Plugin '${pluginName}' test failed`));
501
+ if (result.error) {
502
+ console.error(chalk.gray(` Error: ${result.error}`));
503
+ }
504
+ }
505
+ }
506
+ }
507
+ /**
508
+ * Show detailed info about a plugin including its config schema
509
+ */
510
+ export async function handlePluginInfo(ctx, pluginName) {
511
+ const plugin = await loadPlugin(pluginName);
512
+ if (!plugin) {
513
+ if (ctx.jsonOutput) {
514
+ console.log(JSON.stringify({
515
+ success: false,
516
+ plugin: pluginName,
517
+ error: "Plugin not installed",
518
+ }));
519
+ }
520
+ else {
521
+ console.error(chalk.red(`✗ Plugin '${pluginName}' not installed`));
522
+ console.log(chalk.gray(`Install with: sudocode plugin install ${pluginName}`));
523
+ }
524
+ return;
525
+ }
526
+ // Get current config if exists
527
+ const config = getConfig(ctx.outputDir);
528
+ const integrations = config.integrations || {};
529
+ const currentConfig = integrations[pluginName];
530
+ if (ctx.jsonOutput) {
531
+ console.log(JSON.stringify({
532
+ success: true,
533
+ plugin: {
534
+ name: plugin.name,
535
+ displayName: plugin.displayName,
536
+ version: plugin.version,
537
+ description: plugin.description,
538
+ configSchema: plugin.configSchema,
539
+ },
540
+ configured: !!currentConfig,
541
+ currentConfig,
542
+ }));
543
+ }
544
+ else {
545
+ console.log(chalk.blue.bold(plugin.displayName));
546
+ console.log(chalk.gray(plugin.description || "No description"));
547
+ console.log();
548
+ console.log(` ${chalk.bold("Version:")} ${plugin.version}`);
549
+ console.log(` ${chalk.bold("Package:")} ${resolvePluginPath(pluginName)}`);
550
+ console.log(` ${chalk.bold("Configured:")} ${currentConfig ? chalk.green("Yes") : chalk.yellow("No")}`);
551
+ if (currentConfig) {
552
+ console.log(` ${chalk.bold("Enabled:")} ${currentConfig.enabled ? chalk.green("Yes") : chalk.gray("No")}`);
553
+ }
554
+ console.log();
555
+ // Show config schema
556
+ if (plugin.configSchema) {
557
+ console.log(chalk.bold("Configuration Options:"));
558
+ console.log();
559
+ for (const [key, prop] of Object.entries(plugin.configSchema.properties)) {
560
+ const isRequired = plugin.configSchema.required?.includes(key) || prop.required;
561
+ const reqLabel = isRequired ? chalk.red("*") : "";
562
+ console.log(` ${chalk.cyan(key)}${reqLabel} (${prop.type})`);
563
+ if (prop.description) {
564
+ console.log(` ${chalk.gray(prop.description)}`);
565
+ }
566
+ if (prop.default !== undefined) {
567
+ console.log(` ${chalk.gray(`Default: ${JSON.stringify(prop.default)}`)}`);
568
+ }
569
+ console.log();
570
+ }
571
+ console.log(chalk.gray("* = required"));
572
+ }
573
+ // Show example command
574
+ console.log();
575
+ console.log(chalk.bold("Quick Start:"));
576
+ if (!currentConfig) {
577
+ // Build example command from schema
578
+ const exampleOpts = [];
579
+ if (plugin.configSchema) {
580
+ for (const [key, prop] of Object.entries(plugin.configSchema.properties)) {
581
+ const isRequired = plugin.configSchema.required?.includes(key) || prop.required;
582
+ if (isRequired) {
583
+ const example = prop.default ?? (prop.type === "string" ? `<${key}>` : "");
584
+ exampleOpts.push(`--set ${key}=${example}`);
585
+ }
586
+ }
587
+ }
588
+ console.log(chalk.gray(` sudocode plugin configure ${pluginName} ${exampleOpts.join(" ")}`));
589
+ }
590
+ else {
591
+ console.log(chalk.gray(` sudocode plugin test ${pluginName}`));
592
+ }
593
+ }
594
+ }
595
+ //# sourceMappingURL=plugin-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-commands.js","sourceRoot":"","sources":["../../src/cli/plugin-commands.ts"],"names":[],"mappings":"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"}