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,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a GitHub URL and extract owner/repo
|
|
3
|
+
* Supports formats:
|
|
4
|
+
* - github.com/owner/repo
|
|
5
|
+
* - https://github.com/owner/repo
|
|
6
|
+
* - https://github.com/owner/repo.git
|
|
7
|
+
* - git@github.com:owner/repo.git
|
|
8
|
+
*/
|
|
9
|
+
export function parseGitHubUrl(url) {
|
|
10
|
+
// Normalize the URL
|
|
11
|
+
let normalized = url.trim();
|
|
12
|
+
// Handle SSH format: git@github.com:owner/repo.git
|
|
13
|
+
if (normalized.startsWith('git@github.com:')) {
|
|
14
|
+
normalized = normalized.replace('git@github.com:', 'https://github.com/');
|
|
15
|
+
}
|
|
16
|
+
// Add https:// if missing
|
|
17
|
+
if (!normalized.startsWith('http://') && !normalized.startsWith('https://')) {
|
|
18
|
+
normalized = `https://${normalized}`;
|
|
19
|
+
}
|
|
20
|
+
// Remove trailing .git
|
|
21
|
+
normalized = normalized.replace(/\.git$/, '');
|
|
22
|
+
// Parse the URL
|
|
23
|
+
const match = normalized.match(/github\.com\/([^/]+)\/([^/]+)(?:\/.*)?$/);
|
|
24
|
+
if (!match || !match[1] || !match[2]) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const owner = match[1];
|
|
28
|
+
const repo = match[2];
|
|
29
|
+
// Validate owner and repo names
|
|
30
|
+
if (!isValidGitHubName(owner) || !isValidGitHubName(repo)) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
owner,
|
|
35
|
+
repo,
|
|
36
|
+
fullUrl: `https://github.com/${owner}/${repo}`,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Validate a GitHub username or repository name
|
|
41
|
+
*/
|
|
42
|
+
function isValidGitHubName(name) {
|
|
43
|
+
// GitHub names can contain alphanumeric and hyphens
|
|
44
|
+
// Cannot start or end with hyphen, cannot have consecutive hyphens
|
|
45
|
+
const pattern = /^[a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9]))*$/;
|
|
46
|
+
return pattern.test(name) && name.length <= 100;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Validate repository access with a GitHub token
|
|
50
|
+
*/
|
|
51
|
+
export async function validateRepoAccess(octokit, owner, repo) {
|
|
52
|
+
try {
|
|
53
|
+
// Get repository info
|
|
54
|
+
const { data: repoData } = await octokit.rest.repos.get({
|
|
55
|
+
owner,
|
|
56
|
+
repo,
|
|
57
|
+
});
|
|
58
|
+
// Check write access by checking permissions
|
|
59
|
+
const permissions = repoData.permissions;
|
|
60
|
+
const canWrite = permissions?.push || permissions?.admin || false;
|
|
61
|
+
return {
|
|
62
|
+
valid: true,
|
|
63
|
+
canRead: true,
|
|
64
|
+
canWrite,
|
|
65
|
+
isPrivate: repoData.private,
|
|
66
|
+
defaultBranch: repoData.default_branch,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (error instanceof Error) {
|
|
71
|
+
const message = error.message.toLowerCase();
|
|
72
|
+
if (message.includes('not found') || message.includes('404')) {
|
|
73
|
+
return {
|
|
74
|
+
valid: false,
|
|
75
|
+
canRead: false,
|
|
76
|
+
canWrite: false,
|
|
77
|
+
isPrivate: false,
|
|
78
|
+
defaultBranch: 'main',
|
|
79
|
+
error: 'Repository not found. Check the URL and your access permissions.',
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
if (message.includes('401') || message.includes('bad credentials')) {
|
|
83
|
+
return {
|
|
84
|
+
valid: false,
|
|
85
|
+
canRead: false,
|
|
86
|
+
canWrite: false,
|
|
87
|
+
isPrivate: false,
|
|
88
|
+
defaultBranch: 'main',
|
|
89
|
+
error: 'Invalid GitHub token. Create a new token at https://github.com/settings/tokens',
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
if (message.includes('403') || message.includes('forbidden')) {
|
|
93
|
+
return {
|
|
94
|
+
valid: false,
|
|
95
|
+
canRead: false,
|
|
96
|
+
canWrite: false,
|
|
97
|
+
isPrivate: false,
|
|
98
|
+
defaultBranch: 'main',
|
|
99
|
+
error: 'Access denied. Your token may lack required permissions.',
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
valid: false,
|
|
104
|
+
canRead: false,
|
|
105
|
+
canWrite: false,
|
|
106
|
+
isPrivate: false,
|
|
107
|
+
defaultBranch: 'main',
|
|
108
|
+
error: error.message,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
valid: false,
|
|
113
|
+
canRead: false,
|
|
114
|
+
canWrite: false,
|
|
115
|
+
isPrivate: false,
|
|
116
|
+
defaultBranch: 'main',
|
|
117
|
+
error: 'Unknown error validating repository access',
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Validate alias format
|
|
123
|
+
*/
|
|
124
|
+
export function isValidAlias(alias) {
|
|
125
|
+
// Allow alphanumeric, hyphens, underscores
|
|
126
|
+
const pattern = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/;
|
|
127
|
+
return pattern.test(alias) && alias.length <= 50;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get validation error for alias
|
|
131
|
+
*/
|
|
132
|
+
export function getAliasError(alias) {
|
|
133
|
+
if (!alias || alias.length === 0) {
|
|
134
|
+
return 'Alias is required';
|
|
135
|
+
}
|
|
136
|
+
if (alias.length > 50) {
|
|
137
|
+
return 'Alias must be 50 characters or less';
|
|
138
|
+
}
|
|
139
|
+
if (!/^[a-zA-Z0-9]/.test(alias)) {
|
|
140
|
+
return 'Alias must start with a letter or number';
|
|
141
|
+
}
|
|
142
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(alias)) {
|
|
143
|
+
return 'Alias can only contain letters, numbers, hyphens, and underscores';
|
|
144
|
+
}
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Generate a default alias from repository name
|
|
149
|
+
*/
|
|
150
|
+
export function generateDefaultAlias(repoName) {
|
|
151
|
+
// Use the repo name directly, it's already validated
|
|
152
|
+
return repoName.toLowerCase();
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/core/repo/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runner - Spawns Python runner for AI operations
|
|
3
|
+
*/
|
|
4
|
+
export interface RunnerOptions {
|
|
5
|
+
resume?: boolean;
|
|
6
|
+
loop?: boolean;
|
|
7
|
+
cancel?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface OperationState {
|
|
10
|
+
operation: string;
|
|
11
|
+
project_path: string;
|
|
12
|
+
phase: string;
|
|
13
|
+
total_tasks: number;
|
|
14
|
+
current_task: number;
|
|
15
|
+
started_at: string;
|
|
16
|
+
updated_at: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Check if an operation is currently in progress
|
|
20
|
+
*/
|
|
21
|
+
export declare function checkOperationInProgress(projectPath?: string): Promise<OperationState | null>;
|
|
22
|
+
export declare class RunnerError extends Error {
|
|
23
|
+
code: 'UV_NOT_INSTALLED' | 'RUNNER_NOT_FOUND' | 'RUNNER_FAILED' | 'OPERATION_IN_PROGRESS';
|
|
24
|
+
constructor(message: string, code: 'UV_NOT_INSTALLED' | 'RUNNER_NOT_FOUND' | 'RUNNER_FAILED' | 'OPERATION_IN_PROGRESS');
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Run the vibe runner for an operation
|
|
28
|
+
*/
|
|
29
|
+
export declare function runVibeRunner(operation: string, projectPath?: string, options?: RunnerOptions): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Cancel the current operation
|
|
32
|
+
*/
|
|
33
|
+
export declare function cancelOperation(projectPath?: string): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Get operation status
|
|
36
|
+
*/
|
|
37
|
+
export declare function getOperationStatus(projectPath?: string): Promise<OperationState | null>;
|
|
38
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAgBhC;AA0BD,qBAAa,WAAY,SAAQ,KAAK;IAG3B,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,eAAe,GAAG,uBAAuB;gBADhG,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,eAAe,GAAG,uBAAuB;CAKnG;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,WAAW,GAAE,MAAsB,EACnC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqEf;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAEhC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runner - Spawns Python runner for AI operations
|
|
3
|
+
*/
|
|
4
|
+
import { spawn } from 'child_process';
|
|
5
|
+
import { readFile, access } from 'fs/promises';
|
|
6
|
+
import { constants } from 'fs';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
const STATE_FILE = '.claude/vibe-state.json';
|
|
9
|
+
const RUNNER_SCRIPT = '.claude/scripts/vibe-runner.py';
|
|
10
|
+
/**
|
|
11
|
+
* Check if an operation is currently in progress
|
|
12
|
+
*/
|
|
13
|
+
export async function checkOperationInProgress(projectPath = process.cwd()) {
|
|
14
|
+
const statePath = path.join(projectPath, STATE_FILE);
|
|
15
|
+
try {
|
|
16
|
+
const content = await readFile(statePath, 'utf-8');
|
|
17
|
+
const state = JSON.parse(content);
|
|
18
|
+
// Check if operation is actually in progress (not complete)
|
|
19
|
+
if (state.phase === 'complete') {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
return state;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if UV is installed
|
|
30
|
+
*/
|
|
31
|
+
async function checkUvInstalled() {
|
|
32
|
+
return new Promise((resolve) => {
|
|
33
|
+
const proc = spawn('uv', ['--version'], { stdio: 'ignore' });
|
|
34
|
+
proc.on('close', (code) => resolve(code === 0));
|
|
35
|
+
proc.on('error', () => resolve(false));
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Check if runner script exists
|
|
40
|
+
*/
|
|
41
|
+
async function checkRunnerExists(projectPath) {
|
|
42
|
+
const runnerPath = path.join(projectPath, RUNNER_SCRIPT);
|
|
43
|
+
try {
|
|
44
|
+
await access(runnerPath, constants.R_OK);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export class RunnerError extends Error {
|
|
52
|
+
code;
|
|
53
|
+
constructor(message, code) {
|
|
54
|
+
super(message);
|
|
55
|
+
this.code = code;
|
|
56
|
+
this.name = 'RunnerError';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Run the vibe runner for an operation
|
|
61
|
+
*/
|
|
62
|
+
export async function runVibeRunner(operation, projectPath = process.cwd(), options = {}) {
|
|
63
|
+
// Check if UV is installed
|
|
64
|
+
const uvInstalled = await checkUvInstalled();
|
|
65
|
+
if (!uvInstalled) {
|
|
66
|
+
throw new RunnerError('UV is not installed. Install it with: curl -LsSf https://astral.sh/uv/install.sh | sh', 'UV_NOT_INSTALLED');
|
|
67
|
+
}
|
|
68
|
+
// Check if runner script exists
|
|
69
|
+
const runnerExists = await checkRunnerExists(projectPath);
|
|
70
|
+
if (!runnerExists) {
|
|
71
|
+
throw new RunnerError(`Runner script not found at ${RUNNER_SCRIPT}. Run 'vibe init' first.`, 'RUNNER_NOT_FOUND');
|
|
72
|
+
}
|
|
73
|
+
const runnerPath = path.join(projectPath, RUNNER_SCRIPT);
|
|
74
|
+
// Build arguments
|
|
75
|
+
const args = ['run', runnerPath];
|
|
76
|
+
if (options.cancel) {
|
|
77
|
+
args.push('--cancel');
|
|
78
|
+
}
|
|
79
|
+
else if (options.resume) {
|
|
80
|
+
args.push('--resume');
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
args.push('--operation', operation);
|
|
84
|
+
args.push('--project', projectPath);
|
|
85
|
+
}
|
|
86
|
+
if (options.loop) {
|
|
87
|
+
args.push('--loop');
|
|
88
|
+
}
|
|
89
|
+
// Spawn the runner
|
|
90
|
+
return new Promise((resolve, reject) => {
|
|
91
|
+
const proc = spawn('uv', args, {
|
|
92
|
+
stdio: 'inherit',
|
|
93
|
+
cwd: projectPath,
|
|
94
|
+
});
|
|
95
|
+
proc.on('close', (code) => {
|
|
96
|
+
if (code === 0) {
|
|
97
|
+
resolve();
|
|
98
|
+
}
|
|
99
|
+
else if (code === 130) {
|
|
100
|
+
// User interrupted (Ctrl+C)
|
|
101
|
+
resolve();
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
reject(new RunnerError(`Runner exited with code ${code}`, 'RUNNER_FAILED'));
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
proc.on('error', (error) => {
|
|
108
|
+
reject(new RunnerError(`Failed to spawn runner: ${error.message}`, 'RUNNER_FAILED'));
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Cancel the current operation
|
|
114
|
+
*/
|
|
115
|
+
export async function cancelOperation(projectPath = process.cwd()) {
|
|
116
|
+
await runVibeRunner('', projectPath, { cancel: true });
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get operation status
|
|
120
|
+
*/
|
|
121
|
+
export async function getOperationStatus(projectPath = process.cwd()) {
|
|
122
|
+
return checkOperationInProgress(projectPath);
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core send logic for pushing scopes to dev repositories
|
|
3
|
+
*/
|
|
4
|
+
import { Octokit } from 'octokit';
|
|
5
|
+
import { ParsedScope, ScopeMetadata, TrackingMetadata, DevRepoState, SendResult, BatchSendResult } from '../types/send.js';
|
|
6
|
+
import { Config, Repo } from '../types/config.js';
|
|
7
|
+
/**
|
|
8
|
+
* Parse scope metadata from markdown content
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseScopeMetadata(content: string): ScopeMetadata | null;
|
|
11
|
+
/**
|
|
12
|
+
* Parse scope summary from markdown content
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseScopeSummary(content: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Extract scope title from content
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseScopeTitle(content: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Parse a scope file
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseScope(filePath: string): Promise<ParsedScope | null>;
|
|
23
|
+
/**
|
|
24
|
+
* Find scope in ready directory by ID
|
|
25
|
+
*/
|
|
26
|
+
export declare function findReadyScope(projectPath: string, scopeId: string): Promise<ParsedScope | null>;
|
|
27
|
+
/**
|
|
28
|
+
* Get target repos for a scope based on target field
|
|
29
|
+
*/
|
|
30
|
+
export declare function getTargetRepos(scope: ParsedScope, config: Config): Repo[];
|
|
31
|
+
/**
|
|
32
|
+
* Check the state of a scope in a dev repository
|
|
33
|
+
*/
|
|
34
|
+
export declare function checkDevRepoState(octokit: Octokit, owner: string, repo: string, branch: string, scopeId: string): Promise<DevRepoState>;
|
|
35
|
+
/**
|
|
36
|
+
* Push scope file to dev repository
|
|
37
|
+
*/
|
|
38
|
+
export declare function pushScopeToRepo(octokit: Octokit, owner: string, repo: string, branch: string, scope: ParsedScope, tracking: TrackingMetadata): Promise<{
|
|
39
|
+
success: boolean;
|
|
40
|
+
commit_sha?: string;
|
|
41
|
+
error?: string;
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* Create GitHub Issue for scope notification
|
|
45
|
+
*/
|
|
46
|
+
export declare function createGitHubIssue(octokit: Octokit, owner: string, repo: string, scope: ParsedScope): Promise<{
|
|
47
|
+
success: boolean;
|
|
48
|
+
issue_number?: number;
|
|
49
|
+
issue_url?: string;
|
|
50
|
+
error?: string;
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* Add comment to existing GitHub Issue
|
|
54
|
+
*/
|
|
55
|
+
export declare function addIssueComment(octokit: Octokit, owner: string, repo: string, issueNumber: number, scope: ParsedScope, version: number): Promise<{
|
|
56
|
+
success: boolean;
|
|
57
|
+
error?: string;
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* Move scope from ready to sent
|
|
61
|
+
*/
|
|
62
|
+
export declare function moveScopeToSent(projectPath: string, scope: ParsedScope): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Update scope file with tracking metadata and new status
|
|
65
|
+
*/
|
|
66
|
+
export declare function updateScopeWithTracking(scope: ParsedScope, tracking: TrackingMetadata, _results: SendResult[]): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Send a single scope to its target repositories
|
|
69
|
+
*/
|
|
70
|
+
export declare function sendScope(octokit: Octokit, projectPath: string, scope: ParsedScope, config: Config, options?: {
|
|
71
|
+
dryRun?: boolean;
|
|
72
|
+
force?: boolean;
|
|
73
|
+
noNotify?: boolean;
|
|
74
|
+
}): Promise<SendResult[]>;
|
|
75
|
+
/**
|
|
76
|
+
* Send all sendable scopes (batch mode)
|
|
77
|
+
*/
|
|
78
|
+
export declare function sendAllScopes(octokit: Octokit, projectPath: string, config: Config, options?: {
|
|
79
|
+
dryRun?: boolean;
|
|
80
|
+
force?: boolean;
|
|
81
|
+
noNotify?: boolean;
|
|
82
|
+
}): Promise<BatchSendResult>;
|
|
83
|
+
//# sourceMappingURL=send.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/core/send.ts"],"names":[],"mappings":"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"}
|