@wundr.io/cli 1.0.12 → 1.0.14
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.
- package/dist/ai/ai-service.d.ts +152 -0
- package/dist/ai/ai-service.d.ts.map +1 -0
- package/dist/ai/ai-service.js +430 -0
- package/dist/ai/ai-service.js.map +1 -0
- package/dist/ai/claude-client.d.ts +130 -0
- package/dist/ai/claude-client.d.ts.map +1 -0
- package/dist/ai/claude-client.js +340 -0
- package/dist/ai/claude-client.js.map +1 -0
- package/dist/ai/conversation-manager.d.ts +164 -0
- package/dist/ai/conversation-manager.d.ts.map +1 -0
- package/dist/ai/conversation-manager.js +614 -0
- package/dist/ai/conversation-manager.js.map +1 -0
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +8 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/cli.d.ts +36 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +192 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/ai.d.ts +89 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +954 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/alignment.d.ts +78 -0
- package/dist/commands/alignment.d.ts.map +1 -0
- package/dist/commands/alignment.js +817 -0
- package/dist/commands/alignment.js.map +1 -0
- package/dist/commands/analyze-optimized.d.ts +14 -0
- package/dist/commands/analyze-optimized.d.ts.map +1 -0
- package/dist/commands/analyze-optimized.js +609 -0
- package/dist/commands/analyze-optimized.js.map +1 -0
- package/dist/commands/analyze.d.ts +65 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +435 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/batch.d.ts +93 -0
- package/dist/commands/batch.d.ts.map +1 -0
- package/dist/commands/batch.js +854 -0
- package/dist/commands/batch.js.map +1 -0
- package/dist/commands/chat.d.ts +72 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +678 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/claude-init.d.ts +28 -0
- package/dist/commands/claude-init.d.ts.map +1 -0
- package/dist/commands/claude-init.js +591 -0
- package/dist/commands/claude-init.js.map +1 -0
- package/dist/commands/claude-setup.d.ts +119 -0
- package/dist/commands/claude-setup.d.ts.map +1 -0
- package/dist/commands/claude-setup.js +1079 -0
- package/dist/commands/claude-setup.js.map +1 -0
- package/dist/commands/computer-setup.d.ts +8 -0
- package/dist/commands/computer-setup.d.ts.map +1 -0
- package/dist/commands/computer-setup.js +877 -0
- package/dist/commands/computer-setup.js.map +1 -0
- package/dist/commands/create-command.d.ts +7 -0
- package/dist/commands/create-command.d.ts.map +1 -0
- package/dist/commands/create-command.js +158 -0
- package/dist/commands/create-command.js.map +1 -0
- package/dist/commands/create.d.ts +74 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +556 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/dashboard.d.ts +91 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +538 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/govern.d.ts +70 -0
- package/dist/commands/govern.d.ts.map +1 -0
- package/dist/commands/govern.js +481 -0
- package/dist/commands/govern.js.map +1 -0
- package/dist/commands/governance.d.ts +17 -0
- package/dist/commands/governance.d.ts.map +1 -0
- package/dist/commands/governance.js +703 -0
- package/dist/commands/governance.js.map +1 -0
- package/dist/commands/guardian.d.ts +20 -0
- package/dist/commands/guardian.d.ts.map +1 -0
- package/dist/commands/guardian.js +597 -0
- package/dist/commands/guardian.js.map +1 -0
- package/dist/commands/init.d.ts +59 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +650 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/orchestrator.d.ts +7 -0
- package/dist/commands/orchestrator.d.ts.map +1 -0
- package/dist/commands/orchestrator.js +578 -0
- package/dist/commands/orchestrator.js.map +1 -0
- package/dist/commands/performance-optimizer.d.ts +30 -0
- package/dist/commands/performance-optimizer.d.ts.map +1 -0
- package/dist/commands/performance-optimizer.js +650 -0
- package/dist/commands/performance-optimizer.js.map +1 -0
- package/dist/commands/plugins.d.ts +87 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +685 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/rag.d.ts +7 -0
- package/dist/commands/rag.d.ts.map +1 -0
- package/dist/commands/rag.js +751 -0
- package/dist/commands/rag.js.map +1 -0
- package/dist/commands/session.d.ts +41 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +441 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup.d.ts +24 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +172 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/test-init.d.ts +9 -0
- package/dist/commands/test-init.d.ts.map +1 -0
- package/dist/commands/test-init.js +222 -0
- package/dist/commands/test-init.js.map +1 -0
- package/dist/commands/test.d.ts +25 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +217 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/watch.d.ts +76 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +613 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/commands/worktree.d.ts +63 -0
- package/dist/commands/worktree.d.ts.map +1 -0
- package/dist/commands/worktree.js +774 -0
- package/dist/commands/worktree.js.map +1 -0
- package/dist/context/context-manager.d.ts +155 -0
- package/dist/context/context-manager.d.ts.map +1 -0
- package/dist/context/context-manager.js +383 -0
- package/dist/context/context-manager.js.map +1 -0
- package/dist/context/index.d.ts +3 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +6 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/session-manager.d.ts +207 -0
- package/dist/context/session-manager.d.ts.map +1 -0
- package/dist/context/session-manager.js +686 -0
- package/dist/context/session-manager.js.map +1 -0
- package/dist/framework/command-interface.d.ts +349 -0
- package/dist/framework/command-interface.d.ts.map +1 -0
- package/dist/framework/command-interface.js +101 -0
- package/dist/framework/command-interface.js.map +1 -0
- package/dist/framework/command-registry.d.ts +173 -0
- package/dist/framework/command-registry.d.ts.map +1 -0
- package/dist/framework/command-registry.js +734 -0
- package/dist/framework/command-registry.js.map +1 -0
- package/dist/framework/completion-exporter.d.ts +79 -0
- package/dist/framework/completion-exporter.d.ts.map +1 -0
- package/dist/framework/completion-exporter.js +259 -0
- package/dist/framework/completion-exporter.js.map +1 -0
- package/dist/framework/debug-logger.d.ts +163 -0
- package/dist/framework/debug-logger.d.ts.map +1 -0
- package/dist/framework/debug-logger.js +373 -0
- package/dist/framework/debug-logger.js.map +1 -0
- package/dist/framework/error-handler.d.ts +196 -0
- package/dist/framework/error-handler.d.ts.map +1 -0
- package/dist/framework/error-handler.js +613 -0
- package/dist/framework/error-handler.js.map +1 -0
- package/dist/framework/help-generator.d.ts +78 -0
- package/dist/framework/help-generator.d.ts.map +1 -0
- package/dist/framework/help-generator.js +414 -0
- package/dist/framework/help-generator.js.map +1 -0
- package/dist/framework/index.d.ts +62 -0
- package/dist/framework/index.d.ts.map +1 -0
- package/dist/framework/index.js +95 -0
- package/dist/framework/index.js.map +1 -0
- package/dist/framework/interactive-repl.d.ts +138 -0
- package/dist/framework/interactive-repl.d.ts.map +1 -0
- package/dist/framework/interactive-repl.js +567 -0
- package/dist/framework/interactive-repl.js.map +1 -0
- package/dist/framework/output-formatter.d.ts +274 -0
- package/dist/framework/output-formatter.d.ts.map +1 -0
- package/dist/framework/output-formatter.js +545 -0
- package/dist/framework/output-formatter.js.map +1 -0
- package/dist/framework/progress-manager.d.ts +192 -0
- package/dist/framework/progress-manager.d.ts.map +1 -0
- package/dist/framework/progress-manager.js +408 -0
- package/dist/framework/progress-manager.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/interactive/interactive-mode.d.ts +76 -0
- package/dist/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/interactive/interactive-mode.js +732 -0
- package/dist/interactive/interactive-mode.js.map +1 -0
- package/dist/nlp/command-mapper.d.ts +174 -0
- package/dist/nlp/command-mapper.d.ts.map +1 -0
- package/dist/nlp/command-mapper.js +624 -0
- package/dist/nlp/command-mapper.js.map +1 -0
- package/dist/nlp/command-parser.d.ts +106 -0
- package/dist/nlp/command-parser.d.ts.map +1 -0
- package/dist/nlp/command-parser.js +417 -0
- package/dist/nlp/command-parser.js.map +1 -0
- package/dist/nlp/index.d.ts +5 -0
- package/dist/nlp/index.d.ts.map +1 -0
- package/dist/nlp/index.js +8 -0
- package/dist/nlp/index.js.map +1 -0
- package/dist/nlp/intent-classifier.d.ts +59 -0
- package/dist/nlp/intent-classifier.d.ts.map +1 -0
- package/dist/nlp/intent-classifier.js +384 -0
- package/dist/nlp/intent-classifier.js.map +1 -0
- package/dist/nlp/intent-parser.d.ts +152 -0
- package/dist/nlp/intent-parser.d.ts.map +1 -0
- package/dist/nlp/intent-parser.js +746 -0
- package/dist/nlp/intent-parser.js.map +1 -0
- package/dist/plugins/plugin-manager.d.ts +121 -0
- package/dist/plugins/plugin-manager.d.ts.map +1 -0
- package/dist/plugins/plugin-manager.js +606 -0
- package/dist/plugins/plugin-manager.js.map +1 -0
- package/dist/types/index.d.ts +224 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/backup-rollback-manager.d.ts +72 -0
- package/dist/utils/backup-rollback-manager.d.ts.map +1 -0
- package/dist/utils/backup-rollback-manager.js +288 -0
- package/dist/utils/backup-rollback-manager.js.map +1 -0
- package/dist/utils/claude-config-installer.d.ts +98 -0
- package/dist/utils/claude-config-installer.d.ts.map +1 -0
- package/dist/utils/claude-config-installer.js +678 -0
- package/dist/utils/claude-config-installer.js.map +1 -0
- package/dist/utils/config-manager.d.ts +73 -0
- package/dist/utils/config-manager.d.ts.map +1 -0
- package/dist/utils/config-manager.js +339 -0
- package/dist/utils/config-manager.js.map +1 -0
- package/dist/utils/error-handler.d.ts +46 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +169 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/logger.d.ts +25 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +105 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +6 -6
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Help Generator - Generates structured help text from command metadata.
|
|
3
|
+
*
|
|
4
|
+
* Produces:
|
|
5
|
+
* - Categorized command listings
|
|
6
|
+
* - Per-command detailed help with examples
|
|
7
|
+
* - Man-page style output for documentation
|
|
8
|
+
* - Markdown help for README generation
|
|
9
|
+
* - Search across all commands
|
|
10
|
+
*
|
|
11
|
+
* @module framework/help-generator
|
|
12
|
+
*/
|
|
13
|
+
import type { CommandDefinition } from './command-interface';
|
|
14
|
+
import type { CommandRegistry } from './command-registry';
|
|
15
|
+
/**
|
|
16
|
+
* Options for help text generation.
|
|
17
|
+
*/
|
|
18
|
+
export interface HelpGeneratorOptions {
|
|
19
|
+
/** Program name. Defaults to 'wundr'. */
|
|
20
|
+
programName?: string;
|
|
21
|
+
/** Maximum line width. Defaults to terminal width or 80. */
|
|
22
|
+
maxWidth?: number;
|
|
23
|
+
/** Whether to use colors. Defaults to TTY detection. */
|
|
24
|
+
color?: boolean;
|
|
25
|
+
/** Output format. */
|
|
26
|
+
format?: 'terminal' | 'markdown' | 'plain';
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Result of a command search.
|
|
30
|
+
*/
|
|
31
|
+
export interface SearchResult {
|
|
32
|
+
command: CommandDefinition;
|
|
33
|
+
matchType: 'name' | 'alias' | 'description' | 'category';
|
|
34
|
+
score: number;
|
|
35
|
+
}
|
|
36
|
+
export declare class HelpGenerator {
|
|
37
|
+
private registry;
|
|
38
|
+
private programName;
|
|
39
|
+
private maxWidth;
|
|
40
|
+
private useColor;
|
|
41
|
+
private format;
|
|
42
|
+
constructor(registry: CommandRegistry, options?: HelpGeneratorOptions);
|
|
43
|
+
/**
|
|
44
|
+
* Generate the main help text showing all commands grouped by category.
|
|
45
|
+
*/
|
|
46
|
+
generateMainHelp(): string;
|
|
47
|
+
/**
|
|
48
|
+
* Generate detailed help for a specific command.
|
|
49
|
+
*/
|
|
50
|
+
generateCommandHelp(command: CommandDefinition): string;
|
|
51
|
+
/**
|
|
52
|
+
* Search for commands matching a query string.
|
|
53
|
+
*/
|
|
54
|
+
search(query: string): SearchResult[];
|
|
55
|
+
/**
|
|
56
|
+
* Generate the main help as Markdown.
|
|
57
|
+
*/
|
|
58
|
+
private generateMarkdownMainHelp;
|
|
59
|
+
/**
|
|
60
|
+
* Generate per-command help as Markdown.
|
|
61
|
+
*/
|
|
62
|
+
private generateMarkdownCommandHelp;
|
|
63
|
+
/**
|
|
64
|
+
* Build a usage line from command definition.
|
|
65
|
+
*/
|
|
66
|
+
private buildUsageLine;
|
|
67
|
+
/**
|
|
68
|
+
* Simple fuzzy matching score between query and target.
|
|
69
|
+
* Returns 0-1 where 1 is an exact match.
|
|
70
|
+
*/
|
|
71
|
+
private fuzzyScore;
|
|
72
|
+
private heading;
|
|
73
|
+
private sectionTitle;
|
|
74
|
+
private highlight;
|
|
75
|
+
private dim;
|
|
76
|
+
private warn;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=help-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-generator.d.ts","sourceRoot":"","sources":["../../src/framework/help-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,qBAAqB,CAAC;AAE9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAM1D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,qBAAqB;IACrB,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,UAAU,CAAC;IACzD,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,qBAAa,aAAa;IAOtB,OAAO,CAAC,QAAQ;IANlB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,MAAM,CAAoC;gBAGxC,QAAQ,EAAE,eAAe,EACjC,OAAO,GAAE,oBAAyB;IAYpC;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAkF1B;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM;IAwGvD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE;IAiErC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAwDhC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAmEnC;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;OAGG;IACH,OAAO,CAAC,UAAU;IA0BlB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,GAAG;IAKX,OAAO,CAAC,IAAI;CAIb"}
|
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Help Generator - Generates structured help text from command metadata.
|
|
4
|
+
*
|
|
5
|
+
* Produces:
|
|
6
|
+
* - Categorized command listings
|
|
7
|
+
* - Per-command detailed help with examples
|
|
8
|
+
* - Man-page style output for documentation
|
|
9
|
+
* - Markdown help for README generation
|
|
10
|
+
* - Search across all commands
|
|
11
|
+
*
|
|
12
|
+
* @module framework/help-generator
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.HelpGenerator = void 0;
|
|
16
|
+
const tslib_1 = require("tslib");
|
|
17
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
18
|
+
const command_interface_1 = require("./command-interface");
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Help Generator
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
class HelpGenerator {
|
|
23
|
+
registry;
|
|
24
|
+
programName;
|
|
25
|
+
maxWidth;
|
|
26
|
+
useColor;
|
|
27
|
+
format;
|
|
28
|
+
constructor(registry, options = {}) {
|
|
29
|
+
this.registry = registry;
|
|
30
|
+
this.programName = options.programName ?? 'wundr';
|
|
31
|
+
this.maxWidth = options.maxWidth ?? process.stdout.columns ?? 80;
|
|
32
|
+
this.useColor = options.color ?? process.stdout.isTTY === true;
|
|
33
|
+
this.format = options.format ?? 'terminal';
|
|
34
|
+
}
|
|
35
|
+
// -------------------------------------------------------------------------
|
|
36
|
+
// Main Help
|
|
37
|
+
// -------------------------------------------------------------------------
|
|
38
|
+
/**
|
|
39
|
+
* Generate the main help text showing all commands grouped by category.
|
|
40
|
+
*/
|
|
41
|
+
generateMainHelp() {
|
|
42
|
+
if (this.format === 'markdown') {
|
|
43
|
+
return this.generateMarkdownMainHelp();
|
|
44
|
+
}
|
|
45
|
+
const lines = [];
|
|
46
|
+
// Header
|
|
47
|
+
lines.push('');
|
|
48
|
+
lines.push(this.heading(`${this.programName} - CLI Tool`));
|
|
49
|
+
lines.push('');
|
|
50
|
+
// Usage
|
|
51
|
+
lines.push(this.sectionTitle('Usage'));
|
|
52
|
+
lines.push(` ${this.programName} <command> [options]`);
|
|
53
|
+
lines.push('');
|
|
54
|
+
// Commands by category
|
|
55
|
+
const grouped = this.registry.grouped();
|
|
56
|
+
const categories = Array.from(grouped.keys()).sort();
|
|
57
|
+
for (const category of categories) {
|
|
58
|
+
const commands = grouped.get(category);
|
|
59
|
+
if (!commands || commands.length === 0)
|
|
60
|
+
continue;
|
|
61
|
+
// Skip hidden commands
|
|
62
|
+
const visible = commands.filter(cmd => !cmd.hidden && !cmd.name.includes(':'));
|
|
63
|
+
if (visible.length === 0)
|
|
64
|
+
continue;
|
|
65
|
+
const label = category === 'uncategorized'
|
|
66
|
+
? 'Other Commands'
|
|
67
|
+
: (command_interface_1.CATEGORY_LABELS[category] ?? category);
|
|
68
|
+
lines.push(this.sectionTitle(label));
|
|
69
|
+
// Find max name width for alignment
|
|
70
|
+
const maxNameWidth = Math.max(...visible.map(cmd => {
|
|
71
|
+
const aliases = cmd.aliases ? `, ${cmd.aliases.join(', ')}` : '';
|
|
72
|
+
return cmd.name.length + aliases.length;
|
|
73
|
+
}));
|
|
74
|
+
for (const cmd of visible) {
|
|
75
|
+
const aliases = cmd.aliases ? `, ${cmd.aliases.join(', ')}` : '';
|
|
76
|
+
const nameCol = (cmd.name + aliases).padEnd(maxNameWidth + 2);
|
|
77
|
+
lines.push(` ${this.highlight(nameCol)} ${cmd.description}`);
|
|
78
|
+
}
|
|
79
|
+
lines.push('');
|
|
80
|
+
}
|
|
81
|
+
// Global options
|
|
82
|
+
lines.push(this.sectionTitle('Global Options'));
|
|
83
|
+
lines.push(' --verbose Enable verbose logging');
|
|
84
|
+
lines.push(' --quiet Suppress output');
|
|
85
|
+
lines.push(' --json Output as JSON');
|
|
86
|
+
lines.push(' --no-color Disable colored output');
|
|
87
|
+
lines.push(' --dry-run Show what would be done');
|
|
88
|
+
lines.push(' --config <path> Specify config file');
|
|
89
|
+
lines.push(' -h, --help Show help');
|
|
90
|
+
lines.push(' -v, --version Show version');
|
|
91
|
+
lines.push('');
|
|
92
|
+
// Footer
|
|
93
|
+
lines.push(this.dim(`Run '${this.programName} <command> --help' for detailed help on a command.`));
|
|
94
|
+
lines.push('');
|
|
95
|
+
return lines.join('\n');
|
|
96
|
+
}
|
|
97
|
+
// -------------------------------------------------------------------------
|
|
98
|
+
// Command Help
|
|
99
|
+
// -------------------------------------------------------------------------
|
|
100
|
+
/**
|
|
101
|
+
* Generate detailed help for a specific command.
|
|
102
|
+
*/
|
|
103
|
+
generateCommandHelp(command) {
|
|
104
|
+
if (this.format === 'markdown') {
|
|
105
|
+
return this.generateMarkdownCommandHelp(command);
|
|
106
|
+
}
|
|
107
|
+
const lines = [];
|
|
108
|
+
// Header
|
|
109
|
+
lines.push('');
|
|
110
|
+
lines.push(this.heading(command.name));
|
|
111
|
+
lines.push(` ${command.description}`);
|
|
112
|
+
lines.push('');
|
|
113
|
+
// Aliases
|
|
114
|
+
if (command.aliases && command.aliases.length > 0) {
|
|
115
|
+
lines.push(this.sectionTitle('Aliases'));
|
|
116
|
+
lines.push(` ${command.aliases.join(', ')}`);
|
|
117
|
+
lines.push('');
|
|
118
|
+
}
|
|
119
|
+
// Usage
|
|
120
|
+
lines.push(this.sectionTitle('Usage'));
|
|
121
|
+
const usage = this.buildUsageLine(command);
|
|
122
|
+
lines.push(` ${usage}`);
|
|
123
|
+
lines.push('');
|
|
124
|
+
// Arguments
|
|
125
|
+
if (command.arguments && command.arguments.length > 0) {
|
|
126
|
+
lines.push(this.sectionTitle('Arguments'));
|
|
127
|
+
const maxArgWidth = Math.max(...command.arguments.map(a => a.name.length));
|
|
128
|
+
for (const arg of command.arguments) {
|
|
129
|
+
const nameCol = arg.name.padEnd(maxArgWidth + 2);
|
|
130
|
+
const required = arg.required
|
|
131
|
+
? this.warn('(required)')
|
|
132
|
+
: this.dim('(optional)');
|
|
133
|
+
const defaultVal = arg.defaultValue
|
|
134
|
+
? this.dim(` [default: ${arg.defaultValue}]`)
|
|
135
|
+
: '';
|
|
136
|
+
lines.push(` ${this.highlight(nameCol)} ${arg.description} ${required}${defaultVal}`);
|
|
137
|
+
}
|
|
138
|
+
lines.push('');
|
|
139
|
+
}
|
|
140
|
+
// Options
|
|
141
|
+
if (command.options && command.options.length > 0) {
|
|
142
|
+
lines.push(this.sectionTitle('Options'));
|
|
143
|
+
const maxFlagWidth = Math.max(...command.options.map(o => o.flags.length));
|
|
144
|
+
for (const opt of command.options) {
|
|
145
|
+
const flagCol = opt.flags.padEnd(maxFlagWidth + 2);
|
|
146
|
+
const required = opt.required ? this.warn('(required)') : '';
|
|
147
|
+
const choices = opt.choices
|
|
148
|
+
? this.dim(` [${opt.choices.join('|')}]`)
|
|
149
|
+
: '';
|
|
150
|
+
const defaultVal = opt.defaultValue !== undefined
|
|
151
|
+
? this.dim(` [default: ${opt.defaultValue}]`)
|
|
152
|
+
: '';
|
|
153
|
+
const envVar = opt.envVar ? this.dim(` [env: ${opt.envVar}]`) : '';
|
|
154
|
+
lines.push(` ${this.highlight(flagCol)} ${opt.description}${required}${choices}${defaultVal}${envVar}`);
|
|
155
|
+
}
|
|
156
|
+
lines.push('');
|
|
157
|
+
}
|
|
158
|
+
// Subcommands
|
|
159
|
+
if (command.subcommands && command.subcommands.length > 0) {
|
|
160
|
+
lines.push(this.sectionTitle('Subcommands'));
|
|
161
|
+
const maxSubWidth = Math.max(...command.subcommands.map(s => s.name.length));
|
|
162
|
+
for (const sub of command.subcommands) {
|
|
163
|
+
const nameCol = sub.name.padEnd(maxSubWidth + 2);
|
|
164
|
+
lines.push(` ${this.highlight(nameCol)} ${sub.description}`);
|
|
165
|
+
}
|
|
166
|
+
lines.push('');
|
|
167
|
+
}
|
|
168
|
+
// Examples
|
|
169
|
+
if (command.examples && command.examples.length > 0) {
|
|
170
|
+
lines.push(this.sectionTitle('Examples'));
|
|
171
|
+
for (const ex of command.examples) {
|
|
172
|
+
lines.push(` ${this.highlight(`$ ${ex.command}`)}`);
|
|
173
|
+
lines.push(` ${this.dim(ex.description)}`);
|
|
174
|
+
lines.push('');
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return lines.join('\n');
|
|
178
|
+
}
|
|
179
|
+
// -------------------------------------------------------------------------
|
|
180
|
+
// Search
|
|
181
|
+
// -------------------------------------------------------------------------
|
|
182
|
+
/**
|
|
183
|
+
* Search for commands matching a query string.
|
|
184
|
+
*/
|
|
185
|
+
search(query) {
|
|
186
|
+
const normalizedQuery = query.toLowerCase();
|
|
187
|
+
const results = [];
|
|
188
|
+
for (const command of this.registry.list()) {
|
|
189
|
+
if (command.hidden)
|
|
190
|
+
continue;
|
|
191
|
+
let bestScore = 0;
|
|
192
|
+
let matchType = 'name';
|
|
193
|
+
// Name match
|
|
194
|
+
const nameScore = this.fuzzyScore(normalizedQuery, command.name.toLowerCase());
|
|
195
|
+
if (nameScore > bestScore) {
|
|
196
|
+
bestScore = nameScore;
|
|
197
|
+
matchType = 'name';
|
|
198
|
+
}
|
|
199
|
+
// Alias match
|
|
200
|
+
if (command.aliases) {
|
|
201
|
+
for (const alias of command.aliases) {
|
|
202
|
+
const aliasScore = this.fuzzyScore(normalizedQuery, alias.toLowerCase());
|
|
203
|
+
if (aliasScore > bestScore) {
|
|
204
|
+
bestScore = aliasScore;
|
|
205
|
+
matchType = 'alias';
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// Description match
|
|
210
|
+
const descScore = this.fuzzyScore(normalizedQuery, command.description.toLowerCase()) *
|
|
211
|
+
0.6;
|
|
212
|
+
if (descScore > bestScore) {
|
|
213
|
+
bestScore = descScore;
|
|
214
|
+
matchType = 'description';
|
|
215
|
+
}
|
|
216
|
+
// Category match
|
|
217
|
+
if (command.category) {
|
|
218
|
+
const catLabel = command_interface_1.CATEGORY_LABELS[command.category]?.toLowerCase() ?? '';
|
|
219
|
+
const catScore = this.fuzzyScore(normalizedQuery, catLabel) * 0.4;
|
|
220
|
+
if (catScore > bestScore) {
|
|
221
|
+
bestScore = catScore;
|
|
222
|
+
matchType = 'category';
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (bestScore > 0.3) {
|
|
226
|
+
results.push({ command, matchType, score: bestScore });
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return results.sort((a, b) => b.score - a.score);
|
|
230
|
+
}
|
|
231
|
+
// -------------------------------------------------------------------------
|
|
232
|
+
// Markdown Output
|
|
233
|
+
// -------------------------------------------------------------------------
|
|
234
|
+
/**
|
|
235
|
+
* Generate the main help as Markdown.
|
|
236
|
+
*/
|
|
237
|
+
generateMarkdownMainHelp() {
|
|
238
|
+
const lines = [];
|
|
239
|
+
lines.push(`# ${this.programName} CLI`);
|
|
240
|
+
lines.push('');
|
|
241
|
+
lines.push('## Usage');
|
|
242
|
+
lines.push('');
|
|
243
|
+
lines.push('```');
|
|
244
|
+
lines.push(`${this.programName} <command> [options]`);
|
|
245
|
+
lines.push('```');
|
|
246
|
+
lines.push('');
|
|
247
|
+
const grouped = this.registry.grouped();
|
|
248
|
+
const categories = Array.from(grouped.keys()).sort();
|
|
249
|
+
for (const category of categories) {
|
|
250
|
+
const commands = grouped.get(category);
|
|
251
|
+
if (!commands || commands.length === 0)
|
|
252
|
+
continue;
|
|
253
|
+
const visible = commands.filter(cmd => !cmd.hidden && !cmd.name.includes(':'));
|
|
254
|
+
if (visible.length === 0)
|
|
255
|
+
continue;
|
|
256
|
+
const label = category === 'uncategorized'
|
|
257
|
+
? 'Other Commands'
|
|
258
|
+
: (command_interface_1.CATEGORY_LABELS[category] ?? category);
|
|
259
|
+
lines.push(`## ${label}`);
|
|
260
|
+
lines.push('');
|
|
261
|
+
lines.push('| Command | Description |');
|
|
262
|
+
lines.push('|---------|-------------|');
|
|
263
|
+
for (const cmd of visible) {
|
|
264
|
+
const aliases = cmd.aliases ? ` (${cmd.aliases.join(', ')})` : '';
|
|
265
|
+
lines.push(`| \`${cmd.name}\`${aliases} | ${cmd.description} |`);
|
|
266
|
+
}
|
|
267
|
+
lines.push('');
|
|
268
|
+
}
|
|
269
|
+
lines.push('## Global Options');
|
|
270
|
+
lines.push('');
|
|
271
|
+
lines.push('| Option | Description |');
|
|
272
|
+
lines.push('|--------|-------------|');
|
|
273
|
+
lines.push('| `--verbose` | Enable verbose logging |');
|
|
274
|
+
lines.push('| `--quiet` | Suppress output |');
|
|
275
|
+
lines.push('| `--json` | Output as JSON |');
|
|
276
|
+
lines.push('| `--no-color` | Disable colored output |');
|
|
277
|
+
lines.push('| `--dry-run` | Show what would be done |');
|
|
278
|
+
lines.push('| `--config <path>` | Specify config file |');
|
|
279
|
+
lines.push('');
|
|
280
|
+
return lines.join('\n');
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Generate per-command help as Markdown.
|
|
284
|
+
*/
|
|
285
|
+
generateMarkdownCommandHelp(command) {
|
|
286
|
+
const lines = [];
|
|
287
|
+
lines.push(`# ${command.name}`);
|
|
288
|
+
lines.push('');
|
|
289
|
+
lines.push(command.description);
|
|
290
|
+
lines.push('');
|
|
291
|
+
if (command.aliases && command.aliases.length > 0) {
|
|
292
|
+
lines.push(`**Aliases:** ${command.aliases.join(', ')}`);
|
|
293
|
+
lines.push('');
|
|
294
|
+
}
|
|
295
|
+
lines.push('## Usage');
|
|
296
|
+
lines.push('');
|
|
297
|
+
lines.push('```');
|
|
298
|
+
lines.push(this.buildUsageLine(command));
|
|
299
|
+
lines.push('```');
|
|
300
|
+
lines.push('');
|
|
301
|
+
if (command.arguments && command.arguments.length > 0) {
|
|
302
|
+
lines.push('## Arguments');
|
|
303
|
+
lines.push('');
|
|
304
|
+
lines.push('| Name | Description | Required | Default |');
|
|
305
|
+
lines.push('|------|-------------|----------|---------|');
|
|
306
|
+
for (const arg of command.arguments) {
|
|
307
|
+
lines.push(`| \`${arg.name}\` | ${arg.description} | ${arg.required ? 'Yes' : 'No'} | ${arg.defaultValue ?? '-'} |`);
|
|
308
|
+
}
|
|
309
|
+
lines.push('');
|
|
310
|
+
}
|
|
311
|
+
if (command.options && command.options.length > 0) {
|
|
312
|
+
lines.push('## Options');
|
|
313
|
+
lines.push('');
|
|
314
|
+
lines.push('| Flag | Description | Required | Default |');
|
|
315
|
+
lines.push('|------|-------------|----------|---------|');
|
|
316
|
+
for (const opt of command.options) {
|
|
317
|
+
const defaultVal = opt.defaultValue !== undefined ? String(opt.defaultValue) : '-';
|
|
318
|
+
lines.push(`| \`${opt.flags}\` | ${opt.description} | ${opt.required ? 'Yes' : 'No'} | ${defaultVal} |`);
|
|
319
|
+
}
|
|
320
|
+
lines.push('');
|
|
321
|
+
}
|
|
322
|
+
if (command.examples && command.examples.length > 0) {
|
|
323
|
+
lines.push('## Examples');
|
|
324
|
+
lines.push('');
|
|
325
|
+
for (const ex of command.examples) {
|
|
326
|
+
lines.push(`**${ex.description}:**`);
|
|
327
|
+
lines.push('```');
|
|
328
|
+
lines.push(ex.command);
|
|
329
|
+
lines.push('```');
|
|
330
|
+
lines.push('');
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return lines.join('\n');
|
|
334
|
+
}
|
|
335
|
+
// -------------------------------------------------------------------------
|
|
336
|
+
// Private Helpers
|
|
337
|
+
// -------------------------------------------------------------------------
|
|
338
|
+
/**
|
|
339
|
+
* Build a usage line from command definition.
|
|
340
|
+
*/
|
|
341
|
+
buildUsageLine(command) {
|
|
342
|
+
const parts = [this.programName, command.name];
|
|
343
|
+
if (command.arguments) {
|
|
344
|
+
for (const arg of command.arguments) {
|
|
345
|
+
if (arg.required) {
|
|
346
|
+
parts.push(arg.variadic ? `<${arg.name}...>` : `<${arg.name}>`);
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
parts.push(arg.variadic ? `[${arg.name}...]` : `[${arg.name}]`);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
if (command.options && command.options.length > 0) {
|
|
354
|
+
parts.push('[options]');
|
|
355
|
+
}
|
|
356
|
+
return parts.join(' ');
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Simple fuzzy matching score between query and target.
|
|
360
|
+
* Returns 0-1 where 1 is an exact match.
|
|
361
|
+
*/
|
|
362
|
+
fuzzyScore(query, target) {
|
|
363
|
+
if (query === target)
|
|
364
|
+
return 1;
|
|
365
|
+
if (target.startsWith(query))
|
|
366
|
+
return 0.9;
|
|
367
|
+
if (target.includes(query))
|
|
368
|
+
return 0.7;
|
|
369
|
+
// Character-by-character fuzzy
|
|
370
|
+
let qi = 0;
|
|
371
|
+
let ti = 0;
|
|
372
|
+
let matched = 0;
|
|
373
|
+
while (qi < query.length && ti < target.length) {
|
|
374
|
+
if (query[qi] === target[ti]) {
|
|
375
|
+
matched++;
|
|
376
|
+
qi++;
|
|
377
|
+
}
|
|
378
|
+
ti++;
|
|
379
|
+
}
|
|
380
|
+
if (qi < query.length)
|
|
381
|
+
return 0;
|
|
382
|
+
return matched / target.length;
|
|
383
|
+
}
|
|
384
|
+
// -------------------------------------------------------------------------
|
|
385
|
+
// Text formatting helpers
|
|
386
|
+
// -------------------------------------------------------------------------
|
|
387
|
+
heading(text) {
|
|
388
|
+
if (!this.useColor)
|
|
389
|
+
return text;
|
|
390
|
+
return chalk_1.default.cyan.bold(text);
|
|
391
|
+
}
|
|
392
|
+
sectionTitle(text) {
|
|
393
|
+
if (!this.useColor)
|
|
394
|
+
return `${text}:`;
|
|
395
|
+
return chalk_1.default.white.bold(`${text}:`);
|
|
396
|
+
}
|
|
397
|
+
highlight(text) {
|
|
398
|
+
if (!this.useColor)
|
|
399
|
+
return text;
|
|
400
|
+
return chalk_1.default.green(text);
|
|
401
|
+
}
|
|
402
|
+
dim(text) {
|
|
403
|
+
if (!this.useColor)
|
|
404
|
+
return text;
|
|
405
|
+
return chalk_1.default.gray(text);
|
|
406
|
+
}
|
|
407
|
+
warn(text) {
|
|
408
|
+
if (!this.useColor)
|
|
409
|
+
return text;
|
|
410
|
+
return chalk_1.default.yellow(text);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
exports.HelpGenerator = HelpGenerator;
|
|
414
|
+
//# sourceMappingURL=help-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-generator.js","sourceRoot":"","sources":["../../src/framework/help-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wundr CLI Framework - Public API
|
|
3
|
+
*
|
|
4
|
+
* This module provides the core framework for building CLI commands:
|
|
5
|
+
*
|
|
6
|
+
* - **CommandDefinition**: The interface every command implements
|
|
7
|
+
* - **CommandRegistry**: Auto-discovery and Commander.js integration
|
|
8
|
+
* - **OutputFormatter**: Consistent table, JSON, YAML, status, progress output
|
|
9
|
+
* - **CliErrorHandler**: Typed errors with classification and recovery
|
|
10
|
+
* - **InteractiveRepl**: REPL loop with history, aliases, and tab completion
|
|
11
|
+
* - **HelpGenerator**: Structured help text from command metadata
|
|
12
|
+
* - **CompletionExporter**: Shell completion script generation
|
|
13
|
+
* - **DebugLogger**: Verbose/debug logging with TTY detection
|
|
14
|
+
* - **ProgressBar / StepTracker**: Progress tracking for long operations
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import {
|
|
19
|
+
* CommandDefinition,
|
|
20
|
+
* CommandRegistry,
|
|
21
|
+
* OutputFormatter,
|
|
22
|
+
* CliErrorHandler,
|
|
23
|
+
* InteractiveRepl,
|
|
24
|
+
* HelpGenerator,
|
|
25
|
+
* CompletionExporter,
|
|
26
|
+
* DebugLogger,
|
|
27
|
+
* ProgressBar,
|
|
28
|
+
* StepTracker,
|
|
29
|
+
* commandSuccess,
|
|
30
|
+
* commandFailure,
|
|
31
|
+
* validationOk,
|
|
32
|
+
* validationFail,
|
|
33
|
+
* } from './framework';
|
|
34
|
+
*
|
|
35
|
+
* const myCommand: CommandDefinition = {
|
|
36
|
+
* name: 'status',
|
|
37
|
+
* description: 'Show system status',
|
|
38
|
+
* category: 'daemon',
|
|
39
|
+
* async execute(args, options, context) {
|
|
40
|
+
* const data = await getStatus();
|
|
41
|
+
* const formatter = new OutputFormatter();
|
|
42
|
+
* const message = formatter.keyValue(data);
|
|
43
|
+
* return commandSuccess(data, message);
|
|
44
|
+
* },
|
|
45
|
+
* };
|
|
46
|
+
*
|
|
47
|
+
* const registry = new CommandRegistry();
|
|
48
|
+
* registry.register(myCommand);
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* @module framework
|
|
52
|
+
*/
|
|
53
|
+
export { type CommandDefinition, type CommandModule, type CommandHook, type ArgumentDefinition, type OptionDefinition, type CommandExample, type CommandCategory, CATEGORY_LABELS, type ValidationResult, type ValidationError, validationOk, validationFail, type CommandContext, type GlobalOptions, type ContextLogger, type OutputFormatterInterface, type ConfigManagerInterface, type CommandResult, commandSuccess, commandFailure, wrapLegacyCommand, } from './command-interface';
|
|
54
|
+
export { CommandRegistry, type RegistryOptions, type RegisteredCommand, } from './command-registry';
|
|
55
|
+
export { OutputFormatter, type TableOptions, type ColumnDefinition, type JsonOptions, type KeyValueOptions, type ListOptions, type TreeNode, type TreeOptions, type ProgressOptions, type StatusState, } from './output-formatter';
|
|
56
|
+
export { CliErrorHandler, CliError, type ErrorCode, type ErrorDetails, type RecoverySuggestion, type ErrorRecoveryHandler, type ErrorClassification, type ClassifiedError, classifyError, classifyAnyError, } from './error-handler';
|
|
57
|
+
export { InteractiveRepl, type ReplOptions, type HistoryEntry, } from './interactive-repl';
|
|
58
|
+
export { HelpGenerator, type HelpGeneratorOptions, type SearchResult, } from './help-generator';
|
|
59
|
+
export { CompletionExporter, type ShellType, type CompletionData, type CompletionCommand, type CompletionArgument, type CompletionOption, } from './completion-exporter';
|
|
60
|
+
export { DebugLogger, TaggedLogger, type LogLevel, type LogEntry, type DebugLoggerOptions, } from './debug-logger';
|
|
61
|
+
export { ProgressBar, MultiProgressManager, StepTracker, type ProgressBarOptions, type ProgressState, type ProgressStep, type StepTrackerOptions, } from './progress-manager';
|
|
62
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/framework/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAGH,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,WAAW,EAGhB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAGnB,KAAK,eAAe,EACpB,eAAe,EAGf,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,YAAY,EACZ,cAAc,EAGd,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAG3B,KAAK,aAAa,EAClB,cAAc,EACd,cAAc,EAGd,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,WAAW,GACjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,eAAe,EACf,QAAQ,EACR,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,aAAa,EACb,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,YAAY,GAClB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,kBAAkB,EAClB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,WAAW,EACX,YAAY,EACZ,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC"}
|