@ggui-ai/ui-gen 0.9.0 → 0.11.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/adapters/generation-dispatch.d.ts +9 -2
- package/dist/adapters/generation-dispatch.js +693 -89
- package/dist/adapters/generation-dispatch.js.map +1 -1
- package/dist/adapters/index.js +28 -11
- package/dist/adapters/index.js.map +1 -1
- package/dist/advanced/index.d.ts +5 -3
- package/dist/advanced/index.js +714 -101
- package/dist/advanced/index.js.map +1 -1
- package/dist/blueprint-validator.js +267 -3
- package/dist/blueprint-validator.js.map +1 -1
- package/dist/boilerplate.js +14 -2
- package/dist/boilerplate.js.map +1 -1
- package/dist/check/index.d.ts +1 -1
- package/dist/check/index.js +11 -1
- package/dist/check/index.js.map +1 -1
- package/dist/{create-ui-generator-B9kV4U9h.d.ts → create-ui-generator-CF0EL0Li.d.ts} +13 -1
- package/dist/{dispatch-Deo9qzrG.d.ts → dispatch-D75M-OfZ.d.ts} +1 -1
- package/dist/evaluation/axis-checks/index.d.ts +3 -3
- package/dist/evaluation/axis-checks/index.js +101 -0
- package/dist/evaluation/axis-checks/index.js.map +1 -1
- package/dist/evaluation/axis-checks/registry.d.ts +1 -1
- package/dist/evaluation/axis-checks/registry.js +101 -0
- package/dist/evaluation/axis-checks/registry.js.map +1 -1
- package/dist/evaluation/index.d.ts +46 -3
- package/dist/evaluation/index.js +358 -17
- package/dist/evaluation/index.js.map +1 -1
- package/dist/harness/check/runtime-render/index.d.ts +2 -2
- package/dist/harness/check/runtime-render/index.js +268 -3
- package/dist/harness/check/runtime-render/index.js.map +1 -1
- package/dist/harness/check/runtime-render/render-check-worker.d.ts +2 -0
- package/dist/harness/check/runtime-render/render-check-worker.js +1332 -0
- package/dist/harness/check/runtime-render/render-check-worker.js.map +1 -0
- package/dist/harness/index.d.ts +2 -2
- package/dist/harness/index.js +263 -18
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/llm-trace-sink.d.ts +1 -1
- package/dist/harness/llm-trace-sink.js.map +1 -1
- package/dist/harness/prompts.js +17 -3
- package/dist/harness/prompts.js.map +1 -1
- package/dist/harness/result-types.d.ts +1 -1
- package/dist/harness/runtime.d.ts +9 -2
- package/dist/harness/runtime.js +20 -6
- package/dist/harness/runtime.js.map +1 -1
- package/dist/harness/types-public.d.ts +1 -1
- package/dist/harness/types-public.js +14 -2
- package/dist/harness/types-public.js.map +1 -1
- package/dist/harness/validator-trace-sink.d.ts +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.js +708 -95
- package/dist/index.js.map +1 -1
- package/dist/{llm-router-1TyI0_TV.d.ts → llm-router-BEVtbAb9.d.ts} +61 -4
- package/dist/patch.d.ts +1 -1
- package/dist/provider-adapter.d.ts +16 -6
- package/dist/provider-adapter.js.map +1 -1
- package/dist/providers/index.d.ts +19 -6
- package/dist/providers/index.js.map +1 -1
- package/dist/{render-check-CNZjHD5g.d.ts → render-check-BZoIE8-u.d.ts} +21 -1
- package/dist/{types-public-C36k1q6s.d.ts → types-public-DIpjC-OA.d.ts} +1 -1
- package/dist/workflows.d.ts +1 -1
- package/package.json +12 -12
- package/src/adapters/generation-dispatch.ts +9 -0
- package/src/adapters/openrouter/client.ts +2 -2
- package/src/adapters/openrouter/types.ts +10 -0
- package/src/boilerplate/generate.ts +10 -2
- package/src/boilerplate/json-schema-ts.ts +22 -2
- package/src/boilerplate/system-prompt.ts +1 -0
- package/src/compile.ts +1 -1
- package/src/contract-context.ts +10 -2
- package/src/create-ui-generator.ts +14 -0
- package/src/design-system-docs.ts +6 -4
- package/src/evaluation/axis-checks/checks/state-ui-affordance.ts +162 -0
- package/src/evaluation/axis-checks/registry.ts +2 -0
- package/src/evaluation/index.ts +11 -0
- package/src/evaluation/llm-evaluator.ts +14 -1
- package/src/evaluation/visual-evaluator.ts +44 -65
- package/src/harness/check/runtime-render/adapter.ts +18 -0
- package/src/harness/check/runtime-render/index.ts +8 -0
- package/src/harness/check/runtime-render/prepare-mockup.ts +14 -0
- package/src/harness/check/runtime-render/production-act-shim.ts +158 -0
- package/src/harness/check/runtime-render/render-check-host.ts +201 -0
- package/src/harness/check/runtime-render/render-check-worker.ts +80 -0
- package/src/harness/check/runtime-render/render-check.ts +112 -1
- package/src/harness/coding/run-eval-round.ts +61 -5
- package/src/harness/index.ts +1 -1
- package/src/harness/llm-router.ts +397 -18
- package/src/harness/llm-trace-sink.ts +2 -1
- package/src/harness/runtime.ts +7 -0
- package/src/index.ts +5 -5
- package/src/provider-adapter.ts +16 -6
- package/src/providers/bedrock.ts +5 -4
- package/src/providers/index.ts +16 -4
- package/src/tools/render-check.ts +19 -7
package/src/provider-adapter.ts
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Provider adapter contract — the narrow surface every concrete LLM
|
|
3
|
-
* provider client (Anthropic, Google, OpenAI, OpenRouter)
|
|
4
|
-
*
|
|
3
|
+
* provider client (Anthropic, Google, OpenAI, OpenRouter, Bedrock)
|
|
4
|
+
* implements.
|
|
5
|
+
*
|
|
6
|
+
* **Real role:** a provider-agnostic one-shot LLM caller for
|
|
7
|
+
* lightweight callers that need a single `complete()` round-trip — NOT
|
|
8
|
+
* a generation harness. The primary consumer is the negotiator's LLM
|
|
9
|
+
* seam (`@ggui-ai/mcp-server`'s `llm-backed-negotiator.ts`, via
|
|
10
|
+
* {@link selectAdapter} from `./providers/index.js`); other lightweight
|
|
11
|
+
* one-shot callers use it the same way. It is explicitly NOT part of
|
|
12
|
+
* the generation dispatch path: `createUiGenerator()` accepts no
|
|
13
|
+
* adapter option, and generation-call 429 retry/backoff lives entirely
|
|
14
|
+
* in `harness/llm-router.ts`'s `apiCall()` — a separate retry story for
|
|
15
|
+
* a separate call shape (an agentic SDK loop, not a single completion).
|
|
5
16
|
*
|
|
6
17
|
* The contract is deliberately defined independently of concrete
|
|
7
18
|
* adapters so:
|
|
@@ -9,10 +20,9 @@
|
|
|
9
20
|
* - Adapter implementations can be written against a stable surface —
|
|
10
21
|
* every concrete adapter MUST pass
|
|
11
22
|
* {@link providerAdapterContract} or it isn't a `ProviderAdapter`.
|
|
12
|
-
* - Downstream callers
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* UX.
|
|
23
|
+
* - Downstream one-shot callers build against ONE structured failure
|
|
24
|
+
* shape ({@link ProviderError}) instead of inventing per-provider
|
|
25
|
+
* error UX.
|
|
16
26
|
* - The negotiator + cache layers can branch on
|
|
17
27
|
* `error.kind === 'rate-limited'` etc. without parsing strings.
|
|
18
28
|
*
|
package/src/providers/bedrock.ts
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
*
|
|
8
8
|
* ## Why this adapter exists
|
|
9
9
|
*
|
|
10
|
-
* Anyone running
|
|
11
|
-
* Lambda, EKS) can target Bedrock without managing API keys: IAM is
|
|
10
|
+
* Anyone running a one-shot LLM caller on an AWS-credentialed host
|
|
11
|
+
* (EC2, ECS, Lambda, EKS) can target Bedrock without managing API keys: IAM is
|
|
12
12
|
* the auth boundary, AWS rotates host credentials automatically, and
|
|
13
13
|
* a misconfigured IAM role surfaces as a clear `AccessDeniedException`
|
|
14
14
|
* the SDK funnels through `mapError`. The alternative — parking a
|
|
@@ -198,8 +198,9 @@ export interface BedrockAdapterOptions {
|
|
|
198
198
|
*
|
|
199
199
|
* No API key — IAM is the auth boundary. The returned `ProviderAdapter`
|
|
200
200
|
* satisfies the same contract as `createAnthropicAdapter`, so it
|
|
201
|
-
* slots into
|
|
202
|
-
* the per-provider model-id namespace
|
|
201
|
+
* slots into any one-shot `ProviderAdapter` caller (e.g. `selectAdapter`)
|
|
202
|
+
* interchangeably (modulo the per-provider model-id namespace
|
|
203
|
+
* differences).
|
|
203
204
|
*/
|
|
204
205
|
export function createBedrockAdapter(
|
|
205
206
|
options: BedrockAdapterOptions = {},
|
package/src/providers/index.ts
CHANGED
|
@@ -5,6 +5,15 @@
|
|
|
5
5
|
* providers ggui supports today: Anthropic (direct API), Google,
|
|
6
6
|
* OpenAI, OpenRouter, and AWS Bedrock (Anthropic models via IAM).
|
|
7
7
|
*
|
|
8
|
+
* **Real role:** a provider-agnostic one-shot LLM caller for
|
|
9
|
+
* lightweight callers that need a single `complete()` round-trip — NOT
|
|
10
|
+
* the generation dispatch path. `createUiGenerator()` accepts no
|
|
11
|
+
* adapter option; generation-call retry/backoff lives entirely in
|
|
12
|
+
* `harness/llm-router.ts`'s `apiCall()`. The primary consumer is the
|
|
13
|
+
* negotiator's LLM seam (`@ggui-ai/mcp-server`'s
|
|
14
|
+
* `llm-backed-negotiator.ts`, via {@link selectAdapter}); other
|
|
15
|
+
* lightweight one-shot callers use it the same way.
|
|
16
|
+
*
|
|
8
17
|
* Every adapter satisfies the structural
|
|
9
18
|
* {@link import('../provider-adapter.js').ProviderAdapter} contract.
|
|
10
19
|
* The four direct-API adapters compose
|
|
@@ -15,15 +24,18 @@
|
|
|
15
24
|
* because rolling our own AWS SigV4 signer for one provider isn't a
|
|
16
25
|
* reasonable trade.
|
|
17
26
|
*
|
|
18
|
-
* Typical usage
|
|
27
|
+
* Typical usage — a one-shot completion:
|
|
19
28
|
*
|
|
20
29
|
* ```ts
|
|
21
30
|
* import { createAnthropicAdapter } from '@ggui-ai/ui-gen/providers';
|
|
22
|
-
* import { createUiGenerator } from '@ggui-ai/ui-gen';
|
|
23
31
|
*
|
|
24
32
|
* const adapter = createAnthropicAdapter();
|
|
25
|
-
* const
|
|
26
|
-
*
|
|
33
|
+
* const result = await adapter.complete({
|
|
34
|
+
* apiKey,
|
|
35
|
+
* route: { provider: 'anthropic', model: 'claude-haiku-4-5-20251001' },
|
|
36
|
+
* systemPrompt,
|
|
37
|
+
* userPrompt,
|
|
38
|
+
* });
|
|
27
39
|
* ```
|
|
28
40
|
*
|
|
29
41
|
* Bedrock pool path (no API key — IAM at process boot):
|
|
@@ -28,7 +28,12 @@ import { existsSync } from 'node:fs';
|
|
|
28
28
|
import { createRequire } from 'node:module';
|
|
29
29
|
import { pathToFileURL, fileURLToPath } from 'node:url';
|
|
30
30
|
import { runSandboxed } from '@ggui-ai/sandbox';
|
|
31
|
-
import type {
|
|
31
|
+
import type {
|
|
32
|
+
JsonObject,
|
|
33
|
+
JsonSchema,
|
|
34
|
+
JsonValue,
|
|
35
|
+
PropsSpec,
|
|
36
|
+
} from '@ggui-ai/protocol';
|
|
32
37
|
|
|
33
38
|
/**
|
|
34
39
|
* Generate sample props from a PropsSpec contract.
|
|
@@ -58,21 +63,28 @@ export function generateSampleProps(spec: PropsSpec): JsonObject {
|
|
|
58
63
|
return props;
|
|
59
64
|
}
|
|
60
65
|
|
|
61
|
-
function synthesizeFromSchema(schema:
|
|
62
|
-
|
|
66
|
+
function synthesizeFromSchema(schema: JsonSchema): JsonValue | undefined {
|
|
67
|
+
// Draft-07 type arrays (`['string','null']`) synthesize from the
|
|
68
|
+
// first non-null member — the canonical nullability form the
|
|
69
|
+
// enforced-props-schema emission produces.
|
|
70
|
+
const declared = Array.isArray(schema.type)
|
|
71
|
+
? schema.type.find((t) => t !== 'null')
|
|
72
|
+
: schema.type;
|
|
73
|
+
switch (declared) {
|
|
63
74
|
case 'string': return 'sample';
|
|
64
|
-
case 'number':
|
|
75
|
+
case 'number':
|
|
76
|
+
case 'integer': return 0;
|
|
65
77
|
case 'boolean': return false;
|
|
78
|
+
case 'null': return null;
|
|
66
79
|
case 'array': {
|
|
67
|
-
|
|
68
|
-
if (itemSchema) return [synthesizeFromSchema(itemSchema) ?? null];
|
|
80
|
+
if (schema.items) return [synthesizeFromSchema(schema.items) ?? null];
|
|
69
81
|
return [];
|
|
70
82
|
}
|
|
71
83
|
case 'object': {
|
|
72
84
|
const obj: JsonObject = {};
|
|
73
85
|
if (schema.properties) {
|
|
74
86
|
for (const [k, v] of Object.entries(schema.properties)) {
|
|
75
|
-
obj[k] = synthesizeFromSchema(v
|
|
87
|
+
obj[k] = synthesizeFromSchema(v);
|
|
76
88
|
}
|
|
77
89
|
}
|
|
78
90
|
return obj;
|