@ggui-ai/ui-gen 0.9.0 → 0.10.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 (87) hide show
  1. package/dist/adapters/generation-dispatch.d.ts +9 -2
  2. package/dist/adapters/generation-dispatch.js +547 -85
  3. package/dist/adapters/generation-dispatch.js.map +1 -1
  4. package/dist/adapters/index.js +28 -11
  5. package/dist/adapters/index.js.map +1 -1
  6. package/dist/advanced/index.d.ts +5 -3
  7. package/dist/advanced/index.js +563 -92
  8. package/dist/advanced/index.js.map +1 -1
  9. package/dist/blueprint-validator.js +109 -3
  10. package/dist/blueprint-validator.js.map +1 -1
  11. package/dist/boilerplate.js +14 -2
  12. package/dist/boilerplate.js.map +1 -1
  13. package/dist/check/index.d.ts +1 -1
  14. package/dist/check/index.js +11 -1
  15. package/dist/check/index.js.map +1 -1
  16. package/dist/{create-ui-generator-B9kV4U9h.d.ts → create-ui-generator-CF0EL0Li.d.ts} +13 -1
  17. package/dist/{dispatch-Deo9qzrG.d.ts → dispatch-D75M-OfZ.d.ts} +1 -1
  18. package/dist/evaluation/axis-checks/index.d.ts +3 -3
  19. package/dist/evaluation/axis-checks/index.js +101 -0
  20. package/dist/evaluation/axis-checks/index.js.map +1 -1
  21. package/dist/evaluation/axis-checks/registry.d.ts +1 -1
  22. package/dist/evaluation/axis-checks/registry.js +101 -0
  23. package/dist/evaluation/axis-checks/registry.js.map +1 -1
  24. package/dist/evaluation/index.d.ts +46 -3
  25. package/dist/evaluation/index.js +358 -17
  26. package/dist/evaluation/index.js.map +1 -1
  27. package/dist/harness/check/runtime-render/index.d.ts +2 -2
  28. package/dist/harness/check/runtime-render/index.js +110 -3
  29. package/dist/harness/check/runtime-render/index.js.map +1 -1
  30. package/dist/harness/index.d.ts +2 -2
  31. package/dist/harness/index.js +263 -18
  32. package/dist/harness/index.js.map +1 -1
  33. package/dist/harness/llm-trace-sink.d.ts +1 -1
  34. package/dist/harness/llm-trace-sink.js.map +1 -1
  35. package/dist/harness/prompts.js +17 -3
  36. package/dist/harness/prompts.js.map +1 -1
  37. package/dist/harness/result-types.d.ts +1 -1
  38. package/dist/harness/runtime.d.ts +9 -2
  39. package/dist/harness/runtime.js +20 -6
  40. package/dist/harness/runtime.js.map +1 -1
  41. package/dist/harness/types-public.d.ts +1 -1
  42. package/dist/harness/types-public.js +14 -2
  43. package/dist/harness/types-public.js.map +1 -1
  44. package/dist/harness/validator-trace-sink.d.ts +1 -1
  45. package/dist/index.d.ts +5 -3
  46. package/dist/index.js +563 -92
  47. package/dist/index.js.map +1 -1
  48. package/dist/{llm-router-1TyI0_TV.d.ts → llm-router-BEVtbAb9.d.ts} +61 -4
  49. package/dist/patch.d.ts +1 -1
  50. package/dist/provider-adapter.d.ts +16 -6
  51. package/dist/provider-adapter.js.map +1 -1
  52. package/dist/providers/index.d.ts +19 -6
  53. package/dist/providers/index.js.map +1 -1
  54. package/dist/{render-check-CNZjHD5g.d.ts → render-check-BNYGVDJd.d.ts} +1 -1
  55. package/dist/{types-public-C36k1q6s.d.ts → types-public-DIpjC-OA.d.ts} +1 -1
  56. package/dist/workflows.d.ts +1 -1
  57. package/package.json +12 -12
  58. package/src/adapters/generation-dispatch.ts +9 -0
  59. package/src/adapters/openrouter/client.ts +2 -2
  60. package/src/adapters/openrouter/types.ts +10 -0
  61. package/src/boilerplate/generate.ts +10 -2
  62. package/src/boilerplate/json-schema-ts.ts +22 -2
  63. package/src/boilerplate/system-prompt.ts +1 -0
  64. package/src/compile.ts +1 -1
  65. package/src/contract-context.ts +10 -2
  66. package/src/create-ui-generator.ts +14 -0
  67. package/src/design-system-docs.ts +6 -4
  68. package/src/evaluation/axis-checks/checks/state-ui-affordance.ts +162 -0
  69. package/src/evaluation/axis-checks/registry.ts +2 -0
  70. package/src/evaluation/index.ts +11 -0
  71. package/src/evaluation/llm-evaluator.ts +14 -1
  72. package/src/evaluation/visual-evaluator.ts +44 -65
  73. package/src/harness/check/runtime-render/adapter.ts +18 -0
  74. package/src/harness/check/runtime-render/index.ts +8 -0
  75. package/src/harness/check/runtime-render/prepare-mockup.ts +14 -0
  76. package/src/harness/check/runtime-render/production-act-shim.ts +158 -0
  77. package/src/harness/check/runtime-render/render-check.ts +72 -1
  78. package/src/harness/coding/run-eval-round.ts +61 -5
  79. package/src/harness/index.ts +1 -1
  80. package/src/harness/llm-router.ts +397 -18
  81. package/src/harness/llm-trace-sink.ts +2 -1
  82. package/src/harness/runtime.ts +7 -0
  83. package/src/index.ts +5 -5
  84. package/src/provider-adapter.ts +16 -6
  85. package/src/providers/bedrock.ts +5 -4
  86. package/src/providers/index.ts +16 -4
  87. package/src/tools/render-check.ts +19 -7
@@ -1109,14 +1109,16 @@ var OpenRouterError;
1109
1109
  var init_types = __esm({
1110
1110
  "src/adapters/openrouter/types.ts"() {
1111
1111
  OpenRouterError = class extends Error {
1112
- constructor(message, status, code) {
1112
+ constructor(message, status, code, headers) {
1113
1113
  super(message);
1114
1114
  this.status = status;
1115
1115
  this.code = code;
1116
+ this.headers = headers;
1116
1117
  this.name = "OpenRouterError";
1117
1118
  }
1118
1119
  status;
1119
1120
  code;
1121
+ headers;
1120
1122
  get isTransient() {
1121
1123
  return this.status === 408 || this.status === 429 || this.status === 502 || this.status === 503;
1122
1124
  }
@@ -1157,7 +1159,7 @@ var init_client2 = __esm({
1157
1159
  if (!response.ok) {
1158
1160
  const errorBody = await response.json().catch(() => ({ error: { message: response.statusText } }));
1159
1161
  const message = errorBody.error?.message ?? response.statusText;
1160
- throw new OpenRouterError(message, response.status);
1162
+ throw new OpenRouterError(message, response.status, void 0, response.headers);
1161
1163
  }
1162
1164
  return response.json();
1163
1165
  }
@@ -1175,7 +1177,7 @@ var init_client2 = __esm({
1175
1177
  if (!response.ok) {
1176
1178
  const errorBody = await response.json().catch(() => ({ error: { message: response.statusText } }));
1177
1179
  const message = errorBody.error?.message ?? response.statusText;
1178
- throw new OpenRouterError(message, response.status);
1180
+ throw new OpenRouterError(message, response.status, void 0, response.headers);
1179
1181
  }
1180
1182
  if (!response.body) {
1181
1183
  throw new OpenRouterError("No response body for streaming request", 500);
@@ -1840,10 +1842,12 @@ These tokens adapt automatically to any theme (light, dark, branded). **ALWAYS u
1840
1842
  - Borders/dividers \u2192 \`var(--ggui-color-outline)\` or \`var(--ggui-color-outlineVariant)\`
1841
1843
 
1842
1844
  ### State Colors
1843
- - var(--ggui-color-success) \u2014 success states
1844
- - var(--ggui-color-warning) \u2014 warning states
1845
- - var(--ggui-color-error) \u2014 error states, destructive actions
1846
- - var(--ggui-color-info) \u2014 informational
1845
+ Semantic families ship as SCALES; the \`500\` stop is the role color (per-mode brightness), \`50\` the tint, \`800\` the on-tint text:
1846
+ - var(--ggui-color-success-500) \u2014 success states (tint bg: success-50, text on tint: success-800)
1847
+ - var(--ggui-color-warning-500) \u2014 warning states (warning-50 / warning-800)
1848
+ - var(--ggui-color-error-500) \u2014 error states, destructive actions (error-50 / error-800)
1849
+ - var(--ggui-color-info-500) \u2014 informational (info-50 / info-800)
1850
+ Prefer the primitives' \`tone="success|warning|error|info"\` prop over hand-written vars \u2014 it resolves to the same stops.
1847
1851
 
1848
1852
  ### IMPORTANT: Color Rules
1849
1853
  - **NEVER** use hardcoded hex colors. ONLY use var(--ggui-color-*) tokens.
@@ -2135,6 +2139,15 @@ function jsonSchemaTypeToTs(schema) {
2135
2139
  if (schema.enum?.length) {
2136
2140
  return schema.enum.map((v) => typeof v === "string" ? `'${v}'` : String(v)).join(" | ");
2137
2141
  }
2142
+ if (Array.isArray(schema.type)) {
2143
+ const { nullable: _nullable, ...rest } = schema;
2144
+ const members = [...new Set(schema.type)].map(
2145
+ (member) => jsonSchemaTypeToTs({ ...rest, type: member })
2146
+ );
2147
+ const unique = [...new Set(members)];
2148
+ if (schema.nullable && !unique.includes("null")) unique.push("null");
2149
+ return unique.join(" | ");
2150
+ }
2138
2151
  let result;
2139
2152
  switch (schema.type) {
2140
2153
  case "string":
@@ -2152,7 +2165,8 @@ function jsonSchemaTypeToTs(schema) {
2152
2165
  case "array": {
2153
2166
  if (schema.items) {
2154
2167
  const itemType = jsonSchemaTypeToTs(schema.items);
2155
- result = schema.items.type === "object" && schema.items.properties ? `Array<${itemType}>` : itemType.includes("|") ? `(${itemType})[]` : `${itemType}[]`;
2168
+ const itemsDeclareObject = Array.isArray(schema.items.type) ? schema.items.type.includes("object") : schema.items.type === "object";
2169
+ result = itemsDeclareObject && schema.items.properties ? `Array<${itemType}>` : itemType.includes("|") ? `(${itemType})[]` : `${itemType}[]`;
2156
2170
  } else {
2157
2171
  result = "unknown[]";
2158
2172
  }
@@ -2802,16 +2816,19 @@ function generateSampleProps(spec) {
2802
2816
  return props;
2803
2817
  }
2804
2818
  function synthesizeFromSchema(schema) {
2805
- switch (schema.type) {
2819
+ const declared = Array.isArray(schema.type) ? schema.type.find((t) => t !== "null") : schema.type;
2820
+ switch (declared) {
2806
2821
  case "string":
2807
2822
  return "sample";
2808
2823
  case "number":
2824
+ case "integer":
2809
2825
  return 0;
2810
2826
  case "boolean":
2811
2827
  return false;
2828
+ case "null":
2829
+ return null;
2812
2830
  case "array": {
2813
- const itemSchema = schema.items;
2814
- if (itemSchema) return [synthesizeFromSchema(itemSchema) ?? null];
2831
+ if (schema.items) return [synthesizeFromSchema(schema.items) ?? null];
2815
2832
  return [];
2816
2833
  }
2817
2834
  case "object": {