vibe-forge 0.2.1 → 0.3.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/.claude/commands/forge.md +16 -16
- 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,23 +18,23 @@ 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
|
-
@agents/planning-hub/personality.md
|
|
21
|
+
@_vibe-forge/agents/planning-hub/personality.md
|
|
22
22
|
|
|
23
23
|
#### Project Context
|
|
24
24
|
@context/project-context.md
|
|
25
25
|
|
|
26
26
|
#### Current Forge State
|
|
27
|
-
@context/forge-state.yaml
|
|
27
|
+
@_vibe-forge/context/forge-state.yaml
|
|
28
28
|
|
|
29
29
|
#### Task Overview
|
|
30
30
|
Pending tasks:
|
|
31
|
-
!`ls tasks/pending/ 2>/dev/null || echo "None"`
|
|
31
|
+
!`ls _vibe-forge/tasks/pending/ 2>/dev/null || echo "None"`
|
|
32
32
|
|
|
33
33
|
In-progress tasks:
|
|
34
|
-
!`ls tasks/in-progress/ 2>/dev/null || echo "None"`
|
|
34
|
+
!`ls _vibe-forge/tasks/in-progress/ 2>/dev/null || echo "None"`
|
|
35
35
|
|
|
36
36
|
Tasks needing changes:
|
|
37
|
-
!`ls tasks/needs-changes/ 2>/dev/null || echo "None"`
|
|
37
|
+
!`ls _vibe-forge/tasks/needs-changes/ 2>/dev/null || echo "None"`
|
|
38
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
40
|
|
|
@@ -45,15 +45,15 @@ Tasks needing changes:
|
|
|
45
45
|
Display a formatted status dashboard:
|
|
46
46
|
|
|
47
47
|
#### Forge State
|
|
48
|
-
@context/forge-state.yaml
|
|
48
|
+
@_vibe-forge/context/forge-state.yaml
|
|
49
49
|
|
|
50
50
|
#### Task Counts
|
|
51
|
-
!`echo "Pending: $(ls tasks/pending/*.md 2>/dev/null | wc -l || echo 0)"`
|
|
52
|
-
!`echo "In Progress: $(ls tasks/in-progress/*.md 2>/dev/null | wc -l || echo 0)"`
|
|
53
|
-
!`echo "Completed: $(ls tasks/completed/*.md 2>/dev/null | wc -l || echo 0)"`
|
|
54
|
-
!`echo "In Review: $(ls tasks/review/*.md 2>/dev/null | wc -l || echo 0)"`
|
|
55
|
-
!`echo "Needs Changes: $(ls tasks/needs-changes/*.md 2>/dev/null | wc -l || echo 0)"`
|
|
56
|
-
!`echo "Approved: $(ls tasks/approved/*.md 2>/dev/null | wc -l || echo 0)"`
|
|
51
|
+
!`echo "Pending: $(ls _vibe-forge/tasks/pending/*.md 2>/dev/null | wc -l || echo 0)"`
|
|
52
|
+
!`echo "In Progress: $(ls _vibe-forge/tasks/in-progress/*.md 2>/dev/null | wc -l || echo 0)"`
|
|
53
|
+
!`echo "Completed: $(ls _vibe-forge/tasks/completed/*.md 2>/dev/null | wc -l || echo 0)"`
|
|
54
|
+
!`echo "In Review: $(ls _vibe-forge/tasks/review/*.md 2>/dev/null | wc -l || echo 0)"`
|
|
55
|
+
!`echo "Needs Changes: $(ls _vibe-forge/tasks/needs-changes/*.md 2>/dev/null | wc -l || echo 0)"`
|
|
56
|
+
!`echo "Approved: $(ls _vibe-forge/tasks/approved/*.md 2>/dev/null | wc -l || echo 0)"`
|
|
57
57
|
|
|
58
58
|
Format output like:
|
|
59
59
|
```
|
|
@@ -87,7 +87,7 @@ If `$2` is empty, show the table above and ask which agent to spawn.
|
|
|
87
87
|
If `$2` is provided, run:
|
|
88
88
|
|
|
89
89
|
```bash
|
|
90
|
-
./bin/forge-spawn.sh $2
|
|
90
|
+
./_vibe-forge/bin/forge-spawn.sh $2
|
|
91
91
|
```
|
|
92
92
|
|
|
93
93
|
Confirm the spawn. If an alias was used (e.g., "frontend"), mention the resolved name: "Spawning **Anvil** (frontend)..."
|
|
@@ -99,17 +99,17 @@ Confirm the spawn. If an alias was used (e.g., "frontend"), mention the resolved
|
|
|
99
99
|
**Task description:** `$2` `$3` `$4` (remaining arguments)
|
|
100
100
|
|
|
101
101
|
#### Task Template
|
|
102
|
-
@config/task-template.md
|
|
102
|
+
@_vibe-forge/config/task-template.md
|
|
103
103
|
|
|
104
104
|
#### Existing Tasks
|
|
105
|
-
!`ls tasks/pending/ 2>/dev/null || echo "None pending"`
|
|
105
|
+
!`ls _vibe-forge/tasks/pending/ 2>/dev/null || echo "None pending"`
|
|
106
106
|
|
|
107
107
|
If no description provided, ask:
|
|
108
108
|
- What needs to be done?
|
|
109
109
|
- Which agent? (anvil, furnace, crucible, sentinel, scribe, herald, ember, aegis)
|
|
110
110
|
- Priority? (high, medium, low)
|
|
111
111
|
|
|
112
|
-
Generate task ID as `task-XXX` (next sequential number), create file at `tasks/pending/task-XXX.md`.
|
|
112
|
+
Generate task ID as `task-XXX` (next sequential number), create file at `_vibe-forge/tasks/pending/task-XXX.md`.
|
|
113
113
|
|
|
114
114
|
---
|
|
115
115
|
|
|
@@ -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/)
|