@entelligentsia/forgecli 0.19.0 → 0.20.3

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 (269) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/dist/bin/config.js +9 -9
  3. package/dist/bin/config.js.map +1 -1
  4. package/dist/bin/forge.js +3 -3
  5. package/dist/bin/forge.js.map +1 -1
  6. package/dist/bin/update-cli.js +2 -1
  7. package/dist/bin/update-cli.js.map +1 -1
  8. package/dist/extensions/forgecli/add-pipeline.js.map +1 -1
  9. package/dist/extensions/forgecli/add-task.js.map +1 -1
  10. package/dist/extensions/forgecli/approve.d.ts +2 -2
  11. package/dist/extensions/forgecli/approve.js +2 -2
  12. package/dist/extensions/forgecli/approve.js.map +1 -1
  13. package/dist/extensions/forgecli/ask-user-tool.js.map +1 -1
  14. package/dist/extensions/forgecli/audience-gate.js.map +1 -1
  15. package/dist/extensions/forgecli/calibrate.d.ts +1 -1
  16. package/dist/extensions/forgecli/calibrate.js +8 -10
  17. package/dist/extensions/forgecli/calibrate.js.map +1 -1
  18. package/dist/extensions/forgecli/collate.d.ts +2 -2
  19. package/dist/extensions/forgecli/collate.js +2 -2
  20. package/dist/extensions/forgecli/collate.js.map +1 -1
  21. package/dist/extensions/forgecli/commit.d.ts +2 -2
  22. package/dist/extensions/forgecli/commit.js +2 -2
  23. package/dist/extensions/forgecli/commit.js.map +1 -1
  24. package/dist/extensions/forgecli/config-command.js.map +1 -1
  25. package/dist/extensions/forgecli/config-layer.js +4 -2
  26. package/dist/extensions/forgecli/config-layer.js.map +1 -1
  27. package/dist/extensions/forgecli/config-tui/component.d.ts +1 -1
  28. package/dist/extensions/forgecli/config-tui/component.js +25 -21
  29. package/dist/extensions/forgecli/config-tui/component.js.map +1 -1
  30. package/dist/extensions/forgecli/config-tui/handler.js +2 -6
  31. package/dist/extensions/forgecli/config-tui/handler.js.map +1 -1
  32. package/dist/extensions/forgecli/config-tui/keys.js.map +1 -1
  33. package/dist/extensions/forgecli/config-tui/plugin-config-reader.js.map +1 -1
  34. package/dist/extensions/forgecli/config-tui/screens/advanced-menu.d.ts +2 -2
  35. package/dist/extensions/forgecli/config-tui/screens/advanced-menu.js +10 -8
  36. package/dist/extensions/forgecli/config-tui/screens/advanced-menu.js.map +1 -1
  37. package/dist/extensions/forgecli/config-tui/screens/confirm-quit.d.ts +2 -2
  38. package/dist/extensions/forgecli/config-tui/screens/confirm-quit.js +2 -5
  39. package/dist/extensions/forgecli/config-tui/screens/confirm-quit.js.map +1 -1
  40. package/dist/extensions/forgecli/config-tui/screens/override-editor.d.ts +2 -2
  41. package/dist/extensions/forgecli/config-tui/screens/override-editor.js +15 -11
  42. package/dist/extensions/forgecli/config-tui/screens/override-editor.js.map +1 -1
  43. package/dist/extensions/forgecli/config-tui/screens/overrides-list-phases.d.ts +2 -2
  44. package/dist/extensions/forgecli/config-tui/screens/overrides-list-phases.js +15 -11
  45. package/dist/extensions/forgecli/config-tui/screens/overrides-list-phases.js.map +1 -1
  46. package/dist/extensions/forgecli/config-tui/screens/overrides-list.d.ts +2 -2
  47. package/dist/extensions/forgecli/config-tui/screens/overrides-list.js +7 -4
  48. package/dist/extensions/forgecli/config-tui/screens/overrides-list.js.map +1 -1
  49. package/dist/extensions/forgecli/config-tui/screens/persona-editor.d.ts +2 -2
  50. package/dist/extensions/forgecli/config-tui/screens/persona-editor.js +6 -12
  51. package/dist/extensions/forgecli/config-tui/screens/persona-editor.js.map +1 -1
  52. package/dist/extensions/forgecli/config-tui/screens/persona-picker.d.ts +2 -2
  53. package/dist/extensions/forgecli/config-tui/screens/persona-picker.js +3 -6
  54. package/dist/extensions/forgecli/config-tui/screens/persona-picker.js.map +1 -1
  55. package/dist/extensions/forgecli/config-tui/screens/personas-list.d.ts +2 -2
  56. package/dist/extensions/forgecli/config-tui/screens/personas-list.js +2 -2
  57. package/dist/extensions/forgecli/config-tui/screens/personas-list.js.map +1 -1
  58. package/dist/extensions/forgecli/config-tui/screens/shared.d.ts +1 -1
  59. package/dist/extensions/forgecli/config-tui/screens/shared.js +4 -5
  60. package/dist/extensions/forgecli/config-tui/screens/shared.js.map +1 -1
  61. package/dist/extensions/forgecli/config-tui/screens/show-resolved.d.ts +2 -2
  62. package/dist/extensions/forgecli/config-tui/screens/show-resolved.js +9 -11
  63. package/dist/extensions/forgecli/config-tui/screens/show-resolved.js.map +1 -1
  64. package/dist/extensions/forgecli/config-tui/screens/tier-menu.d.ts +2 -2
  65. package/dist/extensions/forgecli/config-tui/screens/tier-menu.js +2 -2
  66. package/dist/extensions/forgecli/config-tui/screens/tier-menu.js.map +1 -1
  67. package/dist/extensions/forgecli/config-tui/screens/tier-picker.d.ts +2 -2
  68. package/dist/extensions/forgecli/config-tui/screens/tier-picker.js +12 -3
  69. package/dist/extensions/forgecli/config-tui/screens/tier-picker.js.map +1 -1
  70. package/dist/extensions/forgecli/config-tui/screens/types.d.ts +1 -1
  71. package/dist/extensions/forgecli/config-tui/screens.d.ts +10 -10
  72. package/dist/extensions/forgecli/config-tui/screens.js +16 -16
  73. package/dist/extensions/forgecli/config-tui/screens.js.map +1 -1
  74. package/dist/extensions/forgecli/config-tui/state/buffer.d.ts +2 -2
  75. package/dist/extensions/forgecli/config-tui/state/buffer.js +1 -2
  76. package/dist/extensions/forgecli/config-tui/state/buffer.js.map +1 -1
  77. package/dist/extensions/forgecli/config-tui/state/constants.js.map +1 -1
  78. package/dist/extensions/forgecli/config-tui/state/index.d.ts +3 -3
  79. package/dist/extensions/forgecli/config-tui/state/index.js +2 -2
  80. package/dist/extensions/forgecli/config-tui/state/index.js.map +1 -1
  81. package/dist/extensions/forgecli/config-tui/state/init.js.map +1 -1
  82. package/dist/extensions/forgecli/config-tui/state/reducer.js +2 -4
  83. package/dist/extensions/forgecli/config-tui/state/reducer.js.map +1 -1
  84. package/dist/extensions/forgecli/config-tui/state/selectors.d.ts +1 -1
  85. package/dist/extensions/forgecli/config-tui/state/selectors.js +7 -6
  86. package/dist/extensions/forgecli/config-tui/state/selectors.js.map +1 -1
  87. package/dist/extensions/forgecli/config-tui/state.d.ts +3 -3
  88. package/dist/extensions/forgecli/config-tui/state.js +2 -2
  89. package/dist/extensions/forgecli/config-tui/state.js.map +1 -1
  90. package/dist/extensions/forgecli/config-tui/theme.js +1 -1
  91. package/dist/extensions/forgecli/config-tui/theme.js.map +1 -1
  92. package/dist/extensions/forgecli/config-tui/tier-meta.js.map +1 -1
  93. package/dist/extensions/forgecli/config-writer.js +4 -2
  94. package/dist/extensions/forgecli/config-writer.js.map +1 -1
  95. package/dist/extensions/forgecli/enhance.d.ts +2 -2
  96. package/dist/extensions/forgecli/enhance.js +3 -3
  97. package/dist/extensions/forgecli/enhance.js.map +1 -1
  98. package/dist/extensions/forgecli/fix-bug.d.ts +1 -1
  99. package/dist/extensions/forgecli/fix-bug.js +148 -58
  100. package/dist/extensions/forgecli/fix-bug.js.map +1 -1
  101. package/dist/extensions/forgecli/forge-artifact-tool.d.ts +8 -1
  102. package/dist/extensions/forgecli/forge-artifact-tool.js +85 -15
  103. package/dist/extensions/forgecli/forge-artifact-tool.js.map +1 -1
  104. package/dist/extensions/forgecli/forge-commands.js.map +1 -1
  105. package/dist/extensions/forgecli/forge-header.d.ts +1 -1
  106. package/dist/extensions/forgecli/forge-header.js +1 -1
  107. package/dist/extensions/forgecli/forge-header.js.map +1 -1
  108. package/dist/extensions/forgecli/forge-init/phase-descriptors.js +14 -5
  109. package/dist/extensions/forgecli/forge-init/phase-descriptors.js.map +1 -1
  110. package/dist/extensions/forgecli/forge-init/phase4-register.js +20 -1
  111. package/dist/extensions/forgecli/forge-init/phase4-register.js.map +1 -1
  112. package/dist/extensions/forgecli/forge-init.js +5 -7
  113. package/dist/extensions/forgecli/forge-init.js.map +1 -1
  114. package/dist/extensions/forgecli/forge-subagent.d.ts +1 -1
  115. package/dist/extensions/forgecli/forge-subagent.js +4 -2
  116. package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
  117. package/dist/extensions/forgecli/forge-tools.js +10 -4
  118. package/dist/extensions/forgecli/forge-tools.js.map +1 -1
  119. package/dist/extensions/forgecli/forge-update-command.d.ts +32 -11
  120. package/dist/extensions/forgecli/forge-update-command.js +207 -155
  121. package/dist/extensions/forgecli/forge-update-command.js.map +1 -1
  122. package/dist/extensions/forgecli/friction-emit.js +3 -5
  123. package/dist/extensions/forgecli/friction-emit.js.map +1 -1
  124. package/dist/extensions/forgecli/health-check.js +10 -6
  125. package/dist/extensions/forgecli/health-check.js.map +1 -1
  126. package/dist/extensions/forgecli/hook-dispatcher.js +2 -2
  127. package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
  128. package/dist/extensions/forgecli/hooks/check-update.js.map +1 -1
  129. package/dist/extensions/forgecli/hooks/forge-permissions.js.map +1 -1
  130. package/dist/extensions/forgecli/hooks/post-init-hook.js +1 -1
  131. package/dist/extensions/forgecli/hooks/post-init-hook.js.map +1 -1
  132. package/dist/extensions/forgecli/hooks/post-sprint-hook.js +1 -1
  133. package/dist/extensions/forgecli/hooks/post-sprint-hook.js.map +1 -1
  134. package/dist/extensions/forgecli/hooks/write-guard.js +5 -3
  135. package/dist/extensions/forgecli/hooks/write-guard.js.map +1 -1
  136. package/dist/extensions/forgecli/implement.d.ts +2 -2
  137. package/dist/extensions/forgecli/implement.js +2 -2
  138. package/dist/extensions/forgecli/implement.js.map +1 -1
  139. package/dist/extensions/forgecli/index.js +47 -41
  140. package/dist/extensions/forgecli/index.js.map +1 -1
  141. package/dist/extensions/forgecli/input-router.js +4 -1
  142. package/dist/extensions/forgecli/input-router.js.map +1 -1
  143. package/dist/extensions/forgecli/lib/catalog-helpers.js +2 -1
  144. package/dist/extensions/forgecli/lib/catalog-helpers.js.map +1 -1
  145. package/dist/extensions/forgecli/lib/catalog-loader.js.map +1 -1
  146. package/dist/extensions/forgecli/lib/catalog-types.js +1 -6
  147. package/dist/extensions/forgecli/lib/catalog-types.js.map +1 -1
  148. package/dist/extensions/forgecli/lib/exec-helpers.js +1 -1
  149. package/dist/extensions/forgecli/lib/exec-helpers.js.map +1 -1
  150. package/dist/extensions/forgecli/lib/forge-config.js.map +1 -1
  151. package/dist/extensions/forgecli/lib/orchestrator-preflight.js.map +1 -1
  152. package/dist/extensions/forgecli/lib/parsers.js.map +1 -1
  153. package/dist/extensions/forgecli/lib/spawn-store-cli.js +17 -7
  154. package/dist/extensions/forgecli/lib/spawn-store-cli.js.map +1 -1
  155. package/dist/extensions/forgecli/materialize.js.map +1 -1
  156. package/dist/extensions/forgecli/migrate.js +1 -1
  157. package/dist/extensions/forgecli/migrate.js.map +1 -1
  158. package/dist/extensions/forgecli/migration-engine.js +3 -6
  159. package/dist/extensions/forgecli/migration-engine.js.map +1 -1
  160. package/dist/extensions/forgecli/model-resolver.js.map +1 -1
  161. package/dist/extensions/forgecli/model-validator.js.map +1 -1
  162. package/dist/extensions/forgecli/parsers/persona-skill-loader.js +1 -1
  163. package/dist/extensions/forgecli/parsers/workflow-loader.js +2 -6
  164. package/dist/extensions/forgecli/parsers/workflow-loader.js.map +1 -1
  165. package/dist/extensions/forgecli/paths/migrator.js +2 -7
  166. package/dist/extensions/forgecli/paths/migrator.js.map +1 -1
  167. package/dist/extensions/forgecli/plan.d.ts +2 -2
  168. package/dist/extensions/forgecli/plan.js +2 -2
  169. package/dist/extensions/forgecli/plan.js.map +1 -1
  170. package/dist/extensions/forgecli/quiz-agent.js.map +1 -1
  171. package/dist/extensions/forgecli/read-command.js +1 -1
  172. package/dist/extensions/forgecli/read-command.js.map +1 -1
  173. package/dist/extensions/forgecli/regenerate.js +1 -3
  174. package/dist/extensions/forgecli/regenerate.js.map +1 -1
  175. package/dist/extensions/forgecli/remove-command.js.map +1 -1
  176. package/dist/extensions/forgecli/report-bug.js +2 -2
  177. package/dist/extensions/forgecli/report-bug.js.map +1 -1
  178. package/dist/extensions/forgecli/retrospective.js +2 -2
  179. package/dist/extensions/forgecli/retrospective.js.map +1 -1
  180. package/dist/extensions/forgecli/review-code.d.ts +2 -2
  181. package/dist/extensions/forgecli/review-code.js +2 -2
  182. package/dist/extensions/forgecli/review-code.js.map +1 -1
  183. package/dist/extensions/forgecli/review-plan.d.ts +2 -2
  184. package/dist/extensions/forgecli/review-plan.js +2 -2
  185. package/dist/extensions/forgecli/review-plan.js.map +1 -1
  186. package/dist/extensions/forgecli/review-server.js +3 -5
  187. package/dist/extensions/forgecli/review-server.js.map +1 -1
  188. package/dist/extensions/forgecli/run-sprint.d.ts +1 -1
  189. package/dist/extensions/forgecli/run-sprint.js +27 -21
  190. package/dist/extensions/forgecli/run-sprint.js.map +1 -1
  191. package/dist/extensions/forgecli/run-task.js +102 -42
  192. package/dist/extensions/forgecli/run-task.js.map +1 -1
  193. package/dist/extensions/forgecli/session-registry.js.map +1 -1
  194. package/dist/extensions/forgecli/skill-curator-subagent.js +4 -8
  195. package/dist/extensions/forgecli/skill-curator-subagent.js.map +1 -1
  196. package/dist/extensions/forgecli/skill-retriever.js +1 -1
  197. package/dist/extensions/forgecli/skill-retriever.js.map +1 -1
  198. package/dist/extensions/forgecli/skill-usage-tracker.js +1 -1
  199. package/dist/extensions/forgecli/skill-usage-tracker.js.map +1 -1
  200. package/dist/extensions/forgecli/status-command.js.map +1 -1
  201. package/dist/extensions/forgecli/store-error-remediation.js +16 -8
  202. package/dist/extensions/forgecli/store-error-remediation.js.map +1 -1
  203. package/dist/extensions/forgecli/store-query.js.map +1 -1
  204. package/dist/extensions/forgecli/store-repair.js.map +1 -1
  205. package/dist/extensions/forgecli/store-resolver.js +1 -1
  206. package/dist/extensions/forgecli/store-resolver.js.map +1 -1
  207. package/dist/extensions/forgecli/store-validator.js +1 -1
  208. package/dist/extensions/forgecli/store-validator.js.map +1 -1
  209. package/dist/extensions/forgecli/subagent/agents.js +1 -1
  210. package/dist/extensions/forgecli/subagent/agents.js.map +1 -1
  211. package/dist/extensions/forgecli/subagent/index.js +1 -1
  212. package/dist/extensions/forgecli/subagent/index.js.map +1 -1
  213. package/dist/extensions/forgecli/test-orchestrate.js +1 -1
  214. package/dist/extensions/forgecli/test-orchestrate.js.map +1 -1
  215. package/dist/extensions/forgecli/thread-switcher.js +8 -18
  216. package/dist/extensions/forgecli/thread-switcher.js.map +1 -1
  217. package/dist/extensions/forgecli/transition-guard.js +1 -1
  218. package/dist/extensions/forgecli/transition-guard.js.map +1 -1
  219. package/dist/extensions/forgecli/update-tools.js +1 -2
  220. package/dist/extensions/forgecli/update-tools.js.map +1 -1
  221. package/dist/extensions/forgecli/validate.d.ts +2 -2
  222. package/dist/extensions/forgecli/validate.js +2 -2
  223. package/dist/extensions/forgecli/validate.js.map +1 -1
  224. package/dist/extensions/forgecli/viewport-events.js +2 -2
  225. package/dist/extensions/forgecli/viewport-events.js.map +1 -1
  226. package/dist/extensions/forgecli/wf-engine/engine.d.ts +1 -1
  227. package/dist/extensions/forgecli/wf-engine/engine.js +51 -31
  228. package/dist/extensions/forgecli/wf-engine/engine.js.map +1 -1
  229. package/dist/extensions/forgecli/wf-engine/event-parser.js.map +1 -1
  230. package/dist/extensions/forgecli/wf-engine/id-gen.js +4 -1
  231. package/dist/extensions/forgecli/wf-engine/id-gen.js.map +1 -1
  232. package/dist/extensions/forgecli/wf-engine/loader.js +7 -7
  233. package/dist/extensions/forgecli/wf-engine/loader.js.map +1 -1
  234. package/dist/extensions/forgecli/wf-engine/predicate.js +14 -7
  235. package/dist/extensions/forgecli/wf-engine/predicate.js.map +1 -1
  236. package/dist/extensions/forgecli/wf-engine/prompt-compiler.js.map +1 -1
  237. package/dist/extensions/forgecli/wf-engine/register.js +1 -1
  238. package/dist/extensions/forgecli/wf-engine/register.js.map +1 -1
  239. package/dist/extensions/forgecli/wf-engine/remit-check.js +3 -3
  240. package/dist/extensions/forgecli/wf-engine/remit-check.js.map +1 -1
  241. package/dist/extensions/forgecli/wf-engine/state-store.js +7 -3
  242. package/dist/extensions/forgecli/wf-engine/state-store.js.map +1 -1
  243. package/dist/extensions/forgecli/wf-engine/worker.js +3 -3
  244. package/dist/extensions/forgecli/wf-engine/worker.js.map +1 -1
  245. package/dist/extensions/forgecli/whats-new-widget.js +8 -6
  246. package/dist/extensions/forgecli/whats-new-widget.js.map +1 -1
  247. package/dist/extensions/forgecli/whats-new.js +1 -2
  248. package/dist/extensions/forgecli/whats-new.js.map +1 -1
  249. package/dist/forge-payload/commands/update.md +23 -1
  250. package/dist/forge-payload/schemas/_defs/phaseSummary.schema.json +18 -0
  251. package/dist/forge-payload/schemas/bug.schema.json +40 -0
  252. package/dist/forge-payload/schemas/collation-state.schema.json +16 -0
  253. package/dist/forge-payload/schemas/config.schema.json +215 -0
  254. package/dist/forge-payload/schemas/enum-catalog.json +71 -0
  255. package/dist/forge-payload/schemas/event-sidecar.schema.json +22 -0
  256. package/dist/forge-payload/schemas/event.schema.json +184 -0
  257. package/dist/forge-payload/schemas/feature.schema.json +22 -0
  258. package/dist/forge-payload/schemas/progress-entry.schema.json +16 -0
  259. package/dist/forge-payload/schemas/project-context.schema.json +167 -0
  260. package/dist/forge-payload/schemas/project-overlay.schema.json +25 -0
  261. package/dist/forge-payload/schemas/proposal.schema.json +40 -0
  262. package/dist/forge-payload/schemas/sprint.schema.json +27 -0
  263. package/dist/forge-payload/schemas/structure-versions.schema.json +57 -0
  264. package/dist/forge-payload/schemas/task.schema.json +43 -0
  265. package/dist/forge-payload/schemas/transitions/bug.json +31 -0
  266. package/dist/forge-payload/schemas/transitions/sprint.json +46 -0
  267. package/dist/forge-payload/schemas/transitions/task.json +109 -0
  268. package/dist/forge-payload/tools/manage-config.cjs +120 -2
  269. package/package.json +3 -3
@@ -0,0 +1,215 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/Entelligentsia/agentic-skills/forge/config.schema.json",
4
+ "title": "ForgeConfig",
5
+ "description": "Schema for .forge/config.json — the per-project Forge configuration file. Canonical single-source schema (FORGE-S25-T12 reconciled sdlc-config.schema.json into this file and deleted the sibling). Generated by /forge:init and refreshed by /forge:update.",
6
+ "type": "object",
7
+ "required": ["version", "project", "paths"],
8
+ "properties": {
9
+ "version": {
10
+ "type": "string",
11
+ "description": "Config schema version (e.g. '1.0'). Used for migration support."
12
+ },
13
+ "project": {
14
+ "type": "object",
15
+ "required": ["prefix", "name"],
16
+ "properties": {
17
+ "prefix": {
18
+ "type": "string",
19
+ "description": "Short prefix for task/sprint/bug IDs (e.g. ACME)"
20
+ },
21
+ "name": {
22
+ "type": "string",
23
+ "description": "Human-readable project name"
24
+ },
25
+ "description": {
26
+ "type": "string",
27
+ "description": "One-line project description"
28
+ }
29
+ }
30
+ },
31
+ "stack": {
32
+ "type": "object",
33
+ "description": "Detected/declared project technology stack. Optional fields nullable because not every project ships e.g. a frontend or task queue.",
34
+ "properties": {
35
+ "languages": {
36
+ "type": "array",
37
+ "items": { "type": "string" },
38
+ "description": "Primary languages detected"
39
+ },
40
+ "framework": { "type": ["string", "null"], "description": "Primary backend framework" },
41
+ "frontendFramework": { "type": ["string", "null"], "description": "Frontend framework if detected" },
42
+ "database": { "type": ["string", "null"], "description": "Primary database" },
43
+ "taskQueue": { "type": ["string", "null"], "description": "Task queue if detected (celery, sidekiq, etc.)" },
44
+ "containerisation": { "type": ["string", "null"], "description": "Container tooling if detected" }
45
+ }
46
+ },
47
+ "commands": {
48
+ "type": "object",
49
+ "description": "Resolved project tooling commands. Workflows reference these via {COMMAND_TEST} / {LINT_COMMAND} placeholders.",
50
+ "properties": {
51
+ "test": { "type": "string" },
52
+ "build": { "type": "string" },
53
+ "lint": { "type": "string" },
54
+ "syntaxCheck": {
55
+ "type": "object",
56
+ "additionalProperties": { "type": "string" }
57
+ },
58
+ "migrate": { "type": "string" },
59
+ "migrateCheck": { "type": "string" }
60
+ }
61
+ },
62
+ "paths": {
63
+ "type": "object",
64
+ "required": ["engineering", "store", "forgeRoot"],
65
+ "properties": {
66
+ "engineering": { "type": "string", "default": "engineering" },
67
+ "store": { "type": "string", "default": ".forge/store" },
68
+ "workflows": { "type": "string", "default": ".forge/workflows" },
69
+ "commands": { "type": "string", "default": ".claude/commands" },
70
+ "templates": { "type": "string", "default": ".forge/templates" },
71
+ "customCommands": { "type": "string", "default": "engineering/commands", "description": "Directory for project-specific custom pipeline phase commands. Files here are workflow scripts invoked directly by the orchestrator via the phase workflow field." },
72
+ "forgeRoot": { "type": "string", "description": "Absolute path to the installed Forge plugin root. Set at init time and refreshed by /forge:update. Used by generated workflows to invoke Forge tools without requiring $CLAUDE_PLUGIN_ROOT in subagent contexts." },
73
+ "forgeRef": { "type": "string", "description": "Pinned Forge plugin reference (tag or commit) the project was generated against." }
74
+ }
75
+ },
76
+ "pipeline": {
77
+ "type": "object",
78
+ "description": "Optional pipeline customisation for the default pipeline",
79
+ "properties": {
80
+ "skipPhases": {
81
+ "type": "array",
82
+ "items": { "type": "string" }
83
+ },
84
+ "maxReviewIterations": {
85
+ "type": "integer",
86
+ "minimum": 1,
87
+ "default": 3
88
+ },
89
+ "includeTokenDataInBugReports": {
90
+ "type": "boolean",
91
+ "description": "If set, silently opt in (true) or out (false) of appending sprint token usage data to Forge bug reports. When absent, the user is prompted at report time."
92
+ }
93
+ }
94
+ },
95
+ "pipelines": {
96
+ "type": "object",
97
+ "description": "Named pipeline definitions. Each key is a pipeline name that tasks can reference via their `pipeline` field. The `default` pipeline is used when a task has no `pipeline` field. Projects define custom pipelines to route tasks to specialized agent commands.",
98
+ "additionalProperties": {
99
+ "type": "object",
100
+ "required": ["phases"],
101
+ "properties": {
102
+ "description": {
103
+ "type": "string",
104
+ "description": "Human-readable description of when to use this pipeline"
105
+ },
106
+ "phases": {
107
+ "type": "array",
108
+ "description": "Ordered list of pipeline phases. Each phase maps to a slash command.",
109
+ "items": {
110
+ "type": "object",
111
+ "required": ["command", "role"],
112
+ "properties": {
113
+ "command": {
114
+ "type": "string",
115
+ "description": "Slash command name (without /) to invoke for this phase"
116
+ },
117
+ "role": {
118
+ "type": "string",
119
+ "enum": ["plan", "review-plan", "implement", "review-code", "validate", "approve", "commit"],
120
+ "description": "Semantic role of this phase in the pipeline lifecycle"
121
+ },
122
+ "model": {
123
+ "type": "string",
124
+ "description": "Optional model override for this phase"
125
+ },
126
+ "maxIterations": {
127
+ "type": "integer",
128
+ "description": "Max revision loop iterations for review phases",
129
+ "default": 3
130
+ },
131
+ "on_revision": {
132
+ "type": "string",
133
+ "description": "Command name of the phase to re-invoke on 'Revision Required'. Defaults to the nearest preceding non-review phase if omitted."
134
+ },
135
+ "workflow": {
136
+ "type": "string",
137
+ "description": "Optional path to a workflow file. When set, the orchestrator reads and follows this file directly instead of deriving the workflow from the command name. Use for custom phase commands in engineering/commands/."
138
+ }
139
+ }
140
+ }
141
+ }
142
+ }
143
+ }
144
+ },
145
+ "installedSkills": {
146
+ "type": "array",
147
+ "items": { "type": "string" },
148
+ "description": "Marketplace skill names installed during forge:init or recommended by forge:health. Used to wire skill invocations into generated personas and workflows.",
149
+ "examples": ["vue-best-practices", "stripe-integration", "claude-api"]
150
+ },
151
+ "sprint": {
152
+ "type": "object",
153
+ "description": "Optional sprint execution configuration",
154
+ "properties": {
155
+ "execution": {
156
+ "type": "object",
157
+ "properties": {
158
+ "mode": {
159
+ "type": "string",
160
+ "enum": ["sequential", "wave-parallel", "full-parallel"],
161
+ "default": "sequential"
162
+ },
163
+ "maxConcurrentAgents": {
164
+ "type": "integer",
165
+ "default": 3
166
+ }
167
+ }
168
+ }
169
+ }
170
+ },
171
+ "calibrationBaseline": {
172
+ "type": "object",
173
+ "description": "Calibration baseline written by /forge:init after skill generation. Records the state at calibration time so /forge:calibrate can detect drift.",
174
+ "properties": {
175
+ "lastCalibrated": { "type": "string", "description": "ISO date (YYYY-MM-DD) of the last calibration run" },
176
+ "version": { "type": "string", "description": "Plugin version string at calibration time (e.g. 0.9.3)" },
177
+ "masterIndexHash": { "type": "string", "description": "SHA-256 hex digest of the semantic content of engineering/MASTER_INDEX.md at calibration time" },
178
+ "sprintsCovered": { "type": "array", "items": { "type": "string" }, "description": "Sprint IDs whose tasks and outcomes were included in the calibration baseline" }
179
+ }
180
+ },
181
+ "calibrationHistory": {
182
+ "type": "array",
183
+ "description": "Audit trail of calibration runs. Each entry records the drift categories detected and the patches applied.",
184
+ "items": {
185
+ "type": "object",
186
+ "required": ["date", "version", "categories", "patches"],
187
+ "additionalProperties": false,
188
+ "properties": {
189
+ "date": { "type": "string", "description": "ISO date (YYYY-MM-DD) of this calibration run" },
190
+ "version": { "type": "string", "description": "Plugin version at calibration time" },
191
+ "categories": { "type": "array", "items": { "type": "string" }, "description": "Drift categories detected: technical, business, retrospective, acceptance-criteria" },
192
+ "patches": {
193
+ "type": "array",
194
+ "items": {
195
+ "type": "object",
196
+ "required": ["target", "type", "applied"],
197
+ "additionalProperties": false,
198
+ "properties": {
199
+ "target": { "type": "string", "description": "Regeneration target (e.g. personas:engineer, skills:supervisor-skills)" },
200
+ "type": { "type": "string", "enum": ["regenerate"], "description": "Patch type (currently only 'regenerate' is supported)" },
201
+ "applied": { "type": "boolean", "description": "Whether this patch was applied (true if approved and succeeded, false if skipped or failed)" }
202
+ }
203
+ }
204
+ }
205
+ }
206
+ }
207
+ },
208
+ "mode": {
209
+ "type": "string",
210
+ "enum": ["full", "fast"],
211
+ "description": "Init mode. 'fast' means scaffolding was generated by /forge:init --fast (stubs present, heavy artifacts deferred to first use). 'full' means all artifacts are generated. Absent on pre-0.12 projects — treated as 'full' by all readers. Flipped to 'full' by /forge:regenerate (default) or /forge:materialize --all."
212
+ }
213
+ },
214
+ "additionalProperties": false
215
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "version": "0.51.1",
3
+ "generated": "2026-05-23",
4
+ "note": "Authoritative enum catalog. Source: build-enum-catalog.cjs. Regenerate via node forge/tools/build-manifest.cjs.",
5
+ "enums": {
6
+ "task.status": [
7
+ "draft",
8
+ "planned",
9
+ "plan-approved",
10
+ "implementing",
11
+ "implemented",
12
+ "review-approved",
13
+ "approved",
14
+ "committed",
15
+ "plan-revision-required",
16
+ "code-revision-required",
17
+ "blocked",
18
+ "escalated",
19
+ "abandoned"
20
+ ],
21
+ "sprint.status": [
22
+ "planning",
23
+ "active",
24
+ "completed",
25
+ "retrospective-done",
26
+ "blocked",
27
+ "partially-completed",
28
+ "abandoned"
29
+ ],
30
+ "bug.status": [
31
+ "reported",
32
+ "triaged",
33
+ "in-progress",
34
+ "fixed"
35
+ ]
36
+ },
37
+ "commandNames": [
38
+ "forge:sprint-intake",
39
+ "forge:plan",
40
+ "forge:review-plan",
41
+ "forge:implement",
42
+ "forge:review-code",
43
+ "forge:fix-bug",
44
+ "forge:sprint-plan",
45
+ "forge:run-task",
46
+ "forge:run-sprint",
47
+ "forge:collate",
48
+ "forge:retrospective",
49
+ "forge:approve",
50
+ "forge:commit",
51
+ "forge:enhance",
52
+ "forge:quiz-agent",
53
+ "forge:validate",
54
+ "forge:init",
55
+ "forge:health",
56
+ "forge:regenerate",
57
+ "forge:update",
58
+ "forge:add-task",
59
+ "forge:add-pipeline",
60
+ "forge:calibrate",
61
+ "forge:materialize",
62
+ "forge:remove",
63
+ "forge:report-bug",
64
+ "forge:store-query",
65
+ "forge:store-repair",
66
+ "forge:config",
67
+ "forge:ask",
68
+ "forge:store-custodian",
69
+ "forge:refresh-kb-links"
70
+ ]
71
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "forge/event-sidecar.schema.json",
4
+ "title": "Event Sidecar",
5
+ "description": "Subset of event schema — token/cost/duration fields written by agents before canonical merge. All fields other than eventId are optional; presence enforcement happens on the canonical event, not the sidecar.",
6
+ "type": "object",
7
+ "required": ["eventId"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "eventId": { "type": "string", "minLength": 1 },
11
+ "inputTokens": { "type": "integer", "minimum": 0 },
12
+ "outputTokens": { "type": "integer", "minimum": 0 },
13
+ "cacheReadTokens": { "type": "integer", "minimum": 0 },
14
+ "cacheWriteTokens": { "type": "integer", "minimum": 0 },
15
+ "model": { "type": "string", "maxLength": 120 },
16
+ "provider": { "type": "string", "maxLength": 60 },
17
+ "durationMinutes": { "type": "number", "minimum": 0 },
18
+ "startTimestamp": { "type": "string", "format": "date-time" },
19
+ "endTimestamp": { "type": "string", "format": "date-time" },
20
+ "tokenSource": { "type": "string", "enum": ["reported", "estimated"] }
21
+ }
22
+ }
@@ -0,0 +1,184 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "forge/event.schema.json",
4
+ "title": "Event",
5
+ "type": "object",
6
+ "required": [
7
+ "eventId", "sprintId", "role", "action",
8
+ "startTimestamp", "endTimestamp", "durationMinutes", "model", "provider"
9
+ ],
10
+ "properties": {
11
+ "eventId": { "type": "string" },
12
+ "taskId": { "type": "string" },
13
+ "bugId": { "type": "string" },
14
+ "sprintId": { "type": "string" },
15
+ "role": { "type": "string" },
16
+ "action": { "type": "string" },
17
+ "phase": { "type": "string" },
18
+ "iteration": { "type": "integer", "minimum": 1 },
19
+ "startTimestamp": { "type": "string", "format": "date-time" },
20
+ "endTimestamp": { "type": "string", "format": "date-time" },
21
+ "durationMinutes": { "type": "number", "minimum": 0 },
22
+ "model": { "type": "string" },
23
+ "provider": { "type": "string", "maxLength": 60 },
24
+ "verdict": { "type": "string" },
25
+ "notes": { "type": "string" },
26
+ "inputTokens": { "type": "integer", "minimum": 0 },
27
+ "outputTokens": { "type": "integer", "minimum": 0 },
28
+ "cacheReadTokens": { "type": "integer", "minimum": 0 },
29
+ "cacheWriteTokens": { "type": "integer", "minimum": 0 },
30
+ "tokenSource": { "type": "string", "enum": ["reported", "estimated"] },
31
+
32
+ "resolution": {
33
+ "type": "object",
34
+ "properties": {
35
+ "status": { "type": "string", "enum": ["open", "resolved", "wontfix", "deferred"] },
36
+ "resolvedBy": { "type": "string" },
37
+ "resolvedAt": { "type": "string", "format": "date-time" },
38
+ "proposalRef": { "type": "string" },
39
+ "bugRef": { "type": "string" }
40
+ },
41
+ "required": ["status"],
42
+ "additionalProperties": false
43
+ },
44
+
45
+ "type": {
46
+ "type": "string",
47
+ "enum": [
48
+ "friction",
49
+ "task-planned",
50
+ "plan-complete",
51
+ "plan-approved",
52
+ "task-implemented",
53
+ "review-passed",
54
+ "review-failed",
55
+ "task-approved",
56
+ "task-validated",
57
+ "task-committed",
58
+ "sprint-complete",
59
+ "sprint-halted",
60
+ "bug-fixed",
61
+
62
+ "bug-triaged", "fix-planned", "fix-review-passed", "fix-review-failed",
63
+ "fix-implemented", "fix-code-review-passed", "fix-code-review-failed",
64
+ "fix-approved", "bug-committed",
65
+
66
+ "skill_usage"
67
+ ]
68
+ },
69
+ "workflow": { "type": "string" },
70
+ "persona": { "type": "string" },
71
+ "issue": { "type": "string" },
72
+ "subkind": {
73
+ "type": "string",
74
+ "pattern": "^(skill_unused|skill_failed|skill_missing|skill_stale|skill_redundant|x_[a-z_]+)$"
75
+ },
76
+ "evidence": {
77
+ "type": "object",
78
+ "properties": {
79
+ "trajectory_excerpt": { "type": "string" },
80
+ "tool_errors": { "type": "array", "items": { "type": "string" } },
81
+ "retrieval_score": { "type": "number", "minimum": 0, "maximum": 1 },
82
+ "skillId": { "type": "string" }
83
+ },
84
+ "additionalProperties": false
85
+ },
86
+
87
+ "taskCount": { "type": "integer", "minimum": 0 },
88
+ "completedTaskIds": { "type": "array", "items": { "type": "string" } },
89
+ "pausedAfterTaskIndex": { "type": "integer", "minimum": 0 },
90
+ "haltedAtTaskIndex": { "type": "integer", "minimum": 0 },
91
+ "haltedAtTaskId": { "type": "string" },
92
+ "lastError": { "type": "string" },
93
+ "waveCount": { "type": "integer", "minimum": 1 },
94
+ "maxConcurrency": { "type": "integer", "minimum": 1 },
95
+
96
+ "skillId": { "type": "string", "minLength": 1 },
97
+ "retrieved": { "type": "boolean" },
98
+ "used": { "type": "boolean" },
99
+ "tool_call_success_rate": { "type": "number", "minimum": 0, "maximum": 1 },
100
+ "retrieval_score": { "type": "number", "minimum": 0, "maximum": 1 }
101
+ },
102
+ "additionalProperties": false,
103
+ "allOf": [
104
+ {
105
+ "if": { "properties": { "type": { "const": "friction" } }, "required": ["type"] },
106
+ "then": { "required": ["workflow", "persona", "issue"] }
107
+ },
108
+ {
109
+ "if": {
110
+ "properties": {
111
+ "type": {
112
+ "enum": [
113
+ "task-planned", "plan-complete", "plan-approved",
114
+ "task-implemented", "review-passed", "review-failed",
115
+ "task-approved", "task-validated", "task-committed"
116
+ ]
117
+ }
118
+ },
119
+ "required": ["type"]
120
+ },
121
+ "then": { "required": ["taskId", "phase", "iteration"] }
122
+ },
123
+ {
124
+ "if": {
125
+ "properties": {
126
+ "type": {
127
+ "enum": [
128
+ "bug-triaged", "fix-planned", "fix-review-passed", "fix-review-failed",
129
+ "fix-implemented", "fix-code-review-passed", "fix-code-review-failed",
130
+ "fix-approved", "bug-committed", "bug-fixed"
131
+ ]
132
+ }
133
+ },
134
+ "required": ["type"]
135
+ },
136
+ "then": { "required": ["bugId", "phase", "iteration"] }
137
+ },
138
+ {
139
+ "if": { "properties": { "type": { "const": "sprint-complete" } }, "required": ["type"] },
140
+ "then": {
141
+ "required": [
142
+ "eventId", "sprintId", "role", "action",
143
+ "startTimestamp", "endTimestamp", "durationMinutes",
144
+ "model", "provider",
145
+ "taskCount", "completedTaskIds", "verdict"
146
+ ],
147
+ "properties": {
148
+ "taskCount": { "type": "integer", "minimum": 0 },
149
+ "completedTaskIds": { "type": "array", "items": { "type": "string" } },
150
+ "verdict": { "type": "string", "enum": ["complete", "partial"] },
151
+ "pausedAfterTaskIndex": { "type": "integer", "minimum": 0 },
152
+ "waveCount": { "type": "integer", "minimum": 1 },
153
+ "maxConcurrency": { "type": "integer", "minimum": 1 }
154
+ }
155
+ }
156
+ },
157
+ {
158
+ "if": { "properties": { "type": { "const": "sprint-halted" } }, "required": ["type"] },
159
+ "then": {
160
+ "required": [
161
+ "eventId", "sprintId", "role", "action",
162
+ "startTimestamp", "endTimestamp", "durationMinutes",
163
+ "model", "provider",
164
+ "haltedAtTaskIndex", "haltedAtTaskId", "lastError"
165
+ ],
166
+ "properties": {
167
+ "haltedAtTaskIndex": { "type": "integer", "minimum": 0 },
168
+ "haltedAtTaskId": { "type": "string" },
169
+ "lastError": { "type": "string" }
170
+ }
171
+ }
172
+ },
173
+ {
174
+ "if": { "properties": { "type": { "const": "skill_usage" } }, "required": ["type"] },
175
+ "then": {
176
+ "required": [
177
+ "eventId", "sprintId", "taskId",
178
+ "skillId", "retrieved", "used",
179
+ "tool_call_success_rate", "retrieval_score"
180
+ ]
181
+ }
182
+ }
183
+ ]
184
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "forge/feature.schema.json",
4
+ "title": "Feature",
5
+ "type": "object",
6
+ "required": ["id", "title", "status", "created_at"],
7
+ "properties": {
8
+ "id": { "type": "string" },
9
+ "title": { "type": "string" },
10
+ "description": { "type": "string" },
11
+ "status": {
12
+ "type": "string",
13
+ "enum": ["draft", "active", "shipped", "retired"]
14
+ },
15
+ "requirements": { "type": "array", "items": { "type": "string" } },
16
+ "sprints": { "type": "array", "items": { "type": "string" } },
17
+ "tasks": { "type": "array", "items": { "type": "string" } },
18
+ "created_at": { "type": "string", "format": "date-time" },
19
+ "updated_at": { "type": "string", "format": "date-time" }
20
+ },
21
+ "additionalProperties": false
22
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "forge/progress-entry.schema.json",
4
+ "title": "Progress Entry",
5
+ "description": "One line of progress.log, parsed from pipe-delimited fields: timestamp|agentName|bannerKey|status|detail",
6
+ "type": "object",
7
+ "required": ["timestamp", "agentName", "bannerKey", "status"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "timestamp": { "type": "string", "format": "date-time" },
11
+ "agentName": { "type": "string", "pattern": "^[a-z0-9][a-z0-9_-]{0,63}$" },
12
+ "bannerKey": { "type": "string", "pattern": "^[a-z0-9][a-z0-9_.:-]{0,127}$" },
13
+ "status": { "type": "string", "enum": ["start", "progress", "done", "error"] },
14
+ "detail": { "type": "string", "maxLength": 500 }
15
+ }
16
+ }