vibe-fabric 0.3.2 → 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.
- package/.claude/prompts/analyze/assess.md +208 -0
- package/.claude/prompts/analyze/synthesize.md +239 -0
- package/.claude/prompts/analyze/task-analyze-repo.md +260 -0
- package/.claude/prompts/gaps/assess.md +203 -0
- package/.claude/prompts/gaps/synthesize.md +180 -0
- package/.claude/prompts/gaps/task-analyze-module.md +198 -0
- package/.claude/prompts/prd/assess.md +156 -0
- package/.claude/prompts/prd/synthesize.md +191 -0
- package/.claude/prompts/prd/task-capture-feature.md +133 -0
- package/.claude/prompts/prd/task-deprecate.md +84 -0
- package/.claude/prompts/prd/task-document-code.md +110 -0
- package/.claude/prompts/prd/task-fix-format.md +102 -0
- package/.claude/prompts/prd/task-update-status.md +89 -0
- package/.claude/prompts/scope/assess.md +201 -0
- package/.claude/prompts/scope/synthesize.md +270 -0
- package/.claude/prompts/scope/task-analyze-prd.md +125 -0
- package/.claude/prompts/scope/task-check-deps.md +188 -0
- package/.claude/prompts/scope/task-create-scope.md +207 -0
- package/.claude/prompts/scope/task-recommend.md +146 -0
- package/.claude/prompts/scope/task-review-scope.md +191 -0
- package/.claude/prompts/scope/task-validate.md +203 -0
- 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/project.d.ts.map +1 -1
- package/dist/core/project.js +49 -1
- package/dist/core/project.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/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 +2 -1
|
@@ -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":"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"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
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, Option } from 'clipanion';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import ora from 'ora';
|
|
10
|
+
import { writeFile, mkdir } from 'fs/promises';
|
|
11
|
+
import { existsSync } from 'fs';
|
|
12
|
+
import path from 'path';
|
|
13
|
+
import { loadConfig } from '../../core/config.js';
|
|
14
|
+
import { findProjectRoot } from '../../core/project.js';
|
|
15
|
+
import { aggregateReportData, generateMarkdown, generateJson, generateHtml, } from '../../core/report.js';
|
|
16
|
+
/**
|
|
17
|
+
* Valid format values
|
|
18
|
+
*/
|
|
19
|
+
const VALID_FORMATS = ['markdown', 'json', 'html'];
|
|
20
|
+
/**
|
|
21
|
+
* Valid type values
|
|
22
|
+
*/
|
|
23
|
+
const VALID_TYPES = ['full', 'status', 'coverage', 'gaps'];
|
|
24
|
+
export class ReportCommand extends Command {
|
|
25
|
+
static paths = [['report']];
|
|
26
|
+
static usage = Command.Usage({
|
|
27
|
+
description: 'Generate exportable project reports',
|
|
28
|
+
details: `
|
|
29
|
+
Generates project reports in various formats for sharing with stakeholders
|
|
30
|
+
or integration with external tools.
|
|
31
|
+
|
|
32
|
+
Supported formats:
|
|
33
|
+
- markdown (default): GitHub-flavored Markdown
|
|
34
|
+
- json: Machine-readable JSON with schema
|
|
35
|
+
- html: Self-contained HTML with embedded CSS
|
|
36
|
+
|
|
37
|
+
Report types:
|
|
38
|
+
- full (default): All sections included
|
|
39
|
+
- status: Repository and scope status only
|
|
40
|
+
- coverage: PRD coverage analysis only
|
|
41
|
+
- gaps: Gap analysis only
|
|
42
|
+
|
|
43
|
+
Output is written to stdout by default, or to a file with --output.
|
|
44
|
+
`,
|
|
45
|
+
examples: [
|
|
46
|
+
['Generate Markdown report to stdout', 'vibe report'],
|
|
47
|
+
['Generate JSON report', 'vibe report --format json'],
|
|
48
|
+
['Generate HTML report to file', 'vibe report --format html --output report.html'],
|
|
49
|
+
['Generate coverage-only report', 'vibe report --type coverage'],
|
|
50
|
+
['Generate gaps report as JSON', 'vibe report --type gaps --format json'],
|
|
51
|
+
],
|
|
52
|
+
});
|
|
53
|
+
// Options
|
|
54
|
+
format = Option.String('--format,-f', 'markdown', {
|
|
55
|
+
description: 'Output format: markdown, json, html',
|
|
56
|
+
});
|
|
57
|
+
output = Option.String('--output,-o', {
|
|
58
|
+
description: 'Write report to file instead of stdout',
|
|
59
|
+
});
|
|
60
|
+
type = Option.String('--type,-t', 'full', {
|
|
61
|
+
description: 'Report type: full, status, coverage, gaps',
|
|
62
|
+
});
|
|
63
|
+
async execute() {
|
|
64
|
+
// Validate format
|
|
65
|
+
const format = this.format.toLowerCase();
|
|
66
|
+
if (!VALID_FORMATS.includes(format)) {
|
|
67
|
+
this.context.stderr.write(chalk.red(` Error: Invalid format '${this.format}'.\n`));
|
|
68
|
+
this.context.stderr.write(chalk.gray(` Valid formats: ${VALID_FORMATS.join(', ')}\n\n`));
|
|
69
|
+
return 1;
|
|
70
|
+
}
|
|
71
|
+
// Validate type
|
|
72
|
+
const reportType = this.type.toLowerCase();
|
|
73
|
+
if (!VALID_TYPES.includes(reportType)) {
|
|
74
|
+
this.context.stderr.write(chalk.red(` Error: Invalid type '${this.type}'.\n`));
|
|
75
|
+
this.context.stderr.write(chalk.gray(` Valid types: ${VALID_TYPES.join(', ')}\n\n`));
|
|
76
|
+
return 1;
|
|
77
|
+
}
|
|
78
|
+
// Find project root
|
|
79
|
+
const projectRoot = findProjectRoot(process.cwd());
|
|
80
|
+
if (!projectRoot) {
|
|
81
|
+
this.context.stderr.write(chalk.red(' Error: Not inside a vibe-fabric project.\n'));
|
|
82
|
+
this.context.stderr.write(chalk.gray(' Run `vibe init` to create a planning hub first.\n\n'));
|
|
83
|
+
return 1;
|
|
84
|
+
}
|
|
85
|
+
// Load config
|
|
86
|
+
const config = await loadConfig(projectRoot);
|
|
87
|
+
if (!config) {
|
|
88
|
+
this.context.stderr.write(chalk.red(' Error: Failed to load configuration.\n\n'));
|
|
89
|
+
return 1;
|
|
90
|
+
}
|
|
91
|
+
// Show spinner only when writing to file (stdout should be clean for piping)
|
|
92
|
+
const showSpinner = !!this.output;
|
|
93
|
+
const spinner = showSpinner ? ora('Generating report...').start() : null;
|
|
94
|
+
try {
|
|
95
|
+
// Aggregate data
|
|
96
|
+
const data = await aggregateReportData(projectRoot, config);
|
|
97
|
+
// Generate report
|
|
98
|
+
let report;
|
|
99
|
+
switch (format) {
|
|
100
|
+
case 'json':
|
|
101
|
+
report = generateJson(data, reportType);
|
|
102
|
+
break;
|
|
103
|
+
case 'html':
|
|
104
|
+
report = generateHtml(data, reportType);
|
|
105
|
+
break;
|
|
106
|
+
case 'markdown':
|
|
107
|
+
default:
|
|
108
|
+
report = generateMarkdown(data, reportType);
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
// Output report
|
|
112
|
+
if (this.output) {
|
|
113
|
+
// Write to file
|
|
114
|
+
const outputPath = path.resolve(this.output);
|
|
115
|
+
const outputDir = path.dirname(outputPath);
|
|
116
|
+
// Create directory if it doesn't exist
|
|
117
|
+
if (!existsSync(outputDir)) {
|
|
118
|
+
await mkdir(outputDir, { recursive: true });
|
|
119
|
+
}
|
|
120
|
+
await writeFile(outputPath, report, 'utf-8');
|
|
121
|
+
spinner?.succeed(chalk.green(`Report saved to ${outputPath}`));
|
|
122
|
+
// Show summary
|
|
123
|
+
this.context.stdout.write('\n');
|
|
124
|
+
this.context.stdout.write(chalk.gray(` Format: ${format}\n`));
|
|
125
|
+
this.context.stdout.write(chalk.gray(` Type: ${reportType}\n`));
|
|
126
|
+
this.context.stdout.write(chalk.gray(` Health: ${getHealthDisplay(data.summary.health)}\n`));
|
|
127
|
+
this.context.stdout.write('\n');
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// Write to stdout
|
|
131
|
+
this.context.stdout.write(report);
|
|
132
|
+
if (!report.endsWith('\n')) {
|
|
133
|
+
this.context.stdout.write('\n');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return 0;
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
spinner?.fail(chalk.red('Failed to generate report'));
|
|
140
|
+
this.context.stderr.write(chalk.red(` Error: ${error instanceof Error ? error.message : 'Unknown error'}\n\n`));
|
|
141
|
+
return 1;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get colored health display
|
|
147
|
+
*/
|
|
148
|
+
function getHealthDisplay(health) {
|
|
149
|
+
switch (health) {
|
|
150
|
+
case 'healthy':
|
|
151
|
+
return chalk.green('healthy');
|
|
152
|
+
case 'warning':
|
|
153
|
+
return chalk.yellow('warning');
|
|
154
|
+
case 'critical':
|
|
155
|
+
return chalk.red('critical');
|
|
156
|
+
default:
|
|
157
|
+
return health;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -6,14 +6,21 @@ import { HelpCommand } from './commands/help.js';
|
|
|
6
6
|
import { DoctorCommand } from './commands/doctor.js';
|
|
7
7
|
import { RepoAddCommand } from './commands/repo/add.js';
|
|
8
8
|
import { RepoCreateCommand } from './commands/repo/create.js';
|
|
9
|
+
import { RepoListCommand } from './commands/repo/list.js';
|
|
10
|
+
import { RepoRemoveCommand } from './commands/repo/remove.js';
|
|
9
11
|
import { PrdCommand } from './commands/prd.js';
|
|
12
|
+
import { AnalyzeCommand } from './commands/analyze.js';
|
|
10
13
|
import { ScopeCommand } from './commands/scope.js';
|
|
11
14
|
import { SendCommand } from './commands/send.js';
|
|
12
15
|
import { SyncCommand } from './commands/sync.js';
|
|
13
16
|
import { StatusCommand } from './commands/status.js';
|
|
14
17
|
import { CoverageCommand } from './commands/coverage.js';
|
|
15
18
|
import { GapsCommand } from './commands/gaps.js';
|
|
19
|
+
import { ReportCommand } from './commands/report.js';
|
|
16
20
|
import { ClaudeCommandsCommand } from './commands/claude.js';
|
|
21
|
+
import { ConfigGetCommand } from './commands/config/get.js';
|
|
22
|
+
import { ConfigSetCommand } from './commands/config/set.js';
|
|
23
|
+
import { ConfigListCommand } from './commands/config/list.js';
|
|
17
24
|
import { runDashboard } from './ui/dashboard.js';
|
|
18
25
|
// Create CLI instance
|
|
19
26
|
const cli = new Cli({
|
|
@@ -28,14 +35,21 @@ cli.register(HelpCommand);
|
|
|
28
35
|
cli.register(DoctorCommand);
|
|
29
36
|
cli.register(RepoAddCommand);
|
|
30
37
|
cli.register(RepoCreateCommand);
|
|
38
|
+
cli.register(RepoListCommand);
|
|
39
|
+
cli.register(RepoRemoveCommand);
|
|
31
40
|
cli.register(PrdCommand);
|
|
41
|
+
cli.register(AnalyzeCommand);
|
|
32
42
|
cli.register(ScopeCommand);
|
|
33
43
|
cli.register(SendCommand);
|
|
34
44
|
cli.register(SyncCommand);
|
|
35
45
|
cli.register(StatusCommand);
|
|
36
46
|
cli.register(CoverageCommand);
|
|
37
47
|
cli.register(GapsCommand);
|
|
48
|
+
cli.register(ReportCommand);
|
|
38
49
|
cli.register(ClaudeCommandsCommand);
|
|
50
|
+
cli.register(ConfigGetCommand);
|
|
51
|
+
cli.register(ConfigSetCommand);
|
|
52
|
+
cli.register(ConfigListCommand);
|
|
39
53
|
// Register built-in commands
|
|
40
54
|
cli.register(Builtins.DefinitionsCommand);
|
|
41
55
|
// Run CLI
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,sBAAsB;AACtB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;IAClB,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,MAAM;IAClB,aAAa,EAAE,OAAO;CACvB,CAAC,CAAC;AAEH,oBAAoB;AACpB,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC1B,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC7B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC1B,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC5B,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC7B,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAChC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACzB,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC3B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC1B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC1B,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC5B,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAC9B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC1B,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -15,4 +15,29 @@ export declare function isVibeProject(dirPath: string): boolean;
|
|
|
15
15
|
* Get the config file path for a project
|
|
16
16
|
*/
|
|
17
17
|
export declare function getConfigPath(projectPath: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Get a config value by dot-notation key
|
|
20
|
+
* @param config - The configuration object
|
|
21
|
+
* @param key - Dot-notation key (e.g., "project.name", "repos")
|
|
22
|
+
* @returns The value at the key, or undefined if not found
|
|
23
|
+
*/
|
|
24
|
+
export declare function getConfigValue(config: Config, key: string): unknown;
|
|
25
|
+
/**
|
|
26
|
+
* Set a config value by dot-notation key
|
|
27
|
+
* @param config - The configuration object to modify
|
|
28
|
+
* @param key - Dot-notation key (e.g., "project.name")
|
|
29
|
+
* @param value - The value to set
|
|
30
|
+
* @returns The modified config
|
|
31
|
+
*/
|
|
32
|
+
export declare function setConfigValue(config: Config, key: string, value: unknown): Config;
|
|
33
|
+
/**
|
|
34
|
+
* Parse a string value to appropriate type
|
|
35
|
+
* @param value - The string value to parse
|
|
36
|
+
* @returns The parsed value (boolean, number, or string)
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseValue(value: string): unknown;
|
|
39
|
+
/**
|
|
40
|
+
* Get all valid config keys (for validation and autocomplete)
|
|
41
|
+
*/
|
|
42
|
+
export declare function getValidConfigKeys(): string[];
|
|
18
43
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAgB,MAAM,oBAAoB,CAAC;AAmB1D;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsB5E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBnF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAgB,MAAM,oBAAoB,CAAC;AAmB1D;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsB5E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBnF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAWnE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACb,MAAM,CAcR;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAcjD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAc7C"}
|