vibe-forge 0.2.1 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/forge.md +41 -32
- package/.claude/settings.local.json +10 -1
- package/bin/forge-setup.sh +37 -6
- package/docs/npm-publishing.md +95 -0
- package/package.json +1 -1
|
@@ -18,45 +18,51 @@ Based on the first argument, do ONE of the following:
|
|
|
18
18
|
You are now the **Vibe Forge Planning Hub** - a multi-expert planning team.
|
|
19
19
|
|
|
20
20
|
#### Your Identity
|
|
21
|
-
|
|
21
|
+
|
|
22
|
+
@_vibe-forge/agents/planning-hub/personality.md
|
|
22
23
|
|
|
23
24
|
#### Project Context
|
|
25
|
+
|
|
24
26
|
@context/project-context.md
|
|
25
27
|
|
|
26
28
|
#### Current Forge State
|
|
27
|
-
|
|
29
|
+
|
|
30
|
+
@_vibe-forge/context/forge-state.yaml
|
|
28
31
|
|
|
29
32
|
#### Task Overview
|
|
30
|
-
Pending tasks:
|
|
31
|
-
!`ls tasks/pending/ 2>/dev/null || echo "None"`
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
!`ls tasks/in-progress/ 2>/dev/null || echo "None"`
|
|
34
|
+
Check the task folders for current work:
|
|
35
35
|
|
|
36
|
-
Tasks
|
|
37
|
-
|
|
36
|
+
- `_vibe-forge/tasks/pending/` - Tasks waiting to be picked up
|
|
37
|
+
- `_vibe-forge/tasks/in-progress/` - Tasks currently being worked on
|
|
38
|
+
- `_vibe-forge/tasks/needs-changes/` - Tasks that need revision
|
|
38
39
|
|
|
39
|
-
**Startup:** Display the team assembly welcome as shown in your personality's Startup Behavior section. Show the forge council assembling, then check current work status.
|
|
40
|
+
**Startup:** Display the team assembly welcome as shown in your personality's Startup Behavior section. Show the forge council assembling, then use the Glob tool to check for .md files in the task folders above and report the current work status.
|
|
40
41
|
|
|
41
42
|
---
|
|
42
43
|
|
|
43
44
|
### If `$1` is "status" → Show Status Dashboard
|
|
44
45
|
|
|
45
|
-
Display a formatted status dashboard
|
|
46
|
+
Display a formatted status dashboard.
|
|
46
47
|
|
|
47
48
|
#### Forge State
|
|
48
|
-
|
|
49
|
+
|
|
50
|
+
@_vibe-forge/context/forge-state.yaml
|
|
49
51
|
|
|
50
52
|
#### Task Counts
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
|
|
54
|
+
Use the Glob tool to count .md files in each task folder:
|
|
55
|
+
|
|
56
|
+
- `_vibe-forge/tasks/pending/*.md` - Pending
|
|
57
|
+
- `_vibe-forge/tasks/in-progress/*.md` - In Progress
|
|
58
|
+
- `_vibe-forge/tasks/completed/*.md` - Completed
|
|
59
|
+
- `_vibe-forge/tasks/review/*.md` - In Review
|
|
60
|
+
- `_vibe-forge/tasks/needs-changes/*.md` - Needs Changes
|
|
61
|
+
- `_vibe-forge/tasks/approved/*.md` - Approved
|
|
57
62
|
|
|
58
63
|
Format output like:
|
|
59
|
-
|
|
64
|
+
|
|
65
|
+
```text
|
|
60
66
|
🔥 VIBE FORGE - Status Dashboard
|
|
61
67
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
62
68
|
[Task counts and state summary]
|
|
@@ -71,23 +77,23 @@ Format output like:
|
|
|
71
77
|
|
|
72
78
|
Available agents (with aliases):
|
|
73
79
|
|
|
74
|
-
| Agent
|
|
75
|
-
|
|
76
|
-
| anvil
|
|
77
|
-
| furnace
|
|
78
|
-
| crucible | test, testing, qa
|
|
79
|
-
| sentinel | review, reviewer, cr | Code Reviewer
|
|
80
|
-
| scribe
|
|
81
|
-
| herald
|
|
82
|
-
| ember
|
|
83
|
-
| aegis
|
|
80
|
+
| Agent | Aliases | Role |
|
|
81
|
+
| -------- | -------------------- | ----------------- |
|
|
82
|
+
| anvil | frontend, ui, fe | Frontend Developer |
|
|
83
|
+
| furnace | backend, api, be | Backend Developer |
|
|
84
|
+
| crucible | test, testing, qa | Tester / QA |
|
|
85
|
+
| sentinel | review, reviewer, cr | Code Reviewer |
|
|
86
|
+
| scribe | docs, documentation | Documentation |
|
|
87
|
+
| herald | release, deploy | Release Manager |
|
|
88
|
+
| ember | devops, ops, infra | DevOps |
|
|
89
|
+
| aegis | security, sec, appsec | Security |
|
|
84
90
|
|
|
85
91
|
If `$2` is empty, show the table above and ask which agent to spawn.
|
|
86
92
|
|
|
87
93
|
If `$2` is provided, run:
|
|
88
94
|
|
|
89
95
|
```bash
|
|
90
|
-
./bin/forge-spawn.sh $2
|
|
96
|
+
./_vibe-forge/bin/forge-spawn.sh $2
|
|
91
97
|
```
|
|
92
98
|
|
|
93
99
|
Confirm the spawn. If an alias was used (e.g., "frontend"), mention the resolved name: "Spawning **Anvil** (frontend)..."
|
|
@@ -99,17 +105,20 @@ Confirm the spawn. If an alias was used (e.g., "frontend"), mention the resolved
|
|
|
99
105
|
**Task description:** `$2` `$3` `$4` (remaining arguments)
|
|
100
106
|
|
|
101
107
|
#### Task Template
|
|
102
|
-
|
|
108
|
+
|
|
109
|
+
@_vibe-forge/config/task-template.md
|
|
103
110
|
|
|
104
111
|
#### Existing Tasks
|
|
105
|
-
|
|
112
|
+
|
|
113
|
+
Use the Glob tool to list files in `_vibe-forge/tasks/pending/*.md`
|
|
106
114
|
|
|
107
115
|
If no description provided, ask:
|
|
116
|
+
|
|
108
117
|
- What needs to be done?
|
|
109
118
|
- Which agent? (anvil, furnace, crucible, sentinel, scribe, herald, ember, aegis)
|
|
110
119
|
- Priority? (high, medium, low)
|
|
111
120
|
|
|
112
|
-
Generate task ID as `task-XXX` (next sequential number), create file at `tasks/pending/task-XXX.md`.
|
|
121
|
+
Generate task ID as `task-XXX` (next sequential number), create file at `_vibe-forge/tasks/pending/task-XXX.md`.
|
|
113
122
|
|
|
114
123
|
---
|
|
115
124
|
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"permissions": {
|
|
3
3
|
"allow": [
|
|
4
|
-
"Bash(ls:*)"
|
|
4
|
+
"Bash(ls:*)",
|
|
5
|
+
"Bash(git pull:*)",
|
|
6
|
+
"Bash(npm view:*)",
|
|
7
|
+
"Bash(gh run list:*)",
|
|
8
|
+
"Bash(gh run view:*)",
|
|
9
|
+
"Bash(gh secret list:*)",
|
|
10
|
+
"Bash(git add:*)",
|
|
11
|
+
"Bash(git commit:*)",
|
|
12
|
+
"Bash(gh workflow run:*)",
|
|
13
|
+
"Bash(gh repo view:*)"
|
|
5
14
|
]
|
|
6
15
|
}
|
|
7
16
|
}
|
package/bin/forge-setup.sh
CHANGED
|
@@ -305,7 +305,36 @@ configure_daemon() {
|
|
|
305
305
|
}
|
|
306
306
|
|
|
307
307
|
# =============================================================================
|
|
308
|
-
# STEP 8:
|
|
308
|
+
# STEP 8: Install Slash Command
|
|
309
|
+
# =============================================================================
|
|
310
|
+
|
|
311
|
+
install_slash_command() {
|
|
312
|
+
echo ""
|
|
313
|
+
echo "Installing /forge slash command..."
|
|
314
|
+
|
|
315
|
+
# Parent project directory (one level up from _vibe-forge)
|
|
316
|
+
local parent_dir
|
|
317
|
+
parent_dir="$(dirname "$FORGE_ROOT")"
|
|
318
|
+
|
|
319
|
+
local target_dir="$parent_dir/.claude/commands"
|
|
320
|
+
local source_file="$FORGE_ROOT/.claude/commands/forge.md"
|
|
321
|
+
|
|
322
|
+
# Create .claude/commands in parent project if it doesn't exist
|
|
323
|
+
mkdir -p "$target_dir"
|
|
324
|
+
|
|
325
|
+
# Copy the forge command
|
|
326
|
+
if [[ -f "$source_file" ]]; then
|
|
327
|
+
cp "$source_file" "$target_dir/forge.md"
|
|
328
|
+
echo -e "${GREEN}✅ Slash command installed:${NC} $target_dir/forge.md"
|
|
329
|
+
echo " Use /forge in Claude Code to access Vibe Forge"
|
|
330
|
+
else
|
|
331
|
+
echo -e "${YELLOW}⚠️ Could not find forge command template${NC}"
|
|
332
|
+
echo " You may need to manually copy .claude/commands/forge.md"
|
|
333
|
+
fi
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
# =============================================================================
|
|
337
|
+
# STEP 9: Create Project Context
|
|
309
338
|
# =============================================================================
|
|
310
339
|
|
|
311
340
|
detect_project_info() {
|
|
@@ -414,7 +443,7 @@ EOF
|
|
|
414
443
|
}
|
|
415
444
|
|
|
416
445
|
# =============================================================================
|
|
417
|
-
# STEP
|
|
446
|
+
# STEP 10: Setup Complete
|
|
418
447
|
# =============================================================================
|
|
419
448
|
|
|
420
449
|
setup_complete() {
|
|
@@ -423,11 +452,12 @@ setup_complete() {
|
|
|
423
452
|
echo -e "${GREEN}🔥 Vibe Forge initialized!${NC}"
|
|
424
453
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
425
454
|
echo ""
|
|
426
|
-
echo "Ready to start!
|
|
455
|
+
echo "Ready to start! Open Claude Code in this project and run:"
|
|
427
456
|
echo ""
|
|
428
|
-
echo -e " ${BLUE}forge${NC} Start the Planning Hub"
|
|
429
|
-
echo -e " ${BLUE}forge status${NC}
|
|
430
|
-
echo -e " ${BLUE}forge
|
|
457
|
+
echo -e " ${BLUE}/forge${NC} Start the Planning Hub"
|
|
458
|
+
echo -e " ${BLUE}/forge status${NC} Show status dashboard"
|
|
459
|
+
echo -e " ${BLUE}/forge spawn anvil${NC} Spawn a worker agent"
|
|
460
|
+
echo -e " ${BLUE}/forge help${NC} See all commands"
|
|
431
461
|
echo ""
|
|
432
462
|
echo "Optional: Edit context/project-context.md to add more details."
|
|
433
463
|
echo ""
|
|
@@ -446,6 +476,7 @@ main() {
|
|
|
446
476
|
if validate_setup; then
|
|
447
477
|
configure_terminal
|
|
448
478
|
configure_daemon
|
|
479
|
+
install_slash_command
|
|
449
480
|
create_project_context
|
|
450
481
|
setup_complete
|
|
451
482
|
else
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# npm Publishing with OIDC Trusted Publishing
|
|
2
|
+
|
|
3
|
+
This document explains how Vibe Forge publishes to npm using GitHub Actions OIDC trusted publishing - no npm tokens required.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
npm's [trusted publishing](https://docs.npmjs.com/trusted-publishers/) uses OpenID Connect (OIDC) to authenticate GitHub Actions workflows directly with npm. This eliminates the need to store npm tokens as secrets.
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
|
|
11
|
+
1. **npm CLI v11.5.1+** - OIDC support was added in npm 11.5.1
|
|
12
|
+
2. **Public GitHub repository** - Provenance attestation only works with public repos
|
|
13
|
+
3. **Trusted Publisher configured on npmjs.com** - Links your package to your GitHub repo
|
|
14
|
+
|
|
15
|
+
## Setup
|
|
16
|
+
|
|
17
|
+
### 1. Configure Trusted Publisher on npm
|
|
18
|
+
|
|
19
|
+
1. Go to https://www.npmjs.com/package/vibe-forge/access
|
|
20
|
+
2. Under "Trusted Publishers", add a new publisher:
|
|
21
|
+
- **Publisher**: GitHub Actions
|
|
22
|
+
- **Organization/user**: SpasticPalate
|
|
23
|
+
- **Repository**: vibe-forge
|
|
24
|
+
- **Workflow filename**: publish.yml
|
|
25
|
+
- **Environment name**: (leave empty)
|
|
26
|
+
|
|
27
|
+
### 2. GitHub Actions Workflow
|
|
28
|
+
|
|
29
|
+
The workflow requires specific permissions and npm version:
|
|
30
|
+
|
|
31
|
+
```yaml
|
|
32
|
+
jobs:
|
|
33
|
+
publish:
|
|
34
|
+
runs-on: ubuntu-latest
|
|
35
|
+
permissions:
|
|
36
|
+
contents: read
|
|
37
|
+
id-token: write # Required for OIDC token generation
|
|
38
|
+
steps:
|
|
39
|
+
- uses: actions/checkout@v4
|
|
40
|
+
|
|
41
|
+
- uses: actions/setup-node@v4
|
|
42
|
+
with:
|
|
43
|
+
node-version: '22'
|
|
44
|
+
|
|
45
|
+
# npm 11.5.1+ required for OIDC
|
|
46
|
+
- run: npm install -g npm@latest
|
|
47
|
+
|
|
48
|
+
- run: npm publish --provenance --access public
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Key points:
|
|
52
|
+
- `id-token: write` permission enables OIDC token generation
|
|
53
|
+
- `--provenance` flag enables signed provenance attestation
|
|
54
|
+
- No `NODE_AUTH_TOKEN` or `NPM_TOKEN` needed
|
|
55
|
+
|
|
56
|
+
## Troubleshooting
|
|
57
|
+
|
|
58
|
+
### "Access token expired or revoked" with E404
|
|
59
|
+
|
|
60
|
+
**Cause**: npm CLI version is too old (< 11.5.1)
|
|
61
|
+
|
|
62
|
+
**Fix**: Add `npm install -g npm@latest` before publishing
|
|
63
|
+
|
|
64
|
+
### "Unsupported GitHub Actions source repository visibility: private"
|
|
65
|
+
|
|
66
|
+
**Cause**: Provenance attestation only works with public repositories
|
|
67
|
+
|
|
68
|
+
**Fix**: Either make the repo public, or remove `--provenance` and use a granular npm token instead
|
|
69
|
+
|
|
70
|
+
### "ENEEDAUTH - need auth"
|
|
71
|
+
|
|
72
|
+
**Cause**: OIDC token not being generated/used
|
|
73
|
+
|
|
74
|
+
**Fix**: Ensure `id-token: write` permission is set on the job
|
|
75
|
+
|
|
76
|
+
### 404 on publish despite correct setup
|
|
77
|
+
|
|
78
|
+
**Cause**: Trusted Publisher configuration doesn't match workflow
|
|
79
|
+
|
|
80
|
+
**Fix**: Verify on npmjs.com that:
|
|
81
|
+
- Organization/user matches exactly (case-sensitive)
|
|
82
|
+
- Repository name matches exactly
|
|
83
|
+
- Workflow filename matches exactly (e.g., `publish.yml`)
|
|
84
|
+
|
|
85
|
+
## Benefits
|
|
86
|
+
|
|
87
|
+
- **No secrets to manage** - No npm tokens to rotate or accidentally expose
|
|
88
|
+
- **Provenance attestation** - Packages are cryptographically signed with build info
|
|
89
|
+
- **Audit trail** - Provenance is published to Sigstore transparency log
|
|
90
|
+
|
|
91
|
+
## References
|
|
92
|
+
|
|
93
|
+
- [npm Trusted Publishers](https://docs.npmjs.com/trusted-publishers/)
|
|
94
|
+
- [npm Provenance](https://docs.npmjs.com/generating-provenance-statements/)
|
|
95
|
+
- [GitHub: npm trusted publishing GA](https://github.blog/changelog/2025-07-31-npm-trusted-publishing-with-oidc-is-generally-available/)
|