@entelligentsia/forgecli 1.0.10 → 1.0.14

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 (167) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/dist/CHANGELOG-forge-plugin.md +150 -0
  3. package/dist/bin/forge.js +0 -0
  4. package/dist/extensions/forgecli/config-layer.d.ts +16 -0
  5. package/dist/extensions/forgecli/config-layer.js +5 -0
  6. package/dist/extensions/forgecli/config-layer.js.map +1 -1
  7. package/dist/extensions/forgecli/dashboard/component.d.ts +102 -0
  8. package/dist/extensions/forgecli/dashboard/component.js +882 -0
  9. package/dist/extensions/forgecli/dashboard/component.js.map +1 -0
  10. package/dist/extensions/forgecli/dashboard/register.d.ts +2 -0
  11. package/dist/extensions/forgecli/dashboard/register.js +45 -0
  12. package/dist/extensions/forgecli/dashboard/register.js.map +1 -0
  13. package/dist/extensions/forgecli/dashboard/view-model.d.ts +35 -0
  14. package/dist/extensions/forgecli/dashboard/view-model.js +54 -0
  15. package/dist/extensions/forgecli/dashboard/view-model.js.map +1 -0
  16. package/dist/extensions/forgecli/fix-bug.js +72 -7
  17. package/dist/extensions/forgecli/fix-bug.js.map +1 -1
  18. package/dist/extensions/forgecli/forge-cli-schema.json +4 -0
  19. package/dist/extensions/forgecli/forge-commands.js +1 -0
  20. package/dist/extensions/forgecli/forge-commands.js.map +1 -1
  21. package/dist/extensions/forgecli/forge-init/phase4-register.js +53 -0
  22. package/dist/extensions/forgecli/forge-init/phase4-register.js.map +1 -1
  23. package/dist/extensions/forgecli/forge-subagent.js +6 -4
  24. package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
  25. package/dist/extensions/forgecli/index.js +5 -0
  26. package/dist/extensions/forgecli/index.js.map +1 -1
  27. package/dist/extensions/forgecli/lib/halt-advisor.d.ts +54 -0
  28. package/dist/extensions/forgecli/lib/halt-advisor.js +90 -0
  29. package/dist/extensions/forgecli/lib/halt-advisor.js.map +1 -0
  30. package/dist/extensions/forgecli/migration-engine.js +25 -12
  31. package/dist/extensions/forgecli/migration-engine.js.map +1 -1
  32. package/dist/extensions/forgecli/orchestrator-status-bar.d.ts +25 -0
  33. package/dist/extensions/forgecli/orchestrator-status-bar.js +183 -0
  34. package/dist/extensions/forgecli/orchestrator-status-bar.js.map +1 -0
  35. package/dist/extensions/forgecli/orchestrator-tree.d.ts +96 -0
  36. package/dist/extensions/forgecli/orchestrator-tree.js +390 -0
  37. package/dist/extensions/forgecli/orchestrator-tree.js.map +1 -0
  38. package/dist/extensions/forgecli/project-orientation.js +12 -8
  39. package/dist/extensions/forgecli/project-orientation.js.map +1 -1
  40. package/dist/extensions/forgecli/regenerate.d.ts +16 -0
  41. package/dist/extensions/forgecli/regenerate.js +110 -0
  42. package/dist/extensions/forgecli/regenerate.js.map +1 -1
  43. package/dist/extensions/forgecli/run-sprint.js +33 -3
  44. package/dist/extensions/forgecli/run-sprint.js.map +1 -1
  45. package/dist/extensions/forgecli/run-task.d.ts +32 -0
  46. package/dist/extensions/forgecli/run-task.js +185 -12
  47. package/dist/extensions/forgecli/run-task.js.map +1 -1
  48. package/dist/extensions/forgecli/thread-switcher.js +105 -764
  49. package/dist/extensions/forgecli/thread-switcher.js.map +1 -1
  50. package/dist/extensions/forgecli/viewport-events.js +32 -0
  51. package/dist/extensions/forgecli/viewport-events.js.map +1 -1
  52. package/dist/forge-payload/.base-pack/commands/fix-bug.md +1 -1
  53. package/dist/forge-payload/.base-pack/commands/run-sprint.md +1 -1
  54. package/dist/forge-payload/.base-pack/commands/run-task.md +1 -1
  55. package/dist/forge-payload/.base-pack/personas/architect.md +1 -1
  56. package/dist/forge-payload/.base-pack/personas/bug-fixer.md +1 -1
  57. package/dist/forge-payload/.base-pack/personas/collator.md +3 -3
  58. package/dist/forge-payload/.base-pack/personas/engineer.md +1 -1
  59. package/dist/forge-payload/.base-pack/personas/librarian.md +1 -1
  60. package/dist/forge-payload/.base-pack/personas/orchestrator.md +1 -1
  61. package/dist/forge-payload/.base-pack/personas/product-manager.md +1 -1
  62. package/dist/forge-payload/.base-pack/personas/qa-engineer.md +1 -1
  63. package/dist/forge-payload/.base-pack/personas/supervisor.md +1 -1
  64. package/dist/forge-payload/.base-pack/workflows/_fragments/event-emission-schema.md +1 -1
  65. package/dist/forge-payload/.base-pack/workflows/_fragments/friction-emit.md +1 -1
  66. package/dist/forge-payload/.base-pack/workflows/_fragments/iron-laws.md +1 -1
  67. package/dist/forge-payload/.base-pack/workflows/_fragments/progress-reporting.md +2 -2
  68. package/dist/forge-payload/.base-pack/workflows/_fragments/store-cli-verbs.md +11 -2
  69. package/dist/forge-payload/.base-pack/workflows/architect_approve.md +6 -7
  70. package/dist/forge-payload/.base-pack/workflows/architect_review_sprint_completion.md +2 -2
  71. package/dist/forge-payload/.base-pack/workflows/architect_sprint_intake.md +2 -2
  72. package/dist/forge-payload/.base-pack/workflows/architect_sprint_plan.md +5 -5
  73. package/dist/forge-payload/.base-pack/workflows/collator_agent.md +4 -6
  74. package/dist/forge-payload/.base-pack/workflows/commit_task.md +5 -6
  75. package/dist/forge-payload/.base-pack/workflows/enhance.md +5 -5
  76. package/dist/forge-payload/.base-pack/workflows/implement_plan.md +6 -7
  77. package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +12 -13
  78. package/dist/forge-payload/.base-pack/workflows/plan_task.md +5 -6
  79. package/dist/forge-payload/.base-pack/workflows/review_code.md +8 -8
  80. package/dist/forge-payload/.base-pack/workflows/review_plan.md +8 -8
  81. package/dist/forge-payload/.base-pack/workflows/sprint_retrospective.md +3 -3
  82. package/dist/forge-payload/.base-pack/workflows/triage.md +12 -9
  83. package/dist/forge-payload/.base-pack/workflows/update_implementation.md +2 -2
  84. package/dist/forge-payload/.base-pack/workflows/update_plan.md +2 -2
  85. package/dist/forge-payload/.base-pack/workflows/validate_task.md +5 -6
  86. package/dist/forge-payload/.base-pack/workflows-js/wfl-fix-bug.js +490 -0
  87. package/dist/forge-payload/.base-pack/workflows-js/wfl-run-sprint.js +416 -0
  88. package/dist/forge-payload/.base-pack/workflows-js/wfl-run-task.js +608 -0
  89. package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
  90. package/dist/forge-payload/.schemas/config.schema.json +2 -3
  91. package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
  92. package/dist/forge-payload/.schemas/event.schema.json +16 -0
  93. package/dist/forge-payload/.schemas/migrations.json +236 -0
  94. package/dist/forge-payload/commands/health.md +29 -0
  95. package/dist/forge-payload/commands/rebuild.md +143 -15
  96. package/dist/forge-payload/commands/update.md +28 -27
  97. package/dist/forge-payload/hooks/preflight-session.cjs +99 -0
  98. package/dist/forge-payload/init/phases/phase-3-materialize.md +18 -5
  99. package/dist/forge-payload/integrity.json +7 -6
  100. package/dist/forge-payload/meta/fragments/tool-discipline.md +1 -1
  101. package/dist/forge-payload/meta/personas/meta-architect.md +1 -1
  102. package/dist/forge-payload/meta/personas/meta-bug-fixer.md +1 -1
  103. package/dist/forge-payload/meta/personas/meta-collator.md +7 -7
  104. package/dist/forge-payload/meta/personas/meta-engineer.md +1 -1
  105. package/dist/forge-payload/meta/personas/meta-orchestrator.md +1 -1
  106. package/dist/forge-payload/meta/personas/meta-supervisor.md +1 -1
  107. package/dist/forge-payload/meta/tool-specs/store-cli.spec.md +1 -1
  108. package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +1 -1
  109. package/dist/forge-payload/meta/workflows/_fragments/friction-emit.md +1 -1
  110. package/dist/forge-payload/meta/workflows/_fragments/iron-laws.md +1 -1
  111. package/dist/forge-payload/meta/workflows/_fragments/progress-reporting.md +2 -2
  112. package/dist/forge-payload/meta/workflows/_fragments/store-cli-verbs.md +11 -2
  113. package/dist/forge-payload/meta/workflows/meta-approve.md +6 -7
  114. package/dist/forge-payload/meta/workflows/meta-bug-triage.md +12 -9
  115. package/dist/forge-payload/meta/workflows/meta-collate.md +5 -7
  116. package/dist/forge-payload/meta/workflows/meta-commit.md +5 -6
  117. package/dist/forge-payload/meta/workflows/meta-enhance.md +5 -5
  118. package/dist/forge-payload/meta/workflows/meta-fix-bug.md +35 -11
  119. package/dist/forge-payload/meta/workflows/meta-implement.md +15 -7
  120. package/dist/forge-payload/meta/workflows/meta-migrate.md +13 -14
  121. package/dist/forge-payload/meta/workflows/meta-new-sprint.md +3 -3
  122. package/dist/forge-payload/meta/workflows/meta-orchestrate.md +138 -39
  123. package/dist/forge-payload/meta/workflows/meta-plan-sprint.md +6 -6
  124. package/dist/forge-payload/meta/workflows/meta-plan-task.md +12 -6
  125. package/dist/forge-payload/meta/workflows/meta-retro.md +4 -4
  126. package/dist/forge-payload/meta/workflows/meta-retrospective.md +4 -4
  127. package/dist/forge-payload/meta/workflows/meta-review-implementation.md +8 -8
  128. package/dist/forge-payload/meta/workflows/meta-review-plan.md +8 -8
  129. package/dist/forge-payload/meta/workflows/meta-review-sprint-completion.md +3 -3
  130. package/dist/forge-payload/meta/workflows/meta-sprint-intake.md +3 -3
  131. package/dist/forge-payload/meta/workflows/meta-sprint-plan.md +6 -6
  132. package/dist/forge-payload/meta/workflows/meta-update-implementation.md +2 -2
  133. package/dist/forge-payload/meta/workflows/meta-update-plan.md +2 -2
  134. package/dist/forge-payload/meta/workflows/meta-validate.md +5 -6
  135. package/dist/forge-payload/schemas/config.schema.json +2 -3
  136. package/dist/forge-payload/schemas/enum-catalog.json +2 -2
  137. package/dist/forge-payload/schemas/event.schema.json +16 -0
  138. package/dist/forge-payload/schemas/structure-manifest.json +75 -73
  139. package/dist/forge-payload/skills/refresh-kb-links/SKILL.md +14 -7
  140. package/dist/forge-payload/tools/banners.cjs +29 -10
  141. package/dist/forge-payload/tools/check-structure.cjs +88 -7
  142. package/dist/forge-payload/tools/collate.cjs +16 -2
  143. package/dist/forge-payload/tools/manage-config.cjs +5 -7
  144. package/dist/forge-payload/tools/parse-gates.cjs +73 -1
  145. package/dist/forge-payload/tools/postflight-gate.cjs +252 -0
  146. package/dist/forge-payload/tools/preflight-gate.cjs +47 -0
  147. package/dist/forge-payload/tools/substitute-placeholders.cjs +5 -4
  148. package/dist/forge-payload/tools/verify-phase.cjs +17 -0
  149. package/package.json +1 -1
  150. package/dist/bin/forgecli.d.ts +0 -2
  151. package/dist/bin/forgecli.js +0 -6
  152. package/dist/bin/forgecli.js.map +0 -1
  153. package/dist/extensions/forgecli/config-tui/index.d.ts +0 -5
  154. package/dist/extensions/forgecli/config-tui/index.js +0 -5
  155. package/dist/extensions/forgecli/config-tui/index.js.map +0 -1
  156. package/dist/extensions/forgecli/loaders/persona-skill-loader.d.ts +0 -45
  157. package/dist/extensions/forgecli/loaders/persona-skill-loader.js +0 -227
  158. package/dist/extensions/forgecli/loaders/persona-skill-loader.js.map +0 -1
  159. package/dist/extensions/forgecli/loaders/template-render.d.ts +0 -20
  160. package/dist/extensions/forgecli/loaders/template-render.js +0 -85
  161. package/dist/extensions/forgecli/loaders/template-render.js.map +0 -1
  162. package/dist/extensions/forgecli/loaders/workflow-loader.d.ts +0 -41
  163. package/dist/extensions/forgecli/loaders/workflow-loader.js +0 -164
  164. package/dist/extensions/forgecli/loaders/workflow-loader.js.map +0 -1
  165. package/dist/forge-payload/.base-pack/workflows/fix_bug.md +0 -446
  166. package/dist/forge-payload/.base-pack/workflows/orchestrate_task.md +0 -928
  167. package/dist/forge-payload/.base-pack/workflows/run_sprint.md +0 -225
@@ -1,225 +0,0 @@
1
- ---
2
- audience: orchestrator-only
3
- deps:
4
- personas: [orchestrator]
5
- ---
6
-
7
- # Workflow: Run Sprint (Forge)
8
-
9
- ## Purpose
10
-
11
- Drive all tasks in a sprint through the pipeline. Respects dependency
12
- ordering and execution mode. Handles errors without halting the whole
13
- sprint — escalated or failed tasks do not block unrelated tasks.
14
-
15
- ---
16
-
17
- ## Step 1 — Load Sprint
18
-
19
- - Read `.forge/store/sprints/{{PREFIX}}-S{NN}.json`
20
- - Read all task JSONs from `.forge/store/tasks/` filtered by `sprintId`
21
-
22
- **Skip** tasks already in a terminal status: `committed`, `abandoned`.
23
- **Resume** tasks mid-pipeline: `planned`, `plan-approved`, `implementing`, `review-approved`, `approved`, `escalated` (only if explicitly requested).
24
-
25
- Update sprint `status` to `active`.
26
-
27
- ## Step 2 — Sort by Dependency
28
-
29
- - Topological sort: tasks with no remaining dependencies go first.
30
- - Compute waves: tasks with no inter-wave edges can run in parallel.
31
- - Validate: no cycles. If a cycle is detected, stop and escalate to the user.
32
-
33
- ### Wave Computation Algorithm
34
-
35
- ```python
36
- function compute_waves(tasks):
37
- # Build adjacency list from task.dependencies
38
- graph = {task_id: set() for task_id in tasks}
39
- in_degree = {task_id: 0 for task_id in tasks}
40
- task_map = {task.taskId: task for task in tasks}
41
-
42
- for task in tasks:
43
- for dep_id in task.get("dependencies", []):
44
- if dep_id in graph:
45
- graph[dep_id].add(task.taskId)
46
- in_degree[task.taskId] += 1
47
-
48
- # Kahn's algorithm — each "wave" is all nodes with in_degree == 0
49
- waves = []
50
- queue = [tid for tid, deg in in_degree.items() if deg == 0]
51
-
52
- while queue:
53
- wave = sorted(queue) # deterministic ordering within a wave
54
- waves.append(wave)
55
- next_queue = []
56
- for tid in wave:
57
- for successor in graph[tid]:
58
- in_degree[successor] -= 1
59
- if in_degree[successor] == 0:
60
- next_queue.append(successor)
61
- queue = next_queue
62
-
63
- # If any nodes remain, there is a cycle
64
- remaining = [tid for tid, deg in in_degree.items() if deg > 0]
65
- if remaining:
66
- raise CycleError(f"Dependency cycle detected among: {remaining}")
67
-
68
- return waves
69
- ```
70
-
71
- ## Step 3 — Execute
72
-
73
- ### Clear Progress Log at Sprint Start
74
-
75
- Before dispatching any task, clear the progress log for this sprint:
76
-
77
- ```bash
78
- FORGE_ROOT=$(node -e "console.log(require('./.forge/config.json').paths.forgeRoot)")
79
- node "$FORGE_ROOT/tools/store-cli.cjs" progress-clear {SPRINT_ID}
80
- ```
81
-
82
- This ensures a clean log for each sprint run.
83
-
84
- ### Sequential Mode (default)
85
-
86
- ```python
87
- for each task in dependency_sorted(tasks):
88
- # Announce with the orchestrator banner
89
- print("🌊 Sprint {SPRINT_ID} — running {task.taskId}")
90
-
91
- # Spawn a fresh-context subagent for the full task pipeline via the Agent tool.
92
- # The task-level orchestrator then spawns per-phase subagents with their own
93
- # per-phase model resolution (see orchestrate_task.md).
94
- spawn_subagent(
95
- prompt="Read `.forge/workflows/orchestrate_task.md` and follow it. "
96
- "Task ID: {task.taskId}. "
97
- "Also read `engineering/MASTER_INDEX.md` for project state.",
98
- description="Run pipeline for {task.taskId}",
99
- model="sonnet" # orchestrator is a lightweight state machine
100
- )
101
-
102
- # After the subagent returns, read the task status from disk.
103
- task_status = read_task_status(task.taskId) # .forge/store/tasks/{TASK_ID}.json
104
-
105
- # Re-spawn guard: if the subagent returned without reaching a terminal state
106
- # (e.g. it produced large output and ran out of context mid-pipeline),
107
- # spawn once more with an explicit resume instruction before escalating.
108
- if task_status not in ["committed", "abandoned", "escalated"]:
109
- spawn_subagent(
110
- prompt="Read `.forge/workflows/orchestrate_task.md` and follow it. "
111
- "Task ID: {task.taskId}. "
112
- "The task is currently at status '{task_status}' — resume from that phase. "
113
- "Do not re-run phases that are already complete. "
114
- "Also read `engineering/MASTER_INDEX.md` for project state.",
115
- description="Resume pipeline for {task.taskId} (was {task_status})",
116
- model="sonnet"
117
- )
118
- task_status = read_task_status(task.taskId)
119
- if task_status not in ["committed", "abandoned", "escalated"]:
120
- # Two attempts exhausted — escalate and continue with remaining tasks.
121
- escalate("Task {task.taskId} did not reach terminal state after re-spawn "
122
- "(status: {task_status}). Manual intervention required.")
123
- # DO NOT compact mid re-spawn guard — compact only after final status read.
124
-
125
- # Terminal: "committed" → success. "escalated" → note and continue.
126
- # Never halt the whole sprint on one escalation.
127
-
128
- # Compact context before next task: all state is on disk
129
- remaining = count of tasks not yet in terminal status
130
- print(f"[checkpoint] sprint={SPRINT_ID} task={task.taskId} status={task_status} remaining={remaining}")
131
- /compact
132
- ```
133
-
134
- **All verdict detection, revision loops, escalation, and event emission are
135
- handled inside the task subagent.** See `orchestrate_task.md`.
136
-
137
- ### Wave-Parallel Mode
138
-
139
- For each wave in dependency order:
140
-
141
- 1. Create a git worktree per task in the wave:
142
- ```bash
143
- git worktree add ../worktrees/{TASK_ID} HEAD
144
- ```
145
- 2. Spawn one subagent per task in parallel, each running `orchestrate_task.md` inside its worktree
146
- 3. Wait for all subagents in the wave to finish
147
- 4. Merge strategy: rebase each completed worktree onto `main`; on conflict → escalate that task, continue with the rest
148
- 5. Remove worktrees:
149
- ```bash
150
- git worktree remove ../worktrees/{TASK_ID}
151
- ```
152
-
153
- ### Full-Parallel Mode
154
-
155
- Same as wave-parallel but all tasks start simultaneously. Use only when
156
- every task is independent (no dependencies at all).
157
-
158
- ## Execution Modes
159
-
160
- | Mode | Behaviour |
161
- |---|---|
162
- | `sequential` | One task at a time (default) |
163
- | `wave-parallel` | Tasks in the same dependency wave run in parallel worktrees |
164
- | `full-parallel` | All tasks run in parallel (use only when fully independent) |
165
-
166
- ## Step 4 — Post-Sprint
167
-
168
- Once all tasks have reached a terminal status:
169
-
170
- 1. Run collation using the runtime-read pattern:
171
- ```bash
172
- FORGE_ROOT=$(node -e "console.log(require('./.forge/config.json').paths.forgeRoot)")
173
- node "$FORGE_ROOT/tools/collate.cjs"
174
- ```
175
- Or —
176
- 2. Summarise outcomes:
177
- ```
178
- 🌊 Sprint {SPRINT_ID} complete.
179
- 〇 Committed: N tasks
180
- △ Escalated: N tasks
181
- ── Carried over / abandoned: N tasks
182
- ```
183
- 3. Update sprint `status` to `completed` or `partially-completed`
184
- 4. Suggest: "Run `/forge:retro {SPRINT_ID}` to close out the sprint."
185
-
186
- ## Sprint Lifecycle Hooks
187
-
188
- | Hook | When | Action |
189
- |---|---|---|
190
- | `collate` | After all tasks terminal | Run `node "$FORGE_ROOT/tools/collate.cjs"` |
191
- | `report` | After collation | Print outcome summary (committed/escalated/carried-over counts) |
192
- | `suggest` | After report | Suggest `/forge:retro {SPRINT_ID}` |
193
-
194
- ## Resume Semantics
195
-
196
- If interrupted, re-run `/forge:run-sprint {SPRINT_ID}`. Already-committed tasks are
197
- skipped. Tasks in mid-pipeline state resume from their current phase
198
- (the task-level orchestrator reads `status` from disk and continues).
199
-
200
- ## Event Emission
201
-
202
- The sprint runner itself emits `sprint-start`, `sprint-complete`, and
203
- per-task `task-dispatch` events to `.forge/store/events/{SPRINT_ID}/`.
204
- Per-phase events are emitted by `orchestrate_task.md` inside each task
205
- subagent.
206
-
207
- ## Iron Laws
208
-
209
- - Read `.forge/personas/orchestrator.md` first; print the persona identity line to stdout before any other tool use.
210
- - All store I/O via `forge_store` (or `node "$FORGE_ROOT/tools/store-cli.cjs"`). Never edit `.forge/store/*.json` directly.
211
- - Follow the Algorithm step by step. Do not skip tasks or skip the dependency sort.
212
- - Verdict detection and revision loops are handled inside task subagents — the sprint runner must not fabricate results or assume success without evidence.
213
- - Silent continuation past a failure is never acceptable. Every failure must produce a visible signal and a structured event.
214
-
215
- ## Store-Write Verification
216
-
217
- Every `forge_store` write MUST succeed before advancing. If `store-cli` exits
218
- non-zero or the `PreToolUse` write-boundary hook blocks the call (exit 2):
219
-
220
- 1. Parse the structured error (names the offending field + schema file).
221
- 2. Correct the JSON to satisfy the schema.
222
- 3. Retry. Repeat up to 3 times.
223
- 4. After 3 failures, halt and escalate with original payload, corrected payload, and all error messages.
224
-
225
- Never set `FORGE_SKIP_WRITE_VALIDATION=1` — operator-only emergency switch.