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.
- package/.claude/commands/clear-attention.md +63 -63
- package/.claude/commands/compact-context.md +52 -0
- package/.claude/commands/configure-vcs.md +102 -0
- package/.claude/commands/forge.md +218 -171
- package/.claude/commands/need-help.md +77 -77
- package/.claude/commands/update-status.md +64 -64
- package/.claude/commands/worker-loop.md +106 -106
- package/.claude/hooks/worker-loop.js +217 -0
- package/.claude/scripts/setup-worker-loop.sh +45 -45
- package/.claude/settings.json +89 -0
- package/LICENSE +21 -21
- package/README.md +253 -230
- package/agents/aegis/personality.md +303 -269
- package/agents/anvil/personality.md +278 -211
- package/agents/architect/personality.md +260 -0
- package/agents/crucible/personality.md +362 -285
- package/agents/crucible-x/personality.md +210 -0
- package/agents/ember/personality.md +293 -245
- package/agents/flux/personality.md +248 -0
- package/agents/furnace/personality.md +342 -262
- package/agents/herald/personality.md +249 -247
- package/agents/loki/personality.md +108 -0
- package/agents/oracle/personality.md +284 -0
- package/agents/pixel/personality.md +140 -0
- package/agents/planning-hub/personality.md +473 -251
- package/agents/scribe/personality.md +253 -231
- package/agents/slag/personality.md +268 -0
- package/agents/temper/personality.md +270 -0
- package/bin/cli.js +372 -325
- package/bin/dashboard/api/agents.js +333 -0
- package/bin/dashboard/api/dispatch.js +507 -0
- package/bin/dashboard/api/tasks.js +416 -0
- package/bin/dashboard/public/assets/index-BpHfsx1r.js +2 -0
- package/bin/dashboard/public/assets/index-QODv4Zn9.css +1 -0
- package/bin/dashboard/public/index.html +14 -0
- package/bin/dashboard/server.js +645 -0
- package/bin/forge-daemon.sh +477 -775
- package/bin/forge-setup.sh +661 -532
- package/bin/forge-spawn.sh +164 -159
- package/bin/forge.cmd +83 -83
- package/bin/forge.sh +566 -393
- package/bin/lib/agents.sh +177 -177
- package/bin/lib/check-aliases.js +50 -0
- package/bin/lib/colors.sh +44 -44
- package/bin/lib/config.sh +347 -271
- package/bin/lib/constants.sh +241 -171
- package/bin/lib/daemon/budgets.sh +107 -0
- package/bin/lib/daemon/dependencies.sh +146 -0
- package/bin/lib/daemon/display.sh +128 -0
- package/bin/lib/daemon/notifications.sh +273 -0
- package/bin/lib/daemon/routing.sh +93 -0
- package/bin/lib/daemon/state.sh +163 -0
- package/bin/lib/daemon/sync.sh +103 -0
- package/bin/lib/database.sh +357 -224
- package/bin/lib/frontmatter.js +106 -0
- package/bin/lib/heimdall-setup.js +113 -0
- package/bin/lib/heimdall.js +265 -0
- package/bin/lib/json.sh +264 -0
- package/bin/lib/terminal.js +452 -0
- package/bin/lib/util.sh +126 -0
- package/bin/lib/vcs.js +349 -0
- package/config/agent-manifest.yaml +237 -230
- package/config/agents.json +207 -85
- package/config/task-template.md +159 -87
- package/config/task-types.yaml +111 -106
- package/config/templates/handoff-template.md +40 -0
- package/context/agent-overrides/README.md +41 -0
- package/context/architecture.md +42 -0
- package/context/modern-conventions.md +129 -129
- package/context/project-context-template.md +122 -122
- package/docs/agents.md +473 -0
- package/docs/architecture.md +194 -0
- package/docs/commands.md +451 -0
- package/docs/security.md +195 -144
- package/package.json +77 -48
- package/.claude/hooks/worker-loop.sh +0 -141
- package/.claude/settings.local.json +0 -29
- package/agents/forge-master/capabilities.md +0 -144
- package/agents/forge-master/context-template.md +0 -128
- package/agents/forge-master/personality.md +0 -138
- package/agents/sentinel/personality.md +0 -194
- package/context/forge-state.yaml +0 -19
- package/docs/TODO.md +0 -176
- package/docs/npm-publishing.md +0 -95
- 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)
|
package/docs/npm-publishing.md
DELETED
|
@@ -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/)
|
package/tasks/review/task-001.md
DELETED
|
@@ -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
|
-
```
|