@ggui-ai/ui-gen 0.28.0 → 0.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{adapter-h4_V69LI.d.ts → adapter-DLQ-5COm.d.ts} +1 -1
- package/dist/adapters/base.js +2 -27
- package/dist/adapters/base.js.map +1 -1
- package/dist/adapters/generation-dispatch.d.ts +14 -6
- package/dist/adapters/generation-dispatch.js +40 -19260
- package/dist/adapters/generation-dispatch.js.map +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.js +25 -3561
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/types.js +2 -9
- package/dist/adapters/types.js.map +1 -1
- package/dist/advanced/index.d.ts +13 -12
- package/dist/advanced/index.js +63 -21954
- package/dist/advanced/index.js.map +1 -1
- package/dist/{bank-Ctdp3FUA.d.ts → bank-LWaiAtaA.d.ts} +1 -1
- package/dist/blueprint-validator.js +6 -2301
- package/dist/blueprint-validator.js.map +1 -1
- package/dist/boilerplate.d.ts +3 -2
- package/dist/boilerplate.js +6 -1867
- package/dist/boilerplate.js.map +1 -1
- package/dist/check/index.d.ts +3 -2
- package/dist/check/index.js +6 -1923
- package/dist/check/index.js.map +1 -1
- package/dist/chunk-33B3BAWS.js +24 -0
- package/dist/chunk-33B3BAWS.js.map +1 -0
- package/dist/chunk-3HSGA6NI.js +591 -0
- package/dist/chunk-3HSGA6NI.js.map +1 -0
- package/dist/chunk-3NNNGNTO.js +1707 -0
- package/dist/chunk-3NNNGNTO.js.map +1 -0
- package/dist/chunk-3T2HMTON.js +79 -0
- package/dist/chunk-3T2HMTON.js.map +1 -0
- package/dist/chunk-3ZSSDV3L.js +123 -0
- package/dist/chunk-3ZSSDV3L.js.map +1 -0
- package/dist/chunk-4MBR5GA3.js +99 -0
- package/dist/chunk-4MBR5GA3.js.map +1 -0
- package/dist/chunk-56NJFD55.js +337 -0
- package/dist/chunk-56NJFD55.js.map +1 -0
- package/dist/chunk-5AGTY555.js +26 -0
- package/dist/chunk-5AGTY555.js.map +1 -0
- package/dist/chunk-5EJM7EGY.js +115 -0
- package/dist/chunk-5EJM7EGY.js.map +1 -0
- package/dist/chunk-5KXCQLLR.js +529 -0
- package/dist/chunk-5KXCQLLR.js.map +1 -0
- package/dist/chunk-5VBXHVEH.js +171 -0
- package/dist/chunk-5VBXHVEH.js.map +1 -0
- package/dist/chunk-6KDDEING.js +515 -0
- package/dist/chunk-6KDDEING.js.map +1 -0
- package/dist/chunk-6VDRWAP6.js +123 -0
- package/dist/chunk-6VDRWAP6.js.map +1 -0
- package/dist/chunk-732IBFEJ.js +2400 -0
- package/dist/chunk-732IBFEJ.js.map +1 -0
- package/dist/chunk-73AURS3I.js +46 -0
- package/dist/chunk-73AURS3I.js.map +1 -0
- package/dist/chunk-77H5SKLX.js +8 -0
- package/dist/chunk-77H5SKLX.js.map +1 -0
- package/dist/chunk-7QE3AHLE.js +35 -0
- package/dist/chunk-7QE3AHLE.js.map +1 -0
- package/dist/chunk-A375NNWN.js +11 -0
- package/dist/chunk-A375NNWN.js.map +1 -0
- package/dist/chunk-AOU33EFS.js +140 -0
- package/dist/chunk-AOU33EFS.js.map +1 -0
- package/dist/chunk-BA4QYA6E.js +461 -0
- package/dist/chunk-BA4QYA6E.js.map +1 -0
- package/dist/chunk-DBP764GL.js +3 -0
- package/dist/chunk-DBP764GL.js.map +1 -0
- package/dist/chunk-DUU3ZJDQ.js +41 -0
- package/dist/chunk-DUU3ZJDQ.js.map +1 -0
- package/dist/chunk-DXKRBXNU.js +30 -0
- package/dist/chunk-DXKRBXNU.js.map +1 -0
- package/dist/chunk-FB7OEEAH.js +1467 -0
- package/dist/chunk-FB7OEEAH.js.map +1 -0
- package/dist/chunk-FLRNMZV2.js +18 -0
- package/dist/chunk-FLRNMZV2.js.map +1 -0
- package/dist/chunk-FWJIMKFZ.js +2032 -0
- package/dist/chunk-FWJIMKFZ.js.map +1 -0
- package/dist/chunk-FXRHWYIQ.js +163 -0
- package/dist/chunk-FXRHWYIQ.js.map +1 -0
- package/dist/chunk-G3PMV62Z.js +33 -0
- package/dist/chunk-G3PMV62Z.js.map +1 -0
- package/dist/chunk-GAJI7Y3P.js +13 -0
- package/dist/chunk-GAJI7Y3P.js.map +1 -0
- package/dist/chunk-GYINWMPR.js +2052 -0
- package/dist/chunk-GYINWMPR.js.map +1 -0
- package/dist/chunk-HD6ABIK7.js +484 -0
- package/dist/chunk-HD6ABIK7.js.map +1 -0
- package/dist/chunk-HDQVHYO6.js +100 -0
- package/dist/chunk-HDQVHYO6.js.map +1 -0
- package/dist/chunk-IHUT3SIW.js +7 -0
- package/dist/chunk-IHUT3SIW.js.map +1 -0
- package/dist/chunk-JDH5EGNZ.js +126 -0
- package/dist/chunk-JDH5EGNZ.js.map +1 -0
- package/dist/chunk-JMD4RGSV.js +37 -0
- package/dist/chunk-JMD4RGSV.js.map +1 -0
- package/dist/chunk-KJWGZL5B.js +33 -0
- package/dist/chunk-KJWGZL5B.js.map +1 -0
- package/dist/chunk-MKMDQFZ7.js +86 -0
- package/dist/chunk-MKMDQFZ7.js.map +1 -0
- package/dist/chunk-NF6JUZWF.js +85 -0
- package/dist/chunk-NF6JUZWF.js.map +1 -0
- package/dist/chunk-O2YC6XDC.js +1933 -0
- package/dist/chunk-O2YC6XDC.js.map +1 -0
- package/dist/chunk-OVLH5ICV.js +29 -0
- package/dist/chunk-OVLH5ICV.js.map +1 -0
- package/dist/chunk-PBOYHGSD.js +106 -0
- package/dist/chunk-PBOYHGSD.js.map +1 -0
- package/dist/chunk-PJFH7QWA.js +81 -0
- package/dist/chunk-PJFH7QWA.js.map +1 -0
- package/dist/chunk-PUH4CXGZ.js +284 -0
- package/dist/chunk-PUH4CXGZ.js.map +1 -0
- package/dist/chunk-QLXXPGTV.js +18 -0
- package/dist/chunk-QLXXPGTV.js.map +1 -0
- package/dist/chunk-R5GIGPW2.js +2845 -0
- package/dist/chunk-R5GIGPW2.js.map +1 -0
- package/dist/chunk-RH4IUSTO.js +83 -0
- package/dist/chunk-RH4IUSTO.js.map +1 -0
- package/dist/chunk-S2GVXKKY.js +153 -0
- package/dist/chunk-S2GVXKKY.js.map +1 -0
- package/dist/chunk-TVHGKFJS.js +58 -0
- package/dist/chunk-TVHGKFJS.js.map +1 -0
- package/dist/chunk-U7GALWLG.js +66 -0
- package/dist/chunk-U7GALWLG.js.map +1 -0
- package/dist/chunk-VTC263LT.js +256 -0
- package/dist/chunk-VTC263LT.js.map +1 -0
- package/dist/chunk-WEOXFEVE.js +739 -0
- package/dist/chunk-WEOXFEVE.js.map +1 -0
- package/dist/chunk-WYHP46LT.js +28 -0
- package/dist/chunk-WYHP46LT.js.map +1 -0
- package/dist/chunk-XGLO5LGG.js +274 -0
- package/dist/chunk-XGLO5LGG.js.map +1 -0
- package/dist/chunk-XRBCRKA2.js +29 -0
- package/dist/chunk-XRBCRKA2.js.map +1 -0
- package/dist/chunk-XW7ADFFV.js +340 -0
- package/dist/chunk-XW7ADFFV.js.map +1 -0
- package/dist/chunk-YIQ42IUX.js +34 -0
- package/dist/chunk-YIQ42IUX.js.map +1 -0
- package/dist/chunk-YJZTUY7B.js +101 -0
- package/dist/chunk-YJZTUY7B.js.map +1 -0
- package/dist/chunk-Z3CXME3K.js +107 -0
- package/dist/chunk-Z3CXME3K.js.map +1 -0
- package/dist/classifier/index.js +2 -527
- package/dist/classifier/index.js.map +1 -1
- package/dist/client-JBPCXU7W.js +4 -0
- package/dist/client-JBPCXU7W.js.map +1 -0
- package/dist/compose.js +3 -367
- package/dist/compose.js.map +1 -1
- package/dist/cost-tracker-HHGQ4FTW.js +67 -0
- package/dist/cost-tracker-HHGQ4FTW.js.map +1 -0
- package/dist/{create-ui-generator-BrZHF0cf.d.ts → create-ui-generator-BY-WeaPi.d.ts} +3 -3
- package/dist/{design-mode-DGWN_Gkm.d.ts → design-mode-XyOQmzE0.d.ts} +4 -3
- package/dist/{dispatch-B07TI30d.d.ts → dispatch-8LzTddKw.d.ts} +3 -2
- package/dist/dist-UALN6ZVB.js +543 -0
- package/dist/dist-UALN6ZVB.js.map +1 -0
- package/dist/dupe-break-X6K7QFIS.js +4 -0
- package/dist/dupe-break-X6K7QFIS.js.map +1 -0
- package/dist/evaluation/axis-checks/index.d.ts +5 -4
- package/dist/evaluation/axis-checks/index.js +6 -1914
- package/dist/evaluation/axis-checks/index.js.map +1 -1
- package/dist/evaluation/axis-checks/registry.d.ts +3 -2
- package/dist/evaluation/axis-checks/registry.js +3 -1844
- package/dist/evaluation/axis-checks/registry.js.map +1 -1
- package/dist/evaluation/index.d.ts +49 -132
- package/dist/evaluation/index.js +302 -6466
- package/dist/evaluation/index.js.map +1 -1
- package/dist/evaluation/types.d.ts +3 -2
- package/dist/evaluation/types.js +2 -5
- package/dist/evaluation/types.js.map +1 -1
- package/dist/fragments/index.js +2 -338
- package/dist/fragments/index.js.map +1 -1
- package/dist/{generate-tSO_shQ0.d.ts → generate-DQ4ci90s.d.ts} +1 -1
- package/dist/harness/check/runtime-render/index.d.ts +35 -15
- package/dist/harness/check/runtime-render/index.js +6 -2390
- package/dist/harness/check/runtime-render/index.js.map +1 -1
- package/dist/harness/check/runtime-render/render-check-worker.js +4 -1739
- package/dist/harness/check/runtime-render/render-check-worker.js.map +1 -1
- package/dist/harness/index.d.ts +3 -2
- package/dist/harness/index.js +23 -5126
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/llm-trace-sink.js +2 -24
- package/dist/harness/llm-trace-sink.js.map +1 -1
- package/dist/harness/prompts.d.ts +2 -2
- package/dist/harness/prompts.js +8 -324
- package/dist/harness/prompts.js.map +1 -1
- package/dist/harness/result-types.d.ts +6 -5
- package/dist/harness/result-types.js +2 -0
- package/dist/harness/result-types.js.map +1 -1
- package/dist/harness/runtime.d.ts +22 -5
- package/dist/harness/runtime.js +10 -2313
- package/dist/harness/runtime.js.map +1 -1
- package/dist/harness/types-public.d.ts +3 -2
- package/dist/harness/types-public.js +16 -2954
- package/dist/harness/types-public.js.map +1 -1
- package/dist/harness/validator-trace-sink.d.ts +3 -2
- package/dist/harness/validator-trace-sink.js +2 -26
- package/dist/harness/validator-trace-sink.js.map +1 -1
- package/dist/hash.js +2 -39
- package/dist/hash.js.map +1 -1
- package/dist/hashline-5OKREIRM.js +4 -0
- package/dist/hashline-5OKREIRM.js.map +1 -0
- package/dist/index.d.ts +50 -11
- package/dist/index.js +57 -22015
- package/dist/index.js.map +1 -1
- package/dist/llm-evaluator-PN3WFCS4.js +653 -0
- package/dist/llm-evaluator-PN3WFCS4.js.map +1 -0
- package/dist/magic-string.es-2NZTC4GZ.js +1307 -0
- package/dist/magic-string.es-2NZTC4GZ.js.map +1 -0
- package/dist/patch.d.ts +3 -2
- package/dist/patch.js +2 -56
- package/dist/patch.js.map +1 -1
- package/dist/policy-VCYKGSAC.js +5 -0
- package/dist/policy-VCYKGSAC.js.map +1 -0
- package/dist/policy.js +2 -35
- package/dist/policy.js.map +1 -1
- package/dist/primitive-index-2OF6F4TZ.js +131 -0
- package/dist/primitive-index-2OF6F4TZ.js.map +1 -0
- package/dist/primitive-slice-WTMBLYFJ.js +235 -0
- package/dist/primitive-slice-WTMBLYFJ.js.map +1 -0
- package/dist/{prompts-BhNUuRoZ.d.ts → prompts-CLZGywMP.d.ts} +1 -1
- package/dist/provider-adapter-contract.js +10407 -14204
- package/dist/provider-adapter-contract.js.map +1 -1
- package/dist/provider-adapter.js +2 -44
- package/dist/provider-adapter.js.map +1 -1
- package/dist/providers/index.d.ts +89 -1
- package/dist/providers/index.js +115 -44
- package/dist/providers/index.js.map +1 -1
- package/dist/raw-C6KBH5I3.js +141 -0
- package/dist/raw-C6KBH5I3.js.map +1 -0
- package/dist/raw-FXSBXQTZ.js +7 -0
- package/dist/raw-FXSBXQTZ.js.map +1 -0
- package/dist/raw-MURDUPGK.js +8 -0
- package/dist/raw-MURDUPGK.js.map +1 -0
- package/dist/raw-T3GW3UVX.js +8 -0
- package/dist/raw-T3GW3UVX.js.map +1 -0
- package/dist/render-check-host-ZNIS6BJ5.js +5 -0
- package/dist/render-check-host-ZNIS6BJ5.js.map +1 -0
- package/dist/sdk-4JNSDNSR.js +6 -0
- package/dist/sdk-4JNSDNSR.js.map +1 -0
- package/dist/sdk-DIVJMHCX.js +7 -0
- package/dist/sdk-DIVJMHCX.js.map +1 -0
- package/dist/sdk-QRJOCRTS.js +7 -0
- package/dist/sdk-QRJOCRTS.js.map +1 -0
- package/dist/tag-balance-CTHCTRJ7.js +123 -0
- package/dist/tag-balance-CTHCTRJ7.js.map +1 -0
- package/dist/tools/get-primitives-ts.d.ts +1 -1
- package/dist/tools/get-primitives-ts.js +3 -1
- package/dist/tools/get-primitives-ts.js.map +1 -1
- package/dist/tools/render-check-worker.js +3 -40
- package/dist/tools/render-check-worker.js.map +1 -1
- package/dist/{types-public-h8IMnYuh.d.ts → types-public-hYlrerZh.d.ts} +35 -2
- package/dist/validation/index.d.ts +2 -2
- package/dist/validation/index.js +3 -498
- package/dist/validation/index.js.map +1 -1
- package/dist/{visual-evaluator-C2strxqD.d.ts → visual-evaluator-KskajxD5.d.ts} +14 -4
- package/dist/visual-evaluator-TGEXYQTP.js +12 -0
- package/dist/visual-evaluator-TGEXYQTP.js.map +1 -0
- package/dist/workflows.d.ts +3 -2
- package/dist/workflows.js +2 -151
- package/dist/workflows.js.map +1 -1
- package/package.json +20 -16
- package/src/adapters/claude/sdk.ts +4 -2
- package/src/adapters/claude/tool-bridge.ts +2 -1
- package/src/adapters/generation-dispatch.ts +9 -0
- package/src/adapters/openai/raw.ts +4 -0
- package/src/adapters/openai/sdk.ts +6 -1
- package/src/adapters/openai/tokens.ts +21 -7
- package/src/adapters/tool-bridge.ts +1 -1
- package/src/adapters/tools.ts +1 -1
- package/src/advanced/feedback.ts +1 -2
- package/src/advanced/generator.ts +4 -3
- package/src/boilerplate/free-design-prompt.ts +7 -0
- package/src/boilerplate/generate.ts +18 -5
- package/src/boilerplate/hard-sections.ts +8 -3
- package/src/boilerplate/react-hooks.ts +56 -0
- package/src/boilerplate/system-prompt.ts +12 -3
- package/src/check/run-tier0.ts +233 -8
- package/src/check/type-checker.ts +128 -16
- package/src/coding-agent/tools.ts +26 -3
- package/src/design-mode.ts +4 -9
- package/src/evaluation/axis-checks/checks/state-merge.ts +2 -4
- package/src/evaluation/axis-checks/checks/state-payload.ts +1 -28
- package/src/evaluation/axis-checks/checks/tint.ts +197 -0
- package/src/evaluation/axis-checks/helpers.ts +121 -0
- package/src/evaluation/axis-checks/registry.ts +2 -0
- package/src/evaluation/criteria/__fixtures__/edge-v2-draw2.json +4629 -0
- package/src/evaluation/criteria/bank.ts +1 -1
- package/src/evaluation/criteria/edge-instruments.ts +14 -0
- package/src/evaluation/criteria/edge-probe-v2.ts +352 -0
- package/src/evaluation/criteria/edge-v2.ts +242 -0
- package/src/evaluation/criteria/resolve.ts +24 -5
- package/src/evaluation/index.ts +3 -5
- package/src/evaluation/mcp-server.ts +0 -50
- package/src/evaluation/types-public.ts +6 -1
- package/src/evaluation/visual-evaluator.ts +161 -30
- package/src/harness/check/runtime-render/index.ts +28 -4
- package/src/harness/check/runtime-render/render-check.ts +20 -21
- package/src/harness/claude-agent-sdk-loader.ts +93 -0
- package/src/harness/claude-code-login-query.ts +1 -1
- package/src/harness/coding/generate-task-runner.ts +1 -0
- package/src/harness/coding/run-coding-turn.ts +3 -0
- package/src/harness/coding/run-eval-round.ts +9 -0
- package/src/harness/llm-router.ts +50 -2
- package/src/harness/runtime.ts +17 -0
- package/src/index.ts +9 -0
- package/src/providers/anthropic-tool-call.ts +263 -0
- package/src/providers/index.ts +13 -0
- package/src/tools/get-primitives-ts.ts +1 -1
- package/src/tools/render-check.ts +4 -4
- package/src/validation/primitives.ts +2 -1
- package/src/evaluation/loop.ts +0 -218
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/render-check.ts","../src/adapters/tools.ts"],"names":[],"mappings":"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","file":"chunk-3HSGA6NI.js","sourcesContent":["/**\n * Lightweight render smoke test for compiled components.\n *\n * Uses ReactDOMServer.renderToString() to verify the component\n * can render without throwing. Catches runtime errors that tsc misses\n * (undefined.toLowerCase(), missing prop access, etc.)\n *\n * Returns null on success, or an error message string on failure.\n *\n * **Execution model**: the actual `renderToString` runs in a\n * subprocess via `@ggui-ai/sandbox` — LLM-generated TSX never\n * executes in the parent Node process. The subprocess gets:\n *\n * - wall-clock timeout (12s — generous for weird LLM output)\n * - stdout cap (512 KiB — worker's JSON verdict is tiny; cap is\n * defensive)\n * - V8 heap cap (256 MB — bounds runaway allocations)\n * - owned tmpdir as cwd (cleaned up at finish)\n * - env allowlist (PATH/HOME/TMPDIR bootstrap only — no secrets\n * from the parent process.env reach the child)\n *\n * See `@ggui-ai/sandbox/README.md` for the honest boundary: this\n * setup does NOT block network egress, does NOT prevent FS reads\n * outside cwd, and does NOT cap CPU. Those need OS primitives that\n * aren't portable from Node user-space.\n */\nimport { existsSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport { pathToFileURL, fileURLToPath } from 'node:url';\nimport { runSandboxed } from '@ggui-ai/sandbox';\nimport { parseVerdictLine } from '../internal/verdict-line.js';\nimport type {\n JsonObject,\n} from '@ggui-ai/protocol';\n\n\n/**\n * Timeout for a single render smoke test. Generous — some LLM-\n * produced components hit pathological code paths (deep prop-drill\n * recursion, accidental infinite loops on null-guarded maps). 12s is\n * well above the ~100ms real renderToString cost + ~50ms subprocess\n * spawn, while still bounding runaway execution.\n */\nconst RENDER_TIMEOUT_MS = 12_000;\n\n/**\n * stdout byte cap. The worker writes a single JSON verdict\n * (`{ok: true}` or `{ok: false, error: \"...\"}`), which is tiny — a\n * few KiB is plenty for the longest useful error message. Cap\n * defensively at 512 KiB so a pathological worker can't flood.\n */\nconst RENDER_STDOUT_CAP = 512 * 1024;\n\n/**\n * V8 heap cap for the worker. 256 MB bounds runaway allocations\n * (e.g. a component that builds a massive array in render) while\n * leaving headroom for `react-dom/server` + esbuild's own heap.\n */\nconst RENDER_NODE_HEAP_MB = 256;\n\n/**\n * Resolve the worker entry + the spawn command to launch it.\n *\n * - **Built (`dist/`)**: the compiled `render-check-worker.js`\n * lives at `dist/tools/render-check-worker.js`. Some consumers\n * import via subpath entries (e.g. `@ggui-ai/ui-gen/adapters`)\n * that inline this function into a different dist directory\n * (e.g. `dist/adapters/index.js`); the worker lookup must still\n * find the worker file in `dist/tools/`. We search siblings AND\n * `../tools/` to cover both.\n * - **Dev / test (vitest imports `src/`)**: only the `.ts` source\n * exists at `src/tools/render-check-worker.ts`; spawn\n * `node --import tsx <tsPath>`. tsx is already a dev-dep of core\n * for the `dev` / `bench` scripts, so it's a safe assumption in\n * the test environment.\n *\n * Fails loudly at first call when none of the candidates exist —\n * that means a broken build, not a missing test fixture.\n */\nfunction resolveWorkerSpawn(): { command: string; args: string[] } {\n // Sibling-first, then from a dist-root module, then `../tools/`. A dist entry under `dist/<dir>/` reaches the\n // real `dist/tools/render-check-worker.js` through `../tools/`; a shared chunk at the dist root (ggui#1769: the\n // bundle splits shared modules, and this function lands in one) reaches it through `./tools/`.\n const jsCandidates = [\n new URL('./render-check-worker.js', import.meta.url),\n new URL('./tools/render-check-worker.js', import.meta.url),\n new URL('../tools/render-check-worker.js', import.meta.url),\n ];\n const tsCandidates = [\n new URL('./render-check-worker.ts', import.meta.url),\n new URL('../tools/render-check-worker.ts', import.meta.url),\n ];\n for (const jsUrl of jsCandidates) {\n const jsPath = fileURLToPath(jsUrl);\n if (existsSync(jsPath)) {\n return { command: process.execPath, args: [jsPath] };\n }\n }\n for (const tsUrl of tsCandidates) {\n const tsPath = fileURLToPath(tsUrl);\n if (existsSync(tsPath)) {\n // Pre-resolve tsx to an absolute file: URL so Node can find it\n // regardless of the subprocess's cwd (the sandbox mints a fresh\n // tmpdir for cwd by default; relative tsx lookup would fail).\n const require_ = createRequire(import.meta.url);\n const tsxLoader = pathToFileURL(require_.resolve('tsx')).href;\n return {\n command: process.execPath,\n args: ['--import', tsxLoader, tsPath],\n };\n }\n }\n const tried = [...jsCandidates, ...tsCandidates]\n .map((u) => fileURLToPath(u))\n .join(', ');\n throw new Error(\n `render-check: worker not found at any of: ${tried}. Did \\`pnpm build\\` run?`,\n );\n}\n\nexport async function tryRender(\n compiledCode: string,\n sourceCode: string,\n sampleProps?: JsonObject,\n): Promise<string | null> {\n // `compiledCode` is intentionally ignored — the worker re-compiles\n // as CJS internally. Keeping the parameter preserves the callsite\n // signature so upstream callers (tools.ts, lambda-handler.ts) don't\n // churn.\n void compiledCode;\n\n const payload = JSON.stringify({ sourceCode, sampleProps });\n const spawn = resolveWorkerSpawn();\n\n const result = await runSandboxed({\n command: spawn.command,\n args: spawn.args,\n timeoutMs: RENDER_TIMEOUT_MS,\n maxStdoutBytes: RENDER_STDOUT_CAP,\n nodeHeapMb: RENDER_NODE_HEAP_MB,\n stdin: payload,\n // Forward only what the worker needs. NODE_ENV lets React pick\n // production vs development builds; everything else stays at the\n // sandbox's default allowlist (PATH/HOME/TMPDIR bootstrap).\n env: {\n NODE_ENV: process.env.NODE_ENV ?? 'production',\n },\n });\n\n if (result.outcome === 'timeout') {\n return `Render timeout: component did not finish within ${RENDER_TIMEOUT_MS}ms (likely infinite loop or runaway recursion).`;\n }\n if (result.outcome === 'overflow-stdout' || result.outcome === 'overflow-stderr') {\n return `Render error: worker produced excessive output (${result.outcome}). The component is likely in a pathological state.`;\n }\n if (result.outcome === 'canceled') {\n return 'Render error: smoke test was canceled before completing.';\n }\n if (result.outcome === 'spawn-error') {\n return `Render error: failed to start worker — ${result.errorMessage}`;\n }\n if (result.outcome !== 'exit') {\n return `Render error: unexpected sandbox outcome '${result.outcome}'.`;\n }\n\n // Worker exited cleanly. Parse its verdict.\n if (result.exitCode !== 0) {\n const tail = result.stderr.trim() || result.stdout.trim();\n return `Render error: worker exited ${result.exitCode}${tail ? ` — ${tail}` : ''}`;\n }\n\n type Verdict = { ok: true } | { ok: false; error: string };\n let verdict: Verdict | undefined;\n try {\n // The verdict rides its own prefixed line, so a component that logs to\n // stdout while it renders cannot corrupt it.\n verdict = parseVerdictLine<Verdict>(result.stdout);\n } catch (err) {\n return `Render error: malformed worker verdict — ${\n err instanceof Error ? err.message : String(err)\n }`;\n }\n if (verdict === undefined) {\n return 'Render error: worker exited without producing a verdict.';\n }\n\n return verdict.ok ? null : verdict.error;\n}\n","// packages/ui-gen/src/adapters/tools.ts\n//\n// SDK-agnostic tool definitions for UI generation.\n// These use the same Zod schemas and handlers as the production MCP server\n// but without Claude Agent SDK dependencies, making them portable across\n// OpenAI, Google, and Anthropic SDKs.\n\nimport * as z from 'zod';\nimport * as esbuild from 'esbuild';\nimport { PRIMITIVES_DOCUMENTATION } from '../validation/index.js';\nimport {\n validateComponentDetailed,\n formatValidationResultForClaude,\n} from '../validation/index.js';\nimport { DEFAULT_DESIGN_SYSTEM_DOCS } from '../design-system-docs.js';\nimport { isAllowedImport, describeAllowedImports } from '../validation/allowed-imports.js';\nimport type { ToolDefinition, ToolResult } from './types';\nimport type { DataContract, JsonObject } from '@ggui-ai/protocol';\nimport { validateAllContracts } from '../check/index.js';\nimport { typecheck } from '../check/index.js';\nimport { lintReactHooks } from '../check/index.js';\nimport ts from 'typescript';\nimport { tryRender } from '../tools/render-check.js';\nimport { generateSampleProps } from '../check/sample-props.js';\n\n/**\n * Context for creating generator tools.\n * Allows passing app-specific component docs.\n */\nexport interface GeneratorToolsContext {\n /** App-specific design context (DESIGN.md content) */\n designContext?: string;\n /** App-specific reusable component documentation */\n componentContext?: string;\n /** Data contract for validation (props, stream, actions) */\n contract?: DataContract;\n /** Sample props for render smoke test (realistic data matching the contract) */\n sampleProps?: JsonObject;\n}\n\n/**\n * Create the SDK-agnostic tool definitions for UI generation.\n *\n * 6 tools matching the MCP server:\n * 1. get_primitives — available UI components\n * 2. get_design_system — CSS variable tokens\n * 3. get_app_components — app-specific reusable components\n * 4. validate_component — pre-compilation check\n * 5. self_check — typecheck + lint + render smoke test\n * 6. compile_component — TSX→JS via esbuild\n *\n * Each tool uses the exact same handlers as the production MCP server,\n * but wrapped in a provider-neutral format.\n */\nexport function createGeneratorTools(context: GeneratorToolsContext = {}): ToolDefinition[] {\n const tools: ToolDefinition[] = [\n // --- get_primitives ---\n {\n name: 'get_primitives',\n description:\n 'Get the list of available ggui UI primitives (Container, Card, Stack, Button, Input, etc.) that can be used in components. Call this first to understand what components are available.',\n inputSchema: z.object({}),\n handler: async (): Promise<ToolResult> => ({\n content: [{ type: 'text', text: PRIMITIVES_DOCUMENTATION }],\n }),\n },\n\n // --- get_design_system ---\n {\n name: 'get_design_system',\n description:\n 'Get the design system tokens and CSS variables for this app. Use these CSS variables (var(--ggui-*)) for colors, spacing, typography, etc.',\n inputSchema: z.object({}),\n handler: async (): Promise<ToolResult> => ({\n content: [{\n type: 'text',\n text: context.designContext\n ? `# App Theme Configuration\\n\\n${context.designContext}\\n\\n**IMPORTANT:** Always use CSS variables (var(--ggui-*)) for colors, spacing, etc.`\n : DEFAULT_DESIGN_SYSTEM_DOCS,\n }],\n }),\n },\n\n // --- get_app_components ---\n {\n name: 'get_app_components',\n description:\n 'Get predefined reusable components specific to this app. These can be imported and used in your generated component.',\n inputSchema: z.object({}),\n handler: async (): Promise<ToolResult> => ({\n content: [{\n type: 'text',\n text: context.componentContext || 'No predefined components available for this app.',\n }],\n }),\n },\n\n // --- validate_component ---\n {\n name: 'validate_component',\n description:\n 'Validate component code before compilation. Checks for security issues, syntax errors, and best practices. Returns detailed feedback.',\n inputSchema: z.object({\n code: z.string().describe('The TypeScript/TSX component code to validate'),\n }),\n handler: async (args): Promise<ToolResult> => {\n const result = validateComponentDetailed(args.code as string);\n return {\n content: [\n {\n type: 'text',\n text: formatValidationResultForClaude(result),\n },\n ],\n isError: !result.valid,\n };\n },\n },\n\n // --- self_check ---\n {\n name: 'self_check',\n description:\n 'Run deterministic quality checks on your code BEFORE compiling. Catches common issues instantly (zero cost). Returns pass/fail per check with line numbers and fix instructions. Call this after writing code, fix any failures, then compile.',\n inputSchema: z.object({\n code: z.string().describe('The TypeScript/TSX component code to check'),\n }),\n handler: async (args): Promise<ToolResult> => {\n const code = args.code as string;\n const { issues, typeWarnings } = await runSelfChecks(code, context.contract);\n\n // Contract validation — check props, stream, actions conformance\n if (context.contract) {\n const contractIssues = validateAllContracts(code, context.contract);\n for (const ci of contractIssues) {\n issues.push({\n check: `contract:${ci.field}`,\n line: 0,\n message: `[${ci.severity}] ${ci.message}`,\n fix: ci.fix,\n });\n }\n }\n\n if (issues.length === 0) {\n const warningText = typeWarnings.length > 0\n ? `\\n\\nType warnings (non-blocking):\\n${typeWarnings.map(w => `[${w.check}] ${w.line ? `Line ${w.line}: ` : ''}${w.message}`).join('\\n')}`\n : '';\n return {\n content: [{ type: 'text', text: `All checks passed. Ready to compile.${warningText}` }],\n };\n }\n\n const report = issues.map((i) => `[${i.check}] ${i.line ? `Line ${i.line}: ` : ''}${i.message}\\n Fix: ${i.fix}`).join('\\n\\n');\n return {\n content: [{ type: 'text', text: `${issues.length} issue(s) found:\\n\\n${report}` }],\n isError: true,\n };\n },\n },\n\n // --- compile_component ---\n {\n name: 'compile_component',\n description:\n 'Compile a TypeScript/TSX component to JavaScript using esbuild. Returns the compiled code ready for browser execution. On failure, returns detailed error context with line numbers and fix suggestions.',\n inputSchema: z.object({\n code: z.string().describe('The TypeScript/TSX component code to compile'),\n filename: z\n .string()\n .default('Component.tsx')\n .describe('Filename for error messages'),\n }),\n handler: async (args): Promise<ToolResult> => {\n const code = args.code as string;\n const filename = (args.filename as string) || 'Component.tsx';\n\n // Run self-checks first (catches hex colors, raw pixels, forbidden imports, etc.)\n const { issues: selfCheckIssues } = await runSelfChecks(code, context.contract);\n\n // Contract validation\n if (context.contract) {\n const contractIssues = validateAllContracts(code, context.contract);\n for (const ci of contractIssues) {\n selfCheckIssues.push({\n check: `contract:${ci.field}`,\n line: 0,\n message: `[${ci.severity}] ${ci.message}`,\n fix: ci.fix,\n });\n }\n }\n\n if (selfCheckIssues.length > 0) {\n const report = selfCheckIssues.map((i) => `[${i.check}] ${i.line ? `Line ${i.line}: ` : ''}${i.message}\\n Fix: ${i.fix}`).join('\\n\\n');\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n phase: 'self_check',\n error: `${selfCheckIssues.length} issue(s) found — fix these before recompiling:\\n\\n${report}`,\n }, null, 2),\n }],\n isError: true,\n };\n }\n\n // Run validation first\n const validation = validateComponentDetailed(code);\n if (!validation.valid) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n success: false,\n phase: 'validation',\n error: formatValidationResultForClaude(validation),\n },\n null,\n 2\n ),\n },\n ],\n isError: true,\n };\n }\n\n try {\n const result = await esbuild.transform(code, {\n loader: 'tsx',\n target: 'es2020',\n format: 'esm',\n jsx: 'automatic',\n jsxImportSource: 'react',\n minify: true,\n sourcefile: filename,\n });\n\n const warnings = [\n ...result.warnings.map((w) => w.text),\n ...validation.warnings.map(\n (w: { type: string; message: string; suggestion: string }) =>\n `[${w.type}] ${w.message}: ${w.suggestion}`\n ),\n ];\n\n // Post-compilation: validate all contract (hard gate for errors)\n if (context.contract) {\n const contractIssues = validateAllContracts(code, context.contract);\n const errors = contractIssues.filter((i) => i.severity === 'error');\n const contractWarnings = contractIssues.filter((i) => i.severity === 'warning');\n\n if (errors.length > 0) {\n const report = errors\n .map((i) => `- [${i.field}] ${i.message}\\n Fix: ${i.fix}`)\n .join('\\n');\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n phase: 'contract_validation',\n error: `Compilation succeeded but data contract validation failed:\\n\\n${report}\\n\\nFix the Props interface to match the data contract, then recompile.`,\n }, null, 2),\n }],\n isError: true,\n };\n }\n\n warnings.push(...contractWarnings.map((i) => `[contract:${i.field}] ${i.message}`));\n }\n\n // Render smoke test — catches runtime errors tsc misses\n // Prefer explicit sampleProps (realistic data), fall back to contract-derived\n const sampleProps = context.sampleProps\n ?? (context.contract?.propsSpec ? generateSampleProps(context.contract.propsSpec) : undefined);\n const renderError = await tryRender(result.code, code, sampleProps);\n if (renderError) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n phase: 'render_smoke_test',\n compiledCode: result.code,\n error: `${renderError}\\n\\nThe component compiled but crashes at runtime. Fix the null/undefined access and recompile.`,\n warnings,\n }, null, 2),\n }],\n isError: true,\n };\n }\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n success: true,\n compiledCode: result.code,\n warnings,\n },\n null,\n 2\n ),\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n { success: false, phase: 'compilation', error: formatEsbuildError(error, code) },\n null,\n 2\n ),\n },\n ],\n isError: true,\n };\n }\n },\n },\n ];\n\n return tools;\n}\n\n/**\n * Format an esbuild error into a readable error message with code context.\n */\nfunction formatEsbuildError(error: unknown, sourceCode: string): string {\n const parts: string[] = [];\n\n if (\n error &&\n typeof error === 'object' &&\n 'errors' in error &&\n Array.isArray((error as { errors: unknown[] }).errors)\n ) {\n const esbuildError = error as esbuild.TransformFailure;\n for (const err of esbuildError.errors) {\n const line = err.location?.line;\n const col = err.location?.column;\n parts.push(`**Error:** ${err.text}`);\n if (line) {\n parts.push(`**Location:** Line ${line}, Column ${col ?? 0}`);\n const lines = sourceCode.split('\\n');\n const start = Math.max(0, line - 3);\n const end = Math.min(lines.length, line + 2);\n const context = lines\n .slice(start, end)\n .map((l, i) => {\n const ln = start + i + 1;\n return `${ln === line ? '>>> ' : ' '}${ln} | ${l}`;\n })\n .join('\\n');\n parts.push(`**Code:**\\n\\`\\`\\`\\n${context}\\n\\`\\`\\``);\n }\n }\n } else {\n parts.push(`**Error:** ${error instanceof Error ? error.message : 'Compilation failed'}`);\n }\n\n parts.push('\\n**How to fix:** Review the error above, fix the code, then call compile_component again.');\n return parts.join('\\n');\n}\n\n// =============================================================================\n// Self-Check: Deterministic Quality Checks\n// =============================================================================\n\nexport interface SelfCheckIssue {\n check: string;\n line: number;\n message: string;\n fix: string;\n}\n\n// =============================================================================\n// AST-Based React Rules Checker\n// =============================================================================\n\n// Form components that require a label or aria-label prop for accessibility.\nconst LABELED_COMPONENTS = new Set(['Input', 'TextArea', 'Select']);\n\n/**\n * AST-based JSX prop checker.\n * Parses TSX with TypeScript compiler to verify required props on form elements.\n * React hooks rules are handled by eslint-plugin-react-hooks (see react-linter.ts).\n */\nfunction checkReactRules(code: string): SelfCheckIssue[] {\n const sf = ts.createSourceFile('component.tsx', code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);\n const issues: SelfCheckIssue[] = [];\n\n function visit(node: ts.Node): void {\n if (ts.isJsxSelfClosingElement(node) || ts.isJsxOpeningElement(node)) {\n const tagName = node.tagName.getText(sf);\n if (LABELED_COMPONENTS.has(tagName)) {\n const propNames = new Set<string>();\n let hasSpread = false;\n for (const attr of node.attributes.properties) {\n if (ts.isJsxAttribute(attr)) {\n propNames.add(attr.name.getText(sf));\n } else if (ts.isJsxSpreadAttribute(attr)) {\n hasSpread = true;\n }\n }\n if (!hasSpread && !propNames.has('label') && !propNames.has('aria-label')) {\n const line = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line + 1;\n issues.push({\n check: 'accessibility',\n line,\n message: `${tagName} missing label prop`,\n fix: `Add label=\"...\" prop directly on the ${tagName} component. The label prop is built into the primitive.`,\n });\n }\n }\n }\n ts.forEachChild(node, visit);\n }\n\n visit(sf);\n return issues;\n}\n\n/**\n * Run deterministic quality checks on component source code.\n * Returns actionable issues with line numbers and fix instructions.\n *\n * `contract` (optional) feeds the import allowlist: generated\n * code direct-imports gadget exports, so every gadget package the\n * contract declares is a permitted import source.\n */\nexport async function runSelfChecks(\n code: string,\n contract?: DataContract,\n): Promise<{ issues: SelfCheckIssue[]; typeWarnings: SelfCheckIssue[] }> {\n const issues: SelfCheckIssue[] = [];\n const lines = code.split('\\n');\n // Gadget packages the contract declares are import-allowlisted.\n // `clientCapabilities.gadgets` is package-keyed, so the map's\n // own keys ARE the allowlisted import sources.\n const allowedGadgetPackages = new Set<string>(\n Object.keys(contract?.clientCapabilities?.gadgets ?? {}),\n );\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const lineNum = i + 1;\n\n // Check: hardcoded hex colors\n const hexMatch = line.match(/#[0-9a-fA-F]{3,8}\\b/);\n if (hexMatch && !line.includes('var(--ggui-') && !line.includes('// fallback')) {\n issues.push({\n check: 'hex-color',\n line: lineNum,\n message: `Hardcoded color \"${hexMatch[0]}\" — must use design tokens`,\n fix: `Replace \"${hexMatch[0]}\" with a primitive variant OR a bare token reference such as var(--ggui-color-primary-500) — never a literal fallback inside var()`,\n });\n }\n\n // Check: rgba()/hsl() hardcoded color functions\n const colorFnMatch = line.match(/\\b(rgba?|hsla?)\\s*\\(/);\n if (colorFnMatch && !line.includes('var(--ggui-') && !line.includes('// fallback') && !line.includes('$value')) {\n issues.push({\n check: 'hardcoded-color-fn',\n line: lineNum,\n message: `Hardcoded ${colorFnMatch[1]}() — use design tokens instead`,\n fix: `Replace with the layering roles: var(--ggui-color-container), var(--ggui-color-onContainer), var(--ggui-color-outline), etc.`,\n });\n }\n\n // Check: neutral-50/900 used for background/text — suggest semantic tokens\n if (/--ggui-color-neutral-50[^0-9]/.test(line) && /background/i.test(line)) {\n issues.push({\n check: 'prefer-semantic',\n line: lineNum,\n message: `neutral-50 for background — prefer semantic token for dark-theme compatibility`,\n fix: `Replace with var(--ggui-color-container) or var(--ggui-color-sunken)`,\n });\n }\n if (/--ggui-color-neutral-900[^0-9]/.test(line) && /color/i.test(line) && !/background/i.test(line)) {\n issues.push({\n check: 'prefer-semantic',\n line: lineNum,\n message: `neutral-900 for text color — prefer semantic token for dark-theme compatibility`,\n fix: `Replace with var(--ggui-color-onContainer) or var(--ggui-color-onSunken)`,\n });\n }\n\n // Check: raw pixel values in padding/margin/gap (not in var() or calc())\n const pxMatch = line.match(/(?:padding|margin|gap|borderRadius)\\s*:\\s*['\"]?\\d+px/);\n if (pxMatch && !line.includes('var(--ggui-')) {\n issues.push({\n check: 'raw-pixels',\n line: lineNum,\n message: `Raw pixel value in spacing — must use design tokens`,\n fix: `Replace with a bare var(--ggui-spacing-*) token — no literal fallback — or the scale name on the primitive prop (gap=\"md\", padding=\"lg\")`,\n });\n }\n\n // Check: forbidden APIs\n if (/\\beval\\s*\\(/.test(line)) {\n issues.push({ check: 'security', line: lineNum, message: 'eval() is forbidden', fix: 'Remove eval() call entirely' });\n }\n if (/\\bfetch\\s*\\(/.test(line)) {\n issues.push({ check: 'security', line: lineNum, message: 'fetch() is forbidden — use props for data', fix: 'Remove fetch() and pass data via props' });\n }\n\n // Check: forbidden imports\n const importMatch = line.match(/import\\s+.*from\\s+['\"]([^'\"]+)['\"]/);\n if (importMatch) {\n const pkg = importMatch[1];\n // Import allowlist — single source of truth in\n // `validation/allowed-imports.ts`. Generated code\n // direct-imports gadget exports, so every gadget package the\n // contract declares is allowlisted alongside STDLIB `@ggui-ai/gadgets`.\n if (!isAllowedImport(pkg, allowedGadgetPackages)) {\n issues.push({\n check: 'import',\n line: lineNum,\n message: `Import from \"${pkg}\" is not allowed`,\n fix: `Only import from: ${describeAllowedImports()}`,\n });\n }\n }\n\n // NOTE: Input/TextArea/Select label checks moved to AST-based checkJsxProps() below\n }\n\n // ── AST-based JSX prop checks ──────────────────────────\n // Uses TypeScript compiler to parse JSX — handles multi-line, spread props, etc.\n try {\n const jsxIssues = checkReactRules(code);\n issues.push(...jsxIssues);\n } catch {\n // Parsing may fail on malformed code — fall through to other checks\n }\n\n // Check: no Props interface\n if (!code.includes('interface Props') && !code.includes('type Props')) {\n issues.push({\n check: 'props-interface',\n line: 1,\n message: 'No Props interface found — data is likely hardcoded',\n fix: 'Add interface Props { ... } with typed fields and default values in the function signature',\n });\n }\n\n // Check: no default export\n if (!code.includes('export default function')) {\n issues.push({\n check: 'export',\n line: 1,\n message: 'Missing default export function',\n fix: 'Add export default function GeneratedComponent(props: Props) { ... }',\n });\n }\n\n const typeWarnings: SelfCheckIssue[] = [];\n\n // Run TS type-checker + React hooks linter in parallel\n const [typeResult, reactResult] = await Promise.all([\n typecheck(code).catch((err) => {\n console.warn('[runSelfChecks] TypeChecker failed:', err instanceof Error ? err.message : String(err));\n return null;\n }),\n lintReactHooks(code).catch((err) => {\n console.warn('[runSelfChecks] React linter failed:', err instanceof Error ? err.message : String(err));\n return [] as import('../check/index.js').ReactLintDiagnostic[];\n }),\n ]);\n\n // TS type errors\n if (typeResult) {\n for (const error of typeResult.errors) {\n issues.push({\n check: `ts${error.code}`,\n line: error.line,\n message: error.message,\n fix: error.fix,\n });\n }\n for (const warning of typeResult.warnings) {\n typeWarnings.push({\n check: `ts${warning.code}`,\n line: warning.line,\n message: warning.message,\n fix: warning.fix,\n });\n }\n }\n\n // React hooks violations. Errors (rules-of-hooks, jsx-no-undef, direct-\n // mutation) always block. exhaustive-deps warnings are usually advisory —\n // except when the effect body mutates state (setState / setX / dispatch),\n // in which case a missing dep is a near-certain infinite-render loop once\n // the component renders at runtime. The happy-dom probe catches this only\n // AFTER burning CPU; we'd rather fail preflight.\n //\n // Narrow promotion heuristic: file has a setter-like call AND diagnostic\n // message indicates a missing-dep / unstable-ref class. Inline-object\n // warnings on effects that DON'T mutate state stay advisory to avoid\n // over-constraining.\n const hasStateSetter = /\\b(set[A-Z]\\w*|dispatch)\\s*\\(/.test(code);\n const isSetterLoopRisk = (diag: { rule: string; message: string }): boolean => {\n if (diag.rule !== 'react-hooks/exhaustive-deps') return false;\n if (!hasStateSetter) return false;\n // eslint-plugin-react-hooks message shapes for the loop-risk class:\n // \"React Hook useEffect has a missing dependency: 'x'. Either include it...\"\n // \"The 'x' object / 'x' array makes the dependencies of useEffect Hook\n // change on every render.\"\n return /missing dependenc|changes on every render|object makes the dependencies|array makes the dependencies/i.test(\n diag.message,\n );\n };\n\n for (const diag of reactResult) {\n const blocking = diag.severity === 'error' || isSetterLoopRisk(diag);\n if (blocking) {\n issues.push({\n check: diag.rule,\n line: diag.line,\n message: isSetterLoopRisk(diag)\n ? `${diag.message} (promoted to error: effect mutates state — missing/unstable deps cause infinite render loops)`\n : diag.message,\n fix: diag.fix,\n });\n } else {\n typeWarnings.push({\n check: diag.rule,\n line: diag.line,\n message: diag.message,\n fix: diag.fix,\n });\n }\n }\n\n // Merge overlapping issues: when multiple checkers flag the same line,\n // combine into one issue with the clearest actionable message.\n // e.g. AST says \"Input missing label prop\" + TS says \"ts2786 type mismatch\"\n // → single issue: \"Input missing label prop [also: ts2786]\"\n const lineMap = new Map<number, SelfCheckIssue[]>();\n for (const i of issues) {\n const list = lineMap.get(i.line) ?? [];\n list.push(i);\n lineMap.set(i.line, list);\n }\n\n const deduped: SelfCheckIssue[] = [];\n for (const [, group] of lineMap) {\n if (group.length === 1) {\n deduped.push(group[0]);\n continue;\n }\n // Prefer the non-TS issue (AST/ESLint) as primary — it's more actionable\n const primary = group.find(i => !i.check.startsWith('ts')) ?? group[0];\n const others = group.filter(i => i !== primary);\n if (others.length > 0) {\n const alsoTags = others.map(o => o.check).join(', ');\n deduped.push({\n ...primary,\n message: `${primary.message} [also flagged by: ${alsoTags}]`,\n });\n } else {\n deduped.push(primary);\n }\n }\n\n return { issues: deduped, typeWarnings };\n}\n"]}
|