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.
@@ -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
  }
@@ -305,7 +305,36 @@ configure_daemon() {
305
305
  }
306
306
 
307
307
  # =============================================================================
308
- # STEP 8: Create Project Context
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 9: Setup Complete
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! Run:"
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} Check forge status"
430
- echo -e " ${BLUE}forge help${NC} See all commands"
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/)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibe-forge",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Multi-agent development orchestration system for terminal-native vibe coding",
5
5
  "keywords": [
6
6
  "vibe-coding",