@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.
Files changed (201) hide show
  1. package/.claude/commands/clear-attention.md +63 -0
  2. package/.claude/commands/compact-context.md +52 -0
  3. package/.claude/commands/configure-vcs.md +102 -0
  4. package/.claude/commands/forge.md +171 -0
  5. package/.claude/commands/need-help.md +77 -0
  6. package/.claude/commands/update-status.md +64 -0
  7. package/.claude/commands/worker-loop.md +106 -0
  8. package/.claude/hooks/worker-loop.js +198 -0
  9. package/.claude/scripts/setup-worker-loop.sh +45 -0
  10. package/.claude/settings.local.json +46 -0
  11. package/LICENSE +21 -0
  12. package/README.md +238 -0
  13. package/agents/aegis/personality.md +294 -0
  14. package/agents/anvil/personality.md +276 -0
  15. package/agents/architect/personality.md +258 -0
  16. package/agents/crucible/personality.md +360 -0
  17. package/agents/ember/personality.md +291 -0
  18. package/agents/forge-master/capabilities.md +144 -0
  19. package/agents/forge-master/context-template.md +128 -0
  20. package/agents/forge-master/personality.md +138 -0
  21. package/agents/furnace/personality.md +340 -0
  22. package/agents/herald/personality.md +247 -0
  23. package/agents/loki/personality.md +108 -0
  24. package/agents/oracle/personality.md +283 -0
  25. package/agents/pixel/personality.md +113 -0
  26. package/agents/planning-hub/personality.md +320 -0
  27. package/agents/scribe/personality.md +251 -0
  28. package/agents/temper/personality.md +218 -0
  29. package/bin/cli.js +375 -0
  30. package/bin/dashboard/api/agents.js +333 -0
  31. package/bin/dashboard/api/dispatch.js +483 -0
  32. package/bin/dashboard/api/tasks.js +416 -0
  33. package/bin/dashboard/frontend/index.html +13 -0
  34. package/bin/dashboard/frontend/package.json +16 -0
  35. package/bin/dashboard/frontend/src/App.svelte +222 -0
  36. package/bin/dashboard/frontend/src/app.css +1777 -0
  37. package/bin/dashboard/frontend/src/lib/components/AgentCard.svelte +60 -0
  38. package/bin/dashboard/frontend/src/lib/components/AgentsPanel.svelte +57 -0
  39. package/bin/dashboard/frontend/src/lib/components/DispatchModal.svelte +180 -0
  40. package/bin/dashboard/frontend/src/lib/components/Footer.svelte +33 -0
  41. package/bin/dashboard/frontend/src/lib/components/Header.svelte +84 -0
  42. package/bin/dashboard/frontend/src/lib/components/IssueCard.svelte +33 -0
  43. package/bin/dashboard/frontend/src/lib/components/IssuesPanel.svelte +73 -0
  44. package/bin/dashboard/frontend/src/lib/components/KeyboardShortcutsModal.svelte +108 -0
  45. package/bin/dashboard/frontend/src/lib/components/MobileTabs.svelte +52 -0
  46. package/bin/dashboard/frontend/src/lib/components/NotificationCard.svelte +60 -0
  47. package/bin/dashboard/frontend/src/lib/components/NotificationsPanel.svelte +44 -0
  48. package/bin/dashboard/frontend/src/lib/components/TaskCard.svelte +63 -0
  49. package/bin/dashboard/frontend/src/lib/components/TasksPanel.svelte +82 -0
  50. package/bin/dashboard/frontend/src/lib/components/Toast.svelte +45 -0
  51. package/bin/dashboard/frontend/src/lib/stores/agents.js +34 -0
  52. package/bin/dashboard/frontend/src/lib/stores/issues.js +54 -0
  53. package/bin/dashboard/frontend/src/lib/stores/notifications.js +48 -0
  54. package/bin/dashboard/frontend/src/lib/stores/tasks.js +63 -0
  55. package/bin/dashboard/frontend/src/lib/stores/theme.js +33 -0
  56. package/bin/dashboard/frontend/src/lib/stores/toast.js +35 -0
  57. package/bin/dashboard/frontend/src/lib/stores/ui.js +25 -0
  58. package/bin/dashboard/frontend/src/lib/stores/voice.js +275 -0
  59. package/bin/dashboard/frontend/src/lib/stores/websocket.js +295 -0
  60. package/bin/dashboard/frontend/src/lib/utils/api.js +101 -0
  61. package/bin/dashboard/frontend/src/lib/utils/formatters.js +54 -0
  62. package/bin/dashboard/frontend/src/main.js +9 -0
  63. package/bin/dashboard/frontend/svelte.config.js +5 -0
  64. package/bin/dashboard/frontend/vite.config.js +20 -0
  65. package/bin/dashboard/public/assets/index-DnfVj9Ce.css +1 -0
  66. package/bin/dashboard/public/assets/index-Ze5h0kXQ.js +2 -0
  67. package/bin/dashboard/public/index.html +14 -0
  68. package/bin/dashboard/server.js +566 -0
  69. package/bin/forge-daemon.sh +463 -0
  70. package/bin/forge-setup.sh +645 -0
  71. package/bin/forge-spawn.sh +164 -0
  72. package/bin/forge.cmd +83 -0
  73. package/bin/forge.sh +533 -0
  74. package/bin/lib/agents.sh +177 -0
  75. package/bin/lib/colors.sh +44 -0
  76. package/bin/lib/config.sh +347 -0
  77. package/bin/lib/constants.sh +241 -0
  78. package/bin/lib/daemon/display.sh +128 -0
  79. package/bin/lib/daemon/notifications.sh +263 -0
  80. package/bin/lib/daemon/routing.sh +77 -0
  81. package/bin/lib/daemon/state.sh +115 -0
  82. package/bin/lib/daemon/sync.sh +95 -0
  83. package/bin/lib/database.sh +310 -0
  84. package/bin/lib/heimdall-setup.js +113 -0
  85. package/bin/lib/heimdall.js +265 -0
  86. package/bin/lib/json.sh +264 -0
  87. package/bin/lib/terminal.js +451 -0
  88. package/bin/lib/util.sh +126 -0
  89. package/bin/lib/vcs.js +349 -0
  90. package/config/agent-manifest.yaml +203 -0
  91. package/config/agents.json +168 -0
  92. package/config/task-template.md +159 -0
  93. package/config/task-types.yaml +106 -0
  94. package/context/agent-status/aegis.json +7 -0
  95. package/context/agent-status/anvil.json +7 -0
  96. package/context/agent-status/architect.json +7 -0
  97. package/context/agent-status/crucible.json +7 -0
  98. package/context/agent-status/ember.json +7 -0
  99. package/context/agent-status/furnace.json +7 -0
  100. package/context/agent-status/loki.json +7 -0
  101. package/context/agent-status/oracle.json +7 -0
  102. package/context/agent-status/pixel.json +7 -0
  103. package/context/agent-status/planning-hub.json +7 -0
  104. package/context/agent-status/scribe.json +7 -0
  105. package/context/agent-status/temper.json +7 -0
  106. package/context/feature-brainstorm.md +426 -0
  107. package/context/forge-state.yaml +19 -0
  108. package/context/modern-conventions.md +129 -0
  109. package/context/project-context-template.md +122 -0
  110. package/context/project-context.md +122 -0
  111. package/docs/TODO.md +150 -0
  112. package/docs/agents.md +409 -0
  113. package/docs/architecture/decisions/ADR-001-daemon-modularization.md +122 -0
  114. package/docs/architecture/vibe-lab-integration.md +684 -0
  115. package/docs/architecture.md +194 -0
  116. package/docs/bmad-gap-analysis-2026-03-31.md +444 -0
  117. package/docs/cleanup-workflow.md +329 -0
  118. package/docs/commands.md +451 -0
  119. package/docs/dashboard-mockup.html +989 -0
  120. package/docs/getting-started.md +261 -0
  121. package/docs/integration/forge-ownership-policy.md +112 -0
  122. package/docs/npm-publishing.md +132 -0
  123. package/docs/roadmap-2026.md +519 -0
  124. package/docs/security.md +144 -0
  125. package/docs/wireframes/dashboard-mvp.md +1164 -0
  126. package/docs/workflows/README.md +32 -0
  127. package/docs/workflows/azure-devops.md +108 -0
  128. package/docs/workflows/bitbucket.md +104 -0
  129. package/docs/workflows/git-only.md +130 -0
  130. package/docs/workflows/gitea.md +168 -0
  131. package/docs/workflows/github.md +103 -0
  132. package/docs/workflows/gitlab.md +105 -0
  133. package/docs/workflows.md +454 -0
  134. package/package.json +73 -0
  135. package/tasks/completed/ARCH-001-duplicate-agent-config.md +121 -0
  136. package/tasks/completed/ARCH-002-mixed-bash-node-implementation.md +88 -0
  137. package/tasks/completed/ARCH-003-worker-loop-hook-duplication.md +77 -0
  138. package/tasks/completed/ARCH-009-test-organization.md +78 -0
  139. package/tasks/completed/ARCH-011-jq-vs-nodejs-json.md +94 -0
  140. package/tasks/completed/ARCH-012-tmp-files-in-root.md +71 -0
  141. package/tasks/completed/ARCH-013-exit-code-constants.md +65 -0
  142. package/tasks/completed/ARCH-014-sed-incompatibility.md +96 -0
  143. package/tasks/completed/ARCH-015-docs-todo-tracking.md +83 -0
  144. package/tasks/completed/BUG-dash-001-tasks-filter-error.md +31 -0
  145. package/tasks/completed/BUG-dash-002-agents-unknown.md +41 -0
  146. package/tasks/completed/CLEAN-001.md +38 -0
  147. package/tasks/completed/CLEAN-002.md +43 -0
  148. package/tasks/completed/CLEAN-003.md +47 -0
  149. package/tasks/completed/CLEAN-004.md +56 -0
  150. package/tasks/completed/CLEAN-005.md +75 -0
  151. package/tasks/completed/CLEAN-006.md +47 -0
  152. package/tasks/completed/CLEAN-007.md +34 -0
  153. package/tasks/completed/CLEAN-008.md +49 -0
  154. package/tasks/completed/CLEAN-012.md +58 -0
  155. package/tasks/completed/CLEAN-013.md +45 -0
  156. package/tasks/completed/FEATURE-001a-dashboard-wireframes.md +162 -0
  157. package/tasks/completed/IMPL-007a-daemon-notifications-module.md +82 -0
  158. package/tasks/completed/IMPL-007b-daemon-sync-module.md +71 -0
  159. package/tasks/completed/IMPL-007c-daemon-state-module.md +80 -0
  160. package/tasks/completed/IMPL-007d-daemon-routing-module.md +77 -0
  161. package/tasks/completed/IMPL-007e-daemon-display-module.md +77 -0
  162. package/tasks/completed/IMPL-007f-daemon-integration.md +124 -0
  163. package/tasks/completed/PLAT-1-heimdall.md +420 -0
  164. package/tasks/completed/SEC-001-sql-injection-fix.md +58 -0
  165. package/tasks/completed/SEC-002-notification-injection-fix.md +45 -0
  166. package/tasks/completed/SEC-003-eval-injection-fix.md +54 -0
  167. package/tasks/completed/SEC-004-pid-race-condition-fix.md +49 -0
  168. package/tasks/completed/SEC-005-worker-loop-path-fix.md +51 -0
  169. package/tasks/completed/SEC-006-eval-agent-names.md +55 -0
  170. package/tasks/completed/SEC-007-spawn-escaping.md +67 -0
  171. package/tasks/completed/TASK-DASH-001-server-infrastructure.md +185 -0
  172. package/tasks/completed/TASK-anvil-001-dashboard-frontend.md +133 -0
  173. package/tasks/completed/review-bmad-aegis.md +89 -0
  174. package/tasks/completed/review-bmad-anvil.md +80 -0
  175. package/tasks/completed/review-bmad-crucible.md +81 -0
  176. package/tasks/completed/review-bmad-ember.md +90 -0
  177. package/tasks/completed/review-bmad-furnace.md +79 -0
  178. package/tasks/completed/review-bmad-pixel.md +82 -0
  179. package/tasks/completed/review-bmad-scribe.md +92 -0
  180. package/tasks/completed/review-bmad-sentinel.md +83 -0
  181. package/tasks/pending/ARCH-004-git-bash-detection-duplication.md +72 -0
  182. package/tasks/pending/ARCH-005-missing-src-directory.md +95 -0
  183. package/tasks/pending/ARCH-006-task-template-location.md +64 -0
  184. package/tasks/pending/ARCH-008-forge-master-vs-hub.md +81 -0
  185. package/tasks/pending/ARCH-010-missing-index-files.md +84 -0
  186. package/tasks/pending/CLEAN-009.md +31 -0
  187. package/tasks/pending/CLEAN-010.md +30 -0
  188. package/tasks/pending/CLEAN-011.md +30 -0
  189. package/tasks/pending/CLEAN-014.md +32 -0
  190. package/tasks/pending/DESIGN-dash-001-layout-review.md +45 -0
  191. package/tasks/pending/FEATURE-001-dashboard-mvp.md +268 -0
  192. package/tasks/review/ARCH-007-daemon-monolith.md +162 -0
  193. package/tasks/review/bmad-review-aegis.md +349 -0
  194. package/tasks/review/bmad-review-anvil.md +259 -0
  195. package/tasks/review/bmad-review-crucible.md +277 -0
  196. package/tasks/review/bmad-review-ember.md +307 -0
  197. package/tasks/review/bmad-review-furnace.md +285 -0
  198. package/tasks/review/bmad-review-pixel.md +329 -0
  199. package/tasks/review/bmad-review-scribe.md +361 -0
  200. package/tasks/review/bmad-review-sentinel.md +242 -0
  201. 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`