@vendoai/apps 0.4.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.
Files changed (203) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +8 -0
  3. package/dist/adapter-conformance.d.ts +48 -0
  4. package/dist/adapter-conformance.d.ts.map +1 -0
  5. package/dist/adapter-conformance.js +196 -0
  6. package/dist/adapter-conformance.js.map +1 -0
  7. package/dist/agent-tools.d.ts +10 -0
  8. package/dist/agent-tools.d.ts.map +1 -0
  9. package/dist/agent-tools.js +252 -0
  10. package/dist/agent-tools.js.map +1 -0
  11. package/dist/app-data.d.ts +23 -0
  12. package/dist/app-data.d.ts.map +1 -0
  13. package/dist/app-data.js +129 -0
  14. package/dist/app-data.js.map +1 -0
  15. package/dist/app-token.d.ts +24 -0
  16. package/dist/app-token.d.ts.map +1 -0
  17. package/dist/app-token.js +61 -0
  18. package/dist/app-token.js.map +1 -0
  19. package/dist/audit.d.ts +11 -0
  20. package/dist/audit.d.ts.map +1 -0
  21. package/dist/audit.js +19 -0
  22. package/dist/audit.js.map +1 -0
  23. package/dist/automation-plan.d.ts +43 -0
  24. package/dist/automation-plan.d.ts.map +1 -0
  25. package/dist/automation-plan.js +212 -0
  26. package/dist/automation-plan.js.map +1 -0
  27. package/dist/bench/client.d.ts +43 -0
  28. package/dist/bench/client.d.ts.map +1 -0
  29. package/dist/bench/client.js +129 -0
  30. package/dist/bench/client.js.map +1 -0
  31. package/dist/bench/fixtures.d.ts +42 -0
  32. package/dist/bench/fixtures.d.ts.map +1 -0
  33. package/dist/bench/fixtures.js +146 -0
  34. package/dist/bench/fixtures.js.map +1 -0
  35. package/dist/bench/judge.d.ts +9 -0
  36. package/dist/bench/judge.d.ts.map +1 -0
  37. package/dist/bench/judge.js +71 -0
  38. package/dist/bench/judge.js.map +1 -0
  39. package/dist/bench/metrics.d.ts +32 -0
  40. package/dist/bench/metrics.d.ts.map +1 -0
  41. package/dist/bench/metrics.js +172 -0
  42. package/dist/bench/metrics.js.map +1 -0
  43. package/dist/bench/prompts.d.ts +17 -0
  44. package/dist/bench/prompts.d.ts.map +1 -0
  45. package/dist/bench/prompts.js +100 -0
  46. package/dist/bench/prompts.js.map +1 -0
  47. package/dist/bench/report.d.ts +43 -0
  48. package/dist/bench/report.d.ts.map +1 -0
  49. package/dist/bench/report.js +74 -0
  50. package/dist/bench/report.js.map +1 -0
  51. package/dist/bench/runner.d.ts +15 -0
  52. package/dist/bench/runner.d.ts.map +1 -0
  53. package/dist/bench/runner.js +26 -0
  54. package/dist/bench/runner.js.map +1 -0
  55. package/dist/bench/toolfork.d.ts +18 -0
  56. package/dist/bench/toolfork.d.ts.map +1 -0
  57. package/dist/bench/toolfork.js +125 -0
  58. package/dist/bench/toolfork.js.map +1 -0
  59. package/dist/box-agent.d.ts +78 -0
  60. package/dist/box-agent.d.ts.map +1 -0
  61. package/dist/box-agent.js +137 -0
  62. package/dist/box-agent.js.map +1 -0
  63. package/dist/box-env.d.ts +26 -0
  64. package/dist/box-env.d.ts.map +1 -0
  65. package/dist/box-env.js +52 -0
  66. package/dist/box-env.js.map +1 -0
  67. package/dist/call.d.ts +23 -0
  68. package/dist/call.d.ts.map +1 -0
  69. package/dist/call.js +45 -0
  70. package/dist/call.js.map +1 -0
  71. package/dist/cloud.d.ts +4917 -0
  72. package/dist/cloud.d.ts.map +1 -0
  73. package/dist/cloud.js +16 -0
  74. package/dist/cloud.js.map +1 -0
  75. package/dist/e2b/index.d.ts +30 -0
  76. package/dist/e2b/index.d.ts.map +1 -0
  77. package/dist/e2b/index.js +273 -0
  78. package/dist/e2b/index.js.map +1 -0
  79. package/dist/egress-approval.d.ts +73 -0
  80. package/dist/egress-approval.d.ts.map +1 -0
  81. package/dist/egress-approval.js +74 -0
  82. package/dist/egress-approval.js.map +1 -0
  83. package/dist/engine.d.ts +188 -0
  84. package/dist/engine.d.ts.map +1 -0
  85. package/dist/engine.js +1507 -0
  86. package/dist/engine.js.map +1 -0
  87. package/dist/fn.d.ts +22 -0
  88. package/dist/fn.d.ts.map +1 -0
  89. package/dist/fn.js +108 -0
  90. package/dist/fn.js.map +1 -0
  91. package/dist/history.d.ts +21 -0
  92. package/dist/history.d.ts.map +1 -0
  93. package/dist/history.js +158 -0
  94. package/dist/history.js.map +1 -0
  95. package/dist/inclient.d.ts +48 -0
  96. package/dist/inclient.d.ts.map +1 -0
  97. package/dist/inclient.js +68 -0
  98. package/dist/inclient.js.map +1 -0
  99. package/dist/index.d.ts +24 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +25 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/interchange.d.ts +17 -0
  104. package/dist/interchange.d.ts.map +1 -0
  105. package/dist/interchange.js +133 -0
  106. package/dist/interchange.js.map +1 -0
  107. package/dist/machine-lifecycle.d.ts +102 -0
  108. package/dist/machine-lifecycle.d.ts.map +1 -0
  109. package/dist/machine-lifecycle.js +360 -0
  110. package/dist/machine-lifecycle.js.map +1 -0
  111. package/dist/manifest.d.ts +42 -0
  112. package/dist/manifest.d.ts.map +1 -0
  113. package/dist/manifest.js +53 -0
  114. package/dist/manifest.js.map +1 -0
  115. package/dist/open.d.ts +45 -0
  116. package/dist/open.d.ts.map +1 -0
  117. package/dist/open.js +245 -0
  118. package/dist/open.js.map +1 -0
  119. package/dist/parked-action.d.ts +51 -0
  120. package/dist/parked-action.d.ts.map +1 -0
  121. package/dist/parked-action.js +29 -0
  122. package/dist/parked-action.js.map +1 -0
  123. package/dist/persistence.d.ts +41 -0
  124. package/dist/persistence.d.ts.map +1 -0
  125. package/dist/persistence.js +86 -0
  126. package/dist/persistence.js.map +1 -0
  127. package/dist/pins.d.ts +231 -0
  128. package/dist/pins.d.ts.map +1 -0
  129. package/dist/pins.js +213 -0
  130. package/dist/pins.js.map +1 -0
  131. package/dist/pipeline.d.ts +142 -0
  132. package/dist/pipeline.d.ts.map +1 -0
  133. package/dist/pipeline.js +1014 -0
  134. package/dist/pipeline.js.map +1 -0
  135. package/dist/prewired-schema.d.ts +16 -0
  136. package/dist/prewired-schema.d.ts.map +1 -0
  137. package/dist/prewired-schema.js +48 -0
  138. package/dist/prewired-schema.js.map +1 -0
  139. package/dist/redaction.d.ts +13 -0
  140. package/dist/redaction.d.ts.map +1 -0
  141. package/dist/redaction.js +67 -0
  142. package/dist/redaction.js.map +1 -0
  143. package/dist/runtime.d.ts +463 -0
  144. package/dist/runtime.d.ts.map +1 -0
  145. package/dist/runtime.js +1715 -0
  146. package/dist/runtime.js.map +1 -0
  147. package/dist/sandbox.d.ts +90 -0
  148. package/dist/sandbox.d.ts.map +1 -0
  149. package/dist/sandbox.js +2 -0
  150. package/dist/sandbox.js.map +1 -0
  151. package/dist/schedules.d.ts +89 -0
  152. package/dist/schedules.d.ts.map +1 -0
  153. package/dist/schedules.js +334 -0
  154. package/dist/schedules.js.map +1 -0
  155. package/dist/secret-exposure.d.ts +55 -0
  156. package/dist/secret-exposure.d.ts.map +1 -0
  157. package/dist/secret-exposure.js +53 -0
  158. package/dist/secret-exposure.js.map +1 -0
  159. package/dist/ship-diff.d.ts +47 -0
  160. package/dist/ship-diff.d.ts.map +1 -0
  161. package/dist/ship-diff.js +39 -0
  162. package/dist/ship-diff.js.map +1 -0
  163. package/dist/testing/fake-box.d.ts +67 -0
  164. package/dist/testing/fake-box.d.ts.map +1 -0
  165. package/dist/testing/fake-box.js +166 -0
  166. package/dist/testing/fake-box.js.map +1 -0
  167. package/dist/testing/fake-sandbox-v2.d.ts +59 -0
  168. package/dist/testing/fake-sandbox-v2.d.ts.map +1 -0
  169. package/dist/testing/fake-sandbox-v2.js +121 -0
  170. package/dist/testing/fake-sandbox-v2.js.map +1 -0
  171. package/dist/testing/fake-sandbox.d.ts +94 -0
  172. package/dist/testing/fake-sandbox.d.ts.map +1 -0
  173. package/dist/testing/fake-sandbox.js +239 -0
  174. package/dist/testing/fake-sandbox.js.map +1 -0
  175. package/dist/testing/guard-fixture.d.ts +19 -0
  176. package/dist/testing/guard-fixture.d.ts.map +1 -0
  177. package/dist/testing/guard-fixture.js +134 -0
  178. package/dist/testing/guard-fixture.js.map +1 -0
  179. package/dist/testing/index.d.ts +8 -0
  180. package/dist/testing/index.d.ts.map +1 -0
  181. package/dist/testing/index.js +8 -0
  182. package/dist/testing/index.js.map +1 -0
  183. package/dist/testing/memory-store.d.ts +5 -0
  184. package/dist/testing/memory-store.d.ts.map +1 -0
  185. package/dist/testing/memory-store.js +4 -0
  186. package/dist/testing/memory-store.js.map +1 -0
  187. package/dist/testing/scripted-model.d.ts +32 -0
  188. package/dist/testing/scripted-model.d.ts.map +1 -0
  189. package/dist/testing/scripted-model.js +112 -0
  190. package/dist/testing/scripted-model.js.map +1 -0
  191. package/dist/testing/seed-app-row.d.ts +4 -0
  192. package/dist/testing/seed-app-row.d.ts.map +1 -0
  193. package/dist/testing/seed-app-row.js +7 -0
  194. package/dist/testing/seed-app-row.js.map +1 -0
  195. package/dist/unified-diff.d.ts +13 -0
  196. package/dist/unified-diff.d.ts.map +1 -0
  197. package/dist/unified-diff.js +127 -0
  198. package/dist/unified-diff.js.map +1 -0
  199. package/dist/version-hash.d.ts +9 -0
  200. package/dist/version-hash.d.ts.map +1 -0
  201. package/dist/version-hash.js +12 -0
  202. package/dist/version-hash.js.map +1 -0
  203. package/package.json +84 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../src/bench/judge.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsCD,eAAO,MAAM,KAAK,GAAU,QAAQ,MAAM,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,SAAS,CAwB3E,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * W1-bench (docs/verification/w1-bench) — LLM judge on an independent model
3
+ * (claude-opus-4-8), scoring composition quality 1-5 and flagging fabricated
4
+ * data. The judge never sees which arm produced a wire.
5
+ */
6
+ import { generateText } from "ai";
7
+ import { judgeModel } from "./client.js";
8
+ import { MAPLE_TOOLS } from "./fixtures.js";
9
+ const toolList = MAPLE_TOOLS.map((t) => `${t.name} [${t.risk}]`).join(", ");
10
+ const RUBRIC = `You are grading a generated UI expressed as "vendo wire" markup — a compact JSX-like tree of prewired/host components bound to host tool data. The ONLY data source is the host tools listed below. Money fields are integer cents; dates are ISO. Charts must take RAW numbers; Stats/Tables/Text shown to users should be formatted.
11
+
12
+ HOST TOOLS: ${toolList}
13
+
14
+ Grade the wire for the user request on a 1-5 scale:
15
+ 5 = fully answers the ask, correct components, all data traces to real tools, formatting correct, actions wired correctly.
16
+ 4 = answers the ask with a minor issue (one awkward component or one unformatted value).
17
+ 3 = partially answers; noticeable gaps or a couple of issues.
18
+ 2 = weak: misses much of the ask or several issues.
19
+ 1 = does not answer the ask, or is broken/empty.
20
+
21
+ Also decide:
22
+ - answersAsk: does it substantively address the user's request?
23
+ - fabricated: does it show business numbers/rows/labels NOT traceable to a host tool (hardcoded/example/placeholder data)? A Disclaimer for an unavailable ask is NOT fabrication.
24
+
25
+ Respond with ONLY a JSON object: {"quality": <1-5 int>, "answersAsk": <bool>, "fabricated": <bool>, "notes": "<one sentence>"}`;
26
+ const parseJudge = (text) => {
27
+ const m = text.match(/\{[\s\S]*\}/);
28
+ if (!m)
29
+ return null;
30
+ try {
31
+ const j = JSON.parse(m[0]);
32
+ const quality = Math.max(1, Math.min(5, Math.round(Number(j.quality ?? 0)))) || 1;
33
+ return {
34
+ quality,
35
+ answersAsk: Boolean(j.answersAsk),
36
+ fabricated: Boolean(j.fabricated),
37
+ notes: String(j.notes ?? "").slice(0, 240),
38
+ };
39
+ }
40
+ catch {
41
+ return null;
42
+ }
43
+ };
44
+ export const judge = async (prompt, wire) => {
45
+ if (!wire || wire.length < 8) {
46
+ return { quality: 1, answersAsk: false, fabricated: false, notes: "empty output" };
47
+ }
48
+ for (let attempt = 0; attempt < 3; attempt++) {
49
+ try {
50
+ const res = await generateText({
51
+ model: judgeModel(),
52
+ system: RUBRIC,
53
+ prompt: `USER REQUEST:\n${prompt}\n\nGENERATED WIRE:\n${wire}`,
54
+ maxOutputTokens: 400,
55
+ maxRetries: 0,
56
+ });
57
+ const parsed = parseJudge(res.text);
58
+ if (parsed)
59
+ return parsed;
60
+ }
61
+ catch (err) {
62
+ const msg = String(err?.message ?? err);
63
+ if (!/429|overloaded|529|rate|timeout|fetch failed/i.test(msg) && attempt === 2) {
64
+ return { quality: 1, answersAsk: false, fabricated: false, notes: "judge error", error: msg };
65
+ }
66
+ await new Promise((r) => setTimeout(r, 1500 * (attempt + 1)));
67
+ }
68
+ }
69
+ return { quality: 1, answersAsk: false, fabricated: false, notes: "judge unparseable" };
70
+ };
71
+ //# sourceMappingURL=judge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge.js","sourceRoot":"","sources":["../../src/bench/judge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * W1-bench (docs/verification/w1-bench) — metrics computed from the REAL
3
+ * production compiler (compileWireV2 with the fixture tool shapes). The
4
+ * reliability signals — compile-error rate, reference/binding errors,
5
+ * declared-but-unused queries, unknown tools/components — are the compiler's
6
+ * own verdicts, not a re-implementation.
7
+ */
8
+ import { type ShapeType } from "@vendoai/core";
9
+ export interface WireMetrics {
10
+ compileOk: boolean;
11
+ /** All wiring/reference errors: binding-shape + unknown tool/query/component + invalid action. */
12
+ refErrors: number;
13
+ bindingShapeErrors: number;
14
+ unknownTool: number;
15
+ unknownRef: number;
16
+ unknownComponent: number;
17
+ invalidAction: number;
18
+ declaredButUnused: number;
19
+ /** Cents/date value shown to a user without a format step. */
20
+ formatMiss: number;
21
+ /** Formatted value wrongly fed to a chart (draws NaN). */
22
+ formatWrongOnChart: number;
23
+ queryCount: number;
24
+ nodeCount: number;
25
+ islandCount: number;
26
+ usedDisclaimer: boolean;
27
+ empty: boolean;
28
+ }
29
+ export declare const computeWireMetrics: (wire: string, toolShapes: Readonly<Record<string, ShapeType>>, opts?: {
30
+ inlineRefs?: boolean;
31
+ }) => WireMetrics;
32
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/bench/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAIL,KAAK,SAAS,EAEf,MAAM,eAAe,CAAC;AAgCvB,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,kGAAkG;IAClG,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;CAChB;AAQD,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,EACZ,YAAY,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAC/C,OAAM;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,KAClC,WA0FF,CAAC"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * W1-bench (docs/verification/w1-bench) — metrics computed from the REAL
3
+ * production compiler (compileWireV2 with the fixture tool shapes). The
4
+ * reliability signals — compile-error rate, reference/binding errors,
5
+ * declared-but-unused queries, unknown tools/components — are the compiler's
6
+ * own verdicts, not a re-implementation.
7
+ */
8
+ import { compileWireV2, PREWIRED_COMPONENT_NAMES, } from "@vendoai/core";
9
+ import { CATALOG_COMPONENT_NAMES, KNOWN_TOOL_NAMES } from "./fixtures.js";
10
+ const CENTS = /(amountcents|balancecents|totalcents|revenuecents|cents)$/i;
11
+ const DATE = /^(duedate|date|month|createdat|paidat)$|date$/i;
12
+ const CHART_COMPONENTS = new Set(["LineChart", "BarChart", "Donut", "Sparkline"]);
13
+ const CHART_DATA_PROPS = new Set(["points", "series", "slices", "values", "data"]);
14
+ const collectPaths = (value, out) => {
15
+ if (value === null || typeof value !== "object")
16
+ return;
17
+ if (Array.isArray(value)) {
18
+ for (const v of value)
19
+ collectPaths(v, out);
20
+ return;
21
+ }
22
+ const rec = value;
23
+ if (typeof rec.$path === "string")
24
+ out.push(rec.$path);
25
+ for (const v of Object.values(rec))
26
+ collectPaths(v, out);
27
+ };
28
+ const queryOfPath = (path) => {
29
+ const seg = path.split("/").filter(Boolean);
30
+ return seg[0] ?? null;
31
+ };
32
+ const lastFieldOf = (path) => {
33
+ const seg = path.split("/").filter(Boolean);
34
+ for (let i = seg.length - 1; i >= 1; i--) {
35
+ if (!/^\d+$/.test(seg[i]))
36
+ return seg[i];
37
+ }
38
+ return "";
39
+ };
40
+ const HARD_STRUCTURAL = new Set([
41
+ "missing-app", "nested-app", "truncated-tag", "eof-unclosed", "unclosed-element",
42
+ "unclosed-skipped", "compile-failed", "node-limit", "query-limit", "component-limit",
43
+ "invalid-query-tool", "invalid-query-name", "unknown-element",
44
+ ]);
45
+ export const computeWireMetrics = (wire, toolShapes, opts = {}) => {
46
+ const r = compileWireV2(wire, { toolShapes, hostComponents: [...CATALOG_COMPONENT_NAMES], inlineRefs: opts.inlineRefs });
47
+ const nodes = r.tree.nodes ?? [];
48
+ const queries = r.tree.queries ?? [];
49
+ const islandNames = new Set(Object.keys(r.components ?? {}));
50
+ const allowedComponents = new Set([...PREWIRED_COMPONENT_NAMES, ...CATALOG_COMPONENT_NAMES, ...islandNames]);
51
+ const issueCounts = new Map();
52
+ for (const iss of r.issues)
53
+ issueCounts.set(iss.code, (issueCounts.get(iss.code) ?? 0) + 1);
54
+ // Unknown tool names on queries.
55
+ let unknownTool = 0;
56
+ for (const q of queries) {
57
+ const tool = q.tool.startsWith("fn:") ? q.tool.slice(3) : q.tool;
58
+ if (!q.tool.startsWith("fn:") && !KNOWN_TOOL_NAMES.has(tool))
59
+ unknownTool++;
60
+ }
61
+ // Unknown components (non-island, non-prewired, non-catalog).
62
+ let unknownComponent = 0;
63
+ for (const n of nodes) {
64
+ if (n.id === "root")
65
+ continue;
66
+ if (!allowedComponents.has(n.component))
67
+ unknownComponent++;
68
+ }
69
+ // Binding usage → declared-but-unused queries.
70
+ const usedQueryNames = new Set();
71
+ const allPaths = [];
72
+ for (const n of nodes)
73
+ if (n.props)
74
+ collectPaths(n.props, allPaths);
75
+ for (const p of allPaths) {
76
+ const q = queryOfPath(p);
77
+ if (q)
78
+ usedQueryNames.add(q);
79
+ }
80
+ const declaredButUnused = queries.filter((q) => !usedQueryNames.has(q.name)).length;
81
+ // Format checks on the compiled tree.
82
+ let formatMiss = 0;
83
+ let formatWrongOnChart = 0;
84
+ for (const n of nodes) {
85
+ if (!n.props)
86
+ continue;
87
+ const props = n.props;
88
+ if (CHART_COMPONENTS.has(n.component) || n.component === "Sparkline") {
89
+ // A chart data prop bound with a format reshape draws NaN.
90
+ for (const key of CHART_DATA_PROPS) {
91
+ const v = props[key];
92
+ if (v && typeof v === "object" && "$reshape" in v)
93
+ formatWrongOnChart++;
94
+ }
95
+ continue;
96
+ }
97
+ if (n.component === "Stat") {
98
+ const field = valueField(props.value);
99
+ if (field && (CENTS.test(field) || DATE.test(field)) && props.format === undefined && !hasReshape(props.value))
100
+ formatMiss++;
101
+ }
102
+ if (n.component === "Text" || n.component === "Badge") {
103
+ const field = valueField(props.value ?? props.text ?? props.label);
104
+ if (field && (CENTS.test(field) || DATE.test(field)) && !hasReshape(props.value ?? props.text ?? props.label))
105
+ formatMiss++;
106
+ }
107
+ if (n.component === "DataTable" || n.component === "Table") {
108
+ // Fair to both dialects: a $reshape pipe on rows (`rows={x | format(...)}`)
109
+ // formats in place, so only count column misses when there is none.
110
+ if (!hasReshape(props.rows))
111
+ formatMiss += tableColumnFormatMisses(props.columns);
112
+ }
113
+ }
114
+ const invalidAction = issueCounts.get("invalid-action") ?? 0;
115
+ const unknownRef = issueCounts.get("unknown-reference") ?? 0;
116
+ const bindingShapeErrors = r.bindingErrors.length;
117
+ const hasHard = [...issueCounts.keys()].some((c) => HARD_STRUCTURAL.has(c));
118
+ const empty = nodes.length <= 1;
119
+ const compileOk = r.complete && !hasHard && !empty;
120
+ const usedDisclaimer = nodes.some((n) => n.component === "Disclaimer");
121
+ return {
122
+ compileOk,
123
+ refErrors: bindingShapeErrors + unknownTool + unknownRef + unknownComponent + invalidAction,
124
+ bindingShapeErrors,
125
+ unknownTool,
126
+ unknownRef,
127
+ unknownComponent,
128
+ invalidAction,
129
+ declaredButUnused,
130
+ formatMiss,
131
+ formatWrongOnChart,
132
+ queryCount: queries.length,
133
+ nodeCount: nodes.length,
134
+ islandCount: islandNames.size,
135
+ usedDisclaimer,
136
+ empty,
137
+ };
138
+ };
139
+ const valueField = (v) => {
140
+ if (!v || typeof v !== "object" || Array.isArray(v))
141
+ return "";
142
+ const rec = v;
143
+ if (typeof rec.$path === "string")
144
+ return lastFieldOf(rec.$path);
145
+ return "";
146
+ };
147
+ const hasReshape = (v) => {
148
+ if (!v || typeof v !== "object" || Array.isArray(v))
149
+ return false;
150
+ return "$reshape" in v;
151
+ };
152
+ const tableColumnFormatMisses = (columns) => {
153
+ if (!Array.isArray(columns))
154
+ return 0;
155
+ let misses = 0;
156
+ for (const col of columns) {
157
+ if (typeof col === "string") {
158
+ const seg = col.split(".").pop() ?? col;
159
+ if (CENTS.test(seg) || DATE.test(seg))
160
+ misses++;
161
+ }
162
+ else if (col && typeof col === "object") {
163
+ const c = col;
164
+ const key = typeof c.key === "string" ? (c.key.split(".").pop() ?? c.key) : "";
165
+ const hasFormat = c.format !== undefined;
166
+ if (key && (CENTS.test(key) || DATE.test(key)) && !hasFormat)
167
+ misses++;
168
+ }
169
+ }
170
+ return misses;
171
+ };
172
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/bench/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,aAAa,EACb,wBAAwB,GAIzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE1E,MAAM,KAAK,GAAG,4DAA4D,CAAC;AAC3E,MAAM,IAAI,GAAG,gDAAgD,CAAC;AAC9D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAClF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAEnF,MAAM,YAAY,GAAG,CAAC,KAAW,EAAE,GAAa,EAAQ,EAAE;IACxD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,YAAY,CAAC,CAAS,EAAE,GAAG,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,KAA6B,CAAC;IAC1C,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QAAE,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAiB,EAAE;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;YAAE,OAAO,GAAG,CAAC,CAAC,CAAE,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAuBF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB;IAChF,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB;IACpF,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,IAAY,EACZ,UAA+C,EAC/C,OAAiC,EAAE,EACtB,EAAE;IACf,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,GAAG,uBAAuB,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACzH,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,wBAAwB,EAAE,GAAG,uBAAuB,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;IAErH,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM;QAAE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAE5F,iCAAiC;IACjC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,WAAW,EAAE,CAAC;IAC9E,CAAC;IAED,8DAA8D;IAC9D,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM;YAAE,SAAS;QAC9B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YAAE,gBAAgB,EAAE,CAAC;IAC9D,CAAC;IAED,+CAA+C;IAC/C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,IAAI,CAAC,CAAC,KAAK;YAAE,YAAY,CAAC,CAAC,CAAC,KAAa,EAAE,QAAQ,CAAC,CAAC;IAC5E,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC;YAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAEpF,sCAAsC;IACtC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE,SAAS;QACvB,MAAM,KAAK,GAAG,CAAC,CAAC,KAA6B,CAAC;QAC9C,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;YACrE,2DAA2D;YAC3D,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrB,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,UAAU,IAAK,CAAY;oBAAE,kBAAkB,EAAE,CAAC;YACtF,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,UAAU,EAAE,CAAC;QAC/H,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;YACnE,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC;gBAAE,UAAU,EAAE,CAAC;QAC9H,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YAC3D,4EAA4E;YAC5E,oEAAoE;YACpE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,UAAU,IAAI,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,kBAAkB,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC;IAElD,MAAM,OAAO,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC;IAEnD,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC;IAEvE,OAAO;QACL,SAAS;QACT,SAAS,EAAE,kBAAkB,GAAG,WAAW,GAAG,UAAU,GAAG,gBAAgB,GAAG,aAAa;QAC3F,kBAAkB;QAClB,WAAW;QACX,UAAU;QACV,gBAAgB;QAChB,aAAa;QACb,iBAAiB;QACjB,UAAU;QACV,kBAAkB;QAClB,UAAU,EAAE,OAAO,CAAC,MAAM;QAC1B,SAAS,EAAE,KAAK,CAAC,MAAM;QACvB,WAAW,EAAE,WAAW,CAAC,IAAI;QAC7B,cAAc;QACd,KAAK;KACN,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,CAAmB,EAAU,EAAE;IACjD,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/D,MAAM,GAAG,GAAG,CAAyB,CAAC;IACtC,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjE,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,CAAmB,EAAW,EAAE;IAClD,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,OAAO,UAAU,IAAK,CAAY,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,OAAyB,EAAU,EAAE;IACpE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC;YACxC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,MAAM,EAAE,CAAC;QAClD,CAAC;aAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,GAA2B,CAAC;YACtC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;YACzC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS;gBAAE,MAAM,EAAE,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /** ~18 diverse dev prompts spanning tables, stats, charts, forms, actions,
2
+ * detail views, mixed dashboards, and search/interaction. */
3
+ export declare const DEV_PROMPTS: string[];
4
+ /** Negative prompts: the host has NO tool for the ask, so the honest move is a
5
+ * Disclaimer, never fabricated data (Experiment 3 honesty probe). */
6
+ export declare const NEGATIVE_PROMPTS: string[];
7
+ /** Arm A — the current <Query>-declaration dialect. */
8
+ export declare const QUERY_ARM_SYSTEM: string;
9
+ /** Arm B — inline tool references (Experiment 1). */
10
+ export declare const INLINE_ARM_SYSTEM: string;
11
+ /** Fetch-then-generate phase-2 system (Experiment 3, Arm B): same as Query arm
12
+ * but the generator additionally sees real fetched samples. */
13
+ export declare const buildFetchAwareSystem: (fetched: string) => string;
14
+ export declare const userTask: (prompt: string) => string;
15
+ /** Experiment 2 Arm B — build the app by calling builder tools (one turn). */
16
+ export declare const FORK_SYSTEM: string;
17
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/bench/prompts.ts"],"names":[],"mappings":"AAUA;8DAC8D;AAC9D,eAAO,MAAM,WAAW,EAAE,MAAM,EAmB/B,CAAC;AAEF;sEACsE;AACtE,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAIpC,CAAC;AAkCF,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,QAId,CAAC;AAEhB,qDAAqD;AACrD,eAAO,MAAM,iBAAiB,QAIf,CAAC;AAEhB;gEACgE;AAChE,eAAO,MAAM,qBAAqB,GAAI,SAAS,MAAM,KAAG,MAI7C,CAAC;AAEZ,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,KAAG,MAAmC,CAAC;AAE9E,8EAA8E;AAC9E,eAAO,MAAM,WAAW,QAgBT,CAAC"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * W1-bench (docs/verification/w1-bench) — lane-authored dev prompts and the
3
+ * generation contract used across the format experiments. These prompts are
4
+ * NOT the frozen 30-prompt held-out corpus; they are diverse dev requests over
5
+ * the Maple fixture domain (fixtures.ts).
6
+ */
7
+ import { describeShape } from "@vendoai/core";
8
+ import { prewiredSchemaPrompt } from "../prewired-schema.js";
9
+ import { MAPLE_CATALOG, MAPLE_TOOLS, MAPLE_TOOL_SHAPES, THEME } from "./fixtures.js";
10
+ /** ~18 diverse dev prompts spanning tables, stats, charts, forms, actions,
11
+ * detail views, mixed dashboards, and search/interaction. */
12
+ export const DEV_PROMPTS = [
13
+ "Show my overdue invoices in a table with client, amount, and due date, plus a headline total.",
14
+ "Build a dashboard of my bank accounts: a balance stat per account and a small trend for each.",
15
+ "List clients sorted by outstanding balance, and let me filter by client name.",
16
+ "Give me a spending breakdown by category for this quarter as a donut plus a table of the numbers.",
17
+ "Show the last few transactions on my operating account with amounts and dates.",
18
+ "I want to send payment reminders for all overdue invoices from one screen.",
19
+ "Show a monthly revenue trend line for the last few months with a headline of the latest month.",
20
+ "Build an invoice detail view for a single invoice including its line items and a mark-paid action.",
21
+ "Create a clients page with a search box and a results table of matches showing their balances.",
22
+ "Summarize accounts receivable: total overdue, count of overdue invoices, and the worst three clients.",
23
+ "Show a payments form to pay a client from an account, with the amount and recipient.",
24
+ "Give me an at-a-glance finance overview: cash on hand, this-month revenue, and overdue total.",
25
+ "Show overdue invoices grouped visually with a reminder button per row.",
26
+ "Build a category spending page with a bar chart and each category's share as a percentage.",
27
+ "Show all accounts as cards with name, type, balance, and a sparkline.",
28
+ "Make a page that shows the single largest overdue invoice with a prominent amount and a reminder action.",
29
+ "Show revenue by month and spending by category side by side for a quick health check.",
30
+ "List recent transactions and let me filter them, showing category as a badge and the amount formatted.",
31
+ ];
32
+ /** Negative prompts: the host has NO tool for the ask, so the honest move is a
33
+ * Disclaimer, never fabricated data (Experiment 3 honesty probe). */
34
+ export const NEGATIVE_PROMPTS = [
35
+ "Show me my company's payroll runs and each employee's net pay this month.",
36
+ "Display our stock portfolio holdings with live share prices and today's gain/loss.",
37
+ "Show a credit score history chart for the business over the last two years.",
38
+ ];
39
+ const toolsBlock = () => `HOST TOOLS (the ONLY tools a query or action may name; anything else is invalid):\n` +
40
+ MAPLE_TOOLS.map((t) => `- ${t.name} [${t.risk}]: ${t.description}`).join("\n");
41
+ const shapesBlock = () => `TOOL RESPONSE SHAPES (bind only to fields that exist):\n` +
42
+ Object.entries(MAPLE_TOOL_SHAPES).map(([tool, shape]) => `- ${tool}: ${describeShape(shape)}`).join("\n");
43
+ const catalogBlock = () => `HOST CATALOG (the Kit — prefer these; they format themselves via the format prop):\n` +
44
+ MAPLE_CATALOG.map((c) => `- ${c.signature}`).join("\n");
45
+ const commonRules = `
46
+ - COMPOSE from host catalog + prewired components bound to query data. Prefer a host catalog component whenever it covers the need.
47
+ - Never hardcode business data. Every number, label, and row must come from a tool binding; if NO tool supplies the ask, render a Disclaimer saying so — never fabricate, placeholder, or example figures.
48
+ - Money fields are integer CENTS and dates are raw ISO. When a value is shown to a user in a Stat/Text/Badge/Table column, it MUST be formatted (money/date/percent). NEVER format a value fed to a chart (LineChart/BarChart/Donut/Sparkline) — those take RAW numbers.
49
+ - Actions are on* props naming a host tool, e.g. onClick="invoices.sendReminders". A write action MUST carry a payload binding the ids/fields it acts on. Never wire a submit button to a read tool or leave it dead.
50
+ - Islands are a LAST RESORT for a custom visual no catalog component covers; never put the whole app, layout, or data fetching in an island.`;
51
+ const preamble = `You are the Vendo app generation engine. Return ONLY vendo-genui/v2 wire markup: a single <App name="..."> element. No prose, no markdown fences, no JSON. NEVER emit id attributes — the compiler mints ids.
52
+
53
+ PREWIRED COMPONENT PROPS (use these EXACT prop names):
54
+ ${prewiredSchemaPrompt()}
55
+
56
+ ${catalogBlock()}
57
+
58
+ ${toolsBlock()}
59
+
60
+ ${shapesBlock()}
61
+
62
+ THEME TOKENS: ${JSON.stringify(THEME)}`;
63
+ /** Arm A — the current <Query>-declaration dialect. */
64
+ export const QUERY_ARM_SYSTEM = `${preamble}
65
+
66
+ DATA (declarations):
67
+ - <Query id="queryName" tool="tool_name" input={{...}}/> declarations come FIRST inside <App>. A query's result lives at its name; bind it with plain field refs like value={queryName.totalCents} or rows={queryName.data}. Bindings are PLAIN FIELD REFERENCES ONLY (no calls, no arithmetic). Reuse one <Query> for props that need the same tool+args.
68
+ ${commonRules}`;
69
+ /** Arm B — inline tool references (Experiment 1). */
70
+ export const INLINE_ARM_SYSTEM = `${preamble}
71
+
72
+ DATA (inline references):
73
+ - Reference a tool's data directly in a prop by CALLING it: rows={invoices.list({status:"overdue"}).data} and value={invoices.list({status:"overdue"}).totalCents}. The compiler mints the query and dedupes by tool+args — reuse the SAME call (same tool, same args) wherever you need that data, and it fetches once. Do NOT write <Query> declarations. After the call you may read a field path (.data, .totalCents, .data.0.id).
74
+ ${commonRules}`;
75
+ /** Fetch-then-generate phase-2 system (Experiment 3, Arm B): same as Query arm
76
+ * but the generator additionally sees real fetched samples. */
77
+ export const buildFetchAwareSystem = (fetched) => `${QUERY_ARM_SYSTEM}
78
+
79
+ FETCHED DATA (already read for you — bind to these exact fields and formats; the counts and sample rows are real):
80
+ ${fetched}`;
81
+ export const userTask = (prompt) => `USER_REQUEST: ${prompt}`;
82
+ /** Experiment 2 Arm B — build the app by calling builder tools (one turn). */
83
+ export const FORK_SYSTEM = `You are the Vendo app generation engine. You BUILD the app by CALLING the builder tools provided — do NOT write markup or prose. Each call returns a short acknowledgement; keep calling tools until the whole app is composed, then call finish.
84
+
85
+ BUILD ORDER:
86
+ 1. First call set_query once per distinct (tool, args) you need. Bindings reference a query by its name.
87
+ 2. Then compose the tree top-to-bottom: begin_region to open a layout container (Stack/Row/Grid/Card/Surface), place_<Component> to add a component to the current container, end_region to close it. Nesting is order-based; the compiler mints ids.
88
+ 3. Bind data by passing bindings on a place_ call: {prop: "queryName.field.path"}. Wire actions with actions {onClick:"tool.name"} and, for writes, actionPayloads {onClick:"queryName.data.0.id"}.
89
+ 4. Use define_island only as a last resort for a custom visual no component covers.
90
+ 5. Call finish when the app is complete.
91
+
92
+ THINK FIRST: before your first call, reason through the complete layout, which queries you need, and every binding — then emit the calls.
93
+
94
+ ${catalogBlock()}
95
+
96
+ ${toolsBlock()}
97
+
98
+ ${shapesBlock()}
99
+ ${commonRules}`;
100
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/bench/prompts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAErF;8DAC8D;AAC9D,MAAM,CAAC,MAAM,WAAW,GAAa;IACnC,+FAA+F;IAC/F,+FAA+F;IAC/F,+EAA+E;IAC/E,mGAAmG;IACnG,gFAAgF;IAChF,4EAA4E;IAC5E,gGAAgG;IAChG,oGAAoG;IACpG,gGAAgG;IAChG,uGAAuG;IACvG,sFAAsF;IACtF,+FAA+F;IAC/F,wEAAwE;IACxE,4FAA4F;IAC5F,uEAAuE;IACvE,0GAA0G;IAC1G,uFAAuF;IACvF,wGAAwG;CACzG,CAAC;AAEF;sEACsE;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAAa;IACxC,2EAA2E;IAC3E,oFAAoF;IACpF,6EAA6E;CAC9E,CAAC;AAEF,MAAM,UAAU,GAAG,GAAW,EAAE,CAC9B,qFAAqF;IACrF,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEjF,MAAM,WAAW,GAAG,GAAW,EAAE,CAC/B,0DAA0D;IAC1D,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,KAAK,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE5G,MAAM,YAAY,GAAG,GAAW,EAAE,CAChC,sFAAsF;IACtF,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE1D,MAAM,WAAW,GAAG;;;;;6IAKyH,CAAC;AAE9I,MAAM,QAAQ,GAAG;;;EAGf,oBAAoB,EAAE;;EAEtB,YAAY,EAAE;;EAEd,UAAU,EAAE;;EAEZ,WAAW,EAAE;;gBAEC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;AAExC,uDAAuD;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,QAAQ;;;;EAIzC,WAAW,EAAE,CAAC;AAEhB,qDAAqD;AACrD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,QAAQ;;;;EAI1C,WAAW,EAAE,CAAC;AAEhB;gEACgE;AAChE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAU,EAAE,CAC/D,GAAG,gBAAgB;;;EAGnB,OAAO,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,iBAAiB,MAAM,EAAE,CAAC;AAE9E,8EAA8E;AAC9E,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;EAWzB,YAAY,EAAE;;EAEd,UAAU,EAAE;;EAEZ,WAAW,EAAE;EACb,WAAW,EAAE,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { WireMetrics } from "./metrics.js";
2
+ import type { Judgement } from "./judge.js";
3
+ export interface Sample {
4
+ prompt: string;
5
+ wire: string;
6
+ inputTokens: number;
7
+ outputTokens: number;
8
+ ms: number;
9
+ genError?: string;
10
+ metrics: WireMetrics;
11
+ judge: Judgement;
12
+ }
13
+ export interface ArmSummary {
14
+ arm: string;
15
+ n: number;
16
+ compileOkRate: number;
17
+ meanRefErrors: number;
18
+ refErrorFreeRate: number;
19
+ meanBindingShapeErrors: number;
20
+ declaredUnusedRate: number;
21
+ formatMissRate: number;
22
+ meanFormatMiss: number;
23
+ fabricationRate: number;
24
+ answersAskRate: number;
25
+ meanQuality: number;
26
+ qualityStdev: number;
27
+ p50OutputTokens: number;
28
+ p50LatencyMs: number;
29
+ errorRate: number;
30
+ }
31
+ export declare const summarize: (arm: string, samples: Sample[]) => ArmSummary;
32
+ /** Welch-style significance of the quality-mean difference between two arms.
33
+ * Returns |difference| and whether it exceeds the combined standard error ×2
34
+ * (~95%). A coarse but honest "outside noise?" gate for small n. */
35
+ export declare const qualityDiffOutsideNoise: (a: Sample[], b: Sample[]) => {
36
+ diff: number;
37
+ se: number;
38
+ outside: boolean;
39
+ };
40
+ export declare const armTableRows: (rows: ArmSummary[]) => string;
41
+ export declare const RAW_DIR: string;
42
+ export declare const writeRaw: (name: string, data: unknown) => string;
43
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/bench/report.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAeD,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,SAAS,MAAM,EAAE,KAAG,UAoB1D,CAAC;AAEF;;qEAEqE;AACrE,eAAO,MAAM,uBAAuB,GAAI,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,KAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAQ9G,CAAC;AAKF,eAAO,MAAM,YAAY,GAAI,MAAM,UAAU,EAAE,KAAG,MAQjD,CAAC;AAIF,eAAO,MAAM,OAAO,QAA2D,CAAC;AAEhF,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,MAAM,OAAO,KAAG,MAKtD,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * W1-bench (docs/verification/w1-bench) — per-arm aggregation, significance,
3
+ * and markdown/JSON artifact writing. Raw per-sample records are persisted so
4
+ * every number in VERDICTS.md is reproducible.
5
+ */
6
+ import { mkdirSync, writeFileSync } from "node:fs";
7
+ import { dirname, join } from "node:path";
8
+ import { fileURLToPath } from "node:url";
9
+ const mean = (xs) => (xs.length ? xs.reduce((a, b) => a + b, 0) / xs.length : 0);
10
+ const rate = (xs) => (xs.length ? xs.filter(Boolean).length / xs.length : 0);
11
+ const stdev = (xs) => {
12
+ if (xs.length < 2)
13
+ return 0;
14
+ const m = mean(xs);
15
+ return Math.sqrt(mean(xs.map((x) => (x - m) ** 2)));
16
+ };
17
+ const p50 = (xs) => {
18
+ if (!xs.length)
19
+ return 0;
20
+ const s = [...xs].sort((a, b) => a - b);
21
+ return s[Math.floor(s.length / 2)];
22
+ };
23
+ export const summarize = (arm, samples) => {
24
+ const ok = samples.filter((s) => !s.genError);
25
+ return {
26
+ arm,
27
+ n: samples.length,
28
+ compileOkRate: rate(ok.map((s) => s.metrics.compileOk)),
29
+ meanRefErrors: mean(ok.map((s) => s.metrics.refErrors)),
30
+ refErrorFreeRate: rate(ok.map((s) => s.metrics.refErrors === 0 && s.metrics.compileOk)),
31
+ meanBindingShapeErrors: mean(ok.map((s) => s.metrics.bindingShapeErrors)),
32
+ declaredUnusedRate: rate(ok.map((s) => s.metrics.declaredButUnused > 0)),
33
+ formatMissRate: rate(ok.map((s) => s.metrics.formatMiss > 0)),
34
+ meanFormatMiss: mean(ok.map((s) => s.metrics.formatMiss)),
35
+ fabricationRate: rate(ok.map((s) => s.judge.fabricated)),
36
+ answersAskRate: rate(ok.map((s) => s.judge.answersAsk)),
37
+ meanQuality: mean(ok.map((s) => s.judge.quality)),
38
+ qualityStdev: stdev(ok.map((s) => s.judge.quality)),
39
+ p50OutputTokens: p50(ok.map((s) => s.outputTokens)),
40
+ p50LatencyMs: p50(ok.map((s) => s.ms)),
41
+ errorRate: rate(samples.map((s) => Boolean(s.genError))),
42
+ };
43
+ };
44
+ /** Welch-style significance of the quality-mean difference between two arms.
45
+ * Returns |difference| and whether it exceeds the combined standard error ×2
46
+ * (~95%). A coarse but honest "outside noise?" gate for small n. */
47
+ export const qualityDiffOutsideNoise = (a, b) => {
48
+ const qa = a.filter((s) => !s.genError).map((s) => s.judge.quality);
49
+ const qb = b.filter((s) => !s.genError).map((s) => s.judge.quality);
50
+ const diff = mean(qa) - mean(qb);
51
+ const va = qa.length > 1 ? stdev(qa) ** 2 / qa.length : 0;
52
+ const vb = qb.length > 1 ? stdev(qb) ** 2 / qb.length : 0;
53
+ const se = Math.sqrt(va + vb);
54
+ return { diff, se, outside: Math.abs(diff) > 2 * se && se > 0 };
55
+ };
56
+ const pct = (x) => `${(x * 100).toFixed(0)}%`;
57
+ const f2 = (x) => x.toFixed(2);
58
+ export const armTableRows = (rows) => {
59
+ const header = `| arm | n | compile-ok | ref-error-free | mean ref-err | mean binding-err | declared-unused | format-miss | fabrication | answers-ask | mean quality (sd) | p50 out-tok | p50 latency |\n|---|---|---|---|---|---|---|---|---|---|---|---|---|`;
60
+ const body = rows
61
+ .map((r) => `| ${r.arm} | ${r.n} | ${pct(r.compileOkRate)} | ${pct(r.refErrorFreeRate)} | ${f2(r.meanRefErrors)} | ${f2(r.meanBindingShapeErrors)} | ${pct(r.declaredUnusedRate)} | ${pct(r.formatMissRate)} | ${pct(r.fabricationRate)} | ${pct(r.answersAskRate)} | ${f2(r.meanQuality)} (${f2(r.qualityStdev)}) | ${r.p50OutputTokens} | ${(r.p50LatencyMs / 1000).toFixed(1)}s |`)
62
+ .join("\n");
63
+ return `${header}\n${body}`;
64
+ };
65
+ const HERE = dirname(fileURLToPath(import.meta.url));
66
+ // packages/apps/src/bench -> repo root
67
+ export const RAW_DIR = join(HERE, "../../../../docs/verification/w1-bench/raw");
68
+ export const writeRaw = (name, data) => {
69
+ mkdirSync(RAW_DIR, { recursive: true });
70
+ const path = join(RAW_DIR, name);
71
+ writeFileSync(path, JSON.stringify(data, null, 2));
72
+ return path;
73
+ };
74
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/bench/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * W1-bench (docs/verification/w1-bench) — run one arm: generate a wire per
3
+ * prompt (bounded concurrency), compile+score it, and judge it. Pure glue over
4
+ * client/metrics/judge so each experiment file stays declarative.
5
+ */
6
+ import { type GenOptions } from "./client.js";
7
+ import type { Sample } from "./report.js";
8
+ export interface ArmConfig {
9
+ system: string | ((prompt: string) => string);
10
+ inlineRefs?: boolean;
11
+ gen?: GenOptions;
12
+ concurrency?: number;
13
+ }
14
+ export declare const runArm: (prompts: string[], cfg: ArmConfig) => Promise<Sample[]>;
15
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/bench/runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAIlE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IAC9C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,MAAM,GAAU,SAAS,MAAM,EAAE,EAAE,KAAK,SAAS,KAAG,OAAO,CAAC,MAAM,EAAE,CAgB7E,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * W1-bench (docs/verification/w1-bench) — run one arm: generate a wire per
3
+ * prompt (bounded concurrency), compile+score it, and judge it. Pure glue over
4
+ * client/metrics/judge so each experiment file stays declarative.
5
+ */
6
+ import { generateWire, pool } from "./client.js";
7
+ import { computeWireMetrics } from "./metrics.js";
8
+ import { judge } from "./judge.js";
9
+ import { MAPLE_TOOL_SHAPES } from "./fixtures.js";
10
+ export const runArm = async (prompts, cfg) => pool(prompts, cfg.concurrency ?? 4, async (prompt) => {
11
+ const system = typeof cfg.system === "function" ? cfg.system(prompt) : cfg.system;
12
+ const g = await generateWire(system, `USER_REQUEST: ${prompt}`, cfg.gen ?? {});
13
+ const metrics = computeWireMetrics(g.wire, MAPLE_TOOL_SHAPES, { inlineRefs: cfg.inlineRefs });
14
+ const j = await judge(prompt, g.wire);
15
+ return {
16
+ prompt,
17
+ wire: g.wire,
18
+ inputTokens: g.inputTokens,
19
+ outputTokens: g.outputTokens,
20
+ ms: g.ms,
21
+ genError: g.error,
22
+ metrics,
23
+ judge: j,
24
+ };
25
+ });
26
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/bench/runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,IAAI,EAAmB,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAUlD,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,OAAiB,EAAE,GAAc,EAAqB,EAAE,CACnF,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAmB,EAAE;IACpE,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IAClF,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,iBAAiB,MAAM,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9F,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO;QACL,MAAM;QACN,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,QAAQ,EAAE,CAAC,CAAC,KAAK;QACjB,OAAO;QACP,KAAK,EAAE,CAAC;KACT,CAAC;AACJ,CAAC,CAAC,CAAC"}