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,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vibe/ folder README templates
|
|
3
|
+
*/
|
|
4
|
+
export const vibeReadmes = [
|
|
5
|
+
// incoming-scopes/README.md
|
|
6
|
+
{
|
|
7
|
+
path: 'vibe/incoming-scopes/README.md',
|
|
8
|
+
content: `# Incoming Scopes
|
|
9
|
+
|
|
10
|
+
This folder receives scope briefs from the planning hub.
|
|
11
|
+
|
|
12
|
+
## Workflow
|
|
13
|
+
|
|
14
|
+
1. Planning hub sends scope via \`vibe send\`
|
|
15
|
+
2. Scope lands here as \`SCOPE-XXX.md\`
|
|
16
|
+
3. Create implementation plan: \`/plan-from-scope SCOPE-XXX\`
|
|
17
|
+
4. Move scope to \`processed/\` once plan is created
|
|
18
|
+
|
|
19
|
+
## Folder Structure
|
|
20
|
+
|
|
21
|
+
\`\`\`
|
|
22
|
+
incoming-scopes/
|
|
23
|
+
├── SCOPE-XXX.md # New scopes land here
|
|
24
|
+
└── processed/ # Scopes with plans created
|
|
25
|
+
└── SCOPE-YYY.md
|
|
26
|
+
\`\`\`
|
|
27
|
+
|
|
28
|
+
## Scope Format
|
|
29
|
+
|
|
30
|
+
Each scope contains:
|
|
31
|
+
- Summary of what to implement
|
|
32
|
+
- Requirements and acceptance criteria
|
|
33
|
+
- Technical constraints
|
|
34
|
+
- Implementation notes
|
|
35
|
+
`,
|
|
36
|
+
},
|
|
37
|
+
// implementation-plans/README.md
|
|
38
|
+
{
|
|
39
|
+
path: 'vibe/implementation-plans/README.md',
|
|
40
|
+
content: `# Implementation Plans
|
|
41
|
+
|
|
42
|
+
Plans for implementing scopes from the planning hub.
|
|
43
|
+
|
|
44
|
+
## Workflow
|
|
45
|
+
|
|
46
|
+
1. Read scope from \`../incoming-scopes/\`
|
|
47
|
+
2. Create plan using template: \`/plan-from-scope SCOPE-XXX\`
|
|
48
|
+
3. Work on plan (track progress in log)
|
|
49
|
+
4. Move to \`completed/\` when done
|
|
50
|
+
|
|
51
|
+
## Folder Structure
|
|
52
|
+
|
|
53
|
+
\`\`\`
|
|
54
|
+
implementation-plans/
|
|
55
|
+
├── active/ # Plans in progress
|
|
56
|
+
├── completed/ # Finished plans
|
|
57
|
+
├── archived/ # Cancelled plans
|
|
58
|
+
└── templates/
|
|
59
|
+
└── PLAN_TEMPLATE.md
|
|
60
|
+
\`\`\`
|
|
61
|
+
|
|
62
|
+
## Plan Requirements
|
|
63
|
+
|
|
64
|
+
Every plan MUST include:
|
|
65
|
+
- \`Source Scope: SCOPE-XXX\` in metadata (links to planning hub)
|
|
66
|
+
- Progress log section
|
|
67
|
+
- Acceptance criteria checklist
|
|
68
|
+
`,
|
|
69
|
+
},
|
|
70
|
+
// implementation-plans/templates/PLAN_TEMPLATE.md
|
|
71
|
+
{
|
|
72
|
+
path: 'vibe/implementation-plans/templates/PLAN_TEMPLATE.md',
|
|
73
|
+
content: `# Implementation Plan: [Title]
|
|
74
|
+
|
|
75
|
+
## Metadata
|
|
76
|
+
|
|
77
|
+
| Field | Value |
|
|
78
|
+
|-------|-------|
|
|
79
|
+
| **Plan ID** | \`PLAN-XXX\` |
|
|
80
|
+
| **Source Scope** | \`SCOPE-XXX\` |
|
|
81
|
+
| **Status** | \`active\` |
|
|
82
|
+
| **Created** | YYYY-MM-DD |
|
|
83
|
+
| **Part** | 1 of 1 |
|
|
84
|
+
|
|
85
|
+
## Objective
|
|
86
|
+
|
|
87
|
+
[Brief description of what this plan implements]
|
|
88
|
+
|
|
89
|
+
## Acceptance Criteria
|
|
90
|
+
|
|
91
|
+
From scope:
|
|
92
|
+
- [ ] Criteria 1
|
|
93
|
+
- [ ] Criteria 2
|
|
94
|
+
- [ ] Criteria 3
|
|
95
|
+
|
|
96
|
+
## Implementation Steps
|
|
97
|
+
|
|
98
|
+
1. Step 1
|
|
99
|
+
2. Step 2
|
|
100
|
+
3. Step 3
|
|
101
|
+
|
|
102
|
+
## Progress Log
|
|
103
|
+
|
|
104
|
+
### YYYY-MM-DD
|
|
105
|
+
- Started implementation
|
|
106
|
+
- [Notes]
|
|
107
|
+
|
|
108
|
+
## Notes
|
|
109
|
+
|
|
110
|
+
[Additional context]
|
|
111
|
+
`,
|
|
112
|
+
},
|
|
113
|
+
// knowledge-base/_index.md
|
|
114
|
+
{
|
|
115
|
+
path: 'vibe/knowledge-base/_index.md',
|
|
116
|
+
content: `# Knowledge Base
|
|
117
|
+
|
|
118
|
+
Documentation and learnings from this repository.
|
|
119
|
+
|
|
120
|
+
## Structure
|
|
121
|
+
|
|
122
|
+
Add entries by category:
|
|
123
|
+
|
|
124
|
+
\`\`\`markdown
|
|
125
|
+
## Category Name
|
|
126
|
+
- [Entry Title](path/to/entry.md)
|
|
127
|
+
\`\`\`
|
|
128
|
+
|
|
129
|
+
## Categories
|
|
130
|
+
|
|
131
|
+
<!-- Add categories and entries as you learn -->
|
|
132
|
+
`,
|
|
133
|
+
},
|
|
134
|
+
// knowledge-base/_TEMPLATE.md
|
|
135
|
+
{
|
|
136
|
+
path: 'vibe/knowledge-base/_TEMPLATE.md',
|
|
137
|
+
content: `# [Title]
|
|
138
|
+
|
|
139
|
+
## Context
|
|
140
|
+
|
|
141
|
+
[What situation led to this knowledge?]
|
|
142
|
+
|
|
143
|
+
## Learning
|
|
144
|
+
|
|
145
|
+
[What did you learn?]
|
|
146
|
+
|
|
147
|
+
## Example
|
|
148
|
+
|
|
149
|
+
\`\`\`
|
|
150
|
+
[Code or configuration example]
|
|
151
|
+
\`\`\`
|
|
152
|
+
|
|
153
|
+
## Related
|
|
154
|
+
|
|
155
|
+
- [Related entry](./related.md)
|
|
156
|
+
`,
|
|
157
|
+
},
|
|
158
|
+
// knowledge-base/README.md
|
|
159
|
+
{
|
|
160
|
+
path: 'vibe/knowledge-base/README.md',
|
|
161
|
+
content: `# Knowledge Base
|
|
162
|
+
|
|
163
|
+
Store learnings, decisions, and documentation discovered during implementation.
|
|
164
|
+
|
|
165
|
+
## When to Add Entries
|
|
166
|
+
|
|
167
|
+
- Discovered gotcha or edge case
|
|
168
|
+
- Made architectural decision
|
|
169
|
+
- Found useful pattern
|
|
170
|
+
- Debugged tricky issue
|
|
171
|
+
- Learned something about the codebase
|
|
172
|
+
|
|
173
|
+
## How to Add
|
|
174
|
+
|
|
175
|
+
Use the \`/kb-add\` command or create a file manually:
|
|
176
|
+
|
|
177
|
+
\`\`\`bash
|
|
178
|
+
/kb-add "Authentication uses JWT with refresh tokens"
|
|
179
|
+
\`\`\`
|
|
180
|
+
|
|
181
|
+
## Entry Format
|
|
182
|
+
|
|
183
|
+
Use the template in \`_TEMPLATE.md\`:
|
|
184
|
+
|
|
185
|
+
\`\`\`markdown
|
|
186
|
+
# Title
|
|
187
|
+
|
|
188
|
+
## Context
|
|
189
|
+
What situation led to this knowledge?
|
|
190
|
+
|
|
191
|
+
## Learning
|
|
192
|
+
What did you learn?
|
|
193
|
+
|
|
194
|
+
## Example
|
|
195
|
+
Code or configuration example.
|
|
196
|
+
\`\`\`
|
|
197
|
+
|
|
198
|
+
## Syncing
|
|
199
|
+
|
|
200
|
+
The planning hub syncs KB entries via \`vibe sync\`. Keep \`_index.md\` updated with links to all entries.
|
|
201
|
+
`,
|
|
202
|
+
},
|
|
203
|
+
];
|
|
204
|
+
//# sourceMappingURL=vibe-readme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vibe-readme.js","sourceRoot":"","sources":["../../../../src/core/repo/templates/vibe-readme.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,4BAA4B;IAC5B;QACE,IAAI,EAAE,gCAAgC;QACtC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BZ;KACE;IAED,iCAAiC;IACjC;QACE,IAAI,EAAE,qCAAqC;QAC3C,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BZ;KACE;IAED,kDAAkD;IAClD;QACE,IAAI,EAAE,sDAAsD;QAC5D,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCZ;KACE;IAED,2BAA2B;IAC3B;QACE,IAAI,EAAE,+BAA+B;QACrC,OAAO,EAAE;;;;;;;;;;;;;;;;CAgBZ;KACE;IAED,8BAA8B;IAC9B;QACE,IAAI,EAAE,kCAAkC;QACxC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;CAmBZ;KACE;IAED,2BAA2B;IAC3B;QACE,IAAI,EAAE,+BAA+B;QACrC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCZ;KACE;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vibe-scripts.d.ts","sourceRoot":"","sources":["../../../../src/core/repo/templates/vibe-scripts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,WAAW,EAAE,YAAY,EAiTrC,CAAC"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vibe/scripts/ templates
|
|
3
|
+
*/
|
|
4
|
+
export const vibeScripts = [
|
|
5
|
+
// sync-self.ts - Map generation script
|
|
6
|
+
{
|
|
7
|
+
path: 'vibe/scripts/sync-self.ts',
|
|
8
|
+
content: `#!/usr/bin/env npx tsx
|
|
9
|
+
/**
|
|
10
|
+
* Codebase map generation script
|
|
11
|
+
*
|
|
12
|
+
* Generates a JSON map of the codebase structure including:
|
|
13
|
+
* - File tree
|
|
14
|
+
* - Export analysis
|
|
15
|
+
* - Dependency graph
|
|
16
|
+
*
|
|
17
|
+
* Usage: npx tsx vibe/scripts/sync-self.ts [--output maps/codebase-map.json]
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import fs from 'fs';
|
|
21
|
+
import path from 'path';
|
|
22
|
+
|
|
23
|
+
interface FileNode {
|
|
24
|
+
name: string;
|
|
25
|
+
path: string;
|
|
26
|
+
type: 'file' | 'directory';
|
|
27
|
+
children?: FileNode[];
|
|
28
|
+
exports?: string[];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const IGNORE_PATTERNS = [
|
|
32
|
+
'node_modules',
|
|
33
|
+
'.git',
|
|
34
|
+
'dist',
|
|
35
|
+
'build',
|
|
36
|
+
'.next',
|
|
37
|
+
'coverage',
|
|
38
|
+
'.cache',
|
|
39
|
+
'vibe',
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
function shouldIgnore(name: string): boolean {
|
|
43
|
+
return IGNORE_PATTERNS.some((pattern) => name === pattern || name.startsWith('.'));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function scanDirectory(dirPath: string, relativePath = ''): FileNode[] {
|
|
47
|
+
const entries = fs.readdirSync(dirPath, { withFileTypes: true });
|
|
48
|
+
const nodes: FileNode[] = [];
|
|
49
|
+
|
|
50
|
+
for (const entry of entries) {
|
|
51
|
+
if (shouldIgnore(entry.name)) continue;
|
|
52
|
+
|
|
53
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
54
|
+
const relPath = path.join(relativePath, entry.name);
|
|
55
|
+
|
|
56
|
+
if (entry.isDirectory()) {
|
|
57
|
+
nodes.push({
|
|
58
|
+
name: entry.name,
|
|
59
|
+
path: relPath,
|
|
60
|
+
type: 'directory',
|
|
61
|
+
children: scanDirectory(fullPath, relPath),
|
|
62
|
+
});
|
|
63
|
+
} else if (entry.isFile()) {
|
|
64
|
+
nodes.push({
|
|
65
|
+
name: entry.name,
|
|
66
|
+
path: relPath,
|
|
67
|
+
type: 'file',
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return nodes;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function main() {
|
|
76
|
+
const args = process.argv.slice(2);
|
|
77
|
+
const outputIndex = args.indexOf('--output');
|
|
78
|
+
const outputPath = outputIndex >= 0 ? args[outputIndex + 1] : 'vibe/maps/codebase-map.json';
|
|
79
|
+
|
|
80
|
+
console.log('Scanning codebase...');
|
|
81
|
+
const tree = scanDirectory(process.cwd());
|
|
82
|
+
|
|
83
|
+
const map = {
|
|
84
|
+
generated: new Date().toISOString(),
|
|
85
|
+
root: process.cwd(),
|
|
86
|
+
tree,
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
// Ensure output directory exists
|
|
90
|
+
const outputDir = path.dirname(outputPath);
|
|
91
|
+
if (!fs.existsSync(outputDir)) {
|
|
92
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
fs.writeFileSync(outputPath, JSON.stringify(map, null, 2));
|
|
96
|
+
console.log(\`Map written to \${outputPath}\`);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
main();
|
|
100
|
+
`,
|
|
101
|
+
},
|
|
102
|
+
// dependency-graph.ts - Dependency analysis script
|
|
103
|
+
{
|
|
104
|
+
path: 'vibe/scripts/dependency-graph.ts',
|
|
105
|
+
content: `#!/usr/bin/env npx tsx
|
|
106
|
+
/**
|
|
107
|
+
* Dependency graph generation script
|
|
108
|
+
*
|
|
109
|
+
* Analyzes import statements to build a dependency graph.
|
|
110
|
+
*
|
|
111
|
+
* Usage: npx tsx vibe/scripts/dependency-graph.ts [--output graphs/deps.json]
|
|
112
|
+
*/
|
|
113
|
+
|
|
114
|
+
import fs from 'fs';
|
|
115
|
+
import path from 'path';
|
|
116
|
+
|
|
117
|
+
interface DependencyNode {
|
|
118
|
+
file: string;
|
|
119
|
+
imports: string[];
|
|
120
|
+
importedBy: string[];
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
interface DependencyGraph {
|
|
124
|
+
generated: string;
|
|
125
|
+
nodes: Record<string, DependencyNode>;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const SOURCE_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.mjs'];
|
|
129
|
+
const IGNORE_DIRS = ['node_modules', 'dist', 'build', '.git', 'vibe'];
|
|
130
|
+
|
|
131
|
+
function findSourceFiles(dir: string, files: string[] = []): string[] {
|
|
132
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
133
|
+
|
|
134
|
+
for (const entry of entries) {
|
|
135
|
+
const fullPath = path.join(dir, entry.name);
|
|
136
|
+
|
|
137
|
+
if (entry.isDirectory() && !IGNORE_DIRS.includes(entry.name)) {
|
|
138
|
+
findSourceFiles(fullPath, files);
|
|
139
|
+
} else if (entry.isFile() && SOURCE_EXTENSIONS.includes(path.extname(entry.name))) {
|
|
140
|
+
files.push(fullPath);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return files;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function extractImports(filePath: string): string[] {
|
|
148
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
149
|
+
const imports: string[] = [];
|
|
150
|
+
|
|
151
|
+
// Match import statements
|
|
152
|
+
const importRegex = /import\\s+(?:[^'"]*from\\s+)?['"]([^'"]+)['"]/g;
|
|
153
|
+
let match;
|
|
154
|
+
|
|
155
|
+
while ((match = importRegex.exec(content)) !== null) {
|
|
156
|
+
const importPath = match[1];
|
|
157
|
+
// Only include relative imports
|
|
158
|
+
if (importPath.startsWith('.')) {
|
|
159
|
+
imports.push(importPath);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return imports;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function main() {
|
|
167
|
+
const args = process.argv.slice(2);
|
|
168
|
+
const outputIndex = args.indexOf('--output');
|
|
169
|
+
const outputPath = outputIndex >= 0 ? args[outputIndex + 1] : 'vibe/graphs/deps.json';
|
|
170
|
+
|
|
171
|
+
console.log('Analyzing dependencies...');
|
|
172
|
+
|
|
173
|
+
const sourceFiles = findSourceFiles(process.cwd());
|
|
174
|
+
const graph: DependencyGraph = {
|
|
175
|
+
generated: new Date().toISOString(),
|
|
176
|
+
nodes: {},
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
// Build initial nodes
|
|
180
|
+
for (const file of sourceFiles) {
|
|
181
|
+
const relativePath = path.relative(process.cwd(), file);
|
|
182
|
+
graph.nodes[relativePath] = {
|
|
183
|
+
file: relativePath,
|
|
184
|
+
imports: extractImports(file),
|
|
185
|
+
importedBy: [],
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Build importedBy relationships
|
|
190
|
+
for (const [file, node] of Object.entries(graph.nodes)) {
|
|
191
|
+
for (const imp of node.imports) {
|
|
192
|
+
const resolved = path.normalize(path.join(path.dirname(file), imp));
|
|
193
|
+
// Try to find matching file
|
|
194
|
+
for (const ext of ['', ...SOURCE_EXTENSIONS]) {
|
|
195
|
+
const target = resolved + ext;
|
|
196
|
+
if (graph.nodes[target]) {
|
|
197
|
+
graph.nodes[target].importedBy.push(file);
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Ensure output directory exists
|
|
205
|
+
const outputDir = path.dirname(outputPath);
|
|
206
|
+
if (!fs.existsSync(outputDir)) {
|
|
207
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
fs.writeFileSync(outputPath, JSON.stringify(graph, null, 2));
|
|
211
|
+
console.log(\`Graph written to \${outputPath}\`);
|
|
212
|
+
console.log(\`Analyzed \${sourceFiles.length} files\`);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
main();
|
|
216
|
+
`,
|
|
217
|
+
},
|
|
218
|
+
// slack-notify.py - Notification script
|
|
219
|
+
{
|
|
220
|
+
path: 'vibe/scripts/slack-notify.py',
|
|
221
|
+
content: `#!/usr/bin/env -S uv run --quiet --script
|
|
222
|
+
# /// script
|
|
223
|
+
# requires-python = ">=3.11"
|
|
224
|
+
# dependencies = ["requests", "python-dotenv"]
|
|
225
|
+
# ///
|
|
226
|
+
"""
|
|
227
|
+
Slack notification script for Ralph completions and other events.
|
|
228
|
+
|
|
229
|
+
Usage:
|
|
230
|
+
uv run slack-notify.py --plan-id ILS-2026-001 --status success
|
|
231
|
+
uv run slack-notify.py --message "Custom message" --title "Title"
|
|
232
|
+
"""
|
|
233
|
+
|
|
234
|
+
import argparse
|
|
235
|
+
import os
|
|
236
|
+
import sys
|
|
237
|
+
try:
|
|
238
|
+
import requests
|
|
239
|
+
from dotenv import load_dotenv
|
|
240
|
+
except ImportError:
|
|
241
|
+
print("Dependencies not available. Run with: uv run slack-notify.py")
|
|
242
|
+
sys.exit(1)
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def send_notification(webhook_url: str, title: str, message: str, status: str = "info") -> bool:
|
|
246
|
+
"""Send a Slack notification."""
|
|
247
|
+
color = {
|
|
248
|
+
"success": "#36a64f",
|
|
249
|
+
"error": "#ff0000",
|
|
250
|
+
"info": "#0066cc"
|
|
251
|
+
}.get(status, "#0066cc")
|
|
252
|
+
|
|
253
|
+
payload = {
|
|
254
|
+
"attachments": [{
|
|
255
|
+
"color": color,
|
|
256
|
+
"title": title,
|
|
257
|
+
"text": message,
|
|
258
|
+
"footer": "Vibe-Fabric"
|
|
259
|
+
}]
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
try:
|
|
263
|
+
response = requests.post(webhook_url, json=payload, timeout=10)
|
|
264
|
+
return response.status_code == 200
|
|
265
|
+
except Exception as e:
|
|
266
|
+
print(f"Failed to send notification: {e}")
|
|
267
|
+
return False
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
def main():
|
|
271
|
+
load_dotenv(".env.local")
|
|
272
|
+
load_dotenv(".env")
|
|
273
|
+
|
|
274
|
+
webhook_url = os.getenv("SLACK_WEBHOOK_URL")
|
|
275
|
+
|
|
276
|
+
if not webhook_url:
|
|
277
|
+
print("SLACK_WEBHOOK_URL not configured. Skipping notification.")
|
|
278
|
+
return
|
|
279
|
+
|
|
280
|
+
parser = argparse.ArgumentParser(description="Send Slack notifications")
|
|
281
|
+
parser.add_argument("--plan-id", help="Plan ID for completion notification")
|
|
282
|
+
parser.add_argument("--status", choices=["success", "error", "info"], default="info")
|
|
283
|
+
parser.add_argument("--message", help="Custom message")
|
|
284
|
+
parser.add_argument("--title", help="Custom title")
|
|
285
|
+
parser.add_argument("--summary", help="Additional summary text")
|
|
286
|
+
args = parser.parse_args()
|
|
287
|
+
|
|
288
|
+
if args.plan_id:
|
|
289
|
+
emoji = {"success": "✅", "error": "❌", "info": "ℹ️"}.get(args.status, "ℹ️")
|
|
290
|
+
title = f"{emoji} Ralph Complete: {args.plan_id}"
|
|
291
|
+
message = args.summary or f"Plan {args.plan_id} has completed."
|
|
292
|
+
else:
|
|
293
|
+
title = args.title or "Vibe-Fabric Notification"
|
|
294
|
+
message = args.message or "No message provided."
|
|
295
|
+
|
|
296
|
+
if send_notification(webhook_url, title, message, args.status):
|
|
297
|
+
print(f"Notification sent: {title}")
|
|
298
|
+
else:
|
|
299
|
+
print("Failed to send notification")
|
|
300
|
+
sys.exit(1)
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
if __name__ == "__main__":
|
|
304
|
+
main()
|
|
305
|
+
`,
|
|
306
|
+
},
|
|
307
|
+
];
|
|
308
|
+
//# sourceMappingURL=vibe-scripts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vibe-scripts.js","sourceRoot":"","sources":["../../../../src/core/repo/templates/vibe-scripts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,uCAAuC;IACvC;QACE,IAAI,EAAE,2BAA2B;QACjC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4FZ;KACE;IAED,mDAAmD;IACnD;QACE,IAAI,EAAE,kCAAkC;QACxC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+GZ;KACE;IAED,wCAAwC;IACxC;QACE,IAAI,EAAE,8BAA8B;QACpC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoFZ;KACE;CACF,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Octokit } from 'octokit';
|
|
2
|
+
/**
|
|
3
|
+
* Parsed GitHub URL information
|
|
4
|
+
*/
|
|
5
|
+
export interface ParsedGitHubUrl {
|
|
6
|
+
owner: string;
|
|
7
|
+
repo: string;
|
|
8
|
+
fullUrl: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Repository access validation result
|
|
12
|
+
*/
|
|
13
|
+
export interface RepoAccessResult {
|
|
14
|
+
valid: boolean;
|
|
15
|
+
canRead: boolean;
|
|
16
|
+
canWrite: boolean;
|
|
17
|
+
isPrivate: boolean;
|
|
18
|
+
defaultBranch: string;
|
|
19
|
+
error?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parse a GitHub URL and extract owner/repo
|
|
23
|
+
* Supports formats:
|
|
24
|
+
* - github.com/owner/repo
|
|
25
|
+
* - https://github.com/owner/repo
|
|
26
|
+
* - https://github.com/owner/repo.git
|
|
27
|
+
* - git@github.com:owner/repo.git
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseGitHubUrl(url: string): ParsedGitHubUrl | null;
|
|
30
|
+
/**
|
|
31
|
+
* Validate repository access with a GitHub token
|
|
32
|
+
*/
|
|
33
|
+
export declare function validateRepoAccess(octokit: Octokit, owner: string, repo: string): Promise<RepoAccessResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Validate alias format
|
|
36
|
+
*/
|
|
37
|
+
export declare function isValidAlias(alias: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Get validation error for alias
|
|
40
|
+
*/
|
|
41
|
+
export declare function getAliasError(alias: string): string | null;
|
|
42
|
+
/**
|
|
43
|
+
* Generate a default alias from repository name
|
|
44
|
+
*/
|
|
45
|
+
export declare function generateDefaultAlias(repoName: string): string;
|
|
46
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/core/repo/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAqClE;AAYD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gBAAgB,CAAC,CA2E3B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAInD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAc1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG7D"}
|