@ggui-ai/ui-gen 0.28.0 → 0.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{adapter-h4_V69LI.d.ts → adapter-DLQ-5COm.d.ts} +1 -1
- package/dist/adapters/base.js +2 -27
- package/dist/adapters/base.js.map +1 -1
- package/dist/adapters/generation-dispatch.d.ts +14 -6
- package/dist/adapters/generation-dispatch.js +40 -19260
- package/dist/adapters/generation-dispatch.js.map +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.js +25 -3561
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/types.js +2 -9
- package/dist/adapters/types.js.map +1 -1
- package/dist/advanced/index.d.ts +13 -12
- package/dist/advanced/index.js +63 -21954
- package/dist/advanced/index.js.map +1 -1
- package/dist/{bank-Ctdp3FUA.d.ts → bank-LWaiAtaA.d.ts} +1 -1
- package/dist/blueprint-validator.js +6 -2301
- package/dist/blueprint-validator.js.map +1 -1
- package/dist/boilerplate.d.ts +3 -2
- package/dist/boilerplate.js +6 -1867
- package/dist/boilerplate.js.map +1 -1
- package/dist/check/index.d.ts +3 -2
- package/dist/check/index.js +6 -1923
- package/dist/check/index.js.map +1 -1
- package/dist/chunk-33B3BAWS.js +24 -0
- package/dist/chunk-33B3BAWS.js.map +1 -0
- package/dist/chunk-3HSGA6NI.js +591 -0
- package/dist/chunk-3HSGA6NI.js.map +1 -0
- package/dist/chunk-3NNNGNTO.js +1707 -0
- package/dist/chunk-3NNNGNTO.js.map +1 -0
- package/dist/chunk-3T2HMTON.js +79 -0
- package/dist/chunk-3T2HMTON.js.map +1 -0
- package/dist/chunk-3ZSSDV3L.js +123 -0
- package/dist/chunk-3ZSSDV3L.js.map +1 -0
- package/dist/chunk-4MBR5GA3.js +99 -0
- package/dist/chunk-4MBR5GA3.js.map +1 -0
- package/dist/chunk-56NJFD55.js +337 -0
- package/dist/chunk-56NJFD55.js.map +1 -0
- package/dist/chunk-5AGTY555.js +26 -0
- package/dist/chunk-5AGTY555.js.map +1 -0
- package/dist/chunk-5EJM7EGY.js +115 -0
- package/dist/chunk-5EJM7EGY.js.map +1 -0
- package/dist/chunk-5KXCQLLR.js +529 -0
- package/dist/chunk-5KXCQLLR.js.map +1 -0
- package/dist/chunk-5VBXHVEH.js +171 -0
- package/dist/chunk-5VBXHVEH.js.map +1 -0
- package/dist/chunk-6KDDEING.js +515 -0
- package/dist/chunk-6KDDEING.js.map +1 -0
- package/dist/chunk-6VDRWAP6.js +123 -0
- package/dist/chunk-6VDRWAP6.js.map +1 -0
- package/dist/chunk-732IBFEJ.js +2400 -0
- package/dist/chunk-732IBFEJ.js.map +1 -0
- package/dist/chunk-73AURS3I.js +46 -0
- package/dist/chunk-73AURS3I.js.map +1 -0
- package/dist/chunk-77H5SKLX.js +8 -0
- package/dist/chunk-77H5SKLX.js.map +1 -0
- package/dist/chunk-7QE3AHLE.js +35 -0
- package/dist/chunk-7QE3AHLE.js.map +1 -0
- package/dist/chunk-A375NNWN.js +11 -0
- package/dist/chunk-A375NNWN.js.map +1 -0
- package/dist/chunk-AOU33EFS.js +140 -0
- package/dist/chunk-AOU33EFS.js.map +1 -0
- package/dist/chunk-BA4QYA6E.js +461 -0
- package/dist/chunk-BA4QYA6E.js.map +1 -0
- package/dist/chunk-DBP764GL.js +3 -0
- package/dist/chunk-DBP764GL.js.map +1 -0
- package/dist/chunk-DUU3ZJDQ.js +41 -0
- package/dist/chunk-DUU3ZJDQ.js.map +1 -0
- package/dist/chunk-DXKRBXNU.js +30 -0
- package/dist/chunk-DXKRBXNU.js.map +1 -0
- package/dist/chunk-FB7OEEAH.js +1467 -0
- package/dist/chunk-FB7OEEAH.js.map +1 -0
- package/dist/chunk-FLRNMZV2.js +18 -0
- package/dist/chunk-FLRNMZV2.js.map +1 -0
- package/dist/chunk-FWJIMKFZ.js +2032 -0
- package/dist/chunk-FWJIMKFZ.js.map +1 -0
- package/dist/chunk-FXRHWYIQ.js +163 -0
- package/dist/chunk-FXRHWYIQ.js.map +1 -0
- package/dist/chunk-G3PMV62Z.js +33 -0
- package/dist/chunk-G3PMV62Z.js.map +1 -0
- package/dist/chunk-GAJI7Y3P.js +13 -0
- package/dist/chunk-GAJI7Y3P.js.map +1 -0
- package/dist/chunk-GYINWMPR.js +2052 -0
- package/dist/chunk-GYINWMPR.js.map +1 -0
- package/dist/chunk-HD6ABIK7.js +484 -0
- package/dist/chunk-HD6ABIK7.js.map +1 -0
- package/dist/chunk-HDQVHYO6.js +100 -0
- package/dist/chunk-HDQVHYO6.js.map +1 -0
- package/dist/chunk-IHUT3SIW.js +7 -0
- package/dist/chunk-IHUT3SIW.js.map +1 -0
- package/dist/chunk-JDH5EGNZ.js +126 -0
- package/dist/chunk-JDH5EGNZ.js.map +1 -0
- package/dist/chunk-JMD4RGSV.js +37 -0
- package/dist/chunk-JMD4RGSV.js.map +1 -0
- package/dist/chunk-KJWGZL5B.js +33 -0
- package/dist/chunk-KJWGZL5B.js.map +1 -0
- package/dist/chunk-MKMDQFZ7.js +86 -0
- package/dist/chunk-MKMDQFZ7.js.map +1 -0
- package/dist/chunk-NF6JUZWF.js +85 -0
- package/dist/chunk-NF6JUZWF.js.map +1 -0
- package/dist/chunk-O2YC6XDC.js +1933 -0
- package/dist/chunk-O2YC6XDC.js.map +1 -0
- package/dist/chunk-OVLH5ICV.js +29 -0
- package/dist/chunk-OVLH5ICV.js.map +1 -0
- package/dist/chunk-PBOYHGSD.js +106 -0
- package/dist/chunk-PBOYHGSD.js.map +1 -0
- package/dist/chunk-PJFH7QWA.js +81 -0
- package/dist/chunk-PJFH7QWA.js.map +1 -0
- package/dist/chunk-PUH4CXGZ.js +284 -0
- package/dist/chunk-PUH4CXGZ.js.map +1 -0
- package/dist/chunk-QLXXPGTV.js +18 -0
- package/dist/chunk-QLXXPGTV.js.map +1 -0
- package/dist/chunk-R5GIGPW2.js +2845 -0
- package/dist/chunk-R5GIGPW2.js.map +1 -0
- package/dist/chunk-RH4IUSTO.js +83 -0
- package/dist/chunk-RH4IUSTO.js.map +1 -0
- package/dist/chunk-S2GVXKKY.js +153 -0
- package/dist/chunk-S2GVXKKY.js.map +1 -0
- package/dist/chunk-TVHGKFJS.js +58 -0
- package/dist/chunk-TVHGKFJS.js.map +1 -0
- package/dist/chunk-U7GALWLG.js +66 -0
- package/dist/chunk-U7GALWLG.js.map +1 -0
- package/dist/chunk-VTC263LT.js +256 -0
- package/dist/chunk-VTC263LT.js.map +1 -0
- package/dist/chunk-WEOXFEVE.js +739 -0
- package/dist/chunk-WEOXFEVE.js.map +1 -0
- package/dist/chunk-WYHP46LT.js +28 -0
- package/dist/chunk-WYHP46LT.js.map +1 -0
- package/dist/chunk-XGLO5LGG.js +274 -0
- package/dist/chunk-XGLO5LGG.js.map +1 -0
- package/dist/chunk-XRBCRKA2.js +29 -0
- package/dist/chunk-XRBCRKA2.js.map +1 -0
- package/dist/chunk-XW7ADFFV.js +340 -0
- package/dist/chunk-XW7ADFFV.js.map +1 -0
- package/dist/chunk-YIQ42IUX.js +34 -0
- package/dist/chunk-YIQ42IUX.js.map +1 -0
- package/dist/chunk-YJZTUY7B.js +101 -0
- package/dist/chunk-YJZTUY7B.js.map +1 -0
- package/dist/chunk-Z3CXME3K.js +107 -0
- package/dist/chunk-Z3CXME3K.js.map +1 -0
- package/dist/classifier/index.js +2 -527
- package/dist/classifier/index.js.map +1 -1
- package/dist/client-JBPCXU7W.js +4 -0
- package/dist/client-JBPCXU7W.js.map +1 -0
- package/dist/compose.js +3 -367
- package/dist/compose.js.map +1 -1
- package/dist/cost-tracker-HHGQ4FTW.js +67 -0
- package/dist/cost-tracker-HHGQ4FTW.js.map +1 -0
- package/dist/{create-ui-generator-BrZHF0cf.d.ts → create-ui-generator-BY-WeaPi.d.ts} +3 -3
- package/dist/{design-mode-DGWN_Gkm.d.ts → design-mode-XyOQmzE0.d.ts} +4 -3
- package/dist/{dispatch-B07TI30d.d.ts → dispatch-8LzTddKw.d.ts} +3 -2
- package/dist/dist-UALN6ZVB.js +543 -0
- package/dist/dist-UALN6ZVB.js.map +1 -0
- package/dist/dupe-break-X6K7QFIS.js +4 -0
- package/dist/dupe-break-X6K7QFIS.js.map +1 -0
- package/dist/evaluation/axis-checks/index.d.ts +5 -4
- package/dist/evaluation/axis-checks/index.js +6 -1914
- package/dist/evaluation/axis-checks/index.js.map +1 -1
- package/dist/evaluation/axis-checks/registry.d.ts +3 -2
- package/dist/evaluation/axis-checks/registry.js +3 -1844
- package/dist/evaluation/axis-checks/registry.js.map +1 -1
- package/dist/evaluation/index.d.ts +49 -132
- package/dist/evaluation/index.js +302 -6466
- package/dist/evaluation/index.js.map +1 -1
- package/dist/evaluation/types.d.ts +3 -2
- package/dist/evaluation/types.js +2 -5
- package/dist/evaluation/types.js.map +1 -1
- package/dist/fragments/index.js +2 -338
- package/dist/fragments/index.js.map +1 -1
- package/dist/{generate-tSO_shQ0.d.ts → generate-DQ4ci90s.d.ts} +1 -1
- package/dist/harness/check/runtime-render/index.d.ts +35 -15
- package/dist/harness/check/runtime-render/index.js +6 -2390
- package/dist/harness/check/runtime-render/index.js.map +1 -1
- package/dist/harness/check/runtime-render/render-check-worker.js +4 -1739
- package/dist/harness/check/runtime-render/render-check-worker.js.map +1 -1
- package/dist/harness/index.d.ts +3 -2
- package/dist/harness/index.js +23 -5126
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/llm-trace-sink.js +2 -24
- package/dist/harness/llm-trace-sink.js.map +1 -1
- package/dist/harness/prompts.d.ts +2 -2
- package/dist/harness/prompts.js +8 -324
- package/dist/harness/prompts.js.map +1 -1
- package/dist/harness/result-types.d.ts +6 -5
- package/dist/harness/result-types.js +2 -0
- package/dist/harness/result-types.js.map +1 -1
- package/dist/harness/runtime.d.ts +22 -5
- package/dist/harness/runtime.js +10 -2313
- package/dist/harness/runtime.js.map +1 -1
- package/dist/harness/types-public.d.ts +3 -2
- package/dist/harness/types-public.js +16 -2954
- package/dist/harness/types-public.js.map +1 -1
- package/dist/harness/validator-trace-sink.d.ts +3 -2
- package/dist/harness/validator-trace-sink.js +2 -26
- package/dist/harness/validator-trace-sink.js.map +1 -1
- package/dist/hash.js +2 -39
- package/dist/hash.js.map +1 -1
- package/dist/hashline-5OKREIRM.js +4 -0
- package/dist/hashline-5OKREIRM.js.map +1 -0
- package/dist/index.d.ts +50 -11
- package/dist/index.js +57 -22015
- package/dist/index.js.map +1 -1
- package/dist/llm-evaluator-PN3WFCS4.js +653 -0
- package/dist/llm-evaluator-PN3WFCS4.js.map +1 -0
- package/dist/magic-string.es-2NZTC4GZ.js +1307 -0
- package/dist/magic-string.es-2NZTC4GZ.js.map +1 -0
- package/dist/patch.d.ts +3 -2
- package/dist/patch.js +2 -56
- package/dist/patch.js.map +1 -1
- package/dist/policy-VCYKGSAC.js +5 -0
- package/dist/policy-VCYKGSAC.js.map +1 -0
- package/dist/policy.js +2 -35
- package/dist/policy.js.map +1 -1
- package/dist/primitive-index-2OF6F4TZ.js +131 -0
- package/dist/primitive-index-2OF6F4TZ.js.map +1 -0
- package/dist/primitive-slice-WTMBLYFJ.js +235 -0
- package/dist/primitive-slice-WTMBLYFJ.js.map +1 -0
- package/dist/{prompts-BhNUuRoZ.d.ts → prompts-CLZGywMP.d.ts} +1 -1
- package/dist/provider-adapter-contract.js +10407 -14204
- package/dist/provider-adapter-contract.js.map +1 -1
- package/dist/provider-adapter.js +2 -44
- package/dist/provider-adapter.js.map +1 -1
- package/dist/providers/index.d.ts +89 -1
- package/dist/providers/index.js +115 -44
- package/dist/providers/index.js.map +1 -1
- package/dist/raw-C6KBH5I3.js +141 -0
- package/dist/raw-C6KBH5I3.js.map +1 -0
- package/dist/raw-FXSBXQTZ.js +7 -0
- package/dist/raw-FXSBXQTZ.js.map +1 -0
- package/dist/raw-MURDUPGK.js +8 -0
- package/dist/raw-MURDUPGK.js.map +1 -0
- package/dist/raw-T3GW3UVX.js +8 -0
- package/dist/raw-T3GW3UVX.js.map +1 -0
- package/dist/render-check-host-ZNIS6BJ5.js +5 -0
- package/dist/render-check-host-ZNIS6BJ5.js.map +1 -0
- package/dist/sdk-4JNSDNSR.js +6 -0
- package/dist/sdk-4JNSDNSR.js.map +1 -0
- package/dist/sdk-DIVJMHCX.js +7 -0
- package/dist/sdk-DIVJMHCX.js.map +1 -0
- package/dist/sdk-QRJOCRTS.js +7 -0
- package/dist/sdk-QRJOCRTS.js.map +1 -0
- package/dist/tag-balance-CTHCTRJ7.js +123 -0
- package/dist/tag-balance-CTHCTRJ7.js.map +1 -0
- package/dist/tools/get-primitives-ts.d.ts +1 -1
- package/dist/tools/get-primitives-ts.js +3 -1
- package/dist/tools/get-primitives-ts.js.map +1 -1
- package/dist/tools/render-check-worker.js +3 -40
- package/dist/tools/render-check-worker.js.map +1 -1
- package/dist/{types-public-h8IMnYuh.d.ts → types-public-hYlrerZh.d.ts} +35 -2
- package/dist/validation/index.d.ts +2 -2
- package/dist/validation/index.js +3 -498
- package/dist/validation/index.js.map +1 -1
- package/dist/{visual-evaluator-C2strxqD.d.ts → visual-evaluator-KskajxD5.d.ts} +14 -4
- package/dist/visual-evaluator-TGEXYQTP.js +12 -0
- package/dist/visual-evaluator-TGEXYQTP.js.map +1 -0
- package/dist/workflows.d.ts +3 -2
- package/dist/workflows.js +2 -151
- package/dist/workflows.js.map +1 -1
- package/package.json +20 -16
- package/src/adapters/claude/sdk.ts +4 -2
- package/src/adapters/claude/tool-bridge.ts +2 -1
- package/src/adapters/generation-dispatch.ts +9 -0
- package/src/adapters/openai/raw.ts +4 -0
- package/src/adapters/openai/sdk.ts +6 -1
- package/src/adapters/openai/tokens.ts +21 -7
- package/src/adapters/tool-bridge.ts +1 -1
- package/src/adapters/tools.ts +1 -1
- package/src/advanced/feedback.ts +1 -2
- package/src/advanced/generator.ts +4 -3
- package/src/boilerplate/free-design-prompt.ts +7 -0
- package/src/boilerplate/generate.ts +18 -5
- package/src/boilerplate/hard-sections.ts +8 -3
- package/src/boilerplate/react-hooks.ts +56 -0
- package/src/boilerplate/system-prompt.ts +12 -3
- package/src/check/run-tier0.ts +233 -8
- package/src/check/type-checker.ts +128 -16
- package/src/coding-agent/tools.ts +26 -3
- package/src/design-mode.ts +4 -9
- package/src/evaluation/axis-checks/checks/state-merge.ts +2 -4
- package/src/evaluation/axis-checks/checks/state-payload.ts +1 -28
- package/src/evaluation/axis-checks/checks/tint.ts +197 -0
- package/src/evaluation/axis-checks/helpers.ts +121 -0
- package/src/evaluation/axis-checks/registry.ts +2 -0
- package/src/evaluation/criteria/__fixtures__/edge-v2-draw2.json +4629 -0
- package/src/evaluation/criteria/bank.ts +1 -1
- package/src/evaluation/criteria/edge-instruments.ts +14 -0
- package/src/evaluation/criteria/edge-probe-v2.ts +352 -0
- package/src/evaluation/criteria/edge-v2.ts +242 -0
- package/src/evaluation/criteria/resolve.ts +24 -5
- package/src/evaluation/index.ts +3 -5
- package/src/evaluation/mcp-server.ts +0 -50
- package/src/evaluation/types-public.ts +6 -1
- package/src/evaluation/visual-evaluator.ts +161 -30
- package/src/harness/check/runtime-render/index.ts +28 -4
- package/src/harness/check/runtime-render/render-check.ts +20 -21
- package/src/harness/claude-agent-sdk-loader.ts +93 -0
- package/src/harness/claude-code-login-query.ts +1 -1
- package/src/harness/coding/generate-task-runner.ts +1 -0
- package/src/harness/coding/run-coding-turn.ts +3 -0
- package/src/harness/coding/run-eval-round.ts +9 -0
- package/src/harness/llm-router.ts +50 -2
- package/src/harness/runtime.ts +17 -0
- package/src/index.ts +9 -0
- package/src/providers/anthropic-tool-call.ts +263 -0
- package/src/providers/index.ts +13 -0
- package/src/tools/get-primitives-ts.ts +1 -1
- package/src/tools/render-check.ts +4 -4
- package/src/validation/primitives.ts +2 -1
- package/src/evaluation/loop.ts +0 -218
package/src/evaluation/loop.ts
DELETED
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
// packages/ui-gen/src/evaluation/loop.ts
|
|
2
|
-
|
|
3
|
-
import { query, type McpServerConfig } from '@anthropic-ai/claude-agent-sdk';
|
|
4
|
-
import { sdkToolPins } from '../adapters/claude/sdk-tool-pins';
|
|
5
|
-
import { runEvaluation } from './evaluator';
|
|
6
|
-
import {
|
|
7
|
-
extractCompiledCodeFromMessage,
|
|
8
|
-
extractSourceCodeFromMessage,
|
|
9
|
-
} from './message-parsing';
|
|
10
|
-
import { buildFixPrompt } from './prompts';
|
|
11
|
-
import {
|
|
12
|
-
MAX_EVAL_ROUNDS_HARD_LIMIT,
|
|
13
|
-
} from './types';
|
|
14
|
-
import type {
|
|
15
|
-
EvaluationConfig,
|
|
16
|
-
EvaluationContext,
|
|
17
|
-
EvaluationResult,
|
|
18
|
-
QualityMetadata,
|
|
19
|
-
} from './types';
|
|
20
|
-
import type { SdkMessage } from './message-parsing';
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Options for running the evaluation loop.
|
|
24
|
-
*
|
|
25
|
-
* Controls the evaluate-fix-re-evaluate cycle that improves generated
|
|
26
|
-
* component quality until it passes or the round limit is reached.
|
|
27
|
-
*/
|
|
28
|
-
export interface EvaluationLoopOptions {
|
|
29
|
-
/** Session ID of the generator to resume for fixes */
|
|
30
|
-
generatorSessionId: string;
|
|
31
|
-
/** Evaluation context (code, prompt, design, theme) */
|
|
32
|
-
context: EvaluationContext;
|
|
33
|
-
/** Evaluation configuration (thresholds, budgets, round limits) */
|
|
34
|
-
config: EvaluationConfig;
|
|
35
|
-
/** Progress callback for evaluating/fixing status updates */
|
|
36
|
-
onProgress?: (event: { type: 'evaluating' | 'fixing'; round: number }) => void;
|
|
37
|
-
/** Generator context to pass when resuming the session for fixes */
|
|
38
|
-
generatorOptions?: {
|
|
39
|
-
/** Working directory for the generator session */
|
|
40
|
-
cwd?: string;
|
|
41
|
-
/** MCP servers available to the fix agent */
|
|
42
|
-
mcpServers?: Record<string, McpServerConfig>;
|
|
43
|
-
/** Tool names to approve. Absent → every tool of every server in `mcpServers` (ggui#1714). */
|
|
44
|
-
allowedTools?: string[];
|
|
45
|
-
/**
|
|
46
|
-
* CLI built-in tools to offer the fix agent (e.g. `['Write']`). Default: none.
|
|
47
|
-
* An explicit opt-in: a built-in that writes or executes acts on the host (ggui#1714).
|
|
48
|
-
*/
|
|
49
|
-
builtinTools?: readonly string[];
|
|
50
|
-
/** LLM model for fix rounds */
|
|
51
|
-
model?: string;
|
|
52
|
-
/** Environment variables (includes BYOK credentials) */
|
|
53
|
-
env?: Record<string, string>;
|
|
54
|
-
/** Stderr capture callback for debugging */
|
|
55
|
-
stderr?: (data: string) => void;
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Result of the evaluation loop.
|
|
61
|
-
*
|
|
62
|
-
* Contains the final (possibly fixed) code, quality scores, and
|
|
63
|
-
* the evaluation history from each round.
|
|
64
|
-
*/
|
|
65
|
-
export interface EvaluationLoopResult {
|
|
66
|
-
/** Final compiled code (may be updated by fix rounds) */
|
|
67
|
-
finalCode: string;
|
|
68
|
-
/** Final source code (may be updated by fix rounds) */
|
|
69
|
-
finalSourceCode?: string;
|
|
70
|
-
/** Quality metadata for the generation result */
|
|
71
|
-
qualityMetadata: QualityMetadata;
|
|
72
|
-
/** All evaluation results from each round */
|
|
73
|
-
evaluationResults: EvaluationResult[];
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Run the evaluation loop: evaluate -> fix -> re-evaluate (up to maxRounds).
|
|
78
|
-
*
|
|
79
|
-
* If the first evaluation passes, returns immediately.
|
|
80
|
-
* If it fails, resumes the generator session with critique feedback,
|
|
81
|
-
* captures the fixed code, and re-evaluates. Repeats until the score
|
|
82
|
-
* passes or the round limit is reached.
|
|
83
|
-
*
|
|
84
|
-
* @param options - Evaluation loop configuration and callbacks
|
|
85
|
-
* @returns The final code, quality metadata, and evaluation history
|
|
86
|
-
*/
|
|
87
|
-
export async function runEvaluationLoop(
|
|
88
|
-
options: EvaluationLoopOptions
|
|
89
|
-
): Promise<EvaluationLoopResult> {
|
|
90
|
-
const { generatorSessionId, context, config, onProgress, generatorOptions } = options;
|
|
91
|
-
const startTime = Date.now();
|
|
92
|
-
const evaluationResults: EvaluationResult[] = [];
|
|
93
|
-
|
|
94
|
-
let currentCode = context.compiledCode;
|
|
95
|
-
let currentSourceCode: string | undefined = context.sourceCode;
|
|
96
|
-
let round = 0;
|
|
97
|
-
const maxRounds = Math.min(config.maxRounds ?? 3, MAX_EVAL_ROUNDS_HARD_LIMIT);
|
|
98
|
-
|
|
99
|
-
// ggui#1714 — a fix round runs with no CLI built-ins unless asked for. With no
|
|
100
|
-
// MCP server and no built-in either, the fix agent has nothing that can return
|
|
101
|
-
// code, and every fix round would silently hand back the original: refuse.
|
|
102
|
-
const offersATool =
|
|
103
|
-
Object.keys(generatorOptions?.mcpServers ?? {}).length > 0 || (generatorOptions?.builtinTools?.length ?? 0) > 0;
|
|
104
|
-
if (maxRounds > 1 && !offersATool) {
|
|
105
|
-
throw new Error(
|
|
106
|
-
'runEvaluationLoop: a fix round needs a tool that can return code — pass generatorOptions.mcpServers ' +
|
|
107
|
-
"(e.g. a server with compile_component) or opt into a built-in with generatorOptions.builtinTools (e.g. ['Write']).",
|
|
108
|
-
);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
while (round < maxRounds) {
|
|
112
|
-
round++;
|
|
113
|
-
|
|
114
|
-
// --- Evaluate ---
|
|
115
|
-
onProgress?.({ type: 'evaluating', round });
|
|
116
|
-
console.log(`[eval] Round ${round}: evaluating...`);
|
|
117
|
-
|
|
118
|
-
const evalContext: EvaluationContext = {
|
|
119
|
-
...context,
|
|
120
|
-
compiledCode: currentCode,
|
|
121
|
-
sourceCode: currentSourceCode || context.sourceCode,
|
|
122
|
-
};
|
|
123
|
-
const evalResult = await runEvaluation(evalContext, config);
|
|
124
|
-
evaluationResults.push(evalResult);
|
|
125
|
-
|
|
126
|
-
console.log(
|
|
127
|
-
`[eval] Round ${round}: score=${evalResult.finalScore}, passed=${evalResult.passed}, issues=${evalResult.issues.length}`
|
|
128
|
-
);
|
|
129
|
-
|
|
130
|
-
// If passed or last round, we're done
|
|
131
|
-
if (evalResult.passed || round >= maxRounds) {
|
|
132
|
-
break;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// --- Fix ---
|
|
136
|
-
onProgress?.({ type: 'fixing', round });
|
|
137
|
-
console.log(`[eval] Round ${round}: fixing...`);
|
|
138
|
-
|
|
139
|
-
const fixPrompt = buildFixPrompt(evalResult, context.originalPrompt);
|
|
140
|
-
|
|
141
|
-
// Get custom CLI path from environment (for Docker deployments)
|
|
142
|
-
const cliPath = process.env.CLAUDE_WRAPPER_PATH;
|
|
143
|
-
|
|
144
|
-
// Build environment — use BYOK-enriched env from generator if provided
|
|
145
|
-
const env: Record<string, string> = {};
|
|
146
|
-
if (generatorOptions?.env) {
|
|
147
|
-
Object.assign(env, generatorOptions.env);
|
|
148
|
-
} else {
|
|
149
|
-
for (const [key, value] of Object.entries(process.env)) {
|
|
150
|
-
if (value !== undefined) {
|
|
151
|
-
env[key] = value;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
let fixedCompiledCode: string | undefined;
|
|
157
|
-
let fixedSourceCode: string | undefined;
|
|
158
|
-
|
|
159
|
-
for await (const message of query({
|
|
160
|
-
prompt: fixPrompt,
|
|
161
|
-
options: {
|
|
162
|
-
resume: generatorSessionId,
|
|
163
|
-
maxTurns: 15,
|
|
164
|
-
maxBudgetUsd: config.maxBudgetPerFix,
|
|
165
|
-
env,
|
|
166
|
-
...(cliPath && { pathToClaudeCodeExecutable: cliPath }),
|
|
167
|
-
...(generatorOptions?.cwd && { cwd: generatorOptions.cwd }),
|
|
168
|
-
...(generatorOptions?.mcpServers && { mcpServers: generatorOptions.mcpServers }),
|
|
169
|
-
// ggui#1714 — no CLI built-ins unless asked for, no host settings, no permission bypass.
|
|
170
|
-
...sdkToolPins({
|
|
171
|
-
mcpServers: generatorOptions?.mcpServers,
|
|
172
|
-
allowedTools: generatorOptions?.allowedTools,
|
|
173
|
-
builtinTools: generatorOptions?.builtinTools,
|
|
174
|
-
}),
|
|
175
|
-
...(generatorOptions?.model && { model: generatorOptions.model }),
|
|
176
|
-
...(generatorOptions?.stderr && { stderr: generatorOptions.stderr }),
|
|
177
|
-
},
|
|
178
|
-
})) {
|
|
179
|
-
const msg = message as SdkMessage;
|
|
180
|
-
|
|
181
|
-
// Capture fixed compiledCode
|
|
182
|
-
const compiled = extractCompiledCodeFromMessage(msg);
|
|
183
|
-
if (compiled) fixedCompiledCode = compiled;
|
|
184
|
-
|
|
185
|
-
// Capture source code from Write tool
|
|
186
|
-
const source = extractSourceCodeFromMessage(msg);
|
|
187
|
-
if (source) fixedSourceCode = source;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
// Update current code if fix produced new output
|
|
191
|
-
if (fixedCompiledCode) {
|
|
192
|
-
currentCode = fixedCompiledCode;
|
|
193
|
-
console.log(`[eval] Round ${round}: fixed code captured (${currentCode.length} bytes)`);
|
|
194
|
-
}
|
|
195
|
-
if (fixedSourceCode) {
|
|
196
|
-
currentSourceCode = fixedSourceCode;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
const lastResult = evaluationResults[evaluationResults.length - 1];
|
|
201
|
-
const evaluationTimeMs = Date.now() - startTime;
|
|
202
|
-
|
|
203
|
-
const qualityMetadata: QualityMetadata = {
|
|
204
|
-
evaluationRounds: evaluationResults.length,
|
|
205
|
-
finalScore: lastResult.finalScore,
|
|
206
|
-
dimensions: lastResult.dimensions,
|
|
207
|
-
passed: lastResult.passed,
|
|
208
|
-
evaluatorModel: config.model ?? 'default',
|
|
209
|
-
evaluationTimeMs,
|
|
210
|
-
};
|
|
211
|
-
|
|
212
|
-
return {
|
|
213
|
-
finalCode: currentCode,
|
|
214
|
-
finalSourceCode: currentSourceCode,
|
|
215
|
-
qualityMetadata,
|
|
216
|
-
evaluationResults,
|
|
217
|
-
};
|
|
218
|
-
}
|