@ggui-ai/ui-gen 0.15.0 → 0.16.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 (101) hide show
  1. package/dist/adapters/generation-dispatch.d.ts +21 -4
  2. package/dist/adapters/generation-dispatch.js +913 -350
  3. package/dist/adapters/generation-dispatch.js.map +1 -1
  4. package/dist/adapters/index.js +26 -22
  5. package/dist/adapters/index.js.map +1 -1
  6. package/dist/advanced/index.d.ts +17 -12
  7. package/dist/advanced/index.js +966 -374
  8. package/dist/advanced/index.js.map +1 -1
  9. package/dist/boilerplate.d.ts +16 -1
  10. package/dist/boilerplate.js +579 -245
  11. package/dist/boilerplate.js.map +1 -1
  12. package/dist/check/index.d.ts +17 -3
  13. package/dist/check/index.js +32 -25
  14. package/dist/check/index.js.map +1 -1
  15. package/dist/{create-ui-generator-D6TKuv9V.d.ts → create-ui-generator-CCIeQaEe.d.ts} +77 -10
  16. package/dist/design-mode-BHEE7flj.d.ts +67 -0
  17. package/dist/{dispatch-BuZfTh9r.d.ts → dispatch-BA5dJcg-.d.ts} +4 -1
  18. package/dist/evaluation/axis-checks/index.d.ts +4 -3
  19. package/dist/evaluation/axis-checks/index.js +3 -1
  20. package/dist/evaluation/axis-checks/index.js.map +1 -1
  21. package/dist/evaluation/axis-checks/registry.d.ts +2 -1
  22. package/dist/evaluation/axis-checks/registry.js +1 -0
  23. package/dist/evaluation/axis-checks/registry.js.map +1 -1
  24. package/dist/evaluation/index.d.ts +143 -3
  25. package/dist/evaluation/index.js +3866 -92
  26. package/dist/evaluation/index.js.map +1 -1
  27. package/dist/{generate-BTfvELgl.d.ts → generate-8L_bc2iP.d.ts} +10 -1
  28. package/dist/harness/check/runtime-render/index.d.ts +2 -1
  29. package/dist/harness/index.d.ts +2 -1
  30. package/dist/harness/index.js +589 -248
  31. package/dist/harness/index.js.map +1 -1
  32. package/dist/harness/llm-trace-sink.d.ts +3 -3
  33. package/dist/harness/llm-trace-sink.js.map +1 -1
  34. package/dist/harness/prompts.d.ts +2 -1
  35. package/dist/harness/prompts.js +3 -0
  36. package/dist/harness/prompts.js.map +1 -1
  37. package/dist/harness/result-types.d.ts +17 -5
  38. package/dist/harness/result-types.js.map +1 -1
  39. package/dist/harness/runtime.d.ts +19 -3
  40. package/dist/harness/runtime.js +602 -261
  41. package/dist/harness/runtime.js.map +1 -1
  42. package/dist/harness/types-public.d.ts +28 -1
  43. package/dist/harness/types-public.js +589 -248
  44. package/dist/harness/types-public.js.map +1 -1
  45. package/dist/harness/validator-trace-sink.d.ts +2 -1
  46. package/dist/index.d.ts +8 -4
  47. package/dist/index.js +973 -372
  48. package/dist/index.js.map +1 -1
  49. package/dist/patch.d.ts +2 -1
  50. package/dist/{prompts-BVhtH3M1.d.ts → prompts-k6m6reqe.d.ts} +11 -1
  51. package/dist/providers/index.d.ts +2 -2
  52. package/dist/providers/index.js.map +1 -1
  53. package/dist/tools/get-primitives-ts.d.ts +1 -1
  54. package/dist/tools/get-primitives-ts.js +1 -1
  55. package/dist/tools/get-primitives-ts.js.map +1 -1
  56. package/dist/{types-public-CkNWEov9.d.ts → types-public-D24JLJgl.d.ts} +49 -5
  57. package/dist/validation/index.d.ts +1 -1
  58. package/dist/validation/index.js +4 -4
  59. package/dist/validation/index.js.map +1 -1
  60. package/dist/workflows.d.ts +2 -1
  61. package/package.json +12 -12
  62. package/src/adapters/generation-dispatch.ts +57 -4
  63. package/src/adapters/provider-router.ts +7 -6
  64. package/src/adapters/tools.ts +5 -5
  65. package/src/advanced/generator.ts +11 -10
  66. package/src/advanced/index.ts +5 -4
  67. package/src/boilerplate/free-design-prompt.ts +329 -0
  68. package/src/boilerplate/generate.ts +10 -1
  69. package/src/boilerplate/hard-sections.ts +242 -0
  70. package/src/boilerplate/render.ts +32 -8
  71. package/src/boilerplate/system-prompt.ts +81 -229
  72. package/src/boilerplate/templates/base-free.tsx.tmpl +24 -0
  73. package/src/check/run-tier0.ts +80 -20
  74. package/src/coding-agent/tools.ts +8 -2
  75. package/src/contract-context.ts +28 -0
  76. package/src/create-harness.ts +11 -0
  77. package/src/create-ui-generator.ts +71 -25
  78. package/src/design-mode.ts +182 -0
  79. package/src/design-system-docs.ts +17 -13
  80. package/src/evaluation/axis-checks/dispatch.ts +4 -0
  81. package/src/evaluation/axis-checks/extras.ts +5 -0
  82. package/src/evaluation/cost-tracker.ts +2 -3
  83. package/src/evaluation/index.ts +46 -2
  84. package/src/evaluation/llm-evaluator.ts +77 -21
  85. package/src/evaluation/types-public.ts +103 -8
  86. package/src/evaluation/visual-evaluator.ts +301 -29
  87. package/src/harness/coding/dupe-break.ts +0 -0
  88. package/src/harness/coding/init-session.ts +1 -0
  89. package/src/harness/coding/run-coding-turn.ts +3 -0
  90. package/src/harness/coding/run-eval-round.ts +15 -2
  91. package/src/harness/llm-trace-sink.ts +3 -3
  92. package/src/harness/result-types.ts +15 -3
  93. package/src/harness/runtime.ts +18 -0
  94. package/src/harness/types-public.ts +27 -0
  95. package/src/index.ts +26 -0
  96. package/src/internal/extract-call-signatures.ts +2 -2
  97. package/src/providers/bedrock.ts +4 -4
  98. package/src/run-check.ts +1 -0
  99. package/src/tools/get-primitives-ts.ts +1 -1
  100. package/src/validation/allowed-imports.ts +8 -2
  101. package/src/validation/primitives.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adapters/openrouter/types.ts","../../src/adapters/openrouter/client.ts","../../src/evaluation/types-public.ts","../../src/adapters/claude/client.ts","../../src/adapters/provider-router.ts","../../src/adapters/tool-bridge.ts","../../src/harness/llm-trace-sink.ts","../../src/harness/llm-router.ts","../../src/evaluation/evaluator.ts","../../src/evaluation/message-parsing.ts","../../src/evaluation/prompts.ts","../../src/evaluation/types.ts","../../src/evaluation/loop.ts","../../src/evaluation/mcp-server.ts","../../src/evaluation/axis-checks/helpers.ts","../../src/evaluation/axis-checks/checks/universal.ts","../../src/evaluation/axis-checks/checks/state-merge.ts","../../src/evaluation/axis-checks/checks/state-ui-affordance.ts","../../src/evaluation/axis-checks/checks/realtime.ts","../../src/evaluation/axis-checks/checks/writes.ts","../../src/evaluation/axis-checks/checks/state-payload.ts","../../src/evaluation/axis-checks/checks/tooling.ts","../../src/evaluation/axis-checks/extras.ts","../../src/evaluation/axis-checks/registry.ts","../../src/evaluation/axis-checks/dispatch.ts","../../src/evaluation/visual-evaluator.ts"],"names":["tool","OpenRouterClient","z","REALTIME_ACTIVE","mkIssue","matches"],"mappings":"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","file":"index.js","sourcesContent":["// packages/ui-gen/src/adapters/openrouter/types.ts\n//\n// OpenRouter-specific types for the chat completion API.\n// Reference: https://openrouter.ai/docs/api-reference\n\nimport type { JsonObject } from '@ggui-ai/protocol';\n\n// =============================================================================\n// Model metadata (from GET /api/v1/models)\n// =============================================================================\n\n/** Model entry from OpenRouter's /api/v1/models endpoint */\nexport interface OpenRouterModelEntry {\n id: string;\n name: string;\n description: string;\n pricing: { prompt: string; completion: string; image?: string };\n context_length: number;\n architecture: {\n modality: string;\n tokenizer: string;\n instruct_type: string | null;\n };\n top_provider: {\n context_length: number;\n max_completion_tokens: number;\n is_moderated: boolean;\n };\n per_request_limits: Record<string, string> | null;\n}\n\n// =============================================================================\n// Chat Completion API\n// =============================================================================\n\nexport interface OpenRouterMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string | OpenRouterContentBlock[] | null;\n tool_calls?: OpenRouterToolCall[];\n tool_call_id?: string;\n}\n\nexport interface OpenRouterContentBlock {\n type: 'text';\n text: string;\n cache_control?: { type: 'ephemeral' };\n}\n\nexport interface OpenRouterTool {\n type: 'function';\n function: {\n name: string;\n description: string;\n parameters: JsonObject;\n };\n}\n\nexport interface OpenRouterToolCall {\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n}\n\nexport interface OpenRouterChatRequest {\n model: string;\n messages: OpenRouterMessage[];\n tools?: OpenRouterTool[];\n tool_choice?: 'auto' | 'required' | 'none';\n max_tokens?: number;\n temperature?: number;\n stream?: boolean;\n thinking?: { type: 'enabled'; budget_tokens: number };\n}\n\nexport interface OpenRouterChatResponse {\n id: string;\n model: string;\n choices: Array<{\n index: number;\n message: {\n role: 'assistant';\n content: string | null;\n tool_calls?: OpenRouterToolCall[];\n thinking?: string;\n };\n finish_reason: string;\n }>;\n usage: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n cache_creation_input_tokens?: number;\n cache_read_input_tokens?: number;\n };\n}\n\n// =============================================================================\n// SSE Streaming\n// =============================================================================\n\nexport interface OpenRouterStreamDelta {\n id: string;\n model: string;\n choices: Array<{\n index: number;\n delta: {\n role?: 'assistant';\n content?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: 'function';\n function?: { name?: string; arguments?: string };\n }>;\n };\n finish_reason: string | null;\n }>;\n usage?: OpenRouterChatResponse['usage'];\n}\n\n// =============================================================================\n// Error\n// =============================================================================\n\nexport class OpenRouterError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly code?: string,\n /**\n * Response headers, when the caller had access to them at throw\n * time (#489). Only `client.ts`'s two HTTP-response-driven throw\n * sites populate this — the \"no response body\" throw has no\n * response to read headers from. Duck-typed against the same\n * `{ get(name): string | null }` shape `llm-router.ts`'s\n * `extractRetryAfterSec` already reads from Anthropic/OpenAI SDK\n * errors, so OpenRouter gets retry-after support for free.\n */\n public readonly headers?: { get(name: string): string | null },\n ) {\n super(message);\n this.name = 'OpenRouterError';\n }\n\n get isTransient(): boolean {\n return this.status === 408 || this.status === 429\n || this.status === 502 || this.status === 503;\n }\n}\n","// packages/ui-gen/src/adapters/openrouter/client.ts\n//\n// Direct fetch()-based HTTP client for OpenRouter's API.\n// No OpenAI SDK dependency — independent implementation.\n\nimport type {\n OpenRouterChatRequest,\n OpenRouterChatResponse,\n OpenRouterStreamDelta,\n} from './types';\nimport { OpenRouterError } from './types';\n\nexport interface OpenRouterClientConfig {\n apiKey: string;\n baseUrl?: string;\n siteUrl?: string;\n siteName?: string;\n}\n\nconst DEFAULT_BASE_URL = 'https://openrouter.ai/api/v1';\n\nexport class OpenRouterClient {\n private readonly baseUrl: string;\n private readonly headers: Record<string, string>;\n\n constructor(private readonly config: OpenRouterClientConfig) {\n this.baseUrl = config.baseUrl ?? process.env.OPENROUTER_BASE_URL ?? DEFAULT_BASE_URL;\n this.headers = {\n 'Authorization': `Bearer ${config.apiKey}`,\n 'Content-Type': 'application/json',\n 'HTTP-Referer': config.siteUrl ?? process.env.OPENROUTER_SITE_URL ?? 'https://ggui.ai',\n 'X-Title': config.siteName ?? process.env.OPENROUTER_SITE_NAME ?? 'ggui',\n };\n }\n\n /**\n * Non-streaming chat completion.\n */\n async chatCompletion(\n params: Omit<OpenRouterChatRequest, 'stream'>,\n ): Promise<OpenRouterChatResponse> {\n const body: OpenRouterChatRequest = { ...params, stream: false };\n const response = await fetch(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorBody = await response.json().catch(() => ({ error: { message: response.statusText } }));\n const message = (errorBody as { error?: { message?: string } }).error?.message ?? response.statusText;\n throw new OpenRouterError(message, response.status, undefined, response.headers);\n }\n\n return response.json() as Promise<OpenRouterChatResponse>;\n }\n\n /**\n * Streaming chat completion via SSE.\n * Yields delta chunks, accumulates the final usage from the last chunk.\n */\n async *chatCompletionStream(\n params: Omit<OpenRouterChatRequest, 'stream'>,\n ): AsyncGenerator<OpenRouterStreamDelta> {\n const body: OpenRouterChatRequest = { ...params, stream: true };\n const response = await fetch(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorBody = await response.json().catch(() => ({ error: { message: response.statusText } }));\n const message = (errorBody as { error?: { message?: string } }).error?.message ?? response.statusText;\n throw new OpenRouterError(message, response.status, undefined, response.headers);\n }\n\n if (!response.body) {\n throw new OpenRouterError('No response body for streaming request', 500);\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(':')) continue;\n if (trimmed === 'data: [DONE]') return;\n if (!trimmed.startsWith('data: ')) continue;\n\n const json = trimmed.slice('data: '.length);\n try {\n yield JSON.parse(json) as OpenRouterStreamDelta;\n } catch {\n // Skip malformed chunks\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n}\n","// Evaluation type vocabulary shared between the harness runtime and its\n// check/evaluator surfaces. This is the narrow contract layer — the\n// type language every harness leg is written against:\n//\n// - `EvalIssue` — the single issue shape everything produces.\n// - `EvalTier` / `EvalOutcome` / `EvalCategory` — the issue's axes.\n// - `Priority` — P0/P1/P2 ranking referenced by the retry formatter.\n// - `EvalResult` — aggregate shape a runner returns.\n// - `QualityMode` / `QualityConfig` / `DEFAULT_QUALITY_CONFIG` —\n// the quality-mode knob the adapter surface consumes.\n// - `priorityForIssue` / `isBlocked` / `getActionableIssues` — the\n// purely-typed helpers over the vocabulary.\n//\n// `EvalIssue` is referenced by `PatchFn`, `TierCheck`, `LLMEvaluator`,\n// and `RuntimeRenderCheck` in the harness types hub.\n\n// ─── Priority ──────────────────────────────────────────────────────────────\n// P0 = must (compile + complete), P1 = should (safety), P2 = nice (quality).\n// Single source of truth for the retry-formatter ranking.\n\nexport type Priority = \"P0\" | \"P1\" | \"P2\";\n\n// ─── Issue shape ───────────────────────────────────────────────────────────\n\nexport type EvalTier = 0 | 1 | 2;\nexport type EvalOutcome = \"fail\" | \"warn\" | \"pass\";\n\nexport type EvalCategory =\n | \"compile\"\n | \"security\"\n | \"contract\"\n | \"types\"\n | \"imports\"\n | \"tokens\" // tier 0\n | \"mode\" // tier 0 — per-mode deterministic\n | \"functionality\"\n | \"crash\" // tier 1\n | \"interactivity\"\n | \"accessibility\"\n | \"layout\"\n | \"loading\"\n | \"visual\"; // tier 2\n\nexport interface EvalIssue {\n tier: EvalTier;\n result: EvalOutcome;\n category: EvalCategory;\n /**\n * Priority tier — threaded through to the retry formatter so the LLM can\n * rank its next patch against the prompt's P0/P1/P2 priority schema.\n * Derived from (category, result) via {@link priorityForIssue} when not\n * explicitly set. Optional on construction; check-runners typically\n * populate it before returning.\n */\n priority?: Priority;\n subcategory?: string;\n severity?: \"critical\" | \"major\";\n description: string;\n fix: string;\n line?: number;\n}\n\n/**\n * Runtime-render probe execution status — three-valued so \"the probe\n * never ran\" is never conflated with \"the probe ran clean\".\n *\n * - `ran` — probe executed; its findings (possibly none) are\n * in the issue stream under `runtime:*` subcategories.\n * - `infra-skipped` — probe could NOT execute (environment failure:\n * happy-dom load, user-event document capture,\n * ESM/CJS interop). Carries ZERO probe evidence;\n * consumers MUST NOT count it as a pass.\n * - `not-applicable`— nothing to probe (no compiled code, no contract\n * surface, or no runtimeRender check configured).\n */\nexport type RuntimeProbeStatus = \"ran\" | \"infra-skipped\" | \"not-applicable\";\n\n/**\n * Probe execution meta stamped onto an `EvalResult` at the exit-decision\n * points that invoke the probe. Absence of this field means the eval\n * path never reached a probe invocation at all — consumers treat that\n * the same as not-run, never as a pass.\n */\nexport interface RuntimeProbeMeta {\n readonly status: RuntimeProbeStatus;\n /** Populated for `infra-skipped` / `not-applicable` — why the probe didn't run. */\n readonly reason?: string;\n}\n\n/**\n * Per-criterion execution status — three-valued so \"the criterion\n * silently produced no verdict\" is never conflated with \"the criterion\n * ran clean\", and neither is conflated with \"not evaluated by design\".\n * Same doctrine and vocabulary family as `RuntimeProbeStatus` above.\n *\n * - `ran` — the LLM call completed and returned a verdict\n * for this criterion; its findings (possibly\n * none) are in `issues`.\n * - `skipped` — the call errored or returned no tool call. The\n * criterion carries ZERO evidence; the evaluator\n * fail-opens it into `pass` to avoid blocking\n * generation on flaky LLM calls, so consumers\n * MUST consult this field before treating `pass`\n * membership as a verdict. Counts AGAINST\n * coverage.\n * - `not-applicable` — the evaluator was bypassed by design for this\n * cell (e.g. the same-image low-risk bypass:\n * axis checks clean, tier-1/2 never invoked).\n * `reason` names the bypass. Excluded from\n * coverage denominators — it is neither evidence\n * nor a silent absence.\n */\nexport type CriterionRunStatus = \"ran\" | \"skipped\" | \"not-applicable\";\n\n/** Coverage row for one evaluation criterion of one eval run. */\nexport interface CriterionCoverage {\n readonly criterion: string;\n readonly tier: 1 | 2;\n readonly status: CriterionRunStatus;\n /** Populated for `skipped` / `not-applicable` — why no verdict. */\n readonly reason?: string;\n}\n\n/**\n * The static criteria `runLLMEvaluation` runs, in stamp order — the\n * ONE list both the evaluator's coverage stamp and the harness's\n * bypass stamp derive from, so the two can never disagree on the set.\n * Tier 1 = binary pass/fail gates; tier 2 = fail/warn/pass quality.\n */\nexport const LLM_EVAL_STATIC_CRITERIA: ReadonlyArray<{ readonly criterion: string; readonly tier: 1 | 2 }> = [\n { criterion: \"functionality\", tier: 1 },\n { criterion: \"crash\", tier: 1 },\n { criterion: \"interactivity\", tier: 2 },\n { criterion: \"accessibility\", tier: 2 },\n { criterion: \"layout\", tier: 2 },\n { criterion: \"loading\", tier: 2 },\n { criterion: \"visual\", tier: 2 },\n];\n\n/**\n * Coverage rows for a cell where the evaluator was BYPASSED BY DESIGN\n * (never invoked) — one `not-applicable` row per static criterion, all\n * carrying `reason`. Harness exits that skip tier-1/2 evaluation stamp\n * this so the cell is neither a silent absence (field missing) nor\n * evidence. Same shape contract as `runLLMEvaluation`'s stamp: always\n * every criterion. Lives here (not in llm-evaluator) because the bypass\n * exit runs before the evaluator module is lazily loaded.\n */\nexport function notApplicableCoverage(reason: string): CriterionCoverage[] {\n return LLM_EVAL_STATIC_CRITERIA.map(({ criterion, tier }) => ({\n criterion,\n tier,\n status: \"not-applicable\",\n reason,\n }));\n}\n\nexport interface EvalResult {\n issues: EvalIssue[];\n pass: string[];\n /**\n * Per-criterion coverage for this eval run — one row per static\n * criterion, ALWAYS all of them when present. Stamped by\n * `runLLMEvaluation` (`ran` / `skipped`) and by the harness on\n * evaluator-bypass exits (`not-applicable` + reason). The harness\n * carries it unchanged through every later re-stamp of this result.\n * Absent = coverage UNKNOWN (paths that predate the instrument, e.g.\n * `parseEvalResponse` replays) — never assume `ran`, never assume\n * bypass.\n */\n criteriaCoverage?: CriterionCoverage[];\n /**\n * Runtime-render probe execution meta. Stamped by the exit-decision\n * probe runner; absent on eval paths that never invoke the probe.\n */\n runtimeProbe?: RuntimeProbeMeta;\n}\n\n// ─── Quality mode ──────────────────────────────────────────────────────────\n\nexport type QualityMode = \"fast\" | \"auto-improve\" | \"high-quality\";\n\nexport interface QualityConfig {\n quality: QualityMode;\n visualEval: boolean;\n maxCostPerGeneration: number;\n model?: { provider?: string; model?: string };\n}\n\nexport const DEFAULT_QUALITY_CONFIG: QualityConfig = {\n quality: \"fast\",\n visualEval: false,\n maxCostPerGeneration: 3,\n};\n\n// ─── Axis-check types ──────────────────────────────────────────────────────\n// The `AxisCheck` type vocabulary lives here. The check bodies\n// themselves (REGISTRY, per-axis implementations) live under\n// `./axis-checks/`.\n\nimport type { DataContract } from \"@ggui-ai/protocol\";\nimport type { AxisVector, Classification } from \"../classifier/axes.js\";\nimport type { AxisKey } from \"../fragments/index.js\";\n\nexport interface AxisCheckInput {\n sourceCode: string;\n compiledCode: string | null;\n contract?: DataContract;\n originalPrompt: string;\n /** Full classification — checks may read sibling axes. */\n classification: Classification;\n}\n\n/**\n * A gated check. Runs only when the classification's axis value matches\n * one of the gate's accepted values. Multiple gates (implicit AND) support\n * cross-axis combinations.\n */\nexport interface AxisCheck {\n /** Stable id used in issue subcategories. */\n id: string;\n /** Primary axis this check gates on. */\n axis: AxisKey;\n /** Which values of that axis activate the check. */\n values: readonly string[];\n /** Optional extra gate on a sibling axis (e.g., only when state=merge AND writes=per-item). */\n and?: { axis: AxisKey; values: readonly string[] };\n /** Execute the check and emit zero or more issues. */\n run(input: AxisCheckInput): EvalIssue[];\n}\n\n/**\n * Whether a check's gate(s) match the given axis vector. Pure function,\n * no issue emission.\n */\nexport function matches(vector: AxisVector, check: AxisCheck): boolean {\n const primary = vector[check.axis] as string;\n if (!check.values.includes(primary)) return false;\n if (check.and) {\n const sibling = vector[check.and.axis] as string;\n if (!check.and.values.includes(sibling)) return false;\n }\n return true;\n}\n\n// ─── Purely-typed helpers ──────────────────────────────────────────────────\n\n/**\n * Map a tier-0 issue category to the canonical P0/P1/P2 priority.\n *\n * Sourced from the criteria priority assignments:\n * - P0 (must): compile, security, imports, contract, types, mode\n * - P1 (safety): tokens, crash, functionality\n * - P2 (quality): interactivity, accessibility, layout, loading, visual\n */\nexport function priorityForIssue(category: EvalCategory): Priority {\n if (\n category === \"interactivity\" ||\n category === \"accessibility\" ||\n category === \"layout\" ||\n category === \"loading\" ||\n category === \"visual\"\n ) {\n return \"P2\";\n }\n if (category === \"tokens\" || category === \"crash\" || category === \"functionality\") {\n return \"P1\";\n }\n // compile, security, imports, contract, types, mode → P0.\n return \"P0\";\n}\n\n/** Whether any issue blocks shipping (has result = 'fail'). */\nexport function isBlocked(result: EvalResult): boolean {\n return result.issues.some((i) => i.result === \"fail\");\n}\n\n/**\n * Return the issues the agent should act on, depending on quality mode.\n * - fast: only fails (blocking issues)\n * - auto-improve / high-quality: fails + warns\n */\nexport function getActionableIssues(result: EvalResult, mode: QualityMode): EvalIssue[] {\n if (mode === \"fast\") {\n return result.issues.filter((i) => i.result === \"fail\");\n }\n return result.issues.filter((i) => i.result === \"fail\" || i.result === \"warn\");\n}\n\n// ─── Criteria (single source of truth for coding + eval sides) ─────────────\n//\n// Each criterion is defined ONCE with both sides of the contract:\n// - codingGuidance: what the coding agent should DO\n// - evalInstruction: what the eval agent should CHECK\n// They must be compatible — changing one means reviewing the other.\n//\n// This is *validated* shipping content: it's what the hosted runtime sends\n// to every generation today. External OSS implementers building their own\n// prompts should be able to use the same rubric — hence it's open.\n\nexport interface EvalCriterion {\n /** Unique identifier matching the eval tool name (e.g., 'functionality') */\n id: string;\n /** Human-readable name shown to both agents */\n name: string;\n /** Priority tier — P0 must, P1 should, P2 nice */\n priority: Priority;\n /** What the coding agent should DO to satisfy this criterion */\n codingGuidance: string;\n /** What the eval agent should CHECK — the evaluation prompt */\n evalInstruction: string;\n /** Tier 0 = programmatic, Tier 1 = LLM critical, Tier 2 = LLM quality */\n tier: 0 | 1 | 2;\n /** Eval outcome when this criterion fails */\n failOutcome: \"fail\" | \"warn\";\n}\n\nexport const CRITERIA: readonly EvalCriterion[] = [\n // ── P0: Correctness (must satisfy — failure = broken component) ──\n\n {\n id: \"compile\",\n name: \"Compile & type-check\",\n priority: \"P0\",\n tier: 0,\n failOutcome: \"fail\",\n codingGuidance:\n \"Code must compile. The typed Props and wire hook generics are enforced by the compiler.\",\n evalInstruction: \"Checked automatically by esbuild + TypeScript. No LLM evaluation needed.\",\n },\n {\n id: \"render-props\",\n name: \"Render all Props fields\",\n priority: \"P0\",\n tier: 0,\n failOutcome: \"warn\",\n codingGuidance: \"Render every Props field in JSX. Access via props.fieldName.\",\n evalInstruction:\n \"Check that every field from interface Props appears as props.fieldName in the function body.\",\n },\n {\n id: \"wire-hooks\",\n name: \"Wire all contract hooks\",\n priority: \"P0\",\n tier: 0,\n failOutcome: \"warn\",\n codingGuidance:\n \"Wire every useAction/useStream and every clientCapabilities.gadgets hook (e.g., useGeolocation) to a UI element. `agentCapabilities.tools` is a catalog the AGENT invokes — NOT a component hook surface.\",\n evalInstruction:\n \"Check that every hook variable from the boilerplate appears in the JSX or an effect.\",\n },\n {\n id: \"imports\",\n name: \"Valid imports only\",\n priority: \"P0\",\n tier: 0,\n failOutcome: \"fail\",\n codingGuidance: \"Only import from react, @ggui-ai/design/*, and @ggui-ai/wire.\",\n evalInstruction: \"Flag any import from a package not in the allowlist.\",\n },\n {\n id: \"security\",\n name: \"No eval/fetch/window\",\n priority: \"P0\",\n tier: 0,\n failOutcome: \"fail\",\n codingGuidance: \"Never use eval(), fetch(), or window. Data comes from props and hooks.\",\n evalInstruction: \"Flag any call to eval(), fetch(), or window access.\",\n },\n\n // ── P1: Safety (should satisfy — failure = crash or bad UX) ──\n\n {\n id: \"functionality\",\n name: \"All features implemented\",\n priority: \"P1\",\n tier: 1,\n failOutcome: \"fail\",\n codingGuidance: \"Implement ALL features from the request AND the data contract.\",\n evalInstruction: `Evaluate FUNCTIONALITY: Does this component implement ALL features from the request AND the data contract?\n\nCheck against BOTH sources:\n1. Original request — each feature must be coded AND rendered in JSX\n2. Data contract (if present) — verify:\n - Props fields are rendered in the UI. EXCEPTION: pure identifier fields (\\`id\\`, \\`*Id\\`, keys) that exist only to be echoed back inside an action payload do NOT need to be visibly rendered.\n - ALL useAction hooks are wired to clickable UI elements\n - ALL useStream hooks are consumed — the streamed data must reach the UI. Merging stream events into rendered state (a list, a counter, the displayed records) COUNTS as consuming the stream; it need not be a literal \\`.latest\\` render.\n - ALL clientCapabilities gadgets are used. \\`clientCapabilities.gadgets\\` is keyed by npm package: built-in browser capabilities (useGeolocation / useCamera / …) import from @ggui-ai/gadgets; registered third-party gadgets (e.g. useChartTheme) import from their OWN package. Any gadget the contract declares IS a contract feature — NEVER flag it as \"not part of the contract\".\n - \\`agentCapabilities.tools\\` is a catalog declaration only; do NOT flag missing component-side calls for it\n\nA contract hook that is declared but never used at all is a MISSING feature.\n\nCRITICAL: The \"issues\" array must ONLY contain features you are CERTAIN are missing or broken — never an implemented feature. (See \"Issue-array discipline\" above: no speculative, self-negating, or \"verify that…\" entries.)`,\n },\n {\n id: \"crash\",\n name: \"No crash scenarios\",\n priority: \"P1\",\n tier: 1,\n failOutcome: \"fail\",\n codingGuidance:\n \"Guard optional props (props.field?.x). stream.latest is T|null — always null-guard. .all is always an array.\",\n evalInstruction: `Evaluate CRASH SAFETY: Are there ACTUAL runtime crash scenarios?\n\nWILL crash (include in issues):\n- .map()/.filter()/.length on an uninitialized variable\n- Accessing property of undefined without guard\n- useStream().latest.field WITHOUT null guard — .latest is T | null\n- Optional Props field accessed as props.field.x without guard\n- Array item optional field: items.map(item => item.priority.toUpperCase()) when priority is optional\n\nSAFE (do NOT include):\n- Optional chaining: props.items?.map() — SAFE\n- Fallback: items || [] — SAFE\n- useState initializer: useState([]) — SAFE\n- Null check: items && items.map() — SAFE\n- stream.latest && stream.latest.field — SAFE, guarded\n- stream.all.map(...) — SAFE, .all is always an array\n- stream.all.length — SAFE, always a number\n\nThe \"issues\" array is ONLY for a specific line that WILL throw at runtime. NEVER put a line you have determined is safe into the issues array — not even to note that it is safe (\"…so this is safely guarded\", \"…so there is no crash\"). If you cannot name a concrete line that will throw, the answer is {\"pass\": true} — return that and an empty issues array.`,\n },\n {\n id: \"tokens\",\n name: \"Design system tokens\",\n priority: \"P1\",\n tier: 0,\n failOutcome: \"warn\",\n codingGuidance:\n \"Use CSS variables for colors (var(--ggui-color-*)); use the spacing scale for gap/padding/margin (gap=\\\"md\\\", padding=\\\"lg\\\").\",\n evalInstruction:\n \"Flag hardcoded hex colors, rgba/hsl functions, and numeric or raw-CSS-length spacing props. A t-shirt-scale spacing name (gap=\\\"md\\\") IS a token — never flag it.\",\n },\n\n // ── P2: Quality (nice to have — failure = lower score, not broken) ──\n\n {\n id: \"interactivity\",\n name: \"Sufficient interactive elements\",\n priority: \"P2\",\n tier: 2,\n failOutcome: \"warn\",\n codingGuidance: \"Add appropriate interactive elements for the component purpose.\",\n evalInstruction: `Evaluate INTERACTIVITY: Does this component have sufficient interactive elements?\n\nConsider: forms need submit buttons, lists need selection, editable content needs save/cancel.\nContract actions (if present): every useAction hook should be triggered by a visible UI element.\n\nOnly list MISSING interactive elements. Use 'fail' only for issues blocking core purpose.`,\n },\n {\n id: \"accessibility\",\n name: \"Accessible markup\",\n priority: \"P2\",\n tier: 2,\n failOutcome: \"warn\",\n codingGuidance:\n \"Add labels on form inputs, alt text on images, semantic HTML, and state ARIA (aria-checked/pressed/selected/expanded) on hand-rolled interactive controls.\",\n evalInstruction: `Evaluate ACCESSIBILITY: missing labels, alt text, semantic HTML, keyboard support, ARIA state.\n\nggui primitives bake in their own ARIA — see \"Primitive Accessibility\" in the Design System context above. NEVER flag a ggui primitive (Input/Select/TextArea, RadioGroup, Checkbox, Toggle, Progress, Slider, Spinner, Skeleton, Tabs, Accordion, Alert, Toast, Tooltip, Clickable, Icon) for a missing role / aria-* / label / keyboard handler — it is already there and not visible in the source you are reading.\n\nFlag ONLY real gaps: a raw div/span used as an interactive control; a hand-rolled control whose checked/selected/expanded/pressed state is conveyed only by styling (strikethrough, color, a check icon) with no \\`aria-checked\\` / \\`aria-pressed\\` / \\`aria-selected\\` / \\`aria-expanded\\`; an image with no alt text; an Input/Select/TextArea with no \\`label\\` prop; an icon-only Button with no aria-label; live/streaming data not wrapped in an aria-live region; inverted heading hierarchy.\n\nOnly list MISSING accessibility features. Use 'fail' only if it blocks delivery.`,\n },\n {\n id: \"layout\",\n name: \"Clean layout\",\n priority: \"P2\",\n tier: 2,\n failOutcome: \"warn\",\n codingGuidance: \"Use proper spacing and visual grouping.\",\n evalInstruction: `Evaluate LAYOUT: Check spacing, alignment, visual grouping, and composition.\n\nOnly list ACTUAL layout problems. Use 'fail' only for fundamentally broken layouts.`,\n },\n {\n id: \"loading\",\n name: \"Loading/empty/error states\",\n priority: \"P2\",\n tier: 2,\n failOutcome: \"warn\",\n codingGuidance: \"Handle async data, empty collections, and error cases.\",\n evalInstruction: `Evaluate LOADING/EMPTY/ERROR STATES: Does the component handle async data and edge cases?\n\nContract-specific: useStream should handle pre-data state. clientCapabilities hooks may return undefined / permission-denied — defensive guards expected before threading values into JSX.\nProps-only components (no async, no streams, no client capabilities) do NOT need loading states — return pass.\n\nOnly list MISSING states.`,\n },\n {\n id: \"visual\",\n name: \"Design system consistency\",\n priority: \"P2\",\n tier: 2,\n failOutcome: \"warn\",\n codingGuidance: \"Use design system tokens consistently.\",\n evalInstruction: `Evaluate VISUAL CONSISTENCY: Is the component using the design system correctly?\n\nFlag: hardcoded colors instead of CSS variables, numeric or raw-CSS-length spacing instead of the t-shirt scale, style objects bypassing design system.\nA t-shirt-scale spacing name (gap=\"md\", padding=\"lg\") IS correct token usage — never flag it.\nIntentional custom colors (status indicators) are acceptable when no semantic token fits.\n\nOnly list ACTUAL violations. Use 'fail' only for pervasive violations.`,\n },\n] as const;\n\n/** Get all criteria for a specific priority level */\nexport function getCriteriaByPriority(priority: Priority): EvalCriterion[] {\n return CRITERIA.filter((c) => c.priority === priority);\n}\n\n/** Get a specific criterion by ID */\nexport function getCriterionById(id: string): EvalCriterion | undefined {\n return CRITERIA.find((c) => c.id === id);\n}\n\n/** Get all LLM-evaluated criteria (tier 1 + 2) */\nexport function getLLMCriteria(): EvalCriterion[] {\n return CRITERIA.filter((c) => c.tier > 0);\n}\n\n/**\n * Build the coding agent's criteria summary from the single source of truth.\n * Grouped by priority for the P0→P1→P2 hierarchy.\n */\nexport function buildCodingCriteriaSummary(): string {\n const lines: string[] = [\"## Priority (P0 first, then P1, then P2)\", \"\"];\n\n for (const priority of [\"P0\", \"P1\", \"P2\"] as Priority[]) {\n const label =\n priority === \"P0\"\n ? \"Must (compile + complete)\"\n : priority === \"P1\"\n ? \"Should (safety)\"\n : \"Nice (quality)\";\n const criteria = getCriteriaByPriority(priority);\n lines.push(`**${priority} — ${label}:**`);\n for (const c of criteria) {\n lines.push(`- ${c.codingGuidance}`);\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n","// packages/ui-gen/src/adapters/claude/client.ts\n//\n// SINGLE SOURCE OF TRUTH for Anthropic SDK construction.\n//\n// The BYOK resolver writes the raw credential string into\n// `process.env.ANTHROPIC_API_KEY`, which the Anthropic SDK auto-reads as\n// `x-api-key`. Adapters MUST go through `createAnthropicClient` (no\n// inline `new Anthropic(...)`) so future header / baseURL tweaks land\n// in one place.\n\nimport Anthropic from '@anthropic-ai/sdk';\n\n/**\n * Construct an Anthropic SDK client from a raw API key string.\n *\n * - `string` → standard `apiKey` path (sends `x-api-key`).\n * - `undefined` → still construct a client; SDK auto-reads\n * `process.env.ANTHROPIC_API_KEY` or throws on first call.\n *\n * **SINGLE SOURCE OF TRUTH for Anthropic client construction.** Every\n * adapter that constructs an Anthropic client MUST go through this\n * helper — no inline `new Anthropic(...)` allowed in adapter code.\n */\nexport function createAnthropicClient(\n rawKey: string | undefined,\n): Anthropic {\n if (rawKey === undefined) {\n return new Anthropic({\n baseURL: 'https://api.anthropic.com',\n });\n }\n return new Anthropic({\n apiKey: rawKey,\n baseURL: 'https://api.anthropic.com',\n });\n}\n","// packages/ui-gen/src/adapters/provider-router.ts\n//\n// Provider router for multi-provider BYOK support. Determines how to\n// route LLM requests based on the typed `LlmRoute` discriminator and\n// API-key availability.\n//\n// The previous `getUpstreamModelId` strip + `UPSTREAM_MAP` are gone:\n// the typed `LlmRoute` (slice #43) guarantees `route.model` is\n// wire-canonical at construction time, so there is no LiteLLM prefix\n// to strip at this boundary. `getBedrockModelId` stays — the\n// \"anthropic route + bedrock IAM\" mixed-mode escape hatch (cloud-pod\n// legacy) still needs the wire-canonical anthropic id → cross-region\n// profile id upcast.\n\nimport type { LlmRoute } from '@ggui-ai/protocol';\n\n/**\n * Map a wire-canonical Anthropic model id (or already-bedrock id) to\n * the AWS Bedrock cross-region inference profile id. Used by the\n * mixed-mode `anthropic` route + bedrock-IAM fallback path in\n * {@link resolveRoute} (cloud-pod legacy) and the analogous branch in\n * `harness/llm-router.ts::AnthropicAgent.resolveModel`.\n *\n * Operators picking the bedrock route explicitly (slice #43 Phase 4)\n * pass the cross-region id directly — this helper is purely the\n * fallback escape hatch.\n */\nexport function getBedrockModelId(model: string): string {\n const BEDROCK_MAP: Record<string, string> = {\n 'anthropic/claude-haiku-4-5': 'us.anthropic.claude-haiku-4-5-20251001-v1:0',\n 'anthropic/claude-sonnet-4-6': 'us.anthropic.claude-sonnet-4-6',\n 'anthropic/claude-opus-4-6': 'us.anthropic.claude-opus-4-6-v1:0',\n // Claude 5-family (ggui#706, strings verified 2026-09-02 against\n // platform.claude.com; Bedrock base form `anthropic.<id>`, upcast to\n // the cross-region profile). Explicit so the ids are pinned by test,\n // not merely reachable through the generic fallback below.\n 'anthropic/claude-fable-5-1': 'us.anthropic.claude-fable-5-1',\n 'anthropic/claude-opus-5': 'us.anthropic.claude-opus-5',\n 'anthropic/claude-sonnet-5': 'us.anthropic.claude-sonnet-5',\n // Legacy (still available; registry state `legacy`, not deprecated).\n 'anthropic/claude-fable-5': 'us.anthropic.claude-fable-5',\n };\n // Normalize the Bedrock dot-form opt-in (e.g. `anthropic.claude-haiku-4-5`,\n // produced when cloud-pod's `resolvePoolRoute` strips a `bedrock/` opt-in\n // prefix) to the Anthropic slash form. Both spellings should resolve to\n // the same cross-region inference profile id — without this, the dot\n // form would skip the BEDROCK_MAP hit, fall through the `^anthropic\\/`\n // strip (which is a no-op for the dot form), and re-prepend\n // `us.anthropic.` to produce a double-`anthropic.` id that Bedrock\n // rejects with 400 (cloud e2e regression 2026-05-25, bedrock-iam.spec).\n const normalized = model.replace(/^anthropic\\./, 'anthropic/');\n if (BEDROCK_MAP[normalized]) return BEDROCK_MAP[normalized];\n if (normalized.startsWith('us.anthropic.') || normalized.startsWith('arn:')) {\n return normalized;\n }\n const stripped = normalized.replace(/^anthropic\\//, '');\n return `us.anthropic.${stripped}`;\n}\n\nexport interface RoutingDecision {\n /**\n * Upstream model id the dispatch adapter will pass to the provider\n * SDK. For most routes this is `route.model` verbatim — the typed\n * `LlmRoute` (slice #43) carries the wire-canonical id, so no\n * transformation is needed. The exception is the mixed-mode\n * \"anthropic route + bedrock IAM fallback\" branch, which upcasts\n * the wire-canonical Anthropic id to the corresponding Bedrock\n * cross-region inference profile id via {@link getBedrockModelId}.\n */\n readonly model: string;\n /**\n * Env-var mutations the caller MUST apply to `process.env` before\n * invoking the dispatch adapter. `undefined` values are deletions\n * (the wrong provider's stale key must be cleared so the dispatch\n * doesn't accidentally fire against it). See {@link applyRouteToEnv}.\n */\n readonly env: Record<string, string | undefined>;\n}\n\nexport interface RoutingInput {\n /** Typed `(provider, model)` route — model is wire-canonical. */\n readonly route: LlmRoute;\n /** API key for byok-capable providers; ignored for `bedrock`. */\n readonly apiKey?: string;\n /** Current env snapshot — feeds the anthropic mixed-mode branch. */\n readonly env: Record<string, string | undefined>;\n}\n\n/**\n * Sibling-provider env vars that MUST be cleared for every non-self\n * route. Centralized so the per-provider branches below stay\n * symmetric — a single missing entry would let a stale key leak into\n * the next render (e.g. an OpenRouter route inheriting a previous\n * call's `OPENAI_API_KEY` and firing the wrong adapter).\n */\nconst SIBLING_ENV_KEYS = [\n 'ANTHROPIC_API_KEY',\n 'ANTHROPIC_BASE_URL',\n 'CLAUDE_CODE_USE_BEDROCK',\n 'OPENAI_API_KEY',\n 'GEMINI_API_KEY',\n 'GOOGLE_API_KEY',\n 'OPENROUTER_API_KEY',\n] as const;\n\nfunction clearSiblings(\n keep: ReadonlySet<(typeof SIBLING_ENV_KEYS)[number]>,\n): Record<string, undefined> {\n const out: Record<string, undefined> = {};\n for (const k of SIBLING_ENV_KEYS) {\n if (!keep.has(k)) out[k] = undefined;\n }\n return out;\n}\n\n/**\n * Determine the routing strategy for a generation request. Pure\n * function over `(route, apiKey, env)` — returns the upstream model\n * id (usually `route.model` verbatim) and the env-var mutations the\n * caller must apply before dispatch.\n *\n * Dispatch is on `route.provider`:\n *\n * - `openai` — direct OpenAI API (sets `OPENAI_API_KEY`).\n * - `google` — direct Gemini API (sets `GEMINI_API_KEY` + `GOOGLE_API_KEY`).\n * - `openrouter` — direct OpenRouter API (sets `OPENROUTER_API_KEY`).\n * - `bedrock` — AWS Bedrock via host IAM (sets `CLAUDE_CODE_USE_BEDROCK=1`,\n * no API key in flight; model passes verbatim).\n * - `anthropic` — three-way fallback chain:\n * 1. With `apiKey` → direct Anthropic API.\n * 2. Without `apiKey` AND explicit `env.CLAUDE_CODE_USE_BEDROCK === '1'`\n * (or no `env.ANTHROPIC_API_KEY`) → mixed-mode bedrock fallback\n * (model upcast to cross-region profile via `getBedrockModelId`).\n * Cloud-pod legacy escape hatch; the OSS Phase 4 strict-fail\n * prevents end-users from reaching this branch implicitly.\n * 3. Otherwise → direct Anthropic API with whatever\n * `ANTHROPIC_API_KEY` is already in `env`.\n *\n * For non-Anthropic non-Bedrock providers, an `apiKey` is REQUIRED —\n * there's no IAM-style fallback. Callers that don't have a key MUST\n * surface a \"no API key\" envelope to their agent before reaching the\n * dispatch path; throwing here is defense in depth.\n */\nexport function resolveRoute(input: RoutingInput): RoutingDecision {\n const { route, apiKey, env } = input;\n\n switch (route.provider) {\n case 'openai': {\n if (!apiKey) {\n throw new Error(\n `openai:${route.model} requires an API key. ` +\n `Set 'apiKey' on the RoutingInput (BYOK) or supply your key ` +\n `via your dispatch layer.`,\n );\n }\n return {\n model: route.model,\n env: {\n OPENAI_API_KEY: apiKey,\n ...clearSiblings(new Set(['OPENAI_API_KEY'])),\n },\n };\n }\n\n case 'google': {\n if (!apiKey) {\n throw new Error(\n `google:${route.model} requires an API key. ` +\n `Set 'apiKey' on the RoutingInput (BYOK) or supply your key ` +\n `via your dispatch layer.`,\n );\n }\n return {\n model: route.model,\n env: {\n // `harness/llm-router.ts`'s GoogleAgent reads `GEMINI_API_KEY\n // || GOOGLE_API_KEY`. Set both so either slot wins;\n // unsetting one would leave a stale value behind.\n GEMINI_API_KEY: apiKey,\n GOOGLE_API_KEY: apiKey,\n ...clearSiblings(new Set(['GEMINI_API_KEY', 'GOOGLE_API_KEY'])),\n },\n };\n }\n\n case 'openrouter': {\n if (!apiKey) {\n throw new Error(\n `openrouter:${route.model} requires an API key. ` +\n `Set 'apiKey' on the RoutingInput (BYOK) or supply your key ` +\n `via your dispatch layer.`,\n );\n }\n return {\n model: route.model,\n env: {\n OPENROUTER_API_KEY: apiKey,\n ...clearSiblings(new Set(['OPENROUTER_API_KEY'])),\n },\n };\n }\n\n case 'bedrock': {\n // IAM auth — no apiKey in flight. The model is already a\n // cross-region profile id (e.g.\n // `us.anthropic.claude-haiku-4-5-20251001-v1:0`); pass it\n // verbatim.\n return {\n model: route.model,\n env: {\n CLAUDE_CODE_USE_BEDROCK: '1',\n ...clearSiblings(new Set(['CLAUDE_CODE_USE_BEDROCK'])),\n },\n };\n }\n\n case 'anthropic': {\n if (apiKey) {\n return {\n model: route.model,\n env: {\n ANTHROPIC_API_KEY: apiKey,\n ...clearSiblings(new Set(['ANTHROPIC_API_KEY'])),\n },\n };\n }\n // Mixed-mode legacy: anthropic route + bedrock IAM fallback.\n // Cloud-pod escape hatch when `ANTHROPIC_API_KEY` isn't seeded.\n const explicitBedrock = env.CLAUDE_CODE_USE_BEDROCK === '1';\n const noApiKey = !env.ANTHROPIC_API_KEY;\n if (explicitBedrock || noApiKey) {\n return {\n model: getBedrockModelId(route.model),\n env: {\n CLAUDE_CODE_USE_BEDROCK: '1',\n ...clearSiblings(new Set(['CLAUDE_CODE_USE_BEDROCK'])),\n },\n };\n }\n // Anthropic via process.env.ANTHROPIC_API_KEY (no in-call key).\n return {\n model: route.model,\n env: clearSiblings(new Set(['ANTHROPIC_API_KEY'])),\n };\n }\n }\n}\n\n/**\n * Apply routing decision to an environment object.\n */\nexport function applyRouteToEnv(\n baseEnv: Record<string, string>,\n route: RoutingDecision,\n): Record<string, string> {\n const result = { ...baseEnv };\n for (const [key, value] of Object.entries(route.env)) {\n if (value === undefined) {\n delete result[key];\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n","// packages/ui-gen/src/adapters/tool-bridge.ts\n//\n// Bridges between SDK tool wire formats and ggui's JSON types:\n// Zod → JSON Schema for tool declarations, and validated narrowing of\n// decoded tool-call arguments to `JsonObject`.\n\nimport { z } from 'zod';\nimport type { JsonObject, JsonValue } from '@ggui-ai/protocol';\n\n/**\n * Convert a Zod object schema to JSON Schema.\n * Uses Zod v4's built-in toJSONSchema() function.\n */\nexport function zodToJsonSchema(schema: z.ZodType): JsonObject {\n return z.toJSONSchema(schema) as JsonObject;\n}\n\n/**\n * Validate that a decoded tool-call `arguments` object is plain JSON data\n * and narrow it to {@link JsonObject}. Provider SDKs type tool-call\n * arguments as `{ [key: string]: unknown }`; values decoded from a JSON\n * wire payload are JSON by construction, so a failure here means the SDK\n * handed us something that never came from JSON — a bug worth surfacing,\n * not erasing with a cast.\n */\nexport function toolArgsToJsonObject(args: { [key: string]: unknown }): JsonObject {\n const out: JsonObject = {};\n for (const [key, value] of Object.entries(args)) {\n // `JsonObject` keys admit `undefined` (TS optional properties);\n // JSON.stringify omits them, so pass-through is JSON-safe.\n out[key] = value === undefined ? undefined : toJsonValue(value, key);\n }\n return out;\n}\n\nfunction toJsonValue(value: unknown, path: string): JsonValue {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((item, i) => toJsonValue(item, `${path}[${i}]`));\n }\n if (typeof value === 'object') {\n const out: JsonObject = {};\n for (const [key, entry] of Object.entries(value)) {\n out[key] = entry === undefined ? undefined : toJsonValue(entry, `${path}.${key}`);\n }\n return out;\n }\n throw new Error(\n `Tool-call arguments contain a non-JSON value at '${path}' (${typeof value})`,\n );\n}\n","/**\n * Live LLM trace sink — devtools introspection of every LLM call the\n * generation harness makes.\n *\n * **Distinct from {@link TelemetrySink} and {@link AuditSink}.**\n * - **Telemetry** (mcp-server-core) = ops signals (`pair.completed`,\n * `render.duration_ms`). Sink may be lossy and drops on backpressure.\n * Attributes are flat scalars (`string | number | boolean`).\n * - **Audit** (mcp-server-core) = compliance log of privileged\n * mutations. Durable, async, may throw.\n * - **LLM trace** (this) = devtools-only, hostable in-memory ring\n * buffer of every LLM call's full payload (system prompt, user\n * prompt, tool defs, completion, token counts, cache hits, error).\n * Lossy by default. A hosted closed runtime may swap in a durable\n * sink for internal debugging; OSS ships an in-memory sink the\n * `/devtools/llm-trace` page reads.\n *\n * **Why module-level registry instead of constructor injection.** The\n * harness constructs LLM agents on every generation via\n * {@link createAgent}. Threading a sink through every call site\n * (createAgent → run-coding-turn → llm-evaluator → file-agent → …)\n * touches ~5 packages for a devtools-only surface. The OSS ggui server\n * is a single process per CLI invocation — global state has no\n * confusion-cost there. A hosted closed runtime isolates per request\n * via process-pool, so a global per-pool is also safe. If we ever\n * multi-tenant inside one process we'll thread it then.\n *\n * **Default = no sink.** When unset, the router emits nothing and\n * spends no CPU formatting events. Passing `null` removes a previously\n * registered sink.\n */\nimport type { LLMToolDef } from '../llm.js';\n\n/** Provider tag that produced the call. Mirrors {@link AgentConfig.provider}. */\nexport type LlmTraceProvider = 'anthropic' | 'openai' | 'google' | 'openrouter';\n\n/** Which `LLMAgent` method initiated the call. */\nexport type LlmTraceKind =\n | 'callText'\n | 'callTools'\n | 'callWithTools'\n | 'callStructured'\n | 'callVision';\n\n/**\n * One LLM call. Emitted **after** the call completes (success or error)\n * — single event, not start/end split. Devtools UI is timeline-friendly\n * because each event carries `at` (start) + `endedAt` (end).\n */\nexport interface LlmTraceEvent {\n /** Random per-event ID. */\n readonly id: string;\n /** Epoch ms when the call was issued. */\n readonly at: number;\n /** Epoch ms when the call completed (success or error). */\n readonly endedAt: number;\n /** `endedAt - at` — convenience. */\n readonly durationMs: number;\n readonly provider: LlmTraceProvider;\n readonly model: string;\n readonly kind: LlmTraceKind;\n readonly systemPrompt?: string;\n readonly userPrompt?: string;\n /**\n * Tool defs sent on the call (if any). Stripped to `name + description`\n * — full JSON schema would balloon the trace and is rarely useful in\n * the operator UI.\n */\n readonly tools?: ReadonlyArray<{\n readonly name: string;\n readonly description: string;\n }>;\n /** Set on successful completion. */\n readonly result?: {\n readonly inputTokens: number;\n readonly outputTokens: number;\n /** Anthropic only. Bytes counted toward the cache write. */\n readonly cacheCreated?: number;\n /** Anthropic only. Bytes served from cache (90% discounted). */\n readonly cacheRead?: number;\n /** Set when the call returned text content. */\n readonly text?: string;\n /** Set when the call returned tool_use blocks. */\n readonly toolCalls?: ReadonlyArray<{\n readonly name: string;\n readonly input: unknown;\n }>;\n /** Set for `callWithTools` — number of agentic turns consumed. */\n readonly turnsUsed?: number;\n };\n /** Set on failure. `result` is undefined. */\n readonly error?: { readonly message: string };\n}\n\n/**\n * Sink that receives one event per LLM call. Implementations MUST be\n * sync + non-throwing — the harness fires events on the hot path and\n * cannot tolerate backpressure or rejected promises. Buffer + drop or\n * fan out to a queue inside the implementation.\n */\nexport interface LlmTraceSink {\n emit(event: LlmTraceEvent): void;\n}\n\nlet activeSink: LlmTraceSink | null = null;\n\n/**\n * Register the active sink. Pass `null` to remove. Subsequent\n * {@link emitLlmTraceEvent} calls dispatch to this sink.\n */\nexport function setLlmTraceSink(sink: LlmTraceSink | null): void {\n activeSink = sink;\n}\n\n/** Read the active sink. Mostly for tests. */\nexport function getLlmTraceSink(): LlmTraceSink | null {\n return activeSink;\n}\n\n/**\n * Internal — used by `LLMAgent` adapters. No-op when no sink is\n * registered. Swallows sink-thrown errors (a broken devtools sink must\n * not break generation).\n */\nexport function emitLlmTraceEvent(event: LlmTraceEvent): void {\n const sink = activeSink;\n if (!sink) return;\n try {\n sink.emit(event);\n } catch {\n // Devtools sink is allowed to be buggy — generation must not die.\n }\n}\n\n/** Strip `LLMToolDef[]` to the trace-friendly subset. */\nexport function summarizeTools(\n tools: ReadonlyArray<LLMToolDef>,\n): ReadonlyArray<{ readonly name: string; readonly description: string }> {\n return tools.map((t) => ({ name: t.name, description: t.description }));\n}\n\n/**\n * Crockford-style random ID. Crypto.randomUUID() would do, but we want\n * to keep this dep-free for non-Node runtimes the harness might run in.\n */\nexport function newLlmTraceId(): string {\n return (\n Date.now().toString(36) +\n Math.random().toString(36).slice(2, 10)\n );\n}\n","// packages/ui-gen/src/harness/llm-router.ts\n//\n// Provider-agnostic LLM routing via LLMAgent class hierarchy.\n// Each provider implements its own SDK interface with proper types.\n//\n// Key methods:\n// callText() — plain text response\n// callStructured() — JSON structured output (for coding agent)\n// callWithTools() — multi-turn agentic loop\n\nimport type Anthropic from '@anthropic-ai/sdk';\nimport type {\n ImageBlockParam,\n TextBlock,\n TextBlockParam,\n ToolUseBlock,\n} from '@anthropic-ai/sdk/resources/messages';\nimport type OpenAI from 'openai';\nimport type {\n Response as OpenAIResponse,\n ResponseFunctionToolCall,\n} from 'openai/resources/responses/responses';\nimport type {\n GoogleGenAI,\n Interactions,\n} from '@google/genai';\nimport type { JsonObject } from '@ggui-ai/protocol';\nimport type { LLMToolDef } from '../llm.js';\nimport type { AnthropicBedrock } from '@anthropic-ai/bedrock-sdk';\nimport { createAnthropicClient } from '../adapters/claude/client.js';\nimport { getBedrockModelId } from '../adapters/provider-router.js';\nimport { toolArgsToJsonObject } from '../adapters/tool-bridge.js';\nimport {\n emitLlmTraceEvent,\n newLlmTraceId,\n summarizeTools,\n} from './llm-trace-sink.js';\n\n// `LLMToolDef` lives in `@ggui-ai/ui-gen/llm`. This file re-exports it\n// so `../harness/llm-router.js` importers (evaluator.ts,\n// llm-evaluator.ts, run-coding-turn.ts) can reach it here.\nexport type { LLMToolDef };\n\n// =============================================================================\n// Shared Types\n// =============================================================================\n\nexport interface AgentConfig {\n provider: 'anthropic' | 'openai' | 'google' | 'openrouter';\n model: string;\n /**\n * Sampling temperature. When defined it is threaded into the provider\n * request; when undefined the provider default is used (unchanged\n * behavior for all existing callers).\n *\n * Capability is the ROUTER's: Anthropic Opus 4.7+ and the 5-family\n * (`claude-opus-4-7*`, `claude-fable-5*`, `claude-opus-5*`,\n * `claude-sonnet-5*`, incl. Bedrock ids) return HTTP 400 on a\n * non-default `temperature`/`top_p`/`top_k`, so the Anthropic adapter\n * STRIPS the value for those ids (one log line naming model + param)\n * and reports the effective sampling on `LLMResponse.sampling`. Callers\n * keep expressing intent; disclosure reads the applied value.\n */\n temperature?: number;\n /**\n * Explicit per-call credentials/routing, bypassing `process.env`\n * entirely when supplied. Absent (default) preserves today's\n * behavior — each agent falls back to reading its provider's env\n * var(s) directly, so existing callers (including self-hosters who\n * set env vars once at process start) are unaffected. Use this to\n * run concurrent generations safely in one process: two simultaneous\n * calls with different `routeOverride`s never race on shared\n * `process.env` state.\n */\n routeOverride?: {\n readonly apiKey?: string;\n /** Anthropic-only: force the Bedrock-IAM client instead of the direct API client. */\n readonly useBedrock?: boolean;\n };\n /**\n * Observer invoked once per retried attempt when `apiCall()` (#489)\n * retries a rate-limited (HTTP 429) provider call. Fires AFTER the\n * retry decision is made and BEFORE the delay is awaited — never on\n * the terminal failure/success of the whole call. Purely an\n * observability hook: it never influences whether or how long\n * `apiCall()` retries. If the observer itself throws, `apiCall()`\n * catches it, logs a `console.warn`, and proceeds to the retry\n * delay unaffected — a broken observer cannot turn a recoverable\n * 429 into an unrelated hard failure. Absent (default) is a no-op;\n * `apiCall()` still logs every retry via `console.warn` regardless.\n */\n onRetry?: (info: ProviderRetryInfo) => void;\n}\n\n/** One retried attempt's context — passed to `AgentConfig.onRetry`. */\nexport interface ProviderRetryInfo {\n readonly provider: AgentConfig['provider'];\n /** 1-based index of this retry (1 = first retry, 2 = second, …). */\n readonly attempt: number;\n /** Total retries `apiCall()` will attempt before giving up. */\n readonly maxAttempts: number;\n /** HTTP status of the failed call, when the caught error carries one. */\n readonly status: number | undefined;\n /** Provider-supplied `Retry-After` value in seconds, when present and within the cap. */\n readonly retryAfterSec: number | undefined;\n /** Delay actually awaited before the next attempt. */\n readonly delayMs: number;\n /** One-line error summary (same shape as the existing `console.error` line). */\n readonly message: string;\n}\n\n/**\n * What sampling the provider ACTUALLY received for a text call — so a\n * caller that asked for `temperature: 0` (a disclosed reproducibility\n * property, e.g. the benchmark judge panel) can record the effective\n * value instead of the requested one. `'provider-default'` means no\n * temperature reached the provider: either the caller passed none, or\n * the adapter stripped it because the model rejects sampling params\n * (Anthropic Opus 4.7+ / 5-family → HTTP 400 on non-default\n * `temperature`/`top_p`/`top_k`); `strippedReason` names the second case.\n */\nexport interface AppliedSampling {\n readonly temperature: number | 'provider-default';\n readonly strippedReason?: string;\n}\n\nexport interface LLMResponse {\n text: string;\n inputTokens: number;\n outputTokens: number;\n /**\n * Effective sampling for this call (see {@link AppliedSampling}).\n * Every provider's `callText` sets it; absent only on paths that\n * predate the field — treat absence as unknown, never as \"as\n * requested\".\n */\n sampling?: AppliedSampling;\n}\n\n/**\n * Image payload for {@link VisionAgent.callVision}. Base64-encoded\n * bytes plus their media type — the two fields every vision-capable\n * provider SDK needs to reconstruct the image part.\n */\nexport interface VisionImageInput {\n mediaType: 'image/png' | 'image/jpeg' | 'image/webp';\n base64: string;\n}\n\n/**\n * The multimodal (image + text) call surface. Implemented by the\n * providers whose SDK path supports vision input (Anthropic, Google);\n * construct one via {@link createVisionAgent} so the call runs inside\n * the same `apiCall()` retry/observability choke point as every text\n * call — provider 429s retry with `Retry-After` honoring, `onRetry`\n * reaches the caller's structured log, and `routeOverride` governs\n * credentials and model routing instead of `process.env`.\n */\nexport interface VisionAgent {\n callVision(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n image: VisionImageInput,\n maxTokens?: number,\n ): Promise<LLMResponse>;\n}\n\nexport interface LLMTool {\n name: string;\n description: string;\n parameters: JsonObject;\n handler: (\n args: JsonObject,\n ) => Promise<{ content: Array<{ text: string }>; isError?: boolean }>;\n}\n\nexport interface LLMWithToolsResponse {\n text: string;\n inputTokens: number;\n outputTokens: number;\n turnsUsed: number;\n}\n\nexport interface LLMToolCall {\n /** Provider-specific call ID (for sendToolResult) */\n id?: string;\n name: string;\n input: JsonObject;\n}\n\nexport interface LLMToolCallResponse {\n toolCalls: LLMToolCall[];\n inputTokens: number;\n outputTokens: number;\n /**\n * The tool-choice mode the provider ACTUALLY received. Callers ask\n * for `'required'` (Anthropic `tool_choice: any`); Claude Fable 5.1\n * rejects forced tool choice with HTTP 400, so the Anthropic adapter\n * downgrades to `'auto'` for that family and reports it here. A\n * downgraded call may legitimately return zero tool calls — the\n * evaluator's `criteriaCoverage` records that as `skipped`, never as\n * a pass. Absent = predates the field (treat as unknown).\n */\n appliedToolChoice?: 'required' | 'auto';\n /**\n * Tokens read from / written to the prompt cache, when the provider\n * reports them. Optional because not every provider exposes\n * prompt-cache accounting — absent means \"unreported\", never zero.\n */\n cacheReadTokens?: number;\n cacheCreationTokens?: number;\n}\n\n// Backward compat alias\nexport type LLMSingleTurnResponse = LLMToolCallResponse;\n\n/** Result of executing a tool — passed to sendToolResult to close the API contract. */\nexport interface LLMToolResult {\n /** Tool call ID from the response (for providers that need it) */\n callId?: string;\n /** Tool name */\n name: string;\n /** Text result of executing the tool */\n result: string;\n /** Whether the tool execution failed */\n isError?: boolean;\n}\n\n// =============================================================================\n// Schema helpers\n// =============================================================================\n\n/**\n * Add `additionalProperties: false` to all object schemas and ensure all\n * properties are in `required`. Required by OpenAI strict mode.\n * Recursively processes nested objects and array items.\n */\nfunction addStrictSchemaConstraints(schema: JsonObject): JsonObject {\n const result = { ...schema };\n\n if (result.type === 'object' && result.properties) {\n result.additionalProperties = false;\n // All properties must be required for strict mode\n const propKeys = Object.keys(result.properties as JsonObject);\n if (!result.required || (result.required as string[]).length < propKeys.length) {\n result.required = propKeys;\n }\n // Recurse into nested properties\n const props = { ...(result.properties as JsonObject) };\n for (const [key, value] of Object.entries(props)) {\n if (typeof value === 'object' && value !== null) {\n props[key] = addStrictSchemaConstraints(value as JsonObject);\n }\n }\n result.properties = props;\n }\n\n // Recurse into array items\n if (result.type === 'array' && result.items && typeof result.items === 'object') {\n result.items = addStrictSchemaConstraints(result.items as JsonObject);\n }\n\n return result;\n}\n\n// =============================================================================\n// Error helpers\n// =============================================================================\n\n/** One-line error summary for logging — includes HTTP status, error code, and response body excerpt. */\nfunction errorSummary(e: unknown): string {\n if (!(e instanceof Error)) return String(e);\n const status = 'status' in e ? ` (${(e as { status: number }).status})` : '';\n const code = 'code' in e ? ` [${(e as { code: string }).code}]` : '';\n // Extract error body if available (Google/OpenAI SDKs attach it)\n let body = '';\n if ('error' in e && typeof (e as { error: unknown }).error === 'object') {\n const errObj = (e as { error: { message?: string } }).error;\n if (errObj?.message) body = ` body=\"${errObj.message.slice(0, 200)}\"`;\n }\n return `${e.constructor.name}${status}${code}: ${e.message.slice(0, 120)}${body}`;\n}\n\n/** True when the caught value looks like an HTTP 429 from any provider SDK. */\nfunction isRateLimited(e: unknown): boolean {\n if (!(e instanceof Error) || !('status' in e)) return false;\n return (e as { status: unknown }).status === 429;\n}\n\n/** HTTP status of the caught error, when the SDK attached one. Duck-typed — matches `errorSummary`'s existing precedent. */\nfunction extractStatus(e: unknown): number | undefined {\n if (!(e instanceof Error) || !('status' in e)) return undefined;\n const status = (e as { status: unknown }).status;\n return typeof status === 'number' ? status : undefined;\n}\n\n/**\n * Duck-typed `Retry-After` extraction. Both `@anthropic-ai/sdk`'s and\n * `openai`'s `APIError` attach a `Headers`-like `.headers` (with\n * `.get()`) to the thrown error at construction time — this is the\n * ONLY point in the call chain where that header is still reachable\n * (confirmed by reading both SDKs' error constructors). Handles the\n * delta-seconds form only (a plain integer/float string) — the rarer\n * HTTP-date form parses to `NaN` and correctly falls through to\n * `undefined` rather than fabricating a value. Google's `ApiError` has\n * no `.headers` at all, so this always returns `undefined` for Google\n * — expected, not a gap.\n */\nfunction extractRetryAfterSec(e: unknown): number | undefined {\n if (!(e instanceof Error) || !('headers' in e)) return undefined;\n const headers = (e as { headers?: unknown }).headers;\n if (\n headers === null ||\n typeof headers !== 'object' ||\n !('get' in headers) ||\n typeof (headers as { get?: unknown }).get !== 'function'\n ) {\n return undefined;\n }\n const raw = (headers as { get(name: string): string | null }).get('retry-after');\n if (raw === null) return undefined;\n const parsed = Number(raw);\n return Number.isFinite(parsed) && parsed >= 0 ? Math.floor(parsed) : undefined;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** Retry budget for `apiCall()` — see the docstring on `apiCall()` itself for the full policy. */\nconst MAX_RETRY_ATTEMPTS = 2;\nconst RETRY_AFTER_CAP_SEC = 15;\nconst DEFAULT_BACKOFF_BASE_MS = 1000;\nconst DEFAULT_BACKOFF_MAX_MS = 8000;\nconst MAX_TOTAL_RETRY_DELAY_MS = 20000;\n\n// =============================================================================\n// LLMAgent — abstract base\n// =============================================================================\n\nexport abstract class LLMAgent {\n abstract readonly provider: AgentConfig['provider'];\n private client: unknown = null;\n\n // ── Session state for server-side chaining ──────────────\n // Google: previous_interaction_id, OpenAI: previous_response_id\n // Enables turn 2+ to skip re-sending system prompt + history.\n // Call resetSession() between independent generation runs.\n protected lastSessionId: string | undefined;\n\n /**\n * Explicit per-call routing override — see `AgentConfig.routeOverride`.\n * Absent when constructed via the bare `new XAgent()` form (every\n * existing call site), so `createClient()`/`resolveModel()` fall\n * back to `process.env` exactly as before.\n */\n protected readonly routeOverride: AgentConfig['routeOverride'];\n\n /** See `AgentConfig.onRetry` (#489). Absent is a no-op. */\n protected readonly onRetry: AgentConfig['onRetry'];\n\n constructor(routeOverride?: AgentConfig['routeOverride'], onRetry?: AgentConfig['onRetry']) {\n this.routeOverride = routeOverride;\n this.onRetry = onRetry;\n }\n\n protected abstract resolveModel(model: string): string;\n protected abstract createClient(): Promise<unknown>;\n\n protected async getClient<T>(): Promise<T> {\n if (!this.client) {\n this.client = await this.createClient();\n }\n return this.client as T;\n }\n\n /** Text-only call — no tools */\n abstract callText(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n maxTokens?: number,\n temperature?: number,\n ): Promise<LLMResponse>;\n\n /**\n * Single-turn function calling — returns tool calls without executing them.\n * Each provider uses its native function/tool calling:\n * - Anthropic: tool_use blocks\n * - OpenAI: function_call output items\n * - Google: functionCall parts\n * SDK handles JSON escaping — safe for code, diffs, and other content.\n */\n abstract callTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMToolDef[],\n toolChoice?: 'required' | 'auto',\n /**\n * Optional scoped fallback tools. If the primary tools fail with a\n * transport-class error (e.g. `malformed_tool_call` on Gemini after\n * retry exhaustion), the provider may retry once with these narrower\n * tools before throwing. Universal signal — not provider-gated.\n */\n scopedTools?: LLMToolDef[],\n ): Promise<LLMToolCallResponse>;\n\n /** Multi-turn agentic loop — executes tools internally */\n abstract callWithTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMTool[],\n maxTurns: number,\n ): Promise<LLMWithToolsResponse>;\n\n /**\n * Pre-warm cache for repeated callTools() calls with the same system prompt + tools.\n * Override in providers that support server-side context caching (e.g., Google).\n * No-op by default (Anthropic/OpenAI handle caching automatically per-request).\n */\n async warmCache(\n _model: string,\n _systemPrompt: string,\n _tools: LLMToolDef[],\n _toolChoice?: 'required' | 'auto',\n ): Promise<void> {}\n\n /** Cleanup any cached resources. Call after generation completes. No-op by default. */\n async cleanup(): Promise<void> {}\n\n /** Reset session state between independent generation runs. */\n resetSession(): void {\n this.lastSessionId = undefined;\n }\n\n /**\n * Send tool execution results back to the provider to close the API contract.\n * Call this after executing tools from callTools() and before the next callTools().\n *\n * For providers with server-side state (Google, OpenAI), this sends the\n * function results so the next callTools() can chain properly.\n * For stateless providers (Anthropic), this is a no-op.\n *\n * Override in providers that need it.\n */\n async sendToolResult(_results: LLMToolResult[]): Promise<void> {\n // No-op by default — Anthropic doesn't need this (stateless + auto prompt cache)\n }\n\n /**\n * Execute an API call, retrying once or twice on HTTP 429\n * (rate-limited) before giving up (#489).\n *\n * Policy: on a 429, honor the provider's `Retry-After` header when\n * present (capped at `RETRY_AFTER_CAP_SEC` — a provider asking for a\n * longer wait is treated as \"don't retry\", not \"wait longer\": making\n * the caller sit through 15+ more seconds on a single failed call is\n * a bad experience regardless of what's driving the request);\n * otherwise fall back to exponential backoff with jitter, capped at\n * `DEFAULT_BACKOFF_MAX_MS` per attempt. Stops after\n * `MAX_RETRY_ATTEMPTS` retries OR once the cumulative delay would\n * exceed `MAX_TOTAL_RETRY_DELAY_MS`, whichever comes first. Any\n * non-429 error, or a 429 with no attempts left, is logged and\n * re-thrown immediately — unchanged from the pre-#489 behavior.\n *\n * **Budget scope (final-review correction):** `MAX_TOTAL_RETRY_DELAY_MS`\n * bounds a single `apiCall()` invocation, not a whole generation. A\n * generation issues many sequential `apiCall()` calls (coding turns,\n * tool-result round-trips, eval rounds); under sustained throttling\n * each one can independently add up to `MAX_TOTAL_RETRY_DELAY_MS`, so\n * a generation with k rate-limited calls can add up to roughly `k *\n * MAX_TOTAL_RETRY_DELAY_MS` to how long it holds its caller's\n * resources (e.g. the caller's concurrency slot) — not a flat 20s\n * ceiling. No shared per-generation budget is threaded here by\n * design (accepted ruling, not an oversight): the caller's own\n * queue/admission backstop is what bounds how long other\n * queued work waits, independent of any one generation's retry\n * total.\n */\n protected async apiCall<T>(fn: () => Promise<T>): Promise<T> {\n const start = Date.now();\n let totalDelayMs = 0;\n for (let attempt = 0; ; attempt++) {\n try {\n return await fn();\n } catch (e: unknown) {\n const ms = Date.now() - start;\n if (attempt >= MAX_RETRY_ATTEMPTS || !isRateLimited(e)) {\n console.error(`[${this.provider}] API error after ${ms}ms: ${errorSummary(e)}`);\n throw e;\n }\n const retryAfterSec = extractRetryAfterSec(e);\n if (retryAfterSec !== undefined && retryAfterSec > RETRY_AFTER_CAP_SEC) {\n console.error(\n `[${this.provider}] API error after ${ms}ms (retry-after ${retryAfterSec}s exceeds ${RETRY_AFTER_CAP_SEC}s cap, not retrying): ${errorSummary(e)}`,\n );\n throw e;\n }\n const delayMs =\n retryAfterSec !== undefined\n ? retryAfterSec * 1000\n : Math.min(DEFAULT_BACKOFF_BASE_MS * 2 ** attempt, DEFAULT_BACKOFF_MAX_MS) +\n Math.floor(Math.random() * 250);\n if (totalDelayMs + delayMs > MAX_TOTAL_RETRY_DELAY_MS) {\n console.error(\n `[${this.provider}] API error after ${ms}ms (retry budget exhausted, not retrying): ${errorSummary(e)}`,\n );\n throw e;\n }\n totalDelayMs += delayMs;\n const info: ProviderRetryInfo = {\n provider: this.provider,\n attempt: attempt + 1,\n maxAttempts: MAX_RETRY_ATTEMPTS,\n status: extractStatus(e),\n retryAfterSec,\n delayMs,\n message: errorSummary(e),\n };\n console.warn(\n `[${this.provider}] rate-limited (attempt ${info.attempt}/${info.maxAttempts}), retrying in ${delayMs}ms`,\n );\n try {\n this.onRetry?.(info);\n } catch (observerError) {\n // Guard, not propagate — the docstring on AgentConfig.onRetry\n // promises this is \"purely an observability hook: it never\n // influences whether or how long apiCall() retries\". A\n // caller-supplied observer that throws must not turn a\n // recoverable 429 into an unrelated hard failure.\n console.warn(\n `[${this.provider}] onRetry observer threw (ignored, retry proceeds): ${errorSummary(observerError)}`,\n );\n }\n await sleep(delayMs);\n }\n }\n }\n\n}\n\n// =============================================================================\n// AnthropicAgent\n// =============================================================================\n\n/**\n * Strip every routing spelling down to the bare Claude API id so the\n * family predicates below see one form: `anthropic/claude-x`,\n * `anthropic.claude-x`, `us.anthropic.claude-x[-vN:M]` and the bare\n * `claude-x` all normalize to `claude-x…`. ARNs are left as-is (they\n * name a profile, not a family) and match no predicate.\n */\nexport function normalizeAnthropicModelId(model: string): string {\n return model\n .replace(/^anthropic\\//, '')\n .replace(/^(?:[a-z]{2}\\.)?anthropic\\./, '');\n}\n\n/**\n * Models that reject non-default sampling parameters with HTTP 400:\n * Opus 4.7 and everything after it (Fable 5, Fable 5.1, Opus 5,\n * Sonnet 5). Haiku 4.5 (`claude-haiku-4-5*`) still accepts them.\n * Strings per ggui#706 (platform.claude.com, verified 2026-09-02).\n */\nexport function anthropicRejectsSamplingParams(model: string): boolean {\n return /^claude-(?:opus-4-7|opus-5|sonnet-5|fable-5)(?:-|$)/.test(\n normalizeAnthropicModelId(model),\n );\n}\n\n/**\n * Models that reject a FORCED tool choice (`tool_choice: any` / a named\n * tool) with HTTP 400: Claude Fable 5.1 (ggui#706). `auto` is accepted.\n */\nexport function anthropicRejectsForcedToolChoice(model: string): boolean {\n return /^claude-fable-5-1(?:-|$)/.test(normalizeAnthropicModelId(model));\n}\n\n/**\n * Decide what sampling reaches Anthropic for `model` given the caller's\n * `temperature`: pass it through on models that accept it, strip it on\n * the 4.7+/5-family and say so. Pure — the caller logs and spreads.\n */\nexport function resolveAnthropicSampling(\n model: string,\n temperature: number | undefined,\n): { readonly request: { temperature?: number }; readonly applied: AppliedSampling } {\n if (temperature === undefined) {\n return { request: {}, applied: { temperature: 'provider-default' } };\n }\n if (anthropicRejectsSamplingParams(model)) {\n return {\n request: {},\n applied: {\n temperature: 'provider-default',\n strippedReason:\n `${normalizeAnthropicModelId(model)} rejects non-default sampling params (HTTP 400 on Opus 4.7+/5-family); ` +\n `caller's temperature=${temperature} was not sent`,\n },\n };\n }\n return { request: { temperature }, applied: { temperature } };\n}\n\nexport class AnthropicAgent extends LLMAgent {\n readonly provider = 'anthropic' as const;\n\n protected resolveModel(model: string): string {\n // Bedrock IAM path — the upstream model id must be the cross-region\n // inference-profile form (`us.anthropic.*`), not the bare API id.\n const useBedrock =\n this.routeOverride?.useBedrock ?? process.env.CLAUDE_CODE_USE_BEDROCK === '1';\n if (useBedrock) {\n return getBedrockModelId(model);\n }\n return model.startsWith('anthropic/')\n ? model.slice('anthropic/'.length)\n : model;\n }\n\n protected async createClient(): Promise<Anthropic | AnthropicBedrock> {\n // Bedrock IAM path: when CLAUDE_CODE_USE_BEDROCK=1 (set by the\n // deployment's provider routing), auth comes from the ambient AWS\n // credential chain (instance role, env credentials, etc.) — no API\n // key. `AnthropicBedrock` is wire-compatible with `Anthropic` for\n // the `.messages` API this agent uses.\n const useBedrock =\n this.routeOverride?.useBedrock ?? process.env.CLAUDE_CODE_USE_BEDROCK === '1';\n if (useBedrock) {\n const { AnthropicBedrock } = await import('@anthropic-ai/bedrock-sdk');\n return new AnthropicBedrock({\n awsRegion:\n process.env.AWS_REGION ??\n process.env.AWS_DEFAULT_REGION ??\n 'us-east-1',\n });\n }\n // SDK construction lives in `adapters/claude/client.ts`. The BYOK\n // resolver writes the raw key into `process.env.ANTHROPIC_API_KEY`\n // before this runs (see `applyRouteToEnv` in provider-router) —\n // `routeOverride.apiKey`, when supplied, skips that env round-trip\n // entirely.\n return createAnthropicClient(this.routeOverride?.apiKey ?? process.env.ANTHROPIC_API_KEY);\n }\n\n async callText(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n maxTokens?: number,\n temperature?: number,\n ): Promise<LLMResponse> {\n const client = await this.getClient<Anthropic>();\n const traceId = newLlmTraceId();\n const startedAt = Date.now();\n const resolvedModel = this.resolveModel(model);\n\n // Use prompt caching beta API (90% discount on cached reads)\n const system: TextBlockParam[] = [\n {\n type: 'text',\n text: systemPrompt,\n cache_control: { type: 'ephemeral' },\n },\n ];\n\n // Capability is the router's: the 4.7+/5-family rejects sampling\n // params with 400, so strip (and disclose) rather than fail the call\n // or make callers stop expressing intent (ggui#710 / #706).\n const sampling = resolveAnthropicSampling(resolvedModel, temperature);\n if (sampling.applied.strippedReason !== undefined) {\n console.warn(`[anthropic] callText: ${sampling.applied.strippedReason}`);\n }\n\n try {\n const response = await this.apiCall(() =>\n client.messages.create({\n model: resolvedModel,\n max_tokens: maxTokens ?? 4096,\n system,\n messages: [{ role: 'user', content: userPrompt }],\n ...sampling.request,\n }),\n );\n\n const usage = response.usage as typeof response.usage & {\n cache_creation_input_tokens?: number | null;\n cache_read_input_tokens?: number | null;\n };\n const cacheCreated = usage.cache_creation_input_tokens ?? 0;\n const cacheRead = usage.cache_read_input_tokens ?? 0;\n if (cacheCreated || cacheRead) {\n console.log(`[anthropic] callText cache: created=${cacheCreated} read=${cacheRead} input=${usage.input_tokens} output=${usage.output_tokens}`);\n }\n\n const text = response.content\n .filter((block): block is TextBlock => block.type === 'text')\n .map((block) => block.text)\n .join('');\n\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callText',\n systemPrompt,\n userPrompt,\n result: {\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n cacheCreated,\n cacheRead,\n text,\n },\n });\n\n return {\n text,\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n sampling: sampling.applied,\n };\n } catch (e) {\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callText',\n systemPrompt,\n userPrompt,\n error: { message: e instanceof Error ? e.message : String(e) },\n });\n throw e;\n }\n }\n\n async callVision(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n image: VisionImageInput,\n maxTokens?: number,\n ): Promise<LLMResponse> {\n const client = await this.getClient<Anthropic>();\n const traceId = newLlmTraceId();\n const startedAt = Date.now();\n const resolvedModel = this.resolveModel(model);\n\n const imageBlock: ImageBlockParam = {\n type: 'image',\n source: {\n type: 'base64',\n media_type: image.mediaType,\n data: image.base64,\n },\n };\n\n try {\n const response = await this.apiCall(() =>\n client.messages.create({\n model: resolvedModel,\n max_tokens: maxTokens ?? 1500,\n system: systemPrompt,\n messages: [\n {\n role: 'user',\n content: [imageBlock, { type: 'text', text: userPrompt }],\n },\n ],\n }),\n );\n\n const text = response.content\n .filter((block): block is TextBlock => block.type === 'text')\n .map((block) => block.text)\n .join('');\n\n const endedAt = Date.now();\n // The image bytes stay OUT of the trace — a base64 screenshot\n // would balloon every event; the prompts identify the call.\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callVision',\n systemPrompt,\n userPrompt,\n result: {\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n text,\n },\n });\n\n return {\n text,\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n };\n } catch (e) {\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callVision',\n systemPrompt,\n userPrompt,\n error: { message: e instanceof Error ? e.message : String(e) },\n });\n throw e;\n }\n }\n\n async callTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMToolDef[],\n toolChoice: 'required' | 'auto' = 'required',\n _scopedTools?: LLMToolDef[],\n ): Promise<LLMToolCallResponse> {\n const client = await this.getClient<Anthropic>();\n const traceId = newLlmTraceId();\n const startedAt = Date.now();\n const resolvedModel = this.resolveModel(model);\n\n // Cache system prompt + tools via prompt caching beta (90% discount)\n const system: TextBlockParam[] = [\n {\n type: 'text',\n text: systemPrompt,\n cache_control: { type: 'ephemeral' },\n },\n ];\n\n const cachedTools: Anthropic.Tool[] = tools.map((t, i) => ({\n name: t.name,\n description: t.description,\n input_schema: t.parameters as Anthropic.Tool.InputSchema,\n // Mark last tool to cache the entire tool list\n ...(i === tools.length - 1\n ? { cache_control: { type: 'ephemeral' as const } }\n : {}),\n }));\n\n try {\n // `max_tokens >= 21_334` mandates streaming on the\n // @anthropic-ai/sdk >=0.40 path (the API rejects non-streamed\n // long-form generation with `Streaming is required for\n // operations that may take longer than 10 minutes`). We still\n // want the final-message shape downstream, so use the stream\n // helper's `finalMessage()` which folds the events back to the\n // same `Message` Type the non-streaming path returned.\n // Fable 5.1 rejects a forced tool choice (400); downgrade to\n // `auto` for that family and disclose it on the response so a\n // resulting zero-tool-call reply is never mistaken for a verdict\n // (ggui#710 / #706).\n const appliedToolChoice: 'required' | 'auto' =\n toolChoice === 'required' && anthropicRejectsForcedToolChoice(resolvedModel)\n ? 'auto'\n : toolChoice;\n if (appliedToolChoice !== toolChoice) {\n console.warn(\n `[anthropic] callTools: ${normalizeAnthropicModelId(resolvedModel)} rejects forced tool_choice (HTTP 400); ` +\n `caller's 'required' downgraded to 'auto'`,\n );\n }\n const response = await this.apiCall(() =>\n client.messages\n .stream({\n model: resolvedModel,\n max_tokens: 32768,\n system,\n messages: [{ role: 'user', content: userPrompt }],\n tools: cachedTools,\n tool_choice: { type: appliedToolChoice === 'required' ? 'any' : 'auto' },\n })\n .finalMessage(),\n );\n\n const usage = response.usage as typeof response.usage & {\n cache_creation_input_tokens?: number | null;\n cache_read_input_tokens?: number | null;\n };\n const cacheCreated = usage.cache_creation_input_tokens ?? 0;\n const cacheRead = usage.cache_read_input_tokens ?? 0;\n if (cacheCreated || cacheRead) {\n console.log(`[anthropic] callTools cache: created=${cacheCreated} read=${cacheRead} input=${usage.input_tokens} output=${usage.output_tokens}`);\n }\n\n const toolUses = response.content.filter(\n (block): block is ToolUseBlock => block.type === 'tool_use',\n );\n\n const toolCalls = toolUses.map((tu) => ({\n id: tu.id,\n name: tu.name,\n input: (tu.input ?? {}) as JsonObject,\n }));\n\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callTools',\n systemPrompt,\n userPrompt,\n tools: summarizeTools(tools),\n result: {\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n cacheCreated,\n cacheRead,\n toolCalls: toolCalls.map((c) => ({ name: c.name, input: c.input })),\n },\n });\n\n return {\n toolCalls,\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n cacheReadTokens: cacheRead,\n cacheCreationTokens: cacheCreated,\n appliedToolChoice,\n };\n } catch (e) {\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callTools',\n systemPrompt,\n userPrompt,\n tools: summarizeTools(tools),\n error: { message: e instanceof Error ? e.message : String(e) },\n });\n throw e;\n }\n }\n\n async callWithTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMTool[],\n maxTurns: number,\n ): Promise<LLMWithToolsResponse> {\n const client = await this.getClient<Anthropic>();\n const resolvedModel = this.resolveModel(model);\n const traceId = newLlmTraceId();\n const startedAt = Date.now();\n\n const anthropicTools: Anthropic.Tool[] = tools.map((t) => ({\n name: t.name,\n description: t.description,\n input_schema: t.parameters as Anthropic.Tool.InputSchema,\n }));\n\n const messages: Anthropic.MessageParam[] = [\n { role: 'user', content: userPrompt },\n ];\n let totalIn = 0;\n let totalOut = 0;\n let allText = '';\n\n try {\n for (let turn = 0; turn < maxTurns; turn++) {\n // Same streaming requirement as callTools — see comment there.\n const response = await this.apiCall(() =>\n client.messages\n .stream({\n model: resolvedModel,\n max_tokens: 32768,\n system: systemPrompt,\n messages,\n tools: anthropicTools,\n })\n .finalMessage(),\n );\n totalIn += response.usage.input_tokens;\n totalOut += response.usage.output_tokens;\n\n for (const block of response.content) {\n if (block.type === 'text') allText += block.text;\n }\n\n const toolUses = response.content.filter(\n (b): b is ToolUseBlock => b.type === 'tool_use',\n );\n if (toolUses.length === 0) break;\n\n messages.push({ role: 'assistant', content: response.content });\n\n const toolResults: Anthropic.ToolResultBlockParam[] = [];\n for (const tu of toolUses) {\n const tool = tools.find((t) => t.name === tu.name);\n if (!tool) {\n toolResults.push({\n type: 'tool_result',\n tool_use_id: tu.id,\n content: `Tool '${tu.name}' not found`,\n });\n continue;\n }\n const result = await tool.handler(\n (tu.input ?? {}) as JsonObject,\n );\n toolResults.push({\n type: 'tool_result',\n tool_use_id: tu.id,\n content: result.content[0]?.text ?? '',\n });\n }\n messages.push({ role: 'user', content: toolResults });\n }\n\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callWithTools',\n systemPrompt,\n userPrompt,\n tools: tools.map((t) => ({ name: t.name, description: t.description })),\n result: {\n inputTokens: totalIn,\n outputTokens: totalOut,\n text: allText,\n turnsUsed: messages.length,\n },\n });\n\n return {\n text: allText,\n inputTokens: totalIn,\n outputTokens: totalOut,\n turnsUsed: messages.length,\n };\n } catch (e) {\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callWithTools',\n systemPrompt,\n userPrompt,\n tools: tools.map((t) => ({ name: t.name, description: t.description })),\n error: { message: e instanceof Error ? e.message : String(e) },\n });\n throw e;\n }\n }\n}\n\n// =============================================================================\n// OpenAIAgent\n// =============================================================================\n\nexport class OpenAIAgent extends LLMAgent {\n readonly provider = 'openai' as const;\n\n protected resolveModel(model: string): string {\n return model.startsWith('openai/')\n ? model.slice('openai/'.length)\n : model;\n }\n\n protected async createClient(): Promise<OpenAI> {\n const { default: OpenAISDK } = await import('openai');\n return new OpenAISDK({ apiKey: this.routeOverride?.apiKey ?? process.env.OPENAI_API_KEY });\n }\n\n async callText(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n maxTokens?: number,\n temperature?: number,\n ): Promise<LLMResponse> {\n const client = await this.getClient<OpenAI>();\n const response: OpenAIResponse = await this.apiCall(() =>\n client.responses.create({\n model: this.resolveModel(model),\n instructions: systemPrompt,\n input: [{ role: 'user', content: userPrompt }],\n ...(maxTokens && { max_output_tokens: maxTokens }),\n ...(temperature !== undefined && { temperature }),\n }),\n );\n\n let text = '';\n for (const item of response.output) {\n if (item.type === 'message') {\n for (const part of item.content) {\n if (part.type === 'output_text') text += part.text;\n }\n }\n }\n\n return {\n text,\n inputTokens: response.usage?.input_tokens ?? 0,\n outputTokens: response.usage?.output_tokens ?? 0,\n sampling: { temperature: temperature ?? 'provider-default' },\n };\n }\n\n async callTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMToolDef[],\n toolChoice: 'required' | 'auto' = 'required',\n _scopedTools?: LLMToolDef[],\n ): Promise<LLMToolCallResponse> {\n const client = await this.getClient<OpenAI>();\n // strict: true enables constrained decoding — guarantees valid JSON matching the schema.\n // Requires additionalProperties: false on all objects and all fields in required.\n const openaiTools = tools.map((t) => ({\n type: 'function' as const,\n name: t.name,\n description: t.description,\n parameters: addStrictSchemaConstraints(t.parameters),\n strict: true,\n }));\n\n // Consume pending tool results — prepend to input for proper contract\n const pending = this.pendingToolResults;\n this.pendingToolResults = [];\n const input = pending.length > 0\n ? [...pending, { role: 'user' as const, content: userPrompt }]\n : [{ role: 'user' as const, content: userPrompt }];\n\n const response: OpenAIResponse = await this.apiCall(() =>\n client.responses.create({\n model: this.resolveModel(model),\n instructions: systemPrompt,\n input,\n tools: openaiTools,\n tool_choice: toolChoice,\n store: true, // Enable response storage + server-side chaining\n ...(this.lastSessionId && { previous_response_id: this.lastSessionId }),\n }),\n );\n\n // Save session ID for chaining subsequent calls\n this.lastSessionId = response.id;\n\n // Log cache utilization\n const usage = response.usage;\n if (usage) {\n // Typed in the SDK as required, but widened to optional here —\n // tolerate responses that omit the breakdown at runtime.\n const cached: { cached_tokens?: number } | undefined =\n usage.input_tokens_details;\n if (cached?.cached_tokens) {\n console.log(`[openai] session ${this.lastSessionId ? 'chained' : 'new'}: ${cached.cached_tokens} cached of ${usage.input_tokens} input`);\n }\n }\n\n const functionCalls = response.output.filter(\n (o): o is ResponseFunctionToolCall => o.type === 'function_call',\n );\n\n return {\n toolCalls: functionCalls.map((fc) => ({\n id: fc.call_id,\n name: fc.name,\n input: JSON.parse(fc.arguments ?? '{}') as JsonObject,\n })),\n inputTokens: response.usage?.input_tokens ?? 0,\n outputTokens: response.usage?.output_tokens ?? 0,\n };\n }\n\n // Pending tool results — stored by sendToolResult, consumed by next callTools\n private pendingToolResults: OpenAI.Responses.ResponseInputItem[] = [];\n\n override async sendToolResult(results: LLMToolResult[]): Promise<void> {\n // Store results locally — they'll be prepended to the next callTools input.\n // No API call here! Saves a round-trip.\n this.pendingToolResults = results.map((r) => ({\n type: 'function_call_output',\n call_id: r.callId ?? '',\n output: r.result,\n }));\n }\n\n async callWithTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMTool[],\n maxTurns: number,\n ): Promise<LLMWithToolsResponse> {\n const client = await this.getClient<OpenAI>();\n const resolvedModel = this.resolveModel(model);\n const openaiTools = tools.map((t) => ({\n type: 'function' as const,\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n strict: false,\n }));\n\n let input: OpenAI.Responses.ResponseInputItem[] = [\n { role: 'user', content: userPrompt },\n ];\n let totalIn = 0;\n let totalOut = 0;\n let allText = '';\n\n for (let turn = 0; turn < maxTurns; turn++) {\n const response: OpenAIResponse = await this.apiCall(() =>\n client.responses.create({\n model: resolvedModel,\n instructions: systemPrompt,\n input,\n tools: openaiTools,\n }),\n );\n totalIn += response.usage?.input_tokens ?? 0;\n totalOut += response.usage?.output_tokens ?? 0;\n\n const functionCalls = response.output.filter(\n (o): o is ResponseFunctionToolCall => o.type === 'function_call',\n );\n for (const item of response.output) {\n if (item.type === 'message') {\n for (const part of item.content) {\n if (part.type === 'output_text') allText += part.text;\n }\n }\n }\n\n if (functionCalls.length === 0) break;\n\n input = [\n ...(response.output as OpenAI.Responses.ResponseInputItem[]),\n ];\n for (const fc of functionCalls) {\n const tool = tools.find((t) => t.name === fc.name);\n const result = tool\n ? await tool.handler(\n JSON.parse(fc.arguments ?? '{}') as JsonObject,\n )\n : { content: [{ text: `Tool '${fc.name}' not found` }] };\n input.push({\n type: 'function_call_output',\n call_id: fc.call_id,\n output: result.content[0]?.text ?? '',\n });\n }\n }\n\n return {\n text: allText,\n inputTokens: totalIn,\n outputTokens: totalOut,\n turnsUsed: input.length,\n };\n }\n}\n\n// =============================================================================\n// GoogleAgent — uses Interactions API (server-side state, automatic caching)\n// =============================================================================\n\n/**\n * Concatenate text across all `model_output` steps of an interaction\n * (@google/genai >= 2.0.0 'steps' schema). Steps form a discriminated\n * union — even at thinking_level 'minimal' a `thought` step is present,\n * so iterate by discriminant and skip step types we don't consume.\n */\nfunction interactionText(interaction: Interactions.Interaction): string {\n let text = '';\n for (const step of interaction.steps ?? []) {\n if (step.type === 'model_output') {\n for (const content of step.content ?? []) {\n if (content.type === 'text') {\n text += content.text;\n }\n }\n }\n }\n return text;\n}\n\n/** Collect the function-call steps of an interaction. */\nfunction functionCallSteps(\n interaction: Interactions.Interaction,\n): Interactions.FunctionCallStep[] {\n return (interaction.steps ?? []).filter(\n (s): s is Interactions.FunctionCallStep => s.type === 'function_call',\n );\n}\n\n/**\n * Wrap a user prompt as a `user_input` step. In the 2.x request union a\n * mixed input array is `Array<Step>` — bare `{type:'text'}` content is\n * not a Step, so prompts sent alongside function_result steps must be\n * wrapped.\n */\nfunction toUserInputStep(text: string): Interactions.UserInputStep {\n return { type: 'user_input', content: [{ type: 'text', text }] };\n}\n\nexport class GoogleAgent extends LLMAgent {\n readonly provider = 'google' as const;\n\n protected resolveModel(model: string): string {\n // Strip the LiteLLM transport prefix `gemini/` (Google AI Studio\n // route) so the GenAI SDK receives the bare model id it expects.\n // Pre-slice-#43 close-out this stripped `google/` instead — which\n // (a) doesn't match LiteLLM's `gemini/` convention and (b) silently\n // no-op'd against canonical `gemini/...` strings, then passed\n // them to the GenAI SDK which 4xx's on the prefixed form. Fixed\n // as part of the slice #43 audit. Bare ids pass through verbatim\n // (typed `LlmRoute` already guarantees wire-canonical at every\n // OSS call site).\n return model.startsWith('gemini/')\n ? model.slice('gemini/'.length)\n : model;\n }\n\n protected async createClient(): Promise<GoogleGenAI> {\n const { GoogleGenAI: GoogleGenAISDK } = await import('@google/genai');\n return new GoogleGenAISDK({\n apiKey:\n this.routeOverride?.apiKey ?? (process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY),\n httpOptions: { timeout: 300_000 }, // 5 min — Pro models can be slow\n });\n }\n\n async callText(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n maxTokens?: number,\n temperature?: number,\n ): Promise<LLMResponse> {\n const client = await this.getClient<GoogleGenAI>();\n\n const generationConfig: Interactions.GenerationConfig = {\n ...(maxTokens ? { max_output_tokens: maxTokens } : {}),\n ...(temperature !== undefined ? { temperature } : {}),\n };\n\n const interaction = await this.apiCall(() =>\n client.interactions.create({\n model: this.resolveModel(model),\n system_instruction: systemPrompt,\n input: userPrompt,\n generation_config:\n Object.keys(generationConfig).length > 0 ? generationConfig : undefined,\n }),\n );\n\n return {\n text: interactionText(interaction),\n inputTokens: interaction.usage?.total_input_tokens ?? 0,\n outputTokens: interaction.usage?.total_output_tokens ?? 0,\n sampling: { temperature: temperature ?? 'provider-default' },\n };\n }\n\n async callVision(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n image: VisionImageInput,\n maxTokens?: number,\n ): Promise<LLMResponse> {\n const client = await this.getClient<GoogleGenAI>();\n const traceId = newLlmTraceId();\n const startedAt = Date.now();\n const resolvedModel = this.resolveModel(model);\n\n try {\n const response = await this.apiCall(() =>\n client.models.generateContent({\n model: resolvedModel,\n contents: [\n {\n role: 'user',\n parts: [\n { inlineData: { mimeType: image.mediaType, data: image.base64 } },\n { text: userPrompt },\n ],\n },\n ],\n config: {\n systemInstruction: systemPrompt,\n ...(maxTokens ? { maxOutputTokens: maxTokens } : {}),\n },\n }),\n );\n\n const text =\n response.candidates?.[0]?.content?.parts?.map((p) => p.text || '').join('') || '';\n const usage = response.usageMetadata;\n const result: LLMResponse = {\n text,\n inputTokens: usage?.promptTokenCount ?? 0,\n outputTokens: usage?.candidatesTokenCount ?? 0,\n };\n\n const endedAt = Date.now();\n // The image bytes stay OUT of the trace — a base64 screenshot\n // would balloon every event; the prompts identify the call.\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'google',\n model: resolvedModel,\n kind: 'callVision',\n systemPrompt,\n userPrompt,\n result: {\n inputTokens: result.inputTokens,\n outputTokens: result.outputTokens,\n text,\n },\n });\n\n return result;\n } catch (e) {\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'google',\n model: resolvedModel,\n kind: 'callVision',\n systemPrompt,\n userPrompt,\n error: { message: e instanceof Error ? e.message : String(e) },\n });\n throw e;\n }\n }\n\n async callTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMToolDef[],\n _toolChoice: 'required' | 'auto' = 'required',\n scopedTools?: LLMToolDef[],\n ): Promise<LLMToolCallResponse> {\n const client = await this.getClient<GoogleGenAI>();\n\n\n const interactionTools: Interactions.Function[] = tools.map((t) => ({\n type: 'function' as const,\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n }));\n const scopedInteractionTools: Interactions.Function[] | undefined = scopedTools?.map((t) => ({\n type: 'function' as const,\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n }));\n\n // Chain off previous interaction if available — server has system prompt + tools\n const resolvedModel = this.resolveModel(model);\n\n // Consume pending tool results — prepend them to the input so the API\n // sees function_result + the new prompt (as a user_input step) in one\n // call (saves a round-trip)\n const pending = this.pendingToolResults;\n this.pendingToolResults = [];\n const input: string | Interactions.Step[] = pending.length > 0\n ? [...pending, toUserInputStep(userPrompt)]\n : userPrompt;\n\n const createInteraction = () =>\n this.lastSessionId\n ? client.interactions.create({\n model: resolvedModel,\n previous_interaction_id: this.lastSessionId,\n input,\n tools: interactionTools,\n generation_config: { max_output_tokens: 16384 },\n })\n : client.interactions.create({\n model: resolvedModel,\n system_instruction: systemPrompt,\n tools: interactionTools,\n input: userPrompt,\n generation_config: { max_output_tokens: 16384 },\n });\n\n // Retry up to 3 attempts for malformed_tool_call (model generates invalid JSON).\n // If all 3 fail AND scopedTools were provided, one final attempt with the\n // narrower scoped tool schema. Universal runtime-signal fallback — the\n // signal is the transport error, not the provider identity.\n let interaction!: Interactions.Interaction;\n const MAX_MALFORMED_RETRIES = 3;\n let succeeded = false;\n for (let attempt = 0; attempt < MAX_MALFORMED_RETRIES; attempt++) {\n try {\n if (attempt === 0) {\n interaction = await this.apiCall(createInteraction);\n } else {\n const jsonHint = '\\n\\nIMPORTANT: Your previous response had invalid JSON. Produce valid JSON in your tool call arguments.';\n const retryPrompt = userPrompt + jsonHint;\n interaction = await this.apiCall(() =>\n this.lastSessionId\n ? client.interactions.create({\n model: resolvedModel,\n previous_interaction_id: this.lastSessionId,\n input: pending.length > 0\n ? [...pending, toUserInputStep(retryPrompt)]\n : retryPrompt,\n tools: interactionTools,\n generation_config: { max_output_tokens: 16384 },\n })\n : client.interactions.create({\n model: resolvedModel,\n system_instruction: systemPrompt,\n tools: interactionTools,\n input: retryPrompt,\n generation_config: { max_output_tokens: 16384 },\n }),\n );\n }\n succeeded = true;\n break;\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n if (msg.includes('malformed_tool_call') && attempt < MAX_MALFORMED_RETRIES - 1) {\n console.warn(`[google] malformed_tool_call (attempt ${attempt + 1}/${MAX_MALFORMED_RETRIES}) — retrying`);\n continue;\n }\n if (msg.includes('malformed_tool_call') && scopedInteractionTools) {\n // Exhausted primary retries — try once more with the scoped\n // tool schema. The narrower tool forces a smaller payload\n // that's less likely to trip JSON emission.\n console.warn('[google] malformed_tool_call exhausted — retrying with scoped tool schema');\n const scopedHint = '\\n\\nYour previous response exceeded the tool-call payload budget. Produce a SINGLE small change (≤20 lines) using the narrowed tool schema.';\n const scopedPrompt = userPrompt + scopedHint;\n try {\n interaction = await this.apiCall(() =>\n this.lastSessionId\n ? client.interactions.create({\n model: resolvedModel,\n previous_interaction_id: this.lastSessionId,\n input: pending.length > 0\n ? [...pending, toUserInputStep(scopedPrompt)]\n : scopedPrompt,\n tools: scopedInteractionTools,\n generation_config: { max_output_tokens: 16384 },\n })\n : client.interactions.create({\n model: resolvedModel,\n system_instruction: systemPrompt,\n tools: scopedInteractionTools,\n input: scopedPrompt,\n generation_config: { max_output_tokens: 16384 },\n }),\n );\n succeeded = true;\n break;\n } catch (e2: unknown) {\n const msg2 = e2 instanceof Error ? e2.message : String(e2);\n console.error(`[google] scoped retry FAILED: ${msg2.slice(0, 300)}`);\n throw e2;\n }\n }\n console.error(`[google] callTools FAILED: ${msg.slice(0, 300)}`);\n throw e;\n }\n }\n if (!succeeded) throw new Error('[google] callTools: exhausted retries without success');\n\n // Save session ID for chaining subsequent calls\n this.lastSessionId = interaction.id;\n\n const toolCalls = functionCallSteps(interaction).map((fc) => ({\n id: fc.id,\n name: fc.name,\n input: toolArgsToJsonObject(fc.arguments),\n }));\n\n return {\n toolCalls,\n inputTokens: interaction.usage?.total_input_tokens ?? 0,\n outputTokens: interaction.usage?.total_output_tokens ?? 0,\n };\n }\n\n // Pending tool results — stored by sendToolResult, consumed by next callTools\n private pendingToolResults: Interactions.FunctionResultStep[] = [];\n\n override async sendToolResult(results: LLMToolResult[]): Promise<void> {\n // Store results locally — they'll be prepended to the next callTools input.\n // No API call here! Saves ~5.8s per turn.\n this.pendingToolResults = results.map((r) => ({\n type: 'function_result' as const,\n call_id: r.callId ?? '',\n name: r.name,\n result: r.result,\n is_error: r.isError,\n }));\n }\n\n async callWithTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMTool[],\n maxTurns: number,\n ): Promise<LLMWithToolsResponse> {\n const client = await this.getClient<GoogleGenAI>();\n\n\n const interactionTools: Interactions.Function[] = tools.map((t) => ({\n type: 'function' as const,\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n }));\n\n let totalIn = 0;\n let totalOut = 0;\n let allText = '';\n let turnsUsed = 0;\n\n // Turn 1: system instruction + tools + user prompt\n let interaction = await this.apiCall(() =>\n client.interactions.create({\n model: this.resolveModel(model),\n system_instruction: systemPrompt,\n tools: interactionTools,\n input: userPrompt,\n }),\n );\n\n for (let turn = 0; turn < maxTurns; turn++) {\n turnsUsed = turn + 1;\n\n if (interaction.usage) {\n totalIn += interaction.usage.total_input_tokens ?? 0;\n totalOut += interaction.usage.total_output_tokens ?? 0;\n }\n\n // Collect text\n allText += interactionText(interaction);\n\n // Collect function calls\n const fnCalls = functionCallSteps(interaction);\n\n if (fnCalls.length === 0) break;\n\n // Execute tools and build function_result inputs\n const results: Interactions.FunctionResultStep[] = [];\n for (const fc of fnCalls) {\n const tool = tools.find((t) => t.name === fc.name);\n if (!tool) {\n results.push({\n type: 'function_result',\n call_id: fc.id,\n name: fc.name,\n result: JSON.stringify({ error: `Tool '${fc.name}' not found` }),\n is_error: true,\n });\n continue;\n }\n const result = await tool.handler(toolArgsToJsonObject(fc.arguments));\n results.push({\n type: 'function_result',\n call_id: fc.id,\n name: fc.name,\n result: result.content.map((c) => c.text).join('\\n'),\n });\n }\n\n // Next turn: only send function results — server has the history\n interaction = await this.apiCall(() =>\n client.interactions.create({\n model: this.resolveModel(model),\n previous_interaction_id: interaction.id,\n input: results,\n }),\n );\n }\n\n return {\n text: allText,\n inputTokens: totalIn,\n outputTokens: totalOut,\n turnsUsed,\n };\n }\n}\n\n// =============================================================================\n// OpenRouterAgent\n// =============================================================================\n\nexport class OpenRouterAgent extends LLMAgent {\n readonly provider = 'openrouter' as const;\n\n // Client-side session history — system prompt sent once, subsequent\n // callTools() calls append to the conversation without re-sending it.\n private sessionMessages: import('../adapters/openrouter/types').OpenRouterMessage[] = [];\n\n protected resolveModel(model: string): string {\n // Strip 'openrouter/' prefix — OpenRouter API expects 'provider/model'\n // e.g., 'openrouter/anthropic/claude-3.5-sonnet' → 'anthropic/claude-3.5-sonnet'\n return model.startsWith('openrouter/')\n ? model.slice('openrouter/'.length)\n : model;\n }\n\n override resetSession(): void {\n super.resetSession();\n this.sessionMessages = [];\n }\n\n protected async createClient(): Promise<unknown> {\n const { OpenRouterClient } = await import('../adapters/openrouter/client');\n return new OpenRouterClient({\n apiKey: this.routeOverride?.apiKey ?? process.env.OPENROUTER_API_KEY!,\n });\n }\n\n async callText(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n maxTokens?: number,\n temperature?: number,\n ): Promise<LLMResponse> {\n type Client = import('../adapters/openrouter/client').OpenRouterClient;\n const client = await this.getClient<Client>();\n const resolved = this.resolveModel(model);\n\n const response = await this.apiCall(() =>\n client.chatCompletion({\n model: resolved,\n messages: [\n { role: 'system', content: systemPrompt },\n { role: 'user', content: userPrompt },\n ],\n max_tokens: maxTokens ?? 4096,\n ...(temperature !== undefined && { temperature }),\n }),\n );\n\n const text = response.choices[0]?.message.content ?? '';\n return {\n text,\n inputTokens: response.usage.prompt_tokens,\n outputTokens: response.usage.completion_tokens,\n sampling: { temperature: temperature ?? 'provider-default' },\n };\n }\n\n async callTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMToolDef[],\n toolChoice?: 'required' | 'auto',\n _scopedTools?: LLMToolDef[],\n ): Promise<LLMToolCallResponse> {\n type Client = import('../adapters/openrouter/client').OpenRouterClient;\n const client = await this.getClient<Client>();\n const resolved = this.resolveModel(model);\n\n const orTools = tools.map((t) => ({\n type: 'function' as const,\n function: { name: t.name, description: t.description, parameters: t.parameters },\n }));\n\n // Build messages — first call sends system prompt, subsequent calls reuse session\n if (this.sessionMessages.length === 0) {\n this.sessionMessages.push({ role: 'system', content: systemPrompt });\n }\n this.sessionMessages.push({ role: 'user', content: userPrompt });\n\n const response = await this.apiCall(() =>\n client.chatCompletion({\n model: resolved,\n messages: this.sessionMessages,\n tools: orTools,\n tool_choice: toolChoice ?? 'auto',\n }),\n );\n\n // Append assistant response to session history\n const choice = response.choices[0];\n if (choice?.message) {\n this.sessionMessages.push({\n role: 'assistant',\n content: choice.message.content,\n tool_calls: choice.message.tool_calls,\n });\n }\n\n const toolCalls = (choice?.message.tool_calls ?? []).map((tc) => ({\n id: tc.id,\n name: tc.function.name,\n input: JSON.parse(tc.function.arguments || '{}') as JsonObject,\n }));\n\n return {\n toolCalls,\n inputTokens: response.usage.prompt_tokens,\n outputTokens: response.usage.completion_tokens,\n };\n }\n\n override async sendToolResult(results: LLMToolResult[]): Promise<void> {\n // Append tool results to session history — proper chat contract\n for (const r of results) {\n this.sessionMessages.push({\n role: 'tool',\n tool_call_id: r.callId,\n content: r.result,\n });\n }\n }\n\n async callWithTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMTool[],\n maxTurns: number,\n ): Promise<LLMWithToolsResponse> {\n type Client = import('../adapters/openrouter/client').OpenRouterClient;\n const client = await this.getClient<Client>();\n const resolved = this.resolveModel(model);\n\n const orTools = tools.map((t) => ({\n type: 'function' as const,\n function: { name: t.name, description: t.description, parameters: t.parameters },\n }));\n\n type ORMessage = import('../adapters/openrouter/types').OpenRouterMessage;\n const messages: ORMessage[] = [\n { role: 'system', content: systemPrompt },\n { role: 'user', content: userPrompt },\n ];\n\n let totalInput = 0;\n let totalOutput = 0;\n let turnsUsed = 0;\n let finalText = '';\n\n for (let turn = 0; turn < maxTurns; turn++) {\n turnsUsed = turn + 1;\n\n const response = await this.apiCall(() =>\n client.chatCompletion({\n model: resolved,\n messages: messages as import('../adapters/openrouter/types').OpenRouterMessage[],\n tools: orTools,\n tool_choice: 'auto',\n }),\n );\n\n totalInput += response.usage.prompt_tokens;\n totalOutput += response.usage.completion_tokens;\n\n const choice = response.choices[0];\n if (!choice) break;\n\n if (choice.message.content) {\n finalText = choice.message.content;\n }\n\n const toolCalls = choice.message.tool_calls;\n if (!toolCalls || toolCalls.length === 0) break;\n\n messages.push({\n role: 'assistant',\n content: choice.message.content,\n tool_calls: toolCalls,\n });\n\n for (const tc of toolCalls) {\n const toolDef = tools.find((t) => t.name === tc.function.name);\n let resultText: string;\n if (!toolDef) {\n resultText = JSON.stringify({ error: `Tool '${tc.function.name}' not found` });\n } else {\n const args = JSON.parse(tc.function.arguments || '{}') as JsonObject;\n const result = await toolDef.handler(args);\n resultText = result.content.map((c) => c.text).join('\\n');\n }\n messages.push({ role: 'tool', tool_call_id: tc.id, content: resultText });\n }\n }\n\n return { text: finalText, inputTokens: totalInput, outputTokens: totalOutput, turnsUsed };\n }\n}\n\n// =============================================================================\n// Agent Registry\n// =============================================================================\n\n/**\n * Create a fresh agent instance for the given provider.\n * Each call returns a new instance — no shared state between callers.\n *\n * Accepts either a bare provider string (every pre-existing call\n * site — the agent falls back to reading its provider's env var(s)\n * directly) or a full {@link AgentConfig}, whose `routeOverride`\n * (when present) is threaded into the constructed agent so it never\n * touches `process.env`.\n */\nexport function createAgent(provider: AgentConfig['provider']): LLMAgent;\nexport function createAgent(config: AgentConfig): LLMAgent;\nexport function createAgent(providerOrConfig: AgentConfig['provider'] | AgentConfig): LLMAgent {\n const provider =\n typeof providerOrConfig === 'string' ? providerOrConfig : providerOrConfig.provider;\n const routeOverride =\n typeof providerOrConfig === 'string' ? undefined : providerOrConfig.routeOverride;\n const onRetry = typeof providerOrConfig === 'string' ? undefined : providerOrConfig.onRetry;\n switch (provider) {\n case 'anthropic':\n return new AnthropicAgent(routeOverride, onRetry);\n case 'openai':\n return new OpenAIAgent(routeOverride, onRetry);\n case 'google':\n return new GoogleAgent(routeOverride, onRetry);\n case 'openrouter':\n return new OpenRouterAgent(routeOverride, onRetry);\n }\n}\n\n/** Providers whose agent implements {@link VisionAgent}. */\nexport type VisionProvider = 'anthropic' | 'google';\n\n/**\n * Construct an agent for a multimodal (image + text) call. Same\n * threading contract as {@link createAgent} — `routeOverride` and\n * `onRetry` from the config reach the constructed agent — with the\n * provider narrowed to the ones whose SDK path supports vision input,\n * so the returned type carries `callVision` statically instead of\n * every caller re-proving it.\n */\nexport function createVisionAgent(\n config: AgentConfig & { provider: VisionProvider },\n): LLMAgent & VisionAgent {\n switch (config.provider) {\n case 'anthropic':\n return new AnthropicAgent(config.routeOverride, config.onRetry);\n case 'google':\n return new GoogleAgent(config.routeOverride, config.onRetry);\n }\n}\n\n// =============================================================================\n// Backward-compatible free functions\n// =============================================================================\n\nexport async function callLLM(\n config: AgentConfig,\n systemPrompt: string,\n userPrompt: string,\n maxTokens?: number,\n): Promise<LLMResponse> {\n const start = Date.now();\n const agent = createAgent(config);\n const result = await agent.callText(\n config.model,\n systemPrompt,\n userPrompt,\n maxTokens,\n config.temperature,\n );\n console.log(\n `[llm-router] ${config.provider}/${config.model} | ${Date.now() - start}ms | in=${result.inputTokens} out=${result.outputTokens}`,\n );\n return result;\n}\n\nexport async function callLLMWithTools(\n config: AgentConfig,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMTool[],\n maxTurns: number = 10,\n): Promise<LLMWithToolsResponse> {\n const start = Date.now();\n const agent = createAgent(config);\n const result = await agent.callWithTools(\n config.model,\n systemPrompt,\n userPrompt,\n tools,\n maxTurns,\n );\n console.log(\n `[llm-router] agentic ${config.provider}/${config.model} | ${Date.now() - start}ms | turns=${result.turnsUsed} | in=${result.inputTokens} out=${result.outputTokens}`,\n );\n return result;\n}\n\n","// packages/ui-gen/src/evaluation/evaluator.ts\n//\n// Unified, provider-agnostic UI evaluation.\n//\n// One evaluation function that works with Claude, OpenAI, and Google.\n// Routes to the correct API based on config.provider.\n//\n// Responsibilities (things self_check CANNOT verify):\n// - Visual design quality, hierarchy, composition\n// - Interaction polish (hover, transitions, animations)\n// - Prompt completeness (does it match what was requested?)\n// - Data rendering quality (not just present, but well-formatted)\n//\n// Does NOT re-check (already handled by self_check):\n// - Hardcoded hex colors (self_check catches these)\n// - Raw pixel values (self_check catches these)\n// - Wrong imports (self_check catches these)\n// - Missing Props interface (self_check catches these)\n// - Null safety (TypeChecker strictNullChecks catches these)\n\nimport type { EvaluationConfig, EvaluationContext, EvaluationResult, DimensionScores, EvaluationIssue } from './types';\nimport { createAgent } from '../harness/llm-router';\nimport type { LLMToolDef } from '../harness/llm-router';\n\n// ---------------------------------------------------------------------------\n// Evaluation tool (structured output via tool calling)\n// ---------------------------------------------------------------------------\n\nconst EVAL_TOOL: LLMToolDef = {\n name: \"submit_evaluation\",\n description: \"Submit the UI quality evaluation scores and feedback.\",\n parameters: {\n type: \"object\",\n properties: {\n completeness: { type: \"number\", description: \"0-100: Does the component implement ALL features from the prompt?\" },\n visualDesign: { type: \"number\", description: \"0-100: Layout, visual hierarchy, spacing, polished appearance\" },\n interactivity: { type: \"number\", description: \"0-100: Hover/focus states, transitions, form validation, loading states\" },\n accessibility: { type: \"number\", description: \"0-100: Semantic HTML, ARIA labels, keyboard navigation, contrast\" },\n codeQuality: { type: \"number\", description: \"0-100: Clean structure, state management, event handlers, defaults\" },\n issues: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n dimension: { type: \"string\" },\n severity: { type: \"string\", description: \"critical, major, or minor\" },\n description: { type: \"string\" },\n fix: { type: \"string\" },\n },\n required: [\"dimension\", \"severity\", \"description\", \"fix\"],\n },\n description: \"List of specific issues found\",\n },\n critique: { type: \"string\", description: \"2-3 sentences: what's good and what needs improvement\" },\n },\n required: [\"completeness\", \"visualDesign\", \"interactivity\", \"accessibility\", \"codeQuality\", \"issues\", \"critique\"],\n },\n};\n\n// ---------------------------------------------------------------------------\n// Unified evaluation prompt\n// ---------------------------------------------------------------------------\n\nconst EVAL_SYSTEM_PROMPT = `You are a UI quality evaluator for ggui-generated React components.\n\nThe code has ALREADY passed automated checks for:\n- Design token usage (no hardcoded colors/spacing)\n- Import constraints (only react + @ggui-ai/design)\n- TypeScript types (Props interface, null safety)\n- Compilation + render smoke test\n\nDo NOT penalize for things the automated checks already cover. Focus ONLY on quality aspects that require human judgment.\n\n## Dimensions (score each 0-100)\n\n1. **completeness** (25%): Does the component implement ALL features from the original prompt? Are all requested UI elements present? Does it use ALL props from the contract (especially nested fields in arrays)?\n\n2. **visualDesign** (25%): Is the layout well-composed? Clear visual hierarchy (headings > subheadings > body)? Good use of whitespace and spacing? Proper use of primitive variants (primary for CTAs, outline for secondary, ghost for tertiary)? Professional, polished appearance?\n\n3. **interactivity** (20%): Are interactive elements polished? Hover/focus states on buttons and links? Smooth transitions (200ms ease)? Form validation with inline errors? Disabled states during submission? Loading indicators? Keyboard navigation?\n\n4. **accessibility** (15%): Semantic HTML (headings, lists, landmarks)? ARIA labels on inputs and interactive elements? Keyboard-navigable? Focus management? Readable text contrast?\n\n5. **codeQuality** (15%): Clean component structure? Proper state management? Event handlers wired correctly? No unnecessary re-renders? Default prop values for all optional props?\n\n## Scoring Scale\n\n- 90-100: Production-ready. Polished layout, smooth interactions, full accessibility, clean code.\n- 80-89: Good. Minor improvements needed (a missing hover state, slightly tight spacing).\n- 70-79: Acceptable. Works correctly but lacks polish (no transitions, generic layout).\n- 60-69: Below standard. Missing features, poor layout, no interactive states.\n- Below 60: Broken or fundamentally incomplete.\n\nCall the \\`submit_evaluation\\` tool with your scores, issues, and critique.`;\n\n// ---------------------------------------------------------------------------\n// Provider-agnostic evaluation\n// ---------------------------------------------------------------------------\n\n/**\n * Run a single evaluation round using any LLM provider.\n *\n * Provider-agnostic: routes to Claude, OpenAI, or Google API based on config.provider.\n * Falls back to Claude if no provider is specified.\n */\nexport async function runEvaluation(\n context: EvaluationContext,\n config: EvaluationConfig,\n): Promise<EvaluationResult> {\n const providerName = config.provider ?? 'claude';\n const model = config.model || getDefaultEvalModel(providerName);\n const routerProvider = providerName === 'claude' ? 'anthropic' as const : providerName as 'openai' | 'google' | 'openrouter';\n\n const userPrompt = buildEvalUserPrompt(context);\n const agent = createAgent(routerProvider);\n\n // Use tool calling for structured output — no JSON parsing needed\n const response = await agent.callTools(\n model,\n EVAL_SYSTEM_PROMPT,\n userPrompt,\n [EVAL_TOOL],\n 'required',\n );\n\n const call = response.toolCalls[0];\n if (!call) {\n throw new Error('Evaluator did not return a tool call');\n }\n\n const raw = call.input as Record<string, unknown>;\n return buildEvalResult(raw, config.passThreshold, response.inputTokens, response.outputTokens);\n}\n\n// ---------------------------------------------------------------------------\n// (Provider routing removed — uses LLM router via createAgent/callTools)\n// ---------------------------------------------------------------------------\n\n\n\n// ---------------------------------------------------------------------------\n// User prompt builder\n// ---------------------------------------------------------------------------\n\nfunction buildEvalUserPrompt(context: EvaluationContext): string {\n const parts: string[] = [];\n\n parts.push(`## Original Request\\n${context.originalPrompt}`);\n\n if (context.designContext) {\n parts.push(`## App Design Context\\n${context.designContext}`);\n }\n\n parts.push(`## Source Code\\n\\`\\`\\`tsx\\n${context.sourceCode.slice(0, 10000)}\\n\\`\\`\\``);\n\n return parts.join('\\n\\n');\n}\n\n// ---------------------------------------------------------------------------\n// Response parsing\n// ---------------------------------------------------------------------------\n\n/**\n * Build EvaluationResult from tool call input (structured data, no JSON parsing).\n */\nfunction buildEvalResult(\n raw: Record<string, unknown>,\n passThreshold: number,\n inputTokens: number,\n outputTokens: number,\n): EvaluationResult {\n const dimensions: DimensionScores = {\n completeness: (raw.completeness as number) ?? 0,\n visualPolish: (raw.visualDesign as number) ?? (raw.visualPolish as number) ?? 0,\n interactivity: (raw.interactivity as number) ?? 0,\n accessibility: (raw.accessibility as number) ?? 0,\n codeQuality: (raw.codeQuality as number) ?? 0,\n };\n\n const weights = {\n completeness: 0.25,\n visualPolish: 0.25,\n interactivity: 0.20,\n accessibility: 0.15,\n codeQuality: 0.15,\n };\n\n const finalScore = Math.round(\n dimensions.completeness * weights.completeness +\n dimensions.visualPolish * weights.visualPolish +\n dimensions.interactivity * weights.interactivity +\n dimensions.accessibility * weights.accessibility +\n dimensions.codeQuality * weights.codeQuality,\n );\n\n const rawIssues = (raw.issues ?? []) as Array<Record<string, string>>;\n const issues: EvaluationIssue[] = rawIssues.map((i) => ({\n dimension: i.dimension || 'unknown',\n severity: (i.severity as 'critical' | 'major' | 'minor') || 'minor',\n description: i.description || '',\n fix: i.fix || '',\n }));\n\n return {\n passed: finalScore >= passThreshold,\n finalScore,\n dimensions,\n issues,\n critique: raw.critique as string,\n inputTokens,\n outputTokens,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Default models per provider (cheapest/fastest)\n// ---------------------------------------------------------------------------\n\nfunction getDefaultEvalModel(provider: string): string {\n switch (provider) {\n case 'claude': return 'claude-haiku-4-5-20251001';\n case 'openai': return 'gpt-5.6-luna';\n case 'google': return 'gemini-3.5-flash-lite';\n default: return 'claude-haiku-4-5-20251001';\n }\n}\n","// packages/ui-gen/src/evaluation/message-parsing.ts\n\n/**\n * Shared message parsing utilities for extracting structured data from\n * Claude Agent SDK `query()` messages.\n *\n * These functions are used by evaluator.ts, loop.ts, and generator.ts\n * to capture tool results, source code, and session state from the\n * SDK message stream.\n */\n\nimport type { EvaluationResult } from './types';\n\n// ── SDK message type aliases ────────────────────────────────────────\n\n/** A single SDK message from the `query()` async iterator. */\nexport type SdkMessage = Record<string, unknown>;\n\n/** Content block inside a user or assistant message. */\ntype ContentBlock = Record<string, unknown>;\n\n/** A text item inside a tool_result content array. */\ninterface TextItem {\n type?: string;\n text?: string;\n}\n\n// ── Helpers ─────────────────────────────────────────────────────────\n\n/**\n * Extract tool_result text items from a user-type SDK message.\n * Returns an empty array if the message isn't a user message or has no tool results.\n */\nexport function extractToolResultTexts(message: SdkMessage): string[] {\n if ((message.type as string) !== 'user') return [];\n\n const texts: string[] = [];\n const innerMessage = message.message as SdkMessage | undefined;\n const messageContent = innerMessage?.content as ContentBlock[] | undefined;\n\n if (!Array.isArray(messageContent)) return texts;\n\n for (const contentItem of messageContent) {\n if (contentItem.type === 'tool_result') {\n const toolResultContent = contentItem.content as TextItem[] | undefined;\n if (Array.isArray(toolResultContent)) {\n for (const textItem of toolResultContent) {\n if (textItem.type === 'text' && textItem.text) {\n texts.push(textItem.text);\n }\n }\n }\n }\n }\n\n return texts;\n}\n\n// ── EvaluationResult extraction ─────────────────────────────────────\n\n/**\n * Extract an `EvaluationResult` from an array of SDK messages.\n *\n * Scans for user messages containing a tool_result with JSON that has\n * `finalScore` (number) and `dimensions` fields. Returns the last\n * matching result, or `undefined` if none found.\n *\n * Used by: evaluator.ts\n */\nexport function extractEvalResult(messages: SdkMessage[]): EvaluationResult | undefined {\n let evalResult: EvaluationResult | undefined;\n\n for (const message of messages) {\n const msgStr = JSON.stringify(message);\n if (!msgStr.includes('finalScore') || !msgStr.includes('dimensions')) continue;\n\n for (const text of extractToolResultTexts(message)) {\n if (!text.includes('finalScore')) continue;\n try {\n const parsed = JSON.parse(text) as EvaluationResult;\n if (typeof parsed.finalScore === 'number' && parsed.dimensions) {\n evalResult = parsed;\n }\n } catch {\n // Not valid JSON\n }\n }\n }\n\n return evalResult;\n}\n\n// ── compiledCode extraction ─────────────────────────────────────────\n\n/**\n * Extract `compiledCode` from a single SDK message.\n *\n * Tries two strategies:\n * 1. Regex extraction from the full serialized message (fallback)\n * 2. Structured extraction from user/tool_result content\n *\n * Returns the extracted code or `undefined`.\n *\n * Used by: loop.ts, generator.ts\n */\nexport function extractCompiledCodeFromMessage(message: SdkMessage): string | undefined {\n const msgStr = JSON.stringify(message);\n if (!msgStr.includes('compiledCode')) return undefined;\n\n // Strategy 1: Regex fallback (catches compiledCode in any position)\n let regexCode: string | undefined;\n const match = msgStr.match(/\"compiledCode\"\\s*:\\s*\"([^\"\\\\]*(\\\\.[^\"\\\\]*)*)\"/);\n if (match) {\n try {\n regexCode = JSON.parse(`\"${match[1]}\"`);\n } catch {\n // Not parseable\n }\n }\n\n // Strategy 2: Structured extraction from tool_result\n for (const text of extractToolResultTexts(message)) {\n if (!text.includes('compiledCode')) continue;\n try {\n const parsed = JSON.parse(text);\n if (parsed.success && parsed.compiledCode) {\n return parsed.compiledCode; // Prefer structured over regex\n }\n } catch {\n // Not JSON\n }\n }\n\n return regexCode;\n}\n\n// ── sourceCode extraction ───────────────────────────────────────────\n\n/**\n * Extract source code from an assistant's Write tool_use message.\n *\n * Looks for `tool_use` blocks with `name === 'Write'` and returns\n * the `input.content` string. If multiple Write calls exist, returns\n * the last one (the final version).\n *\n * Used by: loop.ts, generator.ts\n */\nexport function extractSourceCodeFromMessage(message: SdkMessage): string | undefined {\n if ((message.type as string) !== 'assistant') return undefined;\n\n let sourceCode: string | undefined;\n const betaMessage = message.message as SdkMessage | undefined;\n const content = betaMessage?.content as ContentBlock[] | undefined;\n\n if (!Array.isArray(content)) return undefined;\n\n for (const block of content) {\n if (block.type === 'tool_use' && block.name === 'Write') {\n const input = block.input as { content?: string } | undefined;\n if (input?.content) {\n sourceCode = input.content;\n }\n }\n }\n\n return sourceCode;\n}\n\n// ── Batch helpers ───────────────────────────────────────────────────\n\n/**\n * Scan all messages for the last compiledCode value.\n *\n * Convenience wrapper for tests and one-shot extraction.\n */\nexport function extractCompiledCode(messages: SdkMessage[]): string | undefined {\n let compiledCode: string | undefined;\n for (const message of messages) {\n const code = extractCompiledCodeFromMessage(message);\n if (code) compiledCode = code;\n }\n return compiledCode;\n}\n\n/**\n * Scan all messages for the last sourceCode from Write tool_use.\n *\n * Convenience wrapper for tests and one-shot extraction.\n */\nexport function extractSourceCode(messages: SdkMessage[]): string | undefined {\n let sourceCode: string | undefined;\n for (const message of messages) {\n const code = extractSourceCodeFromMessage(message);\n if (code) sourceCode = code;\n }\n return sourceCode;\n}\n","// packages/ui-gen/src/evaluation/prompts.ts\n\nimport type { EvaluationResult } from './types';\n\n/**\n * System prompt for the evaluator agent.\n * Static/cacheable — defines rubric, dimensions, and workflow.\n */\nexport function getEvaluatorSystemPrompt(): string {\n return `# UI Component Evaluator\n\nYou evaluate ggui-generated React components. You MUST call the \\`evaluate_score\\` tool — this is your only task. Do NOT write any text before calling the tool. Analyze the code silently, then immediately call \\`evaluate_score\\` with your scores and issues.\n\n## Dimensions (score each 0-100)\n\n- **Completeness**: All requested features present and functional\n- **Visual Polish**: Layout, spacing, design token usage, DESIGN.md compliance\n- **Interactivity**: Event handlers, state management, callbacks working\n- **Accessibility**: ARIA labels, keyboard nav, semantic HTML, contrast\n- **Code Quality**: Clean structure, proper primitives, no dead code, single default export GeneratedComponent\n\n## Scoring Scale\n\n- 90-100: Excellent, production-ready\n- 70-89: Good, minor improvements possible\n- 50-69: Needs work\n- 30-49: Poor\n- 0-29: Fundamentally broken\n\n## Issue Severities\n\n- **critical**: Missing core features, broken functionality, security problems\n- **major**: Poor accessibility, layout bugs, missing error handling\n- **minor**: Style inconsistencies, naming conventions\n\nIMPORTANT: Call the \\`evaluate_score\\` tool immediately. Do not write analysis text first.`;\n}\n\n/**\n * Build the fix prompt to resume the generator session with evaluation feedback.\n * Issues are grouped by severity (critical first) so the generator prioritizes correctly.\n */\nexport function buildFixPrompt(evalResult: EvaluationResult, originalPrompt: string): string {\n let prompt = `## Evaluation Feedback — Fix Required\n\nYour generated component was evaluated and scored **${evalResult.finalScore}/100** (threshold: 70).\n\n### Scores\n| Dimension | Score |\n|-----------|-------|\n| Completeness | ${evalResult.dimensions.completeness} |\n| Visual Polish | ${evalResult.dimensions.visualPolish} |\n| Interactivity | ${evalResult.dimensions.interactivity} |\n| Accessibility | ${evalResult.dimensions.accessibility} |\n| Code Quality | ${evalResult.dimensions.codeQuality} |\n`;\n\n if (evalResult.critique) {\n prompt += `\n### Overall Critique\n${evalResult.critique}\n`;\n }\n\n // Group issues by severity\n const critical = evalResult.issues.filter((i) => i.severity === 'critical');\n const major = evalResult.issues.filter((i) => i.severity === 'major');\n const minor = evalResult.issues.filter((i) => i.severity === 'minor');\n\n if (critical.length > 0) {\n prompt += `\n### Critical Issues (must fix)\n${critical.map((i) => `- **[${i.dimension}]** ${i.description}\\n Fix: ${i.fix}`).join('\\n')}\n`;\n }\n\n if (major.length > 0) {\n prompt += `\n### Major Issues (should fix)\n${major.map((i) => `- **[${i.dimension}]** ${i.description}\\n Fix: ${i.fix}`).join('\\n')}\n`;\n }\n\n if (minor.length > 0) {\n prompt += `\n### Minor Issues (nice to fix)\n${minor.map((i) => `- **[${i.dimension}]** ${i.description}\\n Fix: ${i.fix}`).join('\\n')}\n`;\n }\n\n prompt += `\n### Instructions\n\nFix the issues above, prioritizing critical and major issues. The original request was:\n\n> ${originalPrompt}\n\nAfter fixing, re-validate and re-compile the component. Write the updated code to Component.tsx, validate it, and compile it.`;\n\n return prompt;\n}\n","// packages/ui-gen/src/evaluation/types.ts\n\n/**\n * Per-dimension quality scores from the evaluator (0-100 each).\n */\nexport interface DimensionScores {\n /** How well the component fulfills the original prompt requirements */\n completeness: number;\n /** Visual quality: layout, typography, spacing, color usage */\n visualPolish: number;\n /** Interaction quality: hover states, transitions, form validation */\n interactivity: number;\n /** Accessibility: ARIA labels, keyboard navigation, contrast ratios */\n accessibility: number;\n /** Code quality: TypeScript types, clean structure, no anti-patterns */\n codeQuality: number;\n}\n\n/**\n * A specific issue found during evaluation.\n */\nexport interface EvaluationIssue {\n /** Which quality dimension this issue belongs to */\n dimension: string;\n /** Human-readable description of what is wrong */\n description: string;\n /** Severity level: critical blocks shipping, major degrades quality, minor is a polish issue */\n severity: 'critical' | 'major' | 'minor';\n /** Suggested fix for the agent to apply */\n fix: string;\n}\n\n/**\n * Result of a single evaluation round.\n */\nexport interface EvaluationResult {\n /** Whether the component passed the quality threshold */\n passed: boolean;\n /** Weighted average score across all dimensions (0-100) */\n finalScore: number;\n /** Per-dimension score breakdown */\n dimensions: DimensionScores;\n /** Specific issues identified in this round */\n issues: EvaluationIssue[];\n /** Free-form critique text from the evaluator LLM */\n critique?: string;\n /** Input tokens consumed by the evaluation LLM call */\n inputTokens?: number;\n /** Output tokens consumed by the evaluation LLM call */\n outputTokens?: number;\n}\n\n/**\n * Quality metadata attached to every generated component\n */\nexport interface QualityMetadata {\n /** Number of evaluation rounds run (0 = strict/no eval) */\n evaluationRounds: number;\n /** Final average score 0-100 */\n finalScore: number;\n /** Per-dimension breakdown */\n dimensions: DimensionScores;\n /** Whether the component passed (score >= threshold) */\n passed: boolean;\n /** Model used for evaluation */\n evaluatorModel: string;\n /** Total evaluation loop time in ms */\n evaluationTimeMs: number;\n /** S3 keys for screenshots (creative only) */\n screenshots?: string[];\n}\n\n/** Hard ceiling for evaluation rounds — never exceed this regardless of config */\nexport const MAX_EVAL_ROUNDS_HARD_LIMIT = 10;\n\n/** Default (soft) max rounds for the balanced strategy */\nexport const DEFAULT_EVAL_MAX_ROUNDS = 10;\n\n/**\n * Configuration for the evaluation loop\n */\nexport interface EvaluationConfig {\n /** Whether evaluation is enabled */\n enabled: boolean;\n /** Model to use for evaluation (default: provider's default) */\n model?: string;\n /** LLM provider for evaluation (default: same as generation provider) */\n provider?: 'claude' | 'openai' | 'google' | 'openrouter';\n /** Minimum average score to pass (default: 70) */\n passThreshold: number;\n /** Maximum evaluation rounds (soft max: 3, hard limit: 5) */\n maxRounds?: number;\n /** Budget cap per evaluation round in USD */\n maxBudgetPerEval?: number;\n /** Budget cap per fix round in USD */\n maxBudgetPerFix?: number;\n}\n\n/**\n * Context passed to the evaluator\n */\nexport interface EvaluationContext {\n /** TSX source code written by the generator */\n sourceCode: string;\n /** Compiled JavaScript output */\n compiledCode: string;\n /** Original user prompt */\n originalPrompt: string;\n /** DESIGN.md content (if present) */\n designContext?: string;\n /** CSS variable tokens for the app theme */\n themeTokens: string;\n}\n","// packages/ui-gen/src/evaluation/loop.ts\n\nimport { query, type McpServerConfig } from '@anthropic-ai/claude-agent-sdk';\nimport { runEvaluation } from './evaluator';\nimport {\n extractCompiledCodeFromMessage,\n extractSourceCodeFromMessage,\n} from './message-parsing';\nimport { buildFixPrompt } from './prompts';\nimport {\n MAX_EVAL_ROUNDS_HARD_LIMIT,\n} from './types';\nimport type {\n EvaluationConfig,\n EvaluationContext,\n EvaluationResult,\n QualityMetadata,\n} from './types';\nimport type { SdkMessage } from './message-parsing';\n\n/**\n * Options for running the evaluation loop.\n *\n * Controls the evaluate-fix-re-evaluate cycle that improves generated\n * component quality until it passes or the round limit is reached.\n */\nexport interface EvaluationLoopOptions {\n /** Session ID of the generator to resume for fixes */\n generatorSessionId: string;\n /** Evaluation context (code, prompt, design, theme) */\n context: EvaluationContext;\n /** Evaluation configuration (thresholds, budgets, round limits) */\n config: EvaluationConfig;\n /** Progress callback for evaluating/fixing status updates */\n onProgress?: (event: { type: 'evaluating' | 'fixing'; round: number }) => void;\n /** Generator context to pass when resuming the session for fixes */\n generatorOptions?: {\n /** Working directory for the generator session */\n cwd?: string;\n /** MCP servers available to the fix agent */\n mcpServers?: Record<string, McpServerConfig>;\n /** Tools the fix agent is allowed to call */\n allowedTools?: string[];\n /** LLM model for fix rounds */\n model?: string;\n /** Environment variables (includes BYOK credentials) */\n env?: Record<string, string>;\n /** Stderr capture callback for debugging */\n stderr?: (data: string) => void;\n };\n}\n\n/**\n * Result of the evaluation loop.\n *\n * Contains the final (possibly fixed) code, quality scores, and\n * the evaluation history from each round.\n */\nexport interface EvaluationLoopResult {\n /** Final compiled code (may be updated by fix rounds) */\n finalCode: string;\n /** Final source code (may be updated by fix rounds) */\n finalSourceCode?: string;\n /** Quality metadata for the generation result */\n qualityMetadata: QualityMetadata;\n /** All evaluation results from each round */\n evaluationResults: EvaluationResult[];\n}\n\n/**\n * Run the evaluation loop: evaluate -> fix -> re-evaluate (up to maxRounds).\n *\n * If the first evaluation passes, returns immediately.\n * If it fails, resumes the generator session with critique feedback,\n * captures the fixed code, and re-evaluates. Repeats until the score\n * passes or the round limit is reached.\n *\n * @param options - Evaluation loop configuration and callbacks\n * @returns The final code, quality metadata, and evaluation history\n */\nexport async function runEvaluationLoop(\n options: EvaluationLoopOptions\n): Promise<EvaluationLoopResult> {\n const { generatorSessionId, context, config, onProgress, generatorOptions } = options;\n const startTime = Date.now();\n const evaluationResults: EvaluationResult[] = [];\n\n let currentCode = context.compiledCode;\n let currentSourceCode: string | undefined = context.sourceCode;\n let round = 0;\n const maxRounds = Math.min(config.maxRounds ?? 3, MAX_EVAL_ROUNDS_HARD_LIMIT);\n\n while (round < maxRounds) {\n round++;\n\n // --- Evaluate ---\n onProgress?.({ type: 'evaluating', round });\n console.log(`[eval] Round ${round}: evaluating...`);\n\n const evalContext: EvaluationContext = {\n ...context,\n compiledCode: currentCode,\n sourceCode: currentSourceCode || context.sourceCode,\n };\n const evalResult = await runEvaluation(evalContext, config);\n evaluationResults.push(evalResult);\n\n console.log(\n `[eval] Round ${round}: score=${evalResult.finalScore}, passed=${evalResult.passed}, issues=${evalResult.issues.length}`\n );\n\n // If passed or last round, we're done\n if (evalResult.passed || round >= maxRounds) {\n break;\n }\n\n // --- Fix ---\n onProgress?.({ type: 'fixing', round });\n console.log(`[eval] Round ${round}: fixing...`);\n\n const fixPrompt = buildFixPrompt(evalResult, context.originalPrompt);\n\n // Get custom CLI path from environment (for Docker deployments)\n const cliPath = process.env.CLAUDE_WRAPPER_PATH;\n\n // Build environment — use BYOK-enriched env from generator if provided\n const env: Record<string, string> = {};\n if (generatorOptions?.env) {\n Object.assign(env, generatorOptions.env);\n } else {\n for (const [key, value] of Object.entries(process.env)) {\n if (value !== undefined) {\n env[key] = value;\n }\n }\n }\n\n let fixedCompiledCode: string | undefined;\n let fixedSourceCode: string | undefined;\n\n for await (const message of query({\n prompt: fixPrompt,\n options: {\n resume: generatorSessionId,\n maxTurns: 15,\n maxBudgetUsd: config.maxBudgetPerFix,\n env,\n permissionMode: 'bypassPermissions',\n allowDangerouslySkipPermissions: true,\n ...(cliPath && { pathToClaudeCodeExecutable: cliPath }),\n ...(generatorOptions?.cwd && { cwd: generatorOptions.cwd }),\n ...(generatorOptions?.mcpServers && { mcpServers: generatorOptions.mcpServers }),\n ...(generatorOptions?.allowedTools && { allowedTools: generatorOptions.allowedTools }),\n ...(generatorOptions?.model && { model: generatorOptions.model }),\n ...(generatorOptions?.stderr && { stderr: generatorOptions.stderr }),\n },\n })) {\n const msg = message as SdkMessage;\n\n // Capture fixed compiledCode\n const compiled = extractCompiledCodeFromMessage(msg);\n if (compiled) fixedCompiledCode = compiled;\n\n // Capture source code from Write tool\n const source = extractSourceCodeFromMessage(msg);\n if (source) fixedSourceCode = source;\n }\n\n // Update current code if fix produced new output\n if (fixedCompiledCode) {\n currentCode = fixedCompiledCode;\n console.log(`[eval] Round ${round}: fixed code captured (${currentCode.length} bytes)`);\n }\n if (fixedSourceCode) {\n currentSourceCode = fixedSourceCode;\n }\n }\n\n const lastResult = evaluationResults[evaluationResults.length - 1];\n const evaluationTimeMs = Date.now() - startTime;\n\n const qualityMetadata: QualityMetadata = {\n evaluationRounds: evaluationResults.length,\n finalScore: lastResult.finalScore,\n dimensions: lastResult.dimensions,\n passed: lastResult.passed,\n evaluatorModel: config.model ?? 'default',\n evaluationTimeMs,\n };\n\n return {\n finalCode: currentCode,\n finalSourceCode: currentSourceCode,\n qualityMetadata,\n evaluationResults,\n };\n}\n","// packages/ui-gen/src/evaluation/mcp-server.ts\n\nimport { createSdkMcpServer, tool } from '@anthropic-ai/claude-agent-sdk';\nimport { z } from 'zod';\nimport type { EvaluationIssue, EvaluationResult } from './types';\n\n/**\n * Input args for the evaluate_score computation.\n * Extracted so unit tests can call the real logic directly.\n */\nexport interface EvaluateScoreInput {\n completeness: number;\n visualPolish: number;\n interactivity: number;\n accessibility: number;\n codeQuality: number;\n issues: EvaluationIssue[];\n critique?: string;\n}\n\n/**\n * Core scoring logic — extracted from the tool handler so it can be\n * unit-tested directly without going through MCP protocol.\n */\nexport function computeEvaluationScore(\n args: EvaluateScoreInput,\n passThreshold: number\n): EvaluationResult {\n const scores = [\n args.completeness,\n args.visualPolish,\n args.interactivity,\n args.accessibility,\n args.codeQuality,\n ];\n const average = scores.reduce((a, b) => a + b, 0) / scores.length;\n const finalScore = Math.round(average * 10) / 10;\n const passed = finalScore >= passThreshold;\n\n return {\n passed,\n finalScore,\n dimensions: {\n completeness: args.completeness,\n visualPolish: args.visualPolish,\n interactivity: args.interactivity,\n accessibility: args.accessibility,\n codeQuality: args.codeQuality,\n },\n issues: args.issues,\n ...(args.critique && { critique: args.critique }),\n };\n}\n\n/**\n * Create the evaluation MCP server with the evaluate_score tool.\n *\n * The evaluator LLM provides qualitative scores per dimension.\n * This tool handles the arithmetic (average, pass/fail) so the LLM\n * doesn't need to do math.\n */\nexport function createEvaluationToolsServer(passThreshold = 70) {\n return createSdkMcpServer({\n name: 'eval-tools',\n version: '1.0.0',\n tools: [\n tool(\n 'evaluate_score',\n 'Compute evaluation score from dimension ratings. Call this after analyzing the component code against all 5 dimensions.',\n {\n completeness: z.number().min(0).max(100).describe('Score for feature completeness (0-100)'),\n visualPolish: z.number().min(0).max(100).describe('Score for visual polish and design (0-100)'),\n interactivity: z.number().min(0).max(100).describe('Score for interactivity and state management (0-100)'),\n accessibility: z.number().min(0).max(100).describe('Score for accessibility (ARIA, keyboard nav, contrast) (0-100)'),\n codeQuality: z.number().min(0).max(100).describe('Score for code quality and structure (0-100)'),\n issues: z.array(\n z.object({\n dimension: z.string().describe('Which dimension this issue affects'),\n description: z.string().describe('What the issue is'),\n severity: z.enum(['critical', 'major', 'minor']).describe('Issue severity'),\n fix: z.string().describe('How to fix this issue'),\n })\n ).describe('List of specific issues found'),\n critique: z.string().optional().describe('Optional overall critique summary'),\n },\n async (args) => {\n const result = computeEvaluationScore(args, passThreshold);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n ),\n ],\n });\n}\n","// packages/ui-gen/src/evaluation/axis-checks/helpers.ts\n//\n// Shared contract inspection + source-scan helpers used by axis checks.\n// Ported from the retired mode-checks/ modules.\n\nimport type { ActionEntry, DataContract, JsonObject, JsonValue } from \"@ggui-ai/protocol\";\nimport {\n HOOK_NAME_RE,\n listContractGadgets,\n STDLIB_GADGETS_PACKAGE,\n} from \"@ggui-ai/protocol\";\nimport type { EvalIssue } from \"../types-public.js\";\n\n// =============================================================================\n// Contract shape helpers\n// =============================================================================\n\nexport interface PropShape {\n type?: string;\n required?: boolean;\n items?: { type?: string; properties?: Record<string, unknown> };\n schema?: {\n type?: string;\n items?: { type?: string; properties?: Record<string, unknown> };\n };\n}\n\nexport interface EntityCollection {\n name: string;\n idField: string;\n}\n\nexport interface SubmitAction {\n name: string;\n payloadKeys: string[];\n}\n\nconst ID_FIELD_CANDIDATES = [\"id\", \"uuid\", \"symbol\", \"key\", \"slug\", \"code\"];\n\nfunction getItemsProperties(p: PropShape): Record<string, unknown> | undefined {\n return p.items?.properties ?? p.schema?.items?.properties;\n}\n\nfunction inferIdField(itemProps: Record<string, unknown> | undefined): string {\n if (!itemProps) return \"id\";\n for (const cand of ID_FIELD_CANDIDATES) {\n if (cand in itemProps) return cand;\n }\n for (const [k, v] of Object.entries(itemProps)) {\n const vv = v as { type?: string; schema?: { type?: string } } | undefined;\n if (vv?.type === \"string\" || vv?.schema?.type === \"string\") return k;\n }\n return \"id\";\n}\n\nexport function getRequiredPropNames(contract?: DataContract): string[] {\n const propsField = contract?.propsSpec as\n | { properties?: Record<string, PropShape> }\n | undefined;\n const properties = propsField?.properties ?? {};\n return Object.entries(properties)\n .filter(([, p]) => p && typeof p === \"object\" && p.required === true)\n .map(([name]) => name);\n}\n\nexport function getActionNames(contract?: DataContract): string[] {\n return Object.keys(contract?.actionSpec ?? {});\n}\n\nexport function getStreamEventNames(contract?: DataContract): string[] {\n return Object.keys(contract?.streamSpec ?? {});\n}\n\n/**\n * Returns the local BINDING names the boilerplate emits for every\n * HOOK gadget the contract declares — `useGeolocation` → `geolocation`\n * (strip the `use` prefix, lowercase the first char). The wire\n * `clientCapabilities.gadgets` is package-keyed and carries only the\n * export NAME, not a separate binding name, so the binding is derived\n * here exactly as the boilerplate generator derives it.\n *\n * Component gadgets are excluded — they are rendered as JSX, not bound\n * to a `const`, so the `const <name> = …()` axis checks don't apply.\n *\n * The agentCapabilities.tools catalog has no parallel helper —\n * agent-side tools aren't component-side, so the axis checks don't\n * scan source for agent-tool bindings.\n */\nexport function getGadgetNames(contract?: DataContract): string[] {\n if (!contract) return [];\n return listContractGadgets(contract)\n .filter((use) => HOOK_NAME_RE.test(use.name))\n .map((use) =>\n use.name.length > 3\n ? use.name.charAt(3).toLowerCase() + use.name.slice(4)\n : use.name,\n );\n}\n\n/**\n * Like {@link getGadgetNames} but restricted to the first-party\n * `@ggui-ai/gadgets` stdlib package — the built-in browser capabilities\n * (`useGeolocation`, `useCamera`, …) that carry the `idle → prompting →\n * active` lifecycle and therefore need a `.start()` invocation.\n *\n * Registered third-party gadgets (e.g. `useBoardState` from\n * `@example/gadget-board`) are plain data hooks: the runtime resolves\n * them without a user gesture, so the `.start()` axis check must NOT\n * fire on them.\n */\nexport function getStdlibGadgetNames(contract?: DataContract): string[] {\n if (!contract) return [];\n return listContractGadgets(contract)\n .filter(\n (use) =>\n use.package === STDLIB_GADGETS_PACKAGE && HOOK_NAME_RE.test(use.name),\n )\n .map((use) =>\n use.name.length > 3\n ? use.name.charAt(3).toLowerCase() + use.name.slice(4)\n : use.name,\n );\n}\n\nexport function getEntityCollections(contract?: DataContract): EntityCollection[] {\n const propsField = contract?.propsSpec as\n | { properties?: Record<string, unknown> }\n | undefined;\n const properties = propsField?.properties ?? {};\n const entities: EntityCollection[] = [];\n for (const [name, p] of Object.entries(properties)) {\n if (!p || typeof p !== \"object\") continue;\n const pp = p as PropShape;\n const type = pp.type ?? pp.schema?.type;\n const items = pp.items ?? pp.schema?.items;\n if (type === \"array\" && items?.type === \"object\") {\n entities.push({ name, idField: inferIdField(getItemsProperties(pp)) });\n }\n }\n return entities;\n}\n\nfunction singularize(name: string): string {\n if (name.endsWith(\"ies\")) return name.slice(0, -3) + \"y\";\n if (name.endsWith(\"ses\")) return name.slice(0, -2);\n if (name.endsWith(\"s\") && !name.endsWith(\"ss\")) return name.slice(0, -1);\n return name;\n}\n\n/**\n * Entity collections that are actually mutated (referenced by a stream\n * event or by an action payload's entity-id key). Static reference lists\n * (e.g., kanban's `columns`) are excluded so they don't trigger\n * \"must be in useState\" false positives.\n */\nexport function getMutatedEntityCollections(\n contract: DataContract | undefined,\n allEntities: EntityCollection[],\n): EntityCollection[] {\n if (!contract) return allEntities;\n\n const actionSpec = contract.actionSpec ?? {};\n const streamSpec = contract.streamSpec ?? {};\n\n const hasStreams = Object.keys(streamSpec).length > 0;\n\n const referencedIdKeys = new Set<string>();\n for (const action of Object.values(actionSpec) as ActionEntry[]) {\n const ex = action.example;\n if (!ex || typeof ex !== \"object\" || Array.isArray(ex)) continue;\n for (const key of Object.keys(ex as JsonObject)) {\n if (key === \"id\" || key === \"key\" || key === \"index\") {\n referencedIdKeys.add(\"id\");\n referencedIdKeys.add(\"key\");\n referencedIdKeys.add(\"index\");\n } else if (/Id$/.test(key)) {\n referencedIdKeys.add(key.slice(0, -2).toLowerCase());\n }\n }\n }\n\n const mutated = allEntities.filter((e) =>\n referencedIdKeys.has(singularize(e.name).toLowerCase()),\n );\n\n if (mutated.length === 0 && hasStreams && allEntities.length > 0) {\n return [allEntities[0]];\n }\n return mutated.length > 0 ? mutated : allEntities;\n}\n\nfunction countScalarKeys(example: unknown): string[] {\n if (!example || typeof example !== \"object\" || Array.isArray(example)) return [];\n const keys: string[] = [];\n for (const [k, v] of Object.entries(example as Record<string, unknown>)) {\n const t = typeof v;\n if (t === \"string\" || t === \"number\" || t === \"boolean\") keys.push(k);\n }\n return keys;\n}\n\nexport function getSubmitActions(contract?: DataContract): SubmitAction[] {\n const actionSpec = contract?.actionSpec ?? {};\n const result: SubmitAction[] = [];\n for (const [name, action] of Object.entries(actionSpec) as Array<[string, ActionEntry]>) {\n const ex: JsonValue | undefined = action.example;\n const scalarKeys = countScalarKeys(ex);\n if (scalarKeys.length < 3) continue;\n const allKeys = ex && typeof ex === \"object\" && !Array.isArray(ex)\n ? Object.keys(ex as JsonObject)\n : scalarKeys;\n result.push({ name, payloadKeys: allKeys });\n }\n return result;\n}\n\nexport function getArrStrProps(contract?: DataContract): string[] {\n const propsField = contract?.propsSpec as\n | { properties?: Record<string, unknown> }\n | undefined;\n const properties = propsField?.properties ?? {};\n const names: string[] = [];\n for (const [name, p] of Object.entries(properties)) {\n if (!p || typeof p !== \"object\") continue;\n const pp = p as PropShape;\n const type = pp.type ?? pp.schema?.type;\n const items = pp.items ?? pp.schema?.items;\n if (type === \"array\" && items?.type === \"string\") names.push(name);\n }\n return names;\n}\n\nexport function getInitialValuePropNames(contract?: DataContract): string[] {\n const propsField = contract?.propsSpec as\n | { properties?: Record<string, unknown> }\n | undefined;\n const properties = propsField?.properties ?? {};\n const names: string[] = [];\n for (const [name, p] of Object.entries(properties)) {\n if (!p || typeof p !== \"object\") continue;\n const pp = p as PropShape;\n const type = pp.type ?? pp.schema?.type;\n if (type === \"object\" && /^initial/i.test(name)) names.push(name);\n }\n return names;\n}\n\n// =============================================================================\n// Source scanning helpers\n// =============================================================================\n\n/**\n * Collect all key names that appear as state slots — either keys inside a\n * `useState({ ... })` object literal, or standalone state variables.\n */\nexport function collectStateKeys(src: string): Set<string> {\n const keys = new Set<string>();\n const varRe = /const\\s*\\[\\s*(\\w+)\\s*,\\s*(\\w+)\\s*\\]\\s*=\\s*useState/g;\n for (const m of src.matchAll(varRe)) keys.add(m[1]);\n const objRe = /useState(?:<[^>]*>)?\\s*\\(\\s*\\{([\\s\\S]*?)\\}\\s*\\)/g;\n for (const m of src.matchAll(objRe)) {\n const keyRe = /(?:^|,)\\s*(\\w+)\\s*:/g;\n for (const km of m[1].matchAll(keyRe)) keys.add(km[1]);\n }\n const defaultObjRe = /useState(?:<[^>]*>)?\\s*\\([^)]*\\|\\|\\s*\\{([^}]*)\\}/g;\n for (const m of src.matchAll(defaultObjRe)) {\n const keyRe = /(?:^|,)\\s*(\\w+)\\s*:/g;\n for (const km of m[1].matchAll(keyRe)) keys.add(km[1]);\n }\n return keys;\n}\n\nexport function isMultiStepPrompt(prompt: string): boolean {\n if (!prompt) return false;\n const p = prompt.toLowerCase();\n return (\n /\\bstep\\s*[1-9]\\b/.test(p) ||\n /\\b[1-9][- ]step\\b/.test(p) ||\n /\\bmulti[- ]step\\b/.test(p) ||\n /\\bwizard\\b/.test(p) ||\n /\\bsteps?:\\s*\\n?/.test(p)\n );\n}\n\n// =============================================================================\n// Issue factory\n// =============================================================================\n\nexport function mkIssue(\n subcategory: string,\n description: string,\n fix: string,\n result: \"fail\" | \"warn\" = \"fail\",\n): EvalIssue {\n // mode-category issues are structural (missing hook wiring, bad merge-by-id,\n // hardcoded entity literals) — always P0. See ALIGNMENT.md R1.\n return { tier: 0, result, category: \"mode\", priority: \"P0\", subcategory, description, fix };\n}\n\nexport function cap(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n","// packages/ui-gen/src/evaluation/axis-checks/checks/universal.ts\n//\n// Checks that run regardless of axis value — they apply to any generated\n// component. Dispatched via a \"universal\" gate that matches every render\n// value.\n\nimport type { EvalIssue } from \"../../types-public.js\";\nimport type { AxisCheck, AxisCheckInput } from \"../types.js\";\nimport {\n getRequiredPropNames,\n mkIssue,\n} from \"../helpers.js\";\n\nconst ALL_RENDER_VALUES = [\n \"static\", \"list\", \"grid\", \"spatial\", \"timeline\", \"chart\", \"master-detail\",\n] as const;\n\nfunction runPropCoverage(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const requiredProps = getRequiredPropNames(input.contract);\n const issues: EvalIssue[] = [];\n for (const name of requiredProps) {\n const dotAccess = new RegExp(`\\\\bprops\\\\.${name}\\\\b`);\n const bracketAccess = new RegExp(`\\\\bprops\\\\[['\"\\`]${name}['\"\\`]\\\\]`);\n const destructured = new RegExp(\n `props[^;]{0,200}\\\\{[^}]*\\\\b${name}\\\\b[^}]*\\\\}|\\\\{[^}]*\\\\b${name}\\\\b[^}]*\\\\}[^;]{0,10}=\\\\s*props`,\n );\n if (dotAccess.test(src) || bracketAccess.test(src) || destructured.test(src))\n continue;\n issues.push(\n mkIssue(\n \"universal.prop_coverage\",\n `Required prop \"${name}\" is not referenced anywhere in the component.`,\n `Render props.${name} — the data contract marks it required.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runNoPropMirror(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const issues: EvalIssue[] = [];\n const re =\n /const\\s*\\[\\s*(\\w+)\\s*,\\s*(\\w+)\\s*\\]\\s*=\\s*useState(?:<[^>]*>)?\\s*\\(\\s*props\\??\\.(\\w+)/g;\n for (const m of src.matchAll(re)) {\n const [full, stateVar, setter, propName] = m;\n const idx = m.index ?? 0;\n const after = src.slice(idx + full.length);\n if (new RegExp(`\\\\b${setter}\\\\s*\\\\(`).test(after)) continue;\n issues.push(\n mkIssue(\n \"universal.no_prop_mirror\",\n `useState(props.${propName}) for \"${stateVar}\" has no \"${setter}\" call — this mirrors a prop without mutation.`,\n `Read props.${propName} directly in the render; remove the useState for ${stateVar}.`,\n \"warn\",\n ),\n );\n }\n return issues;\n}\n\nfunction runNoPhantomUseState(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const issues: EvalIssue[] = [];\n const re = /const\\s*\\[\\s*(\\w+)\\s*,\\s*(\\w+)\\s*\\]\\s*=\\s*useState/g;\n for (const m of src.matchAll(re)) {\n const [full, stateVar, setter] = m;\n const idx = m.index ?? 0;\n const after = src.slice(idx + full.length);\n const stateUsed = new RegExp(`\\\\b${stateVar}\\\\b`).test(after);\n const setterUsed = new RegExp(`\\\\b${setter}\\\\b`).test(after);\n if (stateUsed || setterUsed) continue;\n issues.push(\n mkIssue(\n \"universal.no_phantom_useState\",\n `useState for \"${stateVar}\" is declared but neither \"${stateVar}\" nor \"${setter}\" is referenced.`,\n `Remove the useState for ${stateVar} — it is dead state.`,\n \"warn\",\n ),\n );\n }\n return issues;\n}\n\nfunction runPropSeedNoResync(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const issues: EvalIssue[] = [];\n const re =\n /const\\s*\\[\\s*(\\w+)\\s*,\\s*(\\w+)\\s*\\]\\s*=\\s*useState(?:<[^>]*>)?\\s*\\(\\s*props\\??\\.(\\w+)/g;\n for (const m of src.matchAll(re)) {\n const [full, stateVar, setter, propName] = m;\n const idx = m.index ?? 0;\n const after = src.slice(idx + full.length);\n // Never-called setter is `no_prop_mirror`'s case — this check is\n // its #480 complement: the setter IS used (real optimistic state)\n // but nothing re-seeds when the agent repaints the prop.\n if (!new RegExp(`\\\\b${setter}\\\\s*\\\\(`).test(after)) continue;\n // A re-seed effect names the prop in a dependency array. Bracket\n // shape is the pragmatic signal (same looseness as the sibling\n // checks): any `[... props.X ...]` array in the source counts.\n const resync = new RegExp(\n `\\\\[[^\\\\[\\\\]]*props\\\\??\\\\.${propName}\\\\b[^\\\\[\\\\]]*\\\\]`,\n );\n if (resync.test(src)) continue;\n issues.push(\n mkIssue(\n \"universal.prop_seed_no_resync\",\n `useState(props.${propName}) seeds \"${stateVar}\" and mutates it, but no effect depends on [props.${propName}] — a ggui_amend repaint pushes new props that never reach this display (#480).`,\n `Add \\`useEffect(() => ${setter}(props.${propName}), [props.${propName}]);\\` so agent repaints re-seed the state, or derive the display directly from props.${propName}.`,\n \"warn\",\n ),\n );\n }\n return issues;\n}\n\nexport const UNIVERSAL_CHECKS: readonly AxisCheck[] = [\n {\n id: \"universal.prop_coverage\",\n axis: \"render\",\n values: ALL_RENDER_VALUES,\n run: runPropCoverage,\n },\n {\n id: \"universal.no_prop_mirror\",\n axis: \"render\",\n values: ALL_RENDER_VALUES,\n run: runNoPropMirror,\n },\n {\n id: \"universal.no_phantom_useState\",\n axis: \"render\",\n values: ALL_RENDER_VALUES,\n run: runNoPhantomUseState,\n },\n {\n id: \"universal.prop_seed_no_resync\",\n axis: \"render\",\n values: ALL_RENDER_VALUES,\n run: runPropSeedNoResync,\n },\n];\n","// packages/ui-gen/src/evaluation/axis-checks/checks/state-merge.ts\n//\n// Checks gated on state=merge: the component owns a live entity list\n// reconciled from stream/action updates. Ported from\n// mode-checks/collection.ts (§5a state-seeded, no-hardcoded-entities,\n// derived-view-memoized).\n\nimport type { EvalIssue } from \"../../types-public.js\";\nimport type { AxisCheck, AxisCheckInput } from \"../types.js\";\nimport {\n cap,\n getEntityCollections,\n getMutatedEntityCollections,\n mkIssue,\n} from \"../helpers.js\";\n\nfunction runStateSeededFromProps(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const all = getEntityCollections(input.contract);\n const entities = getMutatedEntityCollections(input.contract, all);\n const issues: EvalIssue[] = [];\n for (const e of entities) {\n const re = new RegExp(\n `useState(?:<[^>]*>)?\\\\s*\\\\([\\\\s\\\\S]{0,400}?props\\\\.${e.name}\\\\b`,\n );\n if (re.test(src)) continue;\n issues.push(\n mkIssue(\n \"state.merge.seeded_from_props\",\n `Entity collection \"${e.name}\" is not seeded from props — no useState initializer reads props.${e.name}.`,\n `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).`,\n ),\n );\n }\n return issues;\n}\n\nfunction runNoHardcodedEntities(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const all = getEntityCollections(input.contract);\n const entities = getMutatedEntityCollections(input.contract, all);\n if (entities.length === 0) return [];\n const uncommented = src\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/\\/\\/[^\\n]*/g, \"\");\n const issues: EvalIssue[] = [];\n const idFields = [...new Set(entities.map((e) => e.idField))];\n for (const idField of idFields) {\n const re = new RegExp(\n `\\\\[\\\\s*\\\\{[^}]*\\\\b${idField}\\\\s*:[^}]*\\\\}\\\\s*,\\\\s*\\\\{[^}]*\\\\b${idField}\\\\s*:`,\n \"g\",\n );\n if (!re.test(uncommented)) continue;\n issues.push(\n mkIssue(\n \"state.merge.no_hardcoded_entities\",\n `Hardcoded entity array literal (multiple objects with \"${idField}\") in the component — entity data should come from state/props.`,\n `Remove the literal array. Seed state from props.{entityProp} and merge updates via stream.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runDerivedViewMemoized(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const all = getEntityCollections(input.contract);\n const entities = getMutatedEntityCollections(input.contract, all);\n if (entities.length === 0) return [];\n const returnIdx = src.indexOf(\"return (\");\n if (returnIdx < 0) return [];\n const renderBody = src.slice(returnIdx);\n const issues: EvalIssue[] = [];\n for (const e of entities) {\n const re = new RegExp(`\\\\b${e.name}\\\\s*\\\\.(filter|reduce|sort)\\\\s*\\\\(`);\n if (re.test(renderBody)) {\n issues.push(\n mkIssue(\n \"state.merge.derived_view_memoized\",\n `Derived view (${e.name}.filter/reduce/sort) computed inside the render body — should be wrapped in useMemo.`,\n `Extract to \\`const ${e.name}Filtered = useMemo(() => ${e.name}.filter(...), [${e.name}, ...]);\\` before the return.`,\n \"warn\",\n ),\n );\n }\n }\n return issues;\n}\n\n/**\n * `.map()` keyed by index → reorders and merges break React reconciliation.\n * Gated on any render that iterates (list/grid/timeline/master-detail) OR\n * state=merge (mutating list).\n */\nfunction runMapKeyIsId(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const INDEX_NAMES = new Set([\"index\", \"idx\", \"i\", \"j\", \"k\", \"n\", \"ix\"]);\n const re = /key\\s*=\\s*\\{\\s*(\\w+)\\s*\\}/g;\n const issues: EvalIssue[] = [];\n for (const m of src.matchAll(re)) {\n const key = m[1];\n if (!INDEX_NAMES.has(key)) continue;\n issues.push(\n mkIssue(\n \"render.map_key_is_id\",\n `Array key uses index variable \"${key}\" — reorders and stream merges will break React reconciliation.`,\n `Replace key={${key}} with key={item.id} (or item.symbol / whatever the entity id field is).`,\n ),\n );\n }\n return issues;\n}\n\nexport const STATE_MERGE_CHECKS: readonly AxisCheck[] = [\n {\n id: \"state.merge.seeded_from_props\",\n axis: \"state\",\n values: [\"merge\"],\n run: runStateSeededFromProps,\n },\n {\n id: \"state.merge.no_hardcoded_entities\",\n axis: \"state\",\n values: [\"merge\"],\n run: runNoHardcodedEntities,\n },\n {\n id: \"state.merge.derived_view_memoized\",\n axis: \"state\",\n values: [\"merge\"],\n run: runDerivedViewMemoized,\n },\n // Map-key check: gated on any iterating render. state=merge always\n // implies iteration, so the render gate already covers it.\n {\n id: \"render.map_key_is_id\",\n axis: \"render\",\n values: [\"list\", \"grid\", \"timeline\", \"master-detail\"],\n run: runMapKeyIsId,\n },\n];\n","// packages/ui-gen/src/evaluation/axis-checks/checks/state-ui-affordance.ts\n//\n// `state.ui_affordance.state_aria_present` (ggui#408) — a hand-rolled\n// stateful control must expose its state in ARIA.\n//\n// Why this is a DETERMINISTIC check and not (only) an LLM criterion:\n// the Experiment-53 baseline showed the defect class is structurally\n// invisible to the LLM leg — `state=ui-affordance` with no writes\n// classifies `riskTier=low`, and the low-risk bypass skips tier-1+2\n// entirely, so 10/10 ARIA-less generations were never evaluated at\n// all. Axis checks run BEFORE the bypass decision, and a `fail` among\n// them disables the bypass for that round — which both surfaces the\n// finding and routes it into the coding loop. Prototype validation\n// against the 27-cell baseline corpus: precision 1.00, recall 0.80\n// (both false negatives closed here: lowercase tags — `<div\n// as={Clickable}>` is the WORSE variant since `as` is inert on a\n// native element — and callback-prop indirection in extracted\n// subcomponents).\n//\n// Detection predicate (v2 — \"the element's own onClick mutates the\n// affordance state\"; v1's styling-dataflow precondition scored recall\n// 0.30, do not resurrect it): an element fires when its `onClick`\n// references a `useState` setter, a local handler that calls one, or\n// an `on[A-Z]…` callback prop (extracted-subcomponent shape) — AND it\n// is not a semantics-owning primitive, carries no state ARIA\n// (`aria-checked/pressed/selected/expanded/current` or any `role=`),\n// and contains no state-carrying primitive in its subtree (pushing\n// duplicate ARIA onto a wrapper around `<Checkbox>` is itself a\n// defect the judge fails — never demand it).\n//\n// Gate: `{axis: \"state\", values: [\"ui-affordance\"]}` ONLY. The\n// predicate must not reach `state=payload/draft` (form-field wrappers\n// with onClick would false-flag) or `state=merge` (kanban's per-item\n// onClick is a MOVE, not a boolean affordance).\n\nimport type { EvalIssue } from \"../../types-public.js\";\nimport type { AxisCheck, AxisCheckInput } from \"../types.js\";\nimport { mkIssue } from \"../helpers.js\";\n\nconst STATE_ARIA_OR_ROLE = /aria-(checked|pressed|selected|expanded|current)\\s*=|role\\s*=/;\nconst STATE_PRIMITIVE_IN_SUBTREE = /<(Checkbox|Toggle|Tabs|Accordion)[\\s/>]/;\n/** Primitives that own their own interaction semantics — never flagged. */\nconst SEMANTIC_PRIMITIVES = new Set([\"Button\", \"Checkbox\", \"Toggle\", \"Link\", \"MenuItem\"]);\n\n/** Collect `const [x, setX] = useState(...)` setter names. */\nfunction collectSetters(src: string): Set<string> {\n const setters = new Set<string>();\n for (const m of src.matchAll(/const\\s*\\[\\s*\\w+\\s*,\\s*(set\\w+)\\s*\\]\\s*=\\s*useState/g)) {\n setters.add(m[1]);\n }\n return setters;\n}\n\n/** Collect local handler names whose body (nearby) calls a setter. */\nfunction collectHandlers(src: string, setters: Set<string>): Set<string> {\n const handlers = new Set<string>();\n for (const m of src.matchAll(/const\\s+(\\w+)\\s*=\\s*(?:\\([^)]*\\)|\\w+)\\s*=>\\s*\\{?/g)) {\n const body = src.slice(m.index + m[0].length, m.index + m[0].length + 400);\n for (const s of setters) {\n if (body.includes(s)) {\n handlers.add(m[1]);\n break;\n }\n }\n }\n return handlers;\n}\n\n/** The attribute block of an opening tag: from after the tag name to its `>` (brace-aware). */\nfunction attrBlock(src: string, start: number): { block: string; end: number } {\n let depth = 0;\n for (let i = start; i < src.length; i++) {\n const c = src[i];\n if (c === \"{\") depth++;\n else if (c === \"}\") depth--;\n else if (c === \">\" && depth === 0) return { block: src.slice(start, i), end: i };\n }\n return { block: src.slice(start, start + 900), end: start + 900 };\n}\n\n/** The brace-balanced expression of `onClick={…}`, or null when absent. */\nfunction onClickValue(block: string): string | null {\n const m = block.match(/onClick\\s*=\\s*\\{/);\n if (!m || m.index === undefined) return null;\n const open = m.index + m[0].length - 1;\n let depth = 0;\n for (let i = open; i < block.length; i++) {\n if (block[i] === \"{\") depth++;\n else if (block[i] === \"}\") {\n depth--;\n if (depth === 0) return block.slice(open + 1, i);\n }\n }\n return block.slice(open + 1);\n}\n\nfunction subtree(src: string, pos: number, tag: string): string {\n const close = src.indexOf(`</${tag}>`, pos);\n return src.slice(pos, close === -1 ? pos + 700 : close);\n}\n\nfunction runStateAriaPresent(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const setters = collectSetters(src);\n const handlers = collectHandlers(src, setters);\n const issues: EvalIssue[] = [];\n const flaggedLines = new Set<number>();\n\n // Locally-defined components: their CALL SITES can never satisfy the\n // check (the ARIA lives inside the definition, which this check\n // already covers via the callback-prop clause) — flagging the call\n // site is a permanently-unresolvable finding that stalls the\n // eval-fix loop in the recurrence guard (Experiment 54: exactly the\n // 2/27 stuck cells). Skip call sites of components defined in this\n // file; the definition's own inner element carries the check.\n const localComponents = new Set<string>();\n for (const m of src.matchAll(/(?:function\\s+([A-Z]\\w*)\\s*\\(|const\\s+([A-Z]\\w*)\\s*=)/g)) {\n localComponents.add(m[1] ?? m[2]);\n }\n\n for (const m of src.matchAll(/<([A-Za-z][A-Za-z0-9]*)\\b/g)) {\n const tag = m[1];\n if (m.index === undefined) continue;\n if (localComponents.has(tag)) continue;\n const { block, end } = attrBlock(src, m.index + m[0].length);\n const clickValue = onClickValue(block);\n if (clickValue === null) continue;\n const mutatesAffordance =\n [...setters].some((s) => clickValue.includes(s)) ||\n [...handlers].some((h) => new RegExp(`\\\\b${h}\\\\b`).test(clickValue)) ||\n // Extracted-subcomponent shape: the toggle handler arrives as an\n // `on[A-Z]…` callback prop and is invoked from onClick — inside a\n // ui-affordance component that IS the affordance mutation.\n /\\bon[A-Z]\\w*\\b/.test(clickValue);\n if (!mutatesAffordance) continue;\n if (SEMANTIC_PRIMITIVES.has(tag)) continue;\n if (STATE_ARIA_OR_ROLE.test(block)) continue;\n if (STATE_PRIMITIVE_IN_SUBTREE.test(subtree(src, end, tag))) continue;\n\n const line = src.slice(0, m.index).split(\"\\n\").length;\n if (flaggedLines.has(line)) continue;\n flaggedLines.add(line);\n issues.push(\n mkIssue(\n \"state.ui_affordance.state_aria_present\",\n `Line ${line}: <${tag}> toggles the UI affordance from its onClick but exposes no state ARIA — its checked/selected/expanded state is invisible to assistive technology (styling is the only carrier).`,\n `Add the matching state attribute to the SAME element that carries the onClick: \\`role=\"checkbox\"\\` + \\`aria-checked={…}\\` for a toggle row, \\`aria-pressed\\` for a toggle button, \\`aria-selected\\` for a selection, \\`aria-expanded\\` for an open/close affordance — or replace the hand-rolled control with the state-carrying primitive (Checkbox / Toggle / Tabs / Accordion). \\`as={Clickable}\\` adds button + keyboard semantics but NOT state.`,\n ),\n );\n }\n return issues;\n}\n\nexport const STATE_UI_AFFORDANCE_CHECKS: readonly AxisCheck[] = [\n {\n id: \"state.ui_affordance.state_aria_present\",\n axis: \"state\",\n values: [\"ui-affordance\"],\n run: runStateAriaPresent,\n },\n];\n","// packages/ui-gen/src/evaluation/axis-checks/checks/realtime.ts\n//\n// Checks gated on realtime != none. Ported from mode-checks/collection.ts\n// (stream-handler-per-event, stream-merges-by-id).\n\nimport type { EvalIssue } from \"../../types-public.js\";\nimport type { AxisCheck, AxisCheckInput } from \"../types.js\";\nimport {\n getEntityCollections,\n getMutatedEntityCollections,\n getStreamEventNames,\n mkIssue,\n} from \"../helpers.js\";\n\nconst REALTIME_ACTIVE = [\"merge\", \"append\", \"status\", \"presence\", \"mixed\"] as const;\n\nfunction runStreamHandlerPerEvent(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const eventNames = getStreamEventNames(input.contract);\n const issues: EvalIssue[] = [];\n for (const name of eventNames) {\n const re = new RegExp(`useStream(?:<[^>]*>)?\\\\s*\\\\(\\\\s*['\"\\`]${name}['\"\\`]`);\n if (re.test(src)) continue;\n issues.push(\n mkIssue(\n \"realtime.stream_handler_per_event\",\n `Stream event \"${name}\" declared in the contract has no useStream('${name}') call.`,\n `Add \\`const ${name} = useStream<...>('${name}');\\` and handle ${name}.latest in a useEffect.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runStreamMergesById(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const eventNames = getStreamEventNames(input.contract);\n const all = getEntityCollections(input.contract);\n const entities = getMutatedEntityCollections(input.contract, all);\n if (eventNames.length === 0 || entities.length === 0) return [];\n const issues: EvalIssue[] = [];\n const idFields = new Set(entities.map((e) => e.idField));\n for (const idField of idFields) {\n const re = new RegExp(`\\\\.${idField}\\\\b`);\n if (re.test(src)) continue;\n issues.push(\n mkIssue(\n \"realtime.merge.stream_merges_by_id\",\n `Entity id field \"${idField}\" is never referenced in the source — stream merge likely does not key by id.`,\n `In the stream handler, merge by id: setItems(prev => prev.map(x => x.${idField} === update.${idField} ? {...x, ...update} : x)).`,\n \"warn\",\n ),\n );\n }\n return issues;\n}\n\nexport const REALTIME_CHECKS: readonly AxisCheck[] = [\n {\n id: \"realtime.stream_handler_per_event\",\n axis: \"realtime\",\n values: REALTIME_ACTIVE,\n run: runStreamHandlerPerEvent,\n },\n {\n id: \"realtime.merge.stream_merges_by_id\",\n axis: \"realtime\",\n values: [\"merge\", \"mixed\"],\n run: runStreamMergesById,\n },\n];\n","// packages/ui-gen/src/evaluation/axis-checks/checks/writes.ts\n//\n// Checks gated on writes != none. Ported from display.ts (action-hook,\n// action-handler) + form.ts (submit-hook, submit-handler, submit-disabled)\n// + collection.ts (per-item action variants).\n\nimport type { EvalIssue } from \"../../types-public.js\";\nimport type { AxisCheck, AxisCheckInput } from \"../types.js\";\nimport {\n getActionNames,\n getSubmitActions,\n mkIssue,\n} from \"../helpers.js\";\n\nconst ACTIVE_WRITES = [\n \"commit\", \"multi-commit\", \"per-item\", \"submit\", \"compose\",\n] as const;\n\nfunction runActionHookWired(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const actionNames = getActionNames(input.contract);\n const issues: EvalIssue[] = [];\n for (const name of actionNames) {\n const re = new RegExp(`useAction(?:<[^>]*>)?\\\\s*\\\\(\\\\s*['\"\\`]${name}['\"\\`]`);\n if (re.test(src)) continue;\n issues.push(\n mkIssue(\n \"writes.action_hook_wired\",\n `Contract action \"${name}\" has no useAction('${name}') call.`,\n `Add \\`const ${name} = useAction<...>('${name}');\\` and wire it to the relevant control.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runActionHandlerAttached(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const actionNames = getActionNames(input.contract);\n const issues: EvalIssue[] = [];\n for (const name of actionNames) {\n const declRe = new RegExp(\n `const\\\\s+(\\\\w+)\\\\s*=\\\\s*useAction(?:<[^>]*>)?\\\\s*\\\\(\\\\s*['\"\\`]${name}['\"\\`]`,\n );\n const m = src.match(declRe);\n if (!m) continue;\n const constName = m[1];\n const rest = src.replace(m[0], \"\");\n if (new RegExp(`\\\\b${constName}\\\\s*\\\\(`).test(rest)) continue;\n issues.push(\n mkIssue(\n \"writes.action_handler_attached\",\n `useAction result \"${constName}\" (for action \"${name}\") is declared but never invoked.`,\n `Call ${constName}({...}) from an interactive element (e.g., <Button onClick={() => ${constName}(payload)}>).`,\n ),\n );\n }\n return issues;\n}\n\nfunction runSubmitDisabledPath(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const submits = getSubmitActions(input.contract);\n if (submits.length === 0) return [];\n if (/disabled\\s*=\\s*\\{/.test(src)) return [];\n return [\n mkIssue(\n \"writes.submit.disabled_path\",\n `Form has no \\`disabled={...}\\` expression anywhere — submit is likely unconditional.`,\n `Gate submit on validation: e.g. \\`<Button disabled={!isValid} onClick={handleSubmit}>\\`.`,\n \"warn\",\n ),\n ];\n}\n\nexport const WRITES_CHECKS: readonly AxisCheck[] = [\n {\n id: \"writes.action_hook_wired\",\n axis: \"writes\",\n values: ACTIVE_WRITES,\n run: runActionHookWired,\n },\n {\n id: \"writes.action_handler_attached\",\n axis: \"writes\",\n values: ACTIVE_WRITES,\n run: runActionHandlerAttached,\n },\n {\n id: \"writes.submit.disabled_path\",\n axis: \"writes\",\n values: [\"submit\"],\n run: runSubmitDisabledPath,\n },\n];\n","// packages/ui-gen/src/evaluation/axis-checks/checks/state-payload.ts\n//\n// Checks gated on state=payload or writes=submit. Ported from\n// mode-checks/form.ts (submit-hook, submit-handler, state-covers-payload,\n// initial-values-seeded, option-lists-consumed, no-orphan-payload-key).\n\nimport type { EvalIssue } from \"../../types-public.js\";\nimport type { AxisCheck, AxisCheckInput } from \"../types.js\";\nimport {\n collectStateKeys,\n getArrStrProps,\n getInitialValuePropNames,\n getSubmitActions,\n mkIssue,\n} from \"../helpers.js\";\n\nfunction runSubmitHookPresent(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const submits = getSubmitActions(input.contract);\n const issues: EvalIssue[] = [];\n for (const s of submits) {\n const re = new RegExp(`useAction(?:<[^>]*>)?\\\\s*\\\\(\\\\s*['\"\\`]${s.name}['\"\\`]`);\n if (re.test(src)) continue;\n issues.push(\n mkIssue(\n \"writes.submit.hook_present\",\n `Submit action \"${s.name}\" has no useAction('${s.name}') call.`,\n `Add \\`const ${s.name} = useAction<...>('${s.name}');\\` and invoke it from the submit button.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runSubmitHandlerAttached(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const submits = getSubmitActions(input.contract);\n const issues: EvalIssue[] = [];\n for (const s of submits) {\n const declRe = new RegExp(\n `const\\\\s+(\\\\w+)\\\\s*=\\\\s*useAction(?:<[^>]*>)?\\\\s*\\\\(\\\\s*['\"\\`]${s.name}['\"\\`]`,\n );\n const m = src.match(declRe);\n if (!m) continue;\n const constName = m[1];\n const rest = src.replace(m[0], \"\");\n if (new RegExp(`\\\\b${constName}\\\\s*\\\\(`).test(rest)) continue;\n issues.push(\n mkIssue(\n \"writes.submit.handler_attached\",\n `useAction result \"${constName}\" (for submit \"${s.name}\") is declared but never invoked.`,\n `Call ${constName}(payload) from the submit button's onClick handler, after validation.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runStateCoversPayload(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const submits = getSubmitActions(input.contract);\n if (submits.length === 0) return [];\n const stateKeys = collectStateKeys(src);\n const issues: EvalIssue[] = [];\n for (const s of submits) {\n const missing = s.payloadKeys.filter((k) => !stateKeys.has(k));\n if (missing.length === 0) continue;\n issues.push(\n mkIssue(\n \"state.payload.covers_submit\",\n `Submit action \"${s.name}\" expects payload keys [${s.payloadKeys.join(\", \")}] but state does not cover: ${missing.join(\", \")}.`,\n `Add a state slot for each missing key so the final payload can be assembled.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runInitialValuesSeeded(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const initialProps = getInitialValuePropNames(input.contract);\n const issues: EvalIssue[] = [];\n for (const name of initialProps) {\n const re = new RegExp(\n `useState(?:<[^>]*>)?\\\\s*\\\\([\\\\s\\\\S]{0,400}?props\\\\.${name}\\\\b`,\n );\n if (re.test(src)) continue;\n issues.push(\n mkIssue(\n \"state.payload.initial_values_seeded\",\n `Prop \"${name}\" (pre-filled initial values) is never read in a useState initializer.`,\n `Seed form state from props.${name} so edit mode pre-fills.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runOptionListsConsumed(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const arrStrNames = getArrStrProps(input.contract);\n const hasAnyMap = /\\.map\\s*\\(/.test(src);\n const issues: EvalIssue[] = [];\n for (const name of arrStrNames) {\n const referenced = new RegExp(`\\\\bprops\\\\.${name}\\\\b`).test(src);\n if (referenced && hasAnyMap) continue;\n const reason = !referenced\n ? `Option list prop \"${name}\" (arr<str>) is never referenced — users cannot see the options.`\n : `Option list prop \"${name}\" (arr<str>) is referenced but the component has no .map() — options are not rendered as choices.`;\n issues.push(\n mkIssue(\n \"state.payload.option_lists_consumed\",\n reason,\n `Render options with \\`props.${name}.map(option => <RadioOption value={option} ... />)\\`.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runNoOrphanPayloadKey(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const submits = getSubmitActions(input.contract);\n if (submits.length === 0) return [];\n const body = src\n .replace(/interface\\s+Action\\w+[\\s\\S]*?\\n}/g, \"\")\n .replace(/type\\s+Action\\w+[\\s\\S]*?\\n;/g, \"\");\n const issues: EvalIssue[] = [];\n for (const s of submits) {\n const orphans: string[] = [];\n for (const key of s.payloadKeys) {\n const re = new RegExp(`\\\\b${key}\\\\b`);\n if (!re.test(body)) orphans.push(key);\n }\n if (orphans.length === 0) continue;\n issues.push(\n mkIssue(\n \"state.payload.no_orphan_key\",\n `Submit payload keys [${orphans.join(\", \")}] never appear in the component body — missing from the submitted payload.`,\n `Add UI and state for these keys, or remove them from the ActionEntry if not needed.`,\n \"warn\",\n ),\n );\n }\n return issues;\n}\n\nexport const STATE_PAYLOAD_CHECKS: readonly AxisCheck[] = [\n {\n id: \"writes.submit.hook_present\",\n axis: \"writes\",\n values: [\"submit\"],\n run: runSubmitHookPresent,\n },\n {\n id: \"writes.submit.handler_attached\",\n axis: \"writes\",\n values: [\"submit\"],\n run: runSubmitHandlerAttached,\n },\n {\n id: \"state.payload.covers_submit\",\n axis: \"state\",\n values: [\"payload\"],\n run: runStateCoversPayload,\n },\n {\n id: \"state.payload.initial_values_seeded\",\n axis: \"state\",\n values: [\"payload\", \"draft\"],\n run: runInitialValuesSeeded,\n },\n {\n id: \"state.payload.option_lists_consumed\",\n axis: \"state\",\n values: [\"payload\"],\n run: runOptionListsConsumed,\n },\n {\n id: \"state.payload.no_orphan_key\",\n axis: \"state\",\n values: [\"payload\"],\n run: runNoOrphanPayloadKey,\n },\n];\n","// packages/ui-gen/src/evaluation/axis-checks/checks/tooling.ts\n//\n// Checks gated on the tooling axis. Two surfaces:\n//\n// - `tooling.clientCapability.hook_called` — verifies every declared\n// `clientCapabilities.gadgets[name]` has a matching\n// `const <name> = …()` binding in source.\n// - `tooling.clientCapability.start_called` — verifies a bound\n// gadget hook also has a `.start(...)` invocation; without it\n// the capability stays in `idle` and never fires.\n// - `realtime.stream_source.no_direct_call` — the LLM must NOT\n// directly invoke a tool named on `streamSpec[*].source.tool`;\n// subscribe via `useStream(...)` instead.\n// - `universal.no_retired_identifiers` — fires on every contract.\n// The LLM's training data predates the current wire shape and\n// reaches for retired identifiers (component-side tool hooks,\n// dispatch.kind, intendedTool, broadcast field, retired catalog\n// names, retired package imports, retired wire-input fields).\n// The grep gate emits one issue per detected identifier so the\n// LLM rewrites toward the current shape before evaluation\n// completes.\n\nimport type { DataContract, StreamChannelEntry } from \"@ggui-ai/protocol\";\nimport type { EvalIssue } from \"../../types-public.js\";\nimport type { AxisCheck, AxisCheckInput } from \"../types.js\";\nimport { getGadgetNames, getStdlibGadgetNames, mkIssue } from \"../helpers.js\";\n\nconst CLIENT_PRESENT = [\"client\", \"both\"] as const;\nconst ALL_TOOLING_VALUES = [\"none\", \"wired\", \"client\", \"both\"] as const;\nconst REALTIME_ACTIVE = [\n \"merge\",\n \"append\",\n \"status\",\n \"presence\",\n \"mixed\",\n] as const;\n\n// ── clientCapabilities ──────────────────────────────────────────────\n\nfunction runGadgetHookCalled(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const names = getGadgetNames(input.contract);\n const issues: EvalIssue[] = [];\n for (const name of names) {\n // The boilerplate emits `const <name> = <hook>();` — match the const\n // binding to detect omission. We don't pin the hook identifier here\n // because the contract carries it via `entry.hook` and the LLM may\n // legitimately alias on import.\n const re = new RegExp(`const\\\\s+${name}\\\\s*=`);\n if (re.test(src)) continue;\n issues.push(\n mkIssue(\n \"tooling.clientCapability.hook_called\",\n `Contract clientCapability \"${name}\" has no \\`const ${name} = …()\\` hook call.`,\n `Import the declared hook (default package: @ggui-ai/gadgets) and bind its return value to \\`const ${name}\\` at the top of the component; surface \\`.value\\` / \\`.status\\` in JSX.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runClientCapabilityStartCalled(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n // Only the first-party `@ggui-ai/gadgets` browser capabilities have\n // the `idle → prompting → active` lifecycle that `.start()` drives.\n // Registered third-party gadget hooks (e.g. `useBoardState`) are\n // plain data hooks the runtime resolves on its own — exclude them.\n const names = getStdlibGadgetNames(input.contract);\n const issues: EvalIssue[] = [];\n for (const name of names) {\n // Skip when the binding doesn't exist — the `hook_called` check\n // covers that case; we don't double-issue.\n const bindingRe = new RegExp(`const\\\\s+${name}\\\\s*=`);\n if (!bindingRe.test(src)) continue;\n\n // The capability lifecycle requires `.start()` invocation to\n // transition from `idle` → `prompting`. Without it the hook's\n // `.value` / `.status` stay frozen at the initial state and the\n // UI feature never fires. Match `<name>.start(`, allowing chained\n // member access or method aliasing.\n const startRe = new RegExp(`\\\\b${name}\\\\s*\\\\.\\\\s*start\\\\s*\\\\(`);\n if (startRe.test(src)) continue;\n issues.push(\n mkIssue(\n \"tooling.clientCapability.start_called\",\n `clientCapability \"${name}\" is bound but \\`${name}.start(…)\\` is never invoked — the capability stays in 'idle' and the feature won't fire.`,\n `Wire \\`${name}.start({...})\\` to a UI control (Button onClick, effect, etc.). Read \\`.status\\` to gate the UI between 'idle' / 'prompting' / 'active' / 'completed' / 'denied' / 'error'.`,\n ),\n );\n }\n return issues;\n}\n\n// ── streamSpec sources ──────────────────────────────────────────────\n\nfunction collectStreamSourceTools(\n contract: DataContract | undefined,\n): Map<string, string> {\n // Map<channelName, sourceToolName> for every channel that declares\n // a source. Excludes channels without `source` (agent-written).\n const result = new Map<string, string>();\n const streamSpec = contract?.streamSpec;\n if (!streamSpec || typeof streamSpec !== \"object\") return result;\n for (const [channelName, entryRaw] of Object.entries(streamSpec)) {\n const entry = entryRaw as StreamChannelEntry | undefined;\n if (!entry || typeof entry !== \"object\") continue;\n const tool = entry.source?.tool;\n if (typeof tool !== \"string\" || tool.length === 0) continue;\n result.set(channelName, tool);\n }\n return result;\n}\n\nfunction runStreamSourceNoDirectCall(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const map = collectStreamSourceTools(input.contract);\n if (map.size === 0) return [];\n\n const issues: EvalIssue[] = [];\n for (const [channelName, toolName] of map) {\n // Detect a direct call to the source tool. Matches identifier\n // followed by `(` — covers `foo()`, `foo(args)`, `foo.bar()`\n // (the dotted form indirectly catches `someObject.foo()` which\n // the contract doesn't expect to see, since the source tool is\n // an agent-side MCP tool, not a local function).\n const callRe = new RegExp(`\\\\b${toolName}\\\\s*\\\\(`);\n if (!callRe.test(src)) continue;\n\n // Don't false-fire when `toolName` happens to be the channel name\n // bound to useStream (e.g., `const messages = useStream(...)` then\n // `messages(...)` would be weird but we're matching the TOOL name,\n // not the binding). If toolName === channelName then the\n // `<channel>(` call would be the useStream binding being called\n // as a function — which is itself wrong, so still emit.\n issues.push(\n mkIssue(\n \"realtime.stream_source.no_direct_call\",\n `Source code calls \\`${toolName}(...)\\` directly but the contract declares it as the source tool for streamSpec.${channelName}. Source tools are agent-side / runtime-polled; the component MUST NOT invoke them.`,\n `Subscribe to the channel via \\`const ${channelName} = useStream('${channelName}');\\` and read \\`${channelName}.latest\\` / \\`${channelName}.all\\` — the runtime polls or subscribes to '${toolName}' on the component's behalf.`,\n ),\n );\n }\n return issues;\n}\n\n// ── Anti-pattern grep — retired identifiers a model may emit from\n// stale training data ──\n\ninterface RetiredIdentifier {\n /** Regex matching the retired surface in source. */\n readonly pattern: RegExp;\n /** Stable subcategory used for the EvalIssue. */\n readonly id: string;\n /** Human-readable description for the issue message. */\n readonly label: string;\n /** Replacement guidance for the fix message. */\n readonly replacement: string;\n}\n\nconst RETIRED_IDENTIFIERS: readonly RetiredIdentifier[] = [\n {\n pattern: /\\buseWiredTool\\b/,\n id: \"useWiredTool\",\n label: \"`useWiredTool(...)` hook\",\n replacement:\n \"Use `useAction(name)` for user gestures the agent should react to. `agentCapabilities.tools` entries are agent-side catalog declarations — the component never calls them directly.\",\n },\n {\n pattern: /\\buseAgentTool\\b/,\n id: \"useAgentTool\",\n label: \"`useAgentTool(...)` hook\",\n replacement:\n \"Agent-side tools are NEVER imported as component hooks. The contract declares them under `agentCapabilities.tools` for cross-ref (actionSpec.nextStep / streamSpec.source.tool); the component reacts via `useAction` / `useStream`.\",\n },\n {\n pattern: /\\bcallWiredTool\\b/,\n id: \"callWiredTool\",\n label: \"`callWiredTool(...)` call\",\n replacement:\n \"Component-side direct invocation of agent-side tools is retired. Fire a UI gesture via `useAction(name)`; the agent reacts on its next turn (`nextStep` hint optional).\",\n },\n {\n pattern: /\\buseClientTool\\b/,\n id: \"useClientTool\",\n label: \"`useClientTool(name, handler)` hook\",\n replacement:\n \"Use a gadget hook from `@ggui-ai/gadgets` (e.g., `useGeolocation`, `useClipboardWrite`) and thread the result into a contextSpec slot or actionSpec payload.\",\n },\n {\n pattern: /\\bdispatch\\s*:\\s*\\{\\s*kind\\s*:/,\n id: \"dispatch.kind\",\n label: \"`dispatch: { kind: '...' }` discriminated union\",\n replacement:\n \"ActionEntry.dispatch is retired. Use the flat `nextStep?: '<tool>'` field on the action entry instead.\",\n },\n {\n pattern: /\\bintendedTool\\b/,\n id: \"intendedTool\",\n label: \"`intendedTool` field\",\n replacement:\n \"Use the flat `nextStep` field — the hint surface is one optional advisory string, not a nested discriminator.\",\n },\n {\n pattern: /\\bmode\\s*:\\s*['\"`]host-routed['\"`]/,\n id: \"mode.host-routed\",\n label: \"`mode: 'host-routed'`\",\n replacement:\n \"The `mode` field on action entries is retired. All actions are agent-routed; use `nextStep` for the optional tool hint.\",\n },\n {\n pattern: /\\bbroadcast\\s*:\\s*\\{/,\n id: \"broadcast\",\n label: \"`broadcast: { … }` contract field\",\n replacement:\n \"Move the channel source declaration to `streamSpec[channel].source = { tool, args? }`.\",\n },\n {\n // Match `agentTools` only as a contract-shaped object key or\n // property access — not as a local variable name in unrelated\n // code. `\\bagentTools\\s*[:.]` catches `{ agentTools: {...} }` /\n // `contract.agentTools` while ignoring `const agentTools = ...`.\n pattern: /\\bagentTools\\s*[:.]/,\n id: \"contract.agentTools\",\n label: \"`agentTools` top-level contract field\",\n replacement:\n \"The top-level `agentTools` field is retired. Declare agent-side tools under `agentCapabilities.tools` (catalog nested under a capabilities parent for symmetry with `clientCapabilities`).\",\n },\n {\n pattern: /\\bclientCapabilities\\s*\\.\\s*capabilities\\b/,\n id: \"clientCapabilities.capabilities\",\n label: \"`clientCapabilities.capabilities` inner key\",\n replacement:\n \"The inner `capabilities` key is retired. Use `clientCapabilities.gadgets` — entries are library-hook declarations, not RPC capabilities.\",\n },\n {\n pattern: /['\"`]@ggui-ai\\/client-tools['\"`]/,\n id: \"package.@ggui-ai/client-tools\",\n label: \"`@ggui-ai/client-tools` package import\",\n replacement:\n \"The package was renamed to `@ggui-ai/gadgets`. Update the import string.\",\n },\n {\n pattern: /\\bPushStory\\b/,\n id: \"PushStory\",\n label: \"`PushStory` type / `pushStorySchema` schema\",\n replacement:\n \"`PushStory` was retired when the handshake input was flattened. The current wire is `ggui_handshake({intent, blueprintDraft: {contract, variance?, generator?}})` + `ggui_render({handshakeId, props, override?: {contract?, variance?}})` (omit `override` to accept the proposal as-is).\",\n },\n {\n pattern: /\\bpushStorySchema\\b/,\n id: \"pushStorySchema\",\n label: \"`pushStorySchema` zod schema\",\n replacement:\n \"`pushStorySchema` was retired alongside `PushStory`. Current schemas: `handshakeInputSchema` + `renderInputSchema` (with the optional `override` re-aim) in `@ggui-ai/protocol`.\",\n },\n {\n pattern: /\\bstory\\s*\\.\\s*adapters\\b/,\n id: \"story.adapters\",\n label: \"`story.adapters` field access\",\n replacement:\n \"The story.adapters gate was retired alongside `PushStory`. Per-app permission gates flow through `clientCapabilities.gadgets[*].permission` (Permissions-Policy derivation).\",\n },\n {\n pattern: /\\bdeclaredAdapters\\b/,\n id: \"declaredAdapters\",\n label: \"`declaredAdapters` field / runtime gate\",\n replacement:\n \"App-level `declaredAdapters` was retired. Per-app permission gates derive from `clientCapabilities.gadgets[*].permission` instead.\",\n },\n {\n pattern: /\\bassertAdaptersDeclared\\b/,\n id: \"assertAdaptersDeclared\",\n label: \"`assertAdaptersDeclared(...)` runtime call\",\n replacement:\n \"The runtime adapter-gate function is retired. Permissions-Policy is derived per-contract at render commit time and threaded through the bootstrap projection.\",\n },\n {\n pattern: /\\bHandshakeStoredStory\\b/,\n id: \"HandshakeStoredStory\",\n label: \"`HandshakeStoredStory` storage type\",\n replacement:\n \"The OSS handler's stored type is now `HandshakeStoredInput` with the MVB-5 `{intent, blueprintDraft, forceCreate?}` shape.\",\n },\n {\n pattern: /\\brecord\\s*\\.\\s*story\\b/,\n id: \"record.story\",\n label: \"`record.story.*` access on handshake storage\",\n replacement:\n \"Handshake storage was flattened. Read `record.input.*` (intent / blueprintDraft) — the nested `story` wrapper is gone. MVB-5 also adds `record.suggestion` + `record.effectiveContract`.\",\n },\n];\n\nfunction runNoRetiredIdentifiers(input: AxisCheckInput): EvalIssue[] {\n // Source-only scan; compiled code irrelevant for identifier detection.\n // Run even without compiled code so we surface early in the loop.\n const src = input.sourceCode;\n const issues: EvalIssue[] = [];\n for (const rule of RETIRED_IDENTIFIERS) {\n if (!rule.pattern.test(src)) continue;\n issues.push(\n mkIssue(\n `universal.no_retired_identifiers.${rule.id}`,\n `Source contains ${rule.label} — retired from the contract surface.`,\n rule.replacement,\n ),\n );\n }\n return issues;\n}\n\nexport const TOOLING_CHECKS: readonly AxisCheck[] = [\n {\n id: \"tooling.clientCapability.hook_called\",\n axis: \"tooling\",\n values: CLIENT_PRESENT,\n run: runGadgetHookCalled,\n },\n {\n id: \"tooling.clientCapability.start_called\",\n axis: \"tooling\",\n values: CLIENT_PRESENT,\n run: runClientCapabilityStartCalled,\n },\n {\n // Stream-source direct-call check. Gated on realtime axis (rather\n // than tooling) since stream sources are a realtime concern — but\n // logically lives in tooling.ts alongside the other tool-reference\n // checks since the issue class is about referenced agentTools.\n id: \"realtime.stream_source.no_direct_call\",\n axis: \"realtime\",\n values: REALTIME_ACTIVE,\n run: runStreamSourceNoDirectCall,\n },\n {\n // Universal — fires on every tooling-axis value. The check itself\n // is contract-agnostic; the axis gate is \"every contract\" via the\n // full ALL_TOOLING_VALUES list (rather than the universal-check\n // module's \"render\" gate convention) so the anti-pattern stays\n // co-located with the other tooling-related rules.\n id: \"universal.no_retired_identifiers\",\n axis: \"tooling\",\n values: ALL_TOOLING_VALUES,\n run: runNoRetiredIdentifiers,\n },\n];\n","// packages/ui-gen/src/evaluation/axis-checks/extras.ts\n//\n// Axis-specific checks that had no legacy home. These fire on axis values\n// the old 3-mode dispatch didn't route (drag, swipe, compose, multi-step,\n// mixed streams). Intentionally narrow — each catches a specific failure\n// mode the fragments' prompt text tells the LLM to avoid.\n\nimport type { AxisCheck, AxisCheckInput } from \"./types.js\";\nimport type { EvalIssue } from \"../types-public.js\";\n\nfunction mkIssue(\n subcategory: string,\n description: string,\n fix: string,\n result: \"fail\" | \"warn\" = \"warn\",\n): EvalIssue {\n return { tier: 0, result, category: \"mode\", subcategory, description, fix };\n}\n\n/**\n * writeTrigger=drag → must attach onDragStart + onDrop (or onDragOver)\n * somewhere. Otherwise the drag handler is decorative.\n */\nconst dragTriggerWired: AxisCheck = {\n id: \"writeTrigger.drag.handlers_wired\",\n axis: \"writeTrigger\",\n values: [\"drag\"],\n run(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const hasStart = /onDragStart\\s*=/.test(src);\n const hasDrop = /onDrop\\s*=/.test(src);\n if (hasStart && hasDrop) return [];\n return [\n mkIssue(\n \"writeTrigger.drag.handlers_wired\",\n `Classified as writeTrigger=drag but component lacks ${!hasStart ? \"onDragStart\" : \"\"}${!hasStart && !hasDrop ? \" + \" : \"\"}${!hasDrop ? \"onDrop\" : \"\"} handlers.`,\n \"Attach onDragStart to draggable items and onDrop (with onDragOver preventDefault) to drop zones.\",\n \"fail\",\n ),\n ];\n },\n};\n\n/**\n * writeTrigger=swipe → must wire onTouchStart + onTouchEnd. Also emit\n * a warn if no fallback click handlers exist (desktop users).\n */\nconst swipeTriggerWired: AxisCheck = {\n id: \"writeTrigger.swipe.handlers_wired\",\n axis: \"writeTrigger\",\n values: [\"swipe\"],\n run(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const hasTouch = /onTouchStart\\s*=/.test(src) && /onTouchEnd\\s*=/.test(src);\n if (!hasTouch) {\n return [\n mkIssue(\n \"writeTrigger.swipe.handlers_wired\",\n \"Classified as writeTrigger=swipe but component lacks onTouchStart + onTouchEnd handlers.\",\n \"Wire onTouchStart to record the start X/Y, onTouchEnd to classify direction and fire the action.\",\n \"fail\",\n ),\n ];\n }\n return [];\n },\n};\n\n/**\n * writes=compose → exactly one action should be called with ids sourced\n * from two different state slots. Heuristic: at least two useState or\n * props.id references should appear in the action invocation's argument\n * region.\n *\n * Light check: warn if only one id-bearing field appears near the useAction\n * invocation (hard to get false-positive free without AST).\n */\nconst composeCrossEntity: AxisCheck = {\n id: \"writes.compose.cross_entity_ids\",\n axis: \"writes\",\n values: [\"compose\"],\n run(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n // Look for an action invocation passing an object literal with >= 2\n // `*Id` or `id` keys. That's the compose signature.\n const re = /\\{\\s*[^}]*?\\b(\\w*Id|id)\\b[^}]*?,\\s*[^}]*?\\b(\\w*Id|id)\\b[^}]*?\\}/s;\n if (re.test(src)) return [];\n return [\n mkIssue(\n \"writes.compose.cross_entity_ids\",\n \"Classified as writes=compose but no action invocation passes two id-bearing keys together.\",\n \"The compose action must receive both entity ids in one payload, e.g. `schedule({ eventId, calendarId })`.\",\n \"warn\",\n ),\n ];\n },\n};\n\n/**\n * layout=multi-step → integer step state + a step-guard on Next. Re-uses\n * the form check's multi-step signal, but fires even when writes != submit\n * (e.g., multi-step wizards that never submit, like onboarding).\n */\nconst multiStepHasState: AxisCheck = {\n id: \"layout.multi_step.state_present\",\n axis: \"layout\",\n values: [\"multi-step\"],\n run(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const hasIntStep = /useState(?:<number>)?\\s*\\(\\s*[0-9]+\\s*\\)/.test(src);\n if (hasIntStep) return [];\n return [\n mkIssue(\n \"layout.multi_step.state_present\",\n \"Classified as layout=multi-step but no integer-typed useState tracks the current step.\",\n \"Add `const [step, setStep] = useState(0);` and branch rendering on it.\",\n \"fail\",\n ),\n ];\n },\n};\n\n/**\n * layout=multi-step → the design system's Stepper composite must be\n * ADOPTED (rendered). D8 (Exp 47) measured adoption at 17/18 from\n * fragment + JSDoc alone; this check gives the CHECK leg ownership of\n * the mandate so a regression surfaces as a fix turn instead of\n * silently shipping a wizard with no step affordance.\n *\n * Replaces the always-on `stepper-display-only` pitfall (deleted in the\n * same slice): with adoption carried by the WHAT leg, a 6th always-on\n * prompt rule was pure attention-dilution cost (the exp66 count-\n * sensitivity class, ~+9s blended), while this check prices at zero\n * outside multi-step cells. The pitfall's display-only guidance lives\n * on in the fix string below — delivered only when a cell actually\n * needs it.\n */\nconst stepperAdopted: AxisCheck = {\n id: \"layout.multi_step.stepper_adopted\",\n axis: \"layout\",\n values: [\"multi-step\"],\n run(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n if (/<Stepper[\\s/>]/.test(input.sourceCode)) return [];\n return [\n mkIssue(\n \"layout.multi_step.stepper_adopted\",\n \"Classified as layout=multi-step but the design system's Stepper composite is never rendered.\",\n \"Render <Stepper steps={STEPS} current={step} /> above the step body — STEPS is a top-level const array of step labels and `step` is your own useState index. Stepper is display-only: it never stores or advances the step itself.\",\n \"fail\",\n ),\n ];\n },\n};\n\n/**\n * realtime=mixed → the contract declares multiple events of different\n * kinds. Each must have its own useStream call. We approximate by\n * requiring ≥ 2 useStream calls when the vector is mixed.\n */\nconst mixedStreamsHaveHandlers: AxisCheck = {\n id: \"realtime.mixed.handlers_per_event\",\n axis: \"realtime\",\n values: [\"mixed\"],\n run(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n // Accept both `useStream('x')` and `useStream<T>('x')` (generic type arg).\n // The boilerplate pre-emits typed calls, so the `(` -only regex was a\n // 100%-false-positive on chat-interface + stock-ticker (Experiment 34).\n const matches = src.match(/useStream\\s*(?:<[^>]*>)?\\s*\\(/g);\n const count = matches?.length ?? 0;\n if (count >= 2) return [];\n return [\n mkIssue(\n \"realtime.mixed.handlers_per_event\",\n `Classified as realtime=mixed but only ${count} useStream call(s) found — mixed streams need one handler per event.`,\n \"Add a separate `useStream('eventName')` for each event in the contract.\",\n \"fail\",\n ),\n ];\n },\n};\n\nexport const EXTRA_CHECKS: readonly AxisCheck[] = [\n dragTriggerWired,\n swipeTriggerWired,\n composeCrossEntity,\n multiStepHasState,\n stepperAdopted,\n mixedStreamsHaveHandlers,\n];\n","// packages/ui-gen/src/evaluation/axis-checks/registry.ts\n//\n// Flat list of all axis-gated checks. The dispatcher iterates this and\n// runs every entry whose gate matches the classification's axis vector.\n\nimport type { AxisCheck } from \"./types.js\";\nimport { UNIVERSAL_CHECKS } from \"./checks/universal.js\";\nimport { STATE_MERGE_CHECKS } from \"./checks/state-merge.js\";\nimport { STATE_UI_AFFORDANCE_CHECKS } from \"./checks/state-ui-affordance.js\";\nimport { REALTIME_CHECKS } from \"./checks/realtime.js\";\nimport { WRITES_CHECKS } from \"./checks/writes.js\";\nimport { STATE_PAYLOAD_CHECKS } from \"./checks/state-payload.js\";\nimport { TOOLING_CHECKS } from \"./checks/tooling.js\";\nimport { EXTRA_CHECKS } from \"./extras.js\";\n\nexport const REGISTRY: readonly AxisCheck[] = [\n ...UNIVERSAL_CHECKS,\n ...STATE_MERGE_CHECKS,\n ...STATE_UI_AFFORDANCE_CHECKS,\n ...REALTIME_CHECKS,\n ...WRITES_CHECKS,\n ...STATE_PAYLOAD_CHECKS,\n ...TOOLING_CHECKS,\n ...EXTRA_CHECKS,\n];\n","// Axis-keyed dispatcher. Iterates the flat REGISTRY, runs each check\n// whose gate matches the classification's axis vector, and accumulates\n// issues.\n\nimport type { DataContract } from \"@ggui-ai/protocol\";\nimport type { Classification } from \"../../classifier/index.js\";\nimport type { EvalIssue } from \"../types-public.js\";\nimport { REGISTRY } from \"./registry.js\";\nimport { matches, type AxisCheckInput } from \"./types.js\";\n\nexport interface RunAxisChecksInput {\n sourceCode: string;\n compiledCode: string | null;\n contract?: DataContract;\n originalPrompt: string;\n}\n\nexport function runAxisChecks(\n classification: Classification,\n input: RunAxisChecksInput,\n): EvalIssue[] {\n if (input.compiledCode === null) return [];\n\n const axisInput: AxisCheckInput = {\n sourceCode: input.sourceCode,\n compiledCode: input.compiledCode,\n ...(input.contract !== undefined ? { contract: input.contract } : {}),\n originalPrompt: input.originalPrompt,\n classification,\n };\n\n const issues: EvalIssue[] = [];\n const firedIds = new Set<string>();\n for (const check of REGISTRY) {\n if (!matches(classification.vector, check)) continue;\n // Dedup by id — a check may be registered under multiple gates.\n if (firedIds.has(check.id)) continue;\n firedIds.add(check.id);\n issues.push(...check.run(axisInput));\n }\n return issues;\n}\n","// packages/ui-gen/src/evaluation/visual-evaluator.ts\n//\n// Visual evaluator — renders compiled component, takes screenshot,\n// sends to multimodal LLM for visual quality scoring.\n//\n// Two modes:\n// 1. Screenshot mode (puppeteer available): full visual evaluation\n// 2. Source-only mode (no puppeteer): falls back to code-based evaluation\n//\n// The visual evaluator complements the code-based evaluator by catching\n// issues only visible when rendered: broken layouts, overlapping elements,\n// poor visual hierarchy, missing whitespace.\n\nimport { build } from 'esbuild';\nimport { getCssTokens } from '@ggui-ai/design/rendering';\nimport { resolve, dirname } from 'path';\nimport { fileURLToPath } from 'url';\nimport { writeFileSync, mkdirSync, unlinkSync } from 'fs';\nimport { tmpdir } from 'os';\nimport { createVisionAgent, type AgentConfig } from '../harness/llm-router';\nimport type { EvaluationResult, EvaluationIssue, DimensionScores } from './types';\nimport type { EvalIssue } from './types-public.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface VisualEvalConfig {\n /** LLM provider for multimodal evaluation */\n provider: 'claude' | 'google';\n /** Model ID (must support vision/multimodal) */\n model?: string;\n /** Pass threshold for visual score (0-100) */\n passThreshold: number;\n /** Sample props to render the component with */\n sampleProps?: Record<string, unknown>;\n /** Viewport dimensions for screenshot */\n viewport?: { width: number; height: number };\n /**\n * Optional provider-routing override — see\n * `AgentConfig.routeOverride`. Threaded onto the agent this\n * evaluator constructs so its multimodal call never falls back to\n * `process.env` for credentials or model routing.\n */\n routeOverride?: AgentConfig['routeOverride'];\n /**\n * Provider-429-retry observer — see `AgentConfig.onRetry`.\n * Without it, a rate-limited retry inside the evaluation call\n * happens (the agent's retry loop is unconditional) but never\n * reaches the caller's structured log.\n */\n onRetry?: AgentConfig['onRetry'];\n}\n\nexport interface VisualEvalContext {\n /** Compiled JavaScript code (ESM with imports) */\n compiledCode: string;\n /** Original user prompt */\n originalPrompt: string;\n /** Design system CSS tokens */\n cssTokens?: string;\n}\n\n// ---------------------------------------------------------------------------\n// HTML blueprint for rendering\n// ---------------------------------------------------------------------------\n\n/**\n * Bundle the compiled component with the design system using esbuild.\n * Produces a self-contained IIFE that only needs React + ReactDOM from CDN.\n * Resolves @ggui-ai/design/* imports from the local monorepo packages.\n */\n/**\n * The on-disk root of `@ggui-ai/design`, for the esbuild aliases that\n * let JUDGED components resolve the same design source production\n * ships. Exported for the ggui#613 regression pin: the previous inline\n * `'..','..','..','packages','design'` resolved a pre-`oss/`-migration\n * path (`oss/packages/packages/design`) that exists from NEITHER the\n * src nor the dist layout — the visual leg's bundle broke silently at\n * the migration. Three ups from `<pkg>/src/evaluation` (or\n * `<pkg>/dist/evaluation`) is `oss/packages/`; the design package is\n * its direct child.\n */\nexport function resolveDesignPackageDir(): string {\n const selfDir = dirname(fileURLToPath(import.meta.url));\n return resolve(selfDir, '..', '..', '..', 'design');\n}\n\nasync function bundleForRendering(\n compiledCode: string,\n sampleProps: Record<string, unknown>,\n): Promise<string> {\n // Write component + entry to temp files for esbuild\n const tmpDir = resolve(tmpdir(), 'ggui-visual-eval-' + Date.now());\n mkdirSync(tmpDir, { recursive: true });\n const componentFile = resolve(tmpDir, 'component.tsx');\n const entryFile = resolve(tmpDir, 'entry.tsx');\n\n const designPkgDir = resolveDesignPackageDir();\n\n // Write the compiled component as a separate module\n writeFileSync(componentFile, compiledCode);\n\n // Entry file imports the component and renders it\n const entryCode = `\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport Component from './component.tsx';\n\nconst props = ${JSON.stringify(sampleProps)};\nconst root = createRoot(document.getElementById('root')!);\ntry {\n root.render(React.createElement(Component, props));\n} catch (err) {\n root.render(React.createElement('div', { className: 'error' }, 'Render error: ' + (err as Error).message));\n}\n`;\n\n writeFileSync(entryFile, entryCode);\n\n try {\n const result = await build({\n entryPoints: [entryFile],\n bundle: true,\n write: false,\n format: 'esm',\n platform: 'browser',\n target: 'es2020',\n jsx: 'automatic',\n jsxImportSource: 'react',\n external: ['react', 'react-dom', 'react-dom/client', 'react/jsx-runtime'],\n alias: {\n // D1: generated code imports the single `@ggui-ai/design` barrel.\n // The subpath aliases stay for any first-party / legacy code.\n '@ggui-ai/design': resolve(designPkgDir, 'src', 'index.ts'),\n '@ggui-ai/design/primitives': resolve(designPkgDir, 'src', 'primitives', 'index.ts'),\n '@ggui-ai/design/components': resolve(designPkgDir, 'src', 'components', 'index.ts'),\n '@ggui-ai/design/compositions': resolve(designPkgDir, 'src', 'compositions', 'index.ts'),\n '@ggui-ai/design/interact': resolve(designPkgDir, 'src', 'interact', 'index.ts'),\n },\n logLevel: 'silent',\n });\n\n return result.outputFiles[0]?.text ?? '';\n } finally {\n try { unlinkSync(entryFile); } catch { /* cleanup */ }\n try { unlinkSync(componentFile); } catch { /* cleanup */ }\n }\n}\n\nfunction buildRenderHTML(\n bundledCode: string,\n cssTokens?: string,\n): string {\n // Default to the design tokens production's no-theme branch injects\n // (getCssTokens → default theme, light) — ggui#613: under the s4\n // fallback ban the generated component's `var(--ggui-*)` references\n // carry no literal fallbacks, so an un-injected judged render shows\n // unset colors and the multimodal judge grades broken output. An\n // explicit caller value still wins (theme-aware callers pass their\n // own).\n const tokens = cssTokens ?? getCssTokens();\n return `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <style>\n ${tokens}\n *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n body {\n font-family: var(--ggui-font-family-sans, system-ui, -apple-system, sans-serif);\n background: var(--ggui-color-neutral-50, #ffffff);\n color: var(--ggui-color-neutral-900, #111827);\n }\n .error { color: #dc2626; padding: 16px; font-family: monospace; white-space: pre-wrap; }\n </style>\n</head>\n<body>\n <div id=\"root\"></div>\n <script type=\"importmap\">\n {\n \"imports\": {\n \"react\": \"https://esm.sh/react@18\",\n \"react-dom\": \"https://esm.sh/react-dom@18\",\n \"react-dom/client\": \"https://esm.sh/react-dom@18/client\",\n \"react/jsx-runtime\": \"https://esm.sh/react@18/jsx-runtime\"\n }\n }\n </script>\n <script type=\"module\">\n${bundledCode}\n </script>\n</body>\n</html>`;\n}\n\n// ---------------------------------------------------------------------------\n// Screenshot capture (optional puppeteer dependency)\n// ---------------------------------------------------------------------------\n\n/**\n * Take a screenshot of the rendered component.\n * Returns base64-encoded PNG or null if puppeteer is not available.\n */\nasync function captureScreenshot(\n html: string,\n viewport: { width: number; height: number } = { width: 1280, height: 800 },\n): Promise<Buffer | null> {\n try {\n // puppeteer-core + @sparticuz/chromium — works on both local dev & Lambda\n const puppeteer = await import('puppeteer-core');\n const chromium = await import('@sparticuz/chromium');\n\n const launchOptions = {\n args: chromium.default.args,\n defaultViewport: viewport,\n executablePath: await chromium.default.executablePath(),\n headless: true,\n };\n\n const browser = await puppeteer.default.launch(launchOptions);\n try {\n const page = await browser.newPage();\n // puppeteer ≥24.43 narrowed setContent's waitUntil to\n // 'load' | 'domcontentloaded'; waitForNetworkIdle (0 connections\n // for 500ms) reproduces the old 'networkidle0' semantics.\n await page.setContent(html, { waitUntil: 'load', timeout: 15000 });\n await page.waitForNetworkIdle({ idleTime: 500, timeout: 15000 }).catch(() => {});\n await page.waitForSelector('#root > *', { timeout: 10000 }).catch(() => {});\n // Wait a bit for CSS/fonts to settle\n await new Promise(r => setTimeout(r, 1000));\n const screenshot = await page.screenshot({ type: 'png', fullPage: true }) as Buffer;\n return screenshot;\n } finally {\n await browser.close();\n }\n } catch (e) {\n console.warn(`[visual-eval] screenshot failed: ${e instanceof Error ? e.message : e}`);\n return null;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Multimodal LLM evaluation\n// ---------------------------------------------------------------------------\n\nconst VISUAL_EVAL_PROMPT = `You are a visual quality evaluator for ggui — a platform where AI agents generate React UI components on demand.\n\n## Context\nThe screenshot shows a generated React component built from a design system with CSS variable theming. The component was created by an LLM to fulfill a user's request. Your job is to evaluate whether the generated UI achieves the user's goal AND looks professionally designed.\n\n## Scoring Dimensions (0-100 each)\n\n1. **completeness** (25%): Does the screenshot show ALL features the user requested? Are all sections, controls, data fields, and interactive elements present? Missing features or sections = major deduction. Compare against the original request carefully.\n\n2. **layout** (25%): Is the layout well-composed? Clear sections and grouping? No overlapping elements? Proper spacing between elements? Responsive-looking? Does it look like a professional app UI, not a homework project?\n\n3. **hierarchy** (25%): Clear visual hierarchy? Headings are visually distinct from body text? Primary actions (buttons) are prominent? Information grouped logically with clear section breaks? Color and size used to guide the eye?\n\n4. **aesthetics** (25%): Professional, polished appearance? Consistent color palette? Good use of whitespace — not too sparse, not too cluttered? Cards, shadows, and borders used effectively? Does it look like something a designer would approve? Would you be comfortable showing this to a client?\n\n## Scoring Guide\n- 90-100: Production-ready. Would ship to real users. Polished layout, clear hierarchy, professional aesthetics.\n- 80-89: Good quality. Minor improvements needed (slightly tight spacing, one section could be better grouped).\n- 70-79: Acceptable but generic. Works correctly but lacks design polish or visual refinement.\n- 60-69: Below standard. Noticeable problems — cramped layout, poor hierarchy, or missing sections.\n- Below 60: Broken or fundamentally incomplete. Error messages visible, blank areas, or critical features missing.\n\n## Important\n- Check the screenshot against the \"Original Request\" — does it actually deliver what was asked for?\n- Error messages like \"Render error\" or blank white space = rendering score 0\n- A component that renders but is just a wall of text with no structure should score low on layout and hierarchy\n\nRespond with ONLY a JSON object (no markdown, no explanation):\n{\n \"completeness\": <0-100>,\n \"layout\": <0-100>,\n \"hierarchy\": <0-100>,\n \"aesthetics\": <0-100>,\n \"issues\": [\n { \"dimension\": \"<dimension>\", \"severity\": \"<critical|major|minor>\", \"description\": \"<what's wrong>\", \"fix\": \"<specific fix>\" }\n ],\n \"critique\": \"<2-3 sentences: what's good, what needs improvement, does it achieve the user's goal?>\"\n}`;\n\n/**\n * Send the screenshot to the configured multimodal provider through\n * the shared `LLMAgent` machinery. Routing through `createVisionAgent`\n * (rather than constructing provider SDK clients inline) is what puts\n * this call inside the same `apiCall()` choke point as every other\n * completion: provider 429s retry with `Retry-After` honoring, the\n * caller's `onRetry` observer sees each retry, and `routeOverride`\n * governs credentials and model routing (including the Anthropic\n * Bedrock path) instead of `process.env`.\n */\nasync function callMultimodalLLM(\n config: VisualEvalConfig,\n model: string,\n prompt: string,\n screenshot: Buffer,\n originalPrompt: string,\n) {\n const userPrompt = `## Original Request\\n${originalPrompt}\\n\\nEvaluate the screenshot of the generated component.`;\n const agent = createVisionAgent({\n provider: config.provider === 'claude' ? 'anthropic' : config.provider,\n model,\n routeOverride: config.routeOverride,\n onRetry: config.onRetry,\n });\n return agent.callVision(\n model,\n prompt,\n userPrompt,\n { mediaType: 'image/png', base64: screenshot.toString('base64') },\n 1500,\n );\n}\n\n// ---------------------------------------------------------------------------\n// Main entry point\n// ---------------------------------------------------------------------------\n\n/**\n * Run visual evaluation on a compiled component.\n *\n * 1. Builds an HTML page with the component + sample props\n * 2. Takes a screenshot via puppeteer (if available)\n * 3. Sends screenshot to multimodal LLM for visual scoring\n *\n * Returns null if puppeteer is not available (graceful fallback).\n */\nexport async function runVisualEvaluation(\n context: VisualEvalContext,\n config: VisualEvalConfig,\n): Promise<EvaluationResult | null> {\n const startTime = Date.now();\n\n // Bundle component + design system into a single JS file\n const bundledCode = await bundleForRendering(\n context.compiledCode,\n config.sampleProps ?? {},\n );\n console.log(`[visual-eval] bundled: ${bundledCode.length}B (${Date.now() - startTime}ms)`);\n\n // Build the HTML page\n const html = buildRenderHTML(bundledCode, context.cssTokens);\n\n // Take screenshot\n const screenshot = await captureScreenshot(html, config.viewport);\n if (!screenshot) {\n console.warn('[visual-eval] no browser available — skipping visual evaluation');\n return null;\n }\n console.log(`[visual-eval] screenshot: ${screenshot.length}B (${Date.now() - startTime}ms)`);\n\n // Send to multimodal LLM\n const model = config.model ?? getDefaultVisualModel(config.provider);\n const response = await callMultimodalLLM(\n config,\n model,\n VISUAL_EVAL_PROMPT,\n screenshot,\n context.originalPrompt,\n );\n\n // Parse response\n const result = parseVisualResponse(response.text, config.passThreshold);\n result.inputTokens = response.inputTokens;\n result.outputTokens = response.outputTokens;\n\n const elapsed = Date.now() - startTime;\n console.log(`[visual-eval] score=${result.finalScore} (${elapsed}ms) | in=${response.inputTokens} out=${response.outputTokens}`);\n\n return result;\n}\n\n/**\n * Exported for testing — bundles and builds the HTML for rendering;\n * `callMultimodalLLM` so the #504 routing contract (config →\n * `createVisionAgent`) is assertable without a screenshot pipeline.\n */\nexport { bundleForRendering, buildRenderHTML, callMultimodalLLM };\n\n// ---------------------------------------------------------------------------\n// Response parsing\n// ---------------------------------------------------------------------------\n\nfunction parseVisualResponse(text: string, passThreshold: number): EvaluationResult {\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error('Visual evaluator did not return valid JSON: ' + text.slice(0, 200));\n }\n\n const raw = JSON.parse(jsonMatch[0]);\n\n // Visual dimensions (equal weights now)\n const completeness = raw.completeness ?? 0;\n const layout = raw.layout ?? 0;\n const hierarchy = raw.hierarchy ?? 0;\n const aesthetics = raw.aesthetics ?? 0;\n\n // Weighted average\n const finalScore = Math.round(\n completeness * 0.25 +\n layout * 0.25 +\n hierarchy * 0.25 +\n aesthetics * 0.25,\n );\n\n // Map to standard dimensions for consistency\n const dimensions: DimensionScores = {\n completeness,\n visualPolish: aesthetics,\n interactivity: 0, // can't assess interactivity from screenshot\n accessibility: 0, // can't assess a11y from screenshot\n codeQuality: 0, // can't assess code from screenshot\n };\n\n const issues: EvaluationIssue[] = (raw.issues || []).map((i: Record<string, string>) => ({\n dimension: i.dimension || 'visual',\n severity: (i.severity as 'critical' | 'major' | 'minor') || 'minor',\n description: i.description || '',\n fix: i.fix || '',\n }));\n\n return {\n passed: finalScore >= passThreshold,\n finalScore,\n dimensions,\n issues,\n critique: raw.critique,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Default models for visual evaluation\n// ---------------------------------------------------------------------------\n\nfunction getDefaultVisualModel(provider: 'claude' | 'google'): string {\n switch (provider) {\n case 'claude': return 'claude-haiku-4-5-20251001';\n case 'google': return 'gemini-3-flash-preview';\n }\n}\n\n// ---------------------------------------------------------------------------\n// Tier 2 adapter — returns EvalIssue[]\n// ---------------------------------------------------------------------------\n\n/**\n * Run visual evaluation and return tier 2 EvalIssues.\n */\nexport async function runVisualEval(\n context: VisualEvalContext,\n config: VisualEvalConfig,\n): Promise<EvalIssue[]> {\n const result = await runVisualEvaluation(context, config);\n if (!result) return []; // puppeteer not available\n\n return (result.issues || []).map(issue => ({\n tier: 2 as const,\n result: (issue.severity === 'critical' ? 'fail' : 'warn') as 'fail' | 'warn',\n category: 'visual' as const,\n subcategory: issue.dimension,\n severity: (issue.severity === 'critical' ? 'critical' : 'major') as 'critical' | 'major',\n description: issue.description,\n fix: issue.fix || '',\n }));\n}\n"]}
1
+ {"version":3,"sources":["../../src/adapters/openrouter/types.ts","../../src/adapters/openrouter/client.ts","../../../../node_modules/events-universal/default.js","../../../../node_modules/fast-fifo/fixed-size.js","../../../../node_modules/fast-fifo/index.js","../../../../node_modules/b4a/index.js","../../../../node_modules/text-decoder/lib/pass-through-decoder.js","../../../../node_modules/text-decoder/lib/utf8-decoder.js","../../../../node_modules/text-decoder/index.js","../../../../node_modules/streamx/lib/errors.js","../../../../node_modules/streamx/index.js","../../../../node_modules/@sparticuz/chromium/node_modules/tar-stream/headers.js","../../../../node_modules/@sparticuz/chromium/node_modules/tar-stream/extract.js","../../../../node_modules/@sparticuz/chromium/node_modules/tar-stream/constants.js","../../../../node_modules/@sparticuz/chromium/node_modules/tar-stream/pack.js","../../../../node_modules/@sparticuz/chromium/node_modules/tar-stream/index.js","../../../../node_modules/wrappy/wrappy.js","../../../../node_modules/once/once.js","../../../../node_modules/end-of-stream/index.js","../../../../node_modules/pump/index.js","../../../../node_modules/@sparticuz/chromium/node_modules/tar-fs/index.js","../../../../node_modules/@sparticuz/chromium/build/helper.js","../../../../node_modules/@sparticuz/chromium/build/lambdafs.js","../../../../node_modules/@sparticuz/chromium/build/paths.js","../../../../node_modules/@sparticuz/chromium/build/index.js","../../src/evaluation/types-public.ts","../../src/adapters/claude/client.ts","../../src/adapters/provider-router.ts","../../src/adapters/tool-bridge.ts","../../src/harness/llm-trace-sink.ts","../../src/harness/llm-router.ts","../../src/evaluation/evaluator.ts","../../src/evaluation/message-parsing.ts","../../src/evaluation/prompts.ts","../../src/evaluation/types.ts","../../src/evaluation/loop.ts","../../src/evaluation/mcp-server.ts","../../src/evaluation/axis-checks/helpers.ts","../../src/evaluation/axis-checks/checks/universal.ts","../../src/evaluation/axis-checks/checks/state-merge.ts","../../src/evaluation/axis-checks/checks/state-ui-affordance.ts","../../src/evaluation/axis-checks/checks/realtime.ts","../../src/evaluation/axis-checks/checks/writes.ts","../../src/evaluation/axis-checks/checks/state-payload.ts","../../src/evaluation/axis-checks/checks/tooling.ts","../../src/evaluation/axis-checks/extras.ts","../../src/evaluation/axis-checks/registry.ts","../../src/evaluation/axis-checks/dispatch.ts","../../src/design-mode.ts","../../src/evaluation/visual-evaluator.ts"],"names":["fill","TextDecoder","data","Readable","pipeline","resolve","onerror","extract","cb","pack","err","opts","fs","stat","nodeMajorVersion","import_tar_fs","tmpdir","join","createWriteStream","existsSync","tool","OpenRouterClient","z","REALTIME_ACTIVE","mkIssue","matches","dirname","fileURLToPath","screenshot","response","result","elapsed"],"mappings":"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","file":"index.js","sourcesContent":["// packages/ui-gen/src/adapters/openrouter/types.ts\n//\n// OpenRouter-specific types for the chat completion API.\n// Reference: https://openrouter.ai/docs/api-reference\n\nimport type { JsonObject } from '@ggui-ai/protocol';\n\n// =============================================================================\n// Model metadata (from GET /api/v1/models)\n// =============================================================================\n\n/** Model entry from OpenRouter's /api/v1/models endpoint */\nexport interface OpenRouterModelEntry {\n id: string;\n name: string;\n description: string;\n pricing: { prompt: string; completion: string; image?: string };\n context_length: number;\n architecture: {\n modality: string;\n tokenizer: string;\n instruct_type: string | null;\n };\n top_provider: {\n context_length: number;\n max_completion_tokens: number;\n is_moderated: boolean;\n };\n per_request_limits: Record<string, string> | null;\n}\n\n// =============================================================================\n// Chat Completion API\n// =============================================================================\n\nexport interface OpenRouterMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string | OpenRouterContentBlock[] | null;\n tool_calls?: OpenRouterToolCall[];\n tool_call_id?: string;\n}\n\nexport interface OpenRouterContentBlock {\n type: 'text';\n text: string;\n cache_control?: { type: 'ephemeral' };\n}\n\nexport interface OpenRouterTool {\n type: 'function';\n function: {\n name: string;\n description: string;\n parameters: JsonObject;\n };\n}\n\nexport interface OpenRouterToolCall {\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n}\n\nexport interface OpenRouterChatRequest {\n model: string;\n messages: OpenRouterMessage[];\n tools?: OpenRouterTool[];\n tool_choice?: 'auto' | 'required' | 'none';\n max_tokens?: number;\n temperature?: number;\n stream?: boolean;\n thinking?: { type: 'enabled'; budget_tokens: number };\n}\n\nexport interface OpenRouterChatResponse {\n id: string;\n model: string;\n choices: Array<{\n index: number;\n message: {\n role: 'assistant';\n content: string | null;\n tool_calls?: OpenRouterToolCall[];\n thinking?: string;\n };\n finish_reason: string;\n }>;\n usage: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n cache_creation_input_tokens?: number;\n cache_read_input_tokens?: number;\n };\n}\n\n// =============================================================================\n// SSE Streaming\n// =============================================================================\n\nexport interface OpenRouterStreamDelta {\n id: string;\n model: string;\n choices: Array<{\n index: number;\n delta: {\n role?: 'assistant';\n content?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: 'function';\n function?: { name?: string; arguments?: string };\n }>;\n };\n finish_reason: string | null;\n }>;\n usage?: OpenRouterChatResponse['usage'];\n}\n\n// =============================================================================\n// Error\n// =============================================================================\n\nexport class OpenRouterError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly code?: string,\n /**\n * Response headers, when the caller had access to them at throw\n * time (#489). Only `client.ts`'s two HTTP-response-driven throw\n * sites populate this — the \"no response body\" throw has no\n * response to read headers from. Duck-typed against the same\n * `{ get(name): string | null }` shape `llm-router.ts`'s\n * `extractRetryAfterSec` already reads from Anthropic/OpenAI SDK\n * errors, so OpenRouter gets retry-after support for free.\n */\n public readonly headers?: { get(name: string): string | null },\n ) {\n super(message);\n this.name = 'OpenRouterError';\n }\n\n get isTransient(): boolean {\n return this.status === 408 || this.status === 429\n || this.status === 502 || this.status === 503;\n }\n}\n","// packages/ui-gen/src/adapters/openrouter/client.ts\n//\n// Direct fetch()-based HTTP client for OpenRouter's API.\n// No OpenAI SDK dependency — independent implementation.\n\nimport type {\n OpenRouterChatRequest,\n OpenRouterChatResponse,\n OpenRouterStreamDelta,\n} from './types';\nimport { OpenRouterError } from './types';\n\nexport interface OpenRouterClientConfig {\n apiKey: string;\n baseUrl?: string;\n siteUrl?: string;\n siteName?: string;\n}\n\nconst DEFAULT_BASE_URL = 'https://openrouter.ai/api/v1';\n\nexport class OpenRouterClient {\n private readonly baseUrl: string;\n private readonly headers: Record<string, string>;\n\n constructor(private readonly config: OpenRouterClientConfig) {\n this.baseUrl = config.baseUrl ?? process.env.OPENROUTER_BASE_URL ?? DEFAULT_BASE_URL;\n this.headers = {\n 'Authorization': `Bearer ${config.apiKey}`,\n 'Content-Type': 'application/json',\n 'HTTP-Referer': config.siteUrl ?? process.env.OPENROUTER_SITE_URL ?? 'https://ggui.ai',\n 'X-Title': config.siteName ?? process.env.OPENROUTER_SITE_NAME ?? 'ggui',\n };\n }\n\n /**\n * Non-streaming chat completion.\n */\n async chatCompletion(\n params: Omit<OpenRouterChatRequest, 'stream'>,\n ): Promise<OpenRouterChatResponse> {\n const body: OpenRouterChatRequest = { ...params, stream: false };\n const response = await fetch(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorBody = await response.json().catch(() => ({ error: { message: response.statusText } }));\n const message = (errorBody as { error?: { message?: string } }).error?.message ?? response.statusText;\n throw new OpenRouterError(message, response.status, undefined, response.headers);\n }\n\n return response.json() as Promise<OpenRouterChatResponse>;\n }\n\n /**\n * Streaming chat completion via SSE.\n * Yields delta chunks, accumulates the final usage from the last chunk.\n */\n async *chatCompletionStream(\n params: Omit<OpenRouterChatRequest, 'stream'>,\n ): AsyncGenerator<OpenRouterStreamDelta> {\n const body: OpenRouterChatRequest = { ...params, stream: true };\n const response = await fetch(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorBody = await response.json().catch(() => ({ error: { message: response.statusText } }));\n const message = (errorBody as { error?: { message?: string } }).error?.message ?? response.statusText;\n throw new OpenRouterError(message, response.status, undefined, response.headers);\n }\n\n if (!response.body) {\n throw new OpenRouterError('No response body for streaming request', 500);\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(':')) continue;\n if (trimmed === 'data: [DONE]') return;\n if (!trimmed.startsWith('data: ')) continue;\n\n const json = trimmed.slice('data: '.length);\n try {\n yield JSON.parse(json) as OpenRouterStreamDelta;\n } catch {\n // Skip malformed chunks\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n}\n","module.exports = require('events')\n","module.exports = class FixedFIFO {\n constructor (hwm) {\n if (!(hwm > 0) || ((hwm - 1) & hwm) !== 0) throw new Error('Max size for a FixedFIFO should be a power of two')\n this.buffer = new Array(hwm)\n this.mask = hwm - 1\n this.top = 0\n this.btm = 0\n this.next = null\n }\n\n clear () {\n this.top = this.btm = 0\n this.next = null\n this.buffer.fill(undefined)\n }\n\n push (data) {\n if (this.buffer[this.top] !== undefined) return false\n this.buffer[this.top] = data\n this.top = (this.top + 1) & this.mask\n return true\n }\n\n shift () {\n const last = this.buffer[this.btm]\n if (last === undefined) return undefined\n this.buffer[this.btm] = undefined\n this.btm = (this.btm + 1) & this.mask\n return last\n }\n\n peek () {\n return this.buffer[this.btm]\n }\n\n isEmpty () {\n return this.buffer[this.btm] === undefined\n }\n}\n","const FixedFIFO = require('./fixed-size')\n\nmodule.exports = class FastFIFO {\n constructor (hwm) {\n this.hwm = hwm || 16\n this.head = new FixedFIFO(this.hwm)\n this.tail = this.head\n this.length = 0\n }\n\n clear () {\n this.head = this.tail\n this.head.clear()\n this.length = 0\n }\n\n push (val) {\n this.length++\n if (!this.head.push(val)) {\n const prev = this.head\n this.head = prev.next = new FixedFIFO(2 * this.head.buffer.length)\n this.head.push(val)\n }\n }\n\n shift () {\n if (this.length !== 0) this.length--\n const val = this.tail.shift()\n if (val === undefined && this.tail.next) {\n const next = this.tail.next\n this.tail.next = null\n this.tail = next\n return this.tail.shift()\n }\n\n return val\n }\n\n peek () {\n const val = this.tail.peek()\n if (val === undefined && this.tail.next) return this.tail.next.peek()\n return val\n }\n\n isEmpty () {\n return this.length === 0\n }\n}\n","function isBuffer(value) {\n return Buffer.isBuffer(value) || value instanceof Uint8Array\n}\n\nfunction isEncoding(encoding) {\n return Buffer.isEncoding(encoding)\n}\n\nfunction alloc(size, fill, encoding) {\n return Buffer.alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe(size) {\n return Buffer.allocUnsafe(size)\n}\n\nfunction allocUnsafeSlow(size) {\n return Buffer.allocUnsafeSlow(size)\n}\n\nfunction byteLength(string, encoding) {\n return Buffer.byteLength(string, encoding)\n}\n\nfunction compare(a, b) {\n return Buffer.compare(a, b)\n}\n\nfunction concat(buffers, totalLength) {\n return Buffer.concat(buffers, totalLength)\n}\n\nfunction copy(source, target, targetStart, start, end) {\n return toBuffer(source).copy(target, targetStart, start, end)\n}\n\nfunction equals(a, b) {\n return toBuffer(a).equals(b)\n}\n\nfunction fill(buffer, value, offset, end, encoding) {\n return toBuffer(buffer).fill(value, offset, end, encoding)\n}\n\nfunction from(value, encodingOrOffset, length) {\n return Buffer.from(value, encodingOrOffset, length)\n}\n\nfunction includes(buffer, value, byteOffset, encoding) {\n return toBuffer(buffer).includes(value, byteOffset, encoding)\n}\n\nfunction indexOf(buffer, value, byfeOffset, encoding) {\n return toBuffer(buffer).indexOf(value, byfeOffset, encoding)\n}\n\nfunction lastIndexOf(buffer, value, byteOffset, encoding) {\n return toBuffer(buffer).lastIndexOf(value, byteOffset, encoding)\n}\n\nfunction swap16(buffer) {\n return toBuffer(buffer).swap16()\n}\n\nfunction swap32(buffer) {\n return toBuffer(buffer).swap32()\n}\n\nfunction swap64(buffer) {\n return toBuffer(buffer).swap64()\n}\n\nfunction toBuffer(buffer) {\n if (Buffer.isBuffer(buffer)) return buffer\n return Buffer.from(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n}\n\nfunction toString(buffer, encoding, start, end) {\n return toBuffer(buffer).toString(encoding, start, end)\n}\n\nfunction write(buffer, string, offset, length, encoding) {\n return toBuffer(buffer).write(string, offset, length, encoding)\n}\n\nfunction readDoubleBE(buffer, offset) {\n return toBuffer(buffer).readDoubleBE(offset)\n}\n\nfunction readDoubleLE(buffer, offset) {\n return toBuffer(buffer).readDoubleLE(offset)\n}\n\nfunction readFloatBE(buffer, offset) {\n return toBuffer(buffer).readFloatBE(offset)\n}\n\nfunction readFloatLE(buffer, offset) {\n return toBuffer(buffer).readFloatLE(offset)\n}\n\nfunction readInt32BE(buffer, offset) {\n return toBuffer(buffer).readInt32BE(offset)\n}\n\nfunction readInt32LE(buffer, offset) {\n return toBuffer(buffer).readInt32LE(offset)\n}\n\nfunction readUInt32BE(buffer, offset) {\n return toBuffer(buffer).readUInt32BE(offset)\n}\n\nfunction readUInt32LE(buffer, offset) {\n return toBuffer(buffer).readUInt32LE(offset)\n}\n\nfunction writeDoubleBE(buffer, value, offset) {\n return toBuffer(buffer).writeDoubleBE(value, offset)\n}\n\nfunction writeDoubleLE(buffer, value, offset) {\n return toBuffer(buffer).writeDoubleLE(value, offset)\n}\n\nfunction writeFloatBE(buffer, value, offset) {\n return toBuffer(buffer).writeFloatBE(value, offset)\n}\n\nfunction writeFloatLE(buffer, value, offset) {\n return toBuffer(buffer).writeFloatLE(value, offset)\n}\n\nfunction writeInt32BE(buffer, value, offset) {\n return toBuffer(buffer).writeInt32BE(value, offset)\n}\n\nfunction writeInt32LE(buffer, value, offset) {\n return toBuffer(buffer).writeInt32LE(value, offset)\n}\n\nfunction writeUInt32BE(buffer, value, offset) {\n return toBuffer(buffer).writeUInt32BE(value, offset)\n}\n\nfunction writeUInt32LE(buffer, value, offset) {\n return toBuffer(buffer).writeUInt32LE(value, offset)\n}\n\nmodule.exports = {\n isBuffer,\n isEncoding,\n alloc,\n allocUnsafe,\n allocUnsafeSlow,\n byteLength,\n compare,\n concat,\n copy,\n equals,\n fill,\n from,\n includes,\n indexOf,\n lastIndexOf,\n swap16,\n swap32,\n swap64,\n toBuffer,\n toString,\n write,\n readDoubleBE,\n readDoubleLE,\n readFloatBE,\n readFloatLE,\n readInt32BE,\n readInt32LE,\n readUInt32BE,\n readUInt32LE,\n writeDoubleBE,\n writeDoubleLE,\n writeFloatBE,\n writeFloatLE,\n writeInt32BE,\n writeInt32LE,\n writeUInt32BE,\n writeUInt32LE\n}\n","const b4a = require('b4a')\n\nmodule.exports = class PassThroughDecoder {\n constructor(encoding) {\n this.encoding = encoding\n }\n\n get remaining() {\n return 0\n }\n\n decode(data) {\n return b4a.toString(data, this.encoding)\n }\n\n flush() {\n return ''\n }\n}\n","const b4a = require('b4a')\n\n/**\n * https://encoding.spec.whatwg.org/#utf-8-decoder\n */\nmodule.exports = class UTF8Decoder {\n constructor() {\n this._reset()\n }\n\n get remaining() {\n return this.bytesSeen\n }\n\n decode(data) {\n if (data.byteLength === 0) return ''\n\n if (this.bytesNeeded === 0 && trailingIncomplete(data, 0) === 0) {\n this.bytesSeen = trailingBytesSeen(data)\n return b4a.toString(data, 'utf8')\n }\n\n let result = ''\n let start = 0\n\n if (this.bytesNeeded > 0) {\n while (start < data.byteLength) {\n const byte = data[start]\n\n if (byte < this.lowerBoundary || byte > this.upperBoundary) {\n result += '\\ufffd'\n this._reset()\n break\n }\n\n this.lowerBoundary = 0x80\n this.upperBoundary = 0xbf\n this.codePoint = (this.codePoint << 6) | (byte & 0x3f)\n this.bytesSeen++\n start++\n\n if (this.bytesSeen === this.bytesNeeded) {\n result += String.fromCodePoint(this.codePoint)\n this._reset()\n break\n }\n }\n\n if (this.bytesNeeded > 0) return result\n }\n\n const trailing = trailingIncomplete(data, start)\n const end = data.byteLength - trailing\n\n if (end > start) result += b4a.toString(data, 'utf8', start, end)\n\n for (let i = end; i < data.byteLength; i++) {\n const byte = data[i]\n\n if (this.bytesNeeded === 0) {\n if (byte <= 0x7f) {\n this.bytesSeen = 0\n result += String.fromCharCode(byte)\n } else if (byte >= 0xc2 && byte <= 0xdf) {\n this.bytesNeeded = 2\n this.bytesSeen = 1\n this.codePoint = byte & 0x1f\n } else if (byte >= 0xe0 && byte <= 0xef) {\n if (byte === 0xe0) this.lowerBoundary = 0xa0\n else if (byte === 0xed) this.upperBoundary = 0x9f\n this.bytesNeeded = 3\n this.bytesSeen = 1\n this.codePoint = byte & 0xf\n } else if (byte >= 0xf0 && byte <= 0xf4) {\n if (byte === 0xf0) this.lowerBoundary = 0x90\n else if (byte === 0xf4) this.upperBoundary = 0x8f\n this.bytesNeeded = 4\n this.bytesSeen = 1\n this.codePoint = byte & 0x7\n } else {\n this.bytesSeen = 1\n result += '\\ufffd'\n }\n\n continue\n }\n\n if (byte < this.lowerBoundary || byte > this.upperBoundary) {\n result += '\\ufffd'\n i--\n this._reset()\n\n continue\n }\n\n this.lowerBoundary = 0x80\n this.upperBoundary = 0xbf\n\n this.codePoint = (this.codePoint << 6) | (byte & 0x3f)\n this.bytesSeen++\n\n if (this.bytesSeen === this.bytesNeeded) {\n result += String.fromCodePoint(this.codePoint)\n this._reset()\n }\n }\n\n return result\n }\n\n flush() {\n const result = this.bytesNeeded > 0 ? '\\ufffd' : ''\n this._reset()\n return result\n }\n\n _reset() {\n this.codePoint = 0\n this.bytesNeeded = 0\n this.bytesSeen = 0\n this.lowerBoundary = 0x80\n this.upperBoundary = 0xbf\n }\n}\n\nfunction trailingIncomplete(data, start) {\n const len = data.byteLength\n if (len <= start) return 0\n\n const limit = Math.max(start, len - 4)\n\n let i = len - 1\n while (i > limit && (data[i] & 0xc0) === 0x80) i--\n\n if (i < start) return 0\n\n const byte = data[i]\n\n let needed\n if (byte <= 0x7f) return 0\n if (byte >= 0xc2 && byte <= 0xdf) needed = 2\n else if (byte >= 0xe0 && byte <= 0xef) needed = 3\n else if (byte >= 0xf0 && byte <= 0xf4) needed = 4\n else return 0\n\n const available = len - i\n return available < needed ? available : 0\n}\n\nfunction trailingBytesSeen(data) {\n const len = data.byteLength\n if (len === 0) return 0\n\n const last = data[len - 1]\n\n if (last <= 0x7f) return 0\n if ((last & 0xc0) !== 0x80) return 1\n\n const limit = Math.max(0, len - 4)\n\n let i = len - 2\n while (i >= limit && (data[i] & 0xc0) === 0x80) i--\n\n if (i < 0) return 1\n\n const first = data[i]\n\n let needed\n if (first >= 0xc2 && first <= 0xdf) needed = 2\n else if (first >= 0xe0 && first <= 0xef) needed = 3\n else if (first >= 0xf0 && first <= 0xf4) needed = 4\n else return 1\n\n if (len - i !== needed) return 1\n\n if (needed >= 3) {\n const second = data[i + 1]\n if (first === 0xe0 && second < 0xa0) return 1\n if (first === 0xed && second > 0x9f) return 1\n if (first === 0xf0 && second < 0x90) return 1\n if (first === 0xf4 && second > 0x8f) return 1\n }\n\n return 0\n}\n","const PassThroughDecoder = require('./lib/pass-through-decoder')\nconst UTF8Decoder = require('./lib/utf8-decoder')\n\nmodule.exports = class TextDecoder {\n constructor(encoding = 'utf8') {\n this.encoding = normalizeEncoding(encoding)\n\n switch (this.encoding) {\n case 'utf8':\n this.decoder = new UTF8Decoder()\n break\n case 'utf16le':\n case 'base64':\n throw new Error('Unsupported encoding: ' + this.encoding)\n default:\n this.decoder = new PassThroughDecoder(this.encoding)\n }\n }\n\n get remaining() {\n return this.decoder.remaining\n }\n\n push(data) {\n if (typeof data === 'string') return data\n return this.decoder.decode(data)\n }\n\n // For Node.js compatibility\n write(data) {\n return this.push(data)\n }\n\n end(data) {\n let result = ''\n if (data) result = this.push(data)\n result += this.decoder.flush()\n return result\n }\n}\n\nfunction normalizeEncoding(encoding) {\n encoding = encoding.toLowerCase()\n\n switch (encoding) {\n case 'utf8':\n case 'utf-8':\n return 'utf8'\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le'\n case 'latin1':\n case 'binary':\n return 'latin1'\n case 'base64':\n case 'ascii':\n case 'hex':\n return encoding\n default:\n throw new Error('Unknown encoding: ' + encoding)\n }\n}\n","module.exports = class StreamError extends Error {\n constructor(msg, code, fn = StreamError) {\n super(msg)\n\n this.code = code\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, fn)\n }\n }\n\n static isStreamDestroyed(err) {\n return err && err.code === 'STREAM_DESTROYED'\n }\n\n static isPrematureClose(err) {\n return err && err.code === 'PREMATURE_CLOSE'\n }\n\n static isAborted(err) {\n return err && err.code === 'ABORTED'\n }\n\n static isBadArgument(err) {\n return err && err.code === 'BAD_ARGUMENT'\n }\n\n get name() {\n return 'StreamError'\n }\n\n static STREAM_DESTROYED() {\n return new StreamError('Stream was destroyed', 'STREAM_DESTROYED', StreamError.STREAM_DESTROYED)\n }\n\n static PREMATURE_CLOSE(msg = 'Premature close') {\n return new StreamError(msg, 'PREMATURE_CLOSE', StreamError.PREMATURE_CLOSE)\n }\n\n static ABORTED() {\n return new StreamError('Stream aborted', 'ABORTED', StreamError.ABORTED)\n }\n\n static BAD_ARGUMENT(msg = 'Bad argument') {\n return new StreamError(msg, 'BAD_ARGUMENT', StreamError.BAD_ARGUMENT)\n }\n}\n","const { EventEmitter } = require('events-universal')\nconst FIFO = require('fast-fifo')\nconst TextDecoder = require('text-decoder')\n\nconst StreamError = require('./lib/errors.js')\n\n// if we do a future major, expect queue microtask to be there always, for now a bit defensive\nconst qmt =\n typeof queueMicrotask === 'undefined' ? (fn) => global.process.nextTick(fn) : queueMicrotask\n\n// 29 bits used total (4 from shared, 14 from read, and 11 from write)\nconst MAX = (1 << 29) - 1\n\n// Shared state\nconst OPENING = 0b0001\nconst PREDESTROYING = 0b0010\nconst DESTROYING = 0b0100\nconst DESTROYED = 0b1000\n\nconst NOT_OPENING = MAX ^ OPENING\nconst NOT_PREDESTROYING = MAX ^ PREDESTROYING\n\n// Read state (4 bit offset from shared state)\nconst READ_ACTIVE = 0b00000000000001 << 4\nconst READ_UPDATING = 0b00000000000010 << 4\nconst READ_PRIMARY = 0b00000000000100 << 4\nconst READ_QUEUED = 0b00000000001000 << 4\nconst READ_RESUMED = 0b00000000010000 << 4\nconst READ_PIPE_DRAINED = 0b00000000100000 << 4\nconst READ_ENDING = 0b00000001000000 << 4\nconst READ_EMIT_DATA = 0b00000010000000 << 4\nconst READ_EMIT_READABLE = 0b00000100000000 << 4\nconst READ_EMITTED_READABLE = 0b00001000000000 << 4\nconst READ_DONE = 0b00010000000000 << 4\nconst READ_NEXT_TICK = 0b00100000000000 << 4\nconst READ_NEEDS_PUSH = 0b01000000000000 << 4\nconst READ_READ_AHEAD = 0b10000000000000 << 4\n\n// Combined read state\nconst READ_FLOWING = READ_RESUMED | READ_PIPE_DRAINED\nconst READ_ACTIVE_AND_NEEDS_PUSH = READ_ACTIVE | READ_NEEDS_PUSH\nconst READ_PRIMARY_AND_ACTIVE = READ_PRIMARY | READ_ACTIVE\nconst READ_EMIT_READABLE_AND_QUEUED = READ_EMIT_READABLE | READ_QUEUED\nconst READ_RESUMED_READ_AHEAD = READ_RESUMED | READ_READ_AHEAD\n\nconst READ_NOT_ACTIVE = MAX ^ READ_ACTIVE\nconst READ_NON_PRIMARY = MAX ^ READ_PRIMARY\nconst READ_NON_PRIMARY_AND_PUSHED = MAX ^ (READ_PRIMARY | READ_NEEDS_PUSH)\nconst READ_PUSHED = MAX ^ READ_NEEDS_PUSH\nconst READ_PAUSED = MAX ^ READ_RESUMED\nconst READ_NOT_QUEUED = MAX ^ (READ_QUEUED | READ_EMITTED_READABLE)\nconst READ_NOT_ENDING = MAX ^ READ_ENDING\nconst READ_PIPE_NOT_DRAINED = MAX ^ READ_FLOWING\nconst READ_NOT_NEXT_TICK = MAX ^ READ_NEXT_TICK\nconst READ_NOT_UPDATING = MAX ^ READ_UPDATING\nconst READ_NO_READ_AHEAD = MAX ^ READ_READ_AHEAD\nconst READ_PAUSED_NO_READ_AHEAD = MAX ^ READ_RESUMED_READ_AHEAD\n\n// Write state (18 bit offset, 4 bit offset from shared state and 14 from read state)\nconst WRITE_ACTIVE = 0b00000000001 << 18\nconst WRITE_UPDATING = 0b00000000010 << 18\nconst WRITE_PRIMARY = 0b00000000100 << 18\nconst WRITE_QUEUED = 0b00000001000 << 18\nconst WRITE_UNDRAINED = 0b00000010000 << 18\nconst WRITE_DONE = 0b00000100000 << 18\nconst WRITE_EMIT_DRAIN = 0b00001000000 << 18\nconst WRITE_NEXT_TICK = 0b00010000000 << 18\nconst WRITE_WRITING = 0b00100000000 << 18\nconst WRITE_FINISHING = 0b01000000000 << 18\nconst WRITE_CORKED = 0b10000000000 << 18\n\nconst WRITE_NOT_ACTIVE = MAX ^ (WRITE_ACTIVE | WRITE_WRITING)\nconst WRITE_NON_PRIMARY = MAX ^ WRITE_PRIMARY\nconst WRITE_NOT_FINISHING = MAX ^ (WRITE_ACTIVE | WRITE_FINISHING)\nconst WRITE_DRAINED = MAX ^ WRITE_UNDRAINED\nconst WRITE_NOT_QUEUED = MAX ^ WRITE_QUEUED\nconst WRITE_NOT_NEXT_TICK = MAX ^ WRITE_NEXT_TICK\nconst WRITE_NOT_UPDATING = MAX ^ WRITE_UPDATING\nconst WRITE_NOT_CORKED = MAX ^ WRITE_CORKED\n\n// Combined shared state\nconst ACTIVE = READ_ACTIVE | WRITE_ACTIVE\nconst NOT_ACTIVE = MAX ^ ACTIVE\nconst DONE = READ_DONE | WRITE_DONE\nconst DESTROY_STATUS = DESTROYING | DESTROYED | PREDESTROYING\nconst OPEN_STATUS = DESTROY_STATUS | OPENING\nconst AUTO_DESTROY = DESTROY_STATUS | DONE\nconst NON_PRIMARY = WRITE_NON_PRIMARY & READ_NON_PRIMARY\nconst ACTIVE_OR_TICKING = WRITE_NEXT_TICK | READ_NEXT_TICK\nconst TICKING = ACTIVE_OR_TICKING & NOT_ACTIVE\nconst IS_OPENING = OPEN_STATUS | TICKING\n\n// Combined shared state and read state\nconst READ_PRIMARY_STATUS = OPEN_STATUS | READ_ENDING | READ_DONE\nconst READ_STATUS = OPEN_STATUS | READ_DONE | READ_QUEUED\nconst READ_ENDING_STATUS = OPEN_STATUS | READ_ENDING | READ_QUEUED\nconst READ_READABLE_STATUS = OPEN_STATUS | READ_EMIT_READABLE | READ_QUEUED | READ_EMITTED_READABLE\nconst SHOULD_NOT_READ =\n OPEN_STATUS | READ_ACTIVE | READ_ENDING | READ_DONE | READ_NEEDS_PUSH | READ_READ_AHEAD\nconst READ_BACKPRESSURE_STATUS = DESTROY_STATUS | READ_ENDING | READ_DONE\nconst READ_UPDATE_SYNC_STATUS = READ_UPDATING | OPEN_STATUS | READ_NEXT_TICK | READ_PRIMARY\nconst READ_NEXT_TICK_OR_OPENING = READ_NEXT_TICK | OPENING\n\n// Combined write state\nconst WRITE_PRIMARY_STATUS = OPEN_STATUS | WRITE_FINISHING | WRITE_DONE\nconst WRITE_QUEUED_AND_UNDRAINED = WRITE_QUEUED | WRITE_UNDRAINED\nconst WRITE_QUEUED_AND_ACTIVE = WRITE_QUEUED | WRITE_ACTIVE\nconst WRITE_DRAIN_STATUS = WRITE_QUEUED | WRITE_UNDRAINED | OPEN_STATUS | WRITE_ACTIVE\nconst WRITE_STATUS = OPEN_STATUS | WRITE_ACTIVE | WRITE_QUEUED | WRITE_CORKED\nconst WRITE_PRIMARY_AND_ACTIVE = WRITE_PRIMARY | WRITE_ACTIVE\nconst WRITE_ACTIVE_AND_WRITING = WRITE_ACTIVE | WRITE_WRITING\nconst WRITE_FINISHING_STATUS = OPEN_STATUS | WRITE_FINISHING | WRITE_QUEUED_AND_ACTIVE | WRITE_DONE\nconst WRITE_BACKPRESSURE_STATUS = WRITE_UNDRAINED | DESTROY_STATUS | WRITE_FINISHING | WRITE_DONE\nconst WRITE_UPDATE_SYNC_STATUS = WRITE_UPDATING | OPEN_STATUS | WRITE_NEXT_TICK | WRITE_PRIMARY\nconst WRITE_DROP_DATA = WRITE_FINISHING | WRITE_DONE | DESTROY_STATUS\n\nconst asyncIterator = Symbol.asyncIterator || Symbol('asyncIterator')\n\nclass WritableState {\n constructor(\n stream,\n { highWaterMark = 16384, map = null, mapWritable, byteLength, byteLengthWritable } = {}\n ) {\n this.stream = stream\n this.queue = new FIFO()\n this.highWaterMark = highWaterMark\n this.buffered = 0\n this.error = null\n this.pipeline = null\n this.drains = null // if we add more seldomly used helpers we might them into a subobject so its a single ptr\n this.byteLength = byteLengthWritable || byteLength || defaultByteLength\n this.map = mapWritable || map\n this.afterWrite = afterWrite.bind(this)\n this.afterUpdateNextTick = updateWriteNT.bind(this)\n }\n\n get ending() {\n return (this.stream._duplexState & WRITE_FINISHING) !== 0\n }\n\n get ended() {\n return (this.stream._duplexState & WRITE_DONE) !== 0\n }\n\n push(data) {\n if ((this.stream._duplexState & WRITE_DROP_DATA) !== 0) return false\n if (this.map !== null) data = this.map(data)\n\n this.buffered += this.byteLength(data)\n this.queue.push(data)\n\n if (this.buffered < this.highWaterMark) {\n this.stream._duplexState |= WRITE_QUEUED\n return true\n }\n\n this.stream._duplexState |= WRITE_QUEUED_AND_UNDRAINED\n return false\n }\n\n shift() {\n const data = this.queue.shift()\n\n this.buffered -= this.byteLength(data)\n if (this.buffered === 0) this.stream._duplexState &= WRITE_NOT_QUEUED\n\n return data\n }\n\n end(data) {\n if (typeof data === 'function') {\n this.stream.once('finish', data)\n } else if (data !== undefined && data !== null) {\n this.push(data)\n }\n\n this.stream._duplexState = (this.stream._duplexState | WRITE_FINISHING) & WRITE_NON_PRIMARY\n }\n\n autoBatch(data, cb) {\n const buffer = []\n const stream = this.stream\n\n buffer.push(data)\n while ((stream._duplexState & WRITE_STATUS) === WRITE_QUEUED_AND_ACTIVE) {\n buffer.push(stream._writableState.shift())\n }\n\n if ((stream._duplexState & OPEN_STATUS) !== 0) return cb(null)\n stream._writev(buffer, cb)\n }\n\n update() {\n const stream = this.stream\n\n stream._duplexState |= WRITE_UPDATING\n\n do {\n while ((stream._duplexState & WRITE_STATUS) === WRITE_QUEUED) {\n const data = this.shift()\n stream._duplexState |= WRITE_ACTIVE_AND_WRITING\n stream._write(data, this.afterWrite)\n }\n\n if ((stream._duplexState & WRITE_PRIMARY_AND_ACTIVE) === 0) this.updateNonPrimary()\n } while (this.continueUpdate() === true)\n\n stream._duplexState &= WRITE_NOT_UPDATING\n }\n\n updateNonPrimary() {\n const stream = this.stream\n\n if ((stream._duplexState & WRITE_FINISHING_STATUS) === WRITE_FINISHING) {\n stream._duplexState = stream._duplexState | WRITE_ACTIVE\n stream._final(afterFinal.bind(this))\n return\n }\n\n if ((stream._duplexState & DESTROY_STATUS) === DESTROYING) {\n if ((stream._duplexState & ACTIVE_OR_TICKING) === 0) {\n stream._duplexState |= ACTIVE\n stream._destroy(afterDestroy.bind(this))\n }\n return\n }\n\n if ((stream._duplexState & IS_OPENING) === OPENING) {\n stream._duplexState = (stream._duplexState | ACTIVE) & NOT_OPENING\n stream._open(afterOpen.bind(this))\n }\n }\n\n continueUpdate() {\n if ((this.stream._duplexState & WRITE_NEXT_TICK) === 0) return false\n this.stream._duplexState &= WRITE_NOT_NEXT_TICK\n return true\n }\n\n updateCallback() {\n if ((this.stream._duplexState & WRITE_UPDATE_SYNC_STATUS) === WRITE_PRIMARY) {\n this.update()\n } else {\n this.updateNextTick()\n }\n }\n\n updateNextTick() {\n if ((this.stream._duplexState & WRITE_NEXT_TICK) !== 0) return\n this.stream._duplexState |= WRITE_NEXT_TICK\n if ((this.stream._duplexState & WRITE_UPDATING) === 0) qmt(this.afterUpdateNextTick)\n }\n}\n\nclass ReadableState {\n constructor(\n stream,\n { highWaterMark = 16384, map = null, mapReadable, byteLength, byteLengthReadable } = {}\n ) {\n this.stream = stream\n this.queue = new FIFO()\n this.highWaterMark = highWaterMark === 0 ? 1 : highWaterMark\n this.buffered = 0\n this.readAhead = highWaterMark > 0\n this.error = null\n this.pipeline = null\n this.byteLength = byteLengthReadable || byteLength || defaultByteLength\n this.map = mapReadable || map\n this.pipeTo = null\n this.afterRead = afterRead.bind(this)\n this.afterUpdateNextTick = updateReadNT.bind(this)\n }\n\n get ending() {\n return (this.stream._duplexState & READ_ENDING) !== 0\n }\n\n get ended() {\n return (this.stream._duplexState & READ_DONE) !== 0\n }\n\n pipe(pipeTo, cb) {\n if (this.pipeTo !== null) throw StreamError.BAD_ARGUMENT('Can only pipe to one destination')\n if (typeof cb !== 'function') cb = null\n\n this.stream._duplexState |= READ_PIPE_DRAINED\n this.pipeTo = pipeTo\n this.pipeline = new Pipeline(this.stream, pipeTo, cb)\n\n if (cb) this.stream.on('error', noop) // We already error handle this so supress crashes\n\n if (isStreamx(pipeTo)) {\n pipeTo._writableState.pipeline = this.pipeline\n if (cb) pipeTo.on('error', noop) // We already error handle this so supress crashes\n pipeTo.on('finish', this.pipeline.finished.bind(this.pipeline)) // TODO: just call finished from pipeTo itself\n } else {\n const onerror = this.pipeline.done.bind(this.pipeline, pipeTo)\n const onclose = this.pipeline.done.bind(this.pipeline, pipeTo, null) // onclose has a weird bool arg\n pipeTo.on('error', onerror)\n pipeTo.on('close', onclose)\n pipeTo.on('finish', this.pipeline.finished.bind(this.pipeline))\n }\n\n pipeTo.on('drain', afterDrain.bind(this))\n this.stream.emit('piping', pipeTo)\n pipeTo.emit('pipe', this.stream)\n }\n\n push(data) {\n const stream = this.stream\n\n if (data === null) {\n this.highWaterMark = 0\n stream._duplexState = (stream._duplexState | READ_ENDING) & READ_NON_PRIMARY_AND_PUSHED\n return false\n }\n\n if (this.map !== null) {\n data = this.map(data)\n if (data === null) {\n stream._duplexState &= READ_PUSHED\n return this.buffered < this.highWaterMark\n }\n }\n\n this.buffered += this.byteLength(data)\n this.queue.push(data)\n\n stream._duplexState = (stream._duplexState | READ_QUEUED) & READ_PUSHED\n\n return this.buffered < this.highWaterMark\n }\n\n shift() {\n const data = this.queue.shift()\n\n this.buffered -= this.byteLength(data)\n if (this.buffered === 0) {\n this.stream._duplexState &= READ_NOT_QUEUED\n }\n\n return data\n }\n\n unshift(data) {\n const pending = [this.map !== null ? this.map(data) : data]\n while (this.buffered > 0) pending.push(this.shift())\n\n for (let i = 0; i < pending.length - 1; i++) {\n const data = pending[i]\n this.buffered += this.byteLength(data)\n this.queue.push(data)\n }\n\n this.push(pending[pending.length - 1])\n }\n\n read() {\n const stream = this.stream\n\n if ((stream._duplexState & READ_STATUS) === READ_QUEUED) {\n const data = this.shift()\n\n if (this.pipeTo !== null && this.pipeTo.write(data) === false) {\n stream._duplexState &= READ_PIPE_NOT_DRAINED\n }\n\n if ((stream._duplexState & READ_EMIT_DATA) !== 0) {\n stream.emit('data', data)\n }\n\n return data\n }\n\n if (this.readAhead === false) {\n stream._duplexState |= READ_READ_AHEAD\n this.updateNextTick()\n }\n\n return null\n }\n\n drain() {\n const stream = this.stream\n\n while (\n (stream._duplexState & READ_STATUS) === READ_QUEUED &&\n (stream._duplexState & READ_FLOWING) !== 0\n ) {\n const data = this.shift()\n\n if (this.pipeTo !== null && this.pipeTo.write(data) === false) {\n stream._duplexState &= READ_PIPE_NOT_DRAINED\n }\n\n if ((stream._duplexState & READ_EMIT_DATA) !== 0) {\n stream.emit('data', data)\n }\n }\n }\n\n update() {\n const stream = this.stream\n\n stream._duplexState |= READ_UPDATING\n\n do {\n this.drain()\n\n while (\n this.buffered < this.highWaterMark &&\n (stream._duplexState & SHOULD_NOT_READ) === READ_READ_AHEAD\n ) {\n stream._duplexState |= READ_ACTIVE_AND_NEEDS_PUSH\n stream._read(this.afterRead)\n this.drain()\n }\n\n if ((stream._duplexState & READ_READABLE_STATUS) === READ_EMIT_READABLE_AND_QUEUED) {\n stream._duplexState |= READ_EMITTED_READABLE\n stream.emit('readable')\n }\n\n if ((stream._duplexState & READ_PRIMARY_AND_ACTIVE) === 0) {\n this.updateNonPrimary()\n }\n } while (this.continueUpdate() === true)\n\n stream._duplexState &= READ_NOT_UPDATING\n }\n\n updateNonPrimary() {\n const stream = this.stream\n\n if ((stream._duplexState & READ_ENDING_STATUS) === READ_ENDING) {\n stream._duplexState = (stream._duplexState | READ_DONE) & READ_NOT_ENDING\n stream.emit('end')\n\n if ((stream._duplexState & AUTO_DESTROY) === DONE) {\n stream._duplexState |= DESTROYING\n }\n\n if (this.pipeTo !== null) {\n this.pipeTo.end()\n }\n }\n\n if ((stream._duplexState & DESTROY_STATUS) === DESTROYING) {\n if ((stream._duplexState & ACTIVE_OR_TICKING) === 0) {\n stream._duplexState |= ACTIVE\n stream._destroy(afterDestroy.bind(this))\n }\n return\n }\n\n if ((stream._duplexState & IS_OPENING) === OPENING) {\n stream._duplexState = (stream._duplexState | ACTIVE) & NOT_OPENING\n stream._open(afterOpen.bind(this))\n }\n }\n\n continueUpdate() {\n if ((this.stream._duplexState & READ_NEXT_TICK) === 0) return false\n this.stream._duplexState &= READ_NOT_NEXT_TICK\n return true\n }\n\n updateCallback() {\n if ((this.stream._duplexState & READ_UPDATE_SYNC_STATUS) === READ_PRIMARY) {\n this.update()\n } else {\n this.updateNextTick()\n }\n }\n\n updateNextTickIfOpen() {\n if ((this.stream._duplexState & READ_NEXT_TICK_OR_OPENING) !== 0) return\n this.stream._duplexState |= READ_NEXT_TICK\n if ((this.stream._duplexState & READ_UPDATING) === 0) qmt(this.afterUpdateNextTick)\n }\n\n updateNextTick() {\n if ((this.stream._duplexState & READ_NEXT_TICK) !== 0) return\n this.stream._duplexState |= READ_NEXT_TICK\n if ((this.stream._duplexState & READ_UPDATING) === 0) qmt(this.afterUpdateNextTick)\n }\n}\n\nclass TransformState {\n constructor(stream) {\n this.data = null\n this.afterTransform = afterTransform.bind(stream)\n this.afterFinal = null\n }\n}\n\nclass Pipeline {\n constructor(src, dst, cb) {\n this.from = src\n this.to = dst\n this.afterPipe = cb\n this.error = null\n this.pipeToFinished = false\n }\n\n finished() {\n this.pipeToFinished = true\n }\n\n done(stream, err) {\n if (err) this.error = err\n\n if (stream === this.to) {\n this.to = null\n\n if (this.from !== null) {\n if ((this.from._duplexState & READ_DONE) === 0 || !this.pipeToFinished) {\n this.from.destroy(this.error || StreamError.PREMATURE_CLOSE('Writable stream closed'))\n }\n return\n }\n }\n\n if (stream === this.from) {\n this.from = null\n\n if (this.to !== null) {\n if ((stream._duplexState & READ_DONE) === 0) {\n this.to.destroy(this.error || StreamError.PREMATURE_CLOSE('Readable stream closed'))\n }\n return\n }\n }\n\n if (this.afterPipe !== null) this.afterPipe(this.error)\n this.to = this.from = this.afterPipe = null\n }\n}\n\nfunction afterDrain() {\n this.stream._duplexState |= READ_PIPE_DRAINED\n this.updateCallback()\n}\n\nfunction afterFinal(err) {\n const stream = this.stream\n if (err) stream.destroy(err)\n\n if ((stream._duplexState & DESTROY_STATUS) === 0) {\n stream._duplexState |= WRITE_DONE\n stream.emit('finish')\n }\n\n if ((stream._duplexState & AUTO_DESTROY) === DONE) {\n stream._duplexState |= DESTROYING\n }\n\n stream._duplexState &= WRITE_NOT_FINISHING\n\n // no need to wait the extra tick here, so we short circuit that\n if ((stream._duplexState & WRITE_UPDATING) === 0) {\n this.update()\n } else {\n this.updateNextTick()\n }\n}\n\nfunction afterDestroy(err) {\n const stream = this.stream\n\n if (!err && !StreamError.isStreamDestroyed(this.error)) err = this.error\n if (err) stream.emit('error', err)\n\n stream._duplexState |= DESTROYED\n stream.emit('close')\n\n const rs = stream._readableState\n const ws = stream._writableState\n\n if (rs !== null && rs.pipeline !== null) {\n rs.pipeline.done(stream, err)\n }\n\n if (ws !== null) {\n while (ws.drains !== null && ws.drains.length > 0) {\n ws.drains.shift().resolve(false)\n }\n\n if (ws.pipeline !== null) {\n ws.pipeline.done(stream, err)\n }\n }\n}\n\nfunction afterWrite(err) {\n const stream = this.stream\n\n if (err) stream.destroy(err)\n stream._duplexState &= WRITE_NOT_ACTIVE\n\n if (this.drains !== null) tickDrains(this.drains)\n\n if ((stream._duplexState & WRITE_DRAIN_STATUS) === WRITE_UNDRAINED) {\n stream._duplexState &= WRITE_DRAINED\n\n if ((stream._duplexState & WRITE_EMIT_DRAIN) === WRITE_EMIT_DRAIN) {\n stream.emit('drain')\n }\n }\n\n this.updateCallback()\n}\n\nfunction afterRead(err) {\n if (err) this.stream.destroy(err)\n this.stream._duplexState &= READ_NOT_ACTIVE\n\n if (this.readAhead === false && (this.stream._duplexState & READ_RESUMED) === 0) {\n this.stream._duplexState &= READ_NO_READ_AHEAD\n }\n\n this.updateCallback()\n}\n\nfunction updateReadNT() {\n if ((this.stream._duplexState & READ_UPDATING) === 0) {\n this.stream._duplexState &= READ_NOT_NEXT_TICK\n this.update()\n }\n}\n\nfunction updateWriteNT() {\n if ((this.stream._duplexState & WRITE_UPDATING) === 0) {\n this.stream._duplexState &= WRITE_NOT_NEXT_TICK\n this.update()\n }\n}\n\nfunction tickDrains(drains) {\n for (let i = 0; i < drains.length; i++) {\n // drains.writes are monotonic, so if one is 0 its always the first one\n if (--drains[i].writes === 0) {\n drains.shift().resolve(true)\n i--\n }\n }\n}\n\nfunction afterOpen(err) {\n const stream = this.stream\n\n if (err) stream.destroy(err)\n\n if ((stream._duplexState & DESTROYING) === 0) {\n if ((stream._duplexState & READ_PRIMARY_STATUS) === 0) {\n stream._duplexState |= READ_PRIMARY\n }\n\n if ((stream._duplexState & WRITE_PRIMARY_STATUS) === 0) {\n stream._duplexState |= WRITE_PRIMARY\n }\n\n stream.emit('open')\n }\n\n stream._duplexState &= NOT_ACTIVE\n\n if (stream._writableState !== null) {\n stream._writableState.updateCallback()\n }\n\n if (stream._readableState !== null) {\n stream._readableState.updateCallback()\n }\n}\n\nfunction afterTransform(err, data) {\n if (data !== undefined && data !== null) this.push(data)\n this._writableState.afterWrite(err)\n}\n\nfunction newListener(name) {\n if (this._readableState !== null) {\n if (name === 'data') {\n this._duplexState |= READ_EMIT_DATA | READ_RESUMED_READ_AHEAD\n this._readableState.updateNextTick()\n }\n if (name === 'readable') {\n this._duplexState |= READ_EMIT_READABLE\n this._readableState.updateNextTick()\n }\n }\n\n if (this._writableState !== null) {\n if (name === 'drain') {\n this._duplexState |= WRITE_EMIT_DRAIN\n this._writableState.updateNextTick()\n }\n }\n}\n\nclass Stream extends EventEmitter {\n constructor(opts) {\n super()\n\n this._duplexState = 0\n this._readableState = null\n this._writableState = null\n\n if (opts) {\n if (opts.open) this._open = opts.open\n if (opts.destroy) this._destroy = opts.destroy\n if (opts.predestroy) this._predestroy = opts.predestroy\n if (opts.signal) opts.signal.addEventListener('abort', abort.bind(this))\n }\n\n this.on('newListener', newListener)\n }\n\n _open(cb) {\n cb(null)\n }\n\n _destroy(cb) {\n cb(null)\n }\n\n _predestroy() {\n // does nothing\n }\n\n get readable() {\n return this._readableState !== null ? true : undefined\n }\n\n get writable() {\n return this._writableState !== null ? true : undefined\n }\n\n get destroyed() {\n return (this._duplexState & DESTROYED) !== 0\n }\n\n get destroying() {\n return (this._duplexState & DESTROY_STATUS) !== 0\n }\n\n destroy(err) {\n if ((this._duplexState & DESTROY_STATUS) === 0) {\n if (!err) err = StreamError.STREAM_DESTROYED()\n this._duplexState = (this._duplexState | DESTROYING) & NON_PRIMARY\n\n if (this._readableState !== null) {\n this._readableState.highWaterMark = 0\n this._readableState.error = err\n }\n\n if (this._writableState !== null) {\n this._writableState.highWaterMark = 0\n this._writableState.error = err\n }\n\n this._duplexState |= PREDESTROYING\n this._predestroy()\n this._duplexState &= NOT_PREDESTROYING\n\n if (this._readableState !== null) {\n this._readableState.updateNextTick()\n }\n\n if (this._writableState !== null) {\n this._writableState.updateNextTick()\n }\n }\n }\n}\n\nclass Readable extends Stream {\n constructor(opts) {\n super(opts)\n\n this._duplexState |= OPENING | WRITE_DONE | READ_READ_AHEAD\n this._readableState = new ReadableState(this, opts)\n\n if (opts) {\n if (this._readableState.readAhead === false) this._duplexState &= READ_NO_READ_AHEAD\n if (opts.read) this._read = opts.read\n if (opts.eagerOpen) this._readableState.updateNextTick()\n if (opts.encoding) this.setEncoding(opts.encoding)\n }\n }\n\n static deferred(fn, opts) {\n const out = new PassThrough(opts)\n\n fn()\n .then((src) => {\n if (src === null) return out.end()\n if (out.destroying) return\n pipeline(src, out, noop)\n })\n .catch((err) => out.destroy(err))\n\n return out\n }\n\n setEncoding(encoding) {\n const dec = new TextDecoder(encoding)\n const map = this._readableState.map || echo\n this._readableState.map = mapOrSkip\n return this\n\n function mapOrSkip(data) {\n const next = dec.push(data)\n return next === '' && (data.byteLength !== 0 || dec.remaining > 0) ? null : map(next)\n }\n }\n\n _read(cb) {\n cb(null)\n }\n\n pipe(dest, cb) {\n this._readableState.updateNextTick()\n this._readableState.pipe(dest, cb)\n return dest\n }\n\n read() {\n this._readableState.updateNextTick()\n return this._readableState.read()\n }\n\n push(data) {\n this._readableState.updateNextTickIfOpen()\n return this._readableState.push(data)\n }\n\n unshift(data) {\n this._readableState.updateNextTickIfOpen()\n return this._readableState.unshift(data)\n }\n\n resume() {\n this._duplexState |= READ_RESUMED_READ_AHEAD\n this._readableState.updateNextTick()\n return this\n }\n\n pause() {\n this._duplexState &=\n this._readableState.readAhead === false ? READ_PAUSED_NO_READ_AHEAD : READ_PAUSED\n return this\n }\n\n static _fromAsyncIterator(ite, opts) {\n let destroy\n\n const rs = new Readable({\n ...opts,\n read(cb) {\n ite.next().then(push).then(cb.bind(null, null)).catch(cb)\n },\n predestroy() {\n destroy = ite.return()\n },\n destroy(cb) {\n if (!destroy) return cb(null)\n destroy.then(cb.bind(null, null)).catch(cb)\n }\n })\n\n return rs\n\n function push(data) {\n if (data.done) rs.push(null)\n else rs.push(data.value)\n }\n }\n\n static from(data, opts) {\n if (isReadStreamx(data)) return data\n if (data[asyncIterator]) return this._fromAsyncIterator(data[asyncIterator](), opts)\n if (!Array.isArray(data)) data = data === undefined ? [] : [data]\n\n let i = 0\n return new Readable({\n ...opts,\n read(cb) {\n this.push(i === data.length ? null : data[i++])\n cb(null)\n }\n })\n }\n\n static isBackpressured(rs) {\n return (\n (rs._duplexState & READ_BACKPRESSURE_STATUS) !== 0 ||\n rs._readableState.buffered >= rs._readableState.highWaterMark\n )\n }\n\n static isPaused(rs) {\n return (rs._duplexState & READ_RESUMED) === 0\n }\n\n [asyncIterator]() {\n const stream = this\n\n let error = null\n let promiseResolve = null\n let promiseReject = null\n\n this.on('error', (err) => {\n error = err\n })\n this.on('readable', onreadable)\n this.on('close', onclose)\n\n return {\n [asyncIterator]() {\n return this\n },\n next() {\n return new Promise(function (resolve, reject) {\n promiseResolve = resolve\n promiseReject = reject\n const data = stream.read()\n if (data !== null) ondata(data)\n else if ((stream._duplexState & DESTROYED) !== 0) ondata(null)\n })\n },\n return() {\n return destroy(null)\n },\n throw(err) {\n return destroy(err)\n }\n }\n\n function onreadable() {\n if (promiseResolve !== null) ondata(stream.read())\n }\n\n function onclose() {\n if (promiseResolve !== null) ondata(null)\n }\n\n function ondata(data) {\n if (promiseReject === null) return\n if (error) {\n promiseReject(error)\n } else if (data === null && (stream._duplexState & READ_DONE) === 0) {\n promiseReject(StreamError.STREAM_DESTROYED())\n } else {\n promiseResolve({ value: data, done: data === null })\n }\n promiseReject = promiseResolve = null\n }\n\n function destroy(err) {\n stream.destroy(err)\n return new Promise((resolve, reject) => {\n if (stream._duplexState & DESTROYED) return resolve({ value: undefined, done: true })\n stream.once('close', function () {\n if (err) reject(err)\n else resolve({ value: undefined, done: true })\n })\n })\n }\n }\n}\n\nclass Writable extends Stream {\n constructor(opts) {\n super(opts)\n\n this._duplexState |= OPENING | READ_DONE\n this._writableState = new WritableState(this, opts)\n\n if (opts) {\n if (opts.writev) this._writev = opts.writev\n if (opts.write) this._write = opts.write\n if (opts.final) this._final = opts.final\n if (opts.eagerOpen) this._writableState.updateNextTick()\n }\n }\n\n cork() {\n this._duplexState |= WRITE_CORKED\n }\n\n uncork() {\n this._duplexState &= WRITE_NOT_CORKED\n this._writableState.updateNextTick()\n }\n\n _writev(batch, cb) {\n cb(null)\n }\n\n _write(data, cb) {\n this._writableState.autoBatch(data, cb)\n }\n\n _final(cb) {\n cb(null)\n }\n\n static isBackpressured(ws) {\n return (ws._duplexState & WRITE_BACKPRESSURE_STATUS) !== 0\n }\n\n static drained(ws) {\n if (ws.destroyed) return Promise.resolve(false)\n\n const state = ws._writableState\n const pending = isWritev(ws) ? Math.min(1, state.queue.length) : state.queue.length\n const writes = pending + (ws._duplexState & WRITE_WRITING ? 1 : 0)\n if (writes === 0) return Promise.resolve(true)\n\n if (state.drains === null) state.drains = []\n return new Promise((resolve) => {\n state.drains.push({ writes, resolve })\n })\n }\n\n write(data) {\n this._writableState.updateNextTick()\n return this._writableState.push(data)\n }\n\n end(data) {\n this._writableState.updateNextTick()\n this._writableState.end(data)\n return this\n }\n}\n\nclass Duplex extends Readable {\n // and Writable\n constructor(opts) {\n super(opts)\n\n this._duplexState = OPENING | (this._duplexState & READ_READ_AHEAD)\n this._writableState = new WritableState(this, opts)\n\n if (opts) {\n if (opts.writev) this._writev = opts.writev\n if (opts.write) this._write = opts.write\n if (opts.final) this._final = opts.final\n }\n }\n\n cork() {\n this._duplexState |= WRITE_CORKED\n }\n\n uncork() {\n this._duplexState &= WRITE_NOT_CORKED\n this._writableState.updateNextTick()\n }\n\n _writev(batch, cb) {\n cb(null)\n }\n\n _write(data, cb) {\n this._writableState.autoBatch(data, cb)\n }\n\n _final(cb) {\n cb(null)\n }\n\n write(data) {\n this._writableState.updateNextTick()\n return this._writableState.push(data)\n }\n\n end(data) {\n this._writableState.updateNextTick()\n this._writableState.end(data)\n return this\n }\n}\n\nclass Transform extends Duplex {\n constructor(opts) {\n super(opts)\n this._transformState = new TransformState(this)\n\n if (opts) {\n if (opts.transform) this._transform = opts.transform\n if (opts.flush) this._flush = opts.flush\n }\n }\n\n _write(data, cb) {\n if (this._readableState.buffered >= this._readableState.highWaterMark) {\n this._transformState.data = data\n } else {\n this._transform(data, this._transformState.afterTransform)\n }\n }\n\n _read(cb) {\n if (this._transformState.data !== null) {\n const data = this._transformState.data\n this._transformState.data = null\n cb(null)\n this._transform(data, this._transformState.afterTransform)\n } else {\n cb(null)\n }\n }\n\n destroy(err) {\n super.destroy(err)\n if (this._transformState.data !== null) {\n this._transformState.data = null\n this._transformState.afterTransform()\n }\n }\n\n _transform(data, cb) {\n cb(null, data)\n }\n\n _flush(cb) {\n cb(null)\n }\n\n _final(cb) {\n this._transformState.afterFinal = cb\n this._flush(transformAfterFlush.bind(this))\n }\n}\n\nclass PassThrough extends Transform {}\n\nfunction transformAfterFlush(err, data) {\n const cb = this._transformState.afterFinal\n if (err) return cb(err)\n\n if (data !== null && data !== undefined) this.push(data)\n this.push(null)\n cb(null)\n}\n\nfunction pipelinePromise(...streams) {\n return new Promise((resolve, reject) => {\n return pipeline(...streams, (err) => {\n if (err) return reject(err)\n resolve()\n })\n })\n}\n\nfunction pipeline(stream, ...streams) {\n const all = Array.isArray(stream) ? [...stream, ...streams] : [stream, ...streams]\n const done = all.length && typeof all[all.length - 1] === 'function' ? all.pop() : null\n\n if (all.length < 2) throw StreamError.BAD_ARGUMENT('Pipeline requires at least 2 streams')\n\n let src = all[0]\n let dest = null\n let error = null\n\n for (let i = 1; i < all.length; i++) {\n dest = all[i]\n\n if (isStreamx(src)) {\n src.pipe(dest, onerror)\n } else {\n errorHandle(src, true, i > 1, onerror)\n src.pipe(dest)\n }\n\n src = dest\n }\n\n if (done) {\n let fin = false\n\n const autoDestroy =\n isStreamx(dest) || !!(dest._writableState && dest._writableState.autoDestroy)\n\n dest.on('error', (err) => {\n if (error === null) error = err\n })\n\n dest.on('finish', () => {\n fin = true\n if (!autoDestroy) done(error)\n })\n\n if (autoDestroy) {\n dest.on('close', () => done(error || (fin ? null : StreamError.PREMATURE_CLOSE())))\n }\n }\n\n return dest\n\n function errorHandle(s, rd, wr, onerror) {\n s.on('error', onerror)\n s.on('close', onclose)\n\n function onclose() {\n if (rd && s._readableState && !s._readableState.ended) {\n return onerror(StreamError.PREMATURE_CLOSE())\n }\n if (wr && s._writableState && !s._writableState.ended) {\n return onerror(StreamError.PREMATURE_CLOSE())\n }\n }\n }\n\n function onerror(err) {\n if (!err || error) return\n error = err\n\n for (const s of all) {\n s.destroy(err)\n }\n }\n}\n\nfunction echo(s) {\n return s\n}\n\nfunction isStream(stream) {\n return !!stream._readableState || !!stream._writableState\n}\n\nfunction isStreamx(stream) {\n return typeof stream._duplexState === 'number' && isStream(stream)\n}\n\nfunction isEnding(stream) {\n return !!stream._readableState && stream._readableState.ending\n}\n\nfunction isEnded(stream) {\n return !!stream._readableState && stream._readableState.ended\n}\n\nfunction isFinishing(stream) {\n return !!stream._writableState && stream._writableState.ending\n}\n\nfunction isFinished(stream) {\n return !!stream._writableState && stream._writableState.ended\n}\n\nfunction getStreamError(stream, opts = {}) {\n const err =\n (stream._readableState && stream._readableState.error) ||\n (stream._writableState && stream._writableState.error)\n\n // avoid implicit errors by default\n return !opts.all && StreamError.isStreamDestroyed(err) ? null : err\n}\n\nfunction isReadStreamx(stream) {\n return isStreamx(stream) && stream.readable\n}\n\nfunction isDisturbed(stream) {\n return (\n (stream._duplexState & OPENING) !== OPENING ||\n (stream._duplexState & DESTROYING) === DESTROYING ||\n (stream._duplexState & ACTIVE_OR_TICKING) !== 0\n )\n}\n\nfunction isTypedArray(data) {\n return typeof data === 'object' && data !== null && typeof data.byteLength === 'number'\n}\n\nfunction defaultByteLength(data) {\n return isTypedArray(data) ? data.byteLength : 1024\n}\n\nfunction noop() {}\n\nfunction abort() {\n this.destroy(StreamError.ABORTED())\n}\n\nfunction isWritev(s) {\n return s._writev !== Writable.prototype._writev && s._writev !== Duplex.prototype._writev\n}\n\nmodule.exports = {\n pipeline,\n pipelinePromise,\n isStream,\n isStreamx,\n isEnding,\n isEnded,\n isFinishing,\n isFinished,\n isDisturbed,\n getStreamError,\n Stream,\n Writable,\n Readable,\n Duplex,\n Transform,\n // Export PassThrough for compatibility with Node.js core's stream module\n PassThrough\n}\n","const b4a = require('b4a')\n\nconst ZEROS = '0000000000000000000'\nconst SEVENS = '7777777777777777777'\nconst ZERO_OFFSET = '0'.charCodeAt(0)\nconst USTAR_MAGIC = b4a.from([0x75, 0x73, 0x74, 0x61, 0x72, 0x00]) // ustar\\x00\nconst USTAR_VER = b4a.from([ZERO_OFFSET, ZERO_OFFSET])\nconst GNU_MAGIC = b4a.from([0x75, 0x73, 0x74, 0x61, 0x72, 0x20]) // ustar\\x20\nconst GNU_VER = b4a.from([0x20, 0x00])\nconst MASK = 0o7777\nconst MAGIC_OFFSET = 257\nconst VERSION_OFFSET = 263\n\nexports.decodeLongPath = function decodeLongPath (buf, encoding) {\n return decodeStr(buf, 0, buf.length, encoding)\n}\n\nexports.encodePax = function encodePax (opts) { // TODO: encode more stuff in pax\n let result = ''\n if (opts.name) result += addLength(' path=' + opts.name + '\\n')\n if (opts.linkname) result += addLength(' linkpath=' + opts.linkname + '\\n')\n const pax = opts.pax\n if (pax) {\n for (const key in pax) {\n result += addLength(' ' + key + '=' + pax[key] + '\\n')\n }\n }\n return b4a.from(result)\n}\n\nexports.decodePax = function decodePax (buf) {\n const result = {}\n\n while (buf.length) {\n let i = 0\n while (i < buf.length && buf[i] !== 32) i++\n const len = parseInt(b4a.toString(buf.subarray(0, i)), 10)\n if (!len) return result\n\n const b = b4a.toString(buf.subarray(i + 1, len - 1))\n const keyIndex = b.indexOf('=')\n if (keyIndex === -1) return result\n result[b.slice(0, keyIndex)] = b.slice(keyIndex + 1)\n\n buf = buf.subarray(len)\n }\n\n return result\n}\n\nexports.encode = function encode (opts) {\n const buf = b4a.alloc(512)\n let name = opts.name\n let prefix = ''\n\n if (opts.typeflag === 5 && name[name.length - 1] !== '/') name += '/'\n if (b4a.byteLength(name) !== name.length) return null // utf-8\n\n while (b4a.byteLength(name) > 100) {\n const i = name.indexOf('/')\n if (i === -1) return null\n prefix += prefix ? '/' + name.slice(0, i) : name.slice(0, i)\n name = name.slice(i + 1)\n }\n\n if (b4a.byteLength(name) > 100 || b4a.byteLength(prefix) > 155) return null\n if (opts.linkname && b4a.byteLength(opts.linkname) > 100) return null\n\n b4a.write(buf, name)\n b4a.write(buf, encodeOct(opts.mode & MASK, 6), 100)\n b4a.write(buf, encodeOct(opts.uid, 6), 108)\n b4a.write(buf, encodeOct(opts.gid, 6), 116)\n encodeSize(opts.size, buf, 124)\n b4a.write(buf, encodeOct((opts.mtime.getTime() / 1000) | 0, 11), 136)\n\n buf[156] = ZERO_OFFSET + toTypeflag(opts.type)\n\n if (opts.linkname) b4a.write(buf, opts.linkname, 157)\n\n b4a.copy(USTAR_MAGIC, buf, MAGIC_OFFSET)\n b4a.copy(USTAR_VER, buf, VERSION_OFFSET)\n if (opts.uname) b4a.write(buf, opts.uname, 265)\n if (opts.gname) b4a.write(buf, opts.gname, 297)\n b4a.write(buf, encodeOct(opts.devmajor || 0, 6), 329)\n b4a.write(buf, encodeOct(opts.devminor || 0, 6), 337)\n\n if (prefix) b4a.write(buf, prefix, 345)\n\n b4a.write(buf, encodeOct(cksum(buf), 6), 148)\n\n return buf\n}\n\nexports.decode = function decode (buf, filenameEncoding, allowUnknownFormat) {\n let typeflag = buf[156] === 0 ? 0 : buf[156] - ZERO_OFFSET\n\n let name = decodeStr(buf, 0, 100, filenameEncoding)\n const mode = decodeOct(buf, 100, 8)\n const uid = decodeOct(buf, 108, 8)\n const gid = decodeOct(buf, 116, 8)\n const size = decodeOct(buf, 124, 12)\n const mtime = decodeOct(buf, 136, 12)\n const type = toType(typeflag)\n const linkname = buf[157] === 0 ? null : decodeStr(buf, 157, 100, filenameEncoding)\n const uname = decodeStr(buf, 265, 32)\n const gname = decodeStr(buf, 297, 32)\n const devmajor = decodeOct(buf, 329, 8)\n const devminor = decodeOct(buf, 337, 8)\n\n const c = cksum(buf)\n\n // checksum is still initial value if header was null.\n if (c === 8 * 32) return null\n\n // valid checksum\n if (c !== decodeOct(buf, 148, 8)) throw new Error('Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?')\n\n if (isUSTAR(buf)) {\n // ustar (posix) format.\n // prepend prefix, if present.\n if (buf[345]) name = decodeStr(buf, 345, 155, filenameEncoding) + '/' + name\n } else if (isGNU(buf)) {\n // 'gnu'/'oldgnu' format. Similar to ustar, but has support for incremental and\n // multi-volume tarballs.\n } else {\n if (!allowUnknownFormat) {\n throw new Error('Invalid tar header: unknown format.')\n }\n }\n\n // to support old tar versions that use trailing / to indicate dirs\n if (typeflag === 0 && name && name[name.length - 1] === '/') typeflag = 5\n\n return {\n name,\n mode,\n uid,\n gid,\n size,\n mtime: new Date(1000 * mtime),\n type,\n linkname,\n uname,\n gname,\n devmajor,\n devminor,\n pax: null\n }\n}\n\nfunction isUSTAR (buf) {\n return b4a.equals(USTAR_MAGIC, buf.subarray(MAGIC_OFFSET, MAGIC_OFFSET + 6))\n}\n\nfunction isGNU (buf) {\n return b4a.equals(GNU_MAGIC, buf.subarray(MAGIC_OFFSET, MAGIC_OFFSET + 6)) &&\n b4a.equals(GNU_VER, buf.subarray(VERSION_OFFSET, VERSION_OFFSET + 2))\n}\n\nfunction clamp (index, len, defaultValue) {\n if (typeof index !== 'number') return defaultValue\n index = ~~index // Coerce to integer.\n if (index >= len) return len\n if (index >= 0) return index\n index += len\n if (index >= 0) return index\n return 0\n}\n\nfunction toType (flag) {\n switch (flag) {\n case 0:\n return 'file'\n case 1:\n return 'link'\n case 2:\n return 'symlink'\n case 3:\n return 'character-device'\n case 4:\n return 'block-device'\n case 5:\n return 'directory'\n case 6:\n return 'fifo'\n case 7:\n return 'contiguous-file'\n case 72:\n return 'pax-header'\n case 55:\n return 'pax-global-header'\n case 27:\n return 'gnu-long-link-path'\n case 28:\n case 30:\n return 'gnu-long-path'\n }\n\n return null\n}\n\nfunction toTypeflag (flag) {\n switch (flag) {\n case 'file':\n return 0\n case 'link':\n return 1\n case 'symlink':\n return 2\n case 'character-device':\n return 3\n case 'block-device':\n return 4\n case 'directory':\n return 5\n case 'fifo':\n return 6\n case 'contiguous-file':\n return 7\n case 'pax-header':\n return 72\n }\n\n return 0\n}\n\nfunction indexOf (block, num, offset, end) {\n for (; offset < end; offset++) {\n if (block[offset] === num) return offset\n }\n return end\n}\n\nfunction cksum (block) {\n let sum = 8 * 32\n for (let i = 0; i < 148; i++) sum += block[i]\n for (let j = 156; j < 512; j++) sum += block[j]\n return sum\n}\n\nfunction encodeOct (val, n) {\n val = val.toString(8)\n if (val.length > n) return SEVENS.slice(0, n) + ' '\n return ZEROS.slice(0, n - val.length) + val + ' '\n}\n\nfunction encodeSizeBin (num, buf, off) {\n buf[off] = 0x80\n for (let i = 11; i > 0; i--) {\n buf[off + i] = num & 0xff\n num = Math.floor(num / 0x100)\n }\n}\n\nfunction encodeSize (num, buf, off) {\n if (num.toString(8).length > 11) {\n encodeSizeBin(num, buf, off)\n } else {\n b4a.write(buf, encodeOct(num, 11), off)\n }\n}\n\n/* Copied from the node-tar repo and modified to meet\n * tar-stream coding standard.\n *\n * Source: https://github.com/npm/node-tar/blob/51b6627a1f357d2eb433e7378e5f05e83b7aa6cd/lib/header.js#L349\n */\nfunction parse256 (buf) {\n // first byte MUST be either 80 or FF\n // 80 for positive, FF for 2's comp\n let positive\n if (buf[0] === 0x80) positive = true\n else if (buf[0] === 0xFF) positive = false\n else return null\n\n // build up a base-256 tuple from the least sig to the highest\n const tuple = []\n let i\n for (i = buf.length - 1; i > 0; i--) {\n const byte = buf[i]\n if (positive) tuple.push(byte)\n else tuple.push(0xFF - byte)\n }\n\n let sum = 0\n const l = tuple.length\n for (i = 0; i < l; i++) {\n sum += tuple[i] * Math.pow(256, i)\n }\n\n return positive ? sum : -1 * sum\n}\n\nfunction decodeOct (val, offset, length) {\n val = val.subarray(offset, offset + length)\n offset = 0\n\n // If prefixed with 0x80 then parse as a base-256 integer\n if (val[offset] & 0x80) {\n return parse256(val)\n } else {\n // Older versions of tar can prefix with spaces\n while (offset < val.length && val[offset] === 32) offset++\n const end = clamp(indexOf(val, 32, offset, val.length), val.length, val.length)\n while (offset < end && val[offset] === 0) offset++\n if (end === offset) return 0\n return parseInt(b4a.toString(val.subarray(offset, end)), 8)\n }\n}\n\nfunction decodeStr (val, offset, length, encoding) {\n return b4a.toString(val.subarray(offset, indexOf(val, 0, offset, offset + length)), encoding)\n}\n\nfunction addLength (str) {\n const len = b4a.byteLength(str)\n let digits = Math.floor(Math.log(len) / Math.log(10)) + 1\n if (len + digits >= Math.pow(10, digits)) digits++\n\n return (len + digits) + str\n}\n","const { Writable, Readable, getStreamError } = require('streamx')\nconst FIFO = require('fast-fifo')\nconst b4a = require('b4a')\nconst headers = require('./headers')\n\nconst EMPTY = b4a.alloc(0)\n\nclass BufferList {\n constructor () {\n this.buffered = 0\n this.shifted = 0\n this.queue = new FIFO()\n\n this._offset = 0\n }\n\n push (buffer) {\n this.buffered += buffer.byteLength\n this.queue.push(buffer)\n }\n\n shiftFirst (size) {\n return this._buffered === 0 ? null : this._next(size)\n }\n\n shift (size) {\n if (size > this.buffered) return null\n if (size === 0) return EMPTY\n\n let chunk = this._next(size)\n\n if (size === chunk.byteLength) return chunk // likely case\n\n const chunks = [chunk]\n\n while ((size -= chunk.byteLength) > 0) {\n chunk = this._next(size)\n chunks.push(chunk)\n }\n\n return b4a.concat(chunks)\n }\n\n _next (size) {\n const buf = this.queue.peek()\n const rem = buf.byteLength - this._offset\n\n if (size >= rem) {\n const sub = this._offset ? buf.subarray(this._offset, buf.byteLength) : buf\n this.queue.shift()\n this._offset = 0\n this.buffered -= rem\n this.shifted += rem\n return sub\n }\n\n this.buffered -= size\n this.shifted += size\n\n return buf.subarray(this._offset, (this._offset += size))\n }\n}\n\nclass Source extends Readable {\n constructor (self, header, offset) {\n super()\n\n this.header = header\n this.offset = offset\n\n this._parent = self\n }\n\n _read (cb) {\n if (this.header.size === 0) {\n this.push(null)\n }\n if (this._parent._stream === this) {\n this._parent._update()\n }\n cb(null)\n }\n\n _predestroy () {\n this._parent.destroy(getStreamError(this))\n }\n\n _detach () {\n if (this._parent._stream === this) {\n this._parent._stream = null\n this._parent._missing = overflow(this.header.size)\n this._parent._update()\n }\n }\n\n _destroy (cb) {\n this._detach()\n cb(null)\n }\n}\n\nclass Extract extends Writable {\n constructor (opts) {\n super(opts)\n\n if (!opts) opts = {}\n\n this._buffer = new BufferList()\n this._offset = 0\n this._header = null\n this._stream = null\n this._missing = 0\n this._longHeader = false\n this._callback = noop\n this._locked = false\n this._finished = false\n this._pax = null\n this._paxGlobal = null\n this._gnuLongPath = null\n this._gnuLongLinkPath = null\n this._filenameEncoding = opts.filenameEncoding || 'utf-8'\n this._allowUnknownFormat = !!opts.allowUnknownFormat\n this._unlockBound = this._unlock.bind(this)\n }\n\n _unlock (err) {\n this._locked = false\n\n if (err) {\n this.destroy(err)\n this._continueWrite(err)\n return\n }\n\n this._update()\n }\n\n _consumeHeader () {\n if (this._locked) return false\n\n this._offset = this._buffer.shifted\n\n try {\n this._header = headers.decode(this._buffer.shift(512), this._filenameEncoding, this._allowUnknownFormat)\n } catch (err) {\n this._continueWrite(err)\n return false\n }\n\n if (!this._header) return true\n\n switch (this._header.type) {\n case 'gnu-long-path':\n case 'gnu-long-link-path':\n case 'pax-global-header':\n case 'pax-header':\n this._longHeader = true\n this._missing = this._header.size\n return true\n }\n\n this._locked = true\n this._applyLongHeaders()\n\n if (this._header.size === 0 || this._header.type === 'directory') {\n this.emit('entry', this._header, this._createStream(), this._unlockBound)\n return true\n }\n\n this._stream = this._createStream()\n this._missing = this._header.size\n\n this.emit('entry', this._header, this._stream, this._unlockBound)\n return true\n }\n\n _applyLongHeaders () {\n if (this._gnuLongPath) {\n this._header.name = this._gnuLongPath\n this._gnuLongPath = null\n }\n\n if (this._gnuLongLinkPath) {\n this._header.linkname = this._gnuLongLinkPath\n this._gnuLongLinkPath = null\n }\n\n if (this._pax) {\n if (this._pax.path) this._header.name = this._pax.path\n if (this._pax.linkpath) this._header.linkname = this._pax.linkpath\n if (this._pax.size) this._header.size = parseInt(this._pax.size, 10)\n this._header.pax = this._pax\n this._pax = null\n }\n }\n\n _decodeLongHeader (buf) {\n switch (this._header.type) {\n case 'gnu-long-path':\n this._gnuLongPath = headers.decodeLongPath(buf, this._filenameEncoding)\n break\n case 'gnu-long-link-path':\n this._gnuLongLinkPath = headers.decodeLongPath(buf, this._filenameEncoding)\n break\n case 'pax-global-header':\n this._paxGlobal = headers.decodePax(buf)\n break\n case 'pax-header':\n this._pax = this._paxGlobal === null\n ? headers.decodePax(buf)\n : Object.assign({}, this._paxGlobal, headers.decodePax(buf))\n break\n }\n }\n\n _consumeLongHeader () {\n this._longHeader = false\n this._missing = overflow(this._header.size)\n\n const buf = this._buffer.shift(this._header.size)\n\n try {\n this._decodeLongHeader(buf)\n } catch (err) {\n this._continueWrite(err)\n return false\n }\n\n return true\n }\n\n _consumeStream () {\n const buf = this._buffer.shiftFirst(this._missing)\n if (buf === null) return false\n\n this._missing -= buf.byteLength\n const drained = this._stream.push(buf)\n\n if (this._missing === 0) {\n this._stream.push(null)\n if (drained) this._stream._detach()\n return drained && this._locked === false\n }\n\n return drained\n }\n\n _createStream () {\n return new Source(this, this._header, this._offset)\n }\n\n _update () {\n while (this._buffer.buffered > 0 && !this.destroying) {\n if (this._missing > 0) {\n if (this._stream !== null) {\n if (this._consumeStream() === false) return\n continue\n }\n\n if (this._longHeader === true) {\n if (this._missing > this._buffer.buffered) break\n if (this._consumeLongHeader() === false) return false\n continue\n }\n\n const ignore = this._buffer.shiftFirst(this._missing)\n if (ignore !== null) this._missing -= ignore.byteLength\n continue\n }\n\n if (this._buffer.buffered < 512) break\n if (this._stream !== null || this._consumeHeader() === false) return\n }\n\n this._continueWrite(null)\n }\n\n _continueWrite (err) {\n const cb = this._callback\n this._callback = noop\n cb(err)\n }\n\n _write (data, cb) {\n this._callback = cb\n this._buffer.push(data)\n this._update()\n }\n\n _final (cb) {\n this._finished = this._missing === 0 && this._buffer.buffered === 0\n cb(this._finished ? null : new Error('Unexpected end of data'))\n }\n\n _predestroy () {\n this._continueWrite(null)\n }\n\n _destroy (cb) {\n if (this._stream) this._stream.destroy(getStreamError(this))\n cb(null)\n }\n\n [Symbol.asyncIterator] () {\n let error = null\n\n let promiseResolve = null\n let promiseReject = null\n\n let entryStream = null\n let entryCallback = null\n\n const extract = this\n\n this.on('entry', onentry)\n this.on('error', (err) => { error = err })\n this.on('close', onclose)\n\n return {\n [Symbol.asyncIterator] () {\n return this\n },\n next () {\n return new Promise(onnext)\n },\n return () {\n return destroy(null)\n },\n throw (err) {\n return destroy(err)\n }\n }\n\n function consumeCallback (err) {\n if (!entryCallback) return\n const cb = entryCallback\n entryCallback = null\n cb(err)\n }\n\n function onnext (resolve, reject) {\n if (error) {\n return reject(error)\n }\n\n if (entryStream) {\n resolve({ value: entryStream, done: false })\n entryStream = null\n return\n }\n\n promiseResolve = resolve\n promiseReject = reject\n\n consumeCallback(null)\n\n if (extract._finished && promiseResolve) {\n promiseResolve({ value: undefined, done: true })\n promiseResolve = promiseReject = null\n }\n }\n\n function onentry (header, stream, callback) {\n entryCallback = callback\n stream.on('error', noop) // no way around this due to tick sillyness\n\n if (promiseResolve) {\n promiseResolve({ value: stream, done: false })\n promiseResolve = promiseReject = null\n } else {\n entryStream = stream\n }\n }\n\n function onclose () {\n consumeCallback(error)\n if (!promiseResolve) return\n if (error) promiseReject(error)\n else promiseResolve({ value: undefined, done: true })\n promiseResolve = promiseReject = null\n }\n\n function destroy (err) {\n extract.destroy(err)\n consumeCallback(err)\n return new Promise((resolve, reject) => {\n if (extract.destroyed) return resolve({ value: undefined, done: true })\n extract.once('close', function () {\n if (err) reject(err)\n else resolve({ value: undefined, done: true })\n })\n })\n }\n }\n}\n\nmodule.exports = function extract (opts) {\n return new Extract(opts)\n}\n\nfunction noop () {}\n\nfunction overflow (size) {\n size &= 511\n return size && 512 - size\n}\n","const constants = { // just for envs without fs\n S_IFMT: 61440,\n S_IFDIR: 16384,\n S_IFCHR: 8192,\n S_IFBLK: 24576,\n S_IFIFO: 4096,\n S_IFLNK: 40960\n}\n\ntry {\n module.exports = require('fs').constants || constants\n} catch {\n module.exports = constants\n}\n","const { Readable, Writable, getStreamError } = require('streamx')\nconst b4a = require('b4a')\n\nconst constants = require('./constants')\nconst headers = require('./headers')\n\nconst DMODE = 0o755\nconst FMODE = 0o644\n\nconst END_OF_TAR = b4a.alloc(1024)\n\nclass Sink extends Writable {\n constructor (pack, header, callback) {\n super({ mapWritable, eagerOpen: true })\n\n this.written = 0\n this.header = header\n\n this._callback = callback\n this._linkname = null\n this._isLinkname = header.type === 'symlink' && !header.linkname\n this._isVoid = header.type !== 'file' && header.type !== 'contiguous-file'\n this._finished = false\n this._pack = pack\n this._openCallback = null\n\n if (this._pack._stream === null) this._pack._stream = this\n else this._pack._pending.push(this)\n }\n\n _open (cb) {\n this._openCallback = cb\n if (this._pack._stream === this) this._continueOpen()\n }\n\n _continuePack (err) {\n if (this._callback === null) return\n\n const callback = this._callback\n this._callback = null\n\n callback(err)\n }\n\n _continueOpen () {\n if (this._pack._stream === null) this._pack._stream = this\n\n const cb = this._openCallback\n this._openCallback = null\n if (cb === null) return\n\n if (this._pack.destroying) return cb(new Error('pack stream destroyed'))\n if (this._pack._finalized) return cb(new Error('pack stream is already finalized'))\n\n this._pack._stream = this\n\n if (!this._isLinkname) {\n this._pack._encode(this.header)\n }\n\n if (this._isVoid) {\n this._finish()\n this._continuePack(null)\n }\n\n cb(null)\n }\n\n _write (data, cb) {\n if (this._isLinkname) {\n this._linkname = this._linkname ? b4a.concat([this._linkname, data]) : data\n return cb(null)\n }\n\n if (this._isVoid) {\n if (data.byteLength > 0) {\n return cb(new Error('No body allowed for this entry'))\n }\n return cb()\n }\n\n this.written += data.byteLength\n if (this._pack.push(data)) return cb()\n this._pack._drain = cb\n }\n\n _finish () {\n if (this._finished) return\n this._finished = true\n\n if (this._isLinkname) {\n this.header.linkname = this._linkname ? b4a.toString(this._linkname, 'utf-8') : ''\n this._pack._encode(this.header)\n }\n\n overflow(this._pack, this.header.size)\n\n this._pack._done(this)\n }\n\n _final (cb) {\n if (this.written !== this.header.size) { // corrupting tar\n return cb(new Error('Size mismatch'))\n }\n\n this._finish()\n cb(null)\n }\n\n _getError () {\n return getStreamError(this) || new Error('tar entry destroyed')\n }\n\n _predestroy () {\n this._pack.destroy(this._getError())\n }\n\n _destroy (cb) {\n this._pack._done(this)\n\n this._continuePack(this._finished ? null : this._getError())\n\n cb()\n }\n}\n\nclass Pack extends Readable {\n constructor (opts) {\n super(opts)\n this._drain = noop\n this._finalized = false\n this._finalizing = false\n this._pending = []\n this._stream = null\n }\n\n entry (header, buffer, callback) {\n if (this._finalized || this.destroying) throw new Error('already finalized or destroyed')\n\n if (typeof buffer === 'function') {\n callback = buffer\n buffer = null\n }\n\n if (!callback) callback = noop\n\n if (!header.size || header.type === 'symlink') header.size = 0\n if (!header.type) header.type = modeToType(header.mode)\n if (!header.mode) header.mode = header.type === 'directory' ? DMODE : FMODE\n if (!header.uid) header.uid = 0\n if (!header.gid) header.gid = 0\n if (!header.mtime) header.mtime = new Date()\n\n if (typeof buffer === 'string') buffer = b4a.from(buffer)\n\n const sink = new Sink(this, header, callback)\n\n if (b4a.isBuffer(buffer)) {\n header.size = buffer.byteLength\n sink.write(buffer)\n sink.end()\n return sink\n }\n\n if (sink._isVoid) {\n return sink\n }\n\n return sink\n }\n\n finalize () {\n if (this._stream || this._pending.length > 0) {\n this._finalizing = true\n return\n }\n\n if (this._finalized) return\n this._finalized = true\n\n this.push(END_OF_TAR)\n this.push(null)\n }\n\n _done (stream) {\n if (stream !== this._stream) return\n\n this._stream = null\n\n if (this._finalizing) this.finalize()\n if (this._pending.length) this._pending.shift()._continueOpen()\n }\n\n _encode (header) {\n if (!header.pax) {\n const buf = headers.encode(header)\n if (buf) {\n this.push(buf)\n return\n }\n }\n this._encodePax(header)\n }\n\n _encodePax (header) {\n const paxHeader = headers.encodePax({\n name: header.name,\n linkname: header.linkname,\n pax: header.pax\n })\n\n const newHeader = {\n name: 'PaxHeader',\n mode: header.mode,\n uid: header.uid,\n gid: header.gid,\n size: paxHeader.byteLength,\n mtime: header.mtime,\n type: 'pax-header',\n linkname: header.linkname && 'PaxHeader',\n uname: header.uname,\n gname: header.gname,\n devmajor: header.devmajor,\n devminor: header.devminor\n }\n\n this.push(headers.encode(newHeader))\n this.push(paxHeader)\n overflow(this, paxHeader.byteLength)\n\n newHeader.size = header.size\n newHeader.type = header.type\n this.push(headers.encode(newHeader))\n }\n\n _doDrain () {\n const drain = this._drain\n this._drain = noop\n drain()\n }\n\n _predestroy () {\n const err = getStreamError(this)\n\n if (this._stream) this._stream.destroy(err)\n\n while (this._pending.length) {\n const stream = this._pending.shift()\n stream.destroy(err)\n stream._continueOpen()\n }\n\n this._doDrain()\n }\n\n _read (cb) {\n this._doDrain()\n cb()\n }\n}\n\nmodule.exports = function pack (opts) {\n return new Pack(opts)\n}\n\nfunction modeToType (mode) {\n switch (mode & constants.S_IFMT) {\n case constants.S_IFBLK: return 'block-device'\n case constants.S_IFCHR: return 'character-device'\n case constants.S_IFDIR: return 'directory'\n case constants.S_IFIFO: return 'fifo'\n case constants.S_IFLNK: return 'symlink'\n }\n\n return 'file'\n}\n\nfunction noop () {}\n\nfunction overflow (self, size) {\n size &= 511\n if (size) self.push(END_OF_TAR.subarray(0, 512 - size))\n}\n\nfunction mapWritable (buf) {\n return b4a.isBuffer(buf) ? buf : b4a.from(buf)\n}\n","exports.extract = require('./extract')\nexports.pack = require('./pack')\n","// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n","var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n","var once = require('once');\n\nvar noop = function() {};\n\nvar qnt = global.Bare ? queueMicrotask : process.nextTick.bind(process);\n\nvar isRequest = function(stream) {\n\treturn stream.setHeader && typeof stream.abort === 'function';\n};\n\nvar isChildProcess = function(stream) {\n\treturn stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3\n};\n\nvar eos = function(stream, opts, callback) {\n\tif (typeof opts === 'function') return eos(stream, null, opts);\n\tif (!opts) opts = {};\n\n\tcallback = once(callback || noop);\n\n\tvar ws = stream._writableState;\n\tvar rs = stream._readableState;\n\tvar readable = opts.readable || (opts.readable !== false && stream.readable);\n\tvar writable = opts.writable || (opts.writable !== false && stream.writable);\n\tvar cancelled = false;\n\n\tvar onlegacyfinish = function() {\n\t\tif (!stream.writable) onfinish();\n\t};\n\n\tvar onfinish = function() {\n\t\twritable = false;\n\t\tif (!readable) callback.call(stream);\n\t};\n\n\tvar onend = function() {\n\t\treadable = false;\n\t\tif (!writable) callback.call(stream);\n\t};\n\n\tvar onexit = function(exitCode) {\n\t\tcallback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);\n\t};\n\n\tvar onerror = function(err) {\n\t\tcallback.call(stream, err);\n\t};\n\n\tvar onclose = function() {\n\t\tqnt(onclosenexttick);\n\t};\n\n\tvar onclosenexttick = function() {\n\t\tif (cancelled) return;\n\t\tif (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));\n\t\tif (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));\n\t};\n\n\tvar onrequest = function() {\n\t\tstream.req.on('finish', onfinish);\n\t};\n\n\tif (isRequest(stream)) {\n\t\tstream.on('complete', onfinish);\n\t\tstream.on('abort', onclose);\n\t\tif (stream.req) onrequest();\n\t\telse stream.on('request', onrequest);\n\t} else if (writable && !ws) { // legacy streams\n\t\tstream.on('end', onlegacyfinish);\n\t\tstream.on('close', onlegacyfinish);\n\t}\n\n\tif (isChildProcess(stream)) stream.on('exit', onexit);\n\n\tstream.on('end', onend);\n\tstream.on('finish', onfinish);\n\tif (opts.error !== false) stream.on('error', onerror);\n\tstream.on('close', onclose);\n\n\treturn function() {\n\t\tcancelled = true;\n\t\tstream.removeListener('complete', onfinish);\n\t\tstream.removeListener('abort', onclose);\n\t\tstream.removeListener('request', onrequest);\n\t\tif (stream.req) stream.req.removeListener('finish', onfinish);\n\t\tstream.removeListener('end', onlegacyfinish);\n\t\tstream.removeListener('close', onlegacyfinish);\n\t\tstream.removeListener('finish', onfinish);\n\t\tstream.removeListener('exit', onexit);\n\t\tstream.removeListener('end', onend);\n\t\tstream.removeListener('error', onerror);\n\t\tstream.removeListener('close', onclose);\n\t};\n};\n\nmodule.exports = eos;\n","var once = require('once')\nvar eos = require('end-of-stream')\nvar fs\n\ntry {\n fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes\n} catch (e) {}\n\nvar noop = function () {}\nvar ancient = typeof process === 'undefined' ? false : /^v?\\.0/.test(process.version)\n\nvar isFn = function (fn) {\n return typeof fn === 'function'\n}\n\nvar isFS = function (stream) {\n if (!ancient) return false // newer node version do not need to care about fs is a special way\n if (!fs) return false // browser\n return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)\n}\n\nvar isRequest = function (stream) {\n return stream.setHeader && isFn(stream.abort)\n}\n\nvar destroyer = function (stream, reading, writing, callback) {\n callback = once(callback)\n\n var closed = false\n stream.on('close', function () {\n closed = true\n })\n\n eos(stream, {readable: reading, writable: writing}, function (err) {\n if (err) return callback(err)\n closed = true\n callback()\n })\n\n var destroyed = false\n return function (err) {\n if (closed) return\n if (destroyed) return\n destroyed = true\n\n if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks\n if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want\n\n if (isFn(stream.destroy)) return stream.destroy()\n\n callback(err || new Error('stream was destroyed'))\n }\n}\n\nvar call = function (fn) {\n fn()\n}\n\nvar pipe = function (from, to) {\n return from.pipe(to)\n}\n\nvar pump = function () {\n var streams = Array.prototype.slice.call(arguments)\n var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop\n\n if (Array.isArray(streams[0])) streams = streams[0]\n if (streams.length < 2) throw new Error('pump requires two streams per minimum')\n\n var error\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1\n var writing = i > 0\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err\n if (err) destroys.forEach(call)\n if (reading) return\n destroys.forEach(call)\n callback(error)\n })\n })\n\n return streams.reduce(pipe)\n}\n\nmodule.exports = pump\n","const tar = require('tar-stream')\nconst pump = require('pump')\nconst fs = require('fs')\nconst path = require('path')\n\nconst win32 = (global.Bare ? global.Bare.platform : process.platform) === 'win32'\n\nexports.pack = function pack (cwd, opts) {\n if (!cwd) cwd = '.'\n if (!opts) opts = {}\n\n const xfs = opts.fs || fs\n const ignore = opts.ignore || opts.filter || noop\n const mapStream = opts.mapStream || echo\n const statNext = statAll(xfs, opts.dereference ? xfs.stat : xfs.lstat, cwd, ignore, opts.entries, opts.sort)\n const strict = opts.strict !== false\n const umask = typeof opts.umask === 'number' ? ~opts.umask : ~processUmask()\n const pack = opts.pack || tar.pack()\n const finish = opts.finish || noop\n\n let map = opts.map || noop\n let dmode = typeof opts.dmode === 'number' ? opts.dmode : 0\n let fmode = typeof opts.fmode === 'number' ? opts.fmode : 0\n\n if (opts.strip) map = strip(map, opts.strip)\n\n if (opts.readable) {\n dmode |= parseInt(555, 8)\n fmode |= parseInt(444, 8)\n }\n if (opts.writable) {\n dmode |= parseInt(333, 8)\n fmode |= parseInt(222, 8)\n }\n\n onnextentry()\n\n function onsymlink (filename, header) {\n xfs.readlink(path.join(cwd, filename), function (err, linkname) {\n if (err) return pack.destroy(err)\n header.linkname = normalize(linkname)\n pack.entry(header, onnextentry)\n })\n }\n\n function onstat (err, filename, stat) {\n if (pack.destroyed) return\n if (err) return pack.destroy(err)\n if (!filename) {\n if (opts.finalize !== false) pack.finalize()\n return finish(pack)\n }\n\n if (stat.isSocket()) return onnextentry() // tar does not support sockets...\n\n let header = {\n name: normalize(filename),\n mode: (stat.mode | (stat.isDirectory() ? dmode : fmode)) & umask,\n mtime: stat.mtime,\n size: stat.size,\n type: 'file',\n uid: stat.uid,\n gid: stat.gid\n }\n\n if (stat.isDirectory()) {\n header.size = 0\n header.type = 'directory'\n header = map(header) || header\n return pack.entry(header, onnextentry)\n }\n\n if (stat.isSymbolicLink()) {\n header.size = 0\n header.type = 'symlink'\n header = map(header) || header\n return onsymlink(filename, header)\n }\n\n // TODO: add fifo etc...\n\n header = map(header) || header\n\n if (!stat.isFile()) {\n if (strict) return pack.destroy(new Error('unsupported type for ' + filename))\n return onnextentry()\n }\n\n const entry = pack.entry(header, onnextentry)\n const rs = mapStream(xfs.createReadStream(path.join(cwd, filename), { start: 0, end: header.size > 0 ? header.size - 1 : header.size }), header)\n\n rs.on('error', function (err) { // always forward errors on destroy\n entry.destroy(err)\n })\n\n pump(rs, entry)\n }\n\n function onnextentry (err) {\n if (err) return pack.destroy(err)\n statNext(onstat)\n }\n\n return pack\n}\n\nfunction head (list) {\n return list.length ? list[list.length - 1] : null\n}\n\nfunction processGetuid () {\n return (!global.Bare && process.getuid) ? process.getuid() : -1\n}\n\nfunction processUmask () {\n return (!global.Bare && process.umask) ? process.umask() : 0\n}\n\nexports.extract = function extract (cwd, opts) {\n if (!cwd) cwd = '.'\n if (!opts) opts = {}\n\n cwd = path.resolve(cwd)\n\n const xfs = opts.fs || fs\n const ignore = opts.ignore || opts.filter || noop\n const mapStream = opts.mapStream || echo\n const own = opts.chown !== false && !win32 && processGetuid() === 0\n const extract = opts.extract || tar.extract()\n const stack = []\n const now = new Date()\n const umask = typeof opts.umask === 'number' ? ~opts.umask : ~processUmask()\n const strict = opts.strict !== false\n const validateSymLinks = opts.validateSymlinks !== false\n\n let map = opts.map || noop\n let dmode = typeof opts.dmode === 'number' ? opts.dmode : 0\n let fmode = typeof opts.fmode === 'number' ? opts.fmode : 0\n\n if (opts.strip) map = strip(map, opts.strip)\n\n if (opts.readable) {\n dmode |= parseInt(555, 8)\n fmode |= parseInt(444, 8)\n }\n if (opts.writable) {\n dmode |= parseInt(333, 8)\n fmode |= parseInt(222, 8)\n }\n\n extract.on('entry', onentry)\n\n if (opts.finish) extract.on('finish', opts.finish)\n\n return extract\n\n function onentry (header, stream, next) {\n header = map(header) || header\n header.name = normalize(header.name)\n\n const name = path.join(cwd, path.join('/', header.name))\n\n if (ignore(name, header)) {\n stream.resume()\n return next()\n }\n\n const dir = path.join(name, '.') === path.join(cwd, '.') ? cwd : path.dirname(name)\n\n validate(xfs, dir, path.join(cwd, '.'), function (err, valid) {\n if (err) return next(err)\n if (!valid) return next(new Error(dir + ' is not a valid path'))\n\n if (header.type === 'directory') {\n stack.push([name, header.mtime])\n return mkdirfix(name, {\n fs: xfs,\n own,\n uid: header.uid,\n gid: header.gid,\n mode: header.mode\n }, stat)\n }\n\n mkdirfix(dir, {\n fs: xfs,\n own,\n uid: header.uid,\n gid: header.gid,\n // normally, the folders with rights and owner should be part of the TAR file\n // if this is not the case, create folder for same user as file and with\n // standard permissions of 0o755 (rwxr-xr-x)\n mode: 0o755\n }, function (err) {\n if (err) return next(err)\n\n switch (header.type) {\n case 'file': return onfile()\n case 'link': return onlink()\n case 'symlink': return onsymlink()\n }\n\n if (strict) return next(new Error('unsupported type for ' + name + ' (' + header.type + ')'))\n\n stream.resume()\n next()\n })\n })\n\n function stat (err) {\n if (err) return next(err)\n if (path.join(name, '.') === path.join(cwd, '.')) return next() // do not touch the extraction root itself\n utimes(name, header, function (err) {\n if (err) return next(err)\n if (win32) return next()\n chperm(name, header, next)\n })\n }\n\n function onsymlink () {\n if (win32) return next() // skip symlinks on win for now before it can be tested\n xfs.unlink(name, function () {\n const dst = path.resolve(path.dirname(name), header.linkname)\n // strip shifts the resolution anchor, so a relative linkname may now escape - reject regardless of validateSymlinks\n if (!inCwd(dst) && (validateSymLinks || opts.strip)) return next(new Error(name + ' is not a valid symlink'))\n\n validateNotSymlink(xfs, dst, path.join(cwd, '.'), function (err, valid) {\n if (err) return next(err)\n if (!valid && validateSymLinks) return next(new Error(name + ' is not a valid symlink'))\n xfs.symlink(header.linkname, name, stat)\n })\n })\n }\n\n function onlink () {\n if (win32) return next() // skip links on win for now before it can be tested\n xfs.unlink(name, function () {\n const link = path.join(cwd, path.join('/', header.linkname))\n\n xfs.realpath(link, function (err, dst) {\n if (err || !inCwd(dst)) return next(new Error(name + ' is not a valid hardlink'))\n\n xfs.link(dst, name, function (err) {\n if (err && err.code === 'EPERM' && opts.hardlinkAsFilesFallback) {\n stream = xfs.createReadStream(dst)\n return onfile()\n }\n\n stat(err)\n })\n })\n })\n }\n\n function inCwd (dst) {\n return dst === cwd || dst.startsWith(cwd + path.sep)\n }\n\n function onfile () {\n xfs.lstat(name, function (err, st) {\n if (!err && st.isSymbolicLink()) return xfs.unlink(name, onwrite) // never write through an existing symlink\n onwrite()\n })\n\n function onwrite (err) {\n if (err) return next(err)\n\n const ws = xfs.createWriteStream(name)\n const rs = mapStream(stream, header)\n\n ws.on('error', function (err) { // always forward errors on destroy\n rs.destroy(err)\n })\n\n pump(rs, ws, function (err) {\n if (err) return next(err)\n ws.on('close', stat)\n })\n }\n }\n }\n\n function utimesParent (name, cb) { // we just set the mtime on the parent dir again everytime we write an entry\n let top\n while ((top = head(stack)) && name.slice(0, top[0].length) !== top[0]) stack.pop()\n if (!top) return cb()\n xfs.utimes(top[0], now, top[1], cb)\n }\n\n function utimes (name, header, cb) {\n if (opts.utimes === false) return cb()\n\n if (header.type === 'directory') return xfs.utimes(name, now, header.mtime, cb)\n if (header.type === 'symlink') return utimesParent(name, cb) // TODO: how to set mtime on link?\n\n xfs.utimes(name, now, header.mtime, function (err) {\n if (err) return cb(err)\n utimesParent(name, cb)\n })\n }\n\n function chperm (name, header, cb) {\n const link = header.type === 'symlink'\n\n /* eslint-disable n/no-deprecated-api */\n const chmod = link ? xfs.lchmod : xfs.chmod\n const chown = link ? xfs.lchown : xfs.chown\n /* eslint-enable n/no-deprecated-api */\n\n if (!chmod) return cb()\n\n const mode = (header.mode | (header.type === 'directory' ? dmode : fmode)) & umask & 0o777 // never extract setuid/setgid/sticky bits\n\n if (chown && own) chown.call(xfs, name, header.uid, header.gid, onchown)\n else onchown(null)\n\n function onchown (err) {\n if (err) return cb(err)\n if (!chmod) return cb()\n chmod.call(xfs, name, mode, cb)\n }\n }\n\n function mkdirfix (name, opts, cb) {\n // when mkdir is called on an existing directory, the permissions\n // will be overwritten (?), to avoid this we check for its existance first\n xfs.stat(name, function (err) {\n if (!err) return cb(null)\n if (err.code !== 'ENOENT') return cb(err)\n xfs.mkdir(name, { mode: opts.mode, recursive: true }, function (err, made) {\n if (err) return cb(err)\n chperm(name, opts, cb)\n })\n })\n }\n}\n\nfunction validateNotSymlink (fs, name, root, cb) {\n if (name === root) return cb(null, true)\n if (!name.startsWith(root + path.sep)) return cb(null, false)\n\n fs.lstat(name, function (err, st) {\n if (err && err.code !== 'ENOENT' && err.code !== 'EPERM') return cb(err)\n if (err || !st.isSymbolicLink()) return validateNotSymlink(fs, path.join(name, '..'), root, cb)\n cb(null, false)\n })\n}\n\nfunction validate (fs, name, root, cb) {\n if (name === root) return cb(null, true)\n\n fs.lstat(name, function (err, st) {\n if (err && err.code !== 'ENOENT' && err.code !== 'EPERM') return cb(err)\n if (err || st.isDirectory()) return validate(fs, path.join(name, '..'), root, cb)\n cb(null, false)\n })\n}\n\nfunction inside (root, name) {\n return name === root || name.startsWith(root + path.sep)\n}\n\nfunction noop () {}\n\nfunction echo (name) {\n return name\n}\n\nfunction normalize (name) {\n return win32 ? name.replace(/\\\\/g, '/').replace(/[:?<>|]/g, '_') : name\n}\n\nfunction statAll (fs, stat, cwd, ignore, entries, sort) {\n if (!entries) entries = ['.']\n const queue = entries.slice(0)\n const root = path.resolve(cwd)\n\n return function loop (callback) {\n if (!queue.length) return callback(null)\n\n const next = queue.shift()\n const nextAbs = path.join(cwd, next)\n\n if (!inside(root, path.resolve(cwd, next))) return callback(new Error(next + ' is not a valid path')) // do not pack outside cwd\n\n stat.call(fs, nextAbs, function (err, stat) {\n // ignore errors if the files were deleted while buffering\n if (err) return callback(entries.indexOf(next) === -1 && err.code === 'ENOENT' ? null : err)\n\n if (!stat.isDirectory()) return callback(null, next, stat)\n\n fs.readdir(nextAbs, function (err, files) {\n if (err) return callback(err)\n\n if (sort) files.sort()\n\n for (let i = 0; i < files.length; i++) {\n if (!ignore(path.join(cwd, next, files[i]))) queue.push(path.join(next, files[i]))\n }\n\n callback(null, next, stat)\n })\n })\n }\n}\n\nfunction strip (map, level) {\n return function (header) {\n header.name = header.name.split('/').slice(level).join('/')\n\n const linkname = header.linkname\n if (linkname && (header.type === 'link' || path.isAbsolute(linkname))) {\n header.linkname = linkname.split('/').slice(level).join('/')\n }\n\n return map(header)\n }\n}\n","import { createWriteStream, rm } from \"node:fs\";\nimport { access, symlink } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport { extract } from \"tar-fs\";\n/**\n * Creates a symlink to a file\n */\nexport const createSymlink = async (source, target) => {\n await access(source);\n await symlink(source, target);\n};\n/**\n * Downloads a file from a URL\n */\nexport const downloadFile = async (url, outputPath) => {\n const response = await fetch(url, { redirect: \"follow\" });\n if (!response.ok) {\n throw new Error(`Unexpected status code: ${String(response.status)}.`);\n }\n if (!response.body) {\n throw new Error(\"Response body is empty.\");\n }\n await pipeline(Readable.fromWeb(response.body), createWriteStream(outputPath));\n};\n/**\n * Adds the proper folders to the environment\n * @param baseLibPath the path to this packages lib folder\n */\nexport const setupLambdaEnvironment = (baseLibPath) => {\n // If the FONTCONFIG_PATH is not set, set it to /tmp/fonts\n process.env[\"FONTCONFIG_PATH\"] ??= join(tmpdir(), \"fonts\");\n // Set up Home folder if not already set\n process.env[\"HOME\"] ??= tmpdir();\n // If LD_LIBRARY_PATH is undefined, set it to baseLibPath, otherwise, add it\n if (process.env[\"LD_LIBRARY_PATH\"] === undefined) {\n process.env[\"LD_LIBRARY_PATH\"] = baseLibPath;\n }\n else if (!process.env[\"LD_LIBRARY_PATH\"].startsWith(baseLibPath)) {\n process.env[\"LD_LIBRARY_PATH\"] = [\n baseLibPath,\n ...new Set(process.env[\"LD_LIBRARY_PATH\"].split(\":\")),\n ].join(\":\");\n }\n};\n/**\n * Determines if the input is a valid URL\n * @param input the input to check\n * @returns boolean indicating if the input is a valid URL\n */\nexport const isValidUrl = (input) => {\n try {\n const url = new URL(input);\n if (url.protocol === \"https:\")\n return true;\n // Allow http:// only for localhost/127.0.0.1 (development/testing)\n if (url.protocol === \"http:\" &&\n (url.hostname === \"localhost\" ||\n url.hostname === \"127.0.0.1\" ||\n url.hostname === \"[::1]\")) {\n return true;\n }\n return false;\n }\n catch {\n return false;\n }\n};\n/**\n * Determines if the running instance is inside an Amazon Linux 2023 container,\n * AWS_EXECUTION_ENV is for native Lambda instances\n * AWS_LAMBDA_JS_RUNTIME is for netlify instances\n * CODEBUILD_BUILD_IMAGE is for CodeBuild instances\n * VERCEL is for Vercel Functions (Node 20 or later enables an AL2023-compatible environment).\n * @returns boolean indicating if the running instance is inside a Lambda container with nodejs20\n */\nexport const isRunningInAmazonLinux2023 = (nodeMajorVersion) => {\n const awsExecEnv = process.env[\"AWS_EXECUTION_ENV\"] ?? \"\";\n const awsLambdaJsRuntime = process.env[\"AWS_LAMBDA_JS_RUNTIME\"] ?? \"\";\n const codebuildImage = process.env[\"CODEBUILD_BUILD_IMAGE\"] ?? \"\";\n // Check for explicit version substrings, returns on first match\n if (awsExecEnv.includes(\"20.x\") ||\n awsExecEnv.includes(\"22.x\") ||\n awsExecEnv.includes(\"24.x\") ||\n awsLambdaJsRuntime.includes(\"20.x\") ||\n awsLambdaJsRuntime.includes(\"22.x\") ||\n awsLambdaJsRuntime.includes(\"24.x\") ||\n codebuildImage.includes(\"nodejs20\") ||\n codebuildImage.includes(\"nodejs22\") ||\n codebuildImage.includes(\"nodejs24\")) {\n return true;\n }\n // Vercel: Node 20+ is AL2023 compatible\n if (process.env[\"VERCEL\"] && nodeMajorVersion >= 20) {\n return true;\n }\n return false;\n};\nexport const downloadAndExtract = async (url) => {\n const destDir = join(tmpdir(), \"chromium-pack\");\n const response = await fetch(url, {\n redirect: \"follow\",\n signal: AbortSignal.timeout(300_000),\n });\n if (!response.ok) {\n throw new Error(`Unexpected status code: ${String(response.status)}.`);\n }\n if (!response.body) {\n throw new Error(\"Response body is empty.\");\n }\n try {\n await pipeline(Readable.fromWeb(response.body), extract(destDir));\n }\n catch (error) {\n // Clean up partial extraction on failure\n await new Promise((resolve) => {\n rm(destDir, { force: true, recursive: true }, () => {\n resolve();\n });\n });\n throw error;\n }\n return destDir;\n};\n","import { createReadStream, createWriteStream, existsSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { basename, join } from \"node:path\";\nimport { createBrotliDecompress, createUnzip } from \"node:zlib\";\nimport { extract } from \"tar-fs\";\nconst ARCHIVE_EXTENSION_REGEX = /\\.(?:t(?:ar(?:\\.(?:br|gz))?|br|gz)|br|gz)$/i;\nconst TAR_EXTENSION_REGEX = /\\.t(?:ar(?:\\.(?:br|gz))?|br|gz)$/i;\nconst BROTLI_EXTENSION_REGEX = /br$/i;\nconst GZIP_EXTENSION_REGEX = /gz$/i;\n/**\n * Decompresses a (tarballed) Brotli or Gzip compressed file and returns the path to the decompressed file/folder.\n *\n * @param filePath Path of the file to decompress.\n */\nexport const inflate = (filePath) => {\n // Determine the output path based on the file type\n const output = filePath.includes(\"swiftshader\") ? tmpdir() : (join(tmpdir(), basename(filePath).replace(ARCHIVE_EXTENSION_REGEX, \"\")));\n return new Promise((resolve, reject) => {\n // Quick return if the file is already decompressed\n if (filePath.includes(\"swiftshader\")) {\n if (existsSync(`${output}/libGLESv2.so`)) {\n resolve(output);\n return;\n }\n }\n else if (existsSync(output)) {\n resolve(output);\n return;\n }\n // Optimize chunk size based on file type - use smaller chunks for better memory usage\n // Brotli files tend to decompress to much larger sizes\n const isBrotli = BROTLI_EXTENSION_REGEX.test(filePath);\n const isGzip = GZIP_EXTENSION_REGEX.test(filePath);\n const isTar = TAR_EXTENSION_REGEX.test(filePath);\n // Use a smaller highWaterMark for better memory efficiency\n // For most serverless environments, 4MB (2**22) is more memory-efficient than 8MB\n const highWaterMark = 2 ** 22;\n const source = createReadStream(filePath, { highWaterMark });\n let target;\n // Setup error handlers first for both streams\n const handleError = (error) => {\n reject(error);\n };\n source.once(\"error\", handleError);\n // Setup the appropriate target stream based on file type\n if (isTar) {\n target = extract(output);\n target.once(\"finish\", () => {\n resolve(output);\n });\n }\n else {\n target = createWriteStream(output, { mode: 0o700 });\n target.once(\"close\", () => {\n resolve(output);\n });\n }\n target.once(\"error\", handleError);\n // Pipe through the appropriate decompressor if needed\n if (isBrotli || isGzip) {\n // Use optimized chunk size for decompression\n // 2MB (2**21) is sufficient for most brotli/gzip files\n const decompressor = isBrotli ?\n createBrotliDecompress({ chunkSize: 2 ** 21 })\n : createUnzip({ chunkSize: 2 ** 21 });\n // Handle decompressor errors\n decompressor.once(\"error\", handleError);\n // Chain the streams\n source.pipe(decompressor).pipe(target);\n }\n else {\n source.pipe(target);\n }\n });\n};\n","import { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n/**\n * Get the bin directory path for ESM modules\n */\nexport function getBinPath() {\n return join(dirname(fileURLToPath(import.meta.url)), \"..\", \"bin\");\n}\n","import { existsSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { downloadAndExtract, isRunningInAmazonLinux2023, isValidUrl, setupLambdaEnvironment, } from \"./helper.js\";\nimport { inflate } from \"./lambdafs.js\";\nimport { getBinPath } from \"./paths.js\";\nconst nodeMajorVersion = Number.parseInt(process.versions.node.split(\".\")[0] ?? \"\");\n// Setup the lambda environment\nif (isRunningInAmazonLinux2023(nodeMajorVersion)) {\n setupLambdaEnvironment(join(tmpdir(), \"al2023\", \"lib\"));\n}\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class -- This class is used to group related static methods together, and it is not meant to be instantiated\nclass Chromium {\n /**\n * Returns a list of additional Chromium flags recommended for serverless environments.\n * The canonical list of flags can be found on https://peter.sh/experiments/chromium-command-line-switches/.\n * Most of below can be found here: https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md\n */\n static get args() {\n const chromiumFlags = [\n \"--ash-no-nudges\", // Avoids blue bubble \"user education\" nudges (eg., \"… give your browser a new look\", Memory Saver)\n \"--disable-domain-reliability\", // Disables Domain Reliability Monitoring, which tracks whether the browser has difficulty contacting Google-owned sites and uploads reports to Google.\n \"--disable-print-preview\", // https://source.chromium.org/search?q=lang:cpp+symbol:kDisablePrintPreview&ss=chromium\n \"--disk-cache-size=33554432\", // https://source.chromium.org/search?q=lang:cpp+symbol:kDiskCacheSize&ss=chromium Forces the maximum disk space to be used by the disk cache, in bytes.\n \"--no-default-browser-check\", // Disable the default browser check, do not prompt to set it as such. (This is already set by Playwright, but not Puppeteer)\n \"--no-pings\", // Don't send hyperlink auditing pings\n \"--single-process\", // Runs the renderer and plugins in the same process as the browser. NOTES: Needs to be single-process to avoid `prctl(PR_SET_NO_NEW_PRIVS) failed` error\n \"--font-render-hinting=none\", // https://github.com/puppeteer/puppeteer/issues/2410#issuecomment-560573612\n ];\n const chromiumDisableFeatures = [\n \"AudioServiceOutOfProcess\",\n \"IsolateOrigins\",\n \"site-per-process\", // Disables OOPIF. https://www.chromium.org/Home/chromium-security/site-isolation\n ];\n const chromiumEnableFeatures = [\"SharedArrayBuffer\"];\n const graphicsFlags = [\n \"--ignore-gpu-blocklist\", // https://source.chromium.org/search?q=lang:cpp+symbol:kIgnoreGpuBlocklist&ss=chromium\n \"--in-process-gpu\", // Saves some memory by moving GPU process into a browser process thread\n ];\n // https://chromium.googlesource.com/chromium/src/+/main/docs/gpu/swiftshader.md\n if (this.graphics) {\n graphicsFlags.push(\n // As the unsafe WebGL fallback, SwANGLE (ANGLE + SwiftShader Vulkan)\n \"--use-gl=angle\", \"--use-angle=swiftshader\", \"--enable-unsafe-swiftshader\");\n }\n else {\n graphicsFlags.push(\"--disable-webgl\");\n }\n const insecureFlags = [\n \"--allow-running-insecure-content\", // https://source.chromium.org/search?q=lang:cpp+symbol:kAllowRunningInsecureContent&ss=chromium\n \"--disable-setuid-sandbox\", // Lambda runs as root, so this is required to allow Chromium to run as root\n \"--disable-site-isolation-trials\", // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableSiteIsolation&ss=chromium\n \"--disable-web-security\", // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableWebSecurity&ss=chromium\n ];\n const headlessFlags = [\n \"--headless='shell'\", // We only support running chrome-headless-shell\n \"--no-sandbox\", // https://source.chromium.org/search?q=lang:cpp+symbol:kNoSandbox&ss=chromium\n \"--no-zygote\", // https://source.chromium.org/search?q=lang:cpp+symbol:kNoZygote&ss=chromium\n ];\n return [\n ...chromiumFlags,\n `--disable-features=${[...chromiumDisableFeatures].join(\",\")}`,\n `--enable-features=${[...chromiumEnableFeatures].join(\",\")}`,\n ...graphicsFlags,\n ...insecureFlags,\n ...headlessFlags,\n ];\n }\n /**\n * Returns whether the graphics stack is enabled or disabled\n * @returns boolean\n */\n static get graphics() {\n return this.graphicsMode;\n }\n /**\n * Sets whether the graphics stack is enabled or disabled.\n * @param true means the stack is enabled. WebGL will work.\n * @param false means that the stack is disabled. WebGL will not work.\n * @default true\n */\n static set setGraphicsMode(value) {\n if (typeof value !== \"boolean\") {\n throw new TypeError(`Graphics mode must be a boolean, you entered '${String(value)}'`);\n }\n this.graphicsMode = value;\n }\n /**\n * If true, the graphics stack and webgl is enabled,\n * If false, webgl will be disabled.\n * (If false, the swiftshader.tar.br file will also not extract)\n */\n static graphicsMode = true;\n /**\n * Inflates the included version of Chromium\n * @param input The location of the `bin` folder\n * @returns The path to the `chromium` binary\n */\n static async executablePath(input) {\n /**\n * If the `chromium` binary already exists in /tmp/chromium, return it.\n */\n if (existsSync(join(tmpdir(), \"chromium\"))) {\n return join(tmpdir(), \"chromium\");\n }\n /**\n * If input is a valid URL, download and extract the file. It will extract to /tmp/chromium-pack\n * and executablePath will be recursively called on that location, which will then extract\n * the brotli files to the correct locations\n */\n if (input && isValidUrl(input)) {\n return this.executablePath(await downloadAndExtract(input));\n }\n /**\n * If input is defined, use that as the location of the brotli files,\n * otherwise, the default location is ../../bin.\n * A custom location is needed for workflows that using custom packaging.\n */\n input ??= getBinPath();\n if (!existsSync(input)) {\n throw new Error(`The input directory \"${input}\" does not exist. ` +\n \"If you are using a bundler (esbuild, webpack, etc.), you must \" +\n \"externalize @sparticuz/chromium so it is not relocated. \" +\n \"See: https://github.com/Sparticuz/chromium#bundler-configuration\");\n }\n // Extract the required files\n const promises = [\n inflate(join(input, \"chromium.br\")),\n inflate(join(input, \"fonts.tar.br\")),\n inflate(join(input, \"swiftshader.tar.br\")),\n ];\n if (isRunningInAmazonLinux2023(nodeMajorVersion)) {\n promises.push(inflate(join(input, \"al2023.tar.br\")));\n }\n // Await all extractions\n const result = await Promise.all(promises);\n // Returns the first result of the promise, which is the location of the `chromium` binary\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- We know that result will have at least one item because we are always inflating the `chromium.br` file, which is the first item in the promises array\n return result.shift();\n }\n}\nexport { setupLambdaEnvironment } from \"./helper.js\";\nexport { inflate } from \"./lambdafs.js\";\nexport default Chromium;\n","// Evaluation type vocabulary shared between the harness runtime and its\n// check/evaluator surfaces. This is the narrow contract layer — the\n// type language every harness leg is written against:\n//\n// - `EvalIssue` — the single issue shape everything produces.\n// - `EvalTier` / `EvalOutcome` / `EvalCategory` — the issue's axes.\n// - `Priority` — P0/P1/P2 ranking referenced by the retry formatter.\n// - `EvalResult` — aggregate shape a runner returns.\n// - `QualityMode` / `QualityConfig` / `DEFAULT_QUALITY_CONFIG` —\n// the quality-mode knob the adapter surface consumes.\n// - `priorityForIssue` / `isBlocked` / `getActionableIssues` — the\n// purely-typed helpers over the vocabulary.\n//\n// `EvalIssue` is referenced by `PatchFn`, `TierCheck`, `LLMEvaluator`,\n// and `RuntimeRenderCheck` in the harness types hub.\n\n// ─── Priority ──────────────────────────────────────────────────────────────\n// P0 = must (compile + complete), P1 = should (safety), P2 = nice (quality).\n// Single source of truth for the retry-formatter ranking.\n\nexport type Priority = \"P0\" | \"P1\" | \"P2\";\n\nimport type { CanvasClass, DesignMode } from \"../design-mode.js\";\n\n// ─── Issue shape ───────────────────────────────────────────────────────────\n\nexport type EvalTier = 0 | 1 | 2;\nexport type EvalOutcome = \"fail\" | \"warn\" | \"pass\";\n\nexport type EvalCategory =\n | \"compile\"\n | \"security\"\n | \"contract\"\n | \"types\"\n | \"imports\"\n | \"tokens\" // tier 0\n | \"mode\" // tier 0 — per-mode deterministic\n | \"functionality\"\n | \"crash\" // tier 1\n | \"interactivity\"\n | \"accessibility\"\n | \"layout\"\n | \"loading\"\n | \"visual\"; // tier 2\n\nexport interface EvalIssue {\n tier: EvalTier;\n result: EvalOutcome;\n category: EvalCategory;\n /**\n * Priority tier — threaded through to the retry formatter so the LLM can\n * rank its next patch against the prompt's P0/P1/P2 priority schema.\n * Derived from (category, result) via {@link priorityForIssue} when not\n * explicitly set. Optional on construction; check-runners typically\n * populate it before returning.\n */\n priority?: Priority;\n subcategory?: string;\n severity?: \"critical\" | \"major\";\n description: string;\n fix: string;\n line?: number;\n}\n\n/**\n * Runtime-render probe execution status — three-valued so \"the probe\n * never ran\" is never conflated with \"the probe ran clean\".\n *\n * - `ran` — probe executed; its findings (possibly none) are\n * in the issue stream under `runtime:*` subcategories.\n * - `infra-skipped` — probe could NOT execute (environment failure:\n * happy-dom load, user-event document capture,\n * ESM/CJS interop). Carries ZERO probe evidence;\n * consumers MUST NOT count it as a pass.\n * - `not-applicable`— nothing to probe (no compiled code, no contract\n * surface, or no runtimeRender check configured).\n */\nexport type RuntimeProbeStatus = \"ran\" | \"infra-skipped\" | \"not-applicable\";\n\n/**\n * Probe execution meta stamped onto an `EvalResult` at the exit-decision\n * points that invoke the probe. Absence of this field means the eval\n * path never reached a probe invocation at all — consumers treat that\n * the same as not-run, never as a pass.\n */\nexport interface RuntimeProbeMeta {\n readonly status: RuntimeProbeStatus;\n /** Populated for `infra-skipped` / `not-applicable` — why the probe didn't run. */\n readonly reason?: string;\n}\n\n/**\n * Per-criterion execution status — three-valued so \"the criterion\n * silently produced no verdict\" is never conflated with \"the criterion\n * ran clean\", and neither is conflated with \"not evaluated by design\".\n * Same doctrine and vocabulary family as `RuntimeProbeStatus` above.\n *\n * - `ran` — the LLM call completed and returned a verdict\n * for this criterion; its findings (possibly\n * none) are in `issues`.\n * - `skipped` — the call errored or returned no tool call. The\n * criterion carries ZERO evidence; the evaluator\n * fail-opens it into `pass` to avoid blocking\n * generation on flaky LLM calls, so consumers\n * MUST consult this field before treating `pass`\n * membership as a verdict. Counts AGAINST\n * coverage.\n * - `not-applicable` — the evaluator was bypassed by design for this\n * cell (e.g. the same-image low-risk bypass:\n * axis checks clean, tier-1/2 never invoked).\n * `reason` names the bypass. Excluded from\n * coverage denominators — it is neither evidence\n * nor a silent absence.\n */\nexport type CriterionRunStatus = \"ran\" | \"skipped\" | \"not-applicable\";\n\n/** Coverage row for one evaluation criterion of one eval run. */\nexport interface CriterionCoverage {\n readonly criterion: string;\n readonly tier: 1 | 2;\n readonly status: CriterionRunStatus;\n /** Populated for `skipped` / `not-applicable` — why no verdict. */\n readonly reason?: string;\n}\n\n/**\n * The static criteria `runLLMEvaluation` runs, in stamp order — the\n * ONE list both the evaluator's coverage stamp and the harness's\n * bypass stamp derive from, so the two can never disagree on the set.\n * Tier 1 = binary pass/fail gates; tier 2 = fail/warn/pass quality.\n */\nexport const LLM_EVAL_STATIC_CRITERIA: ReadonlyArray<{ readonly criterion: string; readonly tier: 1 | 2 }> = [\n { criterion: \"functionality\", tier: 1 },\n { criterion: \"crash\", tier: 1 },\n { criterion: \"interactivity\", tier: 2 },\n { criterion: \"accessibility\", tier: 2 },\n { criterion: \"layout\", tier: 2 },\n { criterion: \"loading\", tier: 2 },\n { criterion: \"visual\", tier: 2 },\n];\n\n/**\n * Coverage rows for a cell where the evaluator was BYPASSED BY DESIGN\n * (never invoked) — one `not-applicable` row per static criterion, all\n * carrying `reason`. Harness exits that skip tier-1/2 evaluation stamp\n * this so the cell is neither a silent absence (field missing) nor\n * evidence. Same shape contract as `runLLMEvaluation`'s stamp: always\n * every criterion. Lives here (not in llm-evaluator) because the bypass\n * exit runs before the evaluator module is lazily loaded.\n */\nexport function notApplicableCoverage(reason: string): CriterionCoverage[] {\n return LLM_EVAL_STATIC_CRITERIA.map(({ criterion, tier }) => ({\n criterion,\n tier,\n status: \"not-applicable\",\n reason,\n }));\n}\n\nexport interface EvalResult {\n issues: EvalIssue[];\n pass: string[];\n /**\n * Per-criterion coverage for this eval run — one row per static\n * criterion, ALWAYS all of them when present. Stamped by\n * `runLLMEvaluation` (`ran` / `skipped`) and by the harness on\n * evaluator-bypass exits (`not-applicable` + reason). The harness\n * carries it unchanged through every later re-stamp of this result.\n * Absent = coverage UNKNOWN (paths that predate the instrument, e.g.\n * `parseEvalResponse` replays) — never assume `ran`, never assume\n * bypass.\n */\n criteriaCoverage?: CriterionCoverage[];\n /**\n * Runtime-render probe execution meta. Stamped by the exit-decision\n * probe runner; absent on eval paths that never invoke the probe.\n */\n runtimeProbe?: RuntimeProbeMeta;\n /**\n * Per-canvas visual verdicts. Stamped by the harness ONLY when the\n * visual leg ran with `visualEvaluation.canvases` set (arm-neutral —\n * the same judge in every design mode); absent on the single-shot\n * visual path and whenever the visual leg did not run. PNGs stay on\n * `runVisualEvaluation`'s own result (`VisualEvaluationResult.canvases[*].screenshotPng`),\n * never here — this object is serialized into reports.\n */\n visual?: VisualEvalSummary;\n}\n\n/** One canvas's visual verdict, PNG-free — see `EvalResult.visual`. */\nexport interface CanvasVisualSummary {\n canvas: CanvasClass;\n viewport: { width: number; height: number };\n /** The judge's weighted score at this canvas (0-100). */\n score: number;\n /** `score >= passThreshold`. */\n passed: boolean;\n}\n\n/** The visual leg's per-canvas summary — see `EvalResult.visual`. */\nexport interface VisualEvalSummary {\n /** Mean of the canvas scores (rounded). */\n score: number;\n /** Every canvas passed. */\n passed: boolean;\n canvases: CanvasVisualSummary[];\n}\n\n// ─── Quality mode ──────────────────────────────────────────────────────────\n\nexport type QualityMode = \"fast\" | \"auto-improve\" | \"high-quality\";\n\nexport interface QualityConfig {\n quality: QualityMode;\n visualEval: boolean;\n maxCostPerGeneration: number;\n model?: { provider?: string; model?: string };\n}\n\nexport const DEFAULT_QUALITY_CONFIG: QualityConfig = {\n quality: \"fast\",\n visualEval: false,\n maxCostPerGeneration: 3,\n};\n\n// ─── Axis-check types ──────────────────────────────────────────────────────\n// The `AxisCheck` type vocabulary lives here. The check bodies\n// themselves (REGISTRY, per-axis implementations) live under\n// `./axis-checks/`.\n\nimport type { DataContract } from \"@ggui-ai/protocol\";\nimport type { AxisVector, Classification } from \"../classifier/axes.js\";\nimport type { AxisKey } from \"../fragments/index.js\";\n\nexport interface AxisCheckInput {\n sourceCode: string;\n compiledCode: string | null;\n contract?: DataContract;\n originalPrompt: string;\n /** Full classification — checks may read sibling axes. */\n classification: Classification;\n /**\n * Which triad produced the source. Checks that assert a design-package\n * component (e.g. `layout.multi_step.stepper_adopted`) read it and\n * stand down in `free` mode, where the primitive is optional. Absent\n * means `constrained`.\n */\n designMode?: DesignMode;\n}\n\n/**\n * A gated check. Runs only when the classification's axis value matches\n * one of the gate's accepted values. Multiple gates (implicit AND) support\n * cross-axis combinations.\n */\nexport interface AxisCheck {\n /** Stable id used in issue subcategories. */\n id: string;\n /** Primary axis this check gates on. */\n axis: AxisKey;\n /** Which values of that axis activate the check. */\n values: readonly string[];\n /** Optional extra gate on a sibling axis (e.g., only when state=merge AND writes=per-item). */\n and?: { axis: AxisKey; values: readonly string[] };\n /** Execute the check and emit zero or more issues. */\n run(input: AxisCheckInput): EvalIssue[];\n}\n\n/**\n * Whether a check's gate(s) match the given axis vector. Pure function,\n * no issue emission.\n */\nexport function matches(vector: AxisVector, check: AxisCheck): boolean {\n const primary = vector[check.axis] as string;\n if (!check.values.includes(primary)) return false;\n if (check.and) {\n const sibling = vector[check.and.axis] as string;\n if (!check.and.values.includes(sibling)) return false;\n }\n return true;\n}\n\n// ─── Purely-typed helpers ──────────────────────────────────────────────────\n\n/**\n * Map a tier-0 issue category to the canonical P0/P1/P2 priority.\n *\n * Sourced from the criteria priority assignments:\n * - P0 (must): compile, security, imports, contract, types, mode\n * - P1 (safety): tokens, crash, functionality\n * - P2 (quality): interactivity, accessibility, layout, loading, visual\n */\nexport function priorityForIssue(category: EvalCategory): Priority {\n if (\n category === \"interactivity\" ||\n category === \"accessibility\" ||\n category === \"layout\" ||\n category === \"loading\" ||\n category === \"visual\"\n ) {\n return \"P2\";\n }\n if (category === \"tokens\" || category === \"crash\" || category === \"functionality\") {\n return \"P1\";\n }\n // compile, security, imports, contract, types, mode → P0.\n return \"P0\";\n}\n\n/** Whether any issue blocks shipping (has result = 'fail'). */\nexport function isBlocked(result: EvalResult): boolean {\n return result.issues.some((i) => i.result === \"fail\");\n}\n\n/**\n * Return the issues the agent should act on, depending on quality mode.\n * - fast: only fails (blocking issues)\n * - auto-improve / high-quality: fails + warns\n */\nexport function getActionableIssues(result: EvalResult, mode: QualityMode): EvalIssue[] {\n if (mode === \"fast\") {\n return result.issues.filter((i) => i.result === \"fail\");\n }\n return result.issues.filter((i) => i.result === \"fail\" || i.result === \"warn\");\n}\n\n// ─── Criteria (single source of truth for coding + eval sides) ─────────────\n//\n// Each criterion is defined ONCE with both sides of the contract:\n// - codingGuidance: what the coding agent should DO\n// - evalInstruction: what the eval agent should CHECK\n// They must be compatible — changing one means reviewing the other.\n//\n// This is *validated* shipping content: it's what the hosted runtime sends\n// to every generation today. External OSS implementers building their own\n// prompts should be able to use the same rubric — hence it's open.\n\nexport interface EvalCriterion {\n /** Unique identifier matching the eval tool name (e.g., 'functionality') */\n id: string;\n /** Human-readable name shown to both agents */\n name: string;\n /** Priority tier — P0 must, P1 should, P2 nice */\n priority: Priority;\n /** What the coding agent should DO to satisfy this criterion */\n codingGuidance: string;\n /** What the eval agent should CHECK — the evaluation prompt */\n evalInstruction: string;\n /** Tier 0 = programmatic, Tier 1 = LLM critical, Tier 2 = LLM quality */\n tier: 0 | 1 | 2;\n /** Eval outcome when this criterion fails */\n failOutcome: \"fail\" | \"warn\";\n}\n\nexport const CRITERIA: readonly EvalCriterion[] = [\n // ── P0: Correctness (must satisfy — failure = broken component) ──\n\n {\n id: \"compile\",\n name: \"Compile & type-check\",\n priority: \"P0\",\n tier: 0,\n failOutcome: \"fail\",\n codingGuidance:\n \"Code must compile. The typed Props and wire hook generics are enforced by the compiler.\",\n evalInstruction: \"Checked automatically by esbuild + TypeScript. No LLM evaluation needed.\",\n },\n {\n id: \"render-props\",\n name: \"Render all Props fields\",\n priority: \"P0\",\n tier: 0,\n failOutcome: \"warn\",\n codingGuidance: \"Render every Props field in JSX. Access via props.fieldName.\",\n evalInstruction:\n \"Check that every field from interface Props appears as props.fieldName in the function body.\",\n },\n {\n id: \"wire-hooks\",\n name: \"Wire all contract hooks\",\n priority: \"P0\",\n tier: 0,\n failOutcome: \"warn\",\n codingGuidance:\n \"Wire every useAction/useStream and every clientCapabilities.gadgets hook (e.g., useGeolocation) to a UI element. `agentCapabilities.tools` is a catalog the AGENT invokes — NOT a component hook surface.\",\n evalInstruction:\n \"Check that every hook variable from the boilerplate appears in the JSX or an effect.\",\n },\n {\n id: \"imports\",\n name: \"Valid imports only\",\n priority: \"P0\",\n tier: 0,\n failOutcome: \"fail\",\n codingGuidance: \"Only import from react, @ggui-ai/design/*, and @ggui-ai/wire.\",\n evalInstruction: \"Flag any import from a package not in the allowlist.\",\n },\n {\n id: \"security\",\n name: \"No eval/fetch/window\",\n priority: \"P0\",\n tier: 0,\n failOutcome: \"fail\",\n codingGuidance: \"Never use eval(), fetch(), or window. Data comes from props and hooks.\",\n evalInstruction: \"Flag any call to eval(), fetch(), or window access.\",\n },\n\n // ── P1: Safety (should satisfy — failure = crash or bad UX) ──\n\n {\n id: \"functionality\",\n name: \"All features implemented\",\n priority: \"P1\",\n tier: 1,\n failOutcome: \"fail\",\n codingGuidance: \"Implement ALL features from the request AND the data contract.\",\n evalInstruction: `Evaluate FUNCTIONALITY: Does this component implement ALL features from the request AND the data contract?\n\nCheck against BOTH sources:\n1. Original request — each feature must be coded AND rendered in JSX\n2. Data contract (if present) — verify:\n - Props fields are rendered in the UI. EXCEPTION: pure identifier fields (\\`id\\`, \\`*Id\\`, keys) that exist only to be echoed back inside an action payload do NOT need to be visibly rendered.\n - ALL useAction hooks are wired to clickable UI elements\n - ALL useStream hooks are consumed — the streamed data must reach the UI. Merging stream events into rendered state (a list, a counter, the displayed records) COUNTS as consuming the stream; it need not be a literal \\`.latest\\` render.\n - ALL clientCapabilities gadgets are used. \\`clientCapabilities.gadgets\\` is keyed by npm package: built-in browser capabilities (useGeolocation / useCamera / …) import from @ggui-ai/gadgets; registered third-party gadgets (e.g. useChartTheme) import from their OWN package. Any gadget the contract declares IS a contract feature — NEVER flag it as \"not part of the contract\".\n - \\`agentCapabilities.tools\\` is a catalog declaration only; do NOT flag missing component-side calls for it\n\nA contract hook that is declared but never used at all is a MISSING feature.\n\nCRITICAL: The \"issues\" array must ONLY contain features you are CERTAIN are missing or broken — never an implemented feature. (See \"Issue-array discipline\" above: no speculative, self-negating, or \"verify that…\" entries.)`,\n },\n {\n id: \"crash\",\n name: \"No crash scenarios\",\n priority: \"P1\",\n tier: 1,\n failOutcome: \"fail\",\n codingGuidance:\n \"Guard optional props (props.field?.x). stream.latest is T|null — always null-guard. .all is always an array.\",\n evalInstruction: `Evaluate CRASH SAFETY: Are there ACTUAL runtime crash scenarios?\n\nWILL crash (include in issues):\n- .map()/.filter()/.length on an uninitialized variable\n- Accessing property of undefined without guard\n- useStream().latest.field WITHOUT null guard — .latest is T | null\n- Optional Props field accessed as props.field.x without guard\n- Array item optional field: items.map(item => item.priority.toUpperCase()) when priority is optional\n\nSAFE (do NOT include):\n- Optional chaining: props.items?.map() — SAFE\n- Fallback: items || [] — SAFE\n- useState initializer: useState([]) — SAFE\n- Null check: items && items.map() — SAFE\n- stream.latest && stream.latest.field — SAFE, guarded\n- stream.all.map(...) — SAFE, .all is always an array\n- stream.all.length — SAFE, always a number\n\nThe \"issues\" array is ONLY for a specific line that WILL throw at runtime. NEVER put a line you have determined is safe into the issues array — not even to note that it is safe (\"…so this is safely guarded\", \"…so there is no crash\"). If you cannot name a concrete line that will throw, the answer is {\"pass\": true} — return that and an empty issues array.`,\n },\n {\n id: \"tokens\",\n name: \"Design system tokens\",\n priority: \"P1\",\n tier: 0,\n failOutcome: \"warn\",\n codingGuidance:\n \"Use CSS variables for colors (var(--ggui-color-*)); use the spacing scale for gap/padding/margin (gap=\\\"md\\\", padding=\\\"lg\\\").\",\n evalInstruction:\n \"Flag hardcoded hex colors, rgba/hsl functions, and numeric or raw-CSS-length spacing props. A t-shirt-scale spacing name (gap=\\\"md\\\") IS a token — never flag it.\",\n },\n\n // ── P2: Quality (nice to have — failure = lower score, not broken) ──\n\n {\n id: \"interactivity\",\n name: \"Sufficient interactive elements\",\n priority: \"P2\",\n tier: 2,\n failOutcome: \"warn\",\n codingGuidance: \"Add appropriate interactive elements for the component purpose.\",\n evalInstruction: `Evaluate INTERACTIVITY: Does this component have sufficient interactive elements?\n\nConsider: forms need submit buttons, lists need selection, editable content needs save/cancel.\nContract actions (if present): every useAction hook should be triggered by a visible UI element.\n\nOnly list MISSING interactive elements. Use 'fail' only for issues blocking core purpose.`,\n },\n {\n id: \"accessibility\",\n name: \"Accessible markup\",\n priority: \"P2\",\n tier: 2,\n failOutcome: \"warn\",\n codingGuidance:\n \"Add labels on form inputs, alt text on images, semantic HTML, and state ARIA (aria-checked/pressed/selected/expanded) on hand-rolled interactive controls.\",\n evalInstruction: `Evaluate ACCESSIBILITY: missing labels, alt text, semantic HTML, keyboard support, ARIA state.\n\nggui primitives bake in their own ARIA — see \"Primitive Accessibility\" in the Design System context above. NEVER flag a ggui primitive (Input/Select/TextArea, RadioGroup, Checkbox, Toggle, Progress, Slider, Spinner, Skeleton, Tabs, Accordion, Alert, Toast, Tooltip, Clickable, Icon) for a missing role / aria-* / label / keyboard handler — it is already there and not visible in the source you are reading.\n\nFlag ONLY real gaps: a raw div/span used as an interactive control; a hand-rolled control whose checked/selected/expanded/pressed state is conveyed only by styling (strikethrough, color, a check icon) with no \\`aria-checked\\` / \\`aria-pressed\\` / \\`aria-selected\\` / \\`aria-expanded\\`; an image with no alt text; an Input/Select/TextArea with no \\`label\\` prop; an icon-only Button with no aria-label; live/streaming data not wrapped in an aria-live region; inverted heading hierarchy.\n\nOnly list MISSING accessibility features. Use 'fail' only if it blocks delivery.`,\n },\n {\n id: \"layout\",\n name: \"Clean layout\",\n priority: \"P2\",\n tier: 2,\n failOutcome: \"warn\",\n codingGuidance: \"Use proper spacing and visual grouping.\",\n evalInstruction: `Evaluate LAYOUT: Check spacing, alignment, visual grouping, and composition.\n\nOnly list ACTUAL layout problems. Use 'fail' only for fundamentally broken layouts.`,\n },\n {\n id: \"loading\",\n name: \"Loading/empty/error states\",\n priority: \"P2\",\n tier: 2,\n failOutcome: \"warn\",\n codingGuidance: \"Handle async data, empty collections, and error cases.\",\n evalInstruction: `Evaluate LOADING/EMPTY/ERROR STATES: Does the component handle async data and edge cases?\n\nContract-specific: useStream should handle pre-data state. clientCapabilities hooks may return undefined / permission-denied — defensive guards expected before threading values into JSX.\nProps-only components (no async, no streams, no client capabilities) do NOT need loading states — return pass.\n\nOnly list MISSING states.`,\n },\n {\n id: \"visual\",\n name: \"Design system consistency\",\n priority: \"P2\",\n tier: 2,\n failOutcome: \"warn\",\n codingGuidance: \"Use design system tokens consistently.\",\n evalInstruction: `Evaluate VISUAL CONSISTENCY: Is the component using the design system correctly?\n\nFlag: hardcoded colors instead of CSS variables, numeric or raw-CSS-length spacing instead of the t-shirt scale, style objects bypassing design system.\nA t-shirt-scale spacing name (gap=\"md\", padding=\"lg\") IS correct token usage — never flag it.\nIntentional custom colors (status indicators) are acceptable when no semantic token fits.\n\nOnly list ACTUAL violations. Use 'fail' only for pervasive violations.`,\n },\n] as const;\n\n/**\n * `designMode: 'free'` overrides — ONLY the two criteria whose text\n * encodes the design vocabulary. `tokens` narrows to COLOR (the free arm\n * relaxes spacing / typography / radius / shadow to literals but keeps\n * brand-bearing color on the closed `--ggui-color-*` manifest, no\n * fallbacks); `visual` becomes arm-neutral (composition, hierarchy,\n * consistency, fit to canvas — no reward or penalty for design-system\n * usage). Every other criterion is shared verbatim between the modes.\n * Constraint alignment: what the free prompt says, the free evaluator\n * checks — and nothing more.\n */\nconst FREE_DESIGN_CRITERIA_OVERRIDES: readonly EvalCriterion[] = [\n {\n id: \"tokens\",\n name: \"Color tokens\",\n priority: \"P1\",\n tier: 0,\n failOutcome: \"warn\",\n codingGuidance:\n \"Every color is a bare var(--ggui-color-*) from the token manifest — no hex, rgb()/hsl(), CSS named colors or literal fallbacks, in style props and <style> blocks alike. Spacing, typography, radius and shadow geometry may be literals.\",\n evalInstruction:\n \"Flag hardcoded hex colors, rgba/hsl functions, CSS named colors, and literal fallbacks inside var(--ggui-*) references. Do NOT flag literal spacing, font sizes, radii or pixel values — they are allowed in this mode.\",\n },\n {\n id: \"visual\",\n name: \"Visual composition\",\n priority: \"P2\",\n tier: 2,\n failOutcome: \"warn\",\n codingGuidance:\n \"Compose deliberately: one clear focal point, consistent spacing rhythm, a coherent theme-token palette, a fit to the rendering canvas.\",\n evalInstruction: `Evaluate VISUAL COMPOSITION: Is the component composed deliberately for its canvas?\n\nJudge: visual hierarchy (one clear focal point, headings distinct from body text), consistent spacing rhythm and alignment, a coherent palette drawn from the theme tokens, fit to the canvas (fluid width, no fixed widths, nothing cramped or stretched).\nDo NOT reward or penalise the use of design-system primitives — raw HTML with inline CSS is a first-class choice here. Literal spacing / typography / radius values are fine.\n\nOnly list ACTUAL composition problems. Use 'fail' only for a fundamentally incoherent composition.`,\n },\n];\n\n/**\n * The criteria registry for a design mode. `constrained` IS `CRITERIA`\n * (same array, byte-identical summary); `free` swaps in the two\n * overrides above by id, preserving order.\n */\nexport function criteriaFor(designMode: DesignMode = \"constrained\"): readonly EvalCriterion[] {\n if (designMode === \"constrained\") return CRITERIA;\n return CRITERIA.map(\n (c) => FREE_DESIGN_CRITERIA_OVERRIDES.find((o) => o.id === c.id) ?? c,\n );\n}\n\n/** Get all criteria for a specific priority level */\nexport function getCriteriaByPriority(\n priority: Priority,\n designMode: DesignMode = \"constrained\",\n): EvalCriterion[] {\n return criteriaFor(designMode).filter((c) => c.priority === priority);\n}\n\n/** Get a specific criterion by ID */\nexport function getCriterionById(\n id: string,\n designMode: DesignMode = \"constrained\",\n): EvalCriterion | undefined {\n return criteriaFor(designMode).find((c) => c.id === id);\n}\n\n/** Get all LLM-evaluated criteria (tier 1 + 2) */\nexport function getLLMCriteria(designMode: DesignMode = \"constrained\"): EvalCriterion[] {\n return criteriaFor(designMode).filter((c) => c.tier > 0);\n}\n\n/**\n * Build the coding agent's criteria summary from the single source of truth.\n * Grouped by priority for the P0→P1→P2 hierarchy.\n */\nexport function buildCodingCriteriaSummary(designMode: DesignMode = \"constrained\"): string {\n const lines: string[] = [\"## Priority (P0 first, then P1, then P2)\", \"\"];\n\n for (const priority of [\"P0\", \"P1\", \"P2\"] as Priority[]) {\n const label =\n priority === \"P0\"\n ? \"Must (compile + complete)\"\n : priority === \"P1\"\n ? \"Should (safety)\"\n : \"Nice (quality)\";\n const criteria = getCriteriaByPriority(priority, designMode);\n lines.push(`**${priority} — ${label}:**`);\n for (const c of criteria) {\n lines.push(`- ${c.codingGuidance}`);\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n","// packages/ui-gen/src/adapters/claude/client.ts\n//\n// SINGLE SOURCE OF TRUTH for Anthropic SDK construction.\n//\n// The BYOK resolver writes the raw credential string into\n// `process.env.ANTHROPIC_API_KEY`, which the Anthropic SDK auto-reads as\n// `x-api-key`. Adapters MUST go through `createAnthropicClient` (no\n// inline `new Anthropic(...)`) so future header / baseURL tweaks land\n// in one place.\n\nimport Anthropic from '@anthropic-ai/sdk';\n\n/**\n * Construct an Anthropic SDK client from a raw API key string.\n *\n * - `string` → standard `apiKey` path (sends `x-api-key`).\n * - `undefined` → still construct a client; SDK auto-reads\n * `process.env.ANTHROPIC_API_KEY` or throws on first call.\n *\n * **SINGLE SOURCE OF TRUTH for Anthropic client construction.** Every\n * adapter that constructs an Anthropic client MUST go through this\n * helper — no inline `new Anthropic(...)` allowed in adapter code.\n */\nexport function createAnthropicClient(\n rawKey: string | undefined,\n): Anthropic {\n if (rawKey === undefined) {\n return new Anthropic({\n baseURL: 'https://api.anthropic.com',\n });\n }\n return new Anthropic({\n apiKey: rawKey,\n baseURL: 'https://api.anthropic.com',\n });\n}\n","// packages/ui-gen/src/adapters/provider-router.ts\n//\n// Provider router for multi-provider BYOK support. Determines how to\n// route LLM requests based on the typed `LlmRoute` discriminator and\n// API-key availability.\n//\n// The previous `getUpstreamModelId` strip + `UPSTREAM_MAP` are gone:\n// the typed `LlmRoute` (slice #43) guarantees `route.model` is\n// wire-canonical at construction time, so there is no LiteLLM prefix\n// to strip at this boundary. `getBedrockModelId` stays — the\n// \"anthropic route + bedrock IAM\" mixed-mode escape hatch (a hosted deployment's\n// legacy) still needs the wire-canonical anthropic id → cross-region\n// profile id upcast.\n\nimport type { LlmRoute } from '@ggui-ai/protocol';\n\n/**\n * Map a wire-canonical Anthropic model id (or already-bedrock id) to\n * the AWS Bedrock cross-region inference profile id. Used by the\n * mixed-mode `anthropic` route + bedrock-IAM fallback path in\n * {@link resolveRoute} (a hosted deployment's legacy) and the analogous branch in\n * `harness/llm-router.ts::AnthropicAgent.resolveModel`.\n *\n * Operators picking the bedrock route explicitly (slice #43 Phase 4)\n * pass the cross-region id directly — this helper is purely the\n * fallback escape hatch.\n */\nexport function getBedrockModelId(model: string): string {\n const BEDROCK_MAP: Record<string, string> = {\n 'anthropic/claude-haiku-4-5': 'us.anthropic.claude-haiku-4-5-20251001-v1:0',\n 'anthropic/claude-sonnet-4-6': 'us.anthropic.claude-sonnet-4-6',\n 'anthropic/claude-opus-4-6': 'us.anthropic.claude-opus-4-6-v1:0',\n // Claude 5-family (ggui#706, strings verified 2026-09-02 against\n // platform.claude.com; Bedrock base form `anthropic.<id>`, upcast to\n // the cross-region profile). Explicit so the ids are pinned by test,\n // not merely reachable through the generic fallback below.\n 'anthropic/claude-fable-5-1': 'us.anthropic.claude-fable-5-1',\n 'anthropic/claude-opus-5': 'us.anthropic.claude-opus-5',\n 'anthropic/claude-sonnet-5': 'us.anthropic.claude-sonnet-5',\n // Legacy (still available; registry state `legacy`, not deprecated).\n 'anthropic/claude-fable-5': 'us.anthropic.claude-fable-5',\n };\n // Normalize the Bedrock dot-form opt-in (e.g. `anthropic.claude-haiku-4-5`,\n // produced when a route resolver strips a `bedrock/` opt-in\n // prefix) to the Anthropic slash form. Both spellings should resolve to\n // the same cross-region inference profile id — without this, the dot\n // form would skip the BEDROCK_MAP hit, fall through the `^anthropic\\/`\n // strip (which is a no-op for the dot form), and re-prepend\n // `us.anthropic.` to produce a double-`anthropic.` id that Bedrock\n // rejects with 400 (regression seen live on 2026-05-25).\n const normalized = model.replace(/^anthropic\\./, 'anthropic/');\n if (BEDROCK_MAP[normalized]) return BEDROCK_MAP[normalized];\n if (normalized.startsWith('us.anthropic.') || normalized.startsWith('arn:')) {\n return normalized;\n }\n const stripped = normalized.replace(/^anthropic\\//, '');\n return `us.anthropic.${stripped}`;\n}\n\nexport interface RoutingDecision {\n /**\n * Upstream model id the dispatch adapter will pass to the provider\n * SDK. For most routes this is `route.model` verbatim — the typed\n * `LlmRoute` (slice #43) carries the wire-canonical id, so no\n * transformation is needed. The exception is the mixed-mode\n * \"anthropic route + bedrock IAM fallback\" branch, which upcasts\n * the wire-canonical Anthropic id to the corresponding Bedrock\n * cross-region inference profile id via {@link getBedrockModelId}.\n */\n readonly model: string;\n /**\n * Env-var mutations the caller MUST apply to `process.env` before\n * invoking the dispatch adapter. `undefined` values are deletions\n * (the wrong provider's stale key must be cleared so the dispatch\n * doesn't accidentally fire against it). See {@link applyRouteToEnv}.\n */\n readonly env: Record<string, string | undefined>;\n}\n\nexport interface RoutingInput {\n /** Typed `(provider, model)` route — model is wire-canonical. */\n readonly route: LlmRoute;\n /** API key for byok-capable providers; ignored for `bedrock`. */\n readonly apiKey?: string;\n /** Current env snapshot — feeds the anthropic mixed-mode branch. */\n readonly env: Record<string, string | undefined>;\n}\n\n/**\n * Sibling-provider env vars that MUST be cleared for every non-self\n * route. Centralized so the per-provider branches below stay\n * symmetric — a single missing entry would let a stale key leak into\n * the next render (e.g. an OpenRouter route inheriting a previous\n * call's `OPENAI_API_KEY` and firing the wrong adapter).\n */\nconst SIBLING_ENV_KEYS = [\n 'ANTHROPIC_API_KEY',\n 'ANTHROPIC_BASE_URL',\n 'CLAUDE_CODE_USE_BEDROCK',\n 'OPENAI_API_KEY',\n 'GEMINI_API_KEY',\n 'GOOGLE_API_KEY',\n 'OPENROUTER_API_KEY',\n] as const;\n\nfunction clearSiblings(\n keep: ReadonlySet<(typeof SIBLING_ENV_KEYS)[number]>,\n): Record<string, undefined> {\n const out: Record<string, undefined> = {};\n for (const k of SIBLING_ENV_KEYS) {\n if (!keep.has(k)) out[k] = undefined;\n }\n return out;\n}\n\n/**\n * Determine the routing strategy for a generation request. Pure\n * function over `(route, apiKey, env)` — returns the upstream model\n * id (usually `route.model` verbatim) and the env-var mutations the\n * caller must apply before dispatch.\n *\n * Dispatch is on `route.provider`:\n *\n * - `openai` — direct OpenAI API (sets `OPENAI_API_KEY`).\n * - `google` — direct Gemini API (sets `GEMINI_API_KEY` + `GOOGLE_API_KEY`).\n * - `openrouter` — direct OpenRouter API (sets `OPENROUTER_API_KEY`).\n * - `bedrock` — AWS Bedrock via host IAM (sets `CLAUDE_CODE_USE_BEDROCK=1`,\n * no API key in flight; model passes verbatim).\n * - `anthropic` — three-way fallback chain:\n * 1. With `apiKey` → direct Anthropic API.\n * 2. Without `apiKey` AND explicit `env.CLAUDE_CODE_USE_BEDROCK === '1'`\n * (or no `env.ANTHROPIC_API_KEY`) → mixed-mode bedrock fallback\n * (model upcast to cross-region profile via `getBedrockModelId`).\n * A hosted deployment's legacy escape hatch; the Phase 4 strict-fail\n * prevents end-users from reaching this branch implicitly.\n * 3. Otherwise → direct Anthropic API with whatever\n * `ANTHROPIC_API_KEY` is already in `env`.\n *\n * For non-Anthropic non-Bedrock providers, an `apiKey` is REQUIRED —\n * there's no IAM-style fallback. Callers that don't have a key MUST\n * surface a \"no API key\" envelope to their agent before reaching the\n * dispatch path; throwing here is defense in depth.\n */\nexport function resolveRoute(input: RoutingInput): RoutingDecision {\n const { route, apiKey, env } = input;\n\n switch (route.provider) {\n case 'openai': {\n if (!apiKey) {\n throw new Error(\n `openai:${route.model} requires an API key. ` +\n `Set 'apiKey' on the RoutingInput (BYOK) or supply your key ` +\n `via your dispatch layer.`,\n );\n }\n return {\n model: route.model,\n env: {\n OPENAI_API_KEY: apiKey,\n ...clearSiblings(new Set(['OPENAI_API_KEY'])),\n },\n };\n }\n\n case 'google': {\n if (!apiKey) {\n throw new Error(\n `google:${route.model} requires an API key. ` +\n `Set 'apiKey' on the RoutingInput (BYOK) or supply your key ` +\n `via your dispatch layer.`,\n );\n }\n return {\n model: route.model,\n env: {\n // `harness/llm-router.ts`'s GoogleAgent reads `GEMINI_API_KEY\n // || GOOGLE_API_KEY`. Set both so either slot wins;\n // unsetting one would leave a stale value behind.\n GEMINI_API_KEY: apiKey,\n GOOGLE_API_KEY: apiKey,\n ...clearSiblings(new Set(['GEMINI_API_KEY', 'GOOGLE_API_KEY'])),\n },\n };\n }\n\n case 'openrouter': {\n if (!apiKey) {\n throw new Error(\n `openrouter:${route.model} requires an API key. ` +\n `Set 'apiKey' on the RoutingInput (BYOK) or supply your key ` +\n `via your dispatch layer.`,\n );\n }\n return {\n model: route.model,\n env: {\n OPENROUTER_API_KEY: apiKey,\n ...clearSiblings(new Set(['OPENROUTER_API_KEY'])),\n },\n };\n }\n\n case 'bedrock': {\n // IAM auth — no apiKey in flight. The model is already a\n // cross-region profile id (e.g.\n // `us.anthropic.claude-haiku-4-5-20251001-v1:0`); pass it\n // verbatim.\n return {\n model: route.model,\n env: {\n CLAUDE_CODE_USE_BEDROCK: '1',\n ...clearSiblings(new Set(['CLAUDE_CODE_USE_BEDROCK'])),\n },\n };\n }\n\n case 'anthropic': {\n if (apiKey) {\n return {\n model: route.model,\n env: {\n ANTHROPIC_API_KEY: apiKey,\n ...clearSiblings(new Set(['ANTHROPIC_API_KEY'])),\n },\n };\n }\n // Mixed-mode legacy: anthropic route + bedrock IAM fallback.\n // Escape hatch for a production deployment that authenticates via Bedrock\n // IAM and never sets `ANTHROPIC_API_KEY`.\n const explicitBedrock = env.CLAUDE_CODE_USE_BEDROCK === '1';\n const noApiKey = !env.ANTHROPIC_API_KEY;\n if (explicitBedrock || noApiKey) {\n return {\n model: getBedrockModelId(route.model),\n env: {\n CLAUDE_CODE_USE_BEDROCK: '1',\n ...clearSiblings(new Set(['CLAUDE_CODE_USE_BEDROCK'])),\n },\n };\n }\n // Anthropic via process.env.ANTHROPIC_API_KEY (no in-call key).\n return {\n model: route.model,\n env: clearSiblings(new Set(['ANTHROPIC_API_KEY'])),\n };\n }\n }\n}\n\n/**\n * Apply routing decision to an environment object.\n */\nexport function applyRouteToEnv(\n baseEnv: Record<string, string>,\n route: RoutingDecision,\n): Record<string, string> {\n const result = { ...baseEnv };\n for (const [key, value] of Object.entries(route.env)) {\n if (value === undefined) {\n delete result[key];\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n","// packages/ui-gen/src/adapters/tool-bridge.ts\n//\n// Bridges between SDK tool wire formats and ggui's JSON types:\n// Zod → JSON Schema for tool declarations, and validated narrowing of\n// decoded tool-call arguments to `JsonObject`.\n\nimport { z } from 'zod';\nimport type { JsonObject, JsonValue } from '@ggui-ai/protocol';\n\n/**\n * Convert a Zod object schema to JSON Schema.\n * Uses Zod v4's built-in toJSONSchema() function.\n */\nexport function zodToJsonSchema(schema: z.ZodType): JsonObject {\n return z.toJSONSchema(schema) as JsonObject;\n}\n\n/**\n * Validate that a decoded tool-call `arguments` object is plain JSON data\n * and narrow it to {@link JsonObject}. Provider SDKs type tool-call\n * arguments as `{ [key: string]: unknown }`; values decoded from a JSON\n * wire payload are JSON by construction, so a failure here means the SDK\n * handed us something that never came from JSON — a bug worth surfacing,\n * not erasing with a cast.\n */\nexport function toolArgsToJsonObject(args: { [key: string]: unknown }): JsonObject {\n const out: JsonObject = {};\n for (const [key, value] of Object.entries(args)) {\n // `JsonObject` keys admit `undefined` (TS optional properties);\n // JSON.stringify omits them, so pass-through is JSON-safe.\n out[key] = value === undefined ? undefined : toJsonValue(value, key);\n }\n return out;\n}\n\nfunction toJsonValue(value: unknown, path: string): JsonValue {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((item, i) => toJsonValue(item, `${path}[${i}]`));\n }\n if (typeof value === 'object') {\n const out: JsonObject = {};\n for (const [key, entry] of Object.entries(value)) {\n out[key] = entry === undefined ? undefined : toJsonValue(entry, `${path}.${key}`);\n }\n return out;\n }\n throw new Error(\n `Tool-call arguments contain a non-JSON value at '${path}' (${typeof value})`,\n );\n}\n","/**\n * Live LLM trace sink — devtools introspection of every LLM call the\n * generation harness makes.\n *\n * **Distinct from {@link TelemetrySink} and {@link AuditSink}.**\n * - **Telemetry** (mcp-server-core) = ops signals (`pair.completed`,\n * `render.duration_ms`). Sink may be lossy and drops on backpressure.\n * Attributes are flat scalars (`string | number | boolean`).\n * - **Audit** (mcp-server-core) = compliance log of privileged\n * mutations. Durable, async, may throw.\n * - **LLM trace** (this) = devtools-only, hostable in-memory ring\n * buffer of every LLM call's full payload (system prompt, user\n * prompt, tool defs, completion, token counts, cache hits, error).\n * Lossy by default. A hosted closed runtime may swap in a durable\n * sink for internal debugging; OSS ships an in-memory sink the\n * `/devtools/llm-trace` page reads.\n *\n * **Why module-level registry instead of constructor injection.** The\n * harness constructs LLM agents on every generation via\n * {@link createAgent}. Threading a sink through every call site\n * (createAgent → run-coding-turn → llm-evaluator → file-agent → …)\n * touches ~5 packages for a devtools-only surface. The OSS ggui server\n * is a single process per CLI invocation — global state has no\n * confusion-cost there. A hosted deployment isolates per request via a\n * process pool, so a global per-pool is also safe. If we ever serve\n * several apps inside one process we'll thread it then.\n *\n * **Default = no sink.** When unset, the router emits nothing and\n * spends no CPU formatting events. Passing `null` removes a previously\n * registered sink.\n */\nimport type { LLMToolDef } from '../llm.js';\n\n/** Provider tag that produced the call. Mirrors {@link AgentConfig.provider}. */\nexport type LlmTraceProvider = 'anthropic' | 'openai' | 'google' | 'openrouter';\n\n/** Which `LLMAgent` method initiated the call. */\nexport type LlmTraceKind =\n | 'callText'\n | 'callTools'\n | 'callWithTools'\n | 'callStructured'\n | 'callVision';\n\n/**\n * One LLM call. Emitted **after** the call completes (success or error)\n * — single event, not start/end split. Devtools UI is timeline-friendly\n * because each event carries `at` (start) + `endedAt` (end).\n */\nexport interface LlmTraceEvent {\n /** Random per-event ID. */\n readonly id: string;\n /** Epoch ms when the call was issued. */\n readonly at: number;\n /** Epoch ms when the call completed (success or error). */\n readonly endedAt: number;\n /** `endedAt - at` — convenience. */\n readonly durationMs: number;\n readonly provider: LlmTraceProvider;\n readonly model: string;\n readonly kind: LlmTraceKind;\n readonly systemPrompt?: string;\n readonly userPrompt?: string;\n /**\n * Tool defs sent on the call (if any). Stripped to `name + description`\n * — full JSON schema would balloon the trace and is rarely useful in\n * the operator UI.\n */\n readonly tools?: ReadonlyArray<{\n readonly name: string;\n readonly description: string;\n }>;\n /** Set on successful completion. */\n readonly result?: {\n readonly inputTokens: number;\n readonly outputTokens: number;\n /** Anthropic only. Bytes counted toward the cache write. */\n readonly cacheCreated?: number;\n /** Anthropic only. Bytes served from cache (90% discounted). */\n readonly cacheRead?: number;\n /** Set when the call returned text content. */\n readonly text?: string;\n /** Set when the call returned tool_use blocks. */\n readonly toolCalls?: ReadonlyArray<{\n readonly name: string;\n readonly input: unknown;\n }>;\n /** Set for `callWithTools` — number of agentic turns consumed. */\n readonly turnsUsed?: number;\n };\n /** Set on failure. `result` is undefined. */\n readonly error?: { readonly message: string };\n}\n\n/**\n * Sink that receives one event per LLM call. Implementations MUST be\n * sync + non-throwing — the harness fires events on the hot path and\n * cannot tolerate backpressure or rejected promises. Buffer + drop or\n * fan out to a queue inside the implementation.\n */\nexport interface LlmTraceSink {\n emit(event: LlmTraceEvent): void;\n}\n\nlet activeSink: LlmTraceSink | null = null;\n\n/**\n * Register the active sink. Pass `null` to remove. Subsequent\n * {@link emitLlmTraceEvent} calls dispatch to this sink.\n */\nexport function setLlmTraceSink(sink: LlmTraceSink | null): void {\n activeSink = sink;\n}\n\n/** Read the active sink. Mostly for tests. */\nexport function getLlmTraceSink(): LlmTraceSink | null {\n return activeSink;\n}\n\n/**\n * Internal — used by `LLMAgent` adapters. No-op when no sink is\n * registered. Swallows sink-thrown errors (a broken devtools sink must\n * not break generation).\n */\nexport function emitLlmTraceEvent(event: LlmTraceEvent): void {\n const sink = activeSink;\n if (!sink) return;\n try {\n sink.emit(event);\n } catch {\n // Devtools sink is allowed to be buggy — generation must not die.\n }\n}\n\n/** Strip `LLMToolDef[]` to the trace-friendly subset. */\nexport function summarizeTools(\n tools: ReadonlyArray<LLMToolDef>,\n): ReadonlyArray<{ readonly name: string; readonly description: string }> {\n return tools.map((t) => ({ name: t.name, description: t.description }));\n}\n\n/**\n * Crockford-style random ID. Crypto.randomUUID() would do, but we want\n * to keep this dep-free for non-Node runtimes the harness might run in.\n */\nexport function newLlmTraceId(): string {\n return (\n Date.now().toString(36) +\n Math.random().toString(36).slice(2, 10)\n );\n}\n","// packages/ui-gen/src/harness/llm-router.ts\n//\n// Provider-agnostic LLM routing via LLMAgent class hierarchy.\n// Each provider implements its own SDK interface with proper types.\n//\n// Key methods:\n// callText() — plain text response\n// callStructured() — JSON structured output (for coding agent)\n// callWithTools() — multi-turn agentic loop\n\nimport type Anthropic from '@anthropic-ai/sdk';\nimport type {\n ImageBlockParam,\n TextBlock,\n TextBlockParam,\n ToolUseBlock,\n} from '@anthropic-ai/sdk/resources/messages';\nimport type OpenAI from 'openai';\nimport type {\n Response as OpenAIResponse,\n ResponseFunctionToolCall,\n} from 'openai/resources/responses/responses';\nimport type {\n GoogleGenAI,\n Interactions,\n} from '@google/genai';\nimport type { JsonObject } from '@ggui-ai/protocol';\nimport type { LLMToolDef } from '../llm.js';\nimport type { AnthropicBedrock } from '@anthropic-ai/bedrock-sdk';\nimport { createAnthropicClient } from '../adapters/claude/client.js';\nimport { getBedrockModelId } from '../adapters/provider-router.js';\nimport { toolArgsToJsonObject } from '../adapters/tool-bridge.js';\nimport {\n emitLlmTraceEvent,\n newLlmTraceId,\n summarizeTools,\n} from './llm-trace-sink.js';\n\n// `LLMToolDef` lives in `@ggui-ai/ui-gen/llm`. This file re-exports it\n// so `../harness/llm-router.js` importers (evaluator.ts,\n// llm-evaluator.ts, run-coding-turn.ts) can reach it here.\nexport type { LLMToolDef };\n\n// =============================================================================\n// Shared Types\n// =============================================================================\n\nexport interface AgentConfig {\n provider: 'anthropic' | 'openai' | 'google' | 'openrouter';\n model: string;\n /**\n * Sampling temperature. When defined it is threaded into the provider\n * request; when undefined the provider default is used (unchanged\n * behavior for all existing callers).\n *\n * Capability is the ROUTER's: Anthropic Opus 4.7+ and the 5-family\n * (`claude-opus-4-7*`, `claude-fable-5*`, `claude-opus-5*`,\n * `claude-sonnet-5*`, incl. Bedrock ids) return HTTP 400 on a\n * non-default `temperature`/`top_p`/`top_k`, so the Anthropic adapter\n * STRIPS the value for those ids (one log line naming model + param)\n * and reports the effective sampling on `LLMResponse.sampling`. Callers\n * keep expressing intent; disclosure reads the applied value.\n */\n temperature?: number;\n /**\n * Explicit per-call credentials/routing, bypassing `process.env`\n * entirely when supplied. Absent (default) preserves today's\n * behavior — each agent falls back to reading its provider's env\n * var(s) directly, so existing callers (including self-hosters who\n * set env vars once at process start) are unaffected. Use this to\n * run concurrent generations safely in one process: two simultaneous\n * calls with different `routeOverride`s never race on shared\n * `process.env` state.\n */\n routeOverride?: {\n readonly apiKey?: string;\n /** Anthropic-only: force the Bedrock-IAM client instead of the direct API client. */\n readonly useBedrock?: boolean;\n };\n /**\n * Observer invoked once per retried attempt when `apiCall()` (#489)\n * retries a rate-limited (HTTP 429) provider call. Fires AFTER the\n * retry decision is made and BEFORE the delay is awaited — never on\n * the terminal failure/success of the whole call. Purely an\n * observability hook: it never influences whether or how long\n * `apiCall()` retries. If the observer itself throws, `apiCall()`\n * catches it, logs a `console.warn`, and proceeds to the retry\n * delay unaffected — a broken observer cannot turn a recoverable\n * 429 into an unrelated hard failure. Absent (default) is a no-op;\n * `apiCall()` still logs every retry via `console.warn` regardless.\n */\n onRetry?: (info: ProviderRetryInfo) => void;\n}\n\n/** One retried attempt's context — passed to `AgentConfig.onRetry`. */\nexport interface ProviderRetryInfo {\n readonly provider: AgentConfig['provider'];\n /** 1-based index of this retry (1 = first retry, 2 = second, …). */\n readonly attempt: number;\n /** Total retries `apiCall()` will attempt before giving up. */\n readonly maxAttempts: number;\n /** HTTP status of the failed call, when the caught error carries one. */\n readonly status: number | undefined;\n /** Provider-supplied `Retry-After` value in seconds, when present and within the cap. */\n readonly retryAfterSec: number | undefined;\n /** Delay actually awaited before the next attempt. */\n readonly delayMs: number;\n /** One-line error summary (same shape as the existing `console.error` line). */\n readonly message: string;\n}\n\n/**\n * What sampling the provider ACTUALLY received for a text call — so a\n * caller that asked for `temperature: 0` (a disclosed reproducibility\n * property, e.g. the benchmark judge panel) can record the effective\n * value instead of the requested one. `'provider-default'` means no\n * temperature reached the provider: either the caller passed none, or\n * the adapter stripped it because the model rejects sampling params\n * (Anthropic Opus 4.7+ / 5-family → HTTP 400 on non-default\n * `temperature`/`top_p`/`top_k`); `strippedReason` names the second case.\n */\nexport interface AppliedSampling {\n readonly temperature: number | 'provider-default';\n readonly strippedReason?: string;\n}\n\nexport interface LLMResponse {\n text: string;\n inputTokens: number;\n outputTokens: number;\n /**\n * Effective sampling for this call (see {@link AppliedSampling}).\n * Every provider's `callText` sets it; absent only on paths that\n * predate the field — treat absence as unknown, never as \"as\n * requested\".\n */\n sampling?: AppliedSampling;\n}\n\n/**\n * Image payload for {@link VisionAgent.callVision}. Base64-encoded\n * bytes plus their media type — the two fields every vision-capable\n * provider SDK needs to reconstruct the image part.\n */\nexport interface VisionImageInput {\n mediaType: 'image/png' | 'image/jpeg' | 'image/webp';\n base64: string;\n}\n\n/**\n * The multimodal (image + text) call surface. Implemented by the\n * providers whose SDK path supports vision input (Anthropic, Google);\n * construct one via {@link createVisionAgent} so the call runs inside\n * the same `apiCall()` retry/observability choke point as every text\n * call — provider 429s retry with `Retry-After` honoring, `onRetry`\n * reaches the caller's structured log, and `routeOverride` governs\n * credentials and model routing instead of `process.env`.\n */\nexport interface VisionAgent {\n callVision(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n image: VisionImageInput,\n maxTokens?: number,\n ): Promise<LLMResponse>;\n}\n\nexport interface LLMTool {\n name: string;\n description: string;\n parameters: JsonObject;\n handler: (\n args: JsonObject,\n ) => Promise<{ content: Array<{ text: string }>; isError?: boolean }>;\n}\n\nexport interface LLMWithToolsResponse {\n text: string;\n inputTokens: number;\n outputTokens: number;\n turnsUsed: number;\n}\n\nexport interface LLMToolCall {\n /** Provider-specific call ID (for sendToolResult) */\n id?: string;\n name: string;\n input: JsonObject;\n}\n\nexport interface LLMToolCallResponse {\n toolCalls: LLMToolCall[];\n inputTokens: number;\n outputTokens: number;\n /**\n * The tool-choice mode the provider ACTUALLY received. Callers ask\n * for `'required'` (Anthropic `tool_choice: any`); Claude Fable 5.1\n * rejects forced tool choice with HTTP 400, so the Anthropic adapter\n * downgrades to `'auto'` for that family and reports it here. A\n * downgraded call may legitimately return zero tool calls — the\n * evaluator's `criteriaCoverage` records that as `skipped`, never as\n * a pass. Absent = predates the field (treat as unknown).\n */\n appliedToolChoice?: 'required' | 'auto';\n /**\n * Tokens read from / written to the prompt cache, when the provider\n * reports them. Optional because not every provider exposes\n * prompt-cache accounting — absent means \"unreported\", never zero.\n */\n cacheReadTokens?: number;\n cacheCreationTokens?: number;\n}\n\n// Backward compat alias\nexport type LLMSingleTurnResponse = LLMToolCallResponse;\n\n/** Result of executing a tool — passed to sendToolResult to close the API contract. */\nexport interface LLMToolResult {\n /** Tool call ID from the response (for providers that need it) */\n callId?: string;\n /** Tool name */\n name: string;\n /** Text result of executing the tool */\n result: string;\n /** Whether the tool execution failed */\n isError?: boolean;\n}\n\n// =============================================================================\n// Schema helpers\n// =============================================================================\n\n/**\n * Add `additionalProperties: false` to all object schemas and ensure all\n * properties are in `required`. Required by OpenAI strict mode.\n * Recursively processes nested objects and array items.\n */\nfunction addStrictSchemaConstraints(schema: JsonObject): JsonObject {\n const result = { ...schema };\n\n if (result.type === 'object' && result.properties) {\n result.additionalProperties = false;\n // All properties must be required for strict mode\n const propKeys = Object.keys(result.properties as JsonObject);\n if (!result.required || (result.required as string[]).length < propKeys.length) {\n result.required = propKeys;\n }\n // Recurse into nested properties\n const props = { ...(result.properties as JsonObject) };\n for (const [key, value] of Object.entries(props)) {\n if (typeof value === 'object' && value !== null) {\n props[key] = addStrictSchemaConstraints(value as JsonObject);\n }\n }\n result.properties = props;\n }\n\n // Recurse into array items\n if (result.type === 'array' && result.items && typeof result.items === 'object') {\n result.items = addStrictSchemaConstraints(result.items as JsonObject);\n }\n\n return result;\n}\n\n// =============================================================================\n// Error helpers\n// =============================================================================\n\n/** One-line error summary for logging — includes HTTP status, error code, and response body excerpt. */\nfunction errorSummary(e: unknown): string {\n if (!(e instanceof Error)) return String(e);\n const status = 'status' in e ? ` (${(e as { status: number }).status})` : '';\n const code = 'code' in e ? ` [${(e as { code: string }).code}]` : '';\n // Extract error body if available (Google/OpenAI SDKs attach it)\n let body = '';\n if ('error' in e && typeof (e as { error: unknown }).error === 'object') {\n const errObj = (e as { error: { message?: string } }).error;\n if (errObj?.message) body = ` body=\"${errObj.message.slice(0, 200)}\"`;\n }\n return `${e.constructor.name}${status}${code}: ${e.message.slice(0, 120)}${body}`;\n}\n\n/** True when the caught value looks like an HTTP 429 from any provider SDK. */\nfunction isRateLimited(e: unknown): boolean {\n if (!(e instanceof Error) || !('status' in e)) return false;\n return (e as { status: unknown }).status === 429;\n}\n\n/** HTTP status of the caught error, when the SDK attached one. Duck-typed — matches `errorSummary`'s existing precedent. */\nfunction extractStatus(e: unknown): number | undefined {\n if (!(e instanceof Error) || !('status' in e)) return undefined;\n const status = (e as { status: unknown }).status;\n return typeof status === 'number' ? status : undefined;\n}\n\n/**\n * Duck-typed `Retry-After` extraction. Both `@anthropic-ai/sdk`'s and\n * `openai`'s `APIError` attach a `Headers`-like `.headers` (with\n * `.get()`) to the thrown error at construction time — this is the\n * ONLY point in the call chain where that header is still reachable\n * (confirmed by reading both SDKs' error constructors). Handles the\n * delta-seconds form only (a plain integer/float string) — the rarer\n * HTTP-date form parses to `NaN` and correctly falls through to\n * `undefined` rather than fabricating a value. Google's `ApiError` has\n * no `.headers` at all, so this always returns `undefined` for Google\n * — expected, not a gap.\n */\nfunction extractRetryAfterSec(e: unknown): number | undefined {\n if (!(e instanceof Error) || !('headers' in e)) return undefined;\n const headers = (e as { headers?: unknown }).headers;\n if (\n headers === null ||\n typeof headers !== 'object' ||\n !('get' in headers) ||\n typeof (headers as { get?: unknown }).get !== 'function'\n ) {\n return undefined;\n }\n const raw = (headers as { get(name: string): string | null }).get('retry-after');\n if (raw === null) return undefined;\n const parsed = Number(raw);\n return Number.isFinite(parsed) && parsed >= 0 ? Math.floor(parsed) : undefined;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** Retry budget for `apiCall()` — see the docstring on `apiCall()` itself for the full policy. */\nconst MAX_RETRY_ATTEMPTS = 2;\nconst RETRY_AFTER_CAP_SEC = 15;\nconst DEFAULT_BACKOFF_BASE_MS = 1000;\nconst DEFAULT_BACKOFF_MAX_MS = 8000;\nconst MAX_TOTAL_RETRY_DELAY_MS = 20000;\n\n// =============================================================================\n// LLMAgent — abstract base\n// =============================================================================\n\nexport abstract class LLMAgent {\n abstract readonly provider: AgentConfig['provider'];\n private client: unknown = null;\n\n // ── Session state for server-side chaining ──────────────\n // Google: previous_interaction_id, OpenAI: previous_response_id\n // Enables turn 2+ to skip re-sending system prompt + history.\n // Call resetSession() between independent generation runs.\n protected lastSessionId: string | undefined;\n\n /**\n * Explicit per-call routing override — see `AgentConfig.routeOverride`.\n * Absent when constructed via the bare `new XAgent()` form (every\n * existing call site), so `createClient()`/`resolveModel()` fall\n * back to `process.env` exactly as before.\n */\n protected readonly routeOverride: AgentConfig['routeOverride'];\n\n /** See `AgentConfig.onRetry` (#489). Absent is a no-op. */\n protected readonly onRetry: AgentConfig['onRetry'];\n\n constructor(routeOverride?: AgentConfig['routeOverride'], onRetry?: AgentConfig['onRetry']) {\n this.routeOverride = routeOverride;\n this.onRetry = onRetry;\n }\n\n protected abstract resolveModel(model: string): string;\n protected abstract createClient(): Promise<unknown>;\n\n protected async getClient<T>(): Promise<T> {\n if (!this.client) {\n this.client = await this.createClient();\n }\n return this.client as T;\n }\n\n /** Text-only call — no tools */\n abstract callText(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n maxTokens?: number,\n temperature?: number,\n ): Promise<LLMResponse>;\n\n /**\n * Single-turn function calling — returns tool calls without executing them.\n * Each provider uses its native function/tool calling:\n * - Anthropic: tool_use blocks\n * - OpenAI: function_call output items\n * - Google: functionCall parts\n * SDK handles JSON escaping — safe for code, diffs, and other content.\n */\n abstract callTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMToolDef[],\n toolChoice?: 'required' | 'auto',\n /**\n * Optional scoped fallback tools. If the primary tools fail with a\n * transport-class error (e.g. `malformed_tool_call` on Gemini after\n * retry exhaustion), the provider may retry once with these narrower\n * tools before throwing. Universal signal — not provider-gated.\n */\n scopedTools?: LLMToolDef[],\n ): Promise<LLMToolCallResponse>;\n\n /** Multi-turn agentic loop — executes tools internally */\n abstract callWithTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMTool[],\n maxTurns: number,\n ): Promise<LLMWithToolsResponse>;\n\n /**\n * Pre-warm cache for repeated callTools() calls with the same system prompt + tools.\n * Override in providers that support server-side context caching (e.g., Google).\n * No-op by default (Anthropic/OpenAI handle caching automatically per-request).\n */\n async warmCache(\n _model: string,\n _systemPrompt: string,\n _tools: LLMToolDef[],\n _toolChoice?: 'required' | 'auto',\n ): Promise<void> {}\n\n /** Cleanup any cached resources. Call after generation completes. No-op by default. */\n async cleanup(): Promise<void> {}\n\n /** Reset session state between independent generation runs. */\n resetSession(): void {\n this.lastSessionId = undefined;\n }\n\n /**\n * Send tool execution results back to the provider to close the API contract.\n * Call this after executing tools from callTools() and before the next callTools().\n *\n * For providers with server-side state (Google, OpenAI), this sends the\n * function results so the next callTools() can chain properly.\n * For stateless providers (Anthropic), this is a no-op.\n *\n * Override in providers that need it.\n */\n async sendToolResult(_results: LLMToolResult[]): Promise<void> {\n // No-op by default — Anthropic doesn't need this (stateless + auto prompt cache)\n }\n\n /**\n * Execute an API call, retrying once or twice on HTTP 429\n * (rate-limited) before giving up (#489).\n *\n * Policy: on a 429, honor the provider's `Retry-After` header when\n * present (capped at `RETRY_AFTER_CAP_SEC` — a provider asking for a\n * longer wait is treated as \"don't retry\", not \"wait longer\": making\n * the caller sit through 15+ more seconds on a single failed call is\n * a bad experience regardless of what's driving the request);\n * otherwise fall back to exponential backoff with jitter, capped at\n * `DEFAULT_BACKOFF_MAX_MS` per attempt. Stops after\n * `MAX_RETRY_ATTEMPTS` retries OR once the cumulative delay would\n * exceed `MAX_TOTAL_RETRY_DELAY_MS`, whichever comes first. Any\n * non-429 error, or a 429 with no attempts left, is logged and\n * re-thrown immediately — unchanged from the pre-#489 behavior.\n *\n * **Budget scope (final-review correction):** `MAX_TOTAL_RETRY_DELAY_MS`\n * bounds a single `apiCall()` invocation, not a whole generation. A\n * generation issues many sequential `apiCall()` calls (coding turns,\n * tool-result round-trips, eval rounds); under sustained throttling\n * each one can independently add up to `MAX_TOTAL_RETRY_DELAY_MS`, so\n * a generation with k rate-limited calls can add up to roughly `k *\n * MAX_TOTAL_RETRY_DELAY_MS` to how long it holds its caller's\n * resources (e.g. the caller's concurrency slot) — not a flat 20s\n * ceiling. No shared per-generation budget is threaded here by\n * design (accepted ruling, not an oversight): the caller's own\n * queue/admission backstop is what bounds how long other\n * queued work waits, independent of any one generation's retry\n * total.\n */\n protected async apiCall<T>(fn: () => Promise<T>): Promise<T> {\n const start = Date.now();\n let totalDelayMs = 0;\n for (let attempt = 0; ; attempt++) {\n try {\n return await fn();\n } catch (e: unknown) {\n const ms = Date.now() - start;\n if (attempt >= MAX_RETRY_ATTEMPTS || !isRateLimited(e)) {\n console.error(`[${this.provider}] API error after ${ms}ms: ${errorSummary(e)}`);\n throw e;\n }\n const retryAfterSec = extractRetryAfterSec(e);\n if (retryAfterSec !== undefined && retryAfterSec > RETRY_AFTER_CAP_SEC) {\n console.error(\n `[${this.provider}] API error after ${ms}ms (retry-after ${retryAfterSec}s exceeds ${RETRY_AFTER_CAP_SEC}s cap, not retrying): ${errorSummary(e)}`,\n );\n throw e;\n }\n const delayMs =\n retryAfterSec !== undefined\n ? retryAfterSec * 1000\n : Math.min(DEFAULT_BACKOFF_BASE_MS * 2 ** attempt, DEFAULT_BACKOFF_MAX_MS) +\n Math.floor(Math.random() * 250);\n if (totalDelayMs + delayMs > MAX_TOTAL_RETRY_DELAY_MS) {\n console.error(\n `[${this.provider}] API error after ${ms}ms (retry budget exhausted, not retrying): ${errorSummary(e)}`,\n );\n throw e;\n }\n totalDelayMs += delayMs;\n const info: ProviderRetryInfo = {\n provider: this.provider,\n attempt: attempt + 1,\n maxAttempts: MAX_RETRY_ATTEMPTS,\n status: extractStatus(e),\n retryAfterSec,\n delayMs,\n message: errorSummary(e),\n };\n console.warn(\n `[${this.provider}] rate-limited (attempt ${info.attempt}/${info.maxAttempts}), retrying in ${delayMs}ms`,\n );\n try {\n this.onRetry?.(info);\n } catch (observerError) {\n // Guard, not propagate — the docstring on AgentConfig.onRetry\n // promises this is \"purely an observability hook: it never\n // influences whether or how long apiCall() retries\". A\n // caller-supplied observer that throws must not turn a\n // recoverable 429 into an unrelated hard failure.\n console.warn(\n `[${this.provider}] onRetry observer threw (ignored, retry proceeds): ${errorSummary(observerError)}`,\n );\n }\n await sleep(delayMs);\n }\n }\n }\n\n}\n\n// =============================================================================\n// AnthropicAgent\n// =============================================================================\n\n/**\n * Strip every routing spelling down to the bare Claude API id so the\n * family predicates below see one form: `anthropic/claude-x`,\n * `anthropic.claude-x`, `us.anthropic.claude-x[-vN:M]` and the bare\n * `claude-x` all normalize to `claude-x…`. ARNs are left as-is (they\n * name a profile, not a family) and match no predicate.\n */\nexport function normalizeAnthropicModelId(model: string): string {\n return model\n .replace(/^anthropic\\//, '')\n .replace(/^(?:[a-z]{2}\\.)?anthropic\\./, '');\n}\n\n/**\n * Models that reject non-default sampling parameters with HTTP 400:\n * Opus 4.7 and everything after it (Fable 5, Fable 5.1, Opus 5,\n * Sonnet 5). Haiku 4.5 (`claude-haiku-4-5*`) still accepts them.\n * Strings per ggui#706 (platform.claude.com, verified 2026-09-02).\n */\nexport function anthropicRejectsSamplingParams(model: string): boolean {\n return /^claude-(?:opus-4-7|opus-5|sonnet-5|fable-5)(?:-|$)/.test(\n normalizeAnthropicModelId(model),\n );\n}\n\n/**\n * Models that reject a FORCED tool choice (`tool_choice: any` / a named\n * tool) with HTTP 400: Claude Fable 5.1 (ggui#706). `auto` is accepted.\n */\nexport function anthropicRejectsForcedToolChoice(model: string): boolean {\n return /^claude-fable-5-1(?:-|$)/.test(normalizeAnthropicModelId(model));\n}\n\n/**\n * Decide what sampling reaches Anthropic for `model` given the caller's\n * `temperature`: pass it through on models that accept it, strip it on\n * the 4.7+/5-family and say so. Pure — the caller logs and spreads.\n */\nexport function resolveAnthropicSampling(\n model: string,\n temperature: number | undefined,\n): { readonly request: { temperature?: number }; readonly applied: AppliedSampling } {\n if (temperature === undefined) {\n return { request: {}, applied: { temperature: 'provider-default' } };\n }\n if (anthropicRejectsSamplingParams(model)) {\n return {\n request: {},\n applied: {\n temperature: 'provider-default',\n strippedReason:\n `${normalizeAnthropicModelId(model)} rejects non-default sampling params (HTTP 400 on Opus 4.7+/5-family); ` +\n `caller's temperature=${temperature} was not sent`,\n },\n };\n }\n return { request: { temperature }, applied: { temperature } };\n}\n\nexport class AnthropicAgent extends LLMAgent {\n readonly provider = 'anthropic' as const;\n\n protected resolveModel(model: string): string {\n // Bedrock IAM path — the upstream model id must be the cross-region\n // inference-profile form (`us.anthropic.*`), not the bare API id.\n const useBedrock =\n this.routeOverride?.useBedrock ?? process.env.CLAUDE_CODE_USE_BEDROCK === '1';\n if (useBedrock) {\n return getBedrockModelId(model);\n }\n return model.startsWith('anthropic/')\n ? model.slice('anthropic/'.length)\n : model;\n }\n\n protected async createClient(): Promise<Anthropic | AnthropicBedrock> {\n // Bedrock IAM path: when CLAUDE_CODE_USE_BEDROCK=1 (set by the\n // deployment's provider routing), auth comes from the ambient AWS\n // credential chain (instance role, env credentials, etc.) — no API\n // key. `AnthropicBedrock` is wire-compatible with `Anthropic` for\n // the `.messages` API this agent uses.\n const useBedrock =\n this.routeOverride?.useBedrock ?? process.env.CLAUDE_CODE_USE_BEDROCK === '1';\n if (useBedrock) {\n const { AnthropicBedrock } = await import('@anthropic-ai/bedrock-sdk');\n return new AnthropicBedrock({\n awsRegion:\n process.env.AWS_REGION ??\n process.env.AWS_DEFAULT_REGION ??\n 'us-east-1',\n });\n }\n // SDK construction lives in `adapters/claude/client.ts`. The BYOK\n // resolver writes the raw key into `process.env.ANTHROPIC_API_KEY`\n // before this runs (see `applyRouteToEnv` in provider-router) —\n // `routeOverride.apiKey`, when supplied, skips that env round-trip\n // entirely.\n return createAnthropicClient(this.routeOverride?.apiKey ?? process.env.ANTHROPIC_API_KEY);\n }\n\n async callText(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n maxTokens?: number,\n temperature?: number,\n ): Promise<LLMResponse> {\n const client = await this.getClient<Anthropic>();\n const traceId = newLlmTraceId();\n const startedAt = Date.now();\n const resolvedModel = this.resolveModel(model);\n\n // Use prompt caching beta API (90% discount on cached reads)\n const system: TextBlockParam[] = [\n {\n type: 'text',\n text: systemPrompt,\n cache_control: { type: 'ephemeral' },\n },\n ];\n\n // Capability is the router's: the 4.7+/5-family rejects sampling\n // params with 400, so strip (and disclose) rather than fail the call\n // or make callers stop expressing intent (ggui#710 / #706).\n const sampling = resolveAnthropicSampling(resolvedModel, temperature);\n if (sampling.applied.strippedReason !== undefined) {\n console.warn(`[anthropic] callText: ${sampling.applied.strippedReason}`);\n }\n\n try {\n const response = await this.apiCall(() =>\n client.messages.create({\n model: resolvedModel,\n max_tokens: maxTokens ?? 4096,\n system,\n messages: [{ role: 'user', content: userPrompt }],\n ...sampling.request,\n }),\n );\n\n const usage = response.usage as typeof response.usage & {\n cache_creation_input_tokens?: number | null;\n cache_read_input_tokens?: number | null;\n };\n const cacheCreated = usage.cache_creation_input_tokens ?? 0;\n const cacheRead = usage.cache_read_input_tokens ?? 0;\n if (cacheCreated || cacheRead) {\n console.log(`[anthropic] callText cache: created=${cacheCreated} read=${cacheRead} input=${usage.input_tokens} output=${usage.output_tokens}`);\n }\n\n const text = response.content\n .filter((block): block is TextBlock => block.type === 'text')\n .map((block) => block.text)\n .join('');\n\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callText',\n systemPrompt,\n userPrompt,\n result: {\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n cacheCreated,\n cacheRead,\n text,\n },\n });\n\n return {\n text,\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n sampling: sampling.applied,\n };\n } catch (e) {\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callText',\n systemPrompt,\n userPrompt,\n error: { message: e instanceof Error ? e.message : String(e) },\n });\n throw e;\n }\n }\n\n async callVision(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n image: VisionImageInput,\n maxTokens?: number,\n ): Promise<LLMResponse> {\n const client = await this.getClient<Anthropic>();\n const traceId = newLlmTraceId();\n const startedAt = Date.now();\n const resolvedModel = this.resolveModel(model);\n\n const imageBlock: ImageBlockParam = {\n type: 'image',\n source: {\n type: 'base64',\n media_type: image.mediaType,\n data: image.base64,\n },\n };\n\n try {\n const response = await this.apiCall(() =>\n client.messages.create({\n model: resolvedModel,\n max_tokens: maxTokens ?? 1500,\n system: systemPrompt,\n messages: [\n {\n role: 'user',\n content: [imageBlock, { type: 'text', text: userPrompt }],\n },\n ],\n }),\n );\n\n const text = response.content\n .filter((block): block is TextBlock => block.type === 'text')\n .map((block) => block.text)\n .join('');\n\n const endedAt = Date.now();\n // The image bytes stay OUT of the trace — a base64 screenshot\n // would balloon every event; the prompts identify the call.\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callVision',\n systemPrompt,\n userPrompt,\n result: {\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n text,\n },\n });\n\n return {\n text,\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n };\n } catch (e) {\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callVision',\n systemPrompt,\n userPrompt,\n error: { message: e instanceof Error ? e.message : String(e) },\n });\n throw e;\n }\n }\n\n async callTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMToolDef[],\n toolChoice: 'required' | 'auto' = 'required',\n _scopedTools?: LLMToolDef[],\n ): Promise<LLMToolCallResponse> {\n const client = await this.getClient<Anthropic>();\n const traceId = newLlmTraceId();\n const startedAt = Date.now();\n const resolvedModel = this.resolveModel(model);\n\n // Cache system prompt + tools via prompt caching beta (90% discount)\n const system: TextBlockParam[] = [\n {\n type: 'text',\n text: systemPrompt,\n cache_control: { type: 'ephemeral' },\n },\n ];\n\n const cachedTools: Anthropic.Tool[] = tools.map((t, i) => ({\n name: t.name,\n description: t.description,\n input_schema: t.parameters as Anthropic.Tool.InputSchema,\n // Mark last tool to cache the entire tool list\n ...(i === tools.length - 1\n ? { cache_control: { type: 'ephemeral' as const } }\n : {}),\n }));\n\n try {\n // `max_tokens >= 21_334` mandates streaming on the\n // @anthropic-ai/sdk >=0.40 path (the API rejects non-streamed\n // long-form generation with `Streaming is required for\n // operations that may take longer than 10 minutes`). We still\n // want the final-message shape downstream, so use the stream\n // helper's `finalMessage()` which folds the events back to the\n // same `Message` Type the non-streaming path returned.\n // Fable 5.1 rejects a forced tool choice (400); downgrade to\n // `auto` for that family and disclose it on the response so a\n // resulting zero-tool-call reply is never mistaken for a verdict\n // (ggui#710 / #706).\n const appliedToolChoice: 'required' | 'auto' =\n toolChoice === 'required' && anthropicRejectsForcedToolChoice(resolvedModel)\n ? 'auto'\n : toolChoice;\n if (appliedToolChoice !== toolChoice) {\n console.warn(\n `[anthropic] callTools: ${normalizeAnthropicModelId(resolvedModel)} rejects forced tool_choice (HTTP 400); ` +\n `caller's 'required' downgraded to 'auto'`,\n );\n }\n const response = await this.apiCall(() =>\n client.messages\n .stream({\n model: resolvedModel,\n max_tokens: 32768,\n system,\n messages: [{ role: 'user', content: userPrompt }],\n tools: cachedTools,\n tool_choice: { type: appliedToolChoice === 'required' ? 'any' : 'auto' },\n })\n .finalMessage(),\n );\n\n const usage = response.usage as typeof response.usage & {\n cache_creation_input_tokens?: number | null;\n cache_read_input_tokens?: number | null;\n };\n const cacheCreated = usage.cache_creation_input_tokens ?? 0;\n const cacheRead = usage.cache_read_input_tokens ?? 0;\n if (cacheCreated || cacheRead) {\n console.log(`[anthropic] callTools cache: created=${cacheCreated} read=${cacheRead} input=${usage.input_tokens} output=${usage.output_tokens}`);\n }\n\n const toolUses = response.content.filter(\n (block): block is ToolUseBlock => block.type === 'tool_use',\n );\n\n const toolCalls = toolUses.map((tu) => ({\n id: tu.id,\n name: tu.name,\n input: (tu.input ?? {}) as JsonObject,\n }));\n\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callTools',\n systemPrompt,\n userPrompt,\n tools: summarizeTools(tools),\n result: {\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n cacheCreated,\n cacheRead,\n toolCalls: toolCalls.map((c) => ({ name: c.name, input: c.input })),\n },\n });\n\n return {\n toolCalls,\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n cacheReadTokens: cacheRead,\n cacheCreationTokens: cacheCreated,\n appliedToolChoice,\n };\n } catch (e) {\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callTools',\n systemPrompt,\n userPrompt,\n tools: summarizeTools(tools),\n error: { message: e instanceof Error ? e.message : String(e) },\n });\n throw e;\n }\n }\n\n async callWithTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMTool[],\n maxTurns: number,\n ): Promise<LLMWithToolsResponse> {\n const client = await this.getClient<Anthropic>();\n const resolvedModel = this.resolveModel(model);\n const traceId = newLlmTraceId();\n const startedAt = Date.now();\n\n const anthropicTools: Anthropic.Tool[] = tools.map((t) => ({\n name: t.name,\n description: t.description,\n input_schema: t.parameters as Anthropic.Tool.InputSchema,\n }));\n\n const messages: Anthropic.MessageParam[] = [\n { role: 'user', content: userPrompt },\n ];\n let totalIn = 0;\n let totalOut = 0;\n let allText = '';\n\n try {\n for (let turn = 0; turn < maxTurns; turn++) {\n // Same streaming requirement as callTools — see comment there.\n const response = await this.apiCall(() =>\n client.messages\n .stream({\n model: resolvedModel,\n max_tokens: 32768,\n system: systemPrompt,\n messages,\n tools: anthropicTools,\n })\n .finalMessage(),\n );\n totalIn += response.usage.input_tokens;\n totalOut += response.usage.output_tokens;\n\n for (const block of response.content) {\n if (block.type === 'text') allText += block.text;\n }\n\n const toolUses = response.content.filter(\n (b): b is ToolUseBlock => b.type === 'tool_use',\n );\n if (toolUses.length === 0) break;\n\n messages.push({ role: 'assistant', content: response.content });\n\n const toolResults: Anthropic.ToolResultBlockParam[] = [];\n for (const tu of toolUses) {\n const tool = tools.find((t) => t.name === tu.name);\n if (!tool) {\n toolResults.push({\n type: 'tool_result',\n tool_use_id: tu.id,\n content: `Tool '${tu.name}' not found`,\n });\n continue;\n }\n const result = await tool.handler(\n (tu.input ?? {}) as JsonObject,\n );\n toolResults.push({\n type: 'tool_result',\n tool_use_id: tu.id,\n content: result.content[0]?.text ?? '',\n });\n }\n messages.push({ role: 'user', content: toolResults });\n }\n\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callWithTools',\n systemPrompt,\n userPrompt,\n tools: tools.map((t) => ({ name: t.name, description: t.description })),\n result: {\n inputTokens: totalIn,\n outputTokens: totalOut,\n text: allText,\n turnsUsed: messages.length,\n },\n });\n\n return {\n text: allText,\n inputTokens: totalIn,\n outputTokens: totalOut,\n turnsUsed: messages.length,\n };\n } catch (e) {\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'anthropic',\n model: resolvedModel,\n kind: 'callWithTools',\n systemPrompt,\n userPrompt,\n tools: tools.map((t) => ({ name: t.name, description: t.description })),\n error: { message: e instanceof Error ? e.message : String(e) },\n });\n throw e;\n }\n }\n}\n\n// =============================================================================\n// OpenAIAgent\n// =============================================================================\n\nexport class OpenAIAgent extends LLMAgent {\n readonly provider = 'openai' as const;\n\n protected resolveModel(model: string): string {\n return model.startsWith('openai/')\n ? model.slice('openai/'.length)\n : model;\n }\n\n protected async createClient(): Promise<OpenAI> {\n const { default: OpenAISDK } = await import('openai');\n return new OpenAISDK({ apiKey: this.routeOverride?.apiKey ?? process.env.OPENAI_API_KEY });\n }\n\n async callText(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n maxTokens?: number,\n temperature?: number,\n ): Promise<LLMResponse> {\n const client = await this.getClient<OpenAI>();\n const response: OpenAIResponse = await this.apiCall(() =>\n client.responses.create({\n model: this.resolveModel(model),\n instructions: systemPrompt,\n input: [{ role: 'user', content: userPrompt }],\n ...(maxTokens && { max_output_tokens: maxTokens }),\n ...(temperature !== undefined && { temperature }),\n }),\n );\n\n let text = '';\n for (const item of response.output) {\n if (item.type === 'message') {\n for (const part of item.content) {\n if (part.type === 'output_text') text += part.text;\n }\n }\n }\n\n return {\n text,\n inputTokens: response.usage?.input_tokens ?? 0,\n outputTokens: response.usage?.output_tokens ?? 0,\n sampling: { temperature: temperature ?? 'provider-default' },\n };\n }\n\n async callTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMToolDef[],\n toolChoice: 'required' | 'auto' = 'required',\n _scopedTools?: LLMToolDef[],\n ): Promise<LLMToolCallResponse> {\n const client = await this.getClient<OpenAI>();\n // strict: true enables constrained decoding — guarantees valid JSON matching the schema.\n // Requires additionalProperties: false on all objects and all fields in required.\n const openaiTools = tools.map((t) => ({\n type: 'function' as const,\n name: t.name,\n description: t.description,\n parameters: addStrictSchemaConstraints(t.parameters),\n strict: true,\n }));\n\n // Consume pending tool results — prepend to input for proper contract\n const pending = this.pendingToolResults;\n this.pendingToolResults = [];\n const input = pending.length > 0\n ? [...pending, { role: 'user' as const, content: userPrompt }]\n : [{ role: 'user' as const, content: userPrompt }];\n\n const response: OpenAIResponse = await this.apiCall(() =>\n client.responses.create({\n model: this.resolveModel(model),\n instructions: systemPrompt,\n input,\n tools: openaiTools,\n tool_choice: toolChoice,\n store: true, // Enable response storage + server-side chaining\n ...(this.lastSessionId && { previous_response_id: this.lastSessionId }),\n }),\n );\n\n // Save session ID for chaining subsequent calls\n this.lastSessionId = response.id;\n\n // Log cache utilization\n const usage = response.usage;\n if (usage) {\n // Typed in the SDK as required, but widened to optional here —\n // tolerate responses that omit the breakdown at runtime.\n const cached: { cached_tokens?: number } | undefined =\n usage.input_tokens_details;\n if (cached?.cached_tokens) {\n console.log(`[openai] session ${this.lastSessionId ? 'chained' : 'new'}: ${cached.cached_tokens} cached of ${usage.input_tokens} input`);\n }\n }\n\n const functionCalls = response.output.filter(\n (o): o is ResponseFunctionToolCall => o.type === 'function_call',\n );\n\n return {\n toolCalls: functionCalls.map((fc) => ({\n id: fc.call_id,\n name: fc.name,\n input: JSON.parse(fc.arguments ?? '{}') as JsonObject,\n })),\n inputTokens: response.usage?.input_tokens ?? 0,\n outputTokens: response.usage?.output_tokens ?? 0,\n };\n }\n\n // Pending tool results — stored by sendToolResult, consumed by next callTools\n private pendingToolResults: OpenAI.Responses.ResponseInputItem[] = [];\n\n override async sendToolResult(results: LLMToolResult[]): Promise<void> {\n // Store results locally — they'll be prepended to the next callTools input.\n // No API call here! Saves a round-trip.\n this.pendingToolResults = results.map((r) => ({\n type: 'function_call_output',\n call_id: r.callId ?? '',\n output: r.result,\n }));\n }\n\n async callWithTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMTool[],\n maxTurns: number,\n ): Promise<LLMWithToolsResponse> {\n const client = await this.getClient<OpenAI>();\n const resolvedModel = this.resolveModel(model);\n const openaiTools = tools.map((t) => ({\n type: 'function' as const,\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n strict: false,\n }));\n\n let input: OpenAI.Responses.ResponseInputItem[] = [\n { role: 'user', content: userPrompt },\n ];\n let totalIn = 0;\n let totalOut = 0;\n let allText = '';\n\n for (let turn = 0; turn < maxTurns; turn++) {\n const response: OpenAIResponse = await this.apiCall(() =>\n client.responses.create({\n model: resolvedModel,\n instructions: systemPrompt,\n input,\n tools: openaiTools,\n }),\n );\n totalIn += response.usage?.input_tokens ?? 0;\n totalOut += response.usage?.output_tokens ?? 0;\n\n const functionCalls = response.output.filter(\n (o): o is ResponseFunctionToolCall => o.type === 'function_call',\n );\n for (const item of response.output) {\n if (item.type === 'message') {\n for (const part of item.content) {\n if (part.type === 'output_text') allText += part.text;\n }\n }\n }\n\n if (functionCalls.length === 0) break;\n\n input = [\n ...(response.output as OpenAI.Responses.ResponseInputItem[]),\n ];\n for (const fc of functionCalls) {\n const tool = tools.find((t) => t.name === fc.name);\n const result = tool\n ? await tool.handler(\n JSON.parse(fc.arguments ?? '{}') as JsonObject,\n )\n : { content: [{ text: `Tool '${fc.name}' not found` }] };\n input.push({\n type: 'function_call_output',\n call_id: fc.call_id,\n output: result.content[0]?.text ?? '',\n });\n }\n }\n\n return {\n text: allText,\n inputTokens: totalIn,\n outputTokens: totalOut,\n turnsUsed: input.length,\n };\n }\n}\n\n// =============================================================================\n// GoogleAgent — uses Interactions API (server-side state, automatic caching)\n// =============================================================================\n\n/**\n * Concatenate text across all `model_output` steps of an interaction\n * (@google/genai >= 2.0.0 'steps' schema). Steps form a discriminated\n * union — even at thinking_level 'minimal' a `thought` step is present,\n * so iterate by discriminant and skip step types we don't consume.\n */\nfunction interactionText(interaction: Interactions.Interaction): string {\n let text = '';\n for (const step of interaction.steps ?? []) {\n if (step.type === 'model_output') {\n for (const content of step.content ?? []) {\n if (content.type === 'text') {\n text += content.text;\n }\n }\n }\n }\n return text;\n}\n\n/** Collect the function-call steps of an interaction. */\nfunction functionCallSteps(\n interaction: Interactions.Interaction,\n): Interactions.FunctionCallStep[] {\n return (interaction.steps ?? []).filter(\n (s): s is Interactions.FunctionCallStep => s.type === 'function_call',\n );\n}\n\n/**\n * Wrap a user prompt as a `user_input` step. In the 2.x request union a\n * mixed input array is `Array<Step>` — bare `{type:'text'}` content is\n * not a Step, so prompts sent alongside function_result steps must be\n * wrapped.\n */\nfunction toUserInputStep(text: string): Interactions.UserInputStep {\n return { type: 'user_input', content: [{ type: 'text', text }] };\n}\n\nexport class GoogleAgent extends LLMAgent {\n readonly provider = 'google' as const;\n\n protected resolveModel(model: string): string {\n // Strip the LiteLLM transport prefix `gemini/` (Google AI Studio\n // route) so the GenAI SDK receives the bare model id it expects.\n // Pre-slice-#43 close-out this stripped `google/` instead — which\n // (a) doesn't match LiteLLM's `gemini/` convention and (b) silently\n // no-op'd against canonical `gemini/...` strings, then passed\n // them to the GenAI SDK which 4xx's on the prefixed form. Fixed\n // as part of the slice #43 audit. Bare ids pass through verbatim\n // (typed `LlmRoute` already guarantees wire-canonical at every\n // OSS call site).\n return model.startsWith('gemini/')\n ? model.slice('gemini/'.length)\n : model;\n }\n\n protected async createClient(): Promise<GoogleGenAI> {\n const { GoogleGenAI: GoogleGenAISDK } = await import('@google/genai');\n return new GoogleGenAISDK({\n apiKey:\n this.routeOverride?.apiKey ?? (process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY),\n httpOptions: { timeout: 300_000 }, // 5 min — Pro models can be slow\n });\n }\n\n async callText(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n maxTokens?: number,\n temperature?: number,\n ): Promise<LLMResponse> {\n const client = await this.getClient<GoogleGenAI>();\n\n const generationConfig: Interactions.GenerationConfig = {\n ...(maxTokens ? { max_output_tokens: maxTokens } : {}),\n ...(temperature !== undefined ? { temperature } : {}),\n };\n\n const interaction = await this.apiCall(() =>\n client.interactions.create({\n model: this.resolveModel(model),\n system_instruction: systemPrompt,\n input: userPrompt,\n generation_config:\n Object.keys(generationConfig).length > 0 ? generationConfig : undefined,\n }),\n );\n\n return {\n text: interactionText(interaction),\n inputTokens: interaction.usage?.total_input_tokens ?? 0,\n outputTokens: interaction.usage?.total_output_tokens ?? 0,\n sampling: { temperature: temperature ?? 'provider-default' },\n };\n }\n\n async callVision(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n image: VisionImageInput,\n maxTokens?: number,\n ): Promise<LLMResponse> {\n const client = await this.getClient<GoogleGenAI>();\n const traceId = newLlmTraceId();\n const startedAt = Date.now();\n const resolvedModel = this.resolveModel(model);\n\n try {\n const response = await this.apiCall(() =>\n client.models.generateContent({\n model: resolvedModel,\n contents: [\n {\n role: 'user',\n parts: [\n { inlineData: { mimeType: image.mediaType, data: image.base64 } },\n { text: userPrompt },\n ],\n },\n ],\n config: {\n systemInstruction: systemPrompt,\n ...(maxTokens ? { maxOutputTokens: maxTokens } : {}),\n },\n }),\n );\n\n const text =\n response.candidates?.[0]?.content?.parts?.map((p) => p.text || '').join('') || '';\n const usage = response.usageMetadata;\n const result: LLMResponse = {\n text,\n inputTokens: usage?.promptTokenCount ?? 0,\n outputTokens: usage?.candidatesTokenCount ?? 0,\n };\n\n const endedAt = Date.now();\n // The image bytes stay OUT of the trace — a base64 screenshot\n // would balloon every event; the prompts identify the call.\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'google',\n model: resolvedModel,\n kind: 'callVision',\n systemPrompt,\n userPrompt,\n result: {\n inputTokens: result.inputTokens,\n outputTokens: result.outputTokens,\n text,\n },\n });\n\n return result;\n } catch (e) {\n const endedAt = Date.now();\n emitLlmTraceEvent({\n id: traceId,\n at: startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n provider: 'google',\n model: resolvedModel,\n kind: 'callVision',\n systemPrompt,\n userPrompt,\n error: { message: e instanceof Error ? e.message : String(e) },\n });\n throw e;\n }\n }\n\n async callTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMToolDef[],\n _toolChoice: 'required' | 'auto' = 'required',\n scopedTools?: LLMToolDef[],\n ): Promise<LLMToolCallResponse> {\n const client = await this.getClient<GoogleGenAI>();\n\n\n const interactionTools: Interactions.Function[] = tools.map((t) => ({\n type: 'function' as const,\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n }));\n const scopedInteractionTools: Interactions.Function[] | undefined = scopedTools?.map((t) => ({\n type: 'function' as const,\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n }));\n\n // Chain off previous interaction if available — server has system prompt + tools\n const resolvedModel = this.resolveModel(model);\n\n // Consume pending tool results — prepend them to the input so the API\n // sees function_result + the new prompt (as a user_input step) in one\n // call (saves a round-trip)\n const pending = this.pendingToolResults;\n this.pendingToolResults = [];\n const input: string | Interactions.Step[] = pending.length > 0\n ? [...pending, toUserInputStep(userPrompt)]\n : userPrompt;\n\n const createInteraction = () =>\n this.lastSessionId\n ? client.interactions.create({\n model: resolvedModel,\n previous_interaction_id: this.lastSessionId,\n input,\n tools: interactionTools,\n generation_config: { max_output_tokens: 16384 },\n })\n : client.interactions.create({\n model: resolvedModel,\n system_instruction: systemPrompt,\n tools: interactionTools,\n input: userPrompt,\n generation_config: { max_output_tokens: 16384 },\n });\n\n // Retry up to 3 attempts for malformed_tool_call (model generates invalid JSON).\n // If all 3 fail AND scopedTools were provided, one final attempt with the\n // narrower scoped tool schema. Universal runtime-signal fallback — the\n // signal is the transport error, not the provider identity.\n let interaction!: Interactions.Interaction;\n const MAX_MALFORMED_RETRIES = 3;\n let succeeded = false;\n for (let attempt = 0; attempt < MAX_MALFORMED_RETRIES; attempt++) {\n try {\n if (attempt === 0) {\n interaction = await this.apiCall(createInteraction);\n } else {\n const jsonHint = '\\n\\nIMPORTANT: Your previous response had invalid JSON. Produce valid JSON in your tool call arguments.';\n const retryPrompt = userPrompt + jsonHint;\n interaction = await this.apiCall(() =>\n this.lastSessionId\n ? client.interactions.create({\n model: resolvedModel,\n previous_interaction_id: this.lastSessionId,\n input: pending.length > 0\n ? [...pending, toUserInputStep(retryPrompt)]\n : retryPrompt,\n tools: interactionTools,\n generation_config: { max_output_tokens: 16384 },\n })\n : client.interactions.create({\n model: resolvedModel,\n system_instruction: systemPrompt,\n tools: interactionTools,\n input: retryPrompt,\n generation_config: { max_output_tokens: 16384 },\n }),\n );\n }\n succeeded = true;\n break;\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n if (msg.includes('malformed_tool_call') && attempt < MAX_MALFORMED_RETRIES - 1) {\n console.warn(`[google] malformed_tool_call (attempt ${attempt + 1}/${MAX_MALFORMED_RETRIES}) — retrying`);\n continue;\n }\n if (msg.includes('malformed_tool_call') && scopedInteractionTools) {\n // Exhausted primary retries — try once more with the scoped\n // tool schema. The narrower tool forces a smaller payload\n // that's less likely to trip JSON emission.\n console.warn('[google] malformed_tool_call exhausted — retrying with scoped tool schema');\n const scopedHint = '\\n\\nYour previous response exceeded the tool-call payload budget. Produce a SINGLE small change (≤20 lines) using the narrowed tool schema.';\n const scopedPrompt = userPrompt + scopedHint;\n try {\n interaction = await this.apiCall(() =>\n this.lastSessionId\n ? client.interactions.create({\n model: resolvedModel,\n previous_interaction_id: this.lastSessionId,\n input: pending.length > 0\n ? [...pending, toUserInputStep(scopedPrompt)]\n : scopedPrompt,\n tools: scopedInteractionTools,\n generation_config: { max_output_tokens: 16384 },\n })\n : client.interactions.create({\n model: resolvedModel,\n system_instruction: systemPrompt,\n tools: scopedInteractionTools,\n input: scopedPrompt,\n generation_config: { max_output_tokens: 16384 },\n }),\n );\n succeeded = true;\n break;\n } catch (e2: unknown) {\n const msg2 = e2 instanceof Error ? e2.message : String(e2);\n console.error(`[google] scoped retry FAILED: ${msg2.slice(0, 300)}`);\n throw e2;\n }\n }\n console.error(`[google] callTools FAILED: ${msg.slice(0, 300)}`);\n throw e;\n }\n }\n if (!succeeded) throw new Error('[google] callTools: exhausted retries without success');\n\n // Save session ID for chaining subsequent calls\n this.lastSessionId = interaction.id;\n\n const toolCalls = functionCallSteps(interaction).map((fc) => ({\n id: fc.id,\n name: fc.name,\n input: toolArgsToJsonObject(fc.arguments),\n }));\n\n return {\n toolCalls,\n inputTokens: interaction.usage?.total_input_tokens ?? 0,\n outputTokens: interaction.usage?.total_output_tokens ?? 0,\n };\n }\n\n // Pending tool results — stored by sendToolResult, consumed by next callTools\n private pendingToolResults: Interactions.FunctionResultStep[] = [];\n\n override async sendToolResult(results: LLMToolResult[]): Promise<void> {\n // Store results locally — they'll be prepended to the next callTools input.\n // No API call here! Saves ~5.8s per turn.\n this.pendingToolResults = results.map((r) => ({\n type: 'function_result' as const,\n call_id: r.callId ?? '',\n name: r.name,\n result: r.result,\n is_error: r.isError,\n }));\n }\n\n async callWithTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMTool[],\n maxTurns: number,\n ): Promise<LLMWithToolsResponse> {\n const client = await this.getClient<GoogleGenAI>();\n\n\n const interactionTools: Interactions.Function[] = tools.map((t) => ({\n type: 'function' as const,\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n }));\n\n let totalIn = 0;\n let totalOut = 0;\n let allText = '';\n let turnsUsed = 0;\n\n // Turn 1: system instruction + tools + user prompt\n let interaction = await this.apiCall(() =>\n client.interactions.create({\n model: this.resolveModel(model),\n system_instruction: systemPrompt,\n tools: interactionTools,\n input: userPrompt,\n }),\n );\n\n for (let turn = 0; turn < maxTurns; turn++) {\n turnsUsed = turn + 1;\n\n if (interaction.usage) {\n totalIn += interaction.usage.total_input_tokens ?? 0;\n totalOut += interaction.usage.total_output_tokens ?? 0;\n }\n\n // Collect text\n allText += interactionText(interaction);\n\n // Collect function calls\n const fnCalls = functionCallSteps(interaction);\n\n if (fnCalls.length === 0) break;\n\n // Execute tools and build function_result inputs\n const results: Interactions.FunctionResultStep[] = [];\n for (const fc of fnCalls) {\n const tool = tools.find((t) => t.name === fc.name);\n if (!tool) {\n results.push({\n type: 'function_result',\n call_id: fc.id,\n name: fc.name,\n result: JSON.stringify({ error: `Tool '${fc.name}' not found` }),\n is_error: true,\n });\n continue;\n }\n const result = await tool.handler(toolArgsToJsonObject(fc.arguments));\n results.push({\n type: 'function_result',\n call_id: fc.id,\n name: fc.name,\n result: result.content.map((c) => c.text).join('\\n'),\n });\n }\n\n // Next turn: only send function results — server has the history\n interaction = await this.apiCall(() =>\n client.interactions.create({\n model: this.resolveModel(model),\n previous_interaction_id: interaction.id,\n input: results,\n }),\n );\n }\n\n return {\n text: allText,\n inputTokens: totalIn,\n outputTokens: totalOut,\n turnsUsed,\n };\n }\n}\n\n// =============================================================================\n// OpenRouterAgent\n// =============================================================================\n\nexport class OpenRouterAgent extends LLMAgent {\n readonly provider = 'openrouter' as const;\n\n // Client-side session history — system prompt sent once, subsequent\n // callTools() calls append to the conversation without re-sending it.\n private sessionMessages: import('../adapters/openrouter/types').OpenRouterMessage[] = [];\n\n protected resolveModel(model: string): string {\n // Strip 'openrouter/' prefix — OpenRouter API expects 'provider/model'\n // e.g., 'openrouter/anthropic/claude-3.5-sonnet' → 'anthropic/claude-3.5-sonnet'\n return model.startsWith('openrouter/')\n ? model.slice('openrouter/'.length)\n : model;\n }\n\n override resetSession(): void {\n super.resetSession();\n this.sessionMessages = [];\n }\n\n protected async createClient(): Promise<unknown> {\n const { OpenRouterClient } = await import('../adapters/openrouter/client');\n return new OpenRouterClient({\n apiKey: this.routeOverride?.apiKey ?? process.env.OPENROUTER_API_KEY!,\n });\n }\n\n async callText(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n maxTokens?: number,\n temperature?: number,\n ): Promise<LLMResponse> {\n type Client = import('../adapters/openrouter/client').OpenRouterClient;\n const client = await this.getClient<Client>();\n const resolved = this.resolveModel(model);\n\n const response = await this.apiCall(() =>\n client.chatCompletion({\n model: resolved,\n messages: [\n { role: 'system', content: systemPrompt },\n { role: 'user', content: userPrompt },\n ],\n max_tokens: maxTokens ?? 4096,\n ...(temperature !== undefined && { temperature }),\n }),\n );\n\n const text = response.choices[0]?.message.content ?? '';\n return {\n text,\n inputTokens: response.usage.prompt_tokens,\n outputTokens: response.usage.completion_tokens,\n sampling: { temperature: temperature ?? 'provider-default' },\n };\n }\n\n async callTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMToolDef[],\n toolChoice?: 'required' | 'auto',\n _scopedTools?: LLMToolDef[],\n ): Promise<LLMToolCallResponse> {\n type Client = import('../adapters/openrouter/client').OpenRouterClient;\n const client = await this.getClient<Client>();\n const resolved = this.resolveModel(model);\n\n const orTools = tools.map((t) => ({\n type: 'function' as const,\n function: { name: t.name, description: t.description, parameters: t.parameters },\n }));\n\n // Build messages — first call sends system prompt, subsequent calls reuse session\n if (this.sessionMessages.length === 0) {\n this.sessionMessages.push({ role: 'system', content: systemPrompt });\n }\n this.sessionMessages.push({ role: 'user', content: userPrompt });\n\n const response = await this.apiCall(() =>\n client.chatCompletion({\n model: resolved,\n messages: this.sessionMessages,\n tools: orTools,\n tool_choice: toolChoice ?? 'auto',\n }),\n );\n\n // Append assistant response to session history\n const choice = response.choices[0];\n if (choice?.message) {\n this.sessionMessages.push({\n role: 'assistant',\n content: choice.message.content,\n tool_calls: choice.message.tool_calls,\n });\n }\n\n const toolCalls = (choice?.message.tool_calls ?? []).map((tc) => ({\n id: tc.id,\n name: tc.function.name,\n input: JSON.parse(tc.function.arguments || '{}') as JsonObject,\n }));\n\n return {\n toolCalls,\n inputTokens: response.usage.prompt_tokens,\n outputTokens: response.usage.completion_tokens,\n };\n }\n\n override async sendToolResult(results: LLMToolResult[]): Promise<void> {\n // Append tool results to session history — proper chat contract\n for (const r of results) {\n this.sessionMessages.push({\n role: 'tool',\n tool_call_id: r.callId,\n content: r.result,\n });\n }\n }\n\n async callWithTools(\n model: string,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMTool[],\n maxTurns: number,\n ): Promise<LLMWithToolsResponse> {\n type Client = import('../adapters/openrouter/client').OpenRouterClient;\n const client = await this.getClient<Client>();\n const resolved = this.resolveModel(model);\n\n const orTools = tools.map((t) => ({\n type: 'function' as const,\n function: { name: t.name, description: t.description, parameters: t.parameters },\n }));\n\n type ORMessage = import('../adapters/openrouter/types').OpenRouterMessage;\n const messages: ORMessage[] = [\n { role: 'system', content: systemPrompt },\n { role: 'user', content: userPrompt },\n ];\n\n let totalInput = 0;\n let totalOutput = 0;\n let turnsUsed = 0;\n let finalText = '';\n\n for (let turn = 0; turn < maxTurns; turn++) {\n turnsUsed = turn + 1;\n\n const response = await this.apiCall(() =>\n client.chatCompletion({\n model: resolved,\n messages: messages as import('../adapters/openrouter/types').OpenRouterMessage[],\n tools: orTools,\n tool_choice: 'auto',\n }),\n );\n\n totalInput += response.usage.prompt_tokens;\n totalOutput += response.usage.completion_tokens;\n\n const choice = response.choices[0];\n if (!choice) break;\n\n if (choice.message.content) {\n finalText = choice.message.content;\n }\n\n const toolCalls = choice.message.tool_calls;\n if (!toolCalls || toolCalls.length === 0) break;\n\n messages.push({\n role: 'assistant',\n content: choice.message.content,\n tool_calls: toolCalls,\n });\n\n for (const tc of toolCalls) {\n const toolDef = tools.find((t) => t.name === tc.function.name);\n let resultText: string;\n if (!toolDef) {\n resultText = JSON.stringify({ error: `Tool '${tc.function.name}' not found` });\n } else {\n const args = JSON.parse(tc.function.arguments || '{}') as JsonObject;\n const result = await toolDef.handler(args);\n resultText = result.content.map((c) => c.text).join('\\n');\n }\n messages.push({ role: 'tool', tool_call_id: tc.id, content: resultText });\n }\n }\n\n return { text: finalText, inputTokens: totalInput, outputTokens: totalOutput, turnsUsed };\n }\n}\n\n// =============================================================================\n// Agent Registry\n// =============================================================================\n\n/**\n * Create a fresh agent instance for the given provider.\n * Each call returns a new instance — no shared state between callers.\n *\n * Accepts either a bare provider string (every pre-existing call\n * site — the agent falls back to reading its provider's env var(s)\n * directly) or a full {@link AgentConfig}, whose `routeOverride`\n * (when present) is threaded into the constructed agent so it never\n * touches `process.env`.\n */\nexport function createAgent(provider: AgentConfig['provider']): LLMAgent;\nexport function createAgent(config: AgentConfig): LLMAgent;\nexport function createAgent(providerOrConfig: AgentConfig['provider'] | AgentConfig): LLMAgent {\n const provider =\n typeof providerOrConfig === 'string' ? providerOrConfig : providerOrConfig.provider;\n const routeOverride =\n typeof providerOrConfig === 'string' ? undefined : providerOrConfig.routeOverride;\n const onRetry = typeof providerOrConfig === 'string' ? undefined : providerOrConfig.onRetry;\n switch (provider) {\n case 'anthropic':\n return new AnthropicAgent(routeOverride, onRetry);\n case 'openai':\n return new OpenAIAgent(routeOverride, onRetry);\n case 'google':\n return new GoogleAgent(routeOverride, onRetry);\n case 'openrouter':\n return new OpenRouterAgent(routeOverride, onRetry);\n }\n}\n\n/** Providers whose agent implements {@link VisionAgent}. */\nexport type VisionProvider = 'anthropic' | 'google';\n\n/**\n * Construct an agent for a multimodal (image + text) call. Same\n * threading contract as {@link createAgent} — `routeOverride` and\n * `onRetry` from the config reach the constructed agent — with the\n * provider narrowed to the ones whose SDK path supports vision input,\n * so the returned type carries `callVision` statically instead of\n * every caller re-proving it.\n */\nexport function createVisionAgent(\n config: AgentConfig & { provider: VisionProvider },\n): LLMAgent & VisionAgent {\n switch (config.provider) {\n case 'anthropic':\n return new AnthropicAgent(config.routeOverride, config.onRetry);\n case 'google':\n return new GoogleAgent(config.routeOverride, config.onRetry);\n }\n}\n\n// =============================================================================\n// Backward-compatible free functions\n// =============================================================================\n\nexport async function callLLM(\n config: AgentConfig,\n systemPrompt: string,\n userPrompt: string,\n maxTokens?: number,\n): Promise<LLMResponse> {\n const start = Date.now();\n const agent = createAgent(config);\n const result = await agent.callText(\n config.model,\n systemPrompt,\n userPrompt,\n maxTokens,\n config.temperature,\n );\n console.log(\n `[llm-router] ${config.provider}/${config.model} | ${Date.now() - start}ms | in=${result.inputTokens} out=${result.outputTokens}`,\n );\n return result;\n}\n\nexport async function callLLMWithTools(\n config: AgentConfig,\n systemPrompt: string,\n userPrompt: string,\n tools: LLMTool[],\n maxTurns: number = 10,\n): Promise<LLMWithToolsResponse> {\n const start = Date.now();\n const agent = createAgent(config);\n const result = await agent.callWithTools(\n config.model,\n systemPrompt,\n userPrompt,\n tools,\n maxTurns,\n );\n console.log(\n `[llm-router] agentic ${config.provider}/${config.model} | ${Date.now() - start}ms | turns=${result.turnsUsed} | in=${result.inputTokens} out=${result.outputTokens}`,\n );\n return result;\n}\n\n","// packages/ui-gen/src/evaluation/evaluator.ts\n//\n// Unified, provider-agnostic UI evaluation.\n//\n// One evaluation function that works with Claude, OpenAI, and Google.\n// Routes to the correct API based on config.provider.\n//\n// Responsibilities (things self_check CANNOT verify):\n// - Visual design quality, hierarchy, composition\n// - Interaction polish (hover, transitions, animations)\n// - Prompt completeness (does it match what was requested?)\n// - Data rendering quality (not just present, but well-formatted)\n//\n// Does NOT re-check (already handled by self_check):\n// - Hardcoded hex colors (self_check catches these)\n// - Raw pixel values (self_check catches these)\n// - Wrong imports (self_check catches these)\n// - Missing Props interface (self_check catches these)\n// - Null safety (TypeChecker strictNullChecks catches these)\n\nimport type { EvaluationConfig, EvaluationContext, EvaluationResult, DimensionScores, EvaluationIssue } from './types';\nimport { createAgent } from '../harness/llm-router';\nimport type { LLMToolDef } from '../harness/llm-router';\n\n// ---------------------------------------------------------------------------\n// Evaluation tool (structured output via tool calling)\n// ---------------------------------------------------------------------------\n\nconst EVAL_TOOL: LLMToolDef = {\n name: \"submit_evaluation\",\n description: \"Submit the UI quality evaluation scores and feedback.\",\n parameters: {\n type: \"object\",\n properties: {\n completeness: { type: \"number\", description: \"0-100: Does the component implement ALL features from the prompt?\" },\n visualDesign: { type: \"number\", description: \"0-100: Layout, visual hierarchy, spacing, polished appearance\" },\n interactivity: { type: \"number\", description: \"0-100: Hover/focus states, transitions, form validation, loading states\" },\n accessibility: { type: \"number\", description: \"0-100: Semantic HTML, ARIA labels, keyboard navigation, contrast\" },\n codeQuality: { type: \"number\", description: \"0-100: Clean structure, state management, event handlers, defaults\" },\n issues: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n dimension: { type: \"string\" },\n severity: { type: \"string\", description: \"critical, major, or minor\" },\n description: { type: \"string\" },\n fix: { type: \"string\" },\n },\n required: [\"dimension\", \"severity\", \"description\", \"fix\"],\n },\n description: \"List of specific issues found\",\n },\n critique: { type: \"string\", description: \"2-3 sentences: what's good and what needs improvement\" },\n },\n required: [\"completeness\", \"visualDesign\", \"interactivity\", \"accessibility\", \"codeQuality\", \"issues\", \"critique\"],\n },\n};\n\n// ---------------------------------------------------------------------------\n// Unified evaluation prompt\n// ---------------------------------------------------------------------------\n\nconst EVAL_SYSTEM_PROMPT = `You are a UI quality evaluator for ggui-generated React components.\n\nThe code has ALREADY passed automated checks for:\n- Design token usage (no hardcoded colors/spacing)\n- Import constraints (only react + @ggui-ai/design)\n- TypeScript types (Props interface, null safety)\n- Compilation + render smoke test\n\nDo NOT penalize for things the automated checks already cover. Focus ONLY on quality aspects that require human judgment.\n\n## Dimensions (score each 0-100)\n\n1. **completeness** (25%): Does the component implement ALL features from the original prompt? Are all requested UI elements present? Does it use ALL props from the contract (especially nested fields in arrays)?\n\n2. **visualDesign** (25%): Is the layout well-composed? Clear visual hierarchy (headings > subheadings > body)? Good use of whitespace and spacing? Proper use of primitive variants (primary for CTAs, outline for secondary, ghost for tertiary)? Professional, polished appearance?\n\n3. **interactivity** (20%): Are interactive elements polished? Hover/focus states on buttons and links? Smooth transitions (200ms ease)? Form validation with inline errors? Disabled states during submission? Loading indicators? Keyboard navigation?\n\n4. **accessibility** (15%): Semantic HTML (headings, lists, landmarks)? ARIA labels on inputs and interactive elements? Keyboard-navigable? Focus management? Readable text contrast?\n\n5. **codeQuality** (15%): Clean component structure? Proper state management? Event handlers wired correctly? No unnecessary re-renders? Default prop values for all optional props?\n\n## Scoring Scale\n\n- 90-100: Production-ready. Polished layout, smooth interactions, full accessibility, clean code.\n- 80-89: Good. Minor improvements needed (a missing hover state, slightly tight spacing).\n- 70-79: Acceptable. Works correctly but lacks polish (no transitions, generic layout).\n- 60-69: Below standard. Missing features, poor layout, no interactive states.\n- Below 60: Broken or fundamentally incomplete.\n\nCall the \\`submit_evaluation\\` tool with your scores, issues, and critique.`;\n\n// ---------------------------------------------------------------------------\n// Provider-agnostic evaluation\n// ---------------------------------------------------------------------------\n\n/**\n * Run a single evaluation round using any LLM provider.\n *\n * Provider-agnostic: routes to Claude, OpenAI, or Google API based on config.provider.\n * Falls back to Claude if no provider is specified.\n */\nexport async function runEvaluation(\n context: EvaluationContext,\n config: EvaluationConfig,\n): Promise<EvaluationResult> {\n const providerName = config.provider ?? 'claude';\n const model = config.model || getDefaultEvalModel(providerName);\n const routerProvider = providerName === 'claude' ? 'anthropic' as const : providerName as 'openai' | 'google' | 'openrouter';\n\n const userPrompt = buildEvalUserPrompt(context);\n const agent = createAgent(routerProvider);\n\n // Use tool calling for structured output — no JSON parsing needed\n const response = await agent.callTools(\n model,\n EVAL_SYSTEM_PROMPT,\n userPrompt,\n [EVAL_TOOL],\n 'required',\n );\n\n const call = response.toolCalls[0];\n if (!call) {\n throw new Error('Evaluator did not return a tool call');\n }\n\n const raw = call.input as Record<string, unknown>;\n return buildEvalResult(raw, config.passThreshold, response.inputTokens, response.outputTokens);\n}\n\n// ---------------------------------------------------------------------------\n// (Provider routing removed — uses LLM router via createAgent/callTools)\n// ---------------------------------------------------------------------------\n\n\n\n// ---------------------------------------------------------------------------\n// User prompt builder\n// ---------------------------------------------------------------------------\n\nfunction buildEvalUserPrompt(context: EvaluationContext): string {\n const parts: string[] = [];\n\n parts.push(`## Original Request\\n${context.originalPrompt}`);\n\n if (context.designContext) {\n parts.push(`## App Design Context\\n${context.designContext}`);\n }\n\n parts.push(`## Source Code\\n\\`\\`\\`tsx\\n${context.sourceCode.slice(0, 10000)}\\n\\`\\`\\``);\n\n return parts.join('\\n\\n');\n}\n\n// ---------------------------------------------------------------------------\n// Response parsing\n// ---------------------------------------------------------------------------\n\n/**\n * Build EvaluationResult from tool call input (structured data, no JSON parsing).\n */\nfunction buildEvalResult(\n raw: Record<string, unknown>,\n passThreshold: number,\n inputTokens: number,\n outputTokens: number,\n): EvaluationResult {\n const dimensions: DimensionScores = {\n completeness: (raw.completeness as number) ?? 0,\n visualPolish: (raw.visualDesign as number) ?? (raw.visualPolish as number) ?? 0,\n interactivity: (raw.interactivity as number) ?? 0,\n accessibility: (raw.accessibility as number) ?? 0,\n codeQuality: (raw.codeQuality as number) ?? 0,\n };\n\n const weights = {\n completeness: 0.25,\n visualPolish: 0.25,\n interactivity: 0.20,\n accessibility: 0.15,\n codeQuality: 0.15,\n };\n\n const finalScore = Math.round(\n dimensions.completeness * weights.completeness +\n dimensions.visualPolish * weights.visualPolish +\n dimensions.interactivity * weights.interactivity +\n dimensions.accessibility * weights.accessibility +\n dimensions.codeQuality * weights.codeQuality,\n );\n\n const rawIssues = (raw.issues ?? []) as Array<Record<string, string>>;\n const issues: EvaluationIssue[] = rawIssues.map((i) => ({\n dimension: i.dimension || 'unknown',\n severity: (i.severity as 'critical' | 'major' | 'minor') || 'minor',\n description: i.description || '',\n fix: i.fix || '',\n }));\n\n return {\n passed: finalScore >= passThreshold,\n finalScore,\n dimensions,\n issues,\n critique: raw.critique as string,\n inputTokens,\n outputTokens,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Default models per provider (cheapest/fastest)\n// ---------------------------------------------------------------------------\n\nfunction getDefaultEvalModel(provider: string): string {\n switch (provider) {\n case 'claude': return 'claude-haiku-4-5-20251001';\n case 'openai': return 'gpt-5.6-luna';\n case 'google': return 'gemini-3.5-flash-lite';\n default: return 'claude-haiku-4-5-20251001';\n }\n}\n","// packages/ui-gen/src/evaluation/message-parsing.ts\n\n/**\n * Shared message parsing utilities for extracting structured data from\n * Claude Agent SDK `query()` messages.\n *\n * These functions are used by evaluator.ts, loop.ts, and generator.ts\n * to capture tool results, source code, and session state from the\n * SDK message stream.\n */\n\nimport type { EvaluationResult } from './types';\n\n// ── SDK message type aliases ────────────────────────────────────────\n\n/** A single SDK message from the `query()` async iterator. */\nexport type SdkMessage = Record<string, unknown>;\n\n/** Content block inside a user or assistant message. */\ntype ContentBlock = Record<string, unknown>;\n\n/** A text item inside a tool_result content array. */\ninterface TextItem {\n type?: string;\n text?: string;\n}\n\n// ── Helpers ─────────────────────────────────────────────────────────\n\n/**\n * Extract tool_result text items from a user-type SDK message.\n * Returns an empty array if the message isn't a user message or has no tool results.\n */\nexport function extractToolResultTexts(message: SdkMessage): string[] {\n if ((message.type as string) !== 'user') return [];\n\n const texts: string[] = [];\n const innerMessage = message.message as SdkMessage | undefined;\n const messageContent = innerMessage?.content as ContentBlock[] | undefined;\n\n if (!Array.isArray(messageContent)) return texts;\n\n for (const contentItem of messageContent) {\n if (contentItem.type === 'tool_result') {\n const toolResultContent = contentItem.content as TextItem[] | undefined;\n if (Array.isArray(toolResultContent)) {\n for (const textItem of toolResultContent) {\n if (textItem.type === 'text' && textItem.text) {\n texts.push(textItem.text);\n }\n }\n }\n }\n }\n\n return texts;\n}\n\n// ── EvaluationResult extraction ─────────────────────────────────────\n\n/**\n * Extract an `EvaluationResult` from an array of SDK messages.\n *\n * Scans for user messages containing a tool_result with JSON that has\n * `finalScore` (number) and `dimensions` fields. Returns the last\n * matching result, or `undefined` if none found.\n *\n * Used by: evaluator.ts\n */\nexport function extractEvalResult(messages: SdkMessage[]): EvaluationResult | undefined {\n let evalResult: EvaluationResult | undefined;\n\n for (const message of messages) {\n const msgStr = JSON.stringify(message);\n if (!msgStr.includes('finalScore') || !msgStr.includes('dimensions')) continue;\n\n for (const text of extractToolResultTexts(message)) {\n if (!text.includes('finalScore')) continue;\n try {\n const parsed = JSON.parse(text) as EvaluationResult;\n if (typeof parsed.finalScore === 'number' && parsed.dimensions) {\n evalResult = parsed;\n }\n } catch {\n // Not valid JSON\n }\n }\n }\n\n return evalResult;\n}\n\n// ── compiledCode extraction ─────────────────────────────────────────\n\n/**\n * Extract `compiledCode` from a single SDK message.\n *\n * Tries two strategies:\n * 1. Regex extraction from the full serialized message (fallback)\n * 2. Structured extraction from user/tool_result content\n *\n * Returns the extracted code or `undefined`.\n *\n * Used by: loop.ts, generator.ts\n */\nexport function extractCompiledCodeFromMessage(message: SdkMessage): string | undefined {\n const msgStr = JSON.stringify(message);\n if (!msgStr.includes('compiledCode')) return undefined;\n\n // Strategy 1: Regex fallback (catches compiledCode in any position)\n let regexCode: string | undefined;\n const match = msgStr.match(/\"compiledCode\"\\s*:\\s*\"([^\"\\\\]*(\\\\.[^\"\\\\]*)*)\"/);\n if (match) {\n try {\n regexCode = JSON.parse(`\"${match[1]}\"`);\n } catch {\n // Not parseable\n }\n }\n\n // Strategy 2: Structured extraction from tool_result\n for (const text of extractToolResultTexts(message)) {\n if (!text.includes('compiledCode')) continue;\n try {\n const parsed = JSON.parse(text);\n if (parsed.success && parsed.compiledCode) {\n return parsed.compiledCode; // Prefer structured over regex\n }\n } catch {\n // Not JSON\n }\n }\n\n return regexCode;\n}\n\n// ── sourceCode extraction ───────────────────────────────────────────\n\n/**\n * Extract source code from an assistant's Write tool_use message.\n *\n * Looks for `tool_use` blocks with `name === 'Write'` and returns\n * the `input.content` string. If multiple Write calls exist, returns\n * the last one (the final version).\n *\n * Used by: loop.ts, generator.ts\n */\nexport function extractSourceCodeFromMessage(message: SdkMessage): string | undefined {\n if ((message.type as string) !== 'assistant') return undefined;\n\n let sourceCode: string | undefined;\n const betaMessage = message.message as SdkMessage | undefined;\n const content = betaMessage?.content as ContentBlock[] | undefined;\n\n if (!Array.isArray(content)) return undefined;\n\n for (const block of content) {\n if (block.type === 'tool_use' && block.name === 'Write') {\n const input = block.input as { content?: string } | undefined;\n if (input?.content) {\n sourceCode = input.content;\n }\n }\n }\n\n return sourceCode;\n}\n\n// ── Batch helpers ───────────────────────────────────────────────────\n\n/**\n * Scan all messages for the last compiledCode value.\n *\n * Convenience wrapper for tests and one-shot extraction.\n */\nexport function extractCompiledCode(messages: SdkMessage[]): string | undefined {\n let compiledCode: string | undefined;\n for (const message of messages) {\n const code = extractCompiledCodeFromMessage(message);\n if (code) compiledCode = code;\n }\n return compiledCode;\n}\n\n/**\n * Scan all messages for the last sourceCode from Write tool_use.\n *\n * Convenience wrapper for tests and one-shot extraction.\n */\nexport function extractSourceCode(messages: SdkMessage[]): string | undefined {\n let sourceCode: string | undefined;\n for (const message of messages) {\n const code = extractSourceCodeFromMessage(message);\n if (code) sourceCode = code;\n }\n return sourceCode;\n}\n","// packages/ui-gen/src/evaluation/prompts.ts\n\nimport type { EvaluationResult } from './types';\n\n/**\n * System prompt for the evaluator agent.\n * Static/cacheable — defines rubric, dimensions, and workflow.\n */\nexport function getEvaluatorSystemPrompt(): string {\n return `# UI Component Evaluator\n\nYou evaluate ggui-generated React components. You MUST call the \\`evaluate_score\\` tool — this is your only task. Do NOT write any text before calling the tool. Analyze the code silently, then immediately call \\`evaluate_score\\` with your scores and issues.\n\n## Dimensions (score each 0-100)\n\n- **Completeness**: All requested features present and functional\n- **Visual Polish**: Layout, spacing, design token usage, DESIGN.md compliance\n- **Interactivity**: Event handlers, state management, callbacks working\n- **Accessibility**: ARIA labels, keyboard nav, semantic HTML, contrast\n- **Code Quality**: Clean structure, proper primitives, no dead code, single default export GeneratedComponent\n\n## Scoring Scale\n\n- 90-100: Excellent, production-ready\n- 70-89: Good, minor improvements possible\n- 50-69: Needs work\n- 30-49: Poor\n- 0-29: Fundamentally broken\n\n## Issue Severities\n\n- **critical**: Missing core features, broken functionality, security problems\n- **major**: Poor accessibility, layout bugs, missing error handling\n- **minor**: Style inconsistencies, naming conventions\n\nIMPORTANT: Call the \\`evaluate_score\\` tool immediately. Do not write analysis text first.`;\n}\n\n/**\n * Build the fix prompt to resume the generator session with evaluation feedback.\n * Issues are grouped by severity (critical first) so the generator prioritizes correctly.\n */\nexport function buildFixPrompt(evalResult: EvaluationResult, originalPrompt: string): string {\n let prompt = `## Evaluation Feedback — Fix Required\n\nYour generated component was evaluated and scored **${evalResult.finalScore}/100** (threshold: 70).\n\n### Scores\n| Dimension | Score |\n|-----------|-------|\n| Completeness | ${evalResult.dimensions.completeness} |\n| Visual Polish | ${evalResult.dimensions.visualPolish} |\n| Interactivity | ${evalResult.dimensions.interactivity} |\n| Accessibility | ${evalResult.dimensions.accessibility} |\n| Code Quality | ${evalResult.dimensions.codeQuality} |\n`;\n\n if (evalResult.critique) {\n prompt += `\n### Overall Critique\n${evalResult.critique}\n`;\n }\n\n // Group issues by severity\n const critical = evalResult.issues.filter((i) => i.severity === 'critical');\n const major = evalResult.issues.filter((i) => i.severity === 'major');\n const minor = evalResult.issues.filter((i) => i.severity === 'minor');\n\n if (critical.length > 0) {\n prompt += `\n### Critical Issues (must fix)\n${critical.map((i) => `- **[${i.dimension}]** ${i.description}\\n Fix: ${i.fix}`).join('\\n')}\n`;\n }\n\n if (major.length > 0) {\n prompt += `\n### Major Issues (should fix)\n${major.map((i) => `- **[${i.dimension}]** ${i.description}\\n Fix: ${i.fix}`).join('\\n')}\n`;\n }\n\n if (minor.length > 0) {\n prompt += `\n### Minor Issues (nice to fix)\n${minor.map((i) => `- **[${i.dimension}]** ${i.description}\\n Fix: ${i.fix}`).join('\\n')}\n`;\n }\n\n prompt += `\n### Instructions\n\nFix the issues above, prioritizing critical and major issues. The original request was:\n\n> ${originalPrompt}\n\nAfter fixing, re-validate and re-compile the component. Write the updated code to Component.tsx, validate it, and compile it.`;\n\n return prompt;\n}\n","// packages/ui-gen/src/evaluation/types.ts\n\n/**\n * Per-dimension quality scores from the evaluator (0-100 each).\n */\nexport interface DimensionScores {\n /** How well the component fulfills the original prompt requirements */\n completeness: number;\n /** Visual quality: layout, typography, spacing, color usage */\n visualPolish: number;\n /** Interaction quality: hover states, transitions, form validation */\n interactivity: number;\n /** Accessibility: ARIA labels, keyboard navigation, contrast ratios */\n accessibility: number;\n /** Code quality: TypeScript types, clean structure, no anti-patterns */\n codeQuality: number;\n}\n\n/**\n * A specific issue found during evaluation.\n */\nexport interface EvaluationIssue {\n /** Which quality dimension this issue belongs to */\n dimension: string;\n /** Human-readable description of what is wrong */\n description: string;\n /** Severity level: critical blocks shipping, major degrades quality, minor is a polish issue */\n severity: 'critical' | 'major' | 'minor';\n /** Suggested fix for the agent to apply */\n fix: string;\n}\n\n/**\n * Result of a single evaluation round.\n */\nexport interface EvaluationResult {\n /** Whether the component passed the quality threshold */\n passed: boolean;\n /** Weighted average score across all dimensions (0-100) */\n finalScore: number;\n /** Per-dimension score breakdown */\n dimensions: DimensionScores;\n /** Specific issues identified in this round */\n issues: EvaluationIssue[];\n /** Free-form critique text from the evaluator LLM */\n critique?: string;\n /** Input tokens consumed by the evaluation LLM call */\n inputTokens?: number;\n /** Output tokens consumed by the evaluation LLM call */\n outputTokens?: number;\n}\n\n/**\n * Quality metadata attached to every generated component\n */\nexport interface QualityMetadata {\n /** Number of evaluation rounds run (0 = strict/no eval) */\n evaluationRounds: number;\n /** Final average score 0-100 */\n finalScore: number;\n /** Per-dimension breakdown */\n dimensions: DimensionScores;\n /** Whether the component passed (score >= threshold) */\n passed: boolean;\n /** Model used for evaluation */\n evaluatorModel: string;\n /** Total evaluation loop time in ms */\n evaluationTimeMs: number;\n /** S3 keys for screenshots (creative only) */\n screenshots?: string[];\n}\n\n/** Hard ceiling for evaluation rounds — never exceed this regardless of config */\nexport const MAX_EVAL_ROUNDS_HARD_LIMIT = 10;\n\n/** Default (soft) max rounds for the balanced strategy */\nexport const DEFAULT_EVAL_MAX_ROUNDS = 10;\n\n/**\n * Configuration for the evaluation loop\n */\nexport interface EvaluationConfig {\n /** Whether evaluation is enabled */\n enabled: boolean;\n /** Model to use for evaluation (default: provider's default) */\n model?: string;\n /** LLM provider for evaluation (default: same as generation provider) */\n provider?: 'claude' | 'openai' | 'google' | 'openrouter';\n /** Minimum average score to pass (default: 70) */\n passThreshold: number;\n /** Maximum evaluation rounds (soft max: 3, hard limit: 5) */\n maxRounds?: number;\n /** Budget cap per evaluation round in USD */\n maxBudgetPerEval?: number;\n /** Budget cap per fix round in USD */\n maxBudgetPerFix?: number;\n}\n\n/**\n * Context passed to the evaluator\n */\nexport interface EvaluationContext {\n /** TSX source code written by the generator */\n sourceCode: string;\n /** Compiled JavaScript output */\n compiledCode: string;\n /** Original user prompt */\n originalPrompt: string;\n /** DESIGN.md content (if present) */\n designContext?: string;\n /** CSS variable tokens for the app theme */\n themeTokens: string;\n}\n","// packages/ui-gen/src/evaluation/loop.ts\n\nimport { query, type McpServerConfig } from '@anthropic-ai/claude-agent-sdk';\nimport { runEvaluation } from './evaluator';\nimport {\n extractCompiledCodeFromMessage,\n extractSourceCodeFromMessage,\n} from './message-parsing';\nimport { buildFixPrompt } from './prompts';\nimport {\n MAX_EVAL_ROUNDS_HARD_LIMIT,\n} from './types';\nimport type {\n EvaluationConfig,\n EvaluationContext,\n EvaluationResult,\n QualityMetadata,\n} from './types';\nimport type { SdkMessage } from './message-parsing';\n\n/**\n * Options for running the evaluation loop.\n *\n * Controls the evaluate-fix-re-evaluate cycle that improves generated\n * component quality until it passes or the round limit is reached.\n */\nexport interface EvaluationLoopOptions {\n /** Session ID of the generator to resume for fixes */\n generatorSessionId: string;\n /** Evaluation context (code, prompt, design, theme) */\n context: EvaluationContext;\n /** Evaluation configuration (thresholds, budgets, round limits) */\n config: EvaluationConfig;\n /** Progress callback for evaluating/fixing status updates */\n onProgress?: (event: { type: 'evaluating' | 'fixing'; round: number }) => void;\n /** Generator context to pass when resuming the session for fixes */\n generatorOptions?: {\n /** Working directory for the generator session */\n cwd?: string;\n /** MCP servers available to the fix agent */\n mcpServers?: Record<string, McpServerConfig>;\n /** Tools the fix agent is allowed to call */\n allowedTools?: string[];\n /** LLM model for fix rounds */\n model?: string;\n /** Environment variables (includes BYOK credentials) */\n env?: Record<string, string>;\n /** Stderr capture callback for debugging */\n stderr?: (data: string) => void;\n };\n}\n\n/**\n * Result of the evaluation loop.\n *\n * Contains the final (possibly fixed) code, quality scores, and\n * the evaluation history from each round.\n */\nexport interface EvaluationLoopResult {\n /** Final compiled code (may be updated by fix rounds) */\n finalCode: string;\n /** Final source code (may be updated by fix rounds) */\n finalSourceCode?: string;\n /** Quality metadata for the generation result */\n qualityMetadata: QualityMetadata;\n /** All evaluation results from each round */\n evaluationResults: EvaluationResult[];\n}\n\n/**\n * Run the evaluation loop: evaluate -> fix -> re-evaluate (up to maxRounds).\n *\n * If the first evaluation passes, returns immediately.\n * If it fails, resumes the generator session with critique feedback,\n * captures the fixed code, and re-evaluates. Repeats until the score\n * passes or the round limit is reached.\n *\n * @param options - Evaluation loop configuration and callbacks\n * @returns The final code, quality metadata, and evaluation history\n */\nexport async function runEvaluationLoop(\n options: EvaluationLoopOptions\n): Promise<EvaluationLoopResult> {\n const { generatorSessionId, context, config, onProgress, generatorOptions } = options;\n const startTime = Date.now();\n const evaluationResults: EvaluationResult[] = [];\n\n let currentCode = context.compiledCode;\n let currentSourceCode: string | undefined = context.sourceCode;\n let round = 0;\n const maxRounds = Math.min(config.maxRounds ?? 3, MAX_EVAL_ROUNDS_HARD_LIMIT);\n\n while (round < maxRounds) {\n round++;\n\n // --- Evaluate ---\n onProgress?.({ type: 'evaluating', round });\n console.log(`[eval] Round ${round}: evaluating...`);\n\n const evalContext: EvaluationContext = {\n ...context,\n compiledCode: currentCode,\n sourceCode: currentSourceCode || context.sourceCode,\n };\n const evalResult = await runEvaluation(evalContext, config);\n evaluationResults.push(evalResult);\n\n console.log(\n `[eval] Round ${round}: score=${evalResult.finalScore}, passed=${evalResult.passed}, issues=${evalResult.issues.length}`\n );\n\n // If passed or last round, we're done\n if (evalResult.passed || round >= maxRounds) {\n break;\n }\n\n // --- Fix ---\n onProgress?.({ type: 'fixing', round });\n console.log(`[eval] Round ${round}: fixing...`);\n\n const fixPrompt = buildFixPrompt(evalResult, context.originalPrompt);\n\n // Get custom CLI path from environment (for Docker deployments)\n const cliPath = process.env.CLAUDE_WRAPPER_PATH;\n\n // Build environment — use BYOK-enriched env from generator if provided\n const env: Record<string, string> = {};\n if (generatorOptions?.env) {\n Object.assign(env, generatorOptions.env);\n } else {\n for (const [key, value] of Object.entries(process.env)) {\n if (value !== undefined) {\n env[key] = value;\n }\n }\n }\n\n let fixedCompiledCode: string | undefined;\n let fixedSourceCode: string | undefined;\n\n for await (const message of query({\n prompt: fixPrompt,\n options: {\n resume: generatorSessionId,\n maxTurns: 15,\n maxBudgetUsd: config.maxBudgetPerFix,\n env,\n permissionMode: 'bypassPermissions',\n allowDangerouslySkipPermissions: true,\n ...(cliPath && { pathToClaudeCodeExecutable: cliPath }),\n ...(generatorOptions?.cwd && { cwd: generatorOptions.cwd }),\n ...(generatorOptions?.mcpServers && { mcpServers: generatorOptions.mcpServers }),\n ...(generatorOptions?.allowedTools && { allowedTools: generatorOptions.allowedTools }),\n ...(generatorOptions?.model && { model: generatorOptions.model }),\n ...(generatorOptions?.stderr && { stderr: generatorOptions.stderr }),\n },\n })) {\n const msg = message as SdkMessage;\n\n // Capture fixed compiledCode\n const compiled = extractCompiledCodeFromMessage(msg);\n if (compiled) fixedCompiledCode = compiled;\n\n // Capture source code from Write tool\n const source = extractSourceCodeFromMessage(msg);\n if (source) fixedSourceCode = source;\n }\n\n // Update current code if fix produced new output\n if (fixedCompiledCode) {\n currentCode = fixedCompiledCode;\n console.log(`[eval] Round ${round}: fixed code captured (${currentCode.length} bytes)`);\n }\n if (fixedSourceCode) {\n currentSourceCode = fixedSourceCode;\n }\n }\n\n const lastResult = evaluationResults[evaluationResults.length - 1];\n const evaluationTimeMs = Date.now() - startTime;\n\n const qualityMetadata: QualityMetadata = {\n evaluationRounds: evaluationResults.length,\n finalScore: lastResult.finalScore,\n dimensions: lastResult.dimensions,\n passed: lastResult.passed,\n evaluatorModel: config.model ?? 'default',\n evaluationTimeMs,\n };\n\n return {\n finalCode: currentCode,\n finalSourceCode: currentSourceCode,\n qualityMetadata,\n evaluationResults,\n };\n}\n","// packages/ui-gen/src/evaluation/mcp-server.ts\n\nimport { createSdkMcpServer, tool } from '@anthropic-ai/claude-agent-sdk';\nimport { z } from 'zod';\nimport type { EvaluationIssue, EvaluationResult } from './types';\n\n/**\n * Input args for the evaluate_score computation.\n * Extracted so unit tests can call the real logic directly.\n */\nexport interface EvaluateScoreInput {\n completeness: number;\n visualPolish: number;\n interactivity: number;\n accessibility: number;\n codeQuality: number;\n issues: EvaluationIssue[];\n critique?: string;\n}\n\n/**\n * Core scoring logic — extracted from the tool handler so it can be\n * unit-tested directly without going through MCP protocol.\n */\nexport function computeEvaluationScore(\n args: EvaluateScoreInput,\n passThreshold: number\n): EvaluationResult {\n const scores = [\n args.completeness,\n args.visualPolish,\n args.interactivity,\n args.accessibility,\n args.codeQuality,\n ];\n const average = scores.reduce((a, b) => a + b, 0) / scores.length;\n const finalScore = Math.round(average * 10) / 10;\n const passed = finalScore >= passThreshold;\n\n return {\n passed,\n finalScore,\n dimensions: {\n completeness: args.completeness,\n visualPolish: args.visualPolish,\n interactivity: args.interactivity,\n accessibility: args.accessibility,\n codeQuality: args.codeQuality,\n },\n issues: args.issues,\n ...(args.critique && { critique: args.critique }),\n };\n}\n\n/**\n * Create the evaluation MCP server with the evaluate_score tool.\n *\n * The evaluator LLM provides qualitative scores per dimension.\n * This tool handles the arithmetic (average, pass/fail) so the LLM\n * doesn't need to do math.\n */\nexport function createEvaluationToolsServer(passThreshold = 70) {\n return createSdkMcpServer({\n name: 'eval-tools',\n version: '1.0.0',\n tools: [\n tool(\n 'evaluate_score',\n 'Compute evaluation score from dimension ratings. Call this after analyzing the component code against all 5 dimensions.',\n {\n completeness: z.number().min(0).max(100).describe('Score for feature completeness (0-100)'),\n visualPolish: z.number().min(0).max(100).describe('Score for visual polish and design (0-100)'),\n interactivity: z.number().min(0).max(100).describe('Score for interactivity and state management (0-100)'),\n accessibility: z.number().min(0).max(100).describe('Score for accessibility (ARIA, keyboard nav, contrast) (0-100)'),\n codeQuality: z.number().min(0).max(100).describe('Score for code quality and structure (0-100)'),\n issues: z.array(\n z.object({\n dimension: z.string().describe('Which dimension this issue affects'),\n description: z.string().describe('What the issue is'),\n severity: z.enum(['critical', 'major', 'minor']).describe('Issue severity'),\n fix: z.string().describe('How to fix this issue'),\n })\n ).describe('List of specific issues found'),\n critique: z.string().optional().describe('Optional overall critique summary'),\n },\n async (args) => {\n const result = computeEvaluationScore(args, passThreshold);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n ),\n ],\n });\n}\n","// packages/ui-gen/src/evaluation/axis-checks/helpers.ts\n//\n// Shared contract inspection + source-scan helpers used by axis checks.\n// Ported from the retired mode-checks/ modules.\n\nimport type { ActionEntry, DataContract, JsonObject, JsonValue } from \"@ggui-ai/protocol\";\nimport {\n HOOK_NAME_RE,\n listContractGadgets,\n STDLIB_GADGETS_PACKAGE,\n} from \"@ggui-ai/protocol\";\nimport type { EvalIssue } from \"../types-public.js\";\n\n// =============================================================================\n// Contract shape helpers\n// =============================================================================\n\nexport interface PropShape {\n type?: string;\n required?: boolean;\n items?: { type?: string; properties?: Record<string, unknown> };\n schema?: {\n type?: string;\n items?: { type?: string; properties?: Record<string, unknown> };\n };\n}\n\nexport interface EntityCollection {\n name: string;\n idField: string;\n}\n\nexport interface SubmitAction {\n name: string;\n payloadKeys: string[];\n}\n\nconst ID_FIELD_CANDIDATES = [\"id\", \"uuid\", \"symbol\", \"key\", \"slug\", \"code\"];\n\nfunction getItemsProperties(p: PropShape): Record<string, unknown> | undefined {\n return p.items?.properties ?? p.schema?.items?.properties;\n}\n\nfunction inferIdField(itemProps: Record<string, unknown> | undefined): string {\n if (!itemProps) return \"id\";\n for (const cand of ID_FIELD_CANDIDATES) {\n if (cand in itemProps) return cand;\n }\n for (const [k, v] of Object.entries(itemProps)) {\n const vv = v as { type?: string; schema?: { type?: string } } | undefined;\n if (vv?.type === \"string\" || vv?.schema?.type === \"string\") return k;\n }\n return \"id\";\n}\n\nexport function getRequiredPropNames(contract?: DataContract): string[] {\n const propsField = contract?.propsSpec as\n | { properties?: Record<string, PropShape> }\n | undefined;\n const properties = propsField?.properties ?? {};\n return Object.entries(properties)\n .filter(([, p]) => p && typeof p === \"object\" && p.required === true)\n .map(([name]) => name);\n}\n\nexport function getActionNames(contract?: DataContract): string[] {\n return Object.keys(contract?.actionSpec ?? {});\n}\n\nexport function getStreamEventNames(contract?: DataContract): string[] {\n return Object.keys(contract?.streamSpec ?? {});\n}\n\n/**\n * Returns the local BINDING names the boilerplate emits for every\n * HOOK gadget the contract declares — `useGeolocation` → `geolocation`\n * (strip the `use` prefix, lowercase the first char). The wire\n * `clientCapabilities.gadgets` is package-keyed and carries only the\n * export NAME, not a separate binding name, so the binding is derived\n * here exactly as the boilerplate generator derives it.\n *\n * Component gadgets are excluded — they are rendered as JSX, not bound\n * to a `const`, so the `const <name> = …()` axis checks don't apply.\n *\n * The agentCapabilities.tools catalog has no parallel helper —\n * agent-side tools aren't component-side, so the axis checks don't\n * scan source for agent-tool bindings.\n */\nexport function getGadgetNames(contract?: DataContract): string[] {\n if (!contract) return [];\n return listContractGadgets(contract)\n .filter((use) => HOOK_NAME_RE.test(use.name))\n .map((use) =>\n use.name.length > 3\n ? use.name.charAt(3).toLowerCase() + use.name.slice(4)\n : use.name,\n );\n}\n\n/**\n * Like {@link getGadgetNames} but restricted to the first-party\n * `@ggui-ai/gadgets` stdlib package — the built-in browser capabilities\n * (`useGeolocation`, `useCamera`, …) that carry the `idle → prompting →\n * active` lifecycle and therefore need a `.start()` invocation.\n *\n * Registered third-party gadgets (e.g. `useBoardState` from\n * `@example/gadget-board`) are plain data hooks: the runtime resolves\n * them without a user gesture, so the `.start()` axis check must NOT\n * fire on them.\n */\nexport function getStdlibGadgetNames(contract?: DataContract): string[] {\n if (!contract) return [];\n return listContractGadgets(contract)\n .filter(\n (use) =>\n use.package === STDLIB_GADGETS_PACKAGE && HOOK_NAME_RE.test(use.name),\n )\n .map((use) =>\n use.name.length > 3\n ? use.name.charAt(3).toLowerCase() + use.name.slice(4)\n : use.name,\n );\n}\n\nexport function getEntityCollections(contract?: DataContract): EntityCollection[] {\n const propsField = contract?.propsSpec as\n | { properties?: Record<string, unknown> }\n | undefined;\n const properties = propsField?.properties ?? {};\n const entities: EntityCollection[] = [];\n for (const [name, p] of Object.entries(properties)) {\n if (!p || typeof p !== \"object\") continue;\n const pp = p as PropShape;\n const type = pp.type ?? pp.schema?.type;\n const items = pp.items ?? pp.schema?.items;\n if (type === \"array\" && items?.type === \"object\") {\n entities.push({ name, idField: inferIdField(getItemsProperties(pp)) });\n }\n }\n return entities;\n}\n\nfunction singularize(name: string): string {\n if (name.endsWith(\"ies\")) return name.slice(0, -3) + \"y\";\n if (name.endsWith(\"ses\")) return name.slice(0, -2);\n if (name.endsWith(\"s\") && !name.endsWith(\"ss\")) return name.slice(0, -1);\n return name;\n}\n\n/**\n * Entity collections that are actually mutated (referenced by a stream\n * event or by an action payload's entity-id key). Static reference lists\n * (e.g., kanban's `columns`) are excluded so they don't trigger\n * \"must be in useState\" false positives.\n */\nexport function getMutatedEntityCollections(\n contract: DataContract | undefined,\n allEntities: EntityCollection[],\n): EntityCollection[] {\n if (!contract) return allEntities;\n\n const actionSpec = contract.actionSpec ?? {};\n const streamSpec = contract.streamSpec ?? {};\n\n const hasStreams = Object.keys(streamSpec).length > 0;\n\n const referencedIdKeys = new Set<string>();\n for (const action of Object.values(actionSpec) as ActionEntry[]) {\n const ex = action.example;\n if (!ex || typeof ex !== \"object\" || Array.isArray(ex)) continue;\n for (const key of Object.keys(ex as JsonObject)) {\n if (key === \"id\" || key === \"key\" || key === \"index\") {\n referencedIdKeys.add(\"id\");\n referencedIdKeys.add(\"key\");\n referencedIdKeys.add(\"index\");\n } else if (/Id$/.test(key)) {\n referencedIdKeys.add(key.slice(0, -2).toLowerCase());\n }\n }\n }\n\n const mutated = allEntities.filter((e) =>\n referencedIdKeys.has(singularize(e.name).toLowerCase()),\n );\n\n if (mutated.length === 0 && hasStreams && allEntities.length > 0) {\n return [allEntities[0]];\n }\n return mutated.length > 0 ? mutated : allEntities;\n}\n\nfunction countScalarKeys(example: unknown): string[] {\n if (!example || typeof example !== \"object\" || Array.isArray(example)) return [];\n const keys: string[] = [];\n for (const [k, v] of Object.entries(example as Record<string, unknown>)) {\n const t = typeof v;\n if (t === \"string\" || t === \"number\" || t === \"boolean\") keys.push(k);\n }\n return keys;\n}\n\nexport function getSubmitActions(contract?: DataContract): SubmitAction[] {\n const actionSpec = contract?.actionSpec ?? {};\n const result: SubmitAction[] = [];\n for (const [name, action] of Object.entries(actionSpec) as Array<[string, ActionEntry]>) {\n const ex: JsonValue | undefined = action.example;\n const scalarKeys = countScalarKeys(ex);\n if (scalarKeys.length < 3) continue;\n const allKeys = ex && typeof ex === \"object\" && !Array.isArray(ex)\n ? Object.keys(ex as JsonObject)\n : scalarKeys;\n result.push({ name, payloadKeys: allKeys });\n }\n return result;\n}\n\nexport function getArrStrProps(contract?: DataContract): string[] {\n const propsField = contract?.propsSpec as\n | { properties?: Record<string, unknown> }\n | undefined;\n const properties = propsField?.properties ?? {};\n const names: string[] = [];\n for (const [name, p] of Object.entries(properties)) {\n if (!p || typeof p !== \"object\") continue;\n const pp = p as PropShape;\n const type = pp.type ?? pp.schema?.type;\n const items = pp.items ?? pp.schema?.items;\n if (type === \"array\" && items?.type === \"string\") names.push(name);\n }\n return names;\n}\n\nexport function getInitialValuePropNames(contract?: DataContract): string[] {\n const propsField = contract?.propsSpec as\n | { properties?: Record<string, unknown> }\n | undefined;\n const properties = propsField?.properties ?? {};\n const names: string[] = [];\n for (const [name, p] of Object.entries(properties)) {\n if (!p || typeof p !== \"object\") continue;\n const pp = p as PropShape;\n const type = pp.type ?? pp.schema?.type;\n if (type === \"object\" && /^initial/i.test(name)) names.push(name);\n }\n return names;\n}\n\n// =============================================================================\n// Source scanning helpers\n// =============================================================================\n\n/**\n * Collect all key names that appear as state slots — either keys inside a\n * `useState({ ... })` object literal, or standalone state variables.\n */\nexport function collectStateKeys(src: string): Set<string> {\n const keys = new Set<string>();\n const varRe = /const\\s*\\[\\s*(\\w+)\\s*,\\s*(\\w+)\\s*\\]\\s*=\\s*useState/g;\n for (const m of src.matchAll(varRe)) keys.add(m[1]);\n const objRe = /useState(?:<[^>]*>)?\\s*\\(\\s*\\{([\\s\\S]*?)\\}\\s*\\)/g;\n for (const m of src.matchAll(objRe)) {\n const keyRe = /(?:^|,)\\s*(\\w+)\\s*:/g;\n for (const km of m[1].matchAll(keyRe)) keys.add(km[1]);\n }\n const defaultObjRe = /useState(?:<[^>]*>)?\\s*\\([^)]*\\|\\|\\s*\\{([^}]*)\\}/g;\n for (const m of src.matchAll(defaultObjRe)) {\n const keyRe = /(?:^|,)\\s*(\\w+)\\s*:/g;\n for (const km of m[1].matchAll(keyRe)) keys.add(km[1]);\n }\n return keys;\n}\n\nexport function isMultiStepPrompt(prompt: string): boolean {\n if (!prompt) return false;\n const p = prompt.toLowerCase();\n return (\n /\\bstep\\s*[1-9]\\b/.test(p) ||\n /\\b[1-9][- ]step\\b/.test(p) ||\n /\\bmulti[- ]step\\b/.test(p) ||\n /\\bwizard\\b/.test(p) ||\n /\\bsteps?:\\s*\\n?/.test(p)\n );\n}\n\n// =============================================================================\n// Issue factory\n// =============================================================================\n\nexport function mkIssue(\n subcategory: string,\n description: string,\n fix: string,\n result: \"fail\" | \"warn\" = \"fail\",\n): EvalIssue {\n // mode-category issues are structural (missing hook wiring, bad merge-by-id,\n // hardcoded entity literals) — always P0. See ALIGNMENT.md R1.\n return { tier: 0, result, category: \"mode\", priority: \"P0\", subcategory, description, fix };\n}\n\nexport function cap(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n","// packages/ui-gen/src/evaluation/axis-checks/checks/universal.ts\n//\n// Checks that run regardless of axis value — they apply to any generated\n// component. Dispatched via a \"universal\" gate that matches every render\n// value.\n\nimport type { EvalIssue } from \"../../types-public.js\";\nimport type { AxisCheck, AxisCheckInput } from \"../types.js\";\nimport {\n getRequiredPropNames,\n mkIssue,\n} from \"../helpers.js\";\n\nconst ALL_RENDER_VALUES = [\n \"static\", \"list\", \"grid\", \"spatial\", \"timeline\", \"chart\", \"master-detail\",\n] as const;\n\nfunction runPropCoverage(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const requiredProps = getRequiredPropNames(input.contract);\n const issues: EvalIssue[] = [];\n for (const name of requiredProps) {\n const dotAccess = new RegExp(`\\\\bprops\\\\.${name}\\\\b`);\n const bracketAccess = new RegExp(`\\\\bprops\\\\[['\"\\`]${name}['\"\\`]\\\\]`);\n const destructured = new RegExp(\n `props[^;]{0,200}\\\\{[^}]*\\\\b${name}\\\\b[^}]*\\\\}|\\\\{[^}]*\\\\b${name}\\\\b[^}]*\\\\}[^;]{0,10}=\\\\s*props`,\n );\n if (dotAccess.test(src) || bracketAccess.test(src) || destructured.test(src))\n continue;\n issues.push(\n mkIssue(\n \"universal.prop_coverage\",\n `Required prop \"${name}\" is not referenced anywhere in the component.`,\n `Render props.${name} — the data contract marks it required.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runNoPropMirror(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const issues: EvalIssue[] = [];\n const re =\n /const\\s*\\[\\s*(\\w+)\\s*,\\s*(\\w+)\\s*\\]\\s*=\\s*useState(?:<[^>]*>)?\\s*\\(\\s*props\\??\\.(\\w+)/g;\n for (const m of src.matchAll(re)) {\n const [full, stateVar, setter, propName] = m;\n const idx = m.index ?? 0;\n const after = src.slice(idx + full.length);\n if (new RegExp(`\\\\b${setter}\\\\s*\\\\(`).test(after)) continue;\n issues.push(\n mkIssue(\n \"universal.no_prop_mirror\",\n `useState(props.${propName}) for \"${stateVar}\" has no \"${setter}\" call — this mirrors a prop without mutation.`,\n `Read props.${propName} directly in the render; remove the useState for ${stateVar}.`,\n \"warn\",\n ),\n );\n }\n return issues;\n}\n\nfunction runNoPhantomUseState(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const issues: EvalIssue[] = [];\n const re = /const\\s*\\[\\s*(\\w+)\\s*,\\s*(\\w+)\\s*\\]\\s*=\\s*useState/g;\n for (const m of src.matchAll(re)) {\n const [full, stateVar, setter] = m;\n const idx = m.index ?? 0;\n const after = src.slice(idx + full.length);\n const stateUsed = new RegExp(`\\\\b${stateVar}\\\\b`).test(after);\n const setterUsed = new RegExp(`\\\\b${setter}\\\\b`).test(after);\n if (stateUsed || setterUsed) continue;\n issues.push(\n mkIssue(\n \"universal.no_phantom_useState\",\n `useState for \"${stateVar}\" is declared but neither \"${stateVar}\" nor \"${setter}\" is referenced.`,\n `Remove the useState for ${stateVar} — it is dead state.`,\n \"warn\",\n ),\n );\n }\n return issues;\n}\n\nfunction runPropSeedNoResync(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const issues: EvalIssue[] = [];\n const re =\n /const\\s*\\[\\s*(\\w+)\\s*,\\s*(\\w+)\\s*\\]\\s*=\\s*useState(?:<[^>]*>)?\\s*\\(\\s*props\\??\\.(\\w+)/g;\n for (const m of src.matchAll(re)) {\n const [full, stateVar, setter, propName] = m;\n const idx = m.index ?? 0;\n const after = src.slice(idx + full.length);\n // Never-called setter is `no_prop_mirror`'s case — this check is\n // its #480 complement: the setter IS used (real optimistic state)\n // but nothing re-seeds when the agent repaints the prop.\n if (!new RegExp(`\\\\b${setter}\\\\s*\\\\(`).test(after)) continue;\n // A re-seed effect names the prop in a dependency array. Bracket\n // shape is the pragmatic signal (same looseness as the sibling\n // checks): any `[... props.X ...]` array in the source counts.\n const resync = new RegExp(\n `\\\\[[^\\\\[\\\\]]*props\\\\??\\\\.${propName}\\\\b[^\\\\[\\\\]]*\\\\]`,\n );\n if (resync.test(src)) continue;\n issues.push(\n mkIssue(\n \"universal.prop_seed_no_resync\",\n `useState(props.${propName}) seeds \"${stateVar}\" and mutates it, but no effect depends on [props.${propName}] — a ggui_amend repaint pushes new props that never reach this display (#480).`,\n `Add \\`useEffect(() => ${setter}(props.${propName}), [props.${propName}]);\\` so agent repaints re-seed the state, or derive the display directly from props.${propName}.`,\n \"warn\",\n ),\n );\n }\n return issues;\n}\n\nexport const UNIVERSAL_CHECKS: readonly AxisCheck[] = [\n {\n id: \"universal.prop_coverage\",\n axis: \"render\",\n values: ALL_RENDER_VALUES,\n run: runPropCoverage,\n },\n {\n id: \"universal.no_prop_mirror\",\n axis: \"render\",\n values: ALL_RENDER_VALUES,\n run: runNoPropMirror,\n },\n {\n id: \"universal.no_phantom_useState\",\n axis: \"render\",\n values: ALL_RENDER_VALUES,\n run: runNoPhantomUseState,\n },\n {\n id: \"universal.prop_seed_no_resync\",\n axis: \"render\",\n values: ALL_RENDER_VALUES,\n run: runPropSeedNoResync,\n },\n];\n","// packages/ui-gen/src/evaluation/axis-checks/checks/state-merge.ts\n//\n// Checks gated on state=merge: the component owns a live entity list\n// reconciled from stream/action updates. Ported from\n// mode-checks/collection.ts (§5a state-seeded, no-hardcoded-entities,\n// derived-view-memoized).\n\nimport type { EvalIssue } from \"../../types-public.js\";\nimport type { AxisCheck, AxisCheckInput } from \"../types.js\";\nimport {\n cap,\n getEntityCollections,\n getMutatedEntityCollections,\n mkIssue,\n} from \"../helpers.js\";\n\nfunction runStateSeededFromProps(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const all = getEntityCollections(input.contract);\n const entities = getMutatedEntityCollections(input.contract, all);\n const issues: EvalIssue[] = [];\n for (const e of entities) {\n const re = new RegExp(\n `useState(?:<[^>]*>)?\\\\s*\\\\([\\\\s\\\\S]{0,400}?props\\\\.${e.name}\\\\b`,\n );\n if (re.test(src)) continue;\n issues.push(\n mkIssue(\n \"state.merge.seeded_from_props\",\n `Entity collection \"${e.name}\" is not seeded from props — no useState initializer reads props.${e.name}.`,\n `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).`,\n ),\n );\n }\n return issues;\n}\n\nfunction runNoHardcodedEntities(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const all = getEntityCollections(input.contract);\n const entities = getMutatedEntityCollections(input.contract, all);\n if (entities.length === 0) return [];\n const uncommented = src\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/\\/\\/[^\\n]*/g, \"\");\n const issues: EvalIssue[] = [];\n const idFields = [...new Set(entities.map((e) => e.idField))];\n for (const idField of idFields) {\n const re = new RegExp(\n `\\\\[\\\\s*\\\\{[^}]*\\\\b${idField}\\\\s*:[^}]*\\\\}\\\\s*,\\\\s*\\\\{[^}]*\\\\b${idField}\\\\s*:`,\n \"g\",\n );\n if (!re.test(uncommented)) continue;\n issues.push(\n mkIssue(\n \"state.merge.no_hardcoded_entities\",\n `Hardcoded entity array literal (multiple objects with \"${idField}\") in the component — entity data should come from state/props.`,\n `Remove the literal array. Seed state from props.{entityProp} and merge updates via stream.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runDerivedViewMemoized(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const all = getEntityCollections(input.contract);\n const entities = getMutatedEntityCollections(input.contract, all);\n if (entities.length === 0) return [];\n const returnIdx = src.indexOf(\"return (\");\n if (returnIdx < 0) return [];\n const renderBody = src.slice(returnIdx);\n const issues: EvalIssue[] = [];\n for (const e of entities) {\n const re = new RegExp(`\\\\b${e.name}\\\\s*\\\\.(filter|reduce|sort)\\\\s*\\\\(`);\n if (re.test(renderBody)) {\n issues.push(\n mkIssue(\n \"state.merge.derived_view_memoized\",\n `Derived view (${e.name}.filter/reduce/sort) computed inside the render body — should be wrapped in useMemo.`,\n `Extract to \\`const ${e.name}Filtered = useMemo(() => ${e.name}.filter(...), [${e.name}, ...]);\\` before the return.`,\n \"warn\",\n ),\n );\n }\n }\n return issues;\n}\n\n/**\n * `.map()` keyed by index → reorders and merges break React reconciliation.\n * Gated on any render that iterates (list/grid/timeline/master-detail) OR\n * state=merge (mutating list).\n */\nfunction runMapKeyIsId(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const INDEX_NAMES = new Set([\"index\", \"idx\", \"i\", \"j\", \"k\", \"n\", \"ix\"]);\n const re = /key\\s*=\\s*\\{\\s*(\\w+)\\s*\\}/g;\n const issues: EvalIssue[] = [];\n for (const m of src.matchAll(re)) {\n const key = m[1];\n if (!INDEX_NAMES.has(key)) continue;\n issues.push(\n mkIssue(\n \"render.map_key_is_id\",\n `Array key uses index variable \"${key}\" — reorders and stream merges will break React reconciliation.`,\n `Replace key={${key}} with key={item.id} (or item.symbol / whatever the entity id field is).`,\n ),\n );\n }\n return issues;\n}\n\nexport const STATE_MERGE_CHECKS: readonly AxisCheck[] = [\n {\n id: \"state.merge.seeded_from_props\",\n axis: \"state\",\n values: [\"merge\"],\n run: runStateSeededFromProps,\n },\n {\n id: \"state.merge.no_hardcoded_entities\",\n axis: \"state\",\n values: [\"merge\"],\n run: runNoHardcodedEntities,\n },\n {\n id: \"state.merge.derived_view_memoized\",\n axis: \"state\",\n values: [\"merge\"],\n run: runDerivedViewMemoized,\n },\n // Map-key check: gated on any iterating render. state=merge always\n // implies iteration, so the render gate already covers it.\n {\n id: \"render.map_key_is_id\",\n axis: \"render\",\n values: [\"list\", \"grid\", \"timeline\", \"master-detail\"],\n run: runMapKeyIsId,\n },\n];\n","// packages/ui-gen/src/evaluation/axis-checks/checks/state-ui-affordance.ts\n//\n// `state.ui_affordance.state_aria_present` (ggui#408) — a hand-rolled\n// stateful control must expose its state in ARIA.\n//\n// Why this is a DETERMINISTIC check and not (only) an LLM criterion:\n// the Experiment-53 baseline showed the defect class is structurally\n// invisible to the LLM leg — `state=ui-affordance` with no writes\n// classifies `riskTier=low`, and the low-risk bypass skips tier-1+2\n// entirely, so 10/10 ARIA-less generations were never evaluated at\n// all. Axis checks run BEFORE the bypass decision, and a `fail` among\n// them disables the bypass for that round — which both surfaces the\n// finding and routes it into the coding loop. Prototype validation\n// against the 27-cell baseline corpus: precision 1.00, recall 0.80\n// (both false negatives closed here: lowercase tags — `<div\n// as={Clickable}>` is the WORSE variant since `as` is inert on a\n// native element — and callback-prop indirection in extracted\n// subcomponents).\n//\n// Detection predicate (v2 — \"the element's own onClick mutates the\n// affordance state\"; v1's styling-dataflow precondition scored recall\n// 0.30, do not resurrect it): an element fires when its `onClick`\n// references a `useState` setter, a local handler that calls one, or\n// an `on[A-Z]…` callback prop (extracted-subcomponent shape) — AND it\n// is not a semantics-owning primitive, carries no state ARIA\n// (`aria-checked/pressed/selected/expanded/current` or any `role=`),\n// and contains no state-carrying primitive in its subtree (pushing\n// duplicate ARIA onto a wrapper around `<Checkbox>` is itself a\n// defect the judge fails — never demand it).\n//\n// Gate: `{axis: \"state\", values: [\"ui-affordance\"]}` ONLY. The\n// predicate must not reach `state=payload/draft` (form-field wrappers\n// with onClick would false-flag) or `state=merge` (kanban's per-item\n// onClick is a MOVE, not a boolean affordance).\n\nimport type { EvalIssue } from \"../../types-public.js\";\nimport type { AxisCheck, AxisCheckInput } from \"../types.js\";\nimport { mkIssue } from \"../helpers.js\";\n\nconst STATE_ARIA_OR_ROLE = /aria-(checked|pressed|selected|expanded|current)\\s*=|role\\s*=/;\nconst STATE_PRIMITIVE_IN_SUBTREE = /<(Checkbox|Toggle|Tabs|Accordion)[\\s/>]/;\n/** Primitives that own their own interaction semantics — never flagged. */\nconst SEMANTIC_PRIMITIVES = new Set([\"Button\", \"Checkbox\", \"Toggle\", \"Link\", \"MenuItem\"]);\n\n/** Collect `const [x, setX] = useState(...)` setter names. */\nfunction collectSetters(src: string): Set<string> {\n const setters = new Set<string>();\n for (const m of src.matchAll(/const\\s*\\[\\s*\\w+\\s*,\\s*(set\\w+)\\s*\\]\\s*=\\s*useState/g)) {\n setters.add(m[1]);\n }\n return setters;\n}\n\n/** Collect local handler names whose body (nearby) calls a setter. */\nfunction collectHandlers(src: string, setters: Set<string>): Set<string> {\n const handlers = new Set<string>();\n for (const m of src.matchAll(/const\\s+(\\w+)\\s*=\\s*(?:\\([^)]*\\)|\\w+)\\s*=>\\s*\\{?/g)) {\n const body = src.slice(m.index + m[0].length, m.index + m[0].length + 400);\n for (const s of setters) {\n if (body.includes(s)) {\n handlers.add(m[1]);\n break;\n }\n }\n }\n return handlers;\n}\n\n/** The attribute block of an opening tag: from after the tag name to its `>` (brace-aware). */\nfunction attrBlock(src: string, start: number): { block: string; end: number } {\n let depth = 0;\n for (let i = start; i < src.length; i++) {\n const c = src[i];\n if (c === \"{\") depth++;\n else if (c === \"}\") depth--;\n else if (c === \">\" && depth === 0) return { block: src.slice(start, i), end: i };\n }\n return { block: src.slice(start, start + 900), end: start + 900 };\n}\n\n/** The brace-balanced expression of `onClick={…}`, or null when absent. */\nfunction onClickValue(block: string): string | null {\n const m = block.match(/onClick\\s*=\\s*\\{/);\n if (!m || m.index === undefined) return null;\n const open = m.index + m[0].length - 1;\n let depth = 0;\n for (let i = open; i < block.length; i++) {\n if (block[i] === \"{\") depth++;\n else if (block[i] === \"}\") {\n depth--;\n if (depth === 0) return block.slice(open + 1, i);\n }\n }\n return block.slice(open + 1);\n}\n\nfunction subtree(src: string, pos: number, tag: string): string {\n const close = src.indexOf(`</${tag}>`, pos);\n return src.slice(pos, close === -1 ? pos + 700 : close);\n}\n\nfunction runStateAriaPresent(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const setters = collectSetters(src);\n const handlers = collectHandlers(src, setters);\n const issues: EvalIssue[] = [];\n const flaggedLines = new Set<number>();\n\n // Locally-defined components: their CALL SITES can never satisfy the\n // check (the ARIA lives inside the definition, which this check\n // already covers via the callback-prop clause) — flagging the call\n // site is a permanently-unresolvable finding that stalls the\n // eval-fix loop in the recurrence guard (Experiment 54: exactly the\n // 2/27 stuck cells). Skip call sites of components defined in this\n // file; the definition's own inner element carries the check.\n const localComponents = new Set<string>();\n for (const m of src.matchAll(/(?:function\\s+([A-Z]\\w*)\\s*\\(|const\\s+([A-Z]\\w*)\\s*=)/g)) {\n localComponents.add(m[1] ?? m[2]);\n }\n\n for (const m of src.matchAll(/<([A-Za-z][A-Za-z0-9]*)\\b/g)) {\n const tag = m[1];\n if (m.index === undefined) continue;\n if (localComponents.has(tag)) continue;\n const { block, end } = attrBlock(src, m.index + m[0].length);\n const clickValue = onClickValue(block);\n if (clickValue === null) continue;\n const mutatesAffordance =\n [...setters].some((s) => clickValue.includes(s)) ||\n [...handlers].some((h) => new RegExp(`\\\\b${h}\\\\b`).test(clickValue)) ||\n // Extracted-subcomponent shape: the toggle handler arrives as an\n // `on[A-Z]…` callback prop and is invoked from onClick — inside a\n // ui-affordance component that IS the affordance mutation.\n /\\bon[A-Z]\\w*\\b/.test(clickValue);\n if (!mutatesAffordance) continue;\n if (SEMANTIC_PRIMITIVES.has(tag)) continue;\n if (STATE_ARIA_OR_ROLE.test(block)) continue;\n if (STATE_PRIMITIVE_IN_SUBTREE.test(subtree(src, end, tag))) continue;\n\n const line = src.slice(0, m.index).split(\"\\n\").length;\n if (flaggedLines.has(line)) continue;\n flaggedLines.add(line);\n issues.push(\n mkIssue(\n \"state.ui_affordance.state_aria_present\",\n `Line ${line}: <${tag}> toggles the UI affordance from its onClick but exposes no state ARIA — its checked/selected/expanded state is invisible to assistive technology (styling is the only carrier).`,\n `Add the matching state attribute to the SAME element that carries the onClick: \\`role=\"checkbox\"\\` + \\`aria-checked={…}\\` for a toggle row, \\`aria-pressed\\` for a toggle button, \\`aria-selected\\` for a selection, \\`aria-expanded\\` for an open/close affordance — or replace the hand-rolled control with the state-carrying primitive (Checkbox / Toggle / Tabs / Accordion). \\`as={Clickable}\\` adds button + keyboard semantics but NOT state.`,\n ),\n );\n }\n return issues;\n}\n\nexport const STATE_UI_AFFORDANCE_CHECKS: readonly AxisCheck[] = [\n {\n id: \"state.ui_affordance.state_aria_present\",\n axis: \"state\",\n values: [\"ui-affordance\"],\n run: runStateAriaPresent,\n },\n];\n","// packages/ui-gen/src/evaluation/axis-checks/checks/realtime.ts\n//\n// Checks gated on realtime != none. Ported from mode-checks/collection.ts\n// (stream-handler-per-event, stream-merges-by-id).\n\nimport type { EvalIssue } from \"../../types-public.js\";\nimport type { AxisCheck, AxisCheckInput } from \"../types.js\";\nimport {\n getEntityCollections,\n getMutatedEntityCollections,\n getStreamEventNames,\n mkIssue,\n} from \"../helpers.js\";\n\nconst REALTIME_ACTIVE = [\"merge\", \"append\", \"status\", \"presence\", \"mixed\"] as const;\n\nfunction runStreamHandlerPerEvent(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const eventNames = getStreamEventNames(input.contract);\n const issues: EvalIssue[] = [];\n for (const name of eventNames) {\n const re = new RegExp(`useStream(?:<[^>]*>)?\\\\s*\\\\(\\\\s*['\"\\`]${name}['\"\\`]`);\n if (re.test(src)) continue;\n issues.push(\n mkIssue(\n \"realtime.stream_handler_per_event\",\n `Stream event \"${name}\" declared in the contract has no useStream('${name}') call.`,\n `Add \\`const ${name} = useStream<...>('${name}');\\` and handle ${name}.latest in a useEffect.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runStreamMergesById(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const eventNames = getStreamEventNames(input.contract);\n const all = getEntityCollections(input.contract);\n const entities = getMutatedEntityCollections(input.contract, all);\n if (eventNames.length === 0 || entities.length === 0) return [];\n const issues: EvalIssue[] = [];\n const idFields = new Set(entities.map((e) => e.idField));\n for (const idField of idFields) {\n const re = new RegExp(`\\\\.${idField}\\\\b`);\n if (re.test(src)) continue;\n issues.push(\n mkIssue(\n \"realtime.merge.stream_merges_by_id\",\n `Entity id field \"${idField}\" is never referenced in the source — stream merge likely does not key by id.`,\n `In the stream handler, merge by id: setItems(prev => prev.map(x => x.${idField} === update.${idField} ? {...x, ...update} : x)).`,\n \"warn\",\n ),\n );\n }\n return issues;\n}\n\nexport const REALTIME_CHECKS: readonly AxisCheck[] = [\n {\n id: \"realtime.stream_handler_per_event\",\n axis: \"realtime\",\n values: REALTIME_ACTIVE,\n run: runStreamHandlerPerEvent,\n },\n {\n id: \"realtime.merge.stream_merges_by_id\",\n axis: \"realtime\",\n values: [\"merge\", \"mixed\"],\n run: runStreamMergesById,\n },\n];\n","// packages/ui-gen/src/evaluation/axis-checks/checks/writes.ts\n//\n// Checks gated on writes != none. Ported from display.ts (action-hook,\n// action-handler) + form.ts (submit-hook, submit-handler, submit-disabled)\n// + collection.ts (per-item action variants).\n\nimport type { EvalIssue } from \"../../types-public.js\";\nimport type { AxisCheck, AxisCheckInput } from \"../types.js\";\nimport {\n getActionNames,\n getSubmitActions,\n mkIssue,\n} from \"../helpers.js\";\n\nconst ACTIVE_WRITES = [\n \"commit\", \"multi-commit\", \"per-item\", \"submit\", \"compose\",\n] as const;\n\nfunction runActionHookWired(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const actionNames = getActionNames(input.contract);\n const issues: EvalIssue[] = [];\n for (const name of actionNames) {\n const re = new RegExp(`useAction(?:<[^>]*>)?\\\\s*\\\\(\\\\s*['\"\\`]${name}['\"\\`]`);\n if (re.test(src)) continue;\n issues.push(\n mkIssue(\n \"writes.action_hook_wired\",\n `Contract action \"${name}\" has no useAction('${name}') call.`,\n `Add \\`const ${name} = useAction<...>('${name}');\\` and wire it to the relevant control.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runActionHandlerAttached(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const actionNames = getActionNames(input.contract);\n const issues: EvalIssue[] = [];\n for (const name of actionNames) {\n const declRe = new RegExp(\n `const\\\\s+(\\\\w+)\\\\s*=\\\\s*useAction(?:<[^>]*>)?\\\\s*\\\\(\\\\s*['\"\\`]${name}['\"\\`]`,\n );\n const m = src.match(declRe);\n if (!m) continue;\n const constName = m[1];\n const rest = src.replace(m[0], \"\");\n if (new RegExp(`\\\\b${constName}\\\\s*\\\\(`).test(rest)) continue;\n issues.push(\n mkIssue(\n \"writes.action_handler_attached\",\n `useAction result \"${constName}\" (for action \"${name}\") is declared but never invoked.`,\n `Call ${constName}({...}) from an interactive element (e.g., <Button onClick={() => ${constName}(payload)}>).`,\n ),\n );\n }\n return issues;\n}\n\nfunction runSubmitDisabledPath(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const submits = getSubmitActions(input.contract);\n if (submits.length === 0) return [];\n if (/disabled\\s*=\\s*\\{/.test(src)) return [];\n return [\n mkIssue(\n \"writes.submit.disabled_path\",\n `Form has no \\`disabled={...}\\` expression anywhere — submit is likely unconditional.`,\n `Gate submit on validation: e.g. \\`<Button disabled={!isValid} onClick={handleSubmit}>\\`.`,\n \"warn\",\n ),\n ];\n}\n\nexport const WRITES_CHECKS: readonly AxisCheck[] = [\n {\n id: \"writes.action_hook_wired\",\n axis: \"writes\",\n values: ACTIVE_WRITES,\n run: runActionHookWired,\n },\n {\n id: \"writes.action_handler_attached\",\n axis: \"writes\",\n values: ACTIVE_WRITES,\n run: runActionHandlerAttached,\n },\n {\n id: \"writes.submit.disabled_path\",\n axis: \"writes\",\n values: [\"submit\"],\n run: runSubmitDisabledPath,\n },\n];\n","// packages/ui-gen/src/evaluation/axis-checks/checks/state-payload.ts\n//\n// Checks gated on state=payload or writes=submit. Ported from\n// mode-checks/form.ts (submit-hook, submit-handler, state-covers-payload,\n// initial-values-seeded, option-lists-consumed, no-orphan-payload-key).\n\nimport type { EvalIssue } from \"../../types-public.js\";\nimport type { AxisCheck, AxisCheckInput } from \"../types.js\";\nimport {\n collectStateKeys,\n getArrStrProps,\n getInitialValuePropNames,\n getSubmitActions,\n mkIssue,\n} from \"../helpers.js\";\n\nfunction runSubmitHookPresent(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const submits = getSubmitActions(input.contract);\n const issues: EvalIssue[] = [];\n for (const s of submits) {\n const re = new RegExp(`useAction(?:<[^>]*>)?\\\\s*\\\\(\\\\s*['\"\\`]${s.name}['\"\\`]`);\n if (re.test(src)) continue;\n issues.push(\n mkIssue(\n \"writes.submit.hook_present\",\n `Submit action \"${s.name}\" has no useAction('${s.name}') call.`,\n `Add \\`const ${s.name} = useAction<...>('${s.name}');\\` and invoke it from the submit button.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runSubmitHandlerAttached(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const submits = getSubmitActions(input.contract);\n const issues: EvalIssue[] = [];\n for (const s of submits) {\n const declRe = new RegExp(\n `const\\\\s+(\\\\w+)\\\\s*=\\\\s*useAction(?:<[^>]*>)?\\\\s*\\\\(\\\\s*['\"\\`]${s.name}['\"\\`]`,\n );\n const m = src.match(declRe);\n if (!m) continue;\n const constName = m[1];\n const rest = src.replace(m[0], \"\");\n if (new RegExp(`\\\\b${constName}\\\\s*\\\\(`).test(rest)) continue;\n issues.push(\n mkIssue(\n \"writes.submit.handler_attached\",\n `useAction result \"${constName}\" (for submit \"${s.name}\") is declared but never invoked.`,\n `Call ${constName}(payload) from the submit button's onClick handler, after validation.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runStateCoversPayload(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const submits = getSubmitActions(input.contract);\n if (submits.length === 0) return [];\n const stateKeys = collectStateKeys(src);\n const issues: EvalIssue[] = [];\n for (const s of submits) {\n const missing = s.payloadKeys.filter((k) => !stateKeys.has(k));\n if (missing.length === 0) continue;\n issues.push(\n mkIssue(\n \"state.payload.covers_submit\",\n `Submit action \"${s.name}\" expects payload keys [${s.payloadKeys.join(\", \")}] but state does not cover: ${missing.join(\", \")}.`,\n `Add a state slot for each missing key so the final payload can be assembled.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runInitialValuesSeeded(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const initialProps = getInitialValuePropNames(input.contract);\n const issues: EvalIssue[] = [];\n for (const name of initialProps) {\n const re = new RegExp(\n `useState(?:<[^>]*>)?\\\\s*\\\\([\\\\s\\\\S]{0,400}?props\\\\.${name}\\\\b`,\n );\n if (re.test(src)) continue;\n issues.push(\n mkIssue(\n \"state.payload.initial_values_seeded\",\n `Prop \"${name}\" (pre-filled initial values) is never read in a useState initializer.`,\n `Seed form state from props.${name} so edit mode pre-fills.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runOptionListsConsumed(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const arrStrNames = getArrStrProps(input.contract);\n const hasAnyMap = /\\.map\\s*\\(/.test(src);\n const issues: EvalIssue[] = [];\n for (const name of arrStrNames) {\n const referenced = new RegExp(`\\\\bprops\\\\.${name}\\\\b`).test(src);\n if (referenced && hasAnyMap) continue;\n const reason = !referenced\n ? `Option list prop \"${name}\" (arr<str>) is never referenced — users cannot see the options.`\n : `Option list prop \"${name}\" (arr<str>) is referenced but the component has no .map() — options are not rendered as choices.`;\n issues.push(\n mkIssue(\n \"state.payload.option_lists_consumed\",\n reason,\n `Render options with \\`props.${name}.map(option => <RadioOption value={option} ... />)\\`.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runNoOrphanPayloadKey(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const submits = getSubmitActions(input.contract);\n if (submits.length === 0) return [];\n const body = src\n .replace(/interface\\s+Action\\w+[\\s\\S]*?\\n}/g, \"\")\n .replace(/type\\s+Action\\w+[\\s\\S]*?\\n;/g, \"\");\n const issues: EvalIssue[] = [];\n for (const s of submits) {\n const orphans: string[] = [];\n for (const key of s.payloadKeys) {\n const re = new RegExp(`\\\\b${key}\\\\b`);\n if (!re.test(body)) orphans.push(key);\n }\n if (orphans.length === 0) continue;\n issues.push(\n mkIssue(\n \"state.payload.no_orphan_key\",\n `Submit payload keys [${orphans.join(\", \")}] never appear in the component body — missing from the submitted payload.`,\n `Add UI and state for these keys, or remove them from the ActionEntry if not needed.`,\n \"warn\",\n ),\n );\n }\n return issues;\n}\n\nexport const STATE_PAYLOAD_CHECKS: readonly AxisCheck[] = [\n {\n id: \"writes.submit.hook_present\",\n axis: \"writes\",\n values: [\"submit\"],\n run: runSubmitHookPresent,\n },\n {\n id: \"writes.submit.handler_attached\",\n axis: \"writes\",\n values: [\"submit\"],\n run: runSubmitHandlerAttached,\n },\n {\n id: \"state.payload.covers_submit\",\n axis: \"state\",\n values: [\"payload\"],\n run: runStateCoversPayload,\n },\n {\n id: \"state.payload.initial_values_seeded\",\n axis: \"state\",\n values: [\"payload\", \"draft\"],\n run: runInitialValuesSeeded,\n },\n {\n id: \"state.payload.option_lists_consumed\",\n axis: \"state\",\n values: [\"payload\"],\n run: runOptionListsConsumed,\n },\n {\n id: \"state.payload.no_orphan_key\",\n axis: \"state\",\n values: [\"payload\"],\n run: runNoOrphanPayloadKey,\n },\n];\n","// packages/ui-gen/src/evaluation/axis-checks/checks/tooling.ts\n//\n// Checks gated on the tooling axis. Two surfaces:\n//\n// - `tooling.clientCapability.hook_called` — verifies every declared\n// `clientCapabilities.gadgets[name]` has a matching\n// `const <name> = …()` binding in source.\n// - `tooling.clientCapability.start_called` — verifies a bound\n// gadget hook also has a `.start(...)` invocation; without it\n// the capability stays in `idle` and never fires.\n// - `realtime.stream_source.no_direct_call` — the LLM must NOT\n// directly invoke a tool named on `streamSpec[*].source.tool`;\n// subscribe via `useStream(...)` instead.\n// - `universal.no_retired_identifiers` — fires on every contract.\n// The LLM's training data predates the current wire shape and\n// reaches for retired identifiers (component-side tool hooks,\n// dispatch.kind, intendedTool, broadcast field, retired catalog\n// names, retired package imports, retired wire-input fields).\n// The grep gate emits one issue per detected identifier so the\n// LLM rewrites toward the current shape before evaluation\n// completes.\n\nimport type { DataContract, StreamChannelEntry } from \"@ggui-ai/protocol\";\nimport type { EvalIssue } from \"../../types-public.js\";\nimport type { AxisCheck, AxisCheckInput } from \"../types.js\";\nimport { getGadgetNames, getStdlibGadgetNames, mkIssue } from \"../helpers.js\";\n\nconst CLIENT_PRESENT = [\"client\", \"both\"] as const;\nconst ALL_TOOLING_VALUES = [\"none\", \"wired\", \"client\", \"both\"] as const;\nconst REALTIME_ACTIVE = [\n \"merge\",\n \"append\",\n \"status\",\n \"presence\",\n \"mixed\",\n] as const;\n\n// ── clientCapabilities ──────────────────────────────────────────────\n\nfunction runGadgetHookCalled(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const names = getGadgetNames(input.contract);\n const issues: EvalIssue[] = [];\n for (const name of names) {\n // The boilerplate emits `const <name> = <hook>();` — match the const\n // binding to detect omission. We don't pin the hook identifier here\n // because the contract carries it via `entry.hook` and the LLM may\n // legitimately alias on import.\n const re = new RegExp(`const\\\\s+${name}\\\\s*=`);\n if (re.test(src)) continue;\n issues.push(\n mkIssue(\n \"tooling.clientCapability.hook_called\",\n `Contract clientCapability \"${name}\" has no \\`const ${name} = …()\\` hook call.`,\n `Import the declared hook (default package: @ggui-ai/gadgets) and bind its return value to \\`const ${name}\\` at the top of the component; surface \\`.value\\` / \\`.status\\` in JSX.`,\n ),\n );\n }\n return issues;\n}\n\nfunction runClientCapabilityStartCalled(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n // Only the first-party `@ggui-ai/gadgets` browser capabilities have\n // the `idle → prompting → active` lifecycle that `.start()` drives.\n // Registered third-party gadget hooks (e.g. `useBoardState`) are\n // plain data hooks the runtime resolves on its own — exclude them.\n const names = getStdlibGadgetNames(input.contract);\n const issues: EvalIssue[] = [];\n for (const name of names) {\n // Skip when the binding doesn't exist — the `hook_called` check\n // covers that case; we don't double-issue.\n const bindingRe = new RegExp(`const\\\\s+${name}\\\\s*=`);\n if (!bindingRe.test(src)) continue;\n\n // The capability lifecycle requires `.start()` invocation to\n // transition from `idle` → `prompting`. Without it the hook's\n // `.value` / `.status` stay frozen at the initial state and the\n // UI feature never fires. Match `<name>.start(`, allowing chained\n // member access or method aliasing.\n const startRe = new RegExp(`\\\\b${name}\\\\s*\\\\.\\\\s*start\\\\s*\\\\(`);\n if (startRe.test(src)) continue;\n issues.push(\n mkIssue(\n \"tooling.clientCapability.start_called\",\n `clientCapability \"${name}\" is bound but \\`${name}.start(…)\\` is never invoked — the capability stays in 'idle' and the feature won't fire.`,\n `Wire \\`${name}.start({...})\\` to a UI control (Button onClick, effect, etc.). Read \\`.status\\` to gate the UI between 'idle' / 'prompting' / 'active' / 'completed' / 'denied' / 'error'.`,\n ),\n );\n }\n return issues;\n}\n\n// ── streamSpec sources ──────────────────────────────────────────────\n\nfunction collectStreamSourceTools(\n contract: DataContract | undefined,\n): Map<string, string> {\n // Map<channelName, sourceToolName> for every channel that declares\n // a source. Excludes channels without `source` (agent-written).\n const result = new Map<string, string>();\n const streamSpec = contract?.streamSpec;\n if (!streamSpec || typeof streamSpec !== \"object\") return result;\n for (const [channelName, entryRaw] of Object.entries(streamSpec)) {\n const entry = entryRaw as StreamChannelEntry | undefined;\n if (!entry || typeof entry !== \"object\") continue;\n const tool = entry.source?.tool;\n if (typeof tool !== \"string\" || tool.length === 0) continue;\n result.set(channelName, tool);\n }\n return result;\n}\n\nfunction runStreamSourceNoDirectCall(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const map = collectStreamSourceTools(input.contract);\n if (map.size === 0) return [];\n\n const issues: EvalIssue[] = [];\n for (const [channelName, toolName] of map) {\n // Detect a direct call to the source tool. Matches identifier\n // followed by `(` — covers `foo()`, `foo(args)`, `foo.bar()`\n // (the dotted form indirectly catches `someObject.foo()` which\n // the contract doesn't expect to see, since the source tool is\n // an agent-side MCP tool, not a local function).\n const callRe = new RegExp(`\\\\b${toolName}\\\\s*\\\\(`);\n if (!callRe.test(src)) continue;\n\n // Don't false-fire when `toolName` happens to be the channel name\n // bound to useStream (e.g., `const messages = useStream(...)` then\n // `messages(...)` would be weird but we're matching the TOOL name,\n // not the binding). If toolName === channelName then the\n // `<channel>(` call would be the useStream binding being called\n // as a function — which is itself wrong, so still emit.\n issues.push(\n mkIssue(\n \"realtime.stream_source.no_direct_call\",\n `Source code calls \\`${toolName}(...)\\` directly but the contract declares it as the source tool for streamSpec.${channelName}. Source tools are agent-side / runtime-polled; the component MUST NOT invoke them.`,\n `Subscribe to the channel via \\`const ${channelName} = useStream('${channelName}');\\` and read \\`${channelName}.latest\\` / \\`${channelName}.all\\` — the runtime polls or subscribes to '${toolName}' on the component's behalf.`,\n ),\n );\n }\n return issues;\n}\n\n// ── Anti-pattern grep — retired identifiers a model may emit from\n// stale training data ──\n\ninterface RetiredIdentifier {\n /** Regex matching the retired surface in source. */\n readonly pattern: RegExp;\n /** Stable subcategory used for the EvalIssue. */\n readonly id: string;\n /** Human-readable description for the issue message. */\n readonly label: string;\n /** Replacement guidance for the fix message. */\n readonly replacement: string;\n}\n\nconst RETIRED_IDENTIFIERS: readonly RetiredIdentifier[] = [\n {\n pattern: /\\buseWiredTool\\b/,\n id: \"useWiredTool\",\n label: \"`useWiredTool(...)` hook\",\n replacement:\n \"Use `useAction(name)` for user gestures the agent should react to. `agentCapabilities.tools` entries are agent-side catalog declarations — the component never calls them directly.\",\n },\n {\n pattern: /\\buseAgentTool\\b/,\n id: \"useAgentTool\",\n label: \"`useAgentTool(...)` hook\",\n replacement:\n \"Agent-side tools are NEVER imported as component hooks. The contract declares them under `agentCapabilities.tools` for cross-ref (actionSpec.nextStep / streamSpec.source.tool); the component reacts via `useAction` / `useStream`.\",\n },\n {\n pattern: /\\bcallWiredTool\\b/,\n id: \"callWiredTool\",\n label: \"`callWiredTool(...)` call\",\n replacement:\n \"Component-side direct invocation of agent-side tools is retired. Fire a UI gesture via `useAction(name)`; the agent reacts on its next turn (`nextStep` hint optional).\",\n },\n {\n pattern: /\\buseClientTool\\b/,\n id: \"useClientTool\",\n label: \"`useClientTool(name, handler)` hook\",\n replacement:\n \"Use a gadget hook from `@ggui-ai/gadgets` (e.g., `useGeolocation`, `useClipboardWrite`) and thread the result into a contextSpec slot or actionSpec payload.\",\n },\n {\n pattern: /\\bdispatch\\s*:\\s*\\{\\s*kind\\s*:/,\n id: \"dispatch.kind\",\n label: \"`dispatch: { kind: '...' }` discriminated union\",\n replacement:\n \"ActionEntry.dispatch is retired. Use the flat `nextStep?: '<tool>'` field on the action entry instead.\",\n },\n {\n pattern: /\\bintendedTool\\b/,\n id: \"intendedTool\",\n label: \"`intendedTool` field\",\n replacement:\n \"Use the flat `nextStep` field — the hint surface is one optional advisory string, not a nested discriminator.\",\n },\n {\n pattern: /\\bmode\\s*:\\s*['\"`]host-routed['\"`]/,\n id: \"mode.host-routed\",\n label: \"`mode: 'host-routed'`\",\n replacement:\n \"The `mode` field on action entries is retired. All actions are agent-routed; use `nextStep` for the optional tool hint.\",\n },\n {\n pattern: /\\bbroadcast\\s*:\\s*\\{/,\n id: \"broadcast\",\n label: \"`broadcast: { … }` contract field\",\n replacement:\n \"Move the channel source declaration to `streamSpec[channel].source = { tool, args? }`.\",\n },\n {\n // Match `agentTools` only as a contract-shaped object key or\n // property access — not as a local variable name in unrelated\n // code. `\\bagentTools\\s*[:.]` catches `{ agentTools: {...} }` /\n // `contract.agentTools` while ignoring `const agentTools = ...`.\n pattern: /\\bagentTools\\s*[:.]/,\n id: \"contract.agentTools\",\n label: \"`agentTools` top-level contract field\",\n replacement:\n \"The top-level `agentTools` field is retired. Declare agent-side tools under `agentCapabilities.tools` (catalog nested under a capabilities parent for symmetry with `clientCapabilities`).\",\n },\n {\n pattern: /\\bclientCapabilities\\s*\\.\\s*capabilities\\b/,\n id: \"clientCapabilities.capabilities\",\n label: \"`clientCapabilities.capabilities` inner key\",\n replacement:\n \"The inner `capabilities` key is retired. Use `clientCapabilities.gadgets` — entries are library-hook declarations, not RPC capabilities.\",\n },\n {\n pattern: /['\"`]@ggui-ai\\/client-tools['\"`]/,\n id: \"package.@ggui-ai/client-tools\",\n label: \"`@ggui-ai/client-tools` package import\",\n replacement:\n \"The package was renamed to `@ggui-ai/gadgets`. Update the import string.\",\n },\n {\n pattern: /\\bPushStory\\b/,\n id: \"PushStory\",\n label: \"`PushStory` type / `pushStorySchema` schema\",\n replacement:\n \"`PushStory` was retired when the handshake input was flattened. The current wire is `ggui_handshake({intent, blueprintDraft: {contract, variance?, generator?}})` + `ggui_render({handshakeId, props, override?: {contract?, variance?}})` (omit `override` to accept the proposal as-is).\",\n },\n {\n pattern: /\\bpushStorySchema\\b/,\n id: \"pushStorySchema\",\n label: \"`pushStorySchema` zod schema\",\n replacement:\n \"`pushStorySchema` was retired alongside `PushStory`. Current schemas: `handshakeInputSchema` + `renderInputSchema` (with the optional `override` re-aim) in `@ggui-ai/protocol`.\",\n },\n {\n pattern: /\\bstory\\s*\\.\\s*adapters\\b/,\n id: \"story.adapters\",\n label: \"`story.adapters` field access\",\n replacement:\n \"The story.adapters gate was retired alongside `PushStory`. Per-app permission gates flow through `clientCapabilities.gadgets[*].permission` (Permissions-Policy derivation).\",\n },\n {\n pattern: /\\bdeclaredAdapters\\b/,\n id: \"declaredAdapters\",\n label: \"`declaredAdapters` field / runtime gate\",\n replacement:\n \"App-level `declaredAdapters` was retired. Per-app permission gates derive from `clientCapabilities.gadgets[*].permission` instead.\",\n },\n {\n pattern: /\\bassertAdaptersDeclared\\b/,\n id: \"assertAdaptersDeclared\",\n label: \"`assertAdaptersDeclared(...)` runtime call\",\n replacement:\n \"The runtime adapter-gate function is retired. Permissions-Policy is derived per-contract at render commit time and threaded through the bootstrap projection.\",\n },\n {\n pattern: /\\bHandshakeStoredStory\\b/,\n id: \"HandshakeStoredStory\",\n label: \"`HandshakeStoredStory` storage type\",\n replacement:\n \"The OSS handler's stored type is now `HandshakeStoredInput` with the MVB-5 `{intent, blueprintDraft, forceCreate?}` shape.\",\n },\n {\n pattern: /\\brecord\\s*\\.\\s*story\\b/,\n id: \"record.story\",\n label: \"`record.story.*` access on handshake storage\",\n replacement:\n \"Handshake storage was flattened. Read `record.input.*` (intent / blueprintDraft) — the nested `story` wrapper is gone. MVB-5 also adds `record.suggestion` + `record.effectiveContract`.\",\n },\n];\n\nfunction runNoRetiredIdentifiers(input: AxisCheckInput): EvalIssue[] {\n // Source-only scan; compiled code irrelevant for identifier detection.\n // Run even without compiled code so we surface early in the loop.\n const src = input.sourceCode;\n const issues: EvalIssue[] = [];\n for (const rule of RETIRED_IDENTIFIERS) {\n if (!rule.pattern.test(src)) continue;\n issues.push(\n mkIssue(\n `universal.no_retired_identifiers.${rule.id}`,\n `Source contains ${rule.label} — retired from the contract surface.`,\n rule.replacement,\n ),\n );\n }\n return issues;\n}\n\nexport const TOOLING_CHECKS: readonly AxisCheck[] = [\n {\n id: \"tooling.clientCapability.hook_called\",\n axis: \"tooling\",\n values: CLIENT_PRESENT,\n run: runGadgetHookCalled,\n },\n {\n id: \"tooling.clientCapability.start_called\",\n axis: \"tooling\",\n values: CLIENT_PRESENT,\n run: runClientCapabilityStartCalled,\n },\n {\n // Stream-source direct-call check. Gated on realtime axis (rather\n // than tooling) since stream sources are a realtime concern — but\n // logically lives in tooling.ts alongside the other tool-reference\n // checks since the issue class is about referenced agentTools.\n id: \"realtime.stream_source.no_direct_call\",\n axis: \"realtime\",\n values: REALTIME_ACTIVE,\n run: runStreamSourceNoDirectCall,\n },\n {\n // Universal — fires on every tooling-axis value. The check itself\n // is contract-agnostic; the axis gate is \"every contract\" via the\n // full ALL_TOOLING_VALUES list (rather than the universal-check\n // module's \"render\" gate convention) so the anti-pattern stays\n // co-located with the other tooling-related rules.\n id: \"universal.no_retired_identifiers\",\n axis: \"tooling\",\n values: ALL_TOOLING_VALUES,\n run: runNoRetiredIdentifiers,\n },\n];\n","// packages/ui-gen/src/evaluation/axis-checks/extras.ts\n//\n// Axis-specific checks that had no legacy home. These fire on axis values\n// the old 3-mode dispatch didn't route (drag, swipe, compose, multi-step,\n// mixed streams). Intentionally narrow — each catches a specific failure\n// mode the fragments' prompt text tells the LLM to avoid.\n\nimport type { AxisCheck, AxisCheckInput } from \"./types.js\";\nimport type { EvalIssue } from \"../types-public.js\";\n\nfunction mkIssue(\n subcategory: string,\n description: string,\n fix: string,\n result: \"fail\" | \"warn\" = \"warn\",\n): EvalIssue {\n return { tier: 0, result, category: \"mode\", subcategory, description, fix };\n}\n\n/**\n * writeTrigger=drag → must attach onDragStart + onDrop (or onDragOver)\n * somewhere. Otherwise the drag handler is decorative.\n */\nconst dragTriggerWired: AxisCheck = {\n id: \"writeTrigger.drag.handlers_wired\",\n axis: \"writeTrigger\",\n values: [\"drag\"],\n run(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const hasStart = /onDragStart\\s*=/.test(src);\n const hasDrop = /onDrop\\s*=/.test(src);\n if (hasStart && hasDrop) return [];\n return [\n mkIssue(\n \"writeTrigger.drag.handlers_wired\",\n `Classified as writeTrigger=drag but component lacks ${!hasStart ? \"onDragStart\" : \"\"}${!hasStart && !hasDrop ? \" + \" : \"\"}${!hasDrop ? \"onDrop\" : \"\"} handlers.`,\n \"Attach onDragStart to draggable items and onDrop (with onDragOver preventDefault) to drop zones.\",\n \"fail\",\n ),\n ];\n },\n};\n\n/**\n * writeTrigger=swipe → must wire onTouchStart + onTouchEnd. Also emit\n * a warn if no fallback click handlers exist (desktop users).\n */\nconst swipeTriggerWired: AxisCheck = {\n id: \"writeTrigger.swipe.handlers_wired\",\n axis: \"writeTrigger\",\n values: [\"swipe\"],\n run(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const hasTouch = /onTouchStart\\s*=/.test(src) && /onTouchEnd\\s*=/.test(src);\n if (!hasTouch) {\n return [\n mkIssue(\n \"writeTrigger.swipe.handlers_wired\",\n \"Classified as writeTrigger=swipe but component lacks onTouchStart + onTouchEnd handlers.\",\n \"Wire onTouchStart to record the start X/Y, onTouchEnd to classify direction and fire the action.\",\n \"fail\",\n ),\n ];\n }\n return [];\n },\n};\n\n/**\n * writes=compose → exactly one action should be called with ids sourced\n * from two different state slots. Heuristic: at least two useState or\n * props.id references should appear in the action invocation's argument\n * region.\n *\n * Light check: warn if only one id-bearing field appears near the useAction\n * invocation (hard to get false-positive free without AST).\n */\nconst composeCrossEntity: AxisCheck = {\n id: \"writes.compose.cross_entity_ids\",\n axis: \"writes\",\n values: [\"compose\"],\n run(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n // Look for an action invocation passing an object literal with >= 2\n // `*Id` or `id` keys. That's the compose signature.\n const re = /\\{\\s*[^}]*?\\b(\\w*Id|id)\\b[^}]*?,\\s*[^}]*?\\b(\\w*Id|id)\\b[^}]*?\\}/s;\n if (re.test(src)) return [];\n return [\n mkIssue(\n \"writes.compose.cross_entity_ids\",\n \"Classified as writes=compose but no action invocation passes two id-bearing keys together.\",\n \"The compose action must receive both entity ids in one payload, e.g. `schedule({ eventId, calendarId })`.\",\n \"warn\",\n ),\n ];\n },\n};\n\n/**\n * layout=multi-step → integer step state + a step-guard on Next. Re-uses\n * the form check's multi-step signal, but fires even when writes != submit\n * (e.g., multi-step wizards that never submit, like onboarding).\n */\nconst multiStepHasState: AxisCheck = {\n id: \"layout.multi_step.state_present\",\n axis: \"layout\",\n values: [\"multi-step\"],\n run(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n const hasIntStep = /useState(?:<number>)?\\s*\\(\\s*[0-9]+\\s*\\)/.test(src);\n if (hasIntStep) return [];\n return [\n mkIssue(\n \"layout.multi_step.state_present\",\n \"Classified as layout=multi-step but no integer-typed useState tracks the current step.\",\n \"Add `const [step, setStep] = useState(0);` and branch rendering on it.\",\n \"fail\",\n ),\n ];\n },\n};\n\n/**\n * layout=multi-step → the design system's Stepper composite must be\n * ADOPTED (rendered). D8 (Exp 47) measured adoption at 17/18 from\n * fragment + JSDoc alone; this check gives the CHECK leg ownership of\n * the mandate so a regression surfaces as a fix turn instead of\n * silently shipping a wizard with no step affordance.\n *\n * Replaces the always-on `stepper-display-only` pitfall (deleted in the\n * same slice): with adoption carried by the WHAT leg, a 6th always-on\n * prompt rule was pure attention-dilution cost (the exp66 count-\n * sensitivity class, ~+9s blended), while this check prices at zero\n * outside multi-step cells. The pitfall's display-only guidance lives\n * on in the fix string below — delivered only when a cell actually\n * needs it.\n */\nconst stepperAdopted: AxisCheck = {\n id: \"layout.multi_step.stepper_adopted\",\n axis: \"layout\",\n values: [\"multi-step\"],\n run(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n // `free` design mode: the Stepper composite is optional (the prompt\n // names it as a default, not a requirement), so the adoption\n // mandate stands down. `layout.multi_step.state_present` — the\n // behavioural rule — still fires in both modes.\n if (input.designMode === \"free\") return [];\n if (/<Stepper[\\s/>]/.test(input.sourceCode)) return [];\n return [\n mkIssue(\n \"layout.multi_step.stepper_adopted\",\n \"Classified as layout=multi-step but the design system's Stepper composite is never rendered.\",\n \"Render <Stepper steps={STEPS} current={step} /> above the step body — STEPS is a top-level const array of step labels and `step` is your own useState index. Stepper is display-only: it never stores or advances the step itself.\",\n \"fail\",\n ),\n ];\n },\n};\n\n/**\n * realtime=mixed → the contract declares multiple events of different\n * kinds. Each must have its own useStream call. We approximate by\n * requiring ≥ 2 useStream calls when the vector is mixed.\n */\nconst mixedStreamsHaveHandlers: AxisCheck = {\n id: \"realtime.mixed.handlers_per_event\",\n axis: \"realtime\",\n values: [\"mixed\"],\n run(input: AxisCheckInput): EvalIssue[] {\n if (input.compiledCode === null) return [];\n const src = input.sourceCode;\n // Accept both `useStream('x')` and `useStream<T>('x')` (generic type arg).\n // The boilerplate pre-emits typed calls, so the `(` -only regex was a\n // 100%-false-positive on chat-interface + stock-ticker (Experiment 34).\n const matches = src.match(/useStream\\s*(?:<[^>]*>)?\\s*\\(/g);\n const count = matches?.length ?? 0;\n if (count >= 2) return [];\n return [\n mkIssue(\n \"realtime.mixed.handlers_per_event\",\n `Classified as realtime=mixed but only ${count} useStream call(s) found — mixed streams need one handler per event.`,\n \"Add a separate `useStream('eventName')` for each event in the contract.\",\n \"fail\",\n ),\n ];\n },\n};\n\nexport const EXTRA_CHECKS: readonly AxisCheck[] = [\n dragTriggerWired,\n swipeTriggerWired,\n composeCrossEntity,\n multiStepHasState,\n stepperAdopted,\n mixedStreamsHaveHandlers,\n];\n","// packages/ui-gen/src/evaluation/axis-checks/registry.ts\n//\n// Flat list of all axis-gated checks. The dispatcher iterates this and\n// runs every entry whose gate matches the classification's axis vector.\n\nimport type { AxisCheck } from \"./types.js\";\nimport { UNIVERSAL_CHECKS } from \"./checks/universal.js\";\nimport { STATE_MERGE_CHECKS } from \"./checks/state-merge.js\";\nimport { STATE_UI_AFFORDANCE_CHECKS } from \"./checks/state-ui-affordance.js\";\nimport { REALTIME_CHECKS } from \"./checks/realtime.js\";\nimport { WRITES_CHECKS } from \"./checks/writes.js\";\nimport { STATE_PAYLOAD_CHECKS } from \"./checks/state-payload.js\";\nimport { TOOLING_CHECKS } from \"./checks/tooling.js\";\nimport { EXTRA_CHECKS } from \"./extras.js\";\n\nexport const REGISTRY: readonly AxisCheck[] = [\n ...UNIVERSAL_CHECKS,\n ...STATE_MERGE_CHECKS,\n ...STATE_UI_AFFORDANCE_CHECKS,\n ...REALTIME_CHECKS,\n ...WRITES_CHECKS,\n ...STATE_PAYLOAD_CHECKS,\n ...TOOLING_CHECKS,\n ...EXTRA_CHECKS,\n];\n","// Axis-keyed dispatcher. Iterates the flat REGISTRY, runs each check\n// whose gate matches the classification's axis vector, and accumulates\n// issues.\n\nimport type { DataContract } from \"@ggui-ai/protocol\";\nimport type { Classification } from \"../../classifier/index.js\";\nimport type { EvalIssue } from \"../types-public.js\";\nimport { REGISTRY } from \"./registry.js\";\nimport { matches, type AxisCheckInput } from \"./types.js\";\nimport type { DesignMode } from \"../../design-mode.js\";\n\nexport interface RunAxisChecksInput {\n sourceCode: string;\n compiledCode: string | null;\n contract?: DataContract;\n originalPrompt: string;\n /** Which triad produced the source — see `AxisCheckInput.designMode`. */\n designMode?: DesignMode;\n}\n\nexport function runAxisChecks(\n classification: Classification,\n input: RunAxisChecksInput,\n): EvalIssue[] {\n if (input.compiledCode === null) return [];\n\n const axisInput: AxisCheckInput = {\n sourceCode: input.sourceCode,\n compiledCode: input.compiledCode,\n ...(input.contract !== undefined ? { contract: input.contract } : {}),\n originalPrompt: input.originalPrompt,\n classification,\n ...(input.designMode !== undefined ? { designMode: input.designMode } : {}),\n };\n\n const issues: EvalIssue[] = [];\n const firedIds = new Set<string>();\n for (const check of REGISTRY) {\n if (!matches(classification.vector, check)) continue;\n // Dedup by id — a check may be registered under multiple gates.\n if (firedIds.has(check.id)) continue;\n firedIds.add(check.id);\n issues.push(...check.run(axisInput));\n }\n return issues;\n}\n","// packages/ui-gen/src/design-mode.ts\n//\n// The ONE definition of the `designMode` option and the rendering-canvas\n// vocabulary. Every triad surface (system prompt, boilerplate, tier-0\n// gate, axis checks, evaluator criteria) AND the visual evaluator import\n// these types from here — nothing re-declares the unions.\n//\n// - `constrained` (default) — today's triad: the component composes\n// from the `@ggui-ai/design` primitives, prop enums and spacing\n// scale, and tier-0 enforces the design vocabulary. Byte-identical\n// to the pre-`designMode` behaviour (pinned by\n// `design-mode.pin.test.ts`).\n// - `free` — the design vocabulary is relaxed: raw HTML elements,\n// inline styles and `<style>` blocks are allowed; the design package\n// is importable but optional. Every HARD contract stays: the data\n// contract via the boilerplate-typed wire hooks, the import\n// allowlist + security bans, the host envelope, the budgets, the\n// blueprint-reuse shape, and brand-bearing color via the closed\n// `--ggui-color-*` token manifest (no literals, no fallbacks).\n\nexport const DESIGN_MODES = [\"constrained\", \"free\"] as const;\n\nexport type DesignMode = (typeof DESIGN_MODES)[number];\n\nexport const DEFAULT_DESIGN_MODE: DesignMode = \"constrained\";\n\n// ─── Rendering canvas ───────────────────────────────────────────────────────\n//\n// ONE canvas vocabulary shared by the prompt input (the `free` prompt\n// TELLS the agent its canvas; the `constrained` prompt keeps its\n// shell/screen descriptors byte-for-byte) and the visual evaluator (one\n// screenshot + judge score per class at `CANVAS_VIEWPORTS[class]`).\n//\n// A class is derived from DISPLAY MODE + width, never from width alone:\n// an inline chat card is `xs-chat-card` whatever the host window\n// measures (the bubble, not the window, bounds the component); a\n// fullscreen-class surface follows its width through the three\n// breakpoints. `canvasForViewportWidth` is monotonic in width per\n// display mode (pinned by `design-mode.test.ts`).\n\nexport const CANVAS_CLASSES = [\n \"xs-chat-card\",\n \"mobile-fullscreen-small\",\n \"md\",\n \"lg\",\n \"xl\",\n] as const;\n\nexport type CanvasClass = (typeof CANVAS_CLASSES)[number];\n\nexport interface CanvasViewport {\n readonly width: number;\n readonly height: number;\n}\n\n/** The viewport (CSS px) each class is rendered + judged at. */\nexport const CANVAS_VIEWPORTS: Readonly<Record<CanvasClass, CanvasViewport>> = {\n \"xs-chat-card\": { width: 400, height: 640 },\n \"mobile-fullscreen-small\": { width: 390, height: 844 },\n md: { width: 768, height: 1024 },\n lg: { width: 1024, height: 768 },\n xl: { width: 1440, height: 900 },\n};\n\n/**\n * The two display modes the canvas derivation distinguishes. `inline`\n * is the chat card (MCP Apps `inline` display mode / the `chat` shell);\n * `fullscreen` is every surface the component owns edge to edge or as\n * a panel (`fullscreen`, `pip`, the `spatial` and `partial` shells) —\n * there the width decides the class.\n */\nexport type CanvasDisplayMode = \"inline\" | \"fullscreen\";\n\n/**\n * Map a shell name (`chat` / `fullscreen` / `spatial` / `partial`) or an\n * MCP Apps display mode (`inline` / `fullscreen` / `pip`) onto the\n * canvas display mode. Only `chat` and `inline` are the inline card;\n * everything else is width-governed.\n */\nexport function canvasDisplayModeForShell(shell: string | undefined): CanvasDisplayMode {\n return shell === \"chat\" || shell === \"inline\" ? \"inline\" : \"fullscreen\";\n}\n\n/** Fullscreen-class breakpoints (inclusive lower bounds), CSS px. */\nexport const CANVAS_BREAKPOINTS = { md: 600, lg: 1024, xl: 1440 } as const;\n\n/**\n * Derive the canvas class from display mode + container width.\n *\n * inline → `xs-chat-card` at every width\n * fullscreen → width < 600 → `mobile-fullscreen-small`\n * 600 – 1023 → `md`\n * 1024 – 1439 → `lg`\n * ≥ 1440 → `xl`\n */\nexport function canvasForViewportWidth(mode: CanvasDisplayMode, width: number): CanvasClass {\n if (mode === \"inline\") return \"xs-chat-card\";\n if (width < CANVAS_BREAKPOINTS.md) return \"mobile-fullscreen-small\";\n if (width < CANVAS_BREAKPOINTS.lg) return \"md\";\n if (width < CANVAS_BREAKPOINTS.xl) return \"lg\";\n return \"xl\";\n}\n\n/**\n * Map today's shell × screen descriptors onto a canvas class when no\n * width is known. `chat` is always the inline card; `spatial` is a\n * ~600px floating panel (`md`); `fullscreen` follows the screen. Unknown\n * values fall back to `lg` (the widest common fullscreen), matching the\n * skeleton's `fullscreen` / `universal` defaults.\n */\nexport function canvasForRendering(\n shellType: string | undefined,\n screen: string | undefined,\n): CanvasClass {\n const shell = shellType ?? \"fullscreen\";\n if (canvasDisplayModeForShell(shell) === \"inline\") return \"xs-chat-card\";\n if (shell === \"spatial\") return \"md\";\n switch (screen ?? \"universal\") {\n case \"mobile\":\n return \"mobile-fullscreen-small\";\n case \"tablet\":\n return \"md\";\n default:\n return \"lg\";\n }\n}\n\nexport interface CanvasDescriptor {\n /** Short human label. */\n readonly label: string;\n /** Inclusive width range the component must look right across, CSS px. */\n readonly minWidthPx: number;\n readonly maxWidthPx: number;\n /** What the host draws around the component at this canvas. */\n readonly host: string;\n}\n\nexport const CANVAS_DESCRIPTORS: Readonly<Record<CanvasClass, CanvasDescriptor>> = {\n \"xs-chat-card\": {\n label: \"extra-small chat card\",\n minWidthPx: 320,\n maxWidthPx: 480,\n host: \"an inline card inside a chat message bubble — the host draws the card border, shadow and rounded corners; the component fills the bubble width and takes its natural height\",\n },\n \"mobile-fullscreen-small\": {\n label: \"small mobile fullscreen\",\n minWidthPx: 320,\n maxWidthPx: 599,\n host: \"a phone-sized viewport the component owns edge to edge — single column, touch targets at least 44px, the component manages its own scroll\",\n },\n md: {\n label: \"medium panel\",\n minWidthPx: 600,\n maxWidthPx: 1023,\n host: \"a tablet viewport or a floating panel (spatial / picture-in-picture) — one or two columns, medium density\",\n },\n lg: {\n label: \"large fullscreen\",\n minWidthPx: 1024,\n maxWidthPx: 1439,\n host: \"a desktop viewport the component owns edge to edge — multi-column layouts, hover states and pointer interactions are available\",\n },\n xl: {\n label: \"extra-large fullscreen\",\n minWidthPx: 1440,\n maxWidthPx: 1920,\n host: \"a wide desktop viewport the component owns edge to edge — cap content width or use the extra room deliberately; never stretch a single column across the whole width\",\n },\n};\n\n/**\n * The explicit sentence the `free` prompt renders for a canvas — the\n * agent is TOLD the canvas, it never guesses it.\n */\nexport function describeCanvas(canvas: CanvasClass): string {\n const d = CANVAS_DESCRIPTORS[canvas];\n return (\n `This component renders on the \\`${canvas}\\` canvas (${d.label}): ` +\n `${d.minWidthPx}–${d.maxWidthPx}px wide, ${d.host}. ` +\n `Design for the whole range — the host may size the iframe anywhere inside it.`\n );\n}\n","// packages/ui-gen/src/evaluation/visual-evaluator.ts\n//\n// Visual evaluator — renders compiled component, takes screenshot,\n// sends to multimodal LLM for visual quality scoring.\n//\n// Two modes:\n// 1. Screenshot mode (puppeteer available): full visual evaluation\n// 2. Source-only mode (no puppeteer): falls back to code-based evaluation\n//\n// The visual evaluator complements the code-based evaluator by catching\n// issues only visible when rendered: broken layouts, overlapping elements,\n// poor visual hierarchy, missing whitespace.\n\nimport { build } from 'esbuild';\nimport { getCssTokens } from '@ggui-ai/design/rendering';\nimport { resolve, dirname } from 'path';\nimport { fileURLToPath } from 'url';\nimport { writeFileSync, mkdirSync, unlinkSync } from 'fs';\nimport { tmpdir } from 'os';\nimport { createVisionAgent, type AgentConfig } from '../harness/llm-router';\nimport type { EvaluationResult, EvaluationIssue, DimensionScores } from './types';\nimport type { CanvasVisualSummary, EvalIssue, VisualEvalSummary } from './types-public.js';\nimport type { LaunchOptions } from 'puppeteer-core';\nimport { CANVAS_VIEWPORTS, type CanvasClass, type CanvasViewport } from '../design-mode.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface VisualEvalConfig {\n /** LLM provider for multimodal evaluation */\n provider: 'claude' | 'google';\n /** Model ID (must support vision/multimodal) */\n model?: string;\n /** Pass threshold for visual score (0-100) */\n passThreshold: number;\n /** Sample props to render the component with */\n sampleProps?: Record<string, unknown>;\n /** Viewport dimensions for screenshot */\n viewport?: { width: number; height: number };\n /**\n * Per-canvas judging — ARM-NEUTRAL (the same judge, prompt and\n * threshold in every design mode). When set, the SAME rendered HTML\n * shell is screenshotted once per class at `CANVAS_VIEWPORTS[class]`\n * and judged once per class; the result carries one entry per class\n * in `canvases`, and the single-shot fields aggregate: `finalScore` =\n * mean of the canvas scores (rounded), `passed` = every canvas passed,\n * `dimensions` = per-dimension means, `issues` = every canvas's issues\n * (description prefixed `[<canvas>]`). Unset (or empty) = today's\n * single screenshot at `viewport`; no `canvases` field on the result.\n */\n canvases?: readonly CanvasClass[];\n /**\n * Optional provider-routing override — see\n * `AgentConfig.routeOverride`. Threaded onto the agent this\n * evaluator constructs so its multimodal call never falls back to\n * `process.env` for credentials or model routing.\n */\n routeOverride?: AgentConfig['routeOverride'];\n /**\n * Provider-429-retry observer — see `AgentConfig.onRetry`.\n * Without it, a rate-limited retry inside the evaluation call\n * happens (the agent's retry loop is unconditional) but never\n * reaches the caller's structured log.\n */\n onRetry?: AgentConfig['onRetry'];\n}\n\n/** One canvas's verdict — screenshot + judge score at that class's viewport. */\nexport interface CanvasVisualResult {\n canvas: CanvasClass;\n viewport: CanvasViewport;\n /** The judge's weighted score for this canvas (0-100). */\n score: number;\n /** `score >= passThreshold`. */\n passed: boolean;\n /** The PNG the judge saw — kept for artefact persistence + the human look. */\n screenshotPng: Buffer;\n}\n\n/**\n * `runVisualEvaluation`'s result. Identical to `EvaluationResult` when\n * `config.canvases` is unset; with canvases set, `canvases` holds the\n * per-class verdicts and the base fields aggregate them (see\n * `VisualEvalConfig.canvases`).\n */\nexport interface VisualEvaluationResult extends EvaluationResult {\n canvases?: CanvasVisualResult[];\n}\n\n/** Injection points for `runVisualEvaluation` — screenshot deps plus the judge call (tests). */\nexport interface VisualEvalDeps extends ScreenshotDeps {\n /** The multimodal judge call (default: `callMultimodalLLM`). */\n judge?: typeof callMultimodalLLM;\n}\n\nexport interface VisualEvalContext {\n /** Compiled JavaScript code (ESM with imports) */\n compiledCode: string;\n /** Original user prompt */\n originalPrompt: string;\n /** Design system CSS tokens */\n cssTokens?: string;\n}\n\n// ---------------------------------------------------------------------------\n// HTML blueprint for rendering\n// ---------------------------------------------------------------------------\n\n/**\n * Bundle the compiled component with the design system using esbuild.\n * Produces a self-contained IIFE that only needs React + ReactDOM from CDN.\n * Resolves @ggui-ai/design/* imports from the local monorepo packages.\n */\n/**\n * The on-disk root of `@ggui-ai/design`, for the esbuild aliases that\n * let JUDGED components resolve the same design source production\n * ships. Exported for the ggui#613 regression pin: the previous inline\n * `'..','..','..','packages','design'` resolved a pre-`oss/`-migration\n * path (`oss/packages/packages/design`) that exists from NEITHER the\n * src nor the dist layout — the visual leg's bundle broke silently at\n * the migration. Three ups from `<pkg>/src/evaluation` (or\n * `<pkg>/dist/evaluation`) is `oss/packages/`; the design package is\n * its direct child.\n */\n/**\n * The on-disk root of `@ggui-ai/ui-gen` itself. The bundle's entry lives\n * in a temp dir, so bare imports in the GENERATED component (`@ggui-ai/wire`\n * and every other allowlisted package) resolve nowhere from there — they\n * resolve from this package's `node_modules` instead (`nodePaths`), the\n * same place the harness's own imports come from.\n */\nexport function resolveUiGenPackageDir(): string {\n const selfDir = dirname(fileURLToPath(import.meta.url));\n return resolve(selfDir, '..', '..');\n}\n\nexport function resolveDesignPackageDir(): string {\n const selfDir = dirname(fileURLToPath(import.meta.url));\n return resolve(selfDir, '..', '..', '..', 'design');\n}\n\nasync function bundleForRendering(\n compiledCode: string,\n sampleProps: Record<string, unknown>,\n): Promise<string> {\n // Write component + entry to temp files for esbuild\n const tmpDir = resolve(tmpdir(), 'ggui-visual-eval-' + Date.now());\n mkdirSync(tmpDir, { recursive: true });\n const componentFile = resolve(tmpDir, 'component.tsx');\n const entryFile = resolve(tmpDir, 'entry.tsx');\n\n const designPkgDir = resolveDesignPackageDir();\n\n // Write the compiled component as a separate module\n writeFileSync(componentFile, compiledCode);\n\n // Entry file imports the component and renders it\n // The generated component is rendered the way a host renders it: inside\n // `GguiWireProvider` with a stub config (dispatch/subscribe are no-ops —\n // the judge sees the first paint, not the wire round-trip). Without the\n // provider every `useAction` / `useStream` bearer threw\n // \"useWireContext must be used within a WireProvider\", React unmounted\n // the root and the judge scored a blank page. An error boundary turns a\n // render throw into visible \"Render error\" text (which the rubric\n // scores 0) instead of the same blank.\n const entryCode = `\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { GguiWireProvider } from '@ggui-ai/wire';\nimport Component from './component.tsx';\n\nconst props = ${JSON.stringify(sampleProps)};\nconst wireConfig = {\n app: { appId: 'visual-eval', appName: 'Visual evaluation' },\n render: { sessionId: 'visual-eval', isConnected: true },\n auth: { isAuthenticated: false },\n dispatch: () => {},\n subscribe: () => () => {},\n};\nclass RenderErrorBoundary extends React.Component<{ children: React.ReactNode }, { message: string | null }> {\n state = { message: null as string | null };\n static getDerivedStateFromError(err: unknown) { return { message: err instanceof Error ? err.message : String(err) }; }\n render() {\n return this.state.message === null\n ? this.props.children\n : React.createElement('div', { className: 'error' }, 'Render error: ' + this.state.message);\n }\n}\nconst root = createRoot(document.getElementById('root')!);\ntry {\n root.render(\n React.createElement(GguiWireProvider, { config: wireConfig },\n React.createElement(RenderErrorBoundary, null, React.createElement(Component, props))),\n );\n} catch (err) {\n root.render(React.createElement('div', { className: 'error' }, 'Render error: ' + (err as Error).message));\n}\n`;\n\n writeFileSync(entryFile, entryCode);\n\n try {\n const result = await build({\n entryPoints: [entryFile],\n bundle: true,\n write: false,\n format: 'esm',\n platform: 'browser',\n target: 'es2020',\n jsx: 'automatic',\n jsxImportSource: 'react',\n external: ['react', 'react-dom', 'react-dom/client', 'react/jsx-runtime'],\n alias: {\n // D1: generated code imports the single `@ggui-ai/design` barrel.\n // The subpath aliases stay for any first-party / legacy code.\n '@ggui-ai/design': resolve(designPkgDir, 'src', 'index.ts'),\n '@ggui-ai/design/primitives': resolve(designPkgDir, 'src', 'primitives', 'index.ts'),\n '@ggui-ai/design/components': resolve(designPkgDir, 'src', 'components', 'index.ts'),\n '@ggui-ai/design/compositions': resolve(designPkgDir, 'src', 'compositions', 'index.ts'),\n '@ggui-ai/design/interact': resolve(designPkgDir, 'src', 'interact', 'index.ts'),\n },\n // Bare imports in the generated component resolve against ui-gen's\n // own node_modules — the temp entry dir has none. Without this every\n // wire-bearing component (`@ggui-ai/wire`) failed to bundle.\n nodePaths: [resolve(resolveUiGenPackageDir(), 'node_modules')],\n logLevel: 'silent',\n });\n\n return result.outputFiles[0]?.text ?? '';\n } finally {\n try { unlinkSync(entryFile); } catch { /* cleanup */ }\n try { unlinkSync(componentFile); } catch { /* cleanup */ }\n }\n}\n\nfunction buildRenderHTML(\n bundledCode: string,\n cssTokens?: string,\n): string {\n // Default to the design tokens production's no-theme branch injects\n // (getCssTokens → default theme, light) — ggui#613: under the s4\n // fallback ban the generated component's `var(--ggui-*)` references\n // carry no literal fallbacks, so an un-injected judged render shows\n // unset colors and the multimodal judge grades broken output. An\n // explicit caller value still wins (theme-aware callers pass their\n // own).\n const tokens = cssTokens ?? getCssTokens();\n return `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <style>\n ${tokens}\n *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n body {\n font-family: var(--ggui-font-family-sans, system-ui, -apple-system, sans-serif);\n background: var(--ggui-color-neutral-50, #ffffff);\n color: var(--ggui-color-neutral-900, #111827);\n }\n .error { color: #dc2626; padding: 16px; font-family: monospace; white-space: pre-wrap; }\n </style>\n</head>\n<body>\n <div id=\"root\"></div>\n <script type=\"importmap\">\n {\n \"imports\": {\n \"react\": \"https://esm.sh/react@18\",\n \"react-dom\": \"https://esm.sh/react-dom@18\",\n \"react-dom/client\": \"https://esm.sh/react-dom@18/client\",\n \"react/jsx-runtime\": \"https://esm.sh/react@18/jsx-runtime\"\n }\n }\n </script>\n <script type=\"module\">\n${bundledCode}\n </script>\n</body>\n</html>`;\n}\n\n// ---------------------------------------------------------------------------\n// Screenshot capture (optional puppeteer dependency)\n// ---------------------------------------------------------------------------\n\n/** The page surface the capture uses — a structural subset of puppeteer's `Page`. */\nexport interface ScreenshotPage {\n setContent(html: string, options: { waitUntil: 'load'; timeout: number }): Promise<void>;\n waitForNetworkIdle(options: { idleTime: number; timeout: number }): Promise<void>;\n waitForSelector(selector: string, options: { timeout: number }): Promise<unknown>;\n screenshot(options: { type: 'png'; fullPage: boolean }): Promise<Uint8Array>;\n}\n\n/** The browser surface the capture uses — a structural subset of puppeteer's `Browser`. */\nexport interface ScreenshotBrowser {\n newPage(): Promise<ScreenshotPage>;\n close(): Promise<void>;\n}\n\nexport type ScreenshotLauncher = (options: LaunchOptions) => Promise<ScreenshotBrowser>;\n\n/** The two members of `@sparticuz/chromium` the fallback launch path reads. */\nexport interface ChromiumProvider {\n readonly args: string[];\n executablePath(): Promise<string>;\n}\n\n/**\n * Injection points for the capture — every default is the production\n * path; tests replace them to pin branch selection without launching a\n * browser.\n */\nexport interface ScreenshotDeps {\n /** Launches the browser (default: `puppeteer-core`'s `launch`). */\n launch?: ScreenshotLauncher;\n /** Environment the executable-path override is read from (default: `process.env`). */\n env?: NodeJS.ProcessEnv;\n /** Loads `@sparticuz/chromium` (default: dynamic import) — only consulted when no override is set. */\n loadChromium?: () => Promise<ChromiumProvider>;\n /** Post-load settle time before the screenshot, ms (default 1000). */\n settleMs?: number;\n}\n\n/**\n * Chromium flags the `PUPPETEER_EXECUTABLE_PATH` launch adds: a system\n * Chromium inside a container has no user namespace for the sandbox and\n * `/dev/shm` is too small for a render surface.\n */\nexport const EXECUTABLE_PATH_LAUNCH_ARGS: readonly string[] = ['--no-sandbox', '--disable-dev-shm-usage'];\n\nconst DEFAULT_SCREENSHOT_VIEWPORT = { width: 1280, height: 800 } as const;\n\nasync function loadSparticuzChromium(): Promise<ChromiumProvider> {\n const chromium = await import('@sparticuz/chromium');\n return chromium.default;\n}\n\n/**\n * Pick the browser binary. `PUPPETEER_EXECUTABLE_PATH` (a system\n * Chromium — the bench runner image, a dev box) wins and skips the\n * `@sparticuz/chromium` load entirely; otherwise the bundled Lambda\n * Chromium supplies both binary and flags, as before.\n */\nexport async function resolveLaunchOptions(\n viewport: { width: number; height: number },\n deps: Pick<ScreenshotDeps, 'env' | 'loadChromium'> = {},\n): Promise<LaunchOptions> {\n const env = deps.env ?? process.env;\n const override = env.PUPPETEER_EXECUTABLE_PATH?.trim();\n if (override) {\n return {\n executablePath: override,\n args: [...EXECUTABLE_PATH_LAUNCH_ARGS],\n defaultViewport: viewport,\n headless: true,\n };\n }\n const chromium = await (deps.loadChromium ?? loadSparticuzChromium)();\n return {\n args: chromium.args,\n defaultViewport: viewport,\n executablePath: await chromium.executablePath(),\n headless: true,\n };\n}\n\nasync function launchWithPuppeteer(options: LaunchOptions): Promise<ScreenshotBrowser> {\n const puppeteer = await import('puppeteer-core');\n return puppeteer.default.launch(options);\n}\n\n/**\n * Take a screenshot of the rendered component.\n * Returns the PNG bytes, or null if no browser could be launched.\n */\nexport async function captureScreenshot(\n html: string,\n viewport: { width: number; height: number } = DEFAULT_SCREENSHOT_VIEWPORT,\n deps: ScreenshotDeps = {},\n): Promise<Buffer | null> {\n try {\n const launchOptions = await resolveLaunchOptions(viewport, deps);\n const browser = await (deps.launch ?? launchWithPuppeteer)(launchOptions);\n try {\n const page = await browser.newPage();\n // puppeteer ≥24.43 narrowed setContent's waitUntil to\n // 'load' | 'domcontentloaded'; waitForNetworkIdle (0 connections\n // for 500ms) reproduces the old 'networkidle0' semantics.\n await page.setContent(html, { waitUntil: 'load', timeout: 15000 });\n await page.waitForNetworkIdle({ idleTime: 500, timeout: 15000 }).catch(() => {});\n await page.waitForSelector('#root > *', { timeout: 10000 }).catch(() => {});\n // Wait a bit for CSS/fonts to settle\n await new Promise((r) => setTimeout(r, deps.settleMs ?? 1000));\n const screenshot = await page.screenshot({ type: 'png', fullPage: true });\n return Buffer.from(screenshot);\n } finally {\n await browser.close();\n }\n } catch (e) {\n console.warn(`[visual-eval] screenshot failed: ${e instanceof Error ? e.message : e}`);\n return null;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Multimodal LLM evaluation\n// ---------------------------------------------------------------------------\n\nconst VISUAL_EVAL_PROMPT = `You are a visual quality evaluator for ggui — a platform where AI agents generate React UI components on demand.\n\n## Context\nThe screenshot shows a generated React component built from a design system with CSS variable theming. The component was created by an LLM to fulfill a user's request. Your job is to evaluate whether the generated UI achieves the user's goal AND looks professionally designed.\n\n## Scoring Dimensions (0-100 each)\n\n1. **completeness** (25%): Does the screenshot show ALL features the user requested? Are all sections, controls, data fields, and interactive elements present? Missing features or sections = major deduction. Compare against the original request carefully.\n\n2. **layout** (25%): Is the layout well-composed? Clear sections and grouping? No overlapping elements? Proper spacing between elements? Responsive-looking? Does it look like a professional app UI, not a homework project?\n\n3. **hierarchy** (25%): Clear visual hierarchy? Headings are visually distinct from body text? Primary actions (buttons) are prominent? Information grouped logically with clear section breaks? Color and size used to guide the eye?\n\n4. **aesthetics** (25%): Professional, polished appearance? Consistent color palette? Good use of whitespace — not too sparse, not too cluttered? Cards, shadows, and borders used effectively? Does it look like something a designer would approve? Would you be comfortable showing this to a client?\n\n## Scoring Guide\n- 90-100: Production-ready. Would ship to real users. Polished layout, clear hierarchy, professional aesthetics.\n- 80-89: Good quality. Minor improvements needed (slightly tight spacing, one section could be better grouped).\n- 70-79: Acceptable but generic. Works correctly but lacks design polish or visual refinement.\n- 60-69: Below standard. Noticeable problems — cramped layout, poor hierarchy, or missing sections.\n- Below 60: Broken or fundamentally incomplete. Error messages visible, blank areas, or critical features missing.\n\n## Important\n- Check the screenshot against the \"Original Request\" — does it actually deliver what was asked for?\n- Error messages like \"Render error\" or blank white space = rendering score 0\n- A component that renders but is just a wall of text with no structure should score low on layout and hierarchy\n\nRespond with ONLY a JSON object (no markdown, no explanation):\n{\n \"completeness\": <0-100>,\n \"layout\": <0-100>,\n \"hierarchy\": <0-100>,\n \"aesthetics\": <0-100>,\n \"issues\": [\n { \"dimension\": \"<dimension>\", \"severity\": \"<critical|major|minor>\", \"description\": \"<what's wrong>\", \"fix\": \"<specific fix>\" }\n ],\n \"critique\": \"<2-3 sentences: what's good, what needs improvement, does it achieve the user's goal?>\"\n}`;\n\n/**\n * Send the screenshot to the configured multimodal provider through\n * the shared `LLMAgent` machinery. Routing through `createVisionAgent`\n * (rather than constructing provider SDK clients inline) is what puts\n * this call inside the same `apiCall()` choke point as every other\n * completion: provider 429s retry with `Retry-After` honoring, the\n * caller's `onRetry` observer sees each retry, and `routeOverride`\n * governs credentials and model routing (including the Anthropic\n * Bedrock path) instead of `process.env`.\n */\nasync function callMultimodalLLM(\n config: VisualEvalConfig,\n model: string,\n prompt: string,\n screenshot: Buffer,\n originalPrompt: string,\n) {\n const userPrompt = `## Original Request\\n${originalPrompt}\\n\\nEvaluate the screenshot of the generated component.`;\n const agent = createVisionAgent({\n provider: config.provider === 'claude' ? 'anthropic' : config.provider,\n model,\n routeOverride: config.routeOverride,\n onRetry: config.onRetry,\n });\n return agent.callVision(\n model,\n prompt,\n userPrompt,\n { mediaType: 'image/png', base64: screenshot.toString('base64') },\n 1500,\n );\n}\n\n// ---------------------------------------------------------------------------\n// Main entry point\n// ---------------------------------------------------------------------------\n\n/**\n * Run visual evaluation on a compiled component.\n *\n * 1. Builds an HTML page with the component + sample props\n * 2. Takes a screenshot via puppeteer (if available)\n * 3. Sends screenshot to multimodal LLM for visual scoring\n *\n * Returns null if puppeteer is not available (graceful fallback).\n */\nexport async function runVisualEvaluation(\n context: VisualEvalContext,\n config: VisualEvalConfig,\n deps: VisualEvalDeps = {},\n): Promise<VisualEvaluationResult | null> {\n const startTime = Date.now();\n const judge = deps.judge ?? callMultimodalLLM;\n\n // Bundle component + design system into a single JS file\n const bundledCode = await bundleForRendering(\n context.compiledCode,\n config.sampleProps ?? {},\n );\n console.log(`[visual-eval] bundled: ${bundledCode.length}B (${Date.now() - startTime}ms)`);\n\n // Build the HTML page — ONE shell; per-canvas mode re-renders it at each viewport.\n const html = buildRenderHTML(bundledCode, context.cssTokens);\n const model = config.model ?? getDefaultVisualModel(config.provider);\n\n // ── Per-canvas mode: one screenshot + one judge call per class ──\n if (config.canvases !== undefined && config.canvases.length > 0) {\n const perCanvas: CanvasVisualResult[] = [];\n const perCanvasResults: EvaluationResult[] = [];\n for (const canvas of config.canvases) {\n const viewport = CANVAS_VIEWPORTS[canvas];\n const screenshot = await captureScreenshot(html, viewport, deps);\n if (!screenshot) {\n console.warn(`[visual-eval] no browser available at canvas ${canvas} — skipping visual evaluation`);\n return null;\n }\n const response = await judge(config, model, VISUAL_EVAL_PROMPT, screenshot, context.originalPrompt);\n const result = parseVisualResponse(response.text, config.passThreshold);\n result.inputTokens = response.inputTokens;\n result.outputTokens = response.outputTokens;\n perCanvasResults.push(result);\n perCanvas.push({\n canvas,\n viewport,\n score: result.finalScore,\n passed: result.passed,\n screenshotPng: screenshot,\n });\n console.log(\n `[visual-eval] canvas=${canvas} ${viewport.width}×${viewport.height} score=${result.finalScore} ` +\n `${result.passed ? 'pass' : 'FAIL'} | in=${response.inputTokens} out=${response.outputTokens}`,\n );\n }\n const aggregate = aggregateCanvasResults(perCanvas, perCanvasResults);\n const elapsed = Date.now() - startTime;\n console.log(\n `[visual-eval] score=${aggregate.finalScore} (mean of ${perCanvas.length} canvases; ` +\n `${aggregate.passed ? 'every canvas passed' : `${perCanvas.filter((c) => !c.passed).length} failed`}) (${elapsed}ms)`,\n );\n return aggregate;\n }\n\n // ── Single-shot mode (today's path) ──\n const screenshot = await captureScreenshot(html, config.viewport, deps);\n if (!screenshot) {\n console.warn('[visual-eval] no browser available — skipping visual evaluation');\n return null;\n }\n console.log(`[visual-eval] screenshot: ${screenshot.length}B (${Date.now() - startTime}ms)`);\n\n // Send to multimodal LLM\n const response = await judge(\n config,\n model,\n VISUAL_EVAL_PROMPT,\n screenshot,\n context.originalPrompt,\n );\n\n // Parse response\n const result = parseVisualResponse(response.text, config.passThreshold);\n result.inputTokens = response.inputTokens;\n result.outputTokens = response.outputTokens;\n\n const elapsed = Date.now() - startTime;\n console.log(`[visual-eval] score=${result.finalScore} (${elapsed}ms) | in=${response.inputTokens} out=${response.outputTokens}`);\n\n return result;\n}\n\n/**\n * Fold per-canvas verdicts into the single-shot fields: `finalScore` =\n * rounded mean, `passed` = every canvas passed, `dimensions` = rounded\n * per-dimension means, `issues` = union (description prefixed with the\n * canvas), `critique` = one line per canvas, tokens summed.\n */\nfunction aggregateCanvasResults(\n perCanvas: readonly CanvasVisualResult[],\n results: readonly EvaluationResult[],\n): VisualEvaluationResult {\n const n = results.length;\n const mean = (pick: (r: EvaluationResult) => number): number =>\n Math.round(results.reduce((sum, r) => sum + pick(r), 0) / n);\n const dimensions: DimensionScores = {\n completeness: mean((r) => r.dimensions.completeness),\n visualPolish: mean((r) => r.dimensions.visualPolish),\n interactivity: mean((r) => r.dimensions.interactivity),\n accessibility: mean((r) => r.dimensions.accessibility),\n codeQuality: mean((r) => r.dimensions.codeQuality),\n };\n const issues: EvaluationIssue[] = [];\n const critiques: string[] = [];\n let inputTokens = 0;\n let outputTokens = 0;\n results.forEach((r, i) => {\n const canvas = perCanvas[i]!.canvas;\n for (const issue of r.issues) issues.push({ ...issue, description: `[${canvas}] ${issue.description}` });\n if (r.critique) critiques.push(`${canvas}: ${r.critique}`);\n inputTokens += r.inputTokens ?? 0;\n outputTokens += r.outputTokens ?? 0;\n });\n return {\n passed: perCanvas.every((c) => c.passed),\n finalScore: mean((r) => r.finalScore),\n dimensions,\n issues,\n ...(critiques.length > 0 ? { critique: critiques.join('\\n') } : {}),\n inputTokens,\n outputTokens,\n canvases: [...perCanvas],\n };\n}\n\n/** The per-canvas verdicts without the PNGs — what the harness stamps on `EvalResult.visual`. */\nexport function summarizeVisualResult(result: VisualEvaluationResult): VisualEvalSummary | undefined {\n if (result.canvases === undefined) return undefined;\n const canvases: CanvasVisualSummary[] = result.canvases.map((c) => ({\n canvas: c.canvas,\n viewport: c.viewport,\n score: c.score,\n passed: c.passed,\n }));\n return { score: result.finalScore, passed: result.passed, canvases };\n}\n\n/**\n * Exported for testing — bundles and builds the HTML for rendering;\n * `callMultimodalLLM` so the #504 routing contract (config →\n * `createVisionAgent`) is assertable without a screenshot pipeline.\n */\nexport { bundleForRendering, buildRenderHTML, callMultimodalLLM };\n\n// ---------------------------------------------------------------------------\n// Response parsing\n// ---------------------------------------------------------------------------\n\nfunction parseVisualResponse(text: string, passThreshold: number): EvaluationResult {\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error('Visual evaluator did not return valid JSON: ' + text.slice(0, 200));\n }\n\n const raw = JSON.parse(jsonMatch[0]);\n\n // Visual dimensions (equal weights now)\n const completeness = raw.completeness ?? 0;\n const layout = raw.layout ?? 0;\n const hierarchy = raw.hierarchy ?? 0;\n const aesthetics = raw.aesthetics ?? 0;\n\n // Weighted average\n const finalScore = Math.round(\n completeness * 0.25 +\n layout * 0.25 +\n hierarchy * 0.25 +\n aesthetics * 0.25,\n );\n\n // Map to standard dimensions for consistency\n const dimensions: DimensionScores = {\n completeness,\n visualPolish: aesthetics,\n interactivity: 0, // can't assess interactivity from screenshot\n accessibility: 0, // can't assess a11y from screenshot\n codeQuality: 0, // can't assess code from screenshot\n };\n\n const issues: EvaluationIssue[] = (raw.issues || []).map((i: Record<string, string>) => ({\n dimension: i.dimension || 'visual',\n severity: (i.severity as 'critical' | 'major' | 'minor') || 'minor',\n description: i.description || '',\n fix: i.fix || '',\n }));\n\n return {\n passed: finalScore >= passThreshold,\n finalScore,\n dimensions,\n issues,\n critique: raw.critique,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Default models for visual evaluation\n// ---------------------------------------------------------------------------\n\nfunction getDefaultVisualModel(provider: 'claude' | 'google'): string {\n switch (provider) {\n case 'claude': return 'claude-haiku-4-5-20251001';\n case 'google': return 'gemini-3-flash-preview';\n }\n}\n\n// ---------------------------------------------------------------------------\n// Tier 2 adapter — returns EvalIssue[]\n// ---------------------------------------------------------------------------\n\n/** What the harness's eval round consumes from the visual leg. */\nexport interface VisualEvalOutcome {\n /** Tier-2 issues (empty when no browser is available). */\n issues: EvalIssue[];\n /**\n * Per-canvas summary — present ONLY when `config.canvases` was set and\n * the leg ran; the harness stamps it on `EvalResult.visual`. Absent on\n * the single-shot path (byte-identical to the pre-canvas result).\n */\n summary?: VisualEvalSummary;\n}\n\n/**\n * Run visual evaluation and return tier 2 EvalIssues (+ the per-canvas\n * summary when canvases were requested).\n */\nexport async function runVisualEval(\n context: VisualEvalContext,\n config: VisualEvalConfig,\n): Promise<VisualEvalOutcome> {\n const result = await runVisualEvaluation(context, config);\n if (!result) return { issues: [] }; // puppeteer not available\n\n const issues: EvalIssue[] = (result.issues || []).map(issue => ({\n tier: 2 as const,\n result: (issue.severity === 'critical' ? 'fail' : 'warn') as 'fail' | 'warn',\n category: 'visual' as const,\n subcategory: issue.dimension,\n severity: (issue.severity === 'critical' ? 'critical' : 'major') as 'critical' | 'major',\n description: issue.description,\n fix: issue.fix || '',\n }));\n const summary = summarizeVisualResult(result);\n return summary === undefined ? { issues } : { issues, summary };\n}\n"]}