@sugar-crash-studios/vibe-forge 0.4.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/clear-attention.md +63 -0
- package/.claude/commands/compact-context.md +52 -0
- package/.claude/commands/configure-vcs.md +102 -0
- package/.claude/commands/forge.md +171 -0
- package/.claude/commands/need-help.md +77 -0
- package/.claude/commands/update-status.md +64 -0
- package/.claude/commands/worker-loop.md +106 -0
- package/.claude/hooks/worker-loop.js +198 -0
- package/.claude/scripts/setup-worker-loop.sh +45 -0
- package/.claude/settings.local.json +46 -0
- package/LICENSE +21 -0
- package/README.md +238 -0
- package/agents/aegis/personality.md +294 -0
- package/agents/anvil/personality.md +276 -0
- package/agents/architect/personality.md +258 -0
- package/agents/crucible/personality.md +360 -0
- package/agents/ember/personality.md +291 -0
- package/agents/forge-master/capabilities.md +144 -0
- package/agents/forge-master/context-template.md +128 -0
- package/agents/forge-master/personality.md +138 -0
- package/agents/furnace/personality.md +340 -0
- package/agents/herald/personality.md +247 -0
- package/agents/loki/personality.md +108 -0
- package/agents/oracle/personality.md +283 -0
- package/agents/pixel/personality.md +113 -0
- package/agents/planning-hub/personality.md +320 -0
- package/agents/scribe/personality.md +251 -0
- package/agents/temper/personality.md +218 -0
- package/bin/cli.js +375 -0
- package/bin/dashboard/api/agents.js +333 -0
- package/bin/dashboard/api/dispatch.js +483 -0
- package/bin/dashboard/api/tasks.js +416 -0
- package/bin/dashboard/frontend/index.html +13 -0
- package/bin/dashboard/frontend/package.json +16 -0
- package/bin/dashboard/frontend/src/App.svelte +222 -0
- package/bin/dashboard/frontend/src/app.css +1777 -0
- package/bin/dashboard/frontend/src/lib/components/AgentCard.svelte +60 -0
- package/bin/dashboard/frontend/src/lib/components/AgentsPanel.svelte +57 -0
- package/bin/dashboard/frontend/src/lib/components/DispatchModal.svelte +180 -0
- package/bin/dashboard/frontend/src/lib/components/Footer.svelte +33 -0
- package/bin/dashboard/frontend/src/lib/components/Header.svelte +84 -0
- package/bin/dashboard/frontend/src/lib/components/IssueCard.svelte +33 -0
- package/bin/dashboard/frontend/src/lib/components/IssuesPanel.svelte +73 -0
- package/bin/dashboard/frontend/src/lib/components/KeyboardShortcutsModal.svelte +108 -0
- package/bin/dashboard/frontend/src/lib/components/MobileTabs.svelte +52 -0
- package/bin/dashboard/frontend/src/lib/components/NotificationCard.svelte +60 -0
- package/bin/dashboard/frontend/src/lib/components/NotificationsPanel.svelte +44 -0
- package/bin/dashboard/frontend/src/lib/components/TaskCard.svelte +63 -0
- package/bin/dashboard/frontend/src/lib/components/TasksPanel.svelte +82 -0
- package/bin/dashboard/frontend/src/lib/components/Toast.svelte +45 -0
- package/bin/dashboard/frontend/src/lib/stores/agents.js +34 -0
- package/bin/dashboard/frontend/src/lib/stores/issues.js +54 -0
- package/bin/dashboard/frontend/src/lib/stores/notifications.js +48 -0
- package/bin/dashboard/frontend/src/lib/stores/tasks.js +63 -0
- package/bin/dashboard/frontend/src/lib/stores/theme.js +33 -0
- package/bin/dashboard/frontend/src/lib/stores/toast.js +35 -0
- package/bin/dashboard/frontend/src/lib/stores/ui.js +25 -0
- package/bin/dashboard/frontend/src/lib/stores/voice.js +275 -0
- package/bin/dashboard/frontend/src/lib/stores/websocket.js +295 -0
- package/bin/dashboard/frontend/src/lib/utils/api.js +101 -0
- package/bin/dashboard/frontend/src/lib/utils/formatters.js +54 -0
- package/bin/dashboard/frontend/src/main.js +9 -0
- package/bin/dashboard/frontend/svelte.config.js +5 -0
- package/bin/dashboard/frontend/vite.config.js +20 -0
- package/bin/dashboard/public/assets/index-DnfVj9Ce.css +1 -0
- package/bin/dashboard/public/assets/index-Ze5h0kXQ.js +2 -0
- package/bin/dashboard/public/index.html +14 -0
- package/bin/dashboard/server.js +566 -0
- package/bin/forge-daemon.sh +463 -0
- package/bin/forge-setup.sh +645 -0
- package/bin/forge-spawn.sh +164 -0
- package/bin/forge.cmd +83 -0
- package/bin/forge.sh +533 -0
- package/bin/lib/agents.sh +177 -0
- package/bin/lib/colors.sh +44 -0
- package/bin/lib/config.sh +347 -0
- package/bin/lib/constants.sh +241 -0
- package/bin/lib/daemon/display.sh +128 -0
- package/bin/lib/daemon/notifications.sh +263 -0
- package/bin/lib/daemon/routing.sh +77 -0
- package/bin/lib/daemon/state.sh +115 -0
- package/bin/lib/daemon/sync.sh +95 -0
- package/bin/lib/database.sh +310 -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 +451 -0
- package/bin/lib/util.sh +126 -0
- package/bin/lib/vcs.js +349 -0
- package/config/agent-manifest.yaml +203 -0
- package/config/agents.json +168 -0
- package/config/task-template.md +159 -0
- package/config/task-types.yaml +106 -0
- package/context/agent-status/aegis.json +7 -0
- package/context/agent-status/anvil.json +7 -0
- package/context/agent-status/architect.json +7 -0
- package/context/agent-status/crucible.json +7 -0
- package/context/agent-status/ember.json +7 -0
- package/context/agent-status/furnace.json +7 -0
- package/context/agent-status/loki.json +7 -0
- package/context/agent-status/oracle.json +7 -0
- package/context/agent-status/pixel.json +7 -0
- package/context/agent-status/planning-hub.json +7 -0
- package/context/agent-status/scribe.json +7 -0
- package/context/agent-status/temper.json +7 -0
- package/context/feature-brainstorm.md +426 -0
- package/context/forge-state.yaml +19 -0
- package/context/modern-conventions.md +129 -0
- package/context/project-context-template.md +122 -0
- package/context/project-context.md +122 -0
- package/docs/TODO.md +150 -0
- package/docs/agents.md +409 -0
- package/docs/architecture/decisions/ADR-001-daemon-modularization.md +122 -0
- package/docs/architecture/vibe-lab-integration.md +684 -0
- package/docs/architecture.md +194 -0
- package/docs/bmad-gap-analysis-2026-03-31.md +444 -0
- package/docs/cleanup-workflow.md +329 -0
- package/docs/commands.md +451 -0
- package/docs/dashboard-mockup.html +989 -0
- package/docs/getting-started.md +261 -0
- package/docs/integration/forge-ownership-policy.md +112 -0
- package/docs/npm-publishing.md +132 -0
- package/docs/roadmap-2026.md +519 -0
- package/docs/security.md +144 -0
- package/docs/wireframes/dashboard-mvp.md +1164 -0
- package/docs/workflows/README.md +32 -0
- package/docs/workflows/azure-devops.md +108 -0
- package/docs/workflows/bitbucket.md +104 -0
- package/docs/workflows/git-only.md +130 -0
- package/docs/workflows/gitea.md +168 -0
- package/docs/workflows/github.md +103 -0
- package/docs/workflows/gitlab.md +105 -0
- package/docs/workflows.md +454 -0
- package/package.json +73 -0
- package/tasks/completed/ARCH-001-duplicate-agent-config.md +121 -0
- package/tasks/completed/ARCH-002-mixed-bash-node-implementation.md +88 -0
- package/tasks/completed/ARCH-003-worker-loop-hook-duplication.md +77 -0
- package/tasks/completed/ARCH-009-test-organization.md +78 -0
- package/tasks/completed/ARCH-011-jq-vs-nodejs-json.md +94 -0
- package/tasks/completed/ARCH-012-tmp-files-in-root.md +71 -0
- package/tasks/completed/ARCH-013-exit-code-constants.md +65 -0
- package/tasks/completed/ARCH-014-sed-incompatibility.md +96 -0
- package/tasks/completed/ARCH-015-docs-todo-tracking.md +83 -0
- package/tasks/completed/BUG-dash-001-tasks-filter-error.md +31 -0
- package/tasks/completed/BUG-dash-002-agents-unknown.md +41 -0
- package/tasks/completed/CLEAN-001.md +38 -0
- package/tasks/completed/CLEAN-002.md +43 -0
- package/tasks/completed/CLEAN-003.md +47 -0
- package/tasks/completed/CLEAN-004.md +56 -0
- package/tasks/completed/CLEAN-005.md +75 -0
- package/tasks/completed/CLEAN-006.md +47 -0
- package/tasks/completed/CLEAN-007.md +34 -0
- package/tasks/completed/CLEAN-008.md +49 -0
- package/tasks/completed/CLEAN-012.md +58 -0
- package/tasks/completed/CLEAN-013.md +45 -0
- package/tasks/completed/FEATURE-001a-dashboard-wireframes.md +162 -0
- package/tasks/completed/IMPL-007a-daemon-notifications-module.md +82 -0
- package/tasks/completed/IMPL-007b-daemon-sync-module.md +71 -0
- package/tasks/completed/IMPL-007c-daemon-state-module.md +80 -0
- package/tasks/completed/IMPL-007d-daemon-routing-module.md +77 -0
- package/tasks/completed/IMPL-007e-daemon-display-module.md +77 -0
- package/tasks/completed/IMPL-007f-daemon-integration.md +124 -0
- package/tasks/completed/PLAT-1-heimdall.md +420 -0
- package/tasks/completed/SEC-001-sql-injection-fix.md +58 -0
- package/tasks/completed/SEC-002-notification-injection-fix.md +45 -0
- package/tasks/completed/SEC-003-eval-injection-fix.md +54 -0
- package/tasks/completed/SEC-004-pid-race-condition-fix.md +49 -0
- package/tasks/completed/SEC-005-worker-loop-path-fix.md +51 -0
- package/tasks/completed/SEC-006-eval-agent-names.md +55 -0
- package/tasks/completed/SEC-007-spawn-escaping.md +67 -0
- package/tasks/completed/TASK-DASH-001-server-infrastructure.md +185 -0
- package/tasks/completed/TASK-anvil-001-dashboard-frontend.md +133 -0
- package/tasks/completed/review-bmad-aegis.md +89 -0
- package/tasks/completed/review-bmad-anvil.md +80 -0
- package/tasks/completed/review-bmad-crucible.md +81 -0
- package/tasks/completed/review-bmad-ember.md +90 -0
- package/tasks/completed/review-bmad-furnace.md +79 -0
- package/tasks/completed/review-bmad-pixel.md +82 -0
- package/tasks/completed/review-bmad-scribe.md +92 -0
- package/tasks/completed/review-bmad-sentinel.md +83 -0
- package/tasks/pending/ARCH-004-git-bash-detection-duplication.md +72 -0
- package/tasks/pending/ARCH-005-missing-src-directory.md +95 -0
- package/tasks/pending/ARCH-006-task-template-location.md +64 -0
- package/tasks/pending/ARCH-008-forge-master-vs-hub.md +81 -0
- package/tasks/pending/ARCH-010-missing-index-files.md +84 -0
- package/tasks/pending/CLEAN-009.md +31 -0
- package/tasks/pending/CLEAN-010.md +30 -0
- package/tasks/pending/CLEAN-011.md +30 -0
- package/tasks/pending/CLEAN-014.md +32 -0
- package/tasks/pending/DESIGN-dash-001-layout-review.md +45 -0
- package/tasks/pending/FEATURE-001-dashboard-mvp.md +268 -0
- package/tasks/review/ARCH-007-daemon-monolith.md +162 -0
- package/tasks/review/bmad-review-aegis.md +349 -0
- package/tasks/review/bmad-review-anvil.md +259 -0
- package/tasks/review/bmad-review-crucible.md +277 -0
- package/tasks/review/bmad-review-ember.md +307 -0
- package/tasks/review/bmad-review-furnace.md +285 -0
- package/tasks/review/bmad-review-pixel.md +329 -0
- package/tasks/review/bmad-review-scribe.md +361 -0
- package/tasks/review/bmad-review-sentinel.md +242 -0
- package/tasks/review/task-001.md +78 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: ARCH-008
|
|
3
|
+
title: "Resolve forge-master vs hub naming inconsistency"
|
|
4
|
+
type: architecture
|
|
5
|
+
priority: low
|
|
6
|
+
assigned_to: architect
|
|
7
|
+
created_at: 2026-01-15T17:00:00Z
|
|
8
|
+
created_by: architect-review
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Summary
|
|
12
|
+
The planning/coordination agent is referred to by different names in different places, causing confusion and potential issues.
|
|
13
|
+
|
|
14
|
+
## Current State
|
|
15
|
+
Naming inconsistencies:
|
|
16
|
+
|
|
17
|
+
1. **agents/forge-master/** - Directory uses "forge-master"
|
|
18
|
+
- Contains personality.md, capabilities.md, context-template.md
|
|
19
|
+
|
|
20
|
+
2. **agents/planning-hub/** - Different directory uses "planning-hub"
|
|
21
|
+
- Contains personality.md
|
|
22
|
+
|
|
23
|
+
3. **config/agents.json** - Uses "hub"
|
|
24
|
+
```json
|
|
25
|
+
"hub": {
|
|
26
|
+
"name": "Planning Hub",
|
|
27
|
+
"personality_file": "agents/planning-hub/personality.md"
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
4. **config/agent-manifest.yaml** - Uses "forge-master"
|
|
32
|
+
```yaml
|
|
33
|
+
core_agents:
|
|
34
|
+
forge-master:
|
|
35
|
+
name: "Forge Master"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
5. **bin/lib/constants.sh** - Uses "hub" with "master" alias
|
|
39
|
+
```bash
|
|
40
|
+
VALID_AGENTS=(..., "hub")
|
|
41
|
+
AGENT_ALIASES=([...], ["master"]="hub", ["forge-master"]="hub")
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
6. **Documentation** - Mixed usage
|
|
45
|
+
|
|
46
|
+
Problems:
|
|
47
|
+
- Two separate personality files that may differ
|
|
48
|
+
- Confusion about canonical name
|
|
49
|
+
- Extra data in forge-master/ (capabilities.md, context-template.md) not in planning-hub/
|
|
50
|
+
|
|
51
|
+
## Proposed State
|
|
52
|
+
Single consistent name:
|
|
53
|
+
|
|
54
|
+
1. Pick canonical name: "hub" (shorter, already used in code)
|
|
55
|
+
2. Pick personality directory: agents/hub/ or agents/planning-hub/
|
|
56
|
+
3. Consolidate personality content
|
|
57
|
+
4. Keep aliases for discoverability
|
|
58
|
+
|
|
59
|
+
## Affected Files
|
|
60
|
+
- G:\dev\vibe-forge\agents\forge-master\
|
|
61
|
+
- G:\dev\vibe-forge\agents\planning-hub\
|
|
62
|
+
- G:\dev\vibe-forge\config\agents.json
|
|
63
|
+
- G:\dev\vibe-forge\config\agent-manifest.yaml
|
|
64
|
+
- G:\dev\vibe-forge\bin\lib\constants.sh
|
|
65
|
+
- G:\dev\vibe-forge\.claude\commands\forge.md
|
|
66
|
+
|
|
67
|
+
## Migration/Remediation Steps
|
|
68
|
+
1. Decide on canonical directory (planning-hub/ or hub/)
|
|
69
|
+
2. Merge content from forge-master/ into canonical directory
|
|
70
|
+
3. Delete or deprecate non-canonical directory
|
|
71
|
+
4. Update agents.json personality_file path
|
|
72
|
+
5. Update constants.sh fallback
|
|
73
|
+
6. Update agent-manifest.yaml (or delete per ARCH-001)
|
|
74
|
+
7. Search for all references and update
|
|
75
|
+
|
|
76
|
+
## Acceptance Criteria
|
|
77
|
+
- [ ] Single directory for hub/planning agent
|
|
78
|
+
- [ ] Consistent naming across all config files
|
|
79
|
+
- [ ] All content consolidated (personality, capabilities, context-template)
|
|
80
|
+
- [ ] Aliases still work (master, forge-master, planning, hub)
|
|
81
|
+
- [ ] Tests passing
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: ARCH-010
|
|
3
|
+
title: "Add index files for cleaner module imports"
|
|
4
|
+
type: architecture
|
|
5
|
+
priority: low
|
|
6
|
+
assigned_to: architect
|
|
7
|
+
created_at: 2026-01-15T17:00:00Z
|
|
8
|
+
created_by: architect-review
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Summary
|
|
12
|
+
The bin/lib/ directory lacks index files, requiring explicit file paths for imports. Node convention uses index.js for cleaner module exports.
|
|
13
|
+
|
|
14
|
+
## Current State
|
|
15
|
+
```
|
|
16
|
+
bin/lib/
|
|
17
|
+
colors.sh
|
|
18
|
+
constants.sh
|
|
19
|
+
config.sh
|
|
20
|
+
agents.sh
|
|
21
|
+
database.sh
|
|
22
|
+
terminal.js
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Each bash script sources files explicitly:
|
|
26
|
+
```bash
|
|
27
|
+
source "$SCRIPT_DIR/lib/colors.sh"
|
|
28
|
+
source "$SCRIPT_DIR/lib/constants.sh"
|
|
29
|
+
source "$SCRIPT_DIR/lib/config.sh"
|
|
30
|
+
source "$SCRIPT_DIR/lib/agents.sh"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Problems:
|
|
34
|
+
- No single entry point for bash libraries
|
|
35
|
+
- If migrating to Node.js, no index.js for module export
|
|
36
|
+
- Repetitive sourcing in every script
|
|
37
|
+
|
|
38
|
+
## Proposed State
|
|
39
|
+
For bash:
|
|
40
|
+
```bash
|
|
41
|
+
# bin/lib/index.sh
|
|
42
|
+
#!/usr/bin/env bash
|
|
43
|
+
LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
44
|
+
source "$LIB_DIR/colors.sh"
|
|
45
|
+
source "$LIB_DIR/constants.sh"
|
|
46
|
+
source "$LIB_DIR/config.sh"
|
|
47
|
+
source "$LIB_DIR/agents.sh"
|
|
48
|
+
# database.sh loaded only when needed
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Usage:
|
|
52
|
+
```bash
|
|
53
|
+
source "$SCRIPT_DIR/lib/index.sh"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
For Node.js (if migrating):
|
|
57
|
+
```javascript
|
|
58
|
+
// bin/lib/index.js
|
|
59
|
+
module.exports = {
|
|
60
|
+
terminal: require('./terminal'),
|
|
61
|
+
config: require('./config'),
|
|
62
|
+
agents: require('./agents'),
|
|
63
|
+
};
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Affected Files
|
|
67
|
+
- G:\dev\vibe-forge\bin\lib\ (new index.sh)
|
|
68
|
+
- G:\dev\vibe-forge\bin\forge.sh
|
|
69
|
+
- G:\dev\vibe-forge\bin\forge-setup.sh
|
|
70
|
+
- G:\dev\vibe-forge\bin\forge-spawn.sh
|
|
71
|
+
- G:\dev\vibe-forge\bin\forge-daemon.sh
|
|
72
|
+
|
|
73
|
+
## Migration/Remediation Steps
|
|
74
|
+
1. Create bin/lib/index.sh with all common sources
|
|
75
|
+
2. Consider lazy loading for database.sh (only for daemon)
|
|
76
|
+
3. Update all scripts to use single source
|
|
77
|
+
4. If migrating to Node.js, create index.js
|
|
78
|
+
5. Test all scripts still work
|
|
79
|
+
|
|
80
|
+
## Acceptance Criteria
|
|
81
|
+
- [ ] Single source command for common libraries
|
|
82
|
+
- [ ] Reduced boilerplate in scripts
|
|
83
|
+
- [ ] Functionality unchanged
|
|
84
|
+
- [ ] Tests passing
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: CLEAN-009
|
|
3
|
+
title: "Inconsistent agent naming between agent-manifest.yaml and constants.sh"
|
|
4
|
+
type: code-quality
|
|
5
|
+
priority: low
|
|
6
|
+
assigned_to: furnace
|
|
7
|
+
created_at: 2026-01-15T17:00:00Z
|
|
8
|
+
created_by: sentinel-review
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Summary
|
|
12
|
+
The agent-manifest.yaml and constants.sh have inconsistent agent definitions:
|
|
13
|
+
- agent-manifest.yaml defines `forge-master` as an agent
|
|
14
|
+
- constants.sh defines `hub` as the canonical name with aliases like "planning", "master", "forge-master"
|
|
15
|
+
- agent-manifest.yaml references personalities at `/agents/forge-master/` but constants.sh expects `agents/planning-hub/`
|
|
16
|
+
|
|
17
|
+
## Affected Files/Lines
|
|
18
|
+
- `config/agent-manifest.yaml:8-19` - defines forge-master with personality at `/agents/forge-master/personality.md`
|
|
19
|
+
- `bin/lib/constants.sh:114-118` - defines hub with personality at `agents/planning-hub/personality.md`
|
|
20
|
+
- `config/agent-manifest.yaml:123-160` - defines planning_agents (sage, oracle, quartermaster) not in constants.sh
|
|
21
|
+
|
|
22
|
+
## Remediation
|
|
23
|
+
1. Decide on single source of truth for agent definitions
|
|
24
|
+
2. Either update constants.sh to match agent-manifest.yaml or vice versa
|
|
25
|
+
3. Consider using agents.json as the canonical source and generating constants.sh fallbacks from it
|
|
26
|
+
4. Ensure personality file paths are consistent
|
|
27
|
+
|
|
28
|
+
## Acceptance Criteria
|
|
29
|
+
- [ ] Single source of truth for agent definitions
|
|
30
|
+
- [ ] Consistent naming between config files and code
|
|
31
|
+
- [ ] All referenced personality files exist at specified paths
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: CLEAN-010
|
|
3
|
+
title: "Unused planning_agents in agent-manifest.yaml"
|
|
4
|
+
type: code-quality
|
|
5
|
+
priority: low
|
|
6
|
+
assigned_to: furnace
|
|
7
|
+
created_at: 2026-01-15T17:00:00Z
|
|
8
|
+
created_by: sentinel-review
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Summary
|
|
12
|
+
The agent-manifest.yaml defines several planning_agents (sage, oracle, quartermaster) that don't appear to be implemented or used anywhere in the codebase:
|
|
13
|
+
- No corresponding entries in constants.sh
|
|
14
|
+
- No personality files in agents/ directory for these agents
|
|
15
|
+
- Not referenced in forge.md or other command files
|
|
16
|
+
|
|
17
|
+
These may be planned features or dead configuration.
|
|
18
|
+
|
|
19
|
+
## Affected Files/Lines
|
|
20
|
+
- `config/agent-manifest.yaml:124-162` - sage, oracle, quartermaster definitions
|
|
21
|
+
|
|
22
|
+
## Remediation
|
|
23
|
+
1. If these are planned features, add a comment indicating they are not yet implemented
|
|
24
|
+
2. If they are dead configuration, remove them to reduce confusion
|
|
25
|
+
3. If they should be working, create the missing personality files and update constants.sh
|
|
26
|
+
|
|
27
|
+
## Acceptance Criteria
|
|
28
|
+
- [ ] Planning agents are either implemented or clearly marked as TODO
|
|
29
|
+
- [ ] No orphaned configuration without corresponding implementation
|
|
30
|
+
- [ ] Documentation updated to reflect actual vs. planned agents
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: CLEAN-011
|
|
3
|
+
title: "Duplicate color definitions between cli.js and colors.sh"
|
|
4
|
+
type: code-quality
|
|
5
|
+
priority: low
|
|
6
|
+
assigned_to: furnace
|
|
7
|
+
created_at: 2026-01-15T17:00:00Z
|
|
8
|
+
created_by: sentinel-review
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Summary
|
|
12
|
+
Color codes are defined in two places:
|
|
13
|
+
- `bin/lib/colors.sh` - Bash color definitions
|
|
14
|
+
- `bin/cli.js:26-33` - JavaScript color definitions
|
|
15
|
+
|
|
16
|
+
The cli.js has a comment explaining why it's self-contained (runs via npx before rest is installed), but the color values themselves could potentially drift.
|
|
17
|
+
|
|
18
|
+
## Affected Files/Lines
|
|
19
|
+
- `bin/lib/colors.sh:9-22` - Bash color definitions (RED, GREEN, YELLOW, BLUE, CYAN, NC)
|
|
20
|
+
- `bin/cli.js:26-33` - JavaScript color definitions (reset, red, green, yellow, blue, cyan)
|
|
21
|
+
|
|
22
|
+
## Remediation
|
|
23
|
+
The duplication is intentional per the comment in cli.js. No code changes needed, but:
|
|
24
|
+
1. Add a comment in colors.sh noting the JavaScript equivalent exists
|
|
25
|
+
2. If colors are updated in one place, update the other
|
|
26
|
+
3. Consider adding a test to verify they match
|
|
27
|
+
|
|
28
|
+
## Acceptance Criteria
|
|
29
|
+
- [ ] Cross-reference comment added to colors.sh
|
|
30
|
+
- [ ] Document the intentional duplication in code comments
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: CLEAN-014
|
|
3
|
+
title: "Missing set -e in setup-worker-loop.sh script"
|
|
4
|
+
type: code-quality
|
|
5
|
+
priority: low
|
|
6
|
+
assigned_to: furnace
|
|
7
|
+
created_at: 2026-01-15T17:00:00Z
|
|
8
|
+
created_by: sentinel-review
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Summary
|
|
12
|
+
The setup-worker-loop.sh uses `set -euo pipefail` which is good, but other shell scripts in the project use only `set -e`. This inconsistency could lead to different error behavior across scripts.
|
|
13
|
+
|
|
14
|
+
## Affected Files/Lines
|
|
15
|
+
- `.claude/scripts/setup-worker-loop.sh:7` - uses `set -euo pipefail`
|
|
16
|
+
- `.claude/hooks/worker-loop.sh:16` - uses `set -euo pipefail`
|
|
17
|
+
- `bin/forge.sh:22` - uses only `set -e`
|
|
18
|
+
- `bin/forge-daemon.sh` - no set statement at top level (relies on sourced libraries)
|
|
19
|
+
- `bin/forge-setup.sh:9` - uses only `set -e`
|
|
20
|
+
- `bin/forge-spawn.sh:13` - uses only `set -e`
|
|
21
|
+
|
|
22
|
+
## Remediation
|
|
23
|
+
Standardize on `set -euo pipefail` for all scripts:
|
|
24
|
+
- `-e` - exit on error
|
|
25
|
+
- `-u` - treat unset variables as errors
|
|
26
|
+
- `-o pipefail` - fail if any command in a pipeline fails
|
|
27
|
+
|
|
28
|
+
Or document why different scripts use different settings.
|
|
29
|
+
|
|
30
|
+
## Acceptance Criteria
|
|
31
|
+
- [ ] Consistent shell options across all scripts
|
|
32
|
+
- [ ] Document rationale if different scripts need different settings
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DESIGN-dash-001
|
|
3
|
+
title: "Dashboard: Pixel layout and UX review"
|
|
4
|
+
type: design
|
|
5
|
+
priority: high
|
|
6
|
+
status: pending
|
|
7
|
+
created_at: 2026-01-16T23:45:00Z
|
|
8
|
+
created_by: planning-hub
|
|
9
|
+
assigned_to: pixel
|
|
10
|
+
parent_feature: FEATURE-001
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Dashboard: Pixel layout and UX review
|
|
14
|
+
|
|
15
|
+
## User Feedback
|
|
16
|
+
|
|
17
|
+
1. **Issues panel below the fold** - User doesn't like having to scroll to see actionable items (the killer feature!)
|
|
18
|
+
|
|
19
|
+
2. **Agents panel confusing** - Even with correct data, 10 cards may be overwhelming. Need clearer visual hierarchy.
|
|
20
|
+
|
|
21
|
+
3. **Settings icon unclear** - Hover says "Settings" but icon isn't intuitive. What does it even do?
|
|
22
|
+
|
|
23
|
+
4. **Overall layout** - Need to rethink information hierarchy
|
|
24
|
+
|
|
25
|
+
## Questions to Address
|
|
26
|
+
|
|
27
|
+
1. Should Issues be moved above the fold? Maybe swap with Notifications?
|
|
28
|
+
2. Should Agents be condensed (only show active/working agents prominently)?
|
|
29
|
+
3. What should the Settings icon do? Is it needed for MVP?
|
|
30
|
+
4. Is the four-panel layout the right approach, or should we consolidate?
|
|
31
|
+
|
|
32
|
+
## Recommendations Needed
|
|
33
|
+
|
|
34
|
+
Pixel should review and provide:
|
|
35
|
+
1. Revised layout wireframe prioritizing Issues (killer feature)
|
|
36
|
+
2. Simplified Agents display concept
|
|
37
|
+
3. Decision on Settings functionality
|
|
38
|
+
4. Any quick wins for visual clarity
|
|
39
|
+
|
|
40
|
+
## Acceptance Criteria
|
|
41
|
+
|
|
42
|
+
- [ ] Pixel provides layout recommendations
|
|
43
|
+
- [ ] Issues panel visible without scrolling
|
|
44
|
+
- [ ] Clear visual hierarchy established
|
|
45
|
+
- [ ] Icons are intuitive or labeled
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: FEATURE-001
|
|
3
|
+
title: "Dashboard Web UI MVP"
|
|
4
|
+
type: feature
|
|
5
|
+
priority: critical
|
|
6
|
+
status: pending
|
|
7
|
+
created_at: 2026-01-16T21:00:00Z
|
|
8
|
+
created_by: planning-hub
|
|
9
|
+
assigned_to: null
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Dashboard Web UI MVP
|
|
13
|
+
|
|
14
|
+
## Summary
|
|
15
|
+
|
|
16
|
+
Build a self-contained web dashboard that provides real-time visibility into the forge and enables **actionable task dispatch** - the killer feature that transforms the dashboard from a viewer into a command center.
|
|
17
|
+
|
|
18
|
+
## User Stories
|
|
19
|
+
|
|
20
|
+
### Primary
|
|
21
|
+
- As a developer, I want to see all pending tasks, agent statuses, and notifications in one place
|
|
22
|
+
- As a developer, I want to click on any flagged issue and dispatch an agent to fix it
|
|
23
|
+
- As a developer, I want the dashboard to auto-launch when I start the forge
|
|
24
|
+
|
|
25
|
+
### Secondary
|
|
26
|
+
- As a developer, I want to re-open the dashboard if I accidentally close it
|
|
27
|
+
- As a developer, I want to disable the dashboard if I prefer terminal-only workflow
|
|
28
|
+
- As a developer, I want dark mode (non-negotiable per Pixel)
|
|
29
|
+
|
|
30
|
+
## Architecture Decision
|
|
31
|
+
|
|
32
|
+
### Hosting: Embedded Node.js Server
|
|
33
|
+
|
|
34
|
+
**Why:** Node.js is already a requirement. No additional dependencies needed.
|
|
35
|
+
|
|
36
|
+
**How it works:**
|
|
37
|
+
1. `forge daemon start` also starts the dashboard server
|
|
38
|
+
2. Dashboard served at `http://localhost:2800` (configurable)
|
|
39
|
+
3. Browser auto-opens (configurable)
|
|
40
|
+
4. Uses existing SQLite database for all data
|
|
41
|
+
5. WebSocket for real-time updates
|
|
42
|
+
|
|
43
|
+
**NOT using:**
|
|
44
|
+
- Docker - adds complexity, not everyone has it
|
|
45
|
+
- Electron - too heavy for a dashboard
|
|
46
|
+
- External hosting - we want self-contained
|
|
47
|
+
- Static files - can't do real-time without a server
|
|
48
|
+
|
|
49
|
+
### Configuration
|
|
50
|
+
|
|
51
|
+
Add to `.forge/config.json`:
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"dashboard": {
|
|
55
|
+
"enabled": true,
|
|
56
|
+
"port": 2800,
|
|
57
|
+
"auto_open": true,
|
|
58
|
+
"host": "localhost"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Commands
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
forge # Starts daemon + dashboard, opens browser
|
|
67
|
+
forge dashboard # Opens dashboard URL in browser
|
|
68
|
+
forge dashboard --port # Show current port
|
|
69
|
+
forge dashboard stop # Stop dashboard server (daemon keeps running)
|
|
70
|
+
forge daemon status # Shows dashboard URL if running
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Technical Specification
|
|
74
|
+
|
|
75
|
+
### Backend (Furnace)
|
|
76
|
+
|
|
77
|
+
**Location:** `bin/dashboard/` or `src/dashboard/`
|
|
78
|
+
|
|
79
|
+
**Stack:**
|
|
80
|
+
- Node.js HTTP server (no Express needed for MVP)
|
|
81
|
+
- WebSocket for real-time updates (ws package)
|
|
82
|
+
- SQLite for data (existing forge.db)
|
|
83
|
+
- Static file serving for frontend
|
|
84
|
+
|
|
85
|
+
**API Endpoints:**
|
|
86
|
+
```
|
|
87
|
+
GET /api/tasks # List all tasks by status
|
|
88
|
+
GET /api/tasks/:id # Get task details
|
|
89
|
+
POST /api/tasks # Create new task (for dispatch)
|
|
90
|
+
GET /api/agents # List agents and their status
|
|
91
|
+
GET /api/notifications # Recent notifications
|
|
92
|
+
POST /api/dispatch # Dispatch agent for a task
|
|
93
|
+
WS /ws # Real-time updates
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Dispatch Endpoint:**
|
|
97
|
+
```json
|
|
98
|
+
POST /api/dispatch
|
|
99
|
+
{
|
|
100
|
+
"type": "stale-docs",
|
|
101
|
+
"target": "README.md",
|
|
102
|
+
"agent": "scribe",
|
|
103
|
+
"context": {
|
|
104
|
+
"last_updated": "2026-01-01",
|
|
105
|
+
"reason": "45 days stale"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
This creates a task file in `tasks/pending/` and notifies the agent.
|
|
111
|
+
|
|
112
|
+
### Frontend (Anvil + Pixel)
|
|
113
|
+
|
|
114
|
+
**Location:** `bin/dashboard/public/` or `src/dashboard/ui/`
|
|
115
|
+
|
|
116
|
+
**Stack (MVP - keep it simple):**
|
|
117
|
+
- Vanilla JS + HTML + CSS (no framework for MVP)
|
|
118
|
+
- Or lightweight: Preact/Alpine.js if needed
|
|
119
|
+
- CSS variables for theming (dark mode)
|
|
120
|
+
- WebSocket client for real-time
|
|
121
|
+
|
|
122
|
+
**Panels:**
|
|
123
|
+
```
|
|
124
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
125
|
+
│ VIBE FORGE DASHBOARD [⚙️] [🌙/☀️] │
|
|
126
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
127
|
+
│ │
|
|
128
|
+
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
|
129
|
+
│ │ TASKS │ │ AGENTS │ │ NOTIFICATIONS │ │
|
|
130
|
+
│ │ │ │ │ │ │ │
|
|
131
|
+
│ │ ▼ Pending (3) │ │ ⚒️ Hub │ │ ✅ PR #6 merged │ │
|
|
132
|
+
│ │ • TASK-001 │ │ idle │ │ 2 min ago │ │
|
|
133
|
+
│ │ • TASK-002 │ │ │ │ │ │
|
|
134
|
+
│ │ • TASK-003 │ │ 🔨 Anvil │ │ 🔔 Attention: │ │
|
|
135
|
+
│ │ │ │ working │ │ TASK-005 │ │
|
|
136
|
+
│ │ ▼ In Progress(1)│ │ TASK-001 │ │ 5 min ago │ │
|
|
137
|
+
│ │ • TASK-004 │ │ │ │ │ │
|
|
138
|
+
│ │ │ │ 🔥 Furnace │ │ ⚠️ Test failing │ │
|
|
139
|
+
│ │ ▼ Review (2) │ │ idle │ │ [Dispatch] │ │
|
|
140
|
+
│ │ • TASK-005 │ │ │ │ │ │
|
|
141
|
+
│ │ • TASK-006 │ │ ... │ │ │ │
|
|
142
|
+
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
|
|
143
|
+
│ │
|
|
144
|
+
│ ┌─────────────────────────────────────────────────────────────┐│
|
|
145
|
+
│ │ ISSUES (Actionable) [Refresh] ││
|
|
146
|
+
│ │ ││
|
|
147
|
+
│ │ 📄 Stale Docs: README.md (45 days) [🎯 Dispatch Scribe]│
|
|
148
|
+
│ │ 🧪 Failing Test: auth.test.js (2) [🎯 Dispatch Crucible]│
|
|
149
|
+
│ │ 🔒 Security: lodash CVE-2021-23337 [🎯 Dispatch Aegis]│
|
|
150
|
+
│ │ 📊 Low Coverage: utils.js (34%) [🎯 Dispatch Crucible]│
|
|
151
|
+
│ └─────────────────────────────────────────────────────────────┘│
|
|
152
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Actionable Items (The Killer Feature)
|
|
156
|
+
|
|
157
|
+
**Issue Detection Sources:**
|
|
158
|
+
1. **Stale Docs** - Files in `docs/` older than N days
|
|
159
|
+
2. **Failing Tests** - Parse test output for failures
|
|
160
|
+
3. **Security Issues** - npm audit / dependency scan
|
|
161
|
+
4. **Low Coverage** - Parse coverage reports
|
|
162
|
+
5. **TODOs/FIXMEs** - Grep codebase for markers
|
|
163
|
+
6. **Pending Reviews** - PRs waiting > N hours
|
|
164
|
+
|
|
165
|
+
**Dispatch Flow:**
|
|
166
|
+
```
|
|
167
|
+
User clicks [Dispatch Scribe] on stale docs
|
|
168
|
+
↓
|
|
169
|
+
POST /api/dispatch { type: "stale-docs", target: "README.md", agent: "scribe" }
|
|
170
|
+
↓
|
|
171
|
+
Server creates tasks/pending/AUTO-001-update-readme.md
|
|
172
|
+
↓
|
|
173
|
+
WebSocket broadcasts: { event: "task-created", task: {...} }
|
|
174
|
+
↓
|
|
175
|
+
Dashboard updates, agent picks up task
|
|
176
|
+
↓
|
|
177
|
+
Task status updates flow back via WebSocket
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Phases
|
|
181
|
+
|
|
182
|
+
### Phase 1A: Server Infrastructure (Furnace)
|
|
183
|
+
- [ ] Create `bin/dashboard/server.js` - HTTP + WebSocket server
|
|
184
|
+
- [ ] Add `/api/tasks`, `/api/agents`, `/api/notifications` endpoints
|
|
185
|
+
- [ ] Integrate with existing SQLite database
|
|
186
|
+
- [ ] Add `dashboard` command to forge CLI
|
|
187
|
+
- [ ] Auto-start with daemon, configurable
|
|
188
|
+
|
|
189
|
+
### Phase 1B: Basic UI (Anvil)
|
|
190
|
+
- [ ] Create `bin/dashboard/public/index.html`
|
|
191
|
+
- [ ] Three-panel layout (Tasks, Agents, Notifications)
|
|
192
|
+
- [ ] Dark mode with CSS variables
|
|
193
|
+
- [ ] WebSocket connection for real-time updates
|
|
194
|
+
- [ ] Mobile responsive (basic)
|
|
195
|
+
|
|
196
|
+
### Phase 1C: Actionable Items (Anvil + Furnace)
|
|
197
|
+
- [ ] Add `/api/dispatch` endpoint
|
|
198
|
+
- [ ] Create "Issues" panel in UI
|
|
199
|
+
- [ ] Implement stale docs detection
|
|
200
|
+
- [ ] Implement dispatch flow (creates task file)
|
|
201
|
+
- [ ] Add [Dispatch] buttons to issues
|
|
202
|
+
|
|
203
|
+
### Phase 1D: Polish (Pixel review)
|
|
204
|
+
- [ ] UX review and refinements
|
|
205
|
+
- [ ] Accessibility audit (keyboard nav, screen reader)
|
|
206
|
+
- [ ] Loading states, error states
|
|
207
|
+
- [ ] Empty states ("No pending tasks - great job!")
|
|
208
|
+
|
|
209
|
+
## File Structure
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
bin/dashboard/
|
|
213
|
+
├── server.js # Main server (HTTP + WS)
|
|
214
|
+
├── api/
|
|
215
|
+
│ ├── tasks.js # Task CRUD
|
|
216
|
+
│ ├── agents.js # Agent status
|
|
217
|
+
│ ├── dispatch.js # Dispatch logic
|
|
218
|
+
│ └── issues.js # Issue detection
|
|
219
|
+
├── public/
|
|
220
|
+
│ ├── index.html # Main page
|
|
221
|
+
│ ├── style.css # Styles (dark mode)
|
|
222
|
+
│ ├── app.js # Frontend logic
|
|
223
|
+
│ └── components/ # UI components (if needed)
|
|
224
|
+
└── lib/
|
|
225
|
+
├── websocket.js # WS broadcast logic
|
|
226
|
+
└── detection.js # Issue detection (stale docs, etc.)
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Acceptance Criteria
|
|
230
|
+
|
|
231
|
+
- [ ] Dashboard auto-launches with `forge` command
|
|
232
|
+
- [ ] `forge dashboard` opens browser to dashboard
|
|
233
|
+
- [ ] Three panels visible: Tasks, Agents, Notifications
|
|
234
|
+
- [ ] Real-time updates when task status changes
|
|
235
|
+
- [ ] At least one actionable issue type works (stale docs)
|
|
236
|
+
- [ ] Clicking [Dispatch] creates a task file
|
|
237
|
+
- [ ] Dark mode enabled by default
|
|
238
|
+
- [ ] Works on localhost without internet
|
|
239
|
+
- [ ] Dashboard can be disabled via config
|
|
240
|
+
|
|
241
|
+
## Out of Scope for MVP
|
|
242
|
+
|
|
243
|
+
- Authentication (local only for now)
|
|
244
|
+
- Multi-user support
|
|
245
|
+
- Task editing (view only, dispatch only)
|
|
246
|
+
- Advanced filtering/search
|
|
247
|
+
- Historical analytics
|
|
248
|
+
- Mobile app
|
|
249
|
+
|
|
250
|
+
## Dependencies
|
|
251
|
+
|
|
252
|
+
- Node.js (already required)
|
|
253
|
+
- `ws` package for WebSocket (add to package.json)
|
|
254
|
+
- Existing SQLite database
|
|
255
|
+
|
|
256
|
+
## Estimated Effort
|
|
257
|
+
|
|
258
|
+
- Phase 1A (Server): 2-3 tasks
|
|
259
|
+
- Phase 1B (UI): 3-4 tasks
|
|
260
|
+
- Phase 1C (Actionable): 2-3 tasks
|
|
261
|
+
- Phase 1D (Polish): 1-2 tasks
|
|
262
|
+
|
|
263
|
+
## References
|
|
264
|
+
|
|
265
|
+
- Feature brainstorm: `context/feature-brainstorm.md`
|
|
266
|
+
- Pixel's design principles in brainstorm document
|
|
267
|
+
- Existing daemon code: `bin/forge-daemon.sh`
|
|
268
|
+
- Database schema: `bin/lib/database.sh`
|