vibe-fabric 0.1.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/LICENSE +21 -0
- package/README.md +171 -0
- package/dist/cli/commands/claude.d.ts +19 -0
- package/dist/cli/commands/claude.d.ts.map +1 -0
- package/dist/cli/commands/claude.js +107 -0
- package/dist/cli/commands/claude.js.map +1 -0
- package/dist/cli/commands/coverage.d.ts +37 -0
- package/dist/cli/commands/coverage.d.ts.map +1 -0
- package/dist/cli/commands/coverage.js +374 -0
- package/dist/cli/commands/coverage.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +30 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +187 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/gaps.d.ts +52 -0
- package/dist/cli/commands/gaps.d.ts.map +1 -0
- package/dist/cli/commands/gaps.js +487 -0
- package/dist/cli/commands/gaps.js.map +1 -0
- package/dist/cli/commands/help.d.ts +7 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +51 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/init.d.ts +39 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +246 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/prd.d.ts +30 -0
- package/dist/cli/commands/prd.d.ts.map +1 -0
- package/dist/cli/commands/prd.js +179 -0
- package/dist/cli/commands/prd.js.map +1 -0
- package/dist/cli/commands/repo/add.d.ts +36 -0
- package/dist/cli/commands/repo/add.d.ts.map +1 -0
- package/dist/cli/commands/repo/add.js +303 -0
- package/dist/cli/commands/repo/add.js.map +1 -0
- package/dist/cli/commands/scope.d.ts +36 -0
- package/dist/cli/commands/scope.d.ts.map +1 -0
- package/dist/cli/commands/scope.js +312 -0
- package/dist/cli/commands/scope.js.map +1 -0
- package/dist/cli/commands/send.d.ts +43 -0
- package/dist/cli/commands/send.d.ts.map +1 -0
- package/dist/cli/commands/send.js +469 -0
- package/dist/cli/commands/send.js.map +1 -0
- package/dist/cli/commands/status.d.ts +32 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +422 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +37 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +299 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/version.d.ts +7 -0
- package/dist/cli/commands/version.d.ts.map +1 -0
- package/dist/cli/commands/version.js +45 -0
- package/dist/cli/commands/version.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +65 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ui/components/ActiveScopes.d.ts +13 -0
- package/dist/cli/ui/components/ActiveScopes.d.ts.map +1 -0
- package/dist/cli/ui/components/ActiveScopes.js +25 -0
- package/dist/cli/ui/components/ActiveScopes.js.map +1 -0
- package/dist/cli/ui/components/EmptyState.d.ts +24 -0
- package/dist/cli/ui/components/EmptyState.d.ts.map +1 -0
- package/dist/cli/ui/components/EmptyState.js +13 -0
- package/dist/cli/ui/components/EmptyState.js.map +1 -0
- package/dist/cli/ui/components/Header.d.ts +11 -0
- package/dist/cli/ui/components/Header.d.ts.map +1 -0
- package/dist/cli/ui/components/Header.js +32 -0
- package/dist/cli/ui/components/Header.js.map +1 -0
- package/dist/cli/ui/components/PrdCoverage.d.ts +12 -0
- package/dist/cli/ui/components/PrdCoverage.d.ts.map +1 -0
- package/dist/cli/ui/components/PrdCoverage.js +15 -0
- package/dist/cli/ui/components/PrdCoverage.js.map +1 -0
- package/dist/cli/ui/components/RecentActivity.d.ts +12 -0
- package/dist/cli/ui/components/RecentActivity.d.ts.map +1 -0
- package/dist/cli/ui/components/RecentActivity.js +40 -0
- package/dist/cli/ui/components/RecentActivity.js.map +1 -0
- package/dist/cli/ui/components/RepoList.d.ts +12 -0
- package/dist/cli/ui/components/RepoList.d.ts.map +1 -0
- package/dist/cli/ui/components/RepoList.js +24 -0
- package/dist/cli/ui/components/RepoList.js.map +1 -0
- package/dist/cli/ui/components/Shortcuts.d.ts +7 -0
- package/dist/cli/ui/components/Shortcuts.d.ts.map +1 -0
- package/dist/cli/ui/components/Shortcuts.js +7 -0
- package/dist/cli/ui/components/Shortcuts.js.map +1 -0
- package/dist/cli/ui/components/index.d.ts +12 -0
- package/dist/cli/ui/components/index.d.ts.map +1 -0
- package/dist/cli/ui/components/index.js +12 -0
- package/dist/cli/ui/components/index.js.map +1 -0
- package/dist/cli/ui/dashboard.d.ts +9 -0
- package/dist/cli/ui/dashboard.d.ts.map +1 -0
- package/dist/cli/ui/dashboard.js +102 -0
- package/dist/cli/ui/dashboard.js.map +1 -0
- package/dist/core/commands.d.ts +32 -0
- package/dist/core/commands.d.ts.map +1 -0
- package/dist/core/commands.js +361 -0
- package/dist/core/commands.js.map +1 -0
- package/dist/core/config.d.ts +18 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +78 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/coverage.d.ts +32 -0
- package/dist/core/coverage.d.ts.map +1 -0
- package/dist/core/coverage.js +286 -0
- package/dist/core/coverage.js.map +1 -0
- package/dist/core/dashboard/data.d.ts +73 -0
- package/dist/core/dashboard/data.d.ts.map +1 -0
- package/dist/core/dashboard/data.js +250 -0
- package/dist/core/dashboard/data.js.map +1 -0
- package/dist/core/dependencies.d.ts +39 -0
- package/dist/core/dependencies.d.ts.map +1 -0
- package/dist/core/dependencies.js +160 -0
- package/dist/core/dependencies.js.map +1 -0
- package/dist/core/doctor/auth.d.ts +22 -0
- package/dist/core/doctor/auth.d.ts.map +1 -0
- package/dist/core/doctor/auth.js +147 -0
- package/dist/core/doctor/auth.js.map +1 -0
- package/dist/core/doctor/config.d.ts +26 -0
- package/dist/core/doctor/config.d.ts.map +1 -0
- package/dist/core/doctor/config.js +172 -0
- package/dist/core/doctor/config.js.map +1 -0
- package/dist/core/doctor/environment.d.ts +26 -0
- package/dist/core/doctor/environment.d.ts.map +1 -0
- package/dist/core/doctor/environment.js +145 -0
- package/dist/core/doctor/environment.js.map +1 -0
- package/dist/core/doctor/index.d.ts +44 -0
- package/dist/core/doctor/index.d.ts.map +1 -0
- package/dist/core/doctor/index.js +134 -0
- package/dist/core/doctor/index.js.map +1 -0
- package/dist/core/doctor/repos.d.ts +22 -0
- package/dist/core/doctor/repos.d.ts.map +1 -0
- package/dist/core/doctor/repos.js +262 -0
- package/dist/core/doctor/repos.js.map +1 -0
- package/dist/core/doctor/sync.d.ts +18 -0
- package/dist/core/doctor/sync.d.ts.map +1 -0
- package/dist/core/doctor/sync.js +146 -0
- package/dist/core/doctor/sync.js.map +1 -0
- package/dist/core/gaps.d.ts +70 -0
- package/dist/core/gaps.d.ts.map +1 -0
- package/dist/core/gaps.js +448 -0
- package/dist/core/gaps.js.map +1 -0
- package/dist/core/github.d.ts +38 -0
- package/dist/core/github.d.ts.map +1 -0
- package/dist/core/github.js +102 -0
- package/dist/core/github.js.map +1 -0
- package/dist/core/prd/analyzer.d.ts +44 -0
- package/dist/core/prd/analyzer.d.ts.map +1 -0
- package/dist/core/prd/analyzer.js +259 -0
- package/dist/core/prd/analyzer.js.map +1 -0
- package/dist/core/prd/check.d.ts +17 -0
- package/dist/core/prd/check.d.ts.map +1 -0
- package/dist/core/prd/check.js +154 -0
- package/dist/core/prd/check.js.map +1 -0
- package/dist/core/prd/index.d.ts +6 -0
- package/dist/core/prd/index.d.ts.map +1 -0
- package/dist/core/prd/index.js +6 -0
- package/dist/core/prd/index.js.map +1 -0
- package/dist/core/project.d.ts +13 -0
- package/dist/core/project.d.ts.map +1 -0
- package/dist/core/project.js +810 -0
- package/dist/core/project.js.map +1 -0
- package/dist/core/prompts.d.ts +52 -0
- package/dist/core/prompts.d.ts.map +1 -0
- package/dist/core/prompts.js +266 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/repo/framework.d.ts +38 -0
- package/dist/core/repo/framework.d.ts.map +1 -0
- package/dist/core/repo/framework.js +142 -0
- package/dist/core/repo/framework.js.map +1 -0
- package/dist/core/repo/index.d.ts +6 -0
- package/dist/core/repo/index.d.ts.map +1 -0
- package/dist/core/repo/index.js +6 -0
- package/dist/core/repo/index.js.map +1 -0
- package/dist/core/repo/templates/claude-agents.d.ts +6 -0
- package/dist/core/repo/templates/claude-agents.d.ts.map +1 -0
- package/dist/core/repo/templates/claude-agents.js +173 -0
- package/dist/core/repo/templates/claude-agents.js.map +1 -0
- package/dist/core/repo/templates/claude-commands.d.ts +6 -0
- package/dist/core/repo/templates/claude-commands.d.ts.map +1 -0
- package/dist/core/repo/templates/claude-commands.js +278 -0
- package/dist/core/repo/templates/claude-commands.js.map +1 -0
- package/dist/core/repo/templates/claude-prompts.d.ts +6 -0
- package/dist/core/repo/templates/claude-prompts.d.ts.map +1 -0
- package/dist/core/repo/templates/claude-prompts.js +258 -0
- package/dist/core/repo/templates/claude-prompts.js.map +1 -0
- package/dist/core/repo/templates/claude-scripts.d.ts +6 -0
- package/dist/core/repo/templates/claude-scripts.d.ts.map +1 -0
- package/dist/core/repo/templates/claude-scripts.js +212 -0
- package/dist/core/repo/templates/claude-scripts.js.map +1 -0
- package/dist/core/repo/templates/index.d.ts +22 -0
- package/dist/core/repo/templates/index.d.ts.map +1 -0
- package/dist/core/repo/templates/index.js +121 -0
- package/dist/core/repo/templates/index.js.map +1 -0
- package/dist/core/repo/templates/vibe-readme.d.ts +6 -0
- package/dist/core/repo/templates/vibe-readme.d.ts.map +1 -0
- package/dist/core/repo/templates/vibe-readme.js +204 -0
- package/dist/core/repo/templates/vibe-readme.js.map +1 -0
- package/dist/core/repo/templates/vibe-scripts.d.ts +6 -0
- package/dist/core/repo/templates/vibe-scripts.d.ts.map +1 -0
- package/dist/core/repo/templates/vibe-scripts.js +308 -0
- package/dist/core/repo/templates/vibe-scripts.js.map +1 -0
- package/dist/core/repo/validation.d.ts +46 -0
- package/dist/core/repo/validation.d.ts.map +1 -0
- package/dist/core/repo/validation.js +154 -0
- package/dist/core/repo/validation.js.map +1 -0
- package/dist/core/runner.d.ts +38 -0
- package/dist/core/runner.d.ts.map +1 -0
- package/dist/core/runner.js +124 -0
- package/dist/core/runner.js.map +1 -0
- package/dist/core/send.d.ts +83 -0
- package/dist/core/send.d.ts.map +1 -0
- package/dist/core/send.js +565 -0
- package/dist/core/send.js.map +1 -0
- package/dist/core/status.d.ts +76 -0
- package/dist/core/status.d.ts.map +1 -0
- package/dist/core/status.js +430 -0
- package/dist/core/status.js.map +1 -0
- package/dist/core/sync/aggregator.d.ts +22 -0
- package/dist/core/sync/aggregator.d.ts.map +1 -0
- package/dist/core/sync/aggregator.js +278 -0
- package/dist/core/sync/aggregator.js.map +1 -0
- package/dist/core/sync/completion.d.ts +37 -0
- package/dist/core/sync/completion.d.ts.map +1 -0
- package/dist/core/sync/completion.js +264 -0
- package/dist/core/sync/completion.js.map +1 -0
- package/dist/core/sync/index.d.ts +51 -0
- package/dist/core/sync/index.d.ts.map +1 -0
- package/dist/core/sync/index.js +200 -0
- package/dist/core/sync/index.js.map +1 -0
- package/dist/core/sync/scanner.d.ts +39 -0
- package/dist/core/sync/scanner.d.ts.map +1 -0
- package/dist/core/sync/scanner.js +364 -0
- package/dist/core/sync/scanner.js.map +1 -0
- package/dist/types/config.d.ts +157 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +58 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/coverage.d.ts +100 -0
- package/dist/types/coverage.d.ts.map +1 -0
- package/dist/types/coverage.js +8 -0
- package/dist/types/coverage.js.map +1 -0
- package/dist/types/doctor.d.ts +68 -0
- package/dist/types/doctor.d.ts.map +1 -0
- package/dist/types/doctor.js +5 -0
- package/dist/types/doctor.js.map +1 -0
- package/dist/types/gaps.d.ts +129 -0
- package/dist/types/gaps.d.ts.map +1 -0
- package/dist/types/gaps.js +8 -0
- package/dist/types/gaps.js.map +1 -0
- package/dist/types/prompts.d.ts +99 -0
- package/dist/types/prompts.d.ts.map +1 -0
- package/dist/types/prompts.js +5 -0
- package/dist/types/prompts.js.map +1 -0
- package/dist/types/runner.d.ts +156 -0
- package/dist/types/runner.d.ts.map +1 -0
- package/dist/types/runner.js +41 -0
- package/dist/types/runner.js.map +1 -0
- package/dist/types/send.d.ts +157 -0
- package/dist/types/send.d.ts.map +1 -0
- package/dist/types/send.js +18 -0
- package/dist/types/send.js.map +1 -0
- package/dist/types/status.d.ts +150 -0
- package/dist/types/status.d.ts.map +1 -0
- package/dist/types/status.js +15 -0
- package/dist/types/status.js.map +1 -0
- package/dist/types/sync.d.ts +259 -0
- package/dist/types/sync.d.ts.map +1 -0
- package/dist/types/sync.js +38 -0
- package/dist/types/sync.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Command } from 'clipanion';
|
|
2
|
+
export declare class InitCommand extends Command {
|
|
3
|
+
static paths: string[][];
|
|
4
|
+
static usage: import("clipanion").Usage;
|
|
5
|
+
projectName: string | undefined;
|
|
6
|
+
existing: boolean;
|
|
7
|
+
new_: boolean;
|
|
8
|
+
projectPath: string | undefined;
|
|
9
|
+
execute(): Promise<number>;
|
|
10
|
+
/**
|
|
11
|
+
* Check prerequisites (Claude Code, UV)
|
|
12
|
+
*/
|
|
13
|
+
private checkPrerequisites;
|
|
14
|
+
/**
|
|
15
|
+
* Get project name interactively or from argument
|
|
16
|
+
*/
|
|
17
|
+
private getProjectName;
|
|
18
|
+
/**
|
|
19
|
+
* Get project type (existing or new)
|
|
20
|
+
*/
|
|
21
|
+
private getProjectType;
|
|
22
|
+
/**
|
|
23
|
+
* Validate the project path
|
|
24
|
+
*/
|
|
25
|
+
private validateProjectPath;
|
|
26
|
+
/**
|
|
27
|
+
* Setup GitHub authentication
|
|
28
|
+
*/
|
|
29
|
+
private setupGitHubAuth;
|
|
30
|
+
/**
|
|
31
|
+
* Create the planning hub
|
|
32
|
+
*/
|
|
33
|
+
private createHub;
|
|
34
|
+
/**
|
|
35
|
+
* Show success message with next steps
|
|
36
|
+
*/
|
|
37
|
+
private showSuccess;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAiB5C,qBAAa,WAAY,SAAQ,OAAO;IACtC,OAAgB,KAAK,aAAc;IAEnC,OAAgB,KAAK,4BAiBlB;IAGH,WAAW,qBAAsC;IAGjD,QAAQ,UAEL;IAEH,IAAI,UAED;IAEH,WAAW,qBAER;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA6ChC;;OAEG;YACW,kBAAkB;IAmChC;;OAEG;YACW,cAAc;IAqB5B;;OAEG;YACW,cAAc;IAuB5B;;OAEG;YACW,mBAAmB;IAuBjC;;OAEG;YACW,eAAe;IAsD7B;;OAEG;YACW,SAAS;IAiBvB;;OAEG;IACH,OAAO,CAAC,WAAW;CAepB"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { Command, Option } from 'clipanion';
|
|
2
|
+
import { input, select, confirm, password } from '@inquirer/prompts';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import { existsSync } from 'fs';
|
|
7
|
+
import { isValidProjectName, getProjectNameError } from '../../types/config.js';
|
|
8
|
+
import { validateGitHubToken, discoverGitHubToken, isGhCliInstalled, isClaudeCodeInstalled, isUvInstalled, } from '../../core/github.js';
|
|
9
|
+
import { createPlanningHub, isInsideVibeProject } from '../../core/project.js';
|
|
10
|
+
import { isVibeProject } from '../../core/config.js';
|
|
11
|
+
export class InitCommand extends Command {
|
|
12
|
+
static paths = [['init']];
|
|
13
|
+
static usage = Command.Usage({
|
|
14
|
+
description: 'Initialize a new vibe-fabric planning hub',
|
|
15
|
+
details: `
|
|
16
|
+
Creates a new planning hub for coordinating development across repositories.
|
|
17
|
+
|
|
18
|
+
The planning hub contains:
|
|
19
|
+
- PRD documents (docs/prd/)
|
|
20
|
+
- Scope briefs (docs/scopes/)
|
|
21
|
+
- Synced repository data (docs/sync-cache/)
|
|
22
|
+
- Claude Code commands (.claude/)
|
|
23
|
+
`,
|
|
24
|
+
examples: [
|
|
25
|
+
['Interactive mode', 'vibe init'],
|
|
26
|
+
['With project name', 'vibe init my-project'],
|
|
27
|
+
['Existing project', 'vibe init my-project --existing'],
|
|
28
|
+
['Custom path', 'vibe init my-project --path ~/projects'],
|
|
29
|
+
],
|
|
30
|
+
});
|
|
31
|
+
// Positional argument: project name
|
|
32
|
+
projectName = Option.String({ required: false });
|
|
33
|
+
// Options
|
|
34
|
+
existing = Option.Boolean('--existing,-e', false, {
|
|
35
|
+
description: 'Skip to existing project flow',
|
|
36
|
+
});
|
|
37
|
+
new_ = Option.Boolean('--new,-n', false, {
|
|
38
|
+
description: 'Skip to new project flow',
|
|
39
|
+
});
|
|
40
|
+
projectPath = Option.String('--path,-p', {
|
|
41
|
+
description: 'Create project at specified path',
|
|
42
|
+
});
|
|
43
|
+
async execute() {
|
|
44
|
+
this.context.stdout.write('\n');
|
|
45
|
+
this.context.stdout.write(chalk.bold.blue(' VIBE-FABRIC') + chalk.gray(' - AI-Collaborative Development\n'));
|
|
46
|
+
this.context.stdout.write(chalk.gray(' ─'.repeat(25)) + '\n\n');
|
|
47
|
+
try {
|
|
48
|
+
// Step 1: Check prerequisites
|
|
49
|
+
await this.checkPrerequisites();
|
|
50
|
+
// Step 2: Get project name
|
|
51
|
+
const name = await this.getProjectName();
|
|
52
|
+
// Step 3: Get project type
|
|
53
|
+
const projectType = await this.getProjectType();
|
|
54
|
+
// Step 4: Determine project path
|
|
55
|
+
const finalPath = this.projectPath
|
|
56
|
+
? path.resolve(this.projectPath, name)
|
|
57
|
+
: path.resolve(process.cwd(), name);
|
|
58
|
+
// Step 5: Validate path
|
|
59
|
+
await this.validateProjectPath(finalPath);
|
|
60
|
+
// Step 6: GitHub authentication
|
|
61
|
+
const token = await this.setupGitHubAuth();
|
|
62
|
+
// Step 7: Create planning hub
|
|
63
|
+
await this.createHub(finalPath, name, projectType, token);
|
|
64
|
+
// Step 8: Show success message
|
|
65
|
+
this.showSuccess(finalPath, name);
|
|
66
|
+
return 0;
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (error instanceof Error && error.message === 'USER_CANCELLED') {
|
|
70
|
+
this.context.stdout.write(chalk.yellow('\nSetup cancelled.\n'));
|
|
71
|
+
return 1;
|
|
72
|
+
}
|
|
73
|
+
this.context.stderr.write(chalk.red(`\nError: ${error instanceof Error ? error.message : 'Unknown error'}\n`));
|
|
74
|
+
return 1;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check prerequisites (Claude Code, UV)
|
|
79
|
+
*/
|
|
80
|
+
async checkPrerequisites() {
|
|
81
|
+
const spinner = ora('Checking prerequisites...').start();
|
|
82
|
+
const claudeInstalled = isClaudeCodeInstalled();
|
|
83
|
+
const uvInstalled = isUvInstalled();
|
|
84
|
+
const ghInstalled = isGhCliInstalled();
|
|
85
|
+
spinner.stop();
|
|
86
|
+
// Claude Code is required
|
|
87
|
+
if (!claudeInstalled) {
|
|
88
|
+
this.context.stdout.write(chalk.red(' ✗ Claude Code not found\n'));
|
|
89
|
+
this.context.stdout.write(chalk.gray(' Install: npm install -g @anthropic-ai/claude-code\n'));
|
|
90
|
+
this.context.stdout.write(chalk.gray(' Required for AI-powered commands.\n\n'));
|
|
91
|
+
throw new Error('Claude Code is required. Please install it first.');
|
|
92
|
+
}
|
|
93
|
+
this.context.stdout.write(chalk.green(' ✓ Claude Code installed\n'));
|
|
94
|
+
// UV is recommended
|
|
95
|
+
if (!uvInstalled) {
|
|
96
|
+
this.context.stdout.write(chalk.yellow(' ⚠ UV not found (recommended)\n'));
|
|
97
|
+
this.context.stdout.write(chalk.gray(' Install: curl -LsSf https://astral.sh/uv/install.sh | sh\n'));
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
this.context.stdout.write(chalk.green(' ✓ UV installed\n'));
|
|
101
|
+
}
|
|
102
|
+
// gh CLI is optional but helpful
|
|
103
|
+
if (ghInstalled) {
|
|
104
|
+
this.context.stdout.write(chalk.green(' ✓ GitHub CLI installed\n'));
|
|
105
|
+
}
|
|
106
|
+
this.context.stdout.write('\n');
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get project name interactively or from argument
|
|
110
|
+
*/
|
|
111
|
+
async getProjectName() {
|
|
112
|
+
if (this.projectName && isValidProjectName(this.projectName)) {
|
|
113
|
+
return this.projectName;
|
|
114
|
+
}
|
|
115
|
+
if (this.projectName) {
|
|
116
|
+
const error = getProjectNameError(this.projectName);
|
|
117
|
+
this.context.stdout.write(chalk.yellow(` ⚠ ${error}\n\n`));
|
|
118
|
+
}
|
|
119
|
+
const name = await input({
|
|
120
|
+
message: 'Project name:',
|
|
121
|
+
validate: (value) => {
|
|
122
|
+
const error = getProjectNameError(value);
|
|
123
|
+
return error || true;
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
return name;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get project type (existing or new)
|
|
130
|
+
*/
|
|
131
|
+
async getProjectType() {
|
|
132
|
+
if (this.existing)
|
|
133
|
+
return 'existing';
|
|
134
|
+
if (this.new_)
|
|
135
|
+
return 'new';
|
|
136
|
+
const choice = await select({
|
|
137
|
+
message: 'What are you working with?',
|
|
138
|
+
choices: [
|
|
139
|
+
{
|
|
140
|
+
value: 'existing',
|
|
141
|
+
name: 'Existing project - I have repositories with code',
|
|
142
|
+
description: 'Analyze existing code and generate maps',
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
value: 'new',
|
|
146
|
+
name: 'New project - Starting from an idea',
|
|
147
|
+
description: 'Plan repos and capture requirements',
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
});
|
|
151
|
+
return choice;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Validate the project path
|
|
155
|
+
*/
|
|
156
|
+
async validateProjectPath(projectPath) {
|
|
157
|
+
// Check if path exists
|
|
158
|
+
if (existsSync(projectPath)) {
|
|
159
|
+
if (isVibeProject(projectPath)) {
|
|
160
|
+
throw new Error(`Directory "${projectPath}" is already a vibe-fabric project.`);
|
|
161
|
+
}
|
|
162
|
+
const overwrite = await confirm({
|
|
163
|
+
message: `Directory "${path.basename(projectPath)}" already exists. Use it anyway?`,
|
|
164
|
+
default: false,
|
|
165
|
+
});
|
|
166
|
+
if (!overwrite) {
|
|
167
|
+
throw new Error('USER_CANCELLED');
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Check if inside existing vibe project
|
|
171
|
+
if (isInsideVibeProject(projectPath)) {
|
|
172
|
+
throw new Error('Cannot create a planning hub inside another vibe-fabric project.');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Setup GitHub authentication
|
|
177
|
+
*/
|
|
178
|
+
async setupGitHubAuth() {
|
|
179
|
+
this.context.stdout.write(chalk.bold('\n GitHub Authentication\n'));
|
|
180
|
+
this.context.stdout.write(chalk.gray(' ─'.repeat(25)) + '\n\n');
|
|
181
|
+
const spinner = ora('Checking for GitHub token...').start();
|
|
182
|
+
// Try to discover token automatically
|
|
183
|
+
const discovered = await discoverGitHubToken();
|
|
184
|
+
if (discovered) {
|
|
185
|
+
spinner.succeed(`Found token from ${discovered.source === 'env' ? 'environment variable' : 'GitHub CLI'}`);
|
|
186
|
+
return discovered.token;
|
|
187
|
+
}
|
|
188
|
+
spinner.info('No token found automatically');
|
|
189
|
+
// Prompt for token
|
|
190
|
+
this.context.stdout.write(chalk.gray('\n Create a token at: https://github.com/settings/tokens\n'));
|
|
191
|
+
this.context.stdout.write(chalk.gray(' Required scopes: repo, read:org\n\n'));
|
|
192
|
+
let attempts = 0;
|
|
193
|
+
const maxAttempts = 3;
|
|
194
|
+
while (attempts < maxAttempts) {
|
|
195
|
+
const token = await password({
|
|
196
|
+
message: 'Enter your GitHub Personal Access Token:',
|
|
197
|
+
mask: '*',
|
|
198
|
+
});
|
|
199
|
+
if (!token) {
|
|
200
|
+
throw new Error('USER_CANCELLED');
|
|
201
|
+
}
|
|
202
|
+
const validateSpinner = ora('Validating token...').start();
|
|
203
|
+
const result = await validateGitHubToken(token);
|
|
204
|
+
if (result.valid) {
|
|
205
|
+
validateSpinner.succeed(`Authenticated as ${chalk.green(result.username)}`);
|
|
206
|
+
return token;
|
|
207
|
+
}
|
|
208
|
+
validateSpinner.fail(`Invalid token: ${result.error}`);
|
|
209
|
+
attempts++;
|
|
210
|
+
if (attempts < maxAttempts) {
|
|
211
|
+
this.context.stdout.write(chalk.yellow(` ${maxAttempts - attempts} attempts remaining\n\n`));
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
throw new Error('Failed to authenticate with GitHub after multiple attempts.');
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Create the planning hub
|
|
218
|
+
*/
|
|
219
|
+
async createHub(projectPath, name, projectType, _token) {
|
|
220
|
+
const spinner = ora('Creating planning hub...').start();
|
|
221
|
+
try {
|
|
222
|
+
await createPlanningHub(projectPath, name, projectType);
|
|
223
|
+
spinner.succeed('Planning hub created');
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
spinner.fail('Failed to create planning hub');
|
|
227
|
+
throw error;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Show success message with next steps
|
|
232
|
+
*/
|
|
233
|
+
showSuccess(projectPath, name) {
|
|
234
|
+
this.context.stdout.write('\n');
|
|
235
|
+
this.context.stdout.write(chalk.green.bold(' ✓ Success!\n\n'));
|
|
236
|
+
this.context.stdout.write(chalk.bold(' Planning hub created at:\n'));
|
|
237
|
+
this.context.stdout.write(` ${chalk.cyan(projectPath)}\n\n`);
|
|
238
|
+
this.context.stdout.write(chalk.bold(' Next steps:\n'));
|
|
239
|
+
this.context.stdout.write(chalk.gray(` 1. cd ${name}\n`));
|
|
240
|
+
this.context.stdout.write(chalk.gray(' 2. vibe repo add # Add your repositories\n'));
|
|
241
|
+
this.context.stdout.write(chalk.gray(' 3. vibe prd # Create requirements\n'));
|
|
242
|
+
this.context.stdout.write(chalk.gray(' 4. vibe scope # Create work scopes\n\n'));
|
|
243
|
+
this.context.stdout.write(chalk.gray(' Run ') + chalk.cyan('vibe --help') + chalk.gray(' for all commands.\n\n'));
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vibe prd - PRD Management Command
|
|
3
|
+
*
|
|
4
|
+
* AI-powered single entry point for all PRD operations.
|
|
5
|
+
* Uses the three-phase pattern: Discovery → Execute → Approve
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'clipanion';
|
|
8
|
+
export declare class PrdCommand extends Command {
|
|
9
|
+
static paths: string[][];
|
|
10
|
+
static usage: import("clipanion").Usage;
|
|
11
|
+
check: boolean;
|
|
12
|
+
resume: boolean;
|
|
13
|
+
verbose: boolean;
|
|
14
|
+
json: boolean;
|
|
15
|
+
cancel: boolean;
|
|
16
|
+
execute(): Promise<number>;
|
|
17
|
+
/**
|
|
18
|
+
* Handle --cancel flag
|
|
19
|
+
*/
|
|
20
|
+
private handleCancel;
|
|
21
|
+
/**
|
|
22
|
+
* Run interactive PRD management
|
|
23
|
+
*/
|
|
24
|
+
private runInteractive;
|
|
25
|
+
/**
|
|
26
|
+
* Start the Python runner
|
|
27
|
+
*/
|
|
28
|
+
private startRunner;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=prd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/prd.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAW5C,qBAAa,UAAW,SAAQ,OAAO;IACrC,OAAgB,KAAK,aAAa;IAElC,OAAgB,KAAK,4BAmBlB;IAEH,KAAK,UAEF;IAEH,MAAM,UAEH;IAEH,OAAO,UAEJ;IAEH,IAAI,UAED;IAEH,MAAM,UAEH;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAehC;;OAEG;YACW,YAAY;IA8B1B;;OAEG;YACW,cAAc;IA8C5B;;OAEG;YACW,WAAW;CAwE1B"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vibe prd - PRD Management Command
|
|
3
|
+
*
|
|
4
|
+
* AI-powered single entry point for all PRD operations.
|
|
5
|
+
* Uses the three-phase pattern: Discovery → Execute → Approve
|
|
6
|
+
*/
|
|
7
|
+
import { Command, Option } from 'clipanion';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import { confirm, select } from '@inquirer/prompts';
|
|
10
|
+
import { runPrdCheck } from '../../core/prd/check.js';
|
|
11
|
+
import { runVibeRunner, checkOperationInProgress, cancelOperation, RunnerError, } from '../../core/runner.js';
|
|
12
|
+
export class PrdCommand extends Command {
|
|
13
|
+
static paths = [['prd']];
|
|
14
|
+
static usage = Command.Usage({
|
|
15
|
+
description: 'Manage PRD - create, capture, maintain, update',
|
|
16
|
+
details: `
|
|
17
|
+
AI-powered PRD management using Claude.
|
|
18
|
+
|
|
19
|
+
The command follows a three-phase pattern:
|
|
20
|
+
1. Discovery - Analyze PRD state and determine tasks
|
|
21
|
+
2. Execute - Run tasks (some interactive, some automatic)
|
|
22
|
+
3. Approve - Review and apply changes
|
|
23
|
+
|
|
24
|
+
Use --check for a quick health report without making changes.
|
|
25
|
+
`,
|
|
26
|
+
examples: [
|
|
27
|
+
['Interactive PRD management', 'vibe prd'],
|
|
28
|
+
['Report-only mode (no changes)', 'vibe prd --check'],
|
|
29
|
+
['Resume interrupted operation', 'vibe prd --resume'],
|
|
30
|
+
['Verbose check output', 'vibe prd --check --verbose'],
|
|
31
|
+
['JSON output for CI', 'vibe prd --check --json'],
|
|
32
|
+
],
|
|
33
|
+
});
|
|
34
|
+
check = Option.Boolean('--check,-c', false, {
|
|
35
|
+
description: 'Report-only mode (no changes)',
|
|
36
|
+
});
|
|
37
|
+
resume = Option.Boolean('--resume,-r', false, {
|
|
38
|
+
description: 'Resume interrupted operation',
|
|
39
|
+
});
|
|
40
|
+
verbose = Option.Boolean('--verbose,-v', false, {
|
|
41
|
+
description: 'Show detailed output',
|
|
42
|
+
});
|
|
43
|
+
json = Option.Boolean('--json', false, {
|
|
44
|
+
description: 'Output as JSON (only with --check)',
|
|
45
|
+
});
|
|
46
|
+
cancel = Option.Boolean('--cancel', false, {
|
|
47
|
+
description: 'Cancel current operation',
|
|
48
|
+
});
|
|
49
|
+
async execute() {
|
|
50
|
+
// Handle cancel flag
|
|
51
|
+
if (this.cancel) {
|
|
52
|
+
return this.handleCancel();
|
|
53
|
+
}
|
|
54
|
+
// Handle check mode (report-only)
|
|
55
|
+
if (this.check) {
|
|
56
|
+
return runPrdCheck({ verbose: this.verbose, json: this.json });
|
|
57
|
+
}
|
|
58
|
+
// Interactive mode
|
|
59
|
+
return this.runInteractive();
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Handle --cancel flag
|
|
63
|
+
*/
|
|
64
|
+
async handleCancel() {
|
|
65
|
+
const existing = await checkOperationInProgress();
|
|
66
|
+
if (!existing) {
|
|
67
|
+
this.context.stdout.write(chalk.yellow('No operation in progress.\n'));
|
|
68
|
+
return 0;
|
|
69
|
+
}
|
|
70
|
+
const confirmed = await confirm({
|
|
71
|
+
message: `Cancel ${existing.operation} operation?`,
|
|
72
|
+
default: false,
|
|
73
|
+
});
|
|
74
|
+
if (!confirmed) {
|
|
75
|
+
this.context.stdout.write(chalk.gray('Cancelled.\n'));
|
|
76
|
+
return 0;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
await cancelOperation();
|
|
80
|
+
this.context.stdout.write(chalk.green('Operation cancelled.\n'));
|
|
81
|
+
return 0;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
this.context.stderr.write(chalk.red(`Failed to cancel: ${error instanceof Error ? error.message : error}\n`));
|
|
85
|
+
return 1;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Run interactive PRD management
|
|
90
|
+
*/
|
|
91
|
+
async runInteractive() {
|
|
92
|
+
// Check for existing operation
|
|
93
|
+
const existing = await checkOperationInProgress();
|
|
94
|
+
if (existing && !this.resume) {
|
|
95
|
+
this.context.stdout.write('\n');
|
|
96
|
+
this.context.stdout.write(chalk.yellow(`An operation is already in progress: ${existing.operation}\n`));
|
|
97
|
+
this.context.stdout.write(chalk.gray(`Phase: ${existing.phase}, Task: ${existing.current_task}/${existing.total_tasks}\n`));
|
|
98
|
+
this.context.stdout.write('\n');
|
|
99
|
+
const action = await select({
|
|
100
|
+
message: 'What would you like to do?',
|
|
101
|
+
choices: [
|
|
102
|
+
{ name: 'Resume the existing operation', value: 'resume' },
|
|
103
|
+
{ name: 'Cancel and start fresh', value: 'cancel' },
|
|
104
|
+
{ name: 'Exit', value: 'exit' },
|
|
105
|
+
],
|
|
106
|
+
});
|
|
107
|
+
if (action === 'exit') {
|
|
108
|
+
return 0;
|
|
109
|
+
}
|
|
110
|
+
if (action === 'cancel') {
|
|
111
|
+
await cancelOperation();
|
|
112
|
+
this.context.stdout.write(chalk.green('Previous operation cancelled.\n\n'));
|
|
113
|
+
}
|
|
114
|
+
if (action === 'resume') {
|
|
115
|
+
return this.startRunner(true);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (this.resume && !existing) {
|
|
119
|
+
this.context.stderr.write(chalk.red('No operation to resume.\n'));
|
|
120
|
+
this.context.stderr.write(chalk.gray('Start a new operation with: vibe prd\n'));
|
|
121
|
+
return 1;
|
|
122
|
+
}
|
|
123
|
+
return this.startRunner(this.resume);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Start the Python runner
|
|
127
|
+
*/
|
|
128
|
+
async startRunner(resume) {
|
|
129
|
+
this.context.stdout.write('\n');
|
|
130
|
+
this.context.stdout.write(chalk.bold.blue(' VIBE PRD') + '\n');
|
|
131
|
+
this.context.stdout.write(chalk.gray(' ─'.repeat(25)) + '\n\n');
|
|
132
|
+
if (!resume) {
|
|
133
|
+
this.context.stdout.write(chalk.gray(' Starting PRD management with Claude...\n\n'));
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
this.context.stdout.write(chalk.gray(' Resuming PRD operation...\n\n'));
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
await runVibeRunner('prd', process.cwd(), {
|
|
140
|
+
resume,
|
|
141
|
+
loop: true,
|
|
142
|
+
});
|
|
143
|
+
return 0;
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
if (error instanceof RunnerError) {
|
|
147
|
+
this.context.stderr.write('\n');
|
|
148
|
+
switch (error.code) {
|
|
149
|
+
case 'UV_NOT_INSTALLED':
|
|
150
|
+
this.context.stderr.write(chalk.red('UV is not installed.\n\n'));
|
|
151
|
+
this.context.stderr.write('Install UV with:\n');
|
|
152
|
+
this.context.stderr.write(chalk.cyan(' curl -LsSf https://astral.sh/uv/install.sh | sh\n\n'));
|
|
153
|
+
this.context.stderr.write(chalk.gray('UV is required to run Python scripts for AI operations.\n'));
|
|
154
|
+
break;
|
|
155
|
+
case 'RUNNER_NOT_FOUND':
|
|
156
|
+
this.context.stderr.write(chalk.red('Runner script not found.\n\n'));
|
|
157
|
+
this.context.stderr.write('The runner script should be at:\n' +
|
|
158
|
+
chalk.cyan(' .claude/scripts/vibe-runner.py\n\n'));
|
|
159
|
+
this.context.stderr.write(chalk.gray('Run ') + chalk.cyan('vibe doctor') + chalk.gray(' to diagnose.\n'));
|
|
160
|
+
break;
|
|
161
|
+
case 'RUNNER_FAILED':
|
|
162
|
+
this.context.stderr.write(chalk.red('Runner failed.\n\n'));
|
|
163
|
+
this.context.stderr.write(chalk.gray(`${error.message}\n\n`));
|
|
164
|
+
this.context.stderr.write('Your progress has been saved. Run ' +
|
|
165
|
+
chalk.cyan('vibe prd --resume') +
|
|
166
|
+
' to continue.\n');
|
|
167
|
+
break;
|
|
168
|
+
default:
|
|
169
|
+
this.context.stderr.write(chalk.red(`Error: ${error.message}\n`));
|
|
170
|
+
}
|
|
171
|
+
return 1;
|
|
172
|
+
}
|
|
173
|
+
// Unexpected error
|
|
174
|
+
this.context.stderr.write(chalk.red(`Unexpected error: ${error instanceof Error ? error.message : error}\n`));
|
|
175
|
+
return 1;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=prd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prd.js","sourceRoot":"","sources":["../../../src/cli/commands/prd.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,eAAe,EACf,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAE9B,MAAM,OAAO,UAAW,SAAQ,OAAO;IACrC,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAElC,MAAM,CAAU,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,WAAW,EAAE,gDAAgD;QAC7D,OAAO,EAAE;;;;;;;;;KASR;QACD,QAAQ,EAAE;YACR,CAAC,4BAA4B,EAAE,UAAU,CAAC;YAC1C,CAAC,+BAA+B,EAAE,kBAAkB,CAAC;YACrD,CAAC,8BAA8B,EAAE,mBAAmB,CAAC;YACrD,CAAC,sBAAsB,EAAE,4BAA4B,CAAC;YACtD,CAAC,oBAAoB,EAAE,yBAAyB,CAAC;SAClD;KACF,CAAC,CAAC;IAEH,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE;QAC1C,WAAW,EAAE,+BAA+B;KAC7C,CAAC,CAAC;IAEH,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,EAAE;QAC5C,WAAW,EAAE,8BAA8B;KAC5C,CAAC,CAAC;IAEH,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE;QAC9C,WAAW,EAAE,sBAAsB;KACpC,CAAC,CAAC;IAEH,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE;QACrC,WAAW,EAAE,oCAAoC;KAClD,CAAC,CAAC;IAEH,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE;QACzC,WAAW,EAAE,0BAA0B;KACxC,CAAC,CAAC;IAEH,KAAK,CAAC,OAAO;QACX,qBAAqB;QACrB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7B,CAAC;QAED,kCAAkC;QAClC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,mBAAmB;QACnB,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY;QACxB,MAAM,QAAQ,GAAG,MAAM,wBAAwB,EAAE,CAAC;QAElD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,EAAE,UAAU,QAAQ,CAAC,SAAS,aAAa;YAClD,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,eAAe,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,CAAC;QACX,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,GAAG,CAAC,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CACnF,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc;QAC1B,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,MAAM,wBAAwB,EAAE,CAAC;QAElD,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,MAAM,CAAC,wCAAwC,QAAQ,CAAC,SAAS,IAAI,CAAC,CAC7E,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,IAAI,CAAC,UAAU,QAAQ,CAAC,KAAK,WAAW,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,WAAW,IAAI,CAAC,CACjG,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEhC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;gBAC1B,OAAO,EAAE,4BAA4B;gBACrC,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,QAAQ,EAAE;oBAC1D,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,QAAQ,EAAE;oBACnD,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;iBAChC;aACF,CAAC,CAAC;YAEH,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,OAAO,CAAC,CAAC;YACX,CAAC;YAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,MAAM,eAAe,EAAE,CAAC;gBACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAC9E,CAAC;YAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CAAC,MAAe;QACvC,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,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;QAChE,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,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAC3D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAC9C,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE;gBACxC,MAAM;gBACN,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,CAAC,CAAC;QACX,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;gBACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEhC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,kBAAkB;wBACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;wBACjE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;wBAChD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CACpE,CAAC;wBACF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CACxE,CAAC;wBACF,MAAM;oBAER,KAAK,kBAAkB;wBACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;wBACrE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,mCAAmC;4BACnC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CACnD,CAAC;wBACF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAC/E,CAAC;wBACF,MAAM;oBAER,KAAK,eAAe;wBAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;wBAC3D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC;wBAC9D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,oCAAoC;4BACpC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;4BAC/B,iBAAiB,CAClB,CAAC;wBACF,MAAM;oBAER;wBACE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;gBACtE,CAAC;gBAED,OAAO,CAAC,CAAC;YACX,CAAC;YAED,mBAAmB;YACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,GAAG,CAAC,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CACnF,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Command } from 'clipanion';
|
|
2
|
+
export declare class RepoAddCommand extends Command {
|
|
3
|
+
static paths: string[][];
|
|
4
|
+
static usage: import("clipanion").Usage;
|
|
5
|
+
url: string | undefined;
|
|
6
|
+
alias: string | undefined;
|
|
7
|
+
branch: string | undefined;
|
|
8
|
+
skipInject: boolean;
|
|
9
|
+
execute(): Promise<number>;
|
|
10
|
+
/**
|
|
11
|
+
* Get GitHub token from environment or prompt
|
|
12
|
+
*/
|
|
13
|
+
private getGitHubToken;
|
|
14
|
+
/**
|
|
15
|
+
* Get repository URL from argument or prompt
|
|
16
|
+
*/
|
|
17
|
+
private getRepoUrl;
|
|
18
|
+
/**
|
|
19
|
+
* Validate repository access
|
|
20
|
+
*/
|
|
21
|
+
private validateAccess;
|
|
22
|
+
/**
|
|
23
|
+
* Get or generate alias
|
|
24
|
+
*/
|
|
25
|
+
private getAlias;
|
|
26
|
+
/**
|
|
27
|
+
* Handle framework detection and injection
|
|
28
|
+
* Returns: true if injected, false if skipped, null if failed
|
|
29
|
+
*/
|
|
30
|
+
private handleFrameworkInjection;
|
|
31
|
+
/**
|
|
32
|
+
* Show success message
|
|
33
|
+
*/
|
|
34
|
+
private showSuccess;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/repo/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAoB5C,qBAAa,cAAe,SAAQ,OAAO;IACzC,OAAgB,KAAK,aAAqB;IAE1C,OAAgB,KAAK,4BAgBlB;IAGH,GAAG,qBAAsC;IAGzC,KAAK,qBAEF;IAEH,MAAM,qBAEH;IAEH,UAAU,UAEP;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA+IhC;;OAEG;YACW,cAAc;IAyB5B;;OAEG;YACW,UAAU;IAqBxB;;OAEG;YACW,cAAc;IAgC5B;;OAEG;YACW,QAAQ;IAkDtB;;;OAGG;YACW,wBAAwB;IAiEtC;;OAEG;IACH,OAAO,CAAC,WAAW;CAsBpB"}
|