@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,235 @@
|
|
|
1
|
+
import './chunk-G3PMV62Z.js';
|
|
2
|
+
|
|
3
|
+
// src/harness/primitive-slice.ts
|
|
4
|
+
var CORE_PRIMITIVES = [
|
|
5
|
+
"Container",
|
|
6
|
+
"Stack",
|
|
7
|
+
"Row",
|
|
8
|
+
"Box",
|
|
9
|
+
"Card",
|
|
10
|
+
"Divider",
|
|
11
|
+
"Spacer",
|
|
12
|
+
"Text",
|
|
13
|
+
"Heading",
|
|
14
|
+
"Button",
|
|
15
|
+
"Icon",
|
|
16
|
+
"Badge"
|
|
17
|
+
];
|
|
18
|
+
var KNOWN_PRIMITIVE_SECTIONS = /* @__PURE__ */ new Set([
|
|
19
|
+
// Layout
|
|
20
|
+
"Container",
|
|
21
|
+
"Card",
|
|
22
|
+
"Stack",
|
|
23
|
+
"Box",
|
|
24
|
+
"Divider",
|
|
25
|
+
"Spacer",
|
|
26
|
+
// Typography
|
|
27
|
+
"Text",
|
|
28
|
+
"Heading",
|
|
29
|
+
// Inputs
|
|
30
|
+
"Button",
|
|
31
|
+
"Input",
|
|
32
|
+
"TextArea",
|
|
33
|
+
"Select",
|
|
34
|
+
"Checkbox",
|
|
35
|
+
"Toggle",
|
|
36
|
+
"RadioGroup",
|
|
37
|
+
"Slider",
|
|
38
|
+
// Display
|
|
39
|
+
"Badge",
|
|
40
|
+
"Spinner",
|
|
41
|
+
"Avatar",
|
|
42
|
+
"Alert",
|
|
43
|
+
"Progress",
|
|
44
|
+
"Image",
|
|
45
|
+
"Icon",
|
|
46
|
+
"Link",
|
|
47
|
+
"Tooltip",
|
|
48
|
+
// Data
|
|
49
|
+
"Table",
|
|
50
|
+
"Tabs",
|
|
51
|
+
"Toast",
|
|
52
|
+
"Accordion",
|
|
53
|
+
// Components
|
|
54
|
+
"SearchField",
|
|
55
|
+
"FormField",
|
|
56
|
+
"MenuItem",
|
|
57
|
+
"Tag",
|
|
58
|
+
"Dropdown",
|
|
59
|
+
"Autocomplete",
|
|
60
|
+
"Breadcrumb",
|
|
61
|
+
"Pagination",
|
|
62
|
+
"Stat",
|
|
63
|
+
"Stepper",
|
|
64
|
+
"Markdown",
|
|
65
|
+
"MarkdownInline",
|
|
66
|
+
// Compositions
|
|
67
|
+
"Header",
|
|
68
|
+
"Sidebar",
|
|
69
|
+
"CardGrid",
|
|
70
|
+
"CommentThread",
|
|
71
|
+
"DataTable",
|
|
72
|
+
"ChatWindow",
|
|
73
|
+
"NavigationBar",
|
|
74
|
+
"FileUploader",
|
|
75
|
+
"NotificationCenter",
|
|
76
|
+
"Modal",
|
|
77
|
+
"CommandPalette",
|
|
78
|
+
"Footer",
|
|
79
|
+
"Hero"
|
|
80
|
+
]);
|
|
81
|
+
var AXIS_PRIMITIVES = {
|
|
82
|
+
// render ────────────────────────────────────────────────────────
|
|
83
|
+
"render:list": ["Badge", "Avatar", "Spinner", "Link"],
|
|
84
|
+
"render:grid": ["CardGrid", "Badge", "Image", "Stat"],
|
|
85
|
+
"render:timeline": ["Badge", "Avatar", "Spinner", "Link"],
|
|
86
|
+
"render:master-detail": ["Sidebar", "SearchField", "Badge"],
|
|
87
|
+
"render:spatial": ["Image"],
|
|
88
|
+
"render:chart": ["Progress", "Badge", "Stat"],
|
|
89
|
+
"render:static": ["Stat"],
|
|
90
|
+
// state ─────────────────────────────────────────────────────────
|
|
91
|
+
"state:payload": ["Input", "TextArea", "Select", "Checkbox", "Toggle", "RadioGroup", "Slider", "FormField", "Alert"],
|
|
92
|
+
"state:draft": ["Input", "TextArea", "FormField", "Alert"],
|
|
93
|
+
"state:ui-affordance": ["Input", "Toggle", "Tabs", "SearchField"],
|
|
94
|
+
"state:merge": ["Spinner", "Badge", "Alert"],
|
|
95
|
+
"state:none": [],
|
|
96
|
+
// writes ────────────────────────────────────────────────────────
|
|
97
|
+
"writes:submit": ["Input", "TextArea", "Select", "Checkbox", "Toggle", "RadioGroup", "Slider", "FormField", "Alert"],
|
|
98
|
+
"writes:commit": ["Alert"],
|
|
99
|
+
"writes:multi-commit": ["Dropdown", "MenuItem", "Alert", "Tag"],
|
|
100
|
+
"writes:per-item": ["Toggle", "Dropdown", "MenuItem"],
|
|
101
|
+
"writes:compose": ["Autocomplete", "Dropdown", "Input", "Tag"],
|
|
102
|
+
"writes:none": [],
|
|
103
|
+
// writeTrigger ──────────────────────────────────────────────────
|
|
104
|
+
"writeTrigger:drag": [],
|
|
105
|
+
"writeTrigger:swipe": [],
|
|
106
|
+
"writeTrigger:keystroke": [],
|
|
107
|
+
"writeTrigger:auto": [],
|
|
108
|
+
"writeTrigger:click": [],
|
|
109
|
+
// realtime ──────────────────────────────────────────────────────
|
|
110
|
+
"realtime:merge": ["Spinner", "Badge", "Alert"],
|
|
111
|
+
"realtime:append": ["Spinner", "Badge"],
|
|
112
|
+
"realtime:status": ["Badge", "Alert"],
|
|
113
|
+
"realtime:presence": ["Avatar", "Badge"],
|
|
114
|
+
"realtime:mixed": ["Spinner", "Badge", "Avatar", "Alert"],
|
|
115
|
+
"realtime:none": [],
|
|
116
|
+
// fetch ─────────────────────────────────────────────────────────
|
|
117
|
+
"fetch:pagination": ["Pagination", "Spinner"],
|
|
118
|
+
"fetch:search": ["SearchField", "Autocomplete", "Spinner"],
|
|
119
|
+
"fetch:drill-down": ["Spinner", "Breadcrumb"],
|
|
120
|
+
"fetch:refresh": ["Spinner"],
|
|
121
|
+
"fetch:none": [],
|
|
122
|
+
// layout ────────────────────────────────────────────────────────
|
|
123
|
+
"layout:multi-step": ["Stepper"],
|
|
124
|
+
"layout:master-detail": ["Sidebar"],
|
|
125
|
+
"layout:overlay": ["Modal", "Tooltip"],
|
|
126
|
+
"layout:modal": ["Modal"],
|
|
127
|
+
"layout:single": [],
|
|
128
|
+
// tooling ───────────────────────────────────────────────────────
|
|
129
|
+
"tooling:wired": ["Alert"],
|
|
130
|
+
"tooling:client": ["Alert"],
|
|
131
|
+
"tooling:both": ["Alert"],
|
|
132
|
+
"tooling:none": []
|
|
133
|
+
};
|
|
134
|
+
function computePrimitiveAllowlist(classification) {
|
|
135
|
+
const set = new Set(CORE_PRIMITIVES);
|
|
136
|
+
const v = classification.vector;
|
|
137
|
+
for (const [axis, value] of [
|
|
138
|
+
["render", v.render],
|
|
139
|
+
["state", v.state],
|
|
140
|
+
["writes", v.writes],
|
|
141
|
+
["writeTrigger", v.writeTrigger],
|
|
142
|
+
["realtime", v.realtime],
|
|
143
|
+
["fetch", v.fetch],
|
|
144
|
+
["layout", v.layout],
|
|
145
|
+
["tooling", v.tooling]
|
|
146
|
+
]) {
|
|
147
|
+
const additions = AXIS_PRIMITIVES[`${axis}:${value}`] ?? [];
|
|
148
|
+
for (const p of additions) set.add(p);
|
|
149
|
+
}
|
|
150
|
+
return [...set].sort();
|
|
151
|
+
}
|
|
152
|
+
function computeContractPrimitives(contract) {
|
|
153
|
+
const out = /* @__PURE__ */ new Set();
|
|
154
|
+
if (!contract) return [];
|
|
155
|
+
for (const slot of Object.values(contract.contextSpec ?? {})) addLeaves(slot.schema, out);
|
|
156
|
+
for (const action of Object.values(contract.actionSpec ?? {})) {
|
|
157
|
+
if (action.schema) addLeaves(action.schema, out);
|
|
158
|
+
}
|
|
159
|
+
if (Object.keys(contract.streamSpec ?? {}).length > 0) {
|
|
160
|
+
out.add("Spinner");
|
|
161
|
+
out.add("Badge");
|
|
162
|
+
}
|
|
163
|
+
return [...out].sort();
|
|
164
|
+
}
|
|
165
|
+
function addLeaves(schema, out) {
|
|
166
|
+
for (const child of Object.values(schema.properties ?? {})) addLeaves(child, out);
|
|
167
|
+
if (schema.items) addLeaves(schema.items, out);
|
|
168
|
+
if (schema.enum && schema.enum.length > 0) {
|
|
169
|
+
out.add("Select");
|
|
170
|
+
out.add("RadioGroup");
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const types = Array.isArray(schema.type) ? schema.type : schema.type ? [schema.type] : [];
|
|
174
|
+
for (const t of types) {
|
|
175
|
+
if (t === "string") {
|
|
176
|
+
out.add("Input");
|
|
177
|
+
out.add("TextArea");
|
|
178
|
+
out.add("FormField");
|
|
179
|
+
} else if (t === "number" || t === "integer") {
|
|
180
|
+
out.add("Input");
|
|
181
|
+
out.add("Slider");
|
|
182
|
+
} else if (t === "boolean") {
|
|
183
|
+
out.add("Checkbox");
|
|
184
|
+
out.add("Toggle");
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function slicePrimitiveDocumentation(fullDoc, allowlist) {
|
|
189
|
+
const allow = new Set(allowlist);
|
|
190
|
+
const firstSection = fullDoc.search(/^### \S/m);
|
|
191
|
+
if (firstSection === -1) return fullDoc;
|
|
192
|
+
const preamble = fullDoc.slice(0, firstSection);
|
|
193
|
+
const remainder = fullDoc.slice(firstSection);
|
|
194
|
+
const sectionRegex = /^### (\S+)/gm;
|
|
195
|
+
const matches = [];
|
|
196
|
+
let m;
|
|
197
|
+
while ((m = sectionRegex.exec(remainder)) !== null) {
|
|
198
|
+
matches.push({ name: m[1], start: m.index });
|
|
199
|
+
}
|
|
200
|
+
if (matches.length === 0) return fullDoc;
|
|
201
|
+
const kept = [];
|
|
202
|
+
for (let i = 0; i < matches.length; i++) {
|
|
203
|
+
const { name, start } = matches[i];
|
|
204
|
+
const end = i + 1 < matches.length ? matches[i + 1].start : remainder.length;
|
|
205
|
+
const isKnownPrimitive = KNOWN_PRIMITIVE_SECTIONS.has(name);
|
|
206
|
+
const keep = isKnownPrimitive ? allow.has(name) : true;
|
|
207
|
+
if (keep) kept.push(remainder.slice(start, end));
|
|
208
|
+
}
|
|
209
|
+
return preamble + kept.join("");
|
|
210
|
+
}
|
|
211
|
+
function slicePrimitiveDocumentationTs(fullDoc, allowlist) {
|
|
212
|
+
const allow = new Set(allowlist);
|
|
213
|
+
const lines = fullDoc.split("\n");
|
|
214
|
+
let sawHeader = false;
|
|
215
|
+
let keep = true;
|
|
216
|
+
const kept = [];
|
|
217
|
+
for (const line of lines) {
|
|
218
|
+
const header = TS_SECTION_HEADER.exec(line);
|
|
219
|
+
if (header !== null) {
|
|
220
|
+
sawHeader = true;
|
|
221
|
+
const name = header[1];
|
|
222
|
+
keep = !KNOWN_PRIMITIVE_SECTIONS.has(name) || allow.has(name);
|
|
223
|
+
} else if (TS_SECTION_BANNER.test(line)) {
|
|
224
|
+
keep = true;
|
|
225
|
+
}
|
|
226
|
+
if (keep) kept.push(line);
|
|
227
|
+
}
|
|
228
|
+
return sawHeader ? kept.join("\n") : fullDoc;
|
|
229
|
+
}
|
|
230
|
+
var TS_SECTION_HEADER = /^\/\/ ([A-Za-z]+) — /;
|
|
231
|
+
var TS_SECTION_BANNER = /^\/\/ ═/;
|
|
232
|
+
|
|
233
|
+
export { computeContractPrimitives, computePrimitiveAllowlist, slicePrimitiveDocumentation, slicePrimitiveDocumentationTs };
|
|
234
|
+
//# sourceMappingURL=primitive-slice-WTMBLYFJ.js.map
|
|
235
|
+
//# sourceMappingURL=primitive-slice-WTMBLYFJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/harness/primitive-slice.ts"],"names":[],"mappings":"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","file":"primitive-slice-WTMBLYFJ.js","sourcesContent":["// Axis-keyed primitives doc slice.\n//\n// `PRIMITIVES_DOCUMENTATION` injected into the first-turn system prompt\n// is ~133 KB (~30K tokens) of markdown per-primitive documentation. A\n// typical medium/high-risk UI uses 5–10 primitives out of ~40 defined.\n// This module computes a per-classification allowlist and slices the\n// monolith down to only the primitives likely to be used, typically\n// 30–50 KB.\n//\n// Design decisions:\n// - Union of axis-specific primitive sets + an always-on core.\n// Every fixture gets Layout/Typography primitives unconditionally.\n// - Surface awareness stays intact — the name-only catalog in\n// `buildSystemPrompt` already lists EVERY primitive, so the LLM\n// knows the wider surface exists even when the per-primitive doc\n// is sliced out. (\"If you need X, ask for it\" — but the hit rate\n// on needing sliced-out primitives should be low by construction.)\n// - Flag-gated behind `ContextPolicy.primitiveDocSlice` (default\n// `\"full\"`). Byte-identical to pre-#45 behavior when flag is off.\n//\n// This is the first fresh family after the dupe-break retirement\n// (#41–#44). Unlike dupe-break interventions, slicing operates at\n// prompt-build time and modifies the LLM's *initial* conditioning\n// uniformly — it cannot contaminate a retry trajectory mid-run.\n\nimport type { DataContract, JsonSchema } from \"@ggui-ai/protocol\";\nimport type { Classification } from \"../classifier/index.js\";\n\n/** Primitives every fixture needs — layout + typography + core interaction.\n *\n * `Badge` is in core because the system-prompt \"Common Pitfalls\" section\n * (runtime.ts) unconditionally documents its prop API (\"Badge variant\n * accepts ...\"). The LLM may reach for it on any fixture. */\nconst CORE_PRIMITIVES: readonly string[] = [\n \"Container\",\n \"Stack\",\n \"Row\",\n \"Box\",\n \"Card\",\n \"Divider\",\n \"Spacer\",\n \"Text\",\n \"Heading\",\n \"Button\",\n \"Icon\",\n \"Badge\",\n];\n\n/**\n * Known primitive / component / composition section names — the set of\n * `### X` headers in `PRIMITIVES_DOCUMENTATION` that represent SLICEABLE\n * primitive docs (as opposed to cross-cutting GUIDANCE sections like\n * `### onChange Behavior (CRITICAL)` or `### Import Constraints`).\n *\n * The slicer filters ONLY on this set. Any `### X` header whose first\n * word is NOT in this set is treated as \"guidance\" — always kept — so\n * critical cross-cutting sections stay in the sliced doc regardless of\n * the allowlist.\n *\n * Derived from the live primitive documentation structure. Keep in\n * sync with the primitive docs in `tools/` when new primitives are\n * added.\n */\nconst KNOWN_PRIMITIVE_SECTIONS = new Set<string>([\n // Layout\n \"Container\", \"Card\", \"Stack\", \"Box\", \"Divider\", \"Spacer\",\n // Typography\n \"Text\", \"Heading\",\n // Inputs\n \"Button\", \"Input\", \"TextArea\", \"Select\", \"Checkbox\", \"Toggle\", \"RadioGroup\", \"Slider\",\n // Display\n \"Badge\", \"Spinner\", \"Avatar\", \"Alert\", \"Progress\", \"Image\", \"Icon\", \"Link\", \"Tooltip\",\n // Data\n \"Table\", \"Tabs\", \"Toast\", \"Accordion\",\n // Components\n \"SearchField\", \"FormField\", \"MenuItem\", \"Tag\", \"Dropdown\", \"Autocomplete\", \"Breadcrumb\", \"Pagination\",\n \"Stat\", \"Stepper\", \"Markdown\", \"MarkdownInline\",\n // Compositions\n \"Header\", \"Sidebar\", \"CardGrid\", \"CommentThread\", \"DataTable\", \"ChatWindow\", \"NavigationBar\",\n \"FileUploader\", \"NotificationCenter\", \"Modal\", \"CommandPalette\",\n \"Footer\", \"Hero\",\n]);\n\n/** Axis-value → primitive additions. Union'd with CORE_PRIMITIVES. */\nconst AXIS_PRIMITIVES: Readonly<Record<string, readonly string[]>> = {\n // render ────────────────────────────────────────────────────────\n \"render:list\": [\"Badge\", \"Avatar\", \"Spinner\", \"Link\"],\n \"render:grid\": [\"CardGrid\", \"Badge\", \"Image\", \"Stat\"],\n \"render:timeline\": [\"Badge\", \"Avatar\", \"Spinner\", \"Link\"],\n \"render:master-detail\": [\"Sidebar\", \"SearchField\", \"Badge\"],\n \"render:spatial\": [\"Image\"],\n \"render:chart\": [\"Progress\", \"Badge\", \"Stat\"],\n \"render:static\": [\"Stat\"],\n // state ─────────────────────────────────────────────────────────\n \"state:payload\": [\"Input\", \"TextArea\", \"Select\", \"Checkbox\", \"Toggle\", \"RadioGroup\", \"Slider\", \"FormField\", \"Alert\"],\n \"state:draft\": [\"Input\", \"TextArea\", \"FormField\", \"Alert\"],\n \"state:ui-affordance\": [\"Input\", \"Toggle\", \"Tabs\", \"SearchField\"],\n \"state:merge\": [\"Spinner\", \"Badge\", \"Alert\"],\n \"state:none\": [],\n // writes ────────────────────────────────────────────────────────\n \"writes:submit\": [\"Input\", \"TextArea\", \"Select\", \"Checkbox\", \"Toggle\", \"RadioGroup\", \"Slider\", \"FormField\", \"Alert\"],\n \"writes:commit\": [\"Alert\"],\n \"writes:multi-commit\": [\"Dropdown\", \"MenuItem\", \"Alert\", \"Tag\"],\n \"writes:per-item\": [\"Toggle\", \"Dropdown\", \"MenuItem\"],\n \"writes:compose\": [\"Autocomplete\", \"Dropdown\", \"Input\", \"Tag\"],\n \"writes:none\": [],\n // writeTrigger ──────────────────────────────────────────────────\n \"writeTrigger:drag\": [],\n \"writeTrigger:swipe\": [],\n \"writeTrigger:keystroke\": [],\n \"writeTrigger:auto\": [],\n \"writeTrigger:click\": [],\n // realtime ──────────────────────────────────────────────────────\n \"realtime:merge\": [\"Spinner\", \"Badge\", \"Alert\"],\n \"realtime:append\": [\"Spinner\", \"Badge\"],\n \"realtime:status\": [\"Badge\", \"Alert\"],\n \"realtime:presence\": [\"Avatar\", \"Badge\"],\n \"realtime:mixed\": [\"Spinner\", \"Badge\", \"Avatar\", \"Alert\"],\n \"realtime:none\": [],\n // fetch ─────────────────────────────────────────────────────────\n \"fetch:pagination\": [\"Pagination\", \"Spinner\"],\n \"fetch:search\": [\"SearchField\", \"Autocomplete\", \"Spinner\"],\n \"fetch:drill-down\": [\"Spinner\", \"Breadcrumb\"],\n \"fetch:refresh\": [\"Spinner\"],\n \"fetch:none\": [],\n // layout ────────────────────────────────────────────────────────\n \"layout:multi-step\": [\"Stepper\"],\n \"layout:master-detail\": [\"Sidebar\"],\n \"layout:overlay\": [\"Modal\", \"Tooltip\"],\n \"layout:modal\": [\"Modal\"],\n \"layout:single\": [],\n // tooling ───────────────────────────────────────────────────────\n \"tooling:wired\": [\"Alert\"],\n \"tooling:client\": [\"Alert\"],\n \"tooling:both\": [\"Alert\"],\n \"tooling:none\": [],\n};\n\n/**\n * Compute the primitive allowlist for a given classification.\n *\n * Union of CORE_PRIMITIVES + per-axis additions from AXIS_PRIMITIVES.\n * Returns a sorted array so output is deterministic for snapshot tests.\n */\nexport function computePrimitiveAllowlist(\n classification: Classification,\n): readonly string[] {\n const set = new Set<string>(CORE_PRIMITIVES);\n const v = classification.vector;\n for (const [axis, value] of [\n [\"render\", v.render],\n [\"state\", v.state],\n [\"writes\", v.writes],\n [\"writeTrigger\", v.writeTrigger],\n [\"realtime\", v.realtime],\n [\"fetch\", v.fetch],\n [\"layout\", v.layout],\n [\"tooling\", v.tooling],\n ] as const) {\n const additions = AXIS_PRIMITIVES[`${axis}:${value}`] ?? [];\n for (const p of additions) set.add(p);\n }\n return [...set].sort();\n}\n\n/**\n * The input primitives a contract's own fields imply (ggui#1324).\n *\n * The axis-keyed allowlist is derived from the classification alone, so a card\n * whose axes do not say \"form\" still loses the inputs its contract needs: the\n * #45 kanban canary edits a task's title and priority through an action\n * payload, and the axis slice dropped `Input` / `TextArea` / `Select`.\n *\n * Walks every context slot's schema and every action payload's schema down to\n * its leaves (object `properties`, array `items`) and maps each leaf type:\n * an `enum` → `Select`, `RadioGroup`; `string` → `Input`, `TextArea`,\n * `FormField`; `number` / `integer` → `Input`, `Slider`; `boolean` →\n * `Checkbox`, `Toggle`. A declared stream adds `Spinner` and `Badge`. Props are\n * display data and add nothing (the classification covers display). Returns a\n * sorted array.\n */\nexport function computeContractPrimitives(\n contract: DataContract | undefined,\n): readonly string[] {\n const out = new Set<string>();\n if (!contract) return [];\n for (const slot of Object.values(contract.contextSpec ?? {})) addLeaves(slot.schema, out);\n for (const action of Object.values(contract.actionSpec ?? {})) {\n if (action.schema) addLeaves(action.schema, out);\n }\n if (Object.keys(contract.streamSpec ?? {}).length > 0) {\n out.add(\"Spinner\");\n out.add(\"Badge\");\n }\n return [...out].sort();\n}\n\nfunction addLeaves(schema: JsonSchema, out: Set<string>): void {\n for (const child of Object.values(schema.properties ?? {})) addLeaves(child, out);\n if (schema.items) addLeaves(schema.items, out);\n if (schema.enum && schema.enum.length > 0) {\n out.add(\"Select\");\n out.add(\"RadioGroup\");\n return;\n }\n const types = Array.isArray(schema.type) ? schema.type : schema.type ? [schema.type] : [];\n for (const t of types) {\n if (t === \"string\") {\n out.add(\"Input\");\n out.add(\"TextArea\");\n out.add(\"FormField\");\n } else if (t === \"number\" || t === \"integer\") {\n out.add(\"Input\");\n out.add(\"Slider\");\n } else if (t === \"boolean\") {\n out.add(\"Checkbox\");\n out.add(\"Toggle\");\n }\n }\n}\n\n/**\n * Slice `PRIMITIVES_DOCUMENTATION` to include only the allowlisted primitive\n * sections. The doc structure is:\n *\n * <preamble / intro>\n * ## Primitives\n * Import: ...\n *\n * ### Container\n * <Container docs>\n *\n * ### Stack\n * <Stack docs>\n * ...\n *\n * Keep the preamble through `## Primitives` + intro verbatim. Walk the\n * remaining `### <Name>` sections and keep only those whose name is in\n * the allowlist. Concat the result.\n *\n * Falls back to the full doc if the expected structure isn't found\n * (defensive — format changes shouldn't silently drop everything).\n */\nexport function slicePrimitiveDocumentation(\n fullDoc: string,\n allowlist: readonly string[],\n): string {\n const allow = new Set(allowlist);\n // Find the first `### <Name>` header — everything before it is preamble.\n const firstSection = fullDoc.search(/^### \\S/m);\n if (firstSection === -1) return fullDoc;\n const preamble = fullDoc.slice(0, firstSection);\n\n // Split remainder by `### ` headers and filter.\n const remainder = fullDoc.slice(firstSection);\n const sectionRegex = /^### (\\S+)/gm;\n const matches: Array<{ name: string; start: number }> = [];\n let m: RegExpExecArray | null;\n while ((m = sectionRegex.exec(remainder)) !== null) {\n matches.push({ name: m[1]!, start: m.index });\n }\n if (matches.length === 0) return fullDoc;\n\n // Section-keep rule:\n // - If the header's first word is a KNOWN primitive, keep iff in allowlist.\n // - Otherwise, it's a GUIDANCE section (`### onChange Behavior (CRITICAL)`,\n // `### Import Constraints`, `### Elevation System`, `### Support Types`)\n // — ALWAYS keep. Guidance sections contain cross-cutting rules the LLM\n // needs regardless of the primitive allowlist (e.g. \"do NOT add new\n // imports\" lives in `### Import Constraints`).\n const kept: string[] = [];\n for (let i = 0; i < matches.length; i++) {\n const { name, start } = matches[i]!;\n const end = i + 1 < matches.length ? matches[i + 1]!.start : remainder.length;\n const isKnownPrimitive = KNOWN_PRIMITIVE_SECTIONS.has(name);\n const keep = isKnownPrimitive ? allow.has(name) : true;\n if (keep) kept.push(remainder.slice(start, end));\n }\n\n return preamble + kept.join(\"\");\n}\n\n/**\n * Slice the TypeScript-interface primitives reference\n * (`PRIMITIVES_DOCUMENTATION_TS`) by the same allowlist the markdown\n * slicer takes (ggui#1324, speed/002).\n *\n * The TS doc is a sequence of SECTIONS, each opened by a header line\n * `// <Name> — <description>` and carrying that name's `interface`, its\n * `// Example:` and the usage snippet that follows; category banners\n * (`// ═══…`) sit between sections. A section whose `<Name>` is a KNOWN\n * primitive is kept iff `<Name>` is in the allowlist. Every other line is\n * kept: the preamble, the banners, the `CRITICAL` guidance sections, the\n * support-type sections (`SelectOption`, `TableColumn`, …) and any section\n * the slicer does not know — the same guidance rule as\n * {@link slicePrimitiveDocumentation}. Allowing every known name returns the\n * doc byte-identical.\n *\n * With no section header found the doc is returned whole (defensive, as the\n * markdown slicer does when it finds no `### ` sections).\n */\nexport function slicePrimitiveDocumentationTs(\n fullDoc: string,\n allowlist: readonly string[],\n): string {\n const allow = new Set(allowlist);\n const lines = fullDoc.split(\"\\n\");\n let sawHeader = false;\n let keep = true;\n const kept: string[] = [];\n for (const line of lines) {\n const header = TS_SECTION_HEADER.exec(line);\n if (header !== null) {\n sawHeader = true;\n const name = header[1]!;\n keep = !KNOWN_PRIMITIVE_SECTIONS.has(name) || allow.has(name);\n } else if (TS_SECTION_BANNER.test(line)) {\n keep = true;\n }\n if (keep) kept.push(line);\n }\n return sawHeader ? kept.join(\"\\n\") : fullDoc;\n}\n\n/** `// Button — A clickable button …`: the line that opens a TS-doc section. */\nconst TS_SECTION_HEADER = /^\\/\\/ ([A-Za-z]+) — /;\n/** `// ═══…`: a category banner between TS-doc sections; always kept. */\nconst TS_SECTION_BANNER = /^\\/\\/ ═/;\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RenderingContext as RenderingContext$1, DataContract, GadgetDescriptor, BlueprintVariance } from '@ggui-ai/protocol';
|
|
2
|
-
import {
|
|
2
|
+
import { CanvasClass } from '@ggui-ai/design/rendering';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Rendering context — how and where the component will be displayed.
|