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,303 @@
|
|
|
1
|
+
import { Command, Option } from 'clipanion';
|
|
2
|
+
import { input, confirm } from '@inquirer/prompts';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import { Octokit } from 'octokit';
|
|
6
|
+
import { loadConfig, saveConfig } from '../../../core/config.js';
|
|
7
|
+
import { discoverGitHubToken } from '../../../core/github.js';
|
|
8
|
+
import { parseGitHubUrl, validateRepoAccess, getAliasError, generateDefaultAlias, } from '../../../core/repo/validation.js';
|
|
9
|
+
import { detectFrameworkStructure, injectFrameworkStructure, getInjectionSummary, } from '../../../core/repo/framework.js';
|
|
10
|
+
import { findProjectRoot } from '../../../core/project.js';
|
|
11
|
+
export class RepoAddCommand extends Command {
|
|
12
|
+
static paths = [['repo', 'add']];
|
|
13
|
+
static usage = Command.Usage({
|
|
14
|
+
description: 'Add a repository to the planning hub',
|
|
15
|
+
details: `
|
|
16
|
+
Connects a GitHub repository to the planning hub for coordination.
|
|
17
|
+
|
|
18
|
+
This command:
|
|
19
|
+
- Validates GitHub access and permissions
|
|
20
|
+
- Injects the vibe/ and .claude/ framework structure
|
|
21
|
+
- Registers the repository in the configuration
|
|
22
|
+
`,
|
|
23
|
+
examples: [
|
|
24
|
+
['Interactive mode', 'vibe repo add'],
|
|
25
|
+
['With URL', 'vibe repo add github.com/myorg/api-service'],
|
|
26
|
+
['With alias', 'vibe repo add github.com/myorg/api-service --alias backend'],
|
|
27
|
+
['Skip framework injection', 'vibe repo add github.com/myorg/api-service --skip-inject'],
|
|
28
|
+
],
|
|
29
|
+
});
|
|
30
|
+
// Positional argument: repository URL
|
|
31
|
+
url = Option.String({ required: false });
|
|
32
|
+
// Options
|
|
33
|
+
alias = Option.String('--alias,-a', {
|
|
34
|
+
description: 'Alias for the repository',
|
|
35
|
+
});
|
|
36
|
+
branch = Option.String('--branch,-b', {
|
|
37
|
+
description: 'Default branch (default: auto-detect or main)',
|
|
38
|
+
});
|
|
39
|
+
skipInject = Option.Boolean('--skip-inject', false, {
|
|
40
|
+
description: 'Skip framework injection, register only',
|
|
41
|
+
});
|
|
42
|
+
async execute() {
|
|
43
|
+
this.context.stdout.write('\n');
|
|
44
|
+
this.context.stdout.write(chalk.bold.blue(' ADD REPOSITORY\n'));
|
|
45
|
+
this.context.stdout.write(chalk.gray(' ─'.repeat(25)) + '\n\n');
|
|
46
|
+
try {
|
|
47
|
+
// Step 0: Find project root
|
|
48
|
+
const projectRoot = findProjectRoot(process.cwd());
|
|
49
|
+
if (!projectRoot) {
|
|
50
|
+
this.context.stderr.write(chalk.red(' Error: Not inside a vibe-fabric project.\n'));
|
|
51
|
+
this.context.stderr.write(chalk.gray(' Run `vibe init` to create a planning hub first.\n\n'));
|
|
52
|
+
return 1;
|
|
53
|
+
}
|
|
54
|
+
// Step 1: Get GitHub token
|
|
55
|
+
const token = await this.getGitHubToken();
|
|
56
|
+
if (!token) {
|
|
57
|
+
return 1;
|
|
58
|
+
}
|
|
59
|
+
const octokit = new Octokit({ auth: token });
|
|
60
|
+
// Step 2: Get repository URL
|
|
61
|
+
const repoUrl = await this.getRepoUrl();
|
|
62
|
+
if (!repoUrl) {
|
|
63
|
+
return 1;
|
|
64
|
+
}
|
|
65
|
+
// Step 3: Parse and validate URL
|
|
66
|
+
const parsed = parseGitHubUrl(repoUrl);
|
|
67
|
+
if (!parsed) {
|
|
68
|
+
this.context.stderr.write(chalk.red(' Error: Invalid GitHub URL format.\n'));
|
|
69
|
+
this.context.stderr.write(chalk.gray(' Supported formats:\n'));
|
|
70
|
+
this.context.stderr.write(chalk.gray(' - github.com/owner/repo\n'));
|
|
71
|
+
this.context.stderr.write(chalk.gray(' - https://github.com/owner/repo\n'));
|
|
72
|
+
this.context.stderr.write(chalk.gray(' - git@github.com:owner/repo.git\n\n'));
|
|
73
|
+
return 1;
|
|
74
|
+
}
|
|
75
|
+
// Step 4: Validate repository access
|
|
76
|
+
const accessResult = await this.validateAccess(octokit, parsed.owner, parsed.repo);
|
|
77
|
+
if (!accessResult.valid) {
|
|
78
|
+
return 1;
|
|
79
|
+
}
|
|
80
|
+
// Use detected default branch or specified branch
|
|
81
|
+
const targetBranch = this.branch || accessResult.defaultBranch;
|
|
82
|
+
// Step 5: Load config and check for duplicates
|
|
83
|
+
const config = await loadConfig(projectRoot);
|
|
84
|
+
if (!config) {
|
|
85
|
+
this.context.stderr.write(chalk.red(' Error: Failed to load configuration.\n\n'));
|
|
86
|
+
return 1;
|
|
87
|
+
}
|
|
88
|
+
// Check for duplicate URL
|
|
89
|
+
const existingByUrl = config.repos.find((r) => r.url === parsed.fullUrl || r.url === repoUrl);
|
|
90
|
+
if (existingByUrl) {
|
|
91
|
+
this.context.stderr.write(chalk.yellow(` Repository already registered as "${existingByUrl.alias}".\n`));
|
|
92
|
+
const update = await confirm({
|
|
93
|
+
message: 'Update the existing entry?',
|
|
94
|
+
default: false,
|
|
95
|
+
});
|
|
96
|
+
if (!update) {
|
|
97
|
+
this.context.stdout.write(chalk.gray(' Cancelled.\n\n'));
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
// Remove existing entry for update
|
|
101
|
+
config.repos = config.repos.filter((r) => r.alias !== existingByUrl.alias);
|
|
102
|
+
}
|
|
103
|
+
// Step 6: Get or generate alias
|
|
104
|
+
const repoAlias = await this.getAlias(parsed.repo, config.repos.map((r) => r.alias));
|
|
105
|
+
if (!repoAlias) {
|
|
106
|
+
return 1;
|
|
107
|
+
}
|
|
108
|
+
// Step 7: Detect and inject framework
|
|
109
|
+
let frameworkInjected = false;
|
|
110
|
+
if (!this.skipInject) {
|
|
111
|
+
const injectionResult = await this.handleFrameworkInjection(octokit, parsed.owner, parsed.repo, targetBranch);
|
|
112
|
+
if (injectionResult === null) {
|
|
113
|
+
return 1;
|
|
114
|
+
}
|
|
115
|
+
frameworkInjected = injectionResult;
|
|
116
|
+
}
|
|
117
|
+
// Step 8: Save to config
|
|
118
|
+
config.repos.push({
|
|
119
|
+
alias: repoAlias,
|
|
120
|
+
url: parsed.fullUrl,
|
|
121
|
+
owner: parsed.owner,
|
|
122
|
+
name: parsed.repo,
|
|
123
|
+
branch: targetBranch,
|
|
124
|
+
type: 'github',
|
|
125
|
+
status: 'active',
|
|
126
|
+
addedAt: new Date().toISOString(),
|
|
127
|
+
frameworkInjected,
|
|
128
|
+
});
|
|
129
|
+
await saveConfig(projectRoot, config);
|
|
130
|
+
// Step 9: Show success
|
|
131
|
+
this.showSuccess(repoAlias, parsed.fullUrl, targetBranch, frameworkInjected);
|
|
132
|
+
return 0;
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
if (error instanceof Error && error.message === 'USER_CANCELLED') {
|
|
136
|
+
this.context.stdout.write(chalk.yellow('\n Cancelled.\n\n'));
|
|
137
|
+
return 1;
|
|
138
|
+
}
|
|
139
|
+
this.context.stderr.write(chalk.red(`\n Error: ${error instanceof Error ? error.message : 'Unknown error'}\n\n`));
|
|
140
|
+
return 1;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get GitHub token from environment or prompt
|
|
145
|
+
*/
|
|
146
|
+
async getGitHubToken() {
|
|
147
|
+
const spinner = ora('Checking GitHub authentication...').start();
|
|
148
|
+
const discovered = await discoverGitHubToken();
|
|
149
|
+
if (discovered) {
|
|
150
|
+
spinner.succeed(`Authenticated via ${discovered.source === 'env' ? 'environment variable' : 'GitHub CLI'}`);
|
|
151
|
+
return discovered.token;
|
|
152
|
+
}
|
|
153
|
+
spinner.fail('No GitHub token found');
|
|
154
|
+
this.context.stderr.write(chalk.gray('\n Set GITHUB_TOKEN environment variable or run `gh auth login`.\n'));
|
|
155
|
+
this.context.stderr.write(chalk.gray(' Create a token at: https://github.com/settings/tokens\n'));
|
|
156
|
+
this.context.stderr.write(chalk.gray(' Required scopes: repo\n\n'));
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get repository URL from argument or prompt
|
|
161
|
+
*/
|
|
162
|
+
async getRepoUrl() {
|
|
163
|
+
if (this.url) {
|
|
164
|
+
return this.url;
|
|
165
|
+
}
|
|
166
|
+
const url = await input({
|
|
167
|
+
message: 'Repository URL:',
|
|
168
|
+
validate: (value) => {
|
|
169
|
+
if (!value.trim()) {
|
|
170
|
+
return 'URL is required';
|
|
171
|
+
}
|
|
172
|
+
if (!parseGitHubUrl(value)) {
|
|
173
|
+
return 'Invalid GitHub URL format';
|
|
174
|
+
}
|
|
175
|
+
return true;
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
return url;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Validate repository access
|
|
182
|
+
*/
|
|
183
|
+
async validateAccess(octokit, owner, repo) {
|
|
184
|
+
const spinner = ora(`Validating access to ${owner}/${repo}...`).start();
|
|
185
|
+
const result = await validateRepoAccess(octokit, owner, repo);
|
|
186
|
+
if (!result.valid) {
|
|
187
|
+
spinner.fail('Cannot access repository');
|
|
188
|
+
this.context.stderr.write(chalk.red(` ${result.error}\n\n`));
|
|
189
|
+
return { valid: false, defaultBranch: 'main' };
|
|
190
|
+
}
|
|
191
|
+
if (!result.canWrite) {
|
|
192
|
+
spinner.fail('No write access');
|
|
193
|
+
this.context.stderr.write(chalk.red(' Your token lacks write permissions for this repository.\n'));
|
|
194
|
+
this.context.stderr.write(chalk.gray(' Required for framework injection. Use --skip-inject to register only.\n\n'));
|
|
195
|
+
return { valid: false, defaultBranch: result.defaultBranch };
|
|
196
|
+
}
|
|
197
|
+
const accessType = result.isPrivate ? 'private' : 'public';
|
|
198
|
+
spinner.succeed(`Access confirmed (${accessType} repository)`);
|
|
199
|
+
return { valid: true, defaultBranch: result.defaultBranch };
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get or generate alias
|
|
203
|
+
*/
|
|
204
|
+
async getAlias(repoName, existingAliases) {
|
|
205
|
+
if (this.alias) {
|
|
206
|
+
const error = getAliasError(this.alias);
|
|
207
|
+
if (error) {
|
|
208
|
+
this.context.stderr.write(chalk.red(` Invalid alias: ${error}\n\n`));
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
if (existingAliases.includes(this.alias)) {
|
|
212
|
+
this.context.stderr.write(chalk.red(` Alias "${this.alias}" is already in use.\n\n`));
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
return this.alias;
|
|
216
|
+
}
|
|
217
|
+
// Generate default alias
|
|
218
|
+
let defaultAlias = generateDefaultAlias(repoName);
|
|
219
|
+
let suggestion = defaultAlias;
|
|
220
|
+
let counter = 1;
|
|
221
|
+
// Handle collision
|
|
222
|
+
while (existingAliases.includes(suggestion)) {
|
|
223
|
+
suggestion = `${defaultAlias}-${counter}`;
|
|
224
|
+
counter++;
|
|
225
|
+
}
|
|
226
|
+
// If there was a collision, ask for confirmation
|
|
227
|
+
if (suggestion !== defaultAlias) {
|
|
228
|
+
this.context.stdout.write(chalk.yellow(` Alias "${defaultAlias}" already exists.\n`));
|
|
229
|
+
}
|
|
230
|
+
const alias = await input({
|
|
231
|
+
message: 'Repository alias:',
|
|
232
|
+
default: suggestion,
|
|
233
|
+
validate: (value) => {
|
|
234
|
+
const error = getAliasError(value);
|
|
235
|
+
if (error)
|
|
236
|
+
return error;
|
|
237
|
+
if (existingAliases.includes(value)) {
|
|
238
|
+
return 'Alias already in use';
|
|
239
|
+
}
|
|
240
|
+
return true;
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
return alias;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Handle framework detection and injection
|
|
247
|
+
* Returns: true if injected, false if skipped, null if failed
|
|
248
|
+
*/
|
|
249
|
+
async handleFrameworkInjection(octokit, owner, repo, branch) {
|
|
250
|
+
const detectSpinner = ora('Detecting existing framework structure...').start();
|
|
251
|
+
const detection = await detectFrameworkStructure(octokit, owner, repo, branch);
|
|
252
|
+
if (detection.status === 'complete') {
|
|
253
|
+
detectSpinner.succeed('Framework structure already exists');
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
if (detection.status === 'partial') {
|
|
257
|
+
detectSpinner.info('Partial framework structure detected');
|
|
258
|
+
const summary = getInjectionSummary(detection.missingFiles);
|
|
259
|
+
this.context.stdout.write(chalk.gray(` Found ${detection.existingFiles.length} existing files\n`));
|
|
260
|
+
this.context.stdout.write(chalk.gray(` Missing ${summary.totalFiles} files\n`));
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
detectSpinner.info('No framework structure found');
|
|
264
|
+
const summary = getInjectionSummary(detection.missingFiles);
|
|
265
|
+
this.context.stdout.write(chalk.gray(` Will create ${summary.vibeFiles.length} vibe/ files\n`));
|
|
266
|
+
this.context.stdout.write(chalk.gray(` Will create ${summary.claudeFiles.length} .claude/ files\n`));
|
|
267
|
+
}
|
|
268
|
+
const proceed = await confirm({
|
|
269
|
+
message: 'Inject framework structure?',
|
|
270
|
+
default: true,
|
|
271
|
+
});
|
|
272
|
+
if (!proceed) {
|
|
273
|
+
this.context.stdout.write(chalk.gray(' Skipping injection.\n'));
|
|
274
|
+
return false;
|
|
275
|
+
}
|
|
276
|
+
const injectSpinner = ora('Injecting framework structure...').start();
|
|
277
|
+
const result = await injectFrameworkStructure(octokit, owner, repo, branch, detection.missingFiles);
|
|
278
|
+
if (!result.success) {
|
|
279
|
+
injectSpinner.fail('Failed to inject framework');
|
|
280
|
+
this.context.stderr.write(chalk.red(` ${result.error}\n\n`));
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
injectSpinner.succeed(`Injected ${result.filesCreated.length} files`);
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Show success message
|
|
288
|
+
*/
|
|
289
|
+
showSuccess(alias, url, branch, frameworkInjected) {
|
|
290
|
+
this.context.stdout.write('\n');
|
|
291
|
+
this.context.stdout.write(chalk.green.bold(' ✓ Repository added!\n\n'));
|
|
292
|
+
this.context.stdout.write(` ${chalk.bold('Alias:')} ${chalk.cyan(alias)}\n`);
|
|
293
|
+
this.context.stdout.write(` ${chalk.bold('URL:')} ${url}\n`);
|
|
294
|
+
this.context.stdout.write(` ${chalk.bold('Branch:')} ${branch}\n`);
|
|
295
|
+
this.context.stdout.write(` ${chalk.bold('Framework:')} ${frameworkInjected ? 'Injected' : 'Skipped'}\n`);
|
|
296
|
+
this.context.stdout.write('\n');
|
|
297
|
+
this.context.stdout.write(chalk.bold(' Next steps:\n'));
|
|
298
|
+
this.context.stdout.write(chalk.gray(' 1. vibe prd # Create requirements\n'));
|
|
299
|
+
this.context.stdout.write(chalk.gray(' 2. vibe scope # Create work scopes\n'));
|
|
300
|
+
this.context.stdout.write(chalk.gray(` 3. vibe send <scope-id> # Send to ${alias}\n\n`));
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../src/cli/commands/repo/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vibe scope - Scope Management Command
|
|
3
|
+
*
|
|
4
|
+
* AI-powered single entry point for all scope operations.
|
|
5
|
+
* Uses the three-phase pattern: Discovery → Execute → Approve
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'clipanion';
|
|
8
|
+
export declare class ScopeCommand extends Command {
|
|
9
|
+
static paths: string[][];
|
|
10
|
+
static usage: import("clipanion").Usage;
|
|
11
|
+
check: boolean;
|
|
12
|
+
resume: boolean;
|
|
13
|
+
cancel: boolean;
|
|
14
|
+
execute(): Promise<number>;
|
|
15
|
+
/**
|
|
16
|
+
* Check prerequisites for scope command
|
|
17
|
+
*/
|
|
18
|
+
private checkPrerequisites;
|
|
19
|
+
/**
|
|
20
|
+
* Handle --cancel flag
|
|
21
|
+
*/
|
|
22
|
+
private handleCancel;
|
|
23
|
+
/**
|
|
24
|
+
* Run check mode (report-only)
|
|
25
|
+
*/
|
|
26
|
+
private runCheck;
|
|
27
|
+
/**
|
|
28
|
+
* Run interactive scope management
|
|
29
|
+
*/
|
|
30
|
+
private runInteractive;
|
|
31
|
+
/**
|
|
32
|
+
* Start the Python runner
|
|
33
|
+
*/
|
|
34
|
+
private startRunner;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/scope.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAc5C,qBAAa,YAAa,SAAQ,OAAO;IACvC,OAAgB,KAAK,aAAe;IAEpC,OAAgB,KAAK,4BAiBlB;IAEH,KAAK,UAEF;IAEH,MAAM,UAEH;IAEH,MAAM,UAEH;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAgChC;;OAEG;YACW,kBAAkB;IAoDhC;;OAEG;YACW,YAAY;IA4C1B;;OAEG;YACW,QAAQ;IAgEtB;;OAEG;YACW,cAAc;IAkG5B;;OAEG;YACW,WAAW;CAkF1B"}
|