vibe-fabric 0.3.3 → 0.4.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 (53) hide show
  1. package/dist/cli/commands/analyze.d.ts +33 -0
  2. package/dist/cli/commands/analyze.d.ts.map +1 -0
  3. package/dist/cli/commands/analyze.js +243 -0
  4. package/dist/cli/commands/analyze.js.map +1 -0
  5. package/dist/cli/commands/config/get.d.ts +9 -0
  6. package/dist/cli/commands/config/get.d.ts.map +1 -0
  7. package/dist/cli/commands/config/get.js +69 -0
  8. package/dist/cli/commands/config/get.js.map +1 -0
  9. package/dist/cli/commands/config/list.d.ts +24 -0
  10. package/dist/cli/commands/config/list.d.ts.map +1 -0
  11. package/dist/cli/commands/config/list.js +146 -0
  12. package/dist/cli/commands/config/list.js.map +1 -0
  13. package/dist/cli/commands/config/set.d.ts +14 -0
  14. package/dist/cli/commands/config/set.d.ts.map +1 -0
  15. package/dist/cli/commands/config/set.js +111 -0
  16. package/dist/cli/commands/config/set.js.map +1 -0
  17. package/dist/cli/commands/repo/list.d.ts +26 -0
  18. package/dist/cli/commands/repo/list.d.ts.map +1 -0
  19. package/dist/cli/commands/repo/list.js +197 -0
  20. package/dist/cli/commands/repo/list.js.map +1 -0
  21. package/dist/cli/commands/repo/remove.d.ts +29 -0
  22. package/dist/cli/commands/repo/remove.d.ts.map +1 -0
  23. package/dist/cli/commands/repo/remove.js +219 -0
  24. package/dist/cli/commands/repo/remove.js.map +1 -0
  25. package/dist/cli/commands/report.d.ts +16 -0
  26. package/dist/cli/commands/report.d.ts.map +1 -0
  27. package/dist/cli/commands/report.js +160 -0
  28. package/dist/cli/commands/report.js.map +1 -0
  29. package/dist/cli/index.js +14 -0
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/core/config.d.ts +25 -0
  32. package/dist/core/config.d.ts.map +1 -1
  33. package/dist/core/config.js +77 -0
  34. package/dist/core/config.js.map +1 -1
  35. package/dist/core/repo/templates/claude-agents.d.ts.map +1 -1
  36. package/dist/core/repo/templates/claude-agents.js +136 -28
  37. package/dist/core/repo/templates/claude-agents.js.map +1 -1
  38. package/dist/core/repo/templates/claude-prompts.d.ts +1 -1
  39. package/dist/core/repo/templates/claude-prompts.d.ts.map +1 -1
  40. package/dist/core/repo/templates/claude-prompts.js +412 -157
  41. package/dist/core/repo/templates/claude-prompts.js.map +1 -1
  42. package/dist/core/repo/templates/claude-scripts.d.ts.map +1 -1
  43. package/dist/core/repo/templates/claude-scripts.js +555 -94
  44. package/dist/core/repo/templates/claude-scripts.js.map +1 -1
  45. package/dist/core/report.d.ts +25 -0
  46. package/dist/core/report.d.ts.map +1 -0
  47. package/dist/core/report.js +702 -0
  48. package/dist/core/report.js.map +1 -0
  49. package/dist/types/report.d.ts +158 -0
  50. package/dist/types/report.d.ts.map +1 -0
  51. package/dist/types/report.js +7 -0
  52. package/dist/types/report.js.map +1 -0
  53. package/package.json +1 -1
@@ -0,0 +1,33 @@
1
+ /**
2
+ * vibe analyze - Repository Analysis Command
3
+ *
4
+ * AI-powered repository analysis using Claude.
5
+ * Analyzes configured repositories to generate structural maps.
6
+ */
7
+ import { Command } from 'clipanion';
8
+ export declare class AnalyzeCommand extends Command {
9
+ static paths: string[][];
10
+ static usage: import("clipanion").Usage;
11
+ check: boolean;
12
+ resume: boolean;
13
+ repo: string | undefined;
14
+ cancel: boolean;
15
+ execute(): Promise<number>;
16
+ /**
17
+ * Handle --cancel flag
18
+ */
19
+ private handleCancel;
20
+ /**
21
+ * Run check mode (report-only)
22
+ */
23
+ private runCheck;
24
+ /**
25
+ * Run interactive analysis
26
+ */
27
+ private runInteractive;
28
+ /**
29
+ * Start the Python runner
30
+ */
31
+ private startRunner;
32
+ }
33
+ //# sourceMappingURL=analyze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAY5C,qBAAa,cAAe,SAAQ,OAAO;IACzC,OAAgB,KAAK,aAAiB;IAEtC,OAAgB,KAAK,4BAmBlB;IAEH,KAAK,UAEF;IAEH,MAAM,UAEH;IAEH,IAAI,qBAED;IAEH,MAAM,UAEH;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAuEhC;;OAEG;YACW,YAAY;IAwC1B;;OAEG;YACW,QAAQ;IAsBtB;;OAEG;YACW,cAAc;IA0D5B;;OAEG;YACW,WAAW;CAwE1B"}
@@ -0,0 +1,243 @@
1
+ /**
2
+ * vibe analyze - Repository Analysis Command
3
+ *
4
+ * AI-powered repository analysis using Claude.
5
+ * Analyzes configured repositories to generate structural maps.
6
+ */
7
+ import { Command, Option } from 'clipanion';
8
+ import chalk from 'chalk';
9
+ import { confirm, select } from '@inquirer/prompts';
10
+ import { loadConfig } from '../../core/config.js';
11
+ import { findProjectRoot } from '../../core/project.js';
12
+ import { runVibeRunner, checkOperationInProgress, cancelOperation, RunnerError, } from '../../core/runner.js';
13
+ export class AnalyzeCommand extends Command {
14
+ static paths = [['analyze']];
15
+ static usage = Command.Usage({
16
+ description: 'Analyze repositories and generate maps',
17
+ details: `
18
+ AI-powered repository analysis using Claude.
19
+
20
+ Analyzes configured repositories to generate:
21
+ - Entity maps (from ORMs like Prisma, TypeORM)
22
+ - API maps (from routes, controllers)
23
+ - Module maps (from project structure)
24
+
25
+ Results are saved to docs/sync-cache/{repo}/maps/
26
+ `,
27
+ examples: [
28
+ ['Analyze all repos', 'vibe analyze'],
29
+ ['Analyze specific repo', 'vibe analyze --repo backend'],
30
+ ['Check what would be analyzed', 'vibe analyze --check'],
31
+ ['Resume interrupted analysis', 'vibe analyze --resume'],
32
+ ['Cancel current operation', 'vibe analyze --cancel'],
33
+ ],
34
+ });
35
+ check = Option.Boolean('--check,-c', false, {
36
+ description: 'Show what would be analyzed (no changes)',
37
+ });
38
+ resume = Option.Boolean('--resume,-r', false, {
39
+ description: 'Resume interrupted operation',
40
+ });
41
+ repo = Option.String('--repo', {
42
+ description: 'Analyze specific repo by alias',
43
+ });
44
+ cancel = Option.Boolean('--cancel', false, {
45
+ description: 'Cancel current operation',
46
+ });
47
+ async execute() {
48
+ // Find project root
49
+ const projectRoot = findProjectRoot(process.cwd());
50
+ if (!projectRoot) {
51
+ this.context.stderr.write(chalk.red('Error: Not inside a vibe-fabric project.\n'));
52
+ this.context.stderr.write(chalk.gray('Run ') + chalk.cyan('vibe init') + chalk.gray(' to create a project.\n'));
53
+ return 1;
54
+ }
55
+ // Handle cancel flag
56
+ if (this.cancel) {
57
+ return this.handleCancel(projectRoot);
58
+ }
59
+ // Load config to check repos
60
+ const config = await loadConfig(projectRoot);
61
+ if (!config) {
62
+ this.context.stderr.write(chalk.red('Error: Could not load project configuration.\n'));
63
+ return 1;
64
+ }
65
+ // Check if repos are configured
66
+ if (!config.repos || config.repos.length === 0) {
67
+ this.context.stderr.write(chalk.red('Error: No repositories configured.\n\n'));
68
+ this.context.stderr.write('Add repositories first with:\n');
69
+ this.context.stderr.write(chalk.cyan(' vibe repo add <github-url>\n\n'));
70
+ this.context.stderr.write(chalk.gray('Example:\n'));
71
+ this.context.stderr.write(chalk.gray(' vibe repo add https://github.com/org/backend\n'));
72
+ return 1;
73
+ }
74
+ // If --repo specified, verify it exists
75
+ if (this.repo) {
76
+ const repoExists = config.repos.some(r => r.alias === this.repo);
77
+ if (!repoExists) {
78
+ this.context.stderr.write(chalk.red(`Error: Repository '${this.repo}' not found.\n\n`));
79
+ this.context.stderr.write('Available repositories:\n');
80
+ for (const r of config.repos) {
81
+ this.context.stderr.write(` - ${r.alias}\n`);
82
+ }
83
+ return 1;
84
+ }
85
+ }
86
+ // Handle check mode
87
+ if (this.check) {
88
+ return this.runCheck(projectRoot, config);
89
+ }
90
+ // Interactive mode
91
+ return this.runInteractive(projectRoot);
92
+ }
93
+ /**
94
+ * Handle --cancel flag
95
+ */
96
+ async handleCancel(projectRoot) {
97
+ const existing = await checkOperationInProgress(projectRoot);
98
+ if (!existing) {
99
+ this.context.stdout.write(chalk.yellow('No operation in progress.\n'));
100
+ return 0;
101
+ }
102
+ if (existing.operation !== 'analyze') {
103
+ this.context.stdout.write(chalk.yellow(`Different operation in progress: ${existing.operation}\n`));
104
+ this.context.stdout.write(chalk.gray('Use the corresponding command to cancel it.\n'));
105
+ return 1;
106
+ }
107
+ const confirmed = await confirm({
108
+ message: 'Cancel analyze operation?',
109
+ default: false,
110
+ });
111
+ if (!confirmed) {
112
+ this.context.stdout.write(chalk.gray('Cancelled.\n'));
113
+ return 0;
114
+ }
115
+ try {
116
+ await cancelOperation(projectRoot);
117
+ this.context.stdout.write(chalk.green('Operation cancelled.\n'));
118
+ return 0;
119
+ }
120
+ catch (error) {
121
+ this.context.stderr.write(chalk.red(`Failed to cancel: ${error instanceof Error ? error.message : error}\n`));
122
+ return 1;
123
+ }
124
+ }
125
+ /**
126
+ * Run check mode (report-only)
127
+ */
128
+ async runCheck(_projectRoot, config) {
129
+ this.context.stdout.write('\n');
130
+ this.context.stdout.write(chalk.bold.blue(' ANALYZE CHECK') + '\n');
131
+ this.context.stdout.write(chalk.gray(' ─'.repeat(25)) + '\n\n');
132
+ const repos = this.repo
133
+ ? config.repos.filter(r => r.alias === this.repo)
134
+ : config.repos;
135
+ this.context.stdout.write(chalk.bold('Repositories to analyze:\n\n'));
136
+ for (const repo of repos) {
137
+ this.context.stdout.write(` ${chalk.cyan(repo.alias)}\n`);
138
+ this.context.stdout.write(chalk.gray(` URL: ${repo.url}\n`));
139
+ this.context.stdout.write(chalk.gray(` Branch: ${repo.branch || 'main'}\n`));
140
+ this.context.stdout.write('\n');
141
+ }
142
+ this.context.stdout.write(chalk.gray('Run without --check to start analysis.\n'));
143
+ return 0;
144
+ }
145
+ /**
146
+ * Run interactive analysis
147
+ */
148
+ async runInteractive(projectRoot) {
149
+ // Check for existing operation
150
+ const existing = await checkOperationInProgress(projectRoot);
151
+ if (existing && !this.resume) {
152
+ // Check if it's an analyze operation
153
+ if (existing.operation !== 'analyze') {
154
+ this.context.stdout.write('\n');
155
+ this.context.stdout.write(chalk.yellow(`A different operation is in progress: ${existing.operation}\n`));
156
+ this.context.stdout.write(chalk.gray('Cancel it first or use the corresponding command.\n'));
157
+ return 1;
158
+ }
159
+ this.context.stdout.write('\n');
160
+ this.context.stdout.write(chalk.yellow('An analyze operation is already in progress.\n'));
161
+ this.context.stdout.write(chalk.gray(`Phase: ${existing.phase}, Task: ${existing.current_task}/${existing.total_tasks}\n`));
162
+ this.context.stdout.write('\n');
163
+ const action = await select({
164
+ message: 'What would you like to do?',
165
+ choices: [
166
+ { name: 'Resume the existing operation', value: 'resume' },
167
+ { name: 'Cancel and start fresh', value: 'cancel' },
168
+ { name: 'Exit', value: 'exit' },
169
+ ],
170
+ });
171
+ if (action === 'exit') {
172
+ return 0;
173
+ }
174
+ if (action === 'cancel') {
175
+ await cancelOperation(projectRoot);
176
+ this.context.stdout.write(chalk.green('Previous operation cancelled.\n\n'));
177
+ }
178
+ if (action === 'resume') {
179
+ return this.startRunner(projectRoot, true);
180
+ }
181
+ }
182
+ if (this.resume && !existing) {
183
+ this.context.stderr.write(chalk.red('No operation to resume.\n'));
184
+ this.context.stderr.write(chalk.gray('Start a new operation with: vibe analyze\n'));
185
+ return 1;
186
+ }
187
+ return this.startRunner(projectRoot, this.resume);
188
+ }
189
+ /**
190
+ * Start the Python runner
191
+ */
192
+ async startRunner(projectRoot, resume) {
193
+ this.context.stdout.write('\n');
194
+ this.context.stdout.write(chalk.bold.blue(' VIBE ANALYZE') + '\n');
195
+ this.context.stdout.write(chalk.gray(' ─'.repeat(25)) + '\n\n');
196
+ if (!resume) {
197
+ this.context.stdout.write(chalk.gray(' Starting repository analysis with Claude...\n\n'));
198
+ }
199
+ else {
200
+ this.context.stdout.write(chalk.gray(' Resuming analysis operation...\n\n'));
201
+ }
202
+ try {
203
+ await runVibeRunner('analyze', projectRoot, {
204
+ resume,
205
+ loop: true,
206
+ });
207
+ return 0;
208
+ }
209
+ catch (error) {
210
+ if (error instanceof RunnerError) {
211
+ this.context.stderr.write('\n');
212
+ switch (error.code) {
213
+ case 'UV_NOT_INSTALLED':
214
+ this.context.stderr.write(chalk.red('UV is not installed.\n\n'));
215
+ this.context.stderr.write('Install UV with:\n');
216
+ this.context.stderr.write(chalk.cyan(' curl -LsSf https://astral.sh/uv/install.sh | sh\n\n'));
217
+ this.context.stderr.write(chalk.gray('UV is required to run Python scripts for AI operations.\n'));
218
+ break;
219
+ case 'RUNNER_NOT_FOUND':
220
+ this.context.stderr.write(chalk.red('Runner script not found.\n\n'));
221
+ this.context.stderr.write('The runner script should be at:\n' +
222
+ chalk.cyan(' .claude/scripts/vibe-runner.py\n\n'));
223
+ this.context.stderr.write(chalk.gray('Run ') + chalk.cyan('vibe doctor') + chalk.gray(' to diagnose.\n'));
224
+ break;
225
+ case 'RUNNER_FAILED':
226
+ this.context.stderr.write(chalk.red('Runner failed.\n\n'));
227
+ this.context.stderr.write(chalk.gray(`${error.message}\n\n`));
228
+ this.context.stderr.write('Your progress has been saved. Run ' +
229
+ chalk.cyan('vibe analyze --resume') +
230
+ ' to continue.\n');
231
+ break;
232
+ default:
233
+ this.context.stderr.write(chalk.red(`Error: ${error.message}\n`));
234
+ }
235
+ return 1;
236
+ }
237
+ // Unexpected error
238
+ this.context.stderr.write(chalk.red(`Unexpected error: ${error instanceof Error ? error.message : error}\n`));
239
+ return 1;
240
+ }
241
+ }
242
+ }
243
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Command } from 'clipanion';
2
+ export declare class ConfigGetCommand extends Command {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ key: string;
6
+ json: boolean;
7
+ execute(): Promise<number>;
8
+ }
9
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/config/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAK5C,qBAAa,gBAAiB,SAAQ,OAAO;IAC3C,OAAgB,KAAK,aAAuB;IAE5C,OAAgB,KAAK,4BAclB;IAEH,GAAG,SAAkD;IAErD,IAAI,UAED;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAwDjC"}
@@ -0,0 +1,69 @@
1
+ import { Command, Option } from 'clipanion';
2
+ import chalk from 'chalk';
3
+ import { loadConfig, getConfigValue } from '../../../core/config.js';
4
+ import { findProjectRoot } from '../../../core/project.js';
5
+ export class ConfigGetCommand extends Command {
6
+ static paths = [['config', 'get']];
7
+ static usage = Command.Usage({
8
+ description: 'Get a configuration value',
9
+ details: `
10
+ Retrieves a value from the project configuration (vibe-fabric.toml).
11
+
12
+ Use dot notation to access nested values (e.g., project.name).
13
+ Arrays and objects are automatically output as JSON.
14
+ `,
15
+ examples: [
16
+ ['Get project name', 'vibe config get project.name'],
17
+ ['Get project created date', 'vibe config get project.created'],
18
+ ['Get all repos', 'vibe config get repos'],
19
+ ['Get as JSON', 'vibe config get project --json'],
20
+ ],
21
+ });
22
+ key = Option.String({ required: true, name: 'key' });
23
+ json = Option.Boolean('--json,-j', false, {
24
+ description: 'Output as JSON (default for arrays/objects)',
25
+ });
26
+ async execute() {
27
+ try {
28
+ // Find project root
29
+ const projectRoot = findProjectRoot(process.cwd());
30
+ if (!projectRoot) {
31
+ this.context.stderr.write(chalk.red('Error: Not inside a vibe-fabric project.\n'));
32
+ this.context.stderr.write(chalk.gray('Run `vibe init` to create a planning hub first.\n'));
33
+ return 1;
34
+ }
35
+ // Load configuration
36
+ const config = await loadConfig(projectRoot);
37
+ if (!config) {
38
+ this.context.stderr.write(chalk.red('Error: Failed to load configuration.\n'));
39
+ this.context.stderr.write(chalk.gray('Run `vibe doctor` to diagnose configuration issues.\n'));
40
+ return 1;
41
+ }
42
+ // Get the value
43
+ const value = getConfigValue(config, this.key);
44
+ if (value === undefined) {
45
+ this.context.stderr.write(chalk.red(`Error: Key not found: ${this.key}\n`));
46
+ this.context.stderr.write(chalk.gray('Available top-level keys: project, repos\n'));
47
+ return 1;
48
+ }
49
+ // Output the value
50
+ if (this.json || typeof value === 'object') {
51
+ this.context.stdout.write(JSON.stringify(value, null, 2) + '\n');
52
+ }
53
+ else {
54
+ this.context.stdout.write(String(value) + '\n');
55
+ }
56
+ return 0;
57
+ }
58
+ catch (error) {
59
+ if (error instanceof Error) {
60
+ this.context.stderr.write(chalk.red(`Error: ${error.message}\n`));
61
+ }
62
+ else {
63
+ this.context.stderr.write(chalk.red('An unexpected error occurred.\n'));
64
+ }
65
+ return 1;
66
+ }
67
+ }
68
+ }
69
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/cli/commands/config/get.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { Command } from 'clipanion';
2
+ export declare class ConfigListCommand extends Command {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ json: boolean;
6
+ execute(): Promise<number>;
7
+ /**
8
+ * Print a formatted tree view of the configuration
9
+ */
10
+ private printFormattedConfig;
11
+ /**
12
+ * Recursively print an object with indentation
13
+ */
14
+ private printObject;
15
+ /**
16
+ * Format a value for display
17
+ */
18
+ private formatValue;
19
+ /**
20
+ * Get a brief summary of an object for array display
21
+ */
22
+ private getObjectSummary;
23
+ }
24
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/config/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAK5C,qBAAa,iBAAkB,SAAQ,OAAO;IAC5C,OAAgB,KAAK,aAAwB;IAE7C,OAAgB,KAAK,4BAYlB;IAEH,IAAI,UAED;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA4ChC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACH,OAAO,CAAC,WAAW;IAgDnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAYzB"}
@@ -0,0 +1,146 @@
1
+ import { Command, Option } from 'clipanion';
2
+ import chalk from 'chalk';
3
+ import { loadConfig } from '../../../core/config.js';
4
+ import { findProjectRoot } from '../../../core/project.js';
5
+ export class ConfigListCommand extends Command {
6
+ static paths = [['config', 'list']];
7
+ static usage = Command.Usage({
8
+ description: 'List all configuration values',
9
+ details: `
10
+ Displays all configuration values from vibe-fabric.toml.
11
+
12
+ By default, shows a formatted tree view.
13
+ Use --json for machine-readable output.
14
+ `,
15
+ examples: [
16
+ ['List all config', 'vibe config list'],
17
+ ['List as JSON', 'vibe config list --json'],
18
+ ],
19
+ });
20
+ json = Option.Boolean('--json,-j', false, {
21
+ description: 'Output as JSON',
22
+ });
23
+ async execute() {
24
+ try {
25
+ // Find project root
26
+ const projectRoot = findProjectRoot(process.cwd());
27
+ if (!projectRoot) {
28
+ this.context.stderr.write(chalk.red('Error: Not inside a vibe-fabric project.\n'));
29
+ this.context.stderr.write(chalk.gray('Run `vibe init` to create a planning hub first.\n'));
30
+ return 1;
31
+ }
32
+ // Load configuration
33
+ const config = await loadConfig(projectRoot);
34
+ if (!config) {
35
+ this.context.stderr.write(chalk.red('Error: Failed to load configuration.\n'));
36
+ this.context.stderr.write(chalk.gray('Run `vibe doctor` to diagnose configuration issues.\n'));
37
+ return 1;
38
+ }
39
+ // Output based on format
40
+ if (this.json) {
41
+ this.context.stdout.write(JSON.stringify(config, null, 2) + '\n');
42
+ }
43
+ else {
44
+ this.printFormattedConfig(config);
45
+ }
46
+ return 0;
47
+ }
48
+ catch (error) {
49
+ if (error instanceof Error) {
50
+ this.context.stderr.write(chalk.red(`Error: ${error.message}\n`));
51
+ }
52
+ else {
53
+ this.context.stderr.write(chalk.red('An unexpected error occurred.\n'));
54
+ }
55
+ return 1;
56
+ }
57
+ }
58
+ /**
59
+ * Print a formatted tree view of the configuration
60
+ */
61
+ printFormattedConfig(config) {
62
+ this.context.stdout.write('\n');
63
+ this.context.stdout.write(chalk.bold.blue(' CONFIGURATION\n'));
64
+ this.context.stdout.write(chalk.gray(' ─'.repeat(25)) + '\n\n');
65
+ this.printObject(config, ' ');
66
+ this.context.stdout.write('\n');
67
+ }
68
+ /**
69
+ * Recursively print an object with indentation
70
+ */
71
+ printObject(obj, indent) {
72
+ const entries = Object.entries(obj);
73
+ for (let i = 0; i < entries.length; i++) {
74
+ const entry = entries[i];
75
+ if (!entry)
76
+ continue;
77
+ const [key, value] = entry;
78
+ const isLast = i === entries.length - 1;
79
+ const prefix = isLast ? '└─' : '├─';
80
+ const childIndent = isLast ? ' ' : '│ ';
81
+ if (Array.isArray(value)) {
82
+ this.context.stdout.write(`${indent}${prefix} ${chalk.cyan(key)}: ${chalk.gray(`[${value.length} items]`)}\n`);
83
+ // Show array items briefly
84
+ for (let j = 0; j < Math.min(value.length, 3); j++) {
85
+ const itemPrefix = j === Math.min(value.length, 3) - 1 && value.length <= 3 ? '└─' : '├─';
86
+ const item = value[j];
87
+ if (typeof item === 'object' && item !== null) {
88
+ const summary = this.getObjectSummary(item);
89
+ this.context.stdout.write(`${indent}${childIndent}${itemPrefix} ${chalk.gray(summary)}\n`);
90
+ }
91
+ else {
92
+ this.context.stdout.write(`${indent}${childIndent}${itemPrefix} ${this.formatValue(item)}\n`);
93
+ }
94
+ }
95
+ if (value.length > 3) {
96
+ this.context.stdout.write(`${indent}${childIndent}└─ ${chalk.gray(`... and ${value.length - 3} more`)}\n`);
97
+ }
98
+ }
99
+ else if (typeof value === 'object' && value !== null) {
100
+ this.context.stdout.write(`${indent}${prefix} ${chalk.cyan(key)}:\n`);
101
+ this.printObject(value, indent + childIndent);
102
+ }
103
+ else {
104
+ this.context.stdout.write(`${indent}${prefix} ${chalk.cyan(key)}: ${this.formatValue(value)}\n`);
105
+ }
106
+ }
107
+ }
108
+ /**
109
+ * Format a value for display
110
+ */
111
+ formatValue(value) {
112
+ if (value === undefined || value === null) {
113
+ return chalk.gray('(not set)');
114
+ }
115
+ if (typeof value === 'boolean') {
116
+ return value ? chalk.green('true') : chalk.yellow('false');
117
+ }
118
+ if (typeof value === 'number') {
119
+ return chalk.magenta(String(value));
120
+ }
121
+ if (typeof value === 'string') {
122
+ // Truncate long strings
123
+ if (value.length > 50) {
124
+ return chalk.white(`"${value.substring(0, 47)}..."`);
125
+ }
126
+ return chalk.white(`"${value}"`);
127
+ }
128
+ return chalk.white(String(value));
129
+ }
130
+ /**
131
+ * Get a brief summary of an object for array display
132
+ */
133
+ getObjectSummary(obj) {
134
+ // Try to find meaningful identifying fields
135
+ const identifiers = ['alias', 'name', 'id', 'title'];
136
+ for (const key of identifiers) {
137
+ if (key in obj && typeof obj[key] === 'string') {
138
+ return `${key}: "${obj[key]}"`;
139
+ }
140
+ }
141
+ // Fall back to showing number of keys
142
+ const keys = Object.keys(obj);
143
+ return `{${keys.length} fields}`;
144
+ }
145
+ }
146
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/cli/commands/config/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Command } from 'clipanion';
2
+ export declare class ConfigSetCommand extends Command {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ key: string;
6
+ value: string;
7
+ json: boolean;
8
+ execute(): Promise<number>;
9
+ /**
10
+ * Format a value for display
11
+ */
12
+ private formatValue;
13
+ }
14
+ //# sourceMappingURL=set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/config/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAY5C,qBAAa,gBAAiB,SAAQ,OAAO;IAC3C,OAAgB,KAAK,aAAuB;IAE5C,OAAgB,KAAK,4BAmBlB;IAEH,GAAG,SAAkD;IACrD,KAAK,SAAoD;IAEzD,IAAI,UAED;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAyFhC;;OAEG;IACH,OAAO,CAAC,WAAW;CAOpB"}