vibe-fabric 0.3.3 → 0.4.1
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/cli/commands/analyze.d.ts +33 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +243 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/config/get.d.ts +9 -0
- package/dist/cli/commands/config/get.d.ts.map +1 -0
- package/dist/cli/commands/config/get.js +69 -0
- package/dist/cli/commands/config/get.js.map +1 -0
- package/dist/cli/commands/config/list.d.ts +24 -0
- package/dist/cli/commands/config/list.d.ts.map +1 -0
- package/dist/cli/commands/config/list.js +146 -0
- package/dist/cli/commands/config/list.js.map +1 -0
- package/dist/cli/commands/config/set.d.ts +14 -0
- package/dist/cli/commands/config/set.d.ts.map +1 -0
- package/dist/cli/commands/config/set.js +111 -0
- package/dist/cli/commands/config/set.js.map +1 -0
- package/dist/cli/commands/repo/list.d.ts +26 -0
- package/dist/cli/commands/repo/list.d.ts.map +1 -0
- package/dist/cli/commands/repo/list.js +197 -0
- package/dist/cli/commands/repo/list.js.map +1 -0
- package/dist/cli/commands/repo/remove.d.ts +29 -0
- package/dist/cli/commands/repo/remove.d.ts.map +1 -0
- package/dist/cli/commands/repo/remove.js +219 -0
- package/dist/cli/commands/repo/remove.js.map +1 -0
- package/dist/cli/commands/report.d.ts +16 -0
- package/dist/cli/commands/report.d.ts.map +1 -0
- package/dist/cli/commands/report.js +160 -0
- package/dist/cli/commands/report.js.map +1 -0
- package/dist/cli/index.js +14 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/config.d.ts +25 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +77 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/repo/templates/claude-agents.d.ts.map +1 -1
- package/dist/core/repo/templates/claude-agents.js +136 -28
- package/dist/core/repo/templates/claude-agents.js.map +1 -1
- package/dist/core/repo/templates/claude-prompts.d.ts +1 -1
- package/dist/core/repo/templates/claude-prompts.d.ts.map +1 -1
- package/dist/core/repo/templates/claude-prompts.js +412 -157
- package/dist/core/repo/templates/claude-prompts.js.map +1 -1
- package/dist/core/repo/templates/claude-scripts.d.ts.map +1 -1
- package/dist/core/repo/templates/claude-scripts.js +555 -94
- package/dist/core/repo/templates/claude-scripts.js.map +1 -1
- package/dist/core/repo/templates/vibe-readme.d.ts.map +1 -1
- package/dist/core/repo/templates/vibe-readme.js +177 -10
- package/dist/core/repo/templates/vibe-readme.js.map +1 -1
- package/dist/core/report.d.ts +25 -0
- package/dist/core/report.d.ts.map +1 -0
- package/dist/core/report.js +702 -0
- package/dist/core/report.js.map +1 -0
- package/dist/types/report.d.ts +158 -0
- package/dist/types/report.d.ts.map +1 -0
- package/dist/types/report.js +7 -0
- package/dist/types/report.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { Command, Option } from 'clipanion';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { loadConfig, saveConfig, setConfigValue, parseValue, getConfigValue, } from '../../../core/config.js';
|
|
4
|
+
import { findProjectRoot } from '../../../core/project.js';
|
|
5
|
+
import { ConfigSchema } from '../../../types/config.js';
|
|
6
|
+
export class ConfigSetCommand extends Command {
|
|
7
|
+
static paths = [['config', 'set']];
|
|
8
|
+
static usage = Command.Usage({
|
|
9
|
+
description: 'Set a configuration value',
|
|
10
|
+
details: `
|
|
11
|
+
Sets a value in the project configuration (vibe-fabric.toml).
|
|
12
|
+
|
|
13
|
+
Use dot notation for nested keys (e.g., project.name).
|
|
14
|
+
Values are automatically parsed:
|
|
15
|
+
- "true"/"false" become booleans
|
|
16
|
+
- Numbers become numeric values
|
|
17
|
+
- Everything else remains a string
|
|
18
|
+
|
|
19
|
+
Use --json to set complex values (arrays, objects).
|
|
20
|
+
`,
|
|
21
|
+
examples: [
|
|
22
|
+
['Set project name', 'vibe config set project.name "my-project"'],
|
|
23
|
+
['Set version', 'vibe config set project.version "1.0.0"'],
|
|
24
|
+
['Set boolean', 'vibe config set project.active true'],
|
|
25
|
+
['Set JSON array', 'vibe config set project.description.goals --json \'["Goal 1", "Goal 2"]\''],
|
|
26
|
+
],
|
|
27
|
+
});
|
|
28
|
+
key = Option.String({ required: true, name: 'key' });
|
|
29
|
+
value = Option.String({ required: true, name: 'value' });
|
|
30
|
+
json = Option.Boolean('--json,-j', false, {
|
|
31
|
+
description: 'Parse value as JSON',
|
|
32
|
+
});
|
|
33
|
+
async execute() {
|
|
34
|
+
try {
|
|
35
|
+
// Find project root
|
|
36
|
+
const projectRoot = findProjectRoot(process.cwd());
|
|
37
|
+
if (!projectRoot) {
|
|
38
|
+
this.context.stderr.write(chalk.red('Error: Not inside a vibe-fabric project.\n'));
|
|
39
|
+
this.context.stderr.write(chalk.gray('Run `vibe init` to create a planning hub first.\n'));
|
|
40
|
+
return 1;
|
|
41
|
+
}
|
|
42
|
+
// Load configuration
|
|
43
|
+
const config = await loadConfig(projectRoot);
|
|
44
|
+
if (!config) {
|
|
45
|
+
this.context.stderr.write(chalk.red('Error: Failed to load configuration.\n'));
|
|
46
|
+
this.context.stderr.write(chalk.gray('Run `vibe doctor` to diagnose configuration issues.\n'));
|
|
47
|
+
return 1;
|
|
48
|
+
}
|
|
49
|
+
// Parse the value
|
|
50
|
+
let parsedValue;
|
|
51
|
+
if (this.json) {
|
|
52
|
+
try {
|
|
53
|
+
parsedValue = JSON.parse(this.value);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
this.context.stderr.write(chalk.red('Error: Invalid JSON value.\n'));
|
|
57
|
+
this.context.stderr.write(chalk.gray('Make sure your JSON is properly formatted.\n'));
|
|
58
|
+
return 1;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
parsedValue = parseValue(this.value);
|
|
63
|
+
}
|
|
64
|
+
// Get the old value for comparison
|
|
65
|
+
const oldValue = getConfigValue(config, this.key);
|
|
66
|
+
// Set the new value
|
|
67
|
+
setConfigValue(config, this.key, parsedValue);
|
|
68
|
+
// Validate the updated config against the schema
|
|
69
|
+
const validation = ConfigSchema.safeParse(config);
|
|
70
|
+
if (!validation.success) {
|
|
71
|
+
this.context.stderr.write(chalk.red('Error: Invalid configuration value.\n'));
|
|
72
|
+
const errors = validation.error.errors;
|
|
73
|
+
for (const err of errors) {
|
|
74
|
+
this.context.stderr.write(chalk.gray(` - ${err.path.join('.')}: ${err.message}\n`));
|
|
75
|
+
}
|
|
76
|
+
return 1;
|
|
77
|
+
}
|
|
78
|
+
// Save the configuration
|
|
79
|
+
await saveConfig(projectRoot, validation.data);
|
|
80
|
+
// Show success message
|
|
81
|
+
this.context.stdout.write(chalk.green('Configuration updated.\n'));
|
|
82
|
+
this.context.stdout.write(chalk.gray(` ${this.key}: `) +
|
|
83
|
+
chalk.dim(this.formatValue(oldValue)) +
|
|
84
|
+
chalk.gray(' → ') +
|
|
85
|
+
chalk.cyan(this.formatValue(parsedValue)) +
|
|
86
|
+
'\n');
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
if (error instanceof Error) {
|
|
91
|
+
this.context.stderr.write(chalk.red(`Error: ${error.message}\n`));
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
this.context.stderr.write(chalk.red('An unexpected error occurred.\n'));
|
|
95
|
+
}
|
|
96
|
+
return 1;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Format a value for display
|
|
101
|
+
*/
|
|
102
|
+
formatValue(value) {
|
|
103
|
+
if (value === undefined)
|
|
104
|
+
return '(not set)';
|
|
105
|
+
if (typeof value === 'object') {
|
|
106
|
+
return JSON.stringify(value);
|
|
107
|
+
}
|
|
108
|
+
return String(value);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../../../src/cli/commands/config/set.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Command } from 'clipanion';
|
|
2
|
+
export declare class RepoListCommand extends Command {
|
|
3
|
+
static paths: string[][];
|
|
4
|
+
static usage: import("clipanion").Usage;
|
|
5
|
+
status: string | undefined;
|
|
6
|
+
json: boolean;
|
|
7
|
+
quiet: boolean;
|
|
8
|
+
execute(): Promise<number>;
|
|
9
|
+
/**
|
|
10
|
+
* Output repos as formatted table
|
|
11
|
+
*/
|
|
12
|
+
private outputTable;
|
|
13
|
+
/**
|
|
14
|
+
* Format status with color
|
|
15
|
+
*/
|
|
16
|
+
private formatStatus;
|
|
17
|
+
/**
|
|
18
|
+
* Output repos as JSON
|
|
19
|
+
*/
|
|
20
|
+
private outputJson;
|
|
21
|
+
/**
|
|
22
|
+
* Output only aliases (for scripting)
|
|
23
|
+
*/
|
|
24
|
+
private outputQuiet;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/repo/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAO5C,qBAAa,eAAgB,SAAQ,OAAO;IAC1C,OAAgB,KAAK,aAAsB;IAE3C,OAAgB,KAAK,4BAkBlB;IAEH,MAAM,qBAEH;IAEH,IAAI,UAED;IAEH,KAAK,UAEF;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAuFhC;;OAEG;IACH,OAAO,CAAC,WAAW;IA0EnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;IACH,OAAO,CAAC,WAAW;CAMpB"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { Command, Option } from 'clipanion';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import Table from 'cli-table3';
|
|
4
|
+
import { loadConfig } from '../../../core/config.js';
|
|
5
|
+
import { findProjectRoot } from '../../../core/project.js';
|
|
6
|
+
export class RepoListCommand extends Command {
|
|
7
|
+
static paths = [['repo', 'list']];
|
|
8
|
+
static usage = Command.Usage({
|
|
9
|
+
description: 'List all repositories in the planning hub',
|
|
10
|
+
details: `
|
|
11
|
+
Displays all repositories registered in the planning hub configuration.
|
|
12
|
+
|
|
13
|
+
Shows:
|
|
14
|
+
- Alias (used to reference the repo)
|
|
15
|
+
- Name (GitHub repository name)
|
|
16
|
+
- Status (active, planned, archived)
|
|
17
|
+
- Branch (default branch)
|
|
18
|
+
- Added date
|
|
19
|
+
`,
|
|
20
|
+
examples: [
|
|
21
|
+
['List all repos', 'vibe repo list'],
|
|
22
|
+
['Filter by status', 'vibe repo list --status active'],
|
|
23
|
+
['Output as JSON', 'vibe repo list --json'],
|
|
24
|
+
['Quiet mode (aliases only)', 'vibe repo list -q'],
|
|
25
|
+
],
|
|
26
|
+
});
|
|
27
|
+
status = Option.String('--status,-s', {
|
|
28
|
+
description: 'Filter by status (active, planned, archived)',
|
|
29
|
+
});
|
|
30
|
+
json = Option.Boolean('--json', false, {
|
|
31
|
+
description: 'Output as JSON',
|
|
32
|
+
});
|
|
33
|
+
quiet = Option.Boolean('--quiet,-q', false, {
|
|
34
|
+
description: 'Output aliases only',
|
|
35
|
+
});
|
|
36
|
+
async execute() {
|
|
37
|
+
try {
|
|
38
|
+
// Find project root
|
|
39
|
+
const projectRoot = findProjectRoot(process.cwd());
|
|
40
|
+
if (!projectRoot) {
|
|
41
|
+
this.context.stderr.write(chalk.red('Error: Not inside a vibe-fabric project.\n'));
|
|
42
|
+
this.context.stderr.write(chalk.gray('Run `vibe init` to create a planning hub first.\n'));
|
|
43
|
+
return 1;
|
|
44
|
+
}
|
|
45
|
+
// Load configuration
|
|
46
|
+
const config = await loadConfig(projectRoot);
|
|
47
|
+
if (!config) {
|
|
48
|
+
this.context.stderr.write(chalk.red('Error: Failed to load configuration.\n'));
|
|
49
|
+
this.context.stderr.write(chalk.gray('Run `vibe doctor` to diagnose configuration issues.\n'));
|
|
50
|
+
return 1;
|
|
51
|
+
}
|
|
52
|
+
// Filter repos by status if specified
|
|
53
|
+
let repos = config.repos;
|
|
54
|
+
if (this.status) {
|
|
55
|
+
const validStatuses = ['active', 'planned', 'archived'];
|
|
56
|
+
if (!validStatuses.includes(this.status)) {
|
|
57
|
+
this.context.stderr.write(chalk.red(`Error: Invalid status "${this.status}".\n`));
|
|
58
|
+
this.context.stderr.write(chalk.gray(`Valid options: ${validStatuses.join(', ')}\n`));
|
|
59
|
+
return 1;
|
|
60
|
+
}
|
|
61
|
+
repos = repos.filter((r) => r.status === this.status);
|
|
62
|
+
}
|
|
63
|
+
// Handle empty repos
|
|
64
|
+
if (repos.length === 0) {
|
|
65
|
+
if (this.json) {
|
|
66
|
+
this.context.stdout.write('[]\n');
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
if (this.quiet) {
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
if (this.status) {
|
|
73
|
+
this.context.stdout.write(chalk.yellow(`\nNo ${this.status} repositories found.\n\n`));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
this.context.stdout.write(chalk.yellow('\nNo repositories configured.\n'));
|
|
77
|
+
this.context.stdout.write(chalk.gray('Run `vibe repo add` to add a repository.\n\n'));
|
|
78
|
+
}
|
|
79
|
+
return 0;
|
|
80
|
+
}
|
|
81
|
+
// Output based on mode
|
|
82
|
+
if (this.json) {
|
|
83
|
+
return this.outputJson(repos);
|
|
84
|
+
}
|
|
85
|
+
if (this.quiet) {
|
|
86
|
+
return this.outputQuiet(repos);
|
|
87
|
+
}
|
|
88
|
+
return this.outputTable(repos);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (error instanceof Error) {
|
|
92
|
+
this.context.stderr.write(chalk.red(`Error: ${error.message}\n`));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
this.context.stderr.write(chalk.red('An unexpected error occurred.\n'));
|
|
96
|
+
}
|
|
97
|
+
return 1;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Output repos as formatted table
|
|
102
|
+
*/
|
|
103
|
+
outputTable(repos) {
|
|
104
|
+
this.context.stdout.write('\n');
|
|
105
|
+
this.context.stdout.write(chalk.bold.blue(' REPOSITORIES\n'));
|
|
106
|
+
this.context.stdout.write(chalk.gray(' ─'.repeat(25)) + '\n\n');
|
|
107
|
+
const table = new Table({
|
|
108
|
+
head: ['Alias', 'Name', 'Status', 'Branch', 'Added'].map((h) => chalk.bold(h)),
|
|
109
|
+
chars: {
|
|
110
|
+
top: '─',
|
|
111
|
+
'top-mid': '┬',
|
|
112
|
+
'top-left': '┌',
|
|
113
|
+
'top-right': '┐',
|
|
114
|
+
bottom: '─',
|
|
115
|
+
'bottom-mid': '┴',
|
|
116
|
+
'bottom-left': '└',
|
|
117
|
+
'bottom-right': '┘',
|
|
118
|
+
left: '│',
|
|
119
|
+
'left-mid': '├',
|
|
120
|
+
mid: '─',
|
|
121
|
+
'mid-mid': '┼',
|
|
122
|
+
right: '│',
|
|
123
|
+
'right-mid': '┤',
|
|
124
|
+
middle: '│',
|
|
125
|
+
},
|
|
126
|
+
style: {
|
|
127
|
+
head: [],
|
|
128
|
+
border: ['gray'],
|
|
129
|
+
compact: false,
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
for (const repo of repos) {
|
|
133
|
+
const statusDisplay = this.formatStatus(repo.status);
|
|
134
|
+
const addedDate = repo.addedAt
|
|
135
|
+
? new Date(repo.addedAt).toISOString().split('T')[0]
|
|
136
|
+
: '-';
|
|
137
|
+
const branch = repo.status === 'planned' ? '-' : repo.branch;
|
|
138
|
+
table.push([
|
|
139
|
+
chalk.cyan(repo.alias),
|
|
140
|
+
repo.name,
|
|
141
|
+
statusDisplay,
|
|
142
|
+
branch,
|
|
143
|
+
addedDate,
|
|
144
|
+
]);
|
|
145
|
+
}
|
|
146
|
+
this.context.stdout.write(table.toString() + '\n\n');
|
|
147
|
+
// Summary
|
|
148
|
+
const activeCount = repos.filter((r) => r.status === 'active').length;
|
|
149
|
+
const plannedCount = repos.filter((r) => r.status === 'planned').length;
|
|
150
|
+
const archivedCount = repos.filter((r) => r.status === 'archived').length;
|
|
151
|
+
const parts = [];
|
|
152
|
+
if (activeCount > 0)
|
|
153
|
+
parts.push(`${activeCount} active`);
|
|
154
|
+
if (plannedCount > 0)
|
|
155
|
+
parts.push(`${plannedCount} planned`);
|
|
156
|
+
if (archivedCount > 0)
|
|
157
|
+
parts.push(`${archivedCount} archived`);
|
|
158
|
+
this.context.stdout.write(chalk.gray(` Total: ${repos.length} repositor${repos.length === 1 ? 'y' : 'ies'}`));
|
|
159
|
+
if (parts.length > 0) {
|
|
160
|
+
this.context.stdout.write(chalk.gray(` (${parts.join(', ')})`));
|
|
161
|
+
}
|
|
162
|
+
this.context.stdout.write('\n\n');
|
|
163
|
+
return 0;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Format status with color
|
|
167
|
+
*/
|
|
168
|
+
formatStatus(status) {
|
|
169
|
+
switch (status) {
|
|
170
|
+
case 'active':
|
|
171
|
+
return chalk.green('active');
|
|
172
|
+
case 'planned':
|
|
173
|
+
return chalk.yellow('planned');
|
|
174
|
+
case 'archived':
|
|
175
|
+
return chalk.gray('archived');
|
|
176
|
+
default:
|
|
177
|
+
return status;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Output repos as JSON
|
|
182
|
+
*/
|
|
183
|
+
outputJson(repos) {
|
|
184
|
+
this.context.stdout.write(JSON.stringify(repos, null, 2) + '\n');
|
|
185
|
+
return 0;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Output only aliases (for scripting)
|
|
189
|
+
*/
|
|
190
|
+
outputQuiet(repos) {
|
|
191
|
+
for (const repo of repos) {
|
|
192
|
+
this.context.stdout.write(repo.alias + '\n');
|
|
193
|
+
}
|
|
194
|
+
return 0;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/cli/commands/repo/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Command } from 'clipanion';
|
|
2
|
+
export declare class RepoRemoveCommand extends Command {
|
|
3
|
+
static paths: string[][];
|
|
4
|
+
static usage: import("clipanion").Usage;
|
|
5
|
+
alias: string | undefined;
|
|
6
|
+
force: boolean;
|
|
7
|
+
execute(): Promise<number>;
|
|
8
|
+
/**
|
|
9
|
+
* Get target alias from argument or prompt user for selection
|
|
10
|
+
*/
|
|
11
|
+
private getTargetAlias;
|
|
12
|
+
/**
|
|
13
|
+
* Show available aliases when invalid alias provided
|
|
14
|
+
*/
|
|
15
|
+
private showAvailableAliases;
|
|
16
|
+
/**
|
|
17
|
+
* Show repository details before confirmation
|
|
18
|
+
*/
|
|
19
|
+
private showRepoDetails;
|
|
20
|
+
/**
|
|
21
|
+
* Format status with color
|
|
22
|
+
*/
|
|
23
|
+
private formatStatus;
|
|
24
|
+
/**
|
|
25
|
+
* Check for pending scopes that target this repository
|
|
26
|
+
*/
|
|
27
|
+
private checkPendingScopes;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=remove.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/repo/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAU5C,qBAAa,iBAAkB,SAAQ,OAAO;IAC5C,OAAgB,KAAK,aAAwB;IAE7C,OAAgB,KAAK,4BAalB;IAEH,KAAK,qBAAsC;IAE3C,KAAK,UAEF;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAmIhC;;OAEG;YACW,cAAc;IAsB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;YACW,kBAAkB;CAqCjC"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { Command, Option } from 'clipanion';
|
|
2
|
+
import { confirm, select } from '@inquirer/prompts';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { rm } from 'fs/promises';
|
|
5
|
+
import { existsSync } from 'fs';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { loadConfig, saveConfig } from '../../../core/config.js';
|
|
8
|
+
import { findProjectRoot } from '../../../core/project.js';
|
|
9
|
+
export class RepoRemoveCommand extends Command {
|
|
10
|
+
static paths = [['repo', 'remove']];
|
|
11
|
+
static usage = Command.Usage({
|
|
12
|
+
description: 'Remove a repository from the planning hub',
|
|
13
|
+
details: `
|
|
14
|
+
Removes a repository registration from the planning hub configuration.
|
|
15
|
+
|
|
16
|
+
NOTE: This does NOT delete the GitHub repository or remove any
|
|
17
|
+
files from the remote repo. It only removes the local registration.
|
|
18
|
+
`,
|
|
19
|
+
examples: [
|
|
20
|
+
['Remove by alias', 'vibe repo remove backend'],
|
|
21
|
+
['Force without confirmation', 'vibe repo remove backend --force'],
|
|
22
|
+
['Interactive mode', 'vibe repo remove'],
|
|
23
|
+
],
|
|
24
|
+
});
|
|
25
|
+
alias = Option.String({ required: false });
|
|
26
|
+
force = Option.Boolean('--force,-f', false, {
|
|
27
|
+
description: 'Skip confirmation prompt',
|
|
28
|
+
});
|
|
29
|
+
async execute() {
|
|
30
|
+
this.context.stdout.write('\n');
|
|
31
|
+
this.context.stdout.write(chalk.bold.blue(' REMOVE REPOSITORY\n'));
|
|
32
|
+
this.context.stdout.write(chalk.gray(' ─'.repeat(25)) + '\n\n');
|
|
33
|
+
try {
|
|
34
|
+
// Step 1: Find project root
|
|
35
|
+
const projectRoot = findProjectRoot(process.cwd());
|
|
36
|
+
if (!projectRoot) {
|
|
37
|
+
this.context.stderr.write(chalk.red(' Error: Not inside a vibe-fabric project.\n'));
|
|
38
|
+
this.context.stderr.write(chalk.gray(' Run `vibe init` to create a planning hub first.\n\n'));
|
|
39
|
+
return 1;
|
|
40
|
+
}
|
|
41
|
+
// Step 2: Load configuration
|
|
42
|
+
const config = await loadConfig(projectRoot);
|
|
43
|
+
if (!config) {
|
|
44
|
+
this.context.stderr.write(chalk.red(' Error: Failed to load configuration.\n'));
|
|
45
|
+
this.context.stderr.write(chalk.gray(' Run `vibe doctor` to diagnose configuration issues.\n\n'));
|
|
46
|
+
return 1;
|
|
47
|
+
}
|
|
48
|
+
// Step 3: Check if any repos exist
|
|
49
|
+
if (config.repos.length === 0) {
|
|
50
|
+
this.context.stdout.write(chalk.yellow(' No repositories configured.\n'));
|
|
51
|
+
this.context.stdout.write(chalk.gray(' Run `vibe repo add` to add a repository first.\n\n'));
|
|
52
|
+
return 0;
|
|
53
|
+
}
|
|
54
|
+
// Step 4: Get alias (from argument or interactive selection)
|
|
55
|
+
const targetAlias = await this.getTargetAlias(config.repos);
|
|
56
|
+
if (!targetAlias) {
|
|
57
|
+
this.context.stdout.write(chalk.gray(' Cancelled.\n\n'));
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
// Step 5: Find the repo
|
|
61
|
+
const repo = config.repos.find((r) => r.alias === targetAlias);
|
|
62
|
+
if (!repo) {
|
|
63
|
+
this.context.stderr.write(chalk.red(` Error: Repository "${targetAlias}" not found.\n\n`));
|
|
64
|
+
this.showAvailableAliases(config.repos);
|
|
65
|
+
return 1;
|
|
66
|
+
}
|
|
67
|
+
// Step 6: Check for pending scopes (warning only)
|
|
68
|
+
const pendingScopes = await this.checkPendingScopes(projectRoot, targetAlias);
|
|
69
|
+
if (pendingScopes.length > 0) {
|
|
70
|
+
this.context.stdout.write(chalk.yellow(` ⚠ Warning: Found ${pendingScopes.length} scope(s) targeting this repository:\n`));
|
|
71
|
+
for (const scope of pendingScopes.slice(0, 3)) {
|
|
72
|
+
this.context.stdout.write(chalk.gray(` - ${scope}\n`));
|
|
73
|
+
}
|
|
74
|
+
if (pendingScopes.length > 3) {
|
|
75
|
+
this.context.stdout.write(chalk.gray(` ... and ${pendingScopes.length - 3} more\n`));
|
|
76
|
+
}
|
|
77
|
+
this.context.stdout.write('\n');
|
|
78
|
+
}
|
|
79
|
+
// Step 7: Show repo details and confirm
|
|
80
|
+
if (!this.force) {
|
|
81
|
+
this.showRepoDetails(repo);
|
|
82
|
+
this.context.stdout.write(chalk.gray(' NOTE: This only removes the local registration.\n'));
|
|
83
|
+
this.context.stdout.write(chalk.gray(' The GitHub repository and its files will NOT be deleted.\n\n'));
|
|
84
|
+
const confirmed = await confirm({
|
|
85
|
+
message: `Remove "${targetAlias}" from planning hub?`,
|
|
86
|
+
default: false,
|
|
87
|
+
});
|
|
88
|
+
if (!confirmed) {
|
|
89
|
+
this.context.stdout.write(chalk.gray('\n Cancelled.\n\n'));
|
|
90
|
+
return 0;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Step 8: Remove from config
|
|
94
|
+
config.repos = config.repos.filter((r) => r.alias !== targetAlias);
|
|
95
|
+
await saveConfig(projectRoot, config);
|
|
96
|
+
// Step 9: Clean up sync-cache if exists
|
|
97
|
+
const syncCachePath = path.join(projectRoot, 'docs', 'sync-cache', targetAlias);
|
|
98
|
+
if (existsSync(syncCachePath)) {
|
|
99
|
+
await rm(syncCachePath, { recursive: true, force: true });
|
|
100
|
+
this.context.stdout.write(chalk.gray(`\n Cleaned up sync-cache for ${targetAlias}\n`));
|
|
101
|
+
}
|
|
102
|
+
// Step 10: Show success
|
|
103
|
+
this.context.stdout.write('\n');
|
|
104
|
+
this.context.stdout.write(chalk.green.bold(' ✓ Repository removed!\n\n'));
|
|
105
|
+
this.context.stdout.write(chalk.gray(` "${targetAlias}" has been removed from the planning hub.\n`));
|
|
106
|
+
this.context.stdout.write(chalk.gray(` Remaining repositories: ${config.repos.length}\n\n`));
|
|
107
|
+
return 0;
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
if (error instanceof Error && error.message === 'USER_CANCELLED') {
|
|
111
|
+
this.context.stdout.write(chalk.gray('\n Cancelled.\n\n'));
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
this.context.stderr.write(chalk.red(`\n Error: ${error instanceof Error ? error.message : 'Unknown error'}\n\n`));
|
|
115
|
+
return 1;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get target alias from argument or prompt user for selection
|
|
120
|
+
*/
|
|
121
|
+
async getTargetAlias(repos) {
|
|
122
|
+
if (this.alias) {
|
|
123
|
+
return this.alias;
|
|
124
|
+
}
|
|
125
|
+
// Interactive mode - show selection
|
|
126
|
+
const choices = repos.map((r) => ({
|
|
127
|
+
name: `${r.alias} (${r.name || r.url || 'planned'})`,
|
|
128
|
+
value: r.alias,
|
|
129
|
+
}));
|
|
130
|
+
try {
|
|
131
|
+
const selected = await select({
|
|
132
|
+
message: 'Select repository to remove:',
|
|
133
|
+
choices,
|
|
134
|
+
});
|
|
135
|
+
return selected;
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Show available aliases when invalid alias provided
|
|
143
|
+
*/
|
|
144
|
+
showAvailableAliases(repos) {
|
|
145
|
+
this.context.stdout.write(chalk.gray(' Available repositories:\n'));
|
|
146
|
+
for (const repo of repos) {
|
|
147
|
+
this.context.stdout.write(chalk.gray(` - ${repo.alias}\n`));
|
|
148
|
+
}
|
|
149
|
+
this.context.stdout.write('\n');
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Show repository details before confirmation
|
|
153
|
+
*/
|
|
154
|
+
showRepoDetails(repo) {
|
|
155
|
+
this.context.stdout.write(chalk.bold(' Repository Details:\n'));
|
|
156
|
+
this.context.stdout.write(` ${chalk.gray('Alias:')} ${chalk.cyan(repo.alias)}\n`);
|
|
157
|
+
this.context.stdout.write(` ${chalk.gray('Name:')} ${repo.name}\n`);
|
|
158
|
+
if (repo.url) {
|
|
159
|
+
this.context.stdout.write(` ${chalk.gray('URL:')} ${repo.url}\n`);
|
|
160
|
+
}
|
|
161
|
+
this.context.stdout.write(` ${chalk.gray('Status:')} ${this.formatStatus(repo.status)}\n`);
|
|
162
|
+
this.context.stdout.write(` ${chalk.gray('Branch:')} ${repo.branch}\n`);
|
|
163
|
+
if (repo.addedAt) {
|
|
164
|
+
const addedDate = new Date(repo.addedAt).toISOString().split('T')[0];
|
|
165
|
+
this.context.stdout.write(` ${chalk.gray('Added:')} ${addedDate}\n`);
|
|
166
|
+
}
|
|
167
|
+
this.context.stdout.write('\n');
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Format status with color
|
|
171
|
+
*/
|
|
172
|
+
formatStatus(status) {
|
|
173
|
+
switch (status) {
|
|
174
|
+
case 'active':
|
|
175
|
+
return chalk.green('active');
|
|
176
|
+
case 'planned':
|
|
177
|
+
return chalk.yellow('planned');
|
|
178
|
+
case 'archived':
|
|
179
|
+
return chalk.gray('archived');
|
|
180
|
+
default:
|
|
181
|
+
return status;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Check for pending scopes that target this repository
|
|
186
|
+
*/
|
|
187
|
+
async checkPendingScopes(projectRoot, alias) {
|
|
188
|
+
const pendingScopes = [];
|
|
189
|
+
const scopesDir = path.join(projectRoot, 'docs', 'scopes', 'drafts');
|
|
190
|
+
if (!existsSync(scopesDir)) {
|
|
191
|
+
return pendingScopes;
|
|
192
|
+
}
|
|
193
|
+
try {
|
|
194
|
+
const { readdir, readFile } = await import('fs/promises');
|
|
195
|
+
const files = await readdir(scopesDir);
|
|
196
|
+
for (const file of files) {
|
|
197
|
+
if (!file.endsWith('.md'))
|
|
198
|
+
continue;
|
|
199
|
+
const filePath = path.join(scopesDir, file);
|
|
200
|
+
const content = await readFile(filePath, 'utf-8');
|
|
201
|
+
// Check if scope targets this repo (simple text search)
|
|
202
|
+
// Look for target repo references in metadata or content
|
|
203
|
+
if (content.includes(`target: ${alias}`) ||
|
|
204
|
+
content.includes(`Target: ${alias}`) ||
|
|
205
|
+
content.includes(`\`${alias}\``) ||
|
|
206
|
+
content.toLowerCase().includes(`target.*${alias}`.toLowerCase())) {
|
|
207
|
+
// Extract scope ID from filename
|
|
208
|
+
const scopeId = file.replace('.md', '').toUpperCase();
|
|
209
|
+
pendingScopes.push(scopeId);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
// Silently ignore errors reading scope files
|
|
215
|
+
}
|
|
216
|
+
return pendingScopes;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=remove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../../src/cli/commands/repo/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D,MAAM,OAAO,iBAAkB,SAAQ,OAAO;IAC5C,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE7C,MAAM,CAAU,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,WAAW,EAAE,2CAA2C;QACxD,OAAO,EAAE;;;;;KAKR;QACD,QAAQ,EAAE;YACR,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;YAC/C,CAAC,4BAA4B,EAAE,kCAAkC,CAAC;YAClE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;SACzC;KACF,CAAC,CAAC;IAEH,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAE3C,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE;QAC1C,WAAW,EAAE,0BAA0B;KACxC,CAAC,CAAC;IAEH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAEjE,IAAI,CAAC;YACH,4BAA4B;YAC5B,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAC1D,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CACpE,CAAC;gBACF,OAAO,CAAC,CAAC;YACX,CAAC;YAED,6BAA6B;YAC7B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CACtD,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CACxE,CAAC;gBACF,OAAO,CAAC,CAAC;YACX,CAAC;YAED,mCAAmC;YACnC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAChD,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CACnE,CAAC;gBACF,OAAO,CAAC,CAAC;YACX,CAAC;YAED,6DAA6D;YAC7D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,CAAC;YACX,CAAC;YAED,wBAAwB;YACxB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;YAC/D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,GAAG,CAAC,wBAAwB,WAAW,kBAAkB,CAAC,CACjE,CAAC;gBACF,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACxC,OAAO,CAAC,CAAC;YACX,CAAC;YAED,kDAAkD;YAClD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YAC9E,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,MAAM,CAAC,sBAAsB,aAAa,CAAC,MAAM,wCAAwC,CAAC,CACjG,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC9C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC;gBAC5D,CAAC;gBACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,aAAa,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC1F,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YAED,wCAAwC;YACxC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBAE3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAClE,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAC7E,CAAC;gBAEF,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;oBAC9B,OAAO,EAAE,WAAW,WAAW,sBAAsB;oBACrD,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;gBAEH,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAC5D,OAAO,CAAC,CAAC;gBACX,CAAC;YACH,CAAC;YAED,6BAA6B;YAC7B,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;YACnE,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAEtC,wCAAwC;YACxC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;YAChF,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC9B,MAAM,EAAE,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,IAAI,CAAC,iCAAiC,WAAW,IAAI,CAAC,CAC7D,CAAC;YACJ,CAAC;YAED,wBAAwB;YACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;YAC3E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,IAAI,CAAC,MAAM,WAAW,6CAA6C,CAAC,CAC3E,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,IAAI,CAAC,6BAA6B,MAAM,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,CACnE,CAAC;YAEF,OAAO,CAAC,CAAC;QACX,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,gBAAgB,EAAE,CAAC;gBACjE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAC5D,OAAO,CAAC,CAAC;YACX,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,GAAG,CAAC,cAAc,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,CACxF,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,KAAa;QACxC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QAED,oCAAoC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,SAAS,GAAG;YACpD,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;gBAC5B,OAAO,EAAE,8BAA8B;gBACvC,OAAO;aACR,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,KAAa;QACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACrE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,IAAU;QAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/F,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QAC5E,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,SAAS,IAAI,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,MAAc;QACjC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,QAAQ;gBACX,OAAO,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC/B,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACjC,KAAK,UAAU;gBACb,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAChC;gBACE,OAAO,MAAM,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAAC,WAAmB,EAAE,KAAa;QACjE,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAErE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;YAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,SAAS;gBAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC5C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAElD,wDAAwD;gBACxD,yDAAyD;gBACzD,IACE,OAAO,CAAC,QAAQ,CAAC,WAAW,KAAK,EAAE,CAAC;oBACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,KAAK,EAAE,CAAC;oBACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;oBAChC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,EAChE,CAAC;oBACD,iCAAiC;oBACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;oBACtD,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vibe report - Generate exportable project reports
|
|
3
|
+
*
|
|
4
|
+
* Generates project reports in Markdown, JSON, or HTML format for sharing
|
|
5
|
+
* with stakeholders or integration with external tools.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'clipanion';
|
|
8
|
+
export declare class ReportCommand extends Command {
|
|
9
|
+
static paths: string[][];
|
|
10
|
+
static usage: import("clipanion").Usage;
|
|
11
|
+
format: string;
|
|
12
|
+
output: string | undefined;
|
|
13
|
+
type: string;
|
|
14
|
+
execute(): Promise<number>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AA0B5C,qBAAa,aAAc,SAAQ,OAAO;IACxC,OAAgB,KAAK,aAAgB;IAErC,OAAgB,KAAK,4BA0BlB;IAGH,MAAM,SAEH;IAEH,MAAM,qBAEH;IAEH,IAAI,SAED;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAmHjC"}
|