forgecraft-mcp 1.3.2 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/README.md +2 -2
  2. package/dist/analyzers/anchors/anchor-loader.d.ts +47 -0
  3. package/dist/analyzers/anchors/anchor-loader.d.ts.map +1 -0
  4. package/dist/analyzers/anchors/anchor-loader.js +113 -0
  5. package/dist/analyzers/anchors/anchor-loader.js.map +1 -0
  6. package/dist/analyzers/anti-pattern.d.ts.map +1 -1
  7. package/dist/analyzers/anti-pattern.js +38 -26
  8. package/dist/analyzers/anti-pattern.js.map +1 -1
  9. package/dist/analyzers/completeness-helpers.d.ts +5 -0
  10. package/dist/analyzers/completeness-helpers.d.ts.map +1 -1
  11. package/dist/analyzers/completeness-helpers.js +17 -0
  12. package/dist/analyzers/completeness-helpers.js.map +1 -1
  13. package/dist/analyzers/completeness.d.ts.map +1 -1
  14. package/dist/analyzers/completeness.js +4 -4
  15. package/dist/analyzers/completeness.js.map +1 -1
  16. package/dist/analyzers/gs-scorer.d.ts +3 -1
  17. package/dist/analyzers/gs-scorer.d.ts.map +1 -1
  18. package/dist/analyzers/gs-scorer.js +5 -2
  19. package/dist/analyzers/gs-scorer.js.map +1 -1
  20. package/dist/analyzers/scorers/composable-scorer.d.ts +4 -2
  21. package/dist/analyzers/scorers/composable-scorer.d.ts.map +1 -1
  22. package/dist/analyzers/scorers/composable-scorer.js +50 -2
  23. package/dist/analyzers/scorers/composable-scorer.js.map +1 -1
  24. package/dist/analyzers/scorers/executable-scorer.d.ts +3 -2
  25. package/dist/analyzers/scorers/executable-scorer.d.ts.map +1 -1
  26. package/dist/analyzers/scorers/executable-scorer.js +64 -4
  27. package/dist/analyzers/scorers/executable-scorer.js.map +1 -1
  28. package/dist/analyzers/scorers/scorer-utils.d.ts +5 -3
  29. package/dist/analyzers/scorers/scorer-utils.d.ts.map +1 -1
  30. package/dist/analyzers/scorers/scorer-utils.js +34 -9
  31. package/dist/analyzers/scorers/scorer-utils.js.map +1 -1
  32. package/dist/analyzers/scorers/self-describing-scorer.d.ts +7 -4
  33. package/dist/analyzers/scorers/self-describing-scorer.d.ts.map +1 -1
  34. package/dist/analyzers/scorers/self-describing-scorer.js +17 -18
  35. package/dist/analyzers/scorers/self-describing-scorer.js.map +1 -1
  36. package/dist/artifacts/commit-hooks.d.ts +1 -1
  37. package/dist/artifacts/commit-hooks.d.ts.map +1 -1
  38. package/dist/artifacts/commit-hooks.js +2 -0
  39. package/dist/artifacts/commit-hooks.js.map +1 -1
  40. package/dist/cli/commands.d.ts +35 -1
  41. package/dist/cli/commands.d.ts.map +1 -1
  42. package/dist/cli/commands.js +109 -2
  43. package/dist/cli/commands.js.map +1 -1
  44. package/dist/cli/help.d.ts.map +1 -1
  45. package/dist/cli/help.js +7 -0
  46. package/dist/cli/help.js.map +1 -1
  47. package/dist/cli.d.ts.map +1 -1
  48. package/dist/cli.js +10 -1
  49. package/dist/cli.js.map +1 -1
  50. package/dist/disciplines/catalog.d.ts +16 -0
  51. package/dist/disciplines/catalog.d.ts.map +1 -0
  52. package/dist/disciplines/catalog.js +196 -0
  53. package/dist/disciplines/catalog.js.map +1 -0
  54. package/dist/disciplines/runner.d.ts +13 -0
  55. package/dist/disciplines/runner.d.ts.map +1 -0
  56. package/dist/disciplines/runner.js +35 -0
  57. package/dist/disciplines/runner.js.map +1 -0
  58. package/dist/registry/remote-gates.js +1 -1
  59. package/dist/registry/remote-gates.js.map +1 -1
  60. package/dist/sentinel/detect.d.ts +41 -0
  61. package/dist/sentinel/detect.d.ts.map +1 -0
  62. package/dist/sentinel/detect.js +122 -0
  63. package/dist/sentinel/detect.js.map +1 -0
  64. package/dist/sentinel/write.d.ts +54 -0
  65. package/dist/sentinel/write.d.ts.map +1 -0
  66. package/dist/sentinel/write.js +75 -0
  67. package/dist/sentinel/write.js.map +1 -0
  68. package/dist/shared/cnt-health.d.ts.map +1 -1
  69. package/dist/shared/cnt-health.js +12 -4
  70. package/dist/shared/cnt-health.js.map +1 -1
  71. package/dist/shared/config.d.ts +8 -0
  72. package/dist/shared/config.d.ts.map +1 -1
  73. package/dist/shared/config.js +23 -0
  74. package/dist/shared/config.js.map +1 -1
  75. package/dist/shared/project-gates-helpers.d.ts +9 -0
  76. package/dist/shared/project-gates-helpers.d.ts.map +1 -1
  77. package/dist/shared/project-gates-helpers.js +35 -0
  78. package/dist/shared/project-gates-helpers.js.map +1 -1
  79. package/dist/shared/result-utils.d.ts +27 -0
  80. package/dist/shared/result-utils.d.ts.map +1 -0
  81. package/dist/shared/result-utils.js +41 -0
  82. package/dist/shared/result-utils.js.map +1 -0
  83. package/dist/shared/types/config.d.ts +7 -1
  84. package/dist/shared/types/config.d.ts.map +1 -1
  85. package/dist/shared/types/gates.d.ts +28 -0
  86. package/dist/shared/types/gates.d.ts.map +1 -1
  87. package/dist/shared/types/project.d.ts +66 -0
  88. package/dist/shared/types/project.d.ts.map +1 -1
  89. package/dist/shared/types/project.js.map +1 -1
  90. package/dist/shared/types/verify.d.ts +51 -1
  91. package/dist/shared/types/verify.d.ts.map +1 -1
  92. package/dist/shared/types/verify.js +37 -1
  93. package/dist/shared/types/verify.js.map +1 -1
  94. package/dist/tools/advise-session-advisor.d.ts +16 -0
  95. package/dist/tools/advise-session-advisor.d.ts.map +1 -0
  96. package/dist/tools/advise-session-advisor.js +89 -0
  97. package/dist/tools/advise-session-advisor.js.map +1 -0
  98. package/dist/tools/advise-session-signals.d.ts +21 -0
  99. package/dist/tools/advise-session-signals.d.ts.map +1 -0
  100. package/dist/tools/advise-session-signals.js +113 -0
  101. package/dist/tools/advise-session-signals.js.map +1 -0
  102. package/dist/tools/advise-session.d.ts +22 -0
  103. package/dist/tools/advise-session.d.ts.map +1 -0
  104. package/dist/tools/advise-session.js +31 -0
  105. package/dist/tools/advise-session.js.map +1 -0
  106. package/dist/tools/change-request.d.ts +53 -0
  107. package/dist/tools/change-request.d.ts.map +1 -0
  108. package/dist/tools/change-request.js +375 -0
  109. package/dist/tools/change-request.js.map +1 -0
  110. package/dist/tools/check-cascade-contracts.d.ts +13 -0
  111. package/dist/tools/check-cascade-contracts.d.ts.map +1 -1
  112. package/dist/tools/check-cascade-contracts.js +73 -2
  113. package/dist/tools/check-cascade-contracts.js.map +1 -1
  114. package/dist/tools/check-cascade.d.ts +4 -3
  115. package/dist/tools/check-cascade.d.ts.map +1 -1
  116. package/dist/tools/check-cascade.js +30 -12
  117. package/dist/tools/check-cascade.js.map +1 -1
  118. package/dist/tools/check-spec-consistency.d.ts +25 -0
  119. package/dist/tools/check-spec-consistency.d.ts.map +1 -0
  120. package/dist/tools/check-spec-consistency.js +339 -0
  121. package/dist/tools/check-spec-consistency.js.map +1 -0
  122. package/dist/tools/check-t4.d.ts +54 -0
  123. package/dist/tools/check-t4.d.ts.map +1 -0
  124. package/dist/tools/check-t4.js +305 -0
  125. package/dist/tools/check-t4.js.map +1 -0
  126. package/dist/tools/close-cycle-helpers.d.ts +21 -2
  127. package/dist/tools/close-cycle-helpers.d.ts.map +1 -1
  128. package/dist/tools/close-cycle-helpers.js +66 -10
  129. package/dist/tools/close-cycle-helpers.js.map +1 -1
  130. package/dist/tools/close-cycle.d.ts +2 -2
  131. package/dist/tools/close-cycle.d.ts.map +1 -1
  132. package/dist/tools/close-cycle.js +342 -4
  133. package/dist/tools/close-cycle.js.map +1 -1
  134. package/dist/tools/consolidate-status.d.ts +112 -0
  135. package/dist/tools/consolidate-status.d.ts.map +1 -0
  136. package/dist/tools/consolidate-status.js +356 -0
  137. package/dist/tools/consolidate-status.js.map +1 -0
  138. package/dist/tools/executable-gates.d.ts +52 -0
  139. package/dist/tools/executable-gates.d.ts.map +1 -0
  140. package/dist/tools/executable-gates.js +332 -0
  141. package/dist/tools/executable-gates.js.map +1 -0
  142. package/dist/tools/forgecraft-dispatch-extended.d.ts.map +1 -1
  143. package/dist/tools/forgecraft-dispatch-extended.js +75 -0
  144. package/dist/tools/forgecraft-dispatch-extended.js.map +1 -1
  145. package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
  146. package/dist/tools/forgecraft-dispatch.js +21 -0
  147. package/dist/tools/forgecraft-dispatch.js.map +1 -1
  148. package/dist/tools/forgecraft-router.d.ts +8 -0
  149. package/dist/tools/forgecraft-router.d.ts.map +1 -1
  150. package/dist/tools/forgecraft-router.js +21 -1
  151. package/dist/tools/forgecraft-router.js.map +1 -1
  152. package/dist/tools/forgecraft-schema-params.d.ts +61 -4
  153. package/dist/tools/forgecraft-schema-params.d.ts.map +1 -1
  154. package/dist/tools/forgecraft-schema-params.js +95 -0
  155. package/dist/tools/forgecraft-schema-params.js.map +1 -1
  156. package/dist/tools/forgecraft-schema.d.ts +62 -5
  157. package/dist/tools/forgecraft-schema.d.ts.map +1 -1
  158. package/dist/tools/forgecraft-schema.js +24 -0
  159. package/dist/tools/forgecraft-schema.js.map +1 -1
  160. package/dist/tools/gate-violations.d.ts +59 -0
  161. package/dist/tools/gate-violations.d.ts.map +1 -0
  162. package/dist/tools/gate-violations.js +152 -0
  163. package/dist/tools/gate-violations.js.map +1 -0
  164. package/dist/tools/generate-adr.js +6 -6
  165. package/dist/tools/generate-adr.js.map +1 -1
  166. package/dist/tools/generate-env-probe.d.ts +49 -0
  167. package/dist/tools/generate-env-probe.d.ts.map +1 -0
  168. package/dist/tools/generate-env-probe.js +365 -0
  169. package/dist/tools/generate-env-probe.js.map +1 -0
  170. package/dist/tools/generate-harness.d.ts +52 -0
  171. package/dist/tools/generate-harness.d.ts.map +1 -0
  172. package/dist/tools/generate-harness.js +333 -0
  173. package/dist/tools/generate-harness.js.map +1 -0
  174. package/dist/tools/generate-roadmap.d.ts +1 -1
  175. package/dist/tools/generate-roadmap.d.ts.map +1 -1
  176. package/dist/tools/generate-roadmap.js +38 -4
  177. package/dist/tools/generate-roadmap.js.map +1 -1
  178. package/dist/tools/generate-session-prompt.d.ts +4 -4
  179. package/dist/tools/generate-session-prompt.d.ts.map +1 -1
  180. package/dist/tools/generate-session-prompt.js +66 -16
  181. package/dist/tools/generate-session-prompt.js.map +1 -1
  182. package/dist/tools/generate-slo-probe.d.ts +53 -0
  183. package/dist/tools/generate-slo-probe.d.ts.map +1 -0
  184. package/dist/tools/generate-slo-probe.js +366 -0
  185. package/dist/tools/generate-slo-probe.js.map +1 -0
  186. package/dist/tools/layer-status-gates.d.ts +24 -0
  187. package/dist/tools/layer-status-gates.d.ts.map +1 -0
  188. package/dist/tools/layer-status-gates.js +151 -0
  189. package/dist/tools/layer-status-gates.js.map +1 -0
  190. package/dist/tools/layer-status.d.ts +133 -0
  191. package/dist/tools/layer-status.d.ts.map +1 -0
  192. package/dist/tools/layer-status.js +593 -0
  193. package/dist/tools/layer-status.js.map +1 -0
  194. package/dist/tools/postcondition-coverage.d.ts +57 -0
  195. package/dist/tools/postcondition-coverage.d.ts.map +1 -0
  196. package/dist/tools/postcondition-coverage.js +256 -0
  197. package/dist/tools/postcondition-coverage.js.map +1 -0
  198. package/dist/tools/probe-runners.d.ts +21 -0
  199. package/dist/tools/probe-runners.d.ts.map +1 -0
  200. package/dist/tools/probe-runners.js +246 -0
  201. package/dist/tools/probe-runners.js.map +1 -0
  202. package/dist/tools/probe-templates.d.ts +27 -0
  203. package/dist/tools/probe-templates.d.ts.map +1 -0
  204. package/dist/tools/probe-templates.js +279 -0
  205. package/dist/tools/probe-templates.js.map +1 -0
  206. package/dist/tools/propose-session.d.ts +28 -0
  207. package/dist/tools/propose-session.d.ts.map +1 -0
  208. package/dist/tools/propose-session.js +333 -0
  209. package/dist/tools/propose-session.js.map +1 -0
  210. package/dist/tools/roadmap-builder.d.ts +34 -1
  211. package/dist/tools/roadmap-builder.d.ts.map +1 -1
  212. package/dist/tools/roadmap-builder.js +153 -11
  213. package/dist/tools/roadmap-builder.js.map +1 -1
  214. package/dist/tools/run-env-probe.d.ts +57 -0
  215. package/dist/tools/run-env-probe.d.ts.map +1 -0
  216. package/dist/tools/run-env-probe.js +270 -0
  217. package/dist/tools/run-env-probe.js.map +1 -0
  218. package/dist/tools/run-harness.d.ts +52 -0
  219. package/dist/tools/run-harness.d.ts.map +1 -0
  220. package/dist/tools/run-harness.js +279 -0
  221. package/dist/tools/run-harness.js.map +1 -0
  222. package/dist/tools/run-slo-probe.d.ts +50 -0
  223. package/dist/tools/run-slo-probe.d.ts.map +1 -0
  224. package/dist/tools/run-slo-probe.js +281 -0
  225. package/dist/tools/run-slo-probe.js.map +1 -0
  226. package/dist/tools/scaffold-writer.d.ts.map +1 -1
  227. package/dist/tools/scaffold-writer.js +4 -0
  228. package/dist/tools/scaffold-writer.js.map +1 -1
  229. package/dist/tools/session-prompt-builders.d.ts +20 -0
  230. package/dist/tools/session-prompt-builders.d.ts.map +1 -1
  231. package/dist/tools/session-prompt-builders.js +111 -14
  232. package/dist/tools/session-prompt-builders.js.map +1 -1
  233. package/dist/tools/session-prompt-sections.d.ts +4 -2
  234. package/dist/tools/session-prompt-sections.d.ts.map +1 -1
  235. package/dist/tools/session-prompt-sections.js +22 -10
  236. package/dist/tools/session-prompt-sections.js.map +1 -1
  237. package/dist/tools/setup-monitoring.d.ts +41 -0
  238. package/dist/tools/setup-monitoring.d.ts.map +1 -0
  239. package/dist/tools/setup-monitoring.js +364 -0
  240. package/dist/tools/setup-monitoring.js.map +1 -0
  241. package/dist/tools/verify-formatter.d.ts.map +1 -1
  242. package/dist/tools/verify-formatter.js +15 -1
  243. package/dist/tools/verify-formatter.js.map +1 -1
  244. package/dist/tools/verify.d.ts.map +1 -1
  245. package/dist/tools/verify.js +3 -0
  246. package/dist/tools/verify.js.map +1 -1
  247. package/package.json +11 -2
  248. package/templates/api/harness/uc-template.hurl +20 -0
  249. package/templates/docs-manifest.yaml +224 -0
  250. package/templates/game/harness/uc-template.sim.ts +29 -0
  251. package/templates/universal/claude-md-blocks/layer-navigation.md +20 -0
  252. package/templates/universal/claude-md-blocks/nfr-contracts.md +22 -0
  253. package/templates/universal/hooks.yaml +212 -20
  254. package/templates/web-react/harness/uc-template.spec.ts +35 -0
@@ -0,0 +1,332 @@
1
+ /**
2
+ * Tag-driven executable gate matrix for the Executable Sprint phase.
3
+ *
4
+ * Each project tag maps to one or more verification tools. When `generate_roadmap`
5
+ * runs, it reads the project's tags from forgecraft.yaml and selects the appropriate
6
+ * gates. Gate files (hurl specs, Playwright tests, SQL scripts, WebSocket clients)
7
+ * are written alongside the session prompt stubs so the AI has a runnable starting
8
+ * point rather than prose instructions alone.
9
+ */
10
+ // ── Gate implementations ─────────────────────────────────────────────
11
+ const hurlGate = {
12
+ tool: "hurl",
13
+ label: "HTTP contract verification (hurl)",
14
+ gatePathTemplate: "tests/hurl/{ucId}.hurl",
15
+ docsUrl: "https://hurl.dev",
16
+ runCommand: "hurl --test tests/hurl/*.hurl",
17
+ buildStub: (ucId, ucTitle) => [
18
+ `# Hurl gate — ${ucId}: ${ucTitle}`,
19
+ `# Run: hurl --test tests/hurl/${ucId.toLowerCase()}.hurl`,
20
+ `# Docs: https://hurl.dev`,
21
+ ``,
22
+ `# TODO: replace placeholders with actual endpoint, headers, and assertions`,
23
+ ``,
24
+ `POST http://localhost:3000/api/v1/TODO`,
25
+ `Content-Type: application/json`,
26
+ `{`,
27
+ ` "TODO": "replace with request body"`,
28
+ `}`,
29
+ ``,
30
+ `HTTP 201`,
31
+ `[Asserts]`,
32
+ `jsonpath "$.id" exists`,
33
+ `jsonpath "$.TODO" isString`,
34
+ ``,
35
+ ].join("\n"),
36
+ };
37
+ const playwrightGate = {
38
+ tool: "playwright",
39
+ label: "UI end-to-end verification (Playwright)",
40
+ gatePathTemplate: "tests/e2e/{ucId}.spec.ts",
41
+ docsUrl: "https://playwright.dev",
42
+ runCommand: "npx playwright test tests/e2e/",
43
+ buildStub: (ucId, ucTitle) => [
44
+ `import { test, expect } from '@playwright/test';`,
45
+ ``,
46
+ `// Playwright gate — ${ucId}: ${ucTitle}`,
47
+ `// Run: npx playwright test tests/e2e/${ucId.toLowerCase()}.spec.ts`,
48
+ `// Docs: https://playwright.dev`,
49
+ ``,
50
+ `test('${ucId}: ${ucTitle}', async ({ page }) => {`,
51
+ ` // 1. Navigate to the relevant page`,
52
+ ` await page.goto('http://localhost:3000/TODO');`,
53
+ ``,
54
+ ` // 2. Interact: fill inputs, click buttons`,
55
+ ` await page.fill('[data-testid="TODO"]', 'test value');`,
56
+ ` await page.click('[data-testid="submit-TODO"]');`,
57
+ ``,
58
+ ` // 3. Assert UI response`,
59
+ ` await expect(page.locator('[data-testid="success-TODO"]')).toBeVisible();`,
60
+ ``,
61
+ ` // 4. Confirm DB persistence (via API read-back or direct query)`,
62
+ ` // TODO: add DB assertion or API read-back call here`,
63
+ `});`,
64
+ ``,
65
+ ].join("\n"),
66
+ };
67
+ const sqlGate = {
68
+ tool: "sql-client",
69
+ label: "Database persistence verification (SQL)",
70
+ gatePathTemplate: "tests/sql/{ucId}.sql",
71
+ docsUrl: "https://www.postgresql.org/docs/current/app-psql.html",
72
+ runCommand: "psql $DATABASE_URL -f tests/sql/*.sql",
73
+ buildStub: (ucId, ucTitle) => [
74
+ `-- SQL gate — ${ucId}: ${ucTitle}`,
75
+ `-- Run: psql $DATABASE_URL -f tests/sql/${ucId.toLowerCase()}.sql`,
76
+ `-- Purpose: confirm expected state change persisted after the use-case operation`,
77
+ ``,
78
+ `-- TODO: replace with the actual table and conditions for this use case`,
79
+ ``,
80
+ `SELECT COUNT(*) AS row_count`,
81
+ `FROM TODO_table`,
82
+ `WHERE TODO_condition = 'expected_value';`,
83
+ ``,
84
+ `-- Expected: row_count >= 1`,
85
+ `-- If 0, the operation did not persist correctly`,
86
+ ``,
87
+ ].join("\n"),
88
+ };
89
+ const websocketGate = {
90
+ tool: "ws-client",
91
+ label: "Real-time event delivery verification (WebSocket)",
92
+ gatePathTemplate: "tests/realtime/{ucId}.ts",
93
+ docsUrl: "https://github.com/websockets/ws",
94
+ runCommand: "npx tsx tests/realtime/*.ts",
95
+ buildStub: (ucId, ucTitle) => [
96
+ `import WebSocket from 'ws';`,
97
+ ``,
98
+ `// WebSocket gate — ${ucId}: ${ucTitle}`,
99
+ `// Run: npx tsx tests/realtime/${ucId.toLowerCase()}.ts`,
100
+ `// Docs: https://github.com/websockets/ws`,
101
+ ``,
102
+ `const ws = new WebSocket('ws://localhost:3000/TODO');`,
103
+ ``,
104
+ `ws.on('open', () => {`,
105
+ ` // Trigger the event that should produce a real-time message`,
106
+ ` ws.send(JSON.stringify({ type: 'TODO', payload: {} }));`,
107
+ `});`,
108
+ ``,
109
+ `ws.on('message', (data) => {`,
110
+ ` const msg = JSON.parse(data.toString());`,
111
+ ` // TODO: assert expected message shape`,
112
+ ` console.assert(msg.type === 'TODO', 'Expected event type TODO');`,
113
+ ` ws.close();`,
114
+ ` process.exit(0);`,
115
+ `});`,
116
+ ``,
117
+ `setTimeout(() => { console.error('TIMEOUT: no message received'); process.exit(1); }, 5000);`,
118
+ ``,
119
+ ].join("\n"),
120
+ };
121
+ // ── Tag → gate matrix ─────────────────────────────────────────────────
122
+ // Game gates — three complementary verification types
123
+ const gameSimulationGate = {
124
+ tool: "game-simulation",
125
+ label: "Headless balance simulation (win rate, reachability, termination)",
126
+ gatePathTemplate: "tests/simulation/{ucId}.sim.ts",
127
+ docsUrl: "https://en.wikipedia.org/wiki/Monte_Carlo_method",
128
+ runCommand: "npx tsx tests/simulation/*.sim.ts",
129
+ buildStub: (ucId, ucTitle) => [
130
+ `// Headless simulation gate — ${ucId}: ${ucTitle}`,
131
+ `// Run: npx tsx tests/simulation/${ucId.toLowerCase()}.sim.ts`,
132
+ `//`,
133
+ `// ARCHITECTURAL PREREQUISITE: this gate only works if game logic is`,
134
+ `// separated from the rendering layer. If your engine cannot be imported`,
135
+ `// and run without a renderer, the architecture is not yet correct.`,
136
+ `// ForgeCraft's GAME template enforces this separation — your GameEngine`,
137
+ `// must be a pure logic class with zero rendering dependencies.`,
138
+ `// The ability to run this file IS the architecture proof.`,
139
+ `//`,
140
+ `// Three invariants every game must satisfy:`,
141
+ `// 1. Termination — a game always ends in bounded steps`,
142
+ `// 2. Reachability — win state is reachable (win rate > floor)`,
143
+ `// 3. Balance — game is not trivially easy (win rate < ceiling)`,
144
+ ``,
145
+ `// TODO: import your engine and a headless player strategy`,
146
+ `// import { GameEngine } from '../../src/engine/GameEngine';`,
147
+ `// import { RandomPlayer } from '../../src/simulation/RandomPlayer';`,
148
+ ``,
149
+ `const RUNS = 1000;`,
150
+ `const MAX_STEPS = 10_000; // game must terminate within this many steps`,
151
+ `const WIN_RATE_MIN = 0.05; // at least 5% of games should be winnable`,
152
+ `const WIN_RATE_MAX = 0.95; // shouldn't be trivially easy`,
153
+ ``,
154
+ `let wins = 0;`,
155
+ `let completions = 0;`,
156
+ ``,
157
+ `for (let i = 0; i < RUNS; i++) {`,
158
+ ` // TODO: replace with your actual engine + player`,
159
+ ` // const game = GameEngine.create();`,
160
+ ` // const player = new RandomPlayer();`,
161
+ ` // let steps = 0;`,
162
+ ` //`,
163
+ ` // while (!game.isOver() && steps < MAX_STEPS) {`,
164
+ ` // game.applyAction(player.chooseAction(game.getState()));`,
165
+ ` // steps++;`,
166
+ ` // }`,
167
+ ` // if (game.isOver()) completions++;`,
168
+ ` // if (game.isWon()) wins++;`,
169
+ `}`,
170
+ ``,
171
+ `const winRate = wins / RUNS;`,
172
+ `const completionRate = completions / RUNS;`,
173
+ ``,
174
+ `console.assert(completionRate >= 0.99,`,
175
+ ` \`FAIL: game did not terminate in \${MAX_STEPS} steps for \${((1 - completionRate) * 100).toFixed(1)}% of runs\`);`,
176
+ `console.assert(winRate >= WIN_RATE_MIN,`,
177
+ ` \`FAIL: win rate too low (\${(winRate * 100).toFixed(1)}%) — game may be unwinnable\`);`,
178
+ `console.assert(winRate <= WIN_RATE_MAX,`,
179
+ ` \`FAIL: win rate too high (\${(winRate * 100).toFixed(1)}%) — game is trivially easy\`);`,
180
+ ``,
181
+ `console.log(\`PASS: \${RUNS} runs — win rate \${(winRate * 100).toFixed(1)}%, completion \${(completionRate * 100).toFixed(1)}%\`);`,
182
+ ``,
183
+ ].join("\n"),
184
+ };
185
+ const gameStateIntegrityGate = {
186
+ tool: "game-state",
187
+ label: "Game state integrity (serialize / deserialize / invariants)",
188
+ gatePathTemplate: "tests/state/{ucId}.state.ts",
189
+ docsUrl: "https://en.wikipedia.org/wiki/State_(computer_science)",
190
+ runCommand: "npx tsx tests/state/*.state.ts",
191
+ buildStub: (ucId, ucTitle) => [
192
+ `// State integrity gate — ${ucId}: ${ucTitle}`,
193
+ `// Run: npx tsx tests/state/${ucId.toLowerCase()}.state.ts`,
194
+ `//`,
195
+ `// Verifies:`,
196
+ `// 1. Save/load round-trip produces identical state`,
197
+ `// 2. State invariants hold after every transition`,
198
+ `// 3. No illegal state is reachable from a valid initial state`,
199
+ ``,
200
+ `// TODO: import your state types and engine`,
201
+ `// import { GameEngine, GameState } from '../../src/engine/GameEngine';`,
202
+ ``,
203
+ `// 1. Round-trip: serialize then deserialize = same state`,
204
+ `// const initial = GameEngine.create().getState();`,
205
+ `// const serialized = JSON.stringify(initial);`,
206
+ `// const restored = GameEngine.fromState(JSON.parse(serialized)).getState();`,
207
+ `// console.assert(JSON.stringify(restored) === serialized, 'FAIL: save/load round-trip mismatch');`,
208
+ ``,
209
+ `// 2. Invariant check: define what must always be true`,
210
+ `// function assertInvariants(state: GameState): void {`,
211
+ `// // TODO: replace with actual invariants for ${ucId}`,
212
+ `// console.assert(state.score >= 0, 'score must be non-negative');`,
213
+ `// console.assert(state.lives >= 0, 'lives must be non-negative');`,
214
+ `// console.assert(Array.isArray(state.entities), 'entities must be an array');`,
215
+ `// }`,
216
+ ``,
217
+ `// 3. Apply N random transitions, assert invariants hold throughout`,
218
+ `// const engine = GameEngine.create();`,
219
+ `// for (let step = 0; step < 1000 && !engine.isOver(); step++) {`,
220
+ `// engine.applyAction(engine.getValidActions()[0]);`,
221
+ `// assertInvariants(engine.getState());`,
222
+ `// }`,
223
+ ``,
224
+ `console.log('PASS: ${ucId} state integrity verified');`,
225
+ ``,
226
+ ].join("\n"),
227
+ };
228
+ const gameInterfaceGate = {
229
+ tool: "game-interface",
230
+ label: "Game interface contracts (input handling, scoring, events)",
231
+ gatePathTemplate: "tests/interfaces/{ucId}.iface.ts",
232
+ docsUrl: "https://en.wikipedia.org/wiki/Software_interface",
233
+ runCommand: "npx tsx tests/interfaces/*.iface.ts",
234
+ buildStub: (ucId, ucTitle) => [
235
+ `// Interface contract gate — ${ucId}: ${ucTitle}`,
236
+ `// Run: npx tsx tests/interfaces/${ucId.toLowerCase()}.iface.ts`,
237
+ `//`,
238
+ `// Verifies the interface contracts for this use case without rendering:`,
239
+ `// - Input handler accepts valid actions and rejects invalid ones`,
240
+ `// - Scoring function produces correct output for known inputs`,
241
+ `// - Event system fires the expected events for known transitions`,
242
+ ``,
243
+ `// TODO: import your interfaces`,
244
+ `// import { InputHandler } from '../../src/input/InputHandler';`,
245
+ `// import { ScoreEngine } from '../../src/scoring/ScoreEngine';`,
246
+ `// import { EventBus } from '../../src/events/EventBus';`,
247
+ ``,
248
+ `// 1. Input contract: valid action accepted, invalid action rejected`,
249
+ `// const handler = new InputHandler();`,
250
+ `// console.assert(handler.isValid({ type: 'TODO_VALID_ACTION' }), 'FAIL: valid action rejected');`,
251
+ `// console.assert(!handler.isValid({ type: 'INVALID' }), 'FAIL: invalid action accepted');`,
252
+ ``,
253
+ `// 2. Scoring contract: known input → known output`,
254
+ `// const scorer = new ScoreEngine();`,
255
+ `// console.assert(scorer.calculate({ TODO: 'known_input' }) === 0, 'FAIL: unexpected score');`,
256
+ ``,
257
+ `// 3. Event contract: transition fires expected event`,
258
+ `// const bus = new EventBus();`,
259
+ `// const fired: string[] = [];`,
260
+ `// bus.on('TODO_EVENT', () => fired.push('TODO_EVENT'));`,
261
+ `// // trigger the transition for ${ucId}`,
262
+ `// console.assert(fired.includes('TODO_EVENT'), 'FAIL: expected event not fired');`,
263
+ ``,
264
+ `console.log('PASS: ${ucId} interface contracts verified');`,
265
+ ``,
266
+ ].join("\n"),
267
+ };
268
+ const TAG_GATE_MAP = {
269
+ API: [hurlGate],
270
+ "WEB-REACT": [playwrightGate],
271
+ "WEB-STATIC": [playwrightGate],
272
+ DATABASE: [sqlGate],
273
+ REALTIME: [websocketGate],
274
+ GAME: [gameSimulationGate, gameStateIntegrityGate, gameInterfaceGate],
275
+ SOCIAL: [hurlGate],
276
+ ANALYTICS: [hurlGate, sqlGate],
277
+ AUTH: [hurlGate],
278
+ FINTECH: [hurlGate, sqlGate],
279
+ HEALTHCARE: [hurlGate, sqlGate],
280
+ };
281
+ /** Tags that always get the hurl gate as a fallback if no specific gate matched */
282
+ const HURL_FALLBACK_TAGS = new Set(["CLI", "LIBRARY", "INFRA", "MOBILE"]);
283
+ // ── Public API ────────────────────────────────────────────────────────
284
+ /**
285
+ * Resolve the applicable executable gates for a project's tags.
286
+ * Deduplicates by tool so a project tagged API+AUTH doesn't get two hurl gates.
287
+ *
288
+ * @param tags - Project classification tags from forgecraft.yaml
289
+ * @returns Ordered, deduplicated list of applicable gates
290
+ */
291
+ export function resolveExecutableGates(tags) {
292
+ const seen = new Set();
293
+ const gates = [];
294
+ for (const tag of tags) {
295
+ for (const gate of TAG_GATE_MAP[tag] ?? []) {
296
+ if (!seen.has(gate.tool)) {
297
+ seen.add(gate.tool);
298
+ gates.push(gate);
299
+ }
300
+ }
301
+ }
302
+ // Fallback: if no gates resolved but tag is in fallback set, use hurl
303
+ if (gates.length === 0 && tags.some((t) => HURL_FALLBACK_TAGS.has(t))) {
304
+ gates.push(hurlGate);
305
+ }
306
+ // Universal fallback: always include hurl if nothing else matched
307
+ if (gates.length === 0) {
308
+ gates.push(hurlGate);
309
+ }
310
+ return gates;
311
+ }
312
+ /**
313
+ * Format the gate file path for a specific use case.
314
+ *
315
+ * @param gate - The gate definition
316
+ * @param ucId - Use-case ID (e.g. UC-001)
317
+ * @returns Relative file path
318
+ */
319
+ export function gateFilePath(gate, ucId) {
320
+ return gate.gatePathTemplate.replace("{ucId}", ucId.toLowerCase());
321
+ }
322
+ /**
323
+ * Build a one-line summary of all active gates for inclusion in the roadmap
324
+ * phase description header.
325
+ *
326
+ * @param gates - Resolved gates
327
+ * @returns Comma-separated tool list string
328
+ */
329
+ export function gateToolSummary(gates) {
330
+ return gates.map((g) => g.tool).join(", ");
331
+ }
332
+ //# sourceMappingURL=executable-gates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executable-gates.js","sourceRoot":"","sources":["../../src/tools/executable-gates.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"forgecraft-dispatch-extended.d.ts","sourceRoot":"","sources":["../../src/tools/forgecraft-dispatch-extended.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAS7D,OAAO,EAEL,WAAW,EAEZ,MAAM,kCAAkC,CAAC;AAE1C;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,UAAU,CAAC,CA4GrB;AAED,YAAY,EAAE,GAAG,EAAE,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"forgecraft-dispatch-extended.d.ts","sourceRoot":"","sources":["../../src/tools/forgecraft-dispatch-extended.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAiB7D,OAAO,EAEL,WAAW,EAEZ,MAAM,kCAAkC,CAAC;AAI1C;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,UAAU,CAAC,CAkOrB;AAED,YAAY,EAAE,GAAG,EAAE,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -12,6 +12,8 @@ import { generateRoadmapHandler } from "./generate-roadmap.js";
12
12
  import { cntAddNodeHandler } from "./cnt-add-node.js";
13
13
  import { startHardeningHandler } from "./start-hardening.js";
14
14
  import { requireParam, errorResult, unknownActionResult, } from "./forgecraft-dispatch-helpers.js";
15
+ import { generateHarnessHandler } from "./generate-harness.js";
16
+ import { runHarnessHandler } from "./run-harness.js";
15
17
  /**
16
18
  * Dispatch governance, generation, and hardening actions.
17
19
  * Returns an error result for unrecognized actions.
@@ -77,6 +79,79 @@ export async function dispatchExtendedAction(action, args) {
77
79
  });
78
80
  case "start_hardening":
79
81
  return startHardeningHandler(args);
82
+ case "generate_harness":
83
+ return generateHarnessHandler({
84
+ project_dir: requireParam(args.project_dir, "project_dir", "generate_harness"),
85
+ uc_ids: args.harness_uc_ids,
86
+ force: args.force,
87
+ });
88
+ case "run_harness":
89
+ return runHarnessHandler({
90
+ project_dir: requireParam(args.project_dir, "project_dir", "run_harness"),
91
+ uc_ids: args.harness_uc_ids,
92
+ timeout_ms: args.harness_timeout_ms,
93
+ });
94
+ case "generate_env_probe": {
95
+ const { generateEnvProbeHandler } = await import("./generate-env-probe.js");
96
+ return generateEnvProbeHandler(args);
97
+ }
98
+ case "run_env_probe": {
99
+ const { runEnvProbeHandler } = await import("./run-env-probe.js");
100
+ return runEnvProbeHandler(args);
101
+ }
102
+ case "generate_slo_probe": {
103
+ const { generateSloProbeHandler } = await import("./generate-slo-probe.js");
104
+ return generateSloProbeHandler(args);
105
+ }
106
+ case "run_slo_probe": {
107
+ const { runSloProbeHandler } = await import("./run-slo-probe.js");
108
+ return runSloProbeHandler(args);
109
+ }
110
+ case "propose_session": {
111
+ const { proposeSessionHandler } = await import("./propose-session.js");
112
+ return proposeSessionHandler(args);
113
+ }
114
+ case "check_spec_consistency": {
115
+ const { checkSpecConsistencyHandler } = await import("./check-spec-consistency.js");
116
+ return checkSpecConsistencyHandler(args);
117
+ }
118
+ case "change_request": {
119
+ const { changeRequestHandler } = await import("./change-request.js");
120
+ return changeRequestHandler({
121
+ project_dir: requireParam(args.project_dir, "project_dir", "change_request"),
122
+ title: requireParam(args.change_title, "change_title", "change_request"),
123
+ description: requireParam(args.change_description, "change_description", "change_request"),
124
+ type: requireParam(args.change_type, "change_type", "change_request"),
125
+ breaking: args.change_breaking,
126
+ breaking_details: args.change_breaking_details,
127
+ supersedes_adr: args.change_supersedes_adr,
128
+ affected_artifacts: args.change_affected_artifacts,
129
+ });
130
+ }
131
+ case "list_changes": {
132
+ const { listChangesHandler } = await import("./change-request.js");
133
+ return listChangesHandler({
134
+ project_dir: requireParam(args.project_dir, "project_dir", "list_changes"),
135
+ status: args.changes_status_filter,
136
+ });
137
+ }
138
+ case "setup_monitoring": {
139
+ const { setupMonitoringHandler } = await import("./setup-monitoring.js");
140
+ return setupMonitoringHandler({
141
+ project_dir: requireParam(args.project_dir, "project_dir", "setup_monitoring"),
142
+ project_name: args.project_name,
143
+ force: args.monitoring_force,
144
+ });
145
+ }
146
+ case "check_t4": {
147
+ const { checkT4Handler } = await import("./check-t4.js");
148
+ return checkT4Handler({
149
+ project_dir: requireParam(args.project_dir, "project_dir", "check_t4"),
150
+ acknowledge: args.t4_acknowledge,
151
+ resolve: args.t4_resolve,
152
+ show_resolved: args.t4_show_resolved,
153
+ });
154
+ }
80
155
  default:
81
156
  return unknownActionResult(action);
82
157
  }
@@ -1 +1 @@
1
- {"version":3,"file":"forgecraft-dispatch-extended.js","sourceRoot":"","sources":["../../src/tools/forgecraft-dispatch-extended.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forgecraft-dispatch-extended.js","sourceRoot":"","sources":["../../src/tools/forgecraft-dispatch-extended.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"forgecraft-dispatch.d.ts","sourceRoot":"","sources":["../../src/tools/forgecraft-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAO,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAwB1D,OAAO,KAAK,EAAE,cAAc,EAAU,MAAM,wBAAwB,CAAC;AAQrE,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,UAAU,CAAC,CA0OrB"}
1
+ {"version":3,"file":"forgecraft-dispatch.d.ts","sourceRoot":"","sources":["../../src/tools/forgecraft-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAO,UAAU,EAAE,MAAM,oBAAoB,CAAC;AA4B1D,OAAO,KAAK,EAAE,cAAc,EAAU,MAAM,wBAAwB,CAAC;AAQrE,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,UAAU,CAAC,CAgRrB"}
@@ -20,10 +20,14 @@ import { verifyHandler } from "./verify.js";
20
20
  import { adviceHandler } from "./advice.js";
21
21
  import { metricsHandler } from "./metrics.js";
22
22
  import { checkCascadeHandler } from "./check-cascade.js";
23
+ import { consolidateStatusHandler } from "./consolidate-status.js";
24
+ import { readGateViolationsHandler } from "./gate-violations.js";
23
25
  import { generateSessionPromptHandler } from "./generate-session-prompt.js";
24
26
  import { getVerificationStrategyHandler } from "./get-verification-strategy.js";
25
27
  import { recordVerificationHandler, getVerificationStatusHandler, } from "./verification-state.js";
26
28
  import { setupProjectHandler } from "./setup-project.js";
29
+ import { layerStatusHandler } from "./layer-status.js";
30
+ import { adviseSessionHandler } from "./advise-session.js";
27
31
  import { requireParam, dispatchList, dispatchGetReference, } from "./forgecraft-dispatch-helpers.js";
28
32
  import { dispatchExtendedAction } from "./forgecraft-dispatch-extended.js";
29
33
  export async function dispatchForgecraft(args) {
@@ -151,6 +155,14 @@ export async function dispatchForgecraft(args) {
151
155
  return checkCascadeHandler({
152
156
  project_dir: requireParam(args.project_dir, "project_dir", "check_cascade"),
153
157
  });
158
+ case "consolidate_status":
159
+ return consolidateStatusHandler({
160
+ project_dir: requireParam(args.project_dir, "project_dir", "consolidate_status"),
161
+ });
162
+ case "read_gate_violations":
163
+ return readGateViolationsHandler({
164
+ project_dir: requireParam(args.project_dir, "project_dir", "read_gate_violations"),
165
+ });
154
166
  case "generate_session_prompt":
155
167
  return generateSessionPromptHandler({
156
168
  project_dir: requireParam(args.project_dir, "project_dir", "generate_session_prompt"),
@@ -184,6 +196,15 @@ export async function dispatchForgecraft(args) {
184
196
  tags: args.tags,
185
197
  show_pending_only: args.show_pending_only ?? false,
186
198
  });
199
+ case "layer_status":
200
+ return layerStatusHandler({
201
+ project_dir: requireParam(args.project_dir, "project_dir", "layer_status"),
202
+ });
203
+ case "advise_session":
204
+ return adviseSessionHandler({
205
+ project_dir: requireParam(args.project_dir, "project_dir", "advise_session"),
206
+ max_items: typeof args.max_items === "number" ? args.max_items : undefined,
207
+ });
187
208
  default:
188
209
  return dispatchExtendedAction(action, args);
189
210
  }
@@ -1 +1 @@
1
- {"version":3,"file":"forgecraft-dispatch.js","sourceRoot":"","sources":["../../src/tools/forgecraft-dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forgecraft-dispatch.js","sourceRoot":"","sources":["../../src/tools/forgecraft-dispatch.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,14 @@ export declare function forgecraftHandler(args: ForgecraftArgs): Promise<ToolRes
27
27
  * @returns Formatted multi-line string
28
28
  */
29
29
  export declare function formatAmbiguity(ambiguity: ToolAmbiguity): string;
30
+ /**
31
+ * Apply size annotation and truncation to the first text content item.
32
+ * Leaves short results and non-text content unchanged.
33
+ *
34
+ * @param result - Tool result after ambiguity formatting
35
+ * @returns Result with size annotation applied to text content
36
+ */
37
+ export declare function applyResultAnnotation(result: ToolResult): ToolResult;
30
38
  /**
31
39
  * Prepend formatted ambiguity blocks to the result's text content.
32
40
  * Returns the result unchanged if there are no ambiguities.
@@ -1 +1 @@
1
- {"version":3,"file":"forgecraft-router.d.ts","sourceRoot":"","sources":["../../src/tools/forgecraft-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAI7D;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,UAAU,CAAC,CAGrB;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,aAAa,GAAG,MAAM,CAWhE;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAUvE"}
1
+ {"version":3,"file":"forgecraft-router.d.ts","sourceRoot":"","sources":["../../src/tools/forgecraft-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAI7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAI7D;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,UAAU,CAAC,CAGrB;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,aAAa,GAAG,MAAM,CAWhE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAWpE;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAUvE"}
@@ -9,6 +9,7 @@
9
9
  * Dispatch logic lives in forgecraft-dispatch.ts.
10
10
  */
11
11
  import { dispatchForgecraft } from "./forgecraft-dispatch.js";
12
+ import { annotateResult } from "../shared/result-utils.js";
12
13
  export { forgecraftSchema } from "./forgecraft-schema.js";
13
14
  // ── Public handler ───────────────────────────────────────────────────
14
15
  /**
@@ -20,7 +21,7 @@ export { forgecraftSchema } from "./forgecraft-schema.js";
20
21
  */
21
22
  export async function forgecraftHandler(args) {
22
23
  const result = await dispatchForgecraft(args);
23
- return applyAmbiguityFormatting(result);
24
+ return applyResultAnnotation(applyAmbiguityFormatting(result));
24
25
  }
25
26
  // ── Ambiguity formatting ─────────────────────────────────────────────
26
27
  /**
@@ -41,6 +42,25 @@ export function formatAmbiguity(ambiguity) {
41
42
  lines.push(` To resolve: ${ambiguity.resolution_hint}`);
42
43
  return lines.join("\n");
43
44
  }
45
+ /**
46
+ * Apply size annotation and truncation to the first text content item.
47
+ * Leaves short results and non-text content unchanged.
48
+ *
49
+ * @param result - Tool result after ambiguity formatting
50
+ * @returns Result with size annotation applied to text content
51
+ */
52
+ export function applyResultAnnotation(result) {
53
+ const first = result.content[0];
54
+ if (!first || first.type !== "text")
55
+ return result;
56
+ const annotated = annotateResult(first.text);
57
+ if (annotated === first.text)
58
+ return result;
59
+ return {
60
+ ...result,
61
+ content: [{ type: "text", text: annotated }, ...result.content.slice(1)],
62
+ };
63
+ }
44
64
  /**
45
65
  * Prepend formatted ambiguity blocks to the result's text content.
46
66
  * Returns the result unchanged if there are no ambiguities.
@@ -1 +1 @@
1
- {"version":3,"file":"forgecraft-router.js","sourceRoot":"","sources":["../../src/tools/forgecraft-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,wEAAwE;AAExE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAoB;IAEpB,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,wEAAwE;AAExE;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,SAAwB;IACtD,MAAM,KAAK,GAAa;QACtB,iBAAiB,SAAS,CAAC,KAAK,EAAE;QAClC,4BAA4B,SAAS,CAAC,aAAa,EAAE;QACrD,iBAAiB,SAAS,CAAC,kBAAkB,EAAE;KAChD,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,kBAAkB,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC;IAC1D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAkB;IACzD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM;QAAE,OAAO,MAAM,CAAC;IAE/C,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;IACnD,MAAM,UAAU,GAAG,GAAG,gBAAgB,cAAc,YAAY,EAAE,CAAC;IAEnE,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC1E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"forgecraft-router.js","sourceRoot":"","sources":["../../src/tools/forgecraft-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,wEAAwE;AAExE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAoB;IAEpB,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO,qBAAqB,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,wEAAwE;AAExE;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,SAAwB;IACtD,MAAM,KAAK,GAAa;QACtB,iBAAiB,SAAS,CAAC,KAAK,EAAE;QAClC,4BAA4B,SAAS,CAAC,aAAa,EAAE;QACrD,iBAAiB,SAAS,CAAC,kBAAkB,EAAE;KAChD,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,kBAAkB,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC;IAC1D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAkB;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IAEnD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC;IAE5C,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACzE,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAkB;IACzD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM;QAAE,OAAO,MAAM,CAAC;IAE/C,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;IACnD,MAAM,UAAU,GAAG,GAAG,gBAAgB,cAAc,YAAY,EAAE,CAAC;IAEnE,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC1E,CAAC;AACJ,CAAC"}