@ggui-ai/ui-gen 0.7.0 → 0.9.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 +10 -0
- package/dist/adapters/generation-dispatch.js +172 -1392
- package/dist/adapters/generation-dispatch.js.map +1 -1
- package/dist/advanced/index.d.ts +1 -1
- package/dist/advanced/index.js +191 -1403
- package/dist/advanced/index.js.map +1 -1
- package/dist/boilerplate.js +3 -2
- package/dist/boilerplate.js.map +1 -1
- package/dist/compose.js +5 -5
- package/dist/compose.js.map +1 -1
- package/dist/{create-ui-generator-GX7tvbyH.d.ts → create-ui-generator-B9kV4U9h.d.ts} +13 -0
- package/dist/evaluation/axis-checks/index.js +32 -1
- package/dist/evaluation/axis-checks/index.js.map +1 -1
- package/dist/evaluation/axis-checks/registry.js +32 -1
- package/dist/evaluation/axis-checks/registry.js.map +1 -1
- package/dist/evaluation/index.js +57 -12
- package/dist/evaluation/index.js.map +1 -1
- package/dist/fragments/index.js +5 -5
- package/dist/fragments/index.js.map +1 -1
- package/dist/harness/index.d.ts +4 -125
- package/dist/harness/index.js +34 -19
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/runtime.d.ts +9 -0
- package/dist/harness/runtime.js +3 -2
- package/dist/harness/runtime.js.map +1 -1
- package/dist/harness/types-public.js +8 -7
- package/dist/harness/types-public.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +191 -1403
- package/dist/index.js.map +1 -1
- package/dist/llm-router-1TyI0_TV.d.ts +156 -0
- package/dist/providers/index.d.ts +35 -93
- package/dist/providers/index.js +13 -8
- package/dist/providers/index.js.map +1 -1
- package/dist/validation/index.js +2 -2
- package/dist/validation/index.js.map +1 -1
- package/package.json +18 -18
- package/src/adapters/generation-dispatch.ts +19 -2
- package/src/boilerplate/system-prompt.ts +3 -2
- package/src/create-ui-generator.ts +44 -11
- package/src/evaluation/axis-checks/checks/state-merge.ts +1 -1
- package/src/evaluation/axis-checks/checks/universal.ts +39 -0
- package/src/evaluation/llm-evaluator.ts +13 -3
- package/src/evaluation/visual-evaluator.ts +5 -1
- package/src/fragments/realtime.ts +3 -3
- package/src/fragments/state.ts +2 -2
- package/src/harness/coding/init-session.ts +4 -1
- package/src/harness/coding/run-eval-round.ts +6 -0
- package/src/harness/llm-router.ts +59 -14
- package/src/harness/runtime.ts +8 -0
- package/src/providers/bedrock.ts +84 -22
- package/src/validation/ui-compiler.ts +2 -2
package/dist/evaluation/index.js
CHANGED
|
@@ -462,6 +462,16 @@ var LLMAgent = class {
|
|
|
462
462
|
// Enables turn 2+ to skip re-sending system prompt + history.
|
|
463
463
|
// Call resetSession() between independent generation runs.
|
|
464
464
|
lastSessionId;
|
|
465
|
+
/**
|
|
466
|
+
* Explicit per-call routing override — see `AgentConfig.routeOverride`.
|
|
467
|
+
* Absent when constructed via the bare `new XAgent()` form (every
|
|
468
|
+
* existing call site), so `createClient()`/`resolveModel()` fall
|
|
469
|
+
* back to `process.env` exactly as before.
|
|
470
|
+
*/
|
|
471
|
+
routeOverride;
|
|
472
|
+
constructor(routeOverride) {
|
|
473
|
+
this.routeOverride = routeOverride;
|
|
474
|
+
}
|
|
465
475
|
async getClient() {
|
|
466
476
|
if (!this.client) {
|
|
467
477
|
this.client = await this.createClient();
|
|
@@ -512,19 +522,21 @@ var LLMAgent = class {
|
|
|
512
522
|
var AnthropicAgent = class extends LLMAgent {
|
|
513
523
|
provider = "anthropic";
|
|
514
524
|
resolveModel(model) {
|
|
515
|
-
|
|
525
|
+
const useBedrock = this.routeOverride?.useBedrock ?? process.env.CLAUDE_CODE_USE_BEDROCK === "1";
|
|
526
|
+
if (useBedrock) {
|
|
516
527
|
return getBedrockModelId(model);
|
|
517
528
|
}
|
|
518
529
|
return model.startsWith("anthropic/") ? model.slice("anthropic/".length) : model;
|
|
519
530
|
}
|
|
520
531
|
async createClient() {
|
|
521
|
-
|
|
532
|
+
const useBedrock = this.routeOverride?.useBedrock ?? process.env.CLAUDE_CODE_USE_BEDROCK === "1";
|
|
533
|
+
if (useBedrock) {
|
|
522
534
|
const { AnthropicBedrock } = await import('@anthropic-ai/bedrock-sdk');
|
|
523
535
|
return new AnthropicBedrock({
|
|
524
536
|
awsRegion: process.env.AWS_REGION ?? process.env.AWS_DEFAULT_REGION ?? "us-east-1"
|
|
525
537
|
});
|
|
526
538
|
}
|
|
527
|
-
return createAnthropicClient(process.env.ANTHROPIC_API_KEY);
|
|
539
|
+
return createAnthropicClient(this.routeOverride?.apiKey ?? process.env.ANTHROPIC_API_KEY);
|
|
528
540
|
}
|
|
529
541
|
async callText(model, systemPrompt, userPrompt, maxTokens, temperature) {
|
|
530
542
|
const client = await this.getClient();
|
|
@@ -765,7 +777,7 @@ var OpenAIAgent = class extends LLMAgent {
|
|
|
765
777
|
}
|
|
766
778
|
async createClient() {
|
|
767
779
|
const { default: OpenAISDK } = await import('openai');
|
|
768
|
-
return new OpenAISDK({ apiKey: process.env.OPENAI_API_KEY });
|
|
780
|
+
return new OpenAISDK({ apiKey: this.routeOverride?.apiKey ?? process.env.OPENAI_API_KEY });
|
|
769
781
|
}
|
|
770
782
|
async callText(model, systemPrompt, userPrompt, maxTokens, temperature) {
|
|
771
783
|
const client = await this.getClient();
|
|
@@ -936,7 +948,7 @@ var GoogleAgent = class extends LLMAgent {
|
|
|
936
948
|
async createClient() {
|
|
937
949
|
const { GoogleGenAI: GoogleGenAISDK } = await import('@google/genai');
|
|
938
950
|
return new GoogleGenAISDK({
|
|
939
|
-
apiKey: process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY,
|
|
951
|
+
apiKey: this.routeOverride?.apiKey ?? (process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY),
|
|
940
952
|
httpOptions: { timeout: 3e5 }
|
|
941
953
|
// 5 min — Pro models can be slow
|
|
942
954
|
});
|
|
@@ -1163,7 +1175,7 @@ var OpenRouterAgent = class extends LLMAgent {
|
|
|
1163
1175
|
async createClient() {
|
|
1164
1176
|
const { OpenRouterClient: OpenRouterClient2 } = await Promise.resolve().then(() => (init_client(), client_exports));
|
|
1165
1177
|
return new OpenRouterClient2({
|
|
1166
|
-
apiKey: process.env.OPENROUTER_API_KEY
|
|
1178
|
+
apiKey: this.routeOverride?.apiKey ?? process.env.OPENROUTER_API_KEY
|
|
1167
1179
|
});
|
|
1168
1180
|
}
|
|
1169
1181
|
async callText(model, systemPrompt, userPrompt, maxTokens, temperature) {
|
|
@@ -1289,16 +1301,18 @@ var OpenRouterAgent = class extends LLMAgent {
|
|
|
1289
1301
|
return { text: finalText, inputTokens: totalInput, outputTokens: totalOutput, turnsUsed };
|
|
1290
1302
|
}
|
|
1291
1303
|
};
|
|
1292
|
-
function createAgent(
|
|
1304
|
+
function createAgent(providerOrConfig) {
|
|
1305
|
+
const provider = typeof providerOrConfig === "string" ? providerOrConfig : providerOrConfig.provider;
|
|
1306
|
+
const routeOverride = typeof providerOrConfig === "string" ? void 0 : providerOrConfig.routeOverride;
|
|
1293
1307
|
switch (provider) {
|
|
1294
1308
|
case "anthropic":
|
|
1295
|
-
return new AnthropicAgent();
|
|
1309
|
+
return new AnthropicAgent(routeOverride);
|
|
1296
1310
|
case "openai":
|
|
1297
|
-
return new OpenAIAgent();
|
|
1311
|
+
return new OpenAIAgent(routeOverride);
|
|
1298
1312
|
case "google":
|
|
1299
|
-
return new GoogleAgent();
|
|
1313
|
+
return new GoogleAgent(routeOverride);
|
|
1300
1314
|
case "openrouter":
|
|
1301
|
-
return new OpenRouterAgent();
|
|
1315
|
+
return new OpenRouterAgent(routeOverride);
|
|
1302
1316
|
}
|
|
1303
1317
|
}
|
|
1304
1318
|
|
|
@@ -2017,6 +2031,31 @@ function runNoPhantomUseState(input) {
|
|
|
2017
2031
|
}
|
|
2018
2032
|
return issues;
|
|
2019
2033
|
}
|
|
2034
|
+
function runPropSeedNoResync(input) {
|
|
2035
|
+
if (input.compiledCode === null) return [];
|
|
2036
|
+
const src = input.sourceCode;
|
|
2037
|
+
const issues = [];
|
|
2038
|
+
const re = /const\s*\[\s*(\w+)\s*,\s*(\w+)\s*\]\s*=\s*useState(?:<[^>]*>)?\s*\(\s*props\??\.(\w+)/g;
|
|
2039
|
+
for (const m of src.matchAll(re)) {
|
|
2040
|
+
const [full, stateVar, setter, propName] = m;
|
|
2041
|
+
const idx = m.index ?? 0;
|
|
2042
|
+
const after = src.slice(idx + full.length);
|
|
2043
|
+
if (!new RegExp(`\\b${setter}\\s*\\(`).test(after)) continue;
|
|
2044
|
+
const resync = new RegExp(
|
|
2045
|
+
`\\[[^\\[\\]]*props\\??\\.${propName}\\b[^\\[\\]]*\\]`
|
|
2046
|
+
);
|
|
2047
|
+
if (resync.test(src)) continue;
|
|
2048
|
+
issues.push(
|
|
2049
|
+
mkIssue(
|
|
2050
|
+
"universal.prop_seed_no_resync",
|
|
2051
|
+
`useState(props.${propName}) seeds "${stateVar}" and mutates it, but no effect depends on [props.${propName}] \u2014 a ggui_amend repaint pushes new props that never reach this display (#480).`,
|
|
2052
|
+
`Add \`useEffect(() => ${setter}(props.${propName}), [props.${propName}]);\` so agent repaints re-seed the state, or derive the display directly from props.${propName}.`,
|
|
2053
|
+
"warn"
|
|
2054
|
+
)
|
|
2055
|
+
);
|
|
2056
|
+
}
|
|
2057
|
+
return issues;
|
|
2058
|
+
}
|
|
2020
2059
|
var UNIVERSAL_CHECKS = [
|
|
2021
2060
|
{
|
|
2022
2061
|
id: "universal.prop_coverage",
|
|
@@ -2035,6 +2074,12 @@ var UNIVERSAL_CHECKS = [
|
|
|
2035
2074
|
axis: "render",
|
|
2036
2075
|
values: ALL_RENDER_VALUES,
|
|
2037
2076
|
run: runNoPhantomUseState
|
|
2077
|
+
},
|
|
2078
|
+
{
|
|
2079
|
+
id: "universal.prop_seed_no_resync",
|
|
2080
|
+
axis: "render",
|
|
2081
|
+
values: ALL_RENDER_VALUES,
|
|
2082
|
+
run: runPropSeedNoResync
|
|
2038
2083
|
}
|
|
2039
2084
|
];
|
|
2040
2085
|
|
|
@@ -2054,7 +2099,7 @@ function runStateSeededFromProps(input) {
|
|
|
2054
2099
|
mkIssue(
|
|
2055
2100
|
"state.merge.seeded_from_props",
|
|
2056
2101
|
`Entity collection "${e.name}" is not seeded from props \u2014 no useState initializer reads props.${e.name}.`,
|
|
2057
|
-
`Add \`const [${e.name}, set${cap(e.name)}] = useState(props.${e.name});\` so stream/action updates
|
|
2102
|
+
`Add \`const [${e.name}, set${cap(e.name)}] = useState(props.${e.name});\` paired with \`useEffect(() => set${cap(e.name)}(props.${e.name}), [props.${e.name}]);\` so stream/action updates merge into live state AND agent repaints (ggui_amend) re-seed it (#480).`
|
|
2058
2103
|
)
|
|
2059
2104
|
);
|
|
2060
2105
|
}
|