vibe-forge 0.3.12 → 0.8.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.
Files changed (85) hide show
  1. package/.claude/commands/clear-attention.md +63 -63
  2. package/.claude/commands/compact-context.md +52 -0
  3. package/.claude/commands/configure-vcs.md +102 -0
  4. package/.claude/commands/forge.md +218 -171
  5. package/.claude/commands/need-help.md +77 -77
  6. package/.claude/commands/update-status.md +64 -64
  7. package/.claude/commands/worker-loop.md +106 -106
  8. package/.claude/hooks/worker-loop.js +217 -0
  9. package/.claude/scripts/setup-worker-loop.sh +45 -45
  10. package/.claude/settings.json +89 -0
  11. package/LICENSE +21 -21
  12. package/README.md +253 -230
  13. package/agents/aegis/personality.md +303 -269
  14. package/agents/anvil/personality.md +278 -211
  15. package/agents/architect/personality.md +260 -0
  16. package/agents/crucible/personality.md +362 -285
  17. package/agents/crucible-x/personality.md +210 -0
  18. package/agents/ember/personality.md +293 -245
  19. package/agents/flux/personality.md +248 -0
  20. package/agents/furnace/personality.md +342 -262
  21. package/agents/herald/personality.md +249 -247
  22. package/agents/loki/personality.md +108 -0
  23. package/agents/oracle/personality.md +284 -0
  24. package/agents/pixel/personality.md +140 -0
  25. package/agents/planning-hub/personality.md +473 -251
  26. package/agents/scribe/personality.md +253 -231
  27. package/agents/slag/personality.md +268 -0
  28. package/agents/temper/personality.md +270 -0
  29. package/bin/cli.js +372 -325
  30. package/bin/dashboard/api/agents.js +333 -0
  31. package/bin/dashboard/api/dispatch.js +507 -0
  32. package/bin/dashboard/api/tasks.js +416 -0
  33. package/bin/dashboard/public/assets/index-BpHfsx1r.js +2 -0
  34. package/bin/dashboard/public/assets/index-QODv4Zn9.css +1 -0
  35. package/bin/dashboard/public/index.html +14 -0
  36. package/bin/dashboard/server.js +645 -0
  37. package/bin/forge-daemon.sh +477 -775
  38. package/bin/forge-setup.sh +661 -532
  39. package/bin/forge-spawn.sh +164 -159
  40. package/bin/forge.cmd +83 -83
  41. package/bin/forge.sh +566 -393
  42. package/bin/lib/agents.sh +177 -177
  43. package/bin/lib/check-aliases.js +50 -0
  44. package/bin/lib/colors.sh +44 -44
  45. package/bin/lib/config.sh +347 -271
  46. package/bin/lib/constants.sh +241 -171
  47. package/bin/lib/daemon/budgets.sh +107 -0
  48. package/bin/lib/daemon/dependencies.sh +146 -0
  49. package/bin/lib/daemon/display.sh +128 -0
  50. package/bin/lib/daemon/notifications.sh +273 -0
  51. package/bin/lib/daemon/routing.sh +93 -0
  52. package/bin/lib/daemon/state.sh +163 -0
  53. package/bin/lib/daemon/sync.sh +103 -0
  54. package/bin/lib/database.sh +357 -224
  55. package/bin/lib/frontmatter.js +106 -0
  56. package/bin/lib/heimdall-setup.js +113 -0
  57. package/bin/lib/heimdall.js +265 -0
  58. package/bin/lib/json.sh +264 -0
  59. package/bin/lib/terminal.js +452 -0
  60. package/bin/lib/util.sh +126 -0
  61. package/bin/lib/vcs.js +349 -0
  62. package/config/agent-manifest.yaml +237 -230
  63. package/config/agents.json +207 -85
  64. package/config/task-template.md +159 -87
  65. package/config/task-types.yaml +111 -106
  66. package/config/templates/handoff-template.md +40 -0
  67. package/context/agent-overrides/README.md +41 -0
  68. package/context/architecture.md +42 -0
  69. package/context/modern-conventions.md +129 -129
  70. package/context/project-context-template.md +122 -122
  71. package/docs/agents.md +473 -0
  72. package/docs/architecture.md +194 -0
  73. package/docs/commands.md +451 -0
  74. package/docs/security.md +195 -144
  75. package/package.json +77 -48
  76. package/.claude/hooks/worker-loop.sh +0 -141
  77. package/.claude/settings.local.json +0 -29
  78. package/agents/forge-master/capabilities.md +0 -144
  79. package/agents/forge-master/context-template.md +0 -128
  80. package/agents/forge-master/personality.md +0 -138
  81. package/agents/sentinel/personality.md +0 -194
  82. package/context/forge-state.yaml +0 -19
  83. package/docs/TODO.md +0 -176
  84. package/docs/npm-publishing.md +0 -95
  85. package/tasks/review/task-001.md +0 -78
package/docs/TODO.md DELETED
@@ -1,176 +0,0 @@
1
- # Vibe Forge - Future Improvements
2
-
3
- This document tracks issues identified during code reviews that are deferred for future sessions.
4
-
5
- ## Security (From Aegis Review - Round 2)
6
-
7
- ### Medium Priority
8
-
9
- - **M-1: eval() of external data in load_agents_from_json()**
10
- - File: `bin/lib/config.sh` line 95
11
- - Issue: If agents.json is compromised, malicious agent names could execute shell commands via `eval "$agent_data"`
12
- - Fix: Add input validation in Node.js script to reject agent names containing shell metacharacters
13
-
14
- ### Low Priority
15
-
16
- - **L-1: Windows Terminal command escaping**
17
- - File: `bin/forge-spawn.sh` lines 55-57
18
- - Issue: `$display_name` and `$FORGE_ROOT` not escaped for nested shell invocation
19
- - Fix: Use `printf %q` for proper escaping
20
-
21
- - ~~**L-2: Terminal escape sequences in task parsing**~~ ✅ Fixed in 0.3.7
22
- - File: `bin/forge-daemon.sh` lines 147-149
23
- - Issue: ANSI escape sequences in task files could affect terminal
24
- - Fix: Added `| tr -d '\033' | sed 's/\[[0-9;]*m//g'` to strip escape sequences
25
-
26
- - ~~**L-3: Workflow version injection**~~ ✅ Fixed in 0.3.7
27
- - File: `.github/workflows/publish.yml` lines 32-33
28
- - Issue: Version input not validated before use in npm command
29
- - Fix: Added semver regex validation step
30
-
31
- ## Architecture (From Sage Review - Round 2)
32
-
33
- ### P1 Priority
34
-
35
- - **sed -i incompatibility in forge-setup.sh**
36
- - Lines: 205, 249, 291, 380, 381, 384, 388
37
- - Issue: macOS/BSD sed requires `sed -i ''` but script uses `sed -i`
38
- - Fix: Add platform detection or create `sed_inplace()` helper
39
-
40
- - ~~**Silent error suppression for JSON loading**~~ ✅ Fixed in 0.3.7
41
- - Files: `bin/forge.sh` line 44, `bin/forge-spawn.sh` line 34
42
- - Issue: `2>/dev/null || true` silently ignores JSON parsing errors
43
- - Fix: Now logs warning when fallback is used
44
-
45
- - **Inconsistent exit codes**
46
- - Issue: All errors exit with code 1, no differentiation
47
- - Fix: Define exit code constants in `constants.sh`
48
-
49
- ### P2 Priority
50
-
51
- - ~~**Hardcoded agent list in cmd_help()**~~ ✅ Fixed in 0.3.7
52
- - File: `bin/forge.sh` lines 253-260
53
- - Fix: Now uses `show_available_agents()` dynamically
54
-
55
- - **Raw echo -e instead of log_* functions**
56
- - File: `bin/forge-setup.sh` (multiple lines)
57
- - Fix: Replace with appropriate `log_*` calls
58
-
59
- - ~~**Duplicate color definitions in cli.js**~~ ✅ Fixed in 0.3.7
60
- - File: `bin/cli.js` lines 24-31
61
- - Fix: Documented as intentional (cli.js runs standalone via npx)
62
-
63
- ## Testing (From Crucible Review - Round 2)
64
-
65
- ### Low Priority Gaps
66
-
67
- - `show_available_agents()` not tested
68
- - `setup_windows_env()` not tested (hard to test in CI)
69
- - `colors.sh` log functions not tested (display-only)
70
- - CLI `init`/`update` commands not tested (side effects)
71
-
72
- ## UX Improvements
73
-
74
- ### Consider Re-adding
75
-
76
- - **Auto status on /forge startup**
77
- - Removed in 0.3.6 to reduce 45s→~15s startup time
78
- - Could re-add if startup is fast enough after optimization
79
- - Alternative: Add "show status on startup" config option
80
-
81
- ### Shell Tests
82
-
83
- - BATS tests disabled in CI due to bash associative array limitations
84
- - Need to refactor tests to avoid `declare -A` in subshell contexts
85
-
86
- ## Feature Ideas
87
-
88
- ### Worker Loop (Ralph-style Persistent Workers) - Added in 0.3.9
89
-
90
- Implemented in `.claude/hooks/worker-loop.sh` and `.claude/commands/worker-loop.md`.
91
-
92
- Workers can now run in persistent loop mode:
93
-
94
- - `/worker-loop anvil` - Start Anvil in persistent mode
95
- - Worker checks for tasks, works on them, loops back
96
- - Only exits after N idle checks with no tasks found
97
- - Based on the Ralph Loop technique from Anthropic's plugins
98
-
99
- ### LSP/Tooling Selection During Init
100
-
101
- - Add multi-select during `vibe-forge init` for tech stack
102
- - Options could include:
103
- - **Languages:** TypeScript, Python, Rust, Go, Java, C#
104
- - **Frameworks:** React, Vue, Next.js, FastAPI, Django, Express
105
- - **Infrastructure:** Docker, Kubernetes, Terraform, AWS, GCP
106
- - **Databases:** PostgreSQL, MongoDB, Redis, SQLite
107
- - Generate customized `context/project-stack.md` based on selections
108
- - Include relevant LSP configs, linter recommendations, modern conventions
109
- - Auto-detect from existing files (package.json, pyproject.toml, Cargo.toml, etc.)
110
- - Store selections in `.forge/config.json` for future reference
111
-
112
- ---
113
-
114
- ## V2 Architecture (Major Refactor)
115
-
116
- ### Problem
117
-
118
- Current design clones the entire vibe-forge repo into each project as `_vibe-forge/`. This has issues:
119
-
120
- - Commits 50+ tool files into user's repo that aren't their code
121
- - Updates are awkward (re-run init? git pull?)
122
- - Pollutes git history with tool internals
123
- - Merge conflicts when updating
124
-
125
- ### Proposed Solution: Tool vs Data Separation
126
-
127
- **Tool** (from npm, NOT committed):
128
-
129
- ```text
130
- npx vibe-forge ... # Runs from npm cache
131
- ~/.vibe-forge/ # Or global install location
132
- ├── bin/ # Scripts
133
- ├── agents/ # Agent personalities
134
- └── config/ # Default configs
135
- ```
136
-
137
- **Project Data** (committed, project-specific):
138
-
139
- ```text
140
- your-project/
141
- ├── .forge/ # Local config (gitignored)
142
- │ ├── config.json # Terminal type, paths, preferences
143
- │ └── state.yaml # Current session state
144
- └── .vibe-forge/ # Project data (committed)
145
- ├── tasks/ # Task files
146
- │ ├── pending/
147
- │ ├── in-progress/
148
- │ └── completed/
149
- ├── context/ # Project context
150
- │ └── project-context.md
151
- └── overrides/ # Optional: project-specific agent tweaks
152
- └── agents.json # Override default agent config
153
- ```
154
-
155
- ### Benefits
156
-
157
- 1. **Clean git history** - Only project data committed, not tool code
158
- 2. **Easy updates** - `npm update -g vibe-forge` or `npx vibe-forge@latest`
159
- 3. **Single source of truth** - Tool version consistent across projects
160
- 4. **Smaller footprint** - ~10 files vs 50+
161
- 5. **No vendoring** - Don't commit dependencies into your repo
162
-
163
- ### Migration Path
164
-
165
- 1. **v0.4.x (current)**: Add `.gitignore` entries for tool internals (stopgap)
166
- 2. **v1.0**: Refactor to proper tool/data separation
167
- - Tool runs from npm package directly
168
- - Only `.vibe-forge/` folder in project
169
- - Backward compat: detect old `_vibe-forge/` and migrate
170
-
171
- ### Implementation Notes
172
-
173
- - `npx vibe-forge` already works - just need to make scripts runnable from npm location
174
- - Agent personalities loaded from npm package by default, with project overrides
175
- - Tasks/context remain project-local
176
- - `.forge/config.json` stays gitignored (machine-specific)
@@ -1,95 +0,0 @@
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/)
@@ -1,78 +0,0 @@
1
- ---
2
- id: task-001
3
- title: "Create hello utility function"
4
- type: backend
5
- priority: low
6
- status: completed
7
- assigned_to: furnace
8
- blocked_by: []
9
- depends_on: []
10
- created: 2025-01-11T12:00:00Z
11
- updated: 2025-01-11T12:00:00Z
12
- estimated_complexity: trivial
13
- epic: forge-test
14
- story: null
15
- ---
16
-
17
- # Context
18
-
19
- ## Parent Epic
20
- This is a test task to validate the Vibe Forge multi-agent workflow.
21
-
22
- ## Relevant Files
23
- - /src/utils/hello.ts (create: new utility file)
24
-
25
- ## Dependencies
26
- None - this is an independent test task.
27
-
28
- ## Background
29
- We're testing the Forge system. Create a simple utility function that Furnace can implement quickly to prove the workflow works.
30
-
31
- ---
32
-
33
- # Acceptance Criteria
34
-
35
- - [x] Create `/src/utils/hello.ts` with a `greet(name: string)` function
36
- - [x] Function should return `"Hello, {name}! The Forge is working."`
37
- - [x] Export the function properly
38
-
39
- ---
40
-
41
- # Agent Instructions
42
-
43
- **Furnace**: Create a simple TypeScript utility function. This is a test task - keep it minimal.
44
-
45
- **Boundaries:**
46
- - DO modify: `/src/utils/`
47
- - DO NOT modify: anything else
48
-
49
- **On Completion:**
50
- 1. Ensure all acceptance criteria checked
51
- 2. Move this file to `/tasks/completed/`
52
- 3. Include completion summary below
53
-
54
- ---
55
-
56
- # Output Expected
57
-
58
- - [x] File created: `/src/utils/hello.ts`
59
- - [x] Function exported and working
60
- - [x] Completion summary written
61
-
62
- ---
63
-
64
- # Completion Summary
65
-
66
- ```yaml
67
- completed_by: furnace
68
- completed_at: 2025-01-11T12:05:00Z
69
- duration_minutes: 2
70
- files_modified: []
71
- files_created:
72
- - /src/utils/hello.ts
73
- tests_added: 0
74
- tests_passing: 0
75
- notes: "Trivial test task. Created greet() utility with proper TypeScript typing and export."
76
- blockers_encountered: []
77
- ready_for_review: true
78
- ```