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.
- package/README.md +2 -2
- package/dist/analyzers/anchors/anchor-loader.d.ts +47 -0
- package/dist/analyzers/anchors/anchor-loader.d.ts.map +1 -0
- package/dist/analyzers/anchors/anchor-loader.js +113 -0
- package/dist/analyzers/anchors/anchor-loader.js.map +1 -0
- package/dist/analyzers/anti-pattern.d.ts.map +1 -1
- package/dist/analyzers/anti-pattern.js +38 -26
- package/dist/analyzers/anti-pattern.js.map +1 -1
- package/dist/analyzers/completeness-helpers.d.ts +5 -0
- package/dist/analyzers/completeness-helpers.d.ts.map +1 -1
- package/dist/analyzers/completeness-helpers.js +17 -0
- package/dist/analyzers/completeness-helpers.js.map +1 -1
- package/dist/analyzers/completeness.d.ts.map +1 -1
- package/dist/analyzers/completeness.js +4 -4
- package/dist/analyzers/completeness.js.map +1 -1
- package/dist/analyzers/gs-scorer.d.ts +3 -1
- package/dist/analyzers/gs-scorer.d.ts.map +1 -1
- package/dist/analyzers/gs-scorer.js +5 -2
- package/dist/analyzers/gs-scorer.js.map +1 -1
- package/dist/analyzers/scorers/composable-scorer.d.ts +4 -2
- package/dist/analyzers/scorers/composable-scorer.d.ts.map +1 -1
- package/dist/analyzers/scorers/composable-scorer.js +50 -2
- package/dist/analyzers/scorers/composable-scorer.js.map +1 -1
- package/dist/analyzers/scorers/executable-scorer.d.ts +3 -2
- package/dist/analyzers/scorers/executable-scorer.d.ts.map +1 -1
- package/dist/analyzers/scorers/executable-scorer.js +64 -4
- package/dist/analyzers/scorers/executable-scorer.js.map +1 -1
- package/dist/analyzers/scorers/scorer-utils.d.ts +5 -3
- package/dist/analyzers/scorers/scorer-utils.d.ts.map +1 -1
- package/dist/analyzers/scorers/scorer-utils.js +34 -9
- package/dist/analyzers/scorers/scorer-utils.js.map +1 -1
- package/dist/analyzers/scorers/self-describing-scorer.d.ts +7 -4
- package/dist/analyzers/scorers/self-describing-scorer.d.ts.map +1 -1
- package/dist/analyzers/scorers/self-describing-scorer.js +17 -18
- package/dist/analyzers/scorers/self-describing-scorer.js.map +1 -1
- package/dist/artifacts/commit-hooks.d.ts +1 -1
- package/dist/artifacts/commit-hooks.d.ts.map +1 -1
- package/dist/artifacts/commit-hooks.js +2 -0
- package/dist/artifacts/commit-hooks.js.map +1 -1
- package/dist/cli/commands.d.ts +35 -1
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +109 -2
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +7 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -1
- package/dist/cli.js.map +1 -1
- package/dist/disciplines/catalog.d.ts +16 -0
- package/dist/disciplines/catalog.d.ts.map +1 -0
- package/dist/disciplines/catalog.js +196 -0
- package/dist/disciplines/catalog.js.map +1 -0
- package/dist/disciplines/runner.d.ts +13 -0
- package/dist/disciplines/runner.d.ts.map +1 -0
- package/dist/disciplines/runner.js +35 -0
- package/dist/disciplines/runner.js.map +1 -0
- package/dist/registry/remote-gates.js +1 -1
- package/dist/registry/remote-gates.js.map +1 -1
- package/dist/sentinel/detect.d.ts +41 -0
- package/dist/sentinel/detect.d.ts.map +1 -0
- package/dist/sentinel/detect.js +122 -0
- package/dist/sentinel/detect.js.map +1 -0
- package/dist/sentinel/write.d.ts +54 -0
- package/dist/sentinel/write.d.ts.map +1 -0
- package/dist/sentinel/write.js +75 -0
- package/dist/sentinel/write.js.map +1 -0
- package/dist/shared/cnt-health.d.ts.map +1 -1
- package/dist/shared/cnt-health.js +12 -4
- package/dist/shared/cnt-health.js.map +1 -1
- package/dist/shared/config.d.ts +8 -0
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +23 -0
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/project-gates-helpers.d.ts +9 -0
- package/dist/shared/project-gates-helpers.d.ts.map +1 -1
- package/dist/shared/project-gates-helpers.js +35 -0
- package/dist/shared/project-gates-helpers.js.map +1 -1
- package/dist/shared/result-utils.d.ts +27 -0
- package/dist/shared/result-utils.d.ts.map +1 -0
- package/dist/shared/result-utils.js +41 -0
- package/dist/shared/result-utils.js.map +1 -0
- package/dist/shared/types/config.d.ts +7 -1
- package/dist/shared/types/config.d.ts.map +1 -1
- package/dist/shared/types/gates.d.ts +28 -0
- package/dist/shared/types/gates.d.ts.map +1 -1
- package/dist/shared/types/project.d.ts +66 -0
- package/dist/shared/types/project.d.ts.map +1 -1
- package/dist/shared/types/project.js.map +1 -1
- package/dist/shared/types/verify.d.ts +51 -1
- package/dist/shared/types/verify.d.ts.map +1 -1
- package/dist/shared/types/verify.js +37 -1
- package/dist/shared/types/verify.js.map +1 -1
- package/dist/tools/advise-session-advisor.d.ts +16 -0
- package/dist/tools/advise-session-advisor.d.ts.map +1 -0
- package/dist/tools/advise-session-advisor.js +89 -0
- package/dist/tools/advise-session-advisor.js.map +1 -0
- package/dist/tools/advise-session-signals.d.ts +21 -0
- package/dist/tools/advise-session-signals.d.ts.map +1 -0
- package/dist/tools/advise-session-signals.js +113 -0
- package/dist/tools/advise-session-signals.js.map +1 -0
- package/dist/tools/advise-session.d.ts +22 -0
- package/dist/tools/advise-session.d.ts.map +1 -0
- package/dist/tools/advise-session.js +31 -0
- package/dist/tools/advise-session.js.map +1 -0
- package/dist/tools/change-request.d.ts +53 -0
- package/dist/tools/change-request.d.ts.map +1 -0
- package/dist/tools/change-request.js +375 -0
- package/dist/tools/change-request.js.map +1 -0
- package/dist/tools/check-cascade-contracts.d.ts +13 -0
- package/dist/tools/check-cascade-contracts.d.ts.map +1 -1
- package/dist/tools/check-cascade-contracts.js +73 -2
- package/dist/tools/check-cascade-contracts.js.map +1 -1
- package/dist/tools/check-cascade.d.ts +4 -3
- package/dist/tools/check-cascade.d.ts.map +1 -1
- package/dist/tools/check-cascade.js +30 -12
- package/dist/tools/check-cascade.js.map +1 -1
- package/dist/tools/check-spec-consistency.d.ts +25 -0
- package/dist/tools/check-spec-consistency.d.ts.map +1 -0
- package/dist/tools/check-spec-consistency.js +339 -0
- package/dist/tools/check-spec-consistency.js.map +1 -0
- package/dist/tools/check-t4.d.ts +54 -0
- package/dist/tools/check-t4.d.ts.map +1 -0
- package/dist/tools/check-t4.js +305 -0
- package/dist/tools/check-t4.js.map +1 -0
- package/dist/tools/close-cycle-helpers.d.ts +21 -2
- package/dist/tools/close-cycle-helpers.d.ts.map +1 -1
- package/dist/tools/close-cycle-helpers.js +66 -10
- package/dist/tools/close-cycle-helpers.js.map +1 -1
- package/dist/tools/close-cycle.d.ts +2 -2
- package/dist/tools/close-cycle.d.ts.map +1 -1
- package/dist/tools/close-cycle.js +342 -4
- package/dist/tools/close-cycle.js.map +1 -1
- package/dist/tools/consolidate-status.d.ts +112 -0
- package/dist/tools/consolidate-status.d.ts.map +1 -0
- package/dist/tools/consolidate-status.js +356 -0
- package/dist/tools/consolidate-status.js.map +1 -0
- package/dist/tools/executable-gates.d.ts +52 -0
- package/dist/tools/executable-gates.d.ts.map +1 -0
- package/dist/tools/executable-gates.js +332 -0
- package/dist/tools/executable-gates.js.map +1 -0
- package/dist/tools/forgecraft-dispatch-extended.d.ts.map +1 -1
- package/dist/tools/forgecraft-dispatch-extended.js +75 -0
- package/dist/tools/forgecraft-dispatch-extended.js.map +1 -1
- package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
- package/dist/tools/forgecraft-dispatch.js +21 -0
- package/dist/tools/forgecraft-dispatch.js.map +1 -1
- package/dist/tools/forgecraft-router.d.ts +8 -0
- package/dist/tools/forgecraft-router.d.ts.map +1 -1
- package/dist/tools/forgecraft-router.js +21 -1
- package/dist/tools/forgecraft-router.js.map +1 -1
- package/dist/tools/forgecraft-schema-params.d.ts +61 -4
- package/dist/tools/forgecraft-schema-params.d.ts.map +1 -1
- package/dist/tools/forgecraft-schema-params.js +95 -0
- package/dist/tools/forgecraft-schema-params.js.map +1 -1
- package/dist/tools/forgecraft-schema.d.ts +62 -5
- package/dist/tools/forgecraft-schema.d.ts.map +1 -1
- package/dist/tools/forgecraft-schema.js +24 -0
- package/dist/tools/forgecraft-schema.js.map +1 -1
- package/dist/tools/gate-violations.d.ts +59 -0
- package/dist/tools/gate-violations.d.ts.map +1 -0
- package/dist/tools/gate-violations.js +152 -0
- package/dist/tools/gate-violations.js.map +1 -0
- package/dist/tools/generate-adr.js +6 -6
- package/dist/tools/generate-adr.js.map +1 -1
- package/dist/tools/generate-env-probe.d.ts +49 -0
- package/dist/tools/generate-env-probe.d.ts.map +1 -0
- package/dist/tools/generate-env-probe.js +365 -0
- package/dist/tools/generate-env-probe.js.map +1 -0
- package/dist/tools/generate-harness.d.ts +52 -0
- package/dist/tools/generate-harness.d.ts.map +1 -0
- package/dist/tools/generate-harness.js +333 -0
- package/dist/tools/generate-harness.js.map +1 -0
- package/dist/tools/generate-roadmap.d.ts +1 -1
- package/dist/tools/generate-roadmap.d.ts.map +1 -1
- package/dist/tools/generate-roadmap.js +38 -4
- package/dist/tools/generate-roadmap.js.map +1 -1
- package/dist/tools/generate-session-prompt.d.ts +4 -4
- package/dist/tools/generate-session-prompt.d.ts.map +1 -1
- package/dist/tools/generate-session-prompt.js +66 -16
- package/dist/tools/generate-session-prompt.js.map +1 -1
- package/dist/tools/generate-slo-probe.d.ts +53 -0
- package/dist/tools/generate-slo-probe.d.ts.map +1 -0
- package/dist/tools/generate-slo-probe.js +366 -0
- package/dist/tools/generate-slo-probe.js.map +1 -0
- package/dist/tools/layer-status-gates.d.ts +24 -0
- package/dist/tools/layer-status-gates.d.ts.map +1 -0
- package/dist/tools/layer-status-gates.js +151 -0
- package/dist/tools/layer-status-gates.js.map +1 -0
- package/dist/tools/layer-status.d.ts +133 -0
- package/dist/tools/layer-status.d.ts.map +1 -0
- package/dist/tools/layer-status.js +593 -0
- package/dist/tools/layer-status.js.map +1 -0
- package/dist/tools/postcondition-coverage.d.ts +57 -0
- package/dist/tools/postcondition-coverage.d.ts.map +1 -0
- package/dist/tools/postcondition-coverage.js +256 -0
- package/dist/tools/postcondition-coverage.js.map +1 -0
- package/dist/tools/probe-runners.d.ts +21 -0
- package/dist/tools/probe-runners.d.ts.map +1 -0
- package/dist/tools/probe-runners.js +246 -0
- package/dist/tools/probe-runners.js.map +1 -0
- package/dist/tools/probe-templates.d.ts +27 -0
- package/dist/tools/probe-templates.d.ts.map +1 -0
- package/dist/tools/probe-templates.js +279 -0
- package/dist/tools/probe-templates.js.map +1 -0
- package/dist/tools/propose-session.d.ts +28 -0
- package/dist/tools/propose-session.d.ts.map +1 -0
- package/dist/tools/propose-session.js +333 -0
- package/dist/tools/propose-session.js.map +1 -0
- package/dist/tools/roadmap-builder.d.ts +34 -1
- package/dist/tools/roadmap-builder.d.ts.map +1 -1
- package/dist/tools/roadmap-builder.js +153 -11
- package/dist/tools/roadmap-builder.js.map +1 -1
- package/dist/tools/run-env-probe.d.ts +57 -0
- package/dist/tools/run-env-probe.d.ts.map +1 -0
- package/dist/tools/run-env-probe.js +270 -0
- package/dist/tools/run-env-probe.js.map +1 -0
- package/dist/tools/run-harness.d.ts +52 -0
- package/dist/tools/run-harness.d.ts.map +1 -0
- package/dist/tools/run-harness.js +279 -0
- package/dist/tools/run-harness.js.map +1 -0
- package/dist/tools/run-slo-probe.d.ts +50 -0
- package/dist/tools/run-slo-probe.d.ts.map +1 -0
- package/dist/tools/run-slo-probe.js +281 -0
- package/dist/tools/run-slo-probe.js.map +1 -0
- package/dist/tools/scaffold-writer.d.ts.map +1 -1
- package/dist/tools/scaffold-writer.js +4 -0
- package/dist/tools/scaffold-writer.js.map +1 -1
- package/dist/tools/session-prompt-builders.d.ts +20 -0
- package/dist/tools/session-prompt-builders.d.ts.map +1 -1
- package/dist/tools/session-prompt-builders.js +111 -14
- package/dist/tools/session-prompt-builders.js.map +1 -1
- package/dist/tools/session-prompt-sections.d.ts +4 -2
- package/dist/tools/session-prompt-sections.d.ts.map +1 -1
- package/dist/tools/session-prompt-sections.js +22 -10
- package/dist/tools/session-prompt-sections.js.map +1 -1
- package/dist/tools/setup-monitoring.d.ts +41 -0
- package/dist/tools/setup-monitoring.d.ts.map +1 -0
- package/dist/tools/setup-monitoring.js +364 -0
- package/dist/tools/setup-monitoring.js.map +1 -0
- package/dist/tools/verify-formatter.d.ts.map +1 -1
- package/dist/tools/verify-formatter.js +15 -1
- package/dist/tools/verify-formatter.js.map +1 -1
- package/dist/tools/verify.d.ts.map +1 -1
- package/dist/tools/verify.js +3 -0
- package/dist/tools/verify.js.map +1 -1
- package/package.json +11 -2
- package/templates/api/harness/uc-template.hurl +20 -0
- package/templates/docs-manifest.yaml +224 -0
- package/templates/game/harness/uc-template.sim.ts +29 -0
- package/templates/universal/claude-md-blocks/layer-navigation.md +20 -0
- package/templates/universal/claude-md-blocks/nfr-contracts.md +22 -0
- package/templates/universal/hooks.yaml +212 -20
- 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;
|
|
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":"AAAA;;;;GAIG;
|
|
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;
|
|
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":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EACL,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
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;
|
|
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;
|
|
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"}
|