@tangle-network/browser-agent-driver 0.33.2 → 0.34.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/README.md +42 -1
- package/discovery/llms.txt +27 -0
- package/discovery/tangle-agent.json +36 -0
- package/dist/brain/action-parse.d.ts +16 -0
- package/dist/brain/action-parse.d.ts.map +1 -0
- package/dist/brain/action-parse.js +191 -0
- package/dist/brain/action-parse.js.map +1 -0
- package/dist/brain/decide.d.ts +58 -0
- package/dist/brain/decide.d.ts.map +1 -0
- package/dist/brain/decide.js +418 -0
- package/dist/brain/decide.js.map +1 -0
- package/dist/brain/history-compact.d.ts +19 -0
- package/dist/brain/history-compact.d.ts.map +1 -0
- package/dist/brain/history-compact.js +153 -0
- package/dist/brain/history-compact.js.map +1 -0
- package/dist/brain/index.d.ts +78 -152
- package/dist/brain/index.d.ts.map +1 -1
- package/dist/brain/index.js +62 -2268
- package/dist/brain/index.js.map +1 -1
- package/dist/brain/model-client.d.ts +101 -0
- package/dist/brain/model-client.d.ts.map +1 -0
- package/dist/brain/model-client.js +391 -0
- package/dist/brain/model-client.js.map +1 -0
- package/dist/brain/plan.d.ts +57 -0
- package/dist/brain/plan.d.ts.map +1 -0
- package/dist/brain/plan.js +194 -0
- package/dist/brain/plan.js.map +1 -0
- package/dist/brain/prompts.d.ts +37 -0
- package/dist/brain/prompts.d.ts.map +1 -0
- package/dist/brain/prompts.js +455 -0
- package/dist/brain/prompts.js.map +1 -0
- package/dist/brain/provider-fetch.d.ts +26 -0
- package/dist/brain/provider-fetch.d.ts.map +1 -0
- package/dist/brain/provider-fetch.js +45 -0
- package/dist/brain/provider-fetch.js.map +1 -0
- package/dist/brain/snapshot-budget.d.ts +20 -0
- package/dist/brain/snapshot-budget.d.ts.map +1 -0
- package/dist/brain/snapshot-budget.js +202 -0
- package/dist/brain/snapshot-budget.js.map +1 -0
- package/dist/brain/system-prompt.d.ts +67 -0
- package/dist/brain/system-prompt.d.ts.map +1 -0
- package/dist/brain/system-prompt.js +128 -0
- package/dist/brain/system-prompt.js.map +1 -0
- package/dist/brain/tasks/design-audit.d.ts +33 -0
- package/dist/brain/tasks/design-audit.d.ts.map +1 -0
- package/dist/brain/tasks/design-audit.js +100 -0
- package/dist/brain/tasks/design-audit.js.map +1 -0
- package/dist/brain/tasks/evaluate.d.ts +25 -0
- package/dist/brain/tasks/evaluate.d.ts.map +1 -0
- package/dist/brain/tasks/evaluate.js +55 -0
- package/dist/brain/tasks/evaluate.js.map +1 -0
- package/dist/brain/tasks/goal-verification.d.ts +32 -0
- package/dist/brain/tasks/goal-verification.d.ts.map +1 -0
- package/dist/brain/tasks/goal-verification.js +68 -0
- package/dist/brain/tasks/goal-verification.js.map +1 -0
- package/dist/brain/tasks/knowledge.d.ts +26 -0
- package/dist/brain/tasks/knowledge.d.ts.map +1 -0
- package/dist/brain/tasks/knowledge.js +56 -0
- package/dist/brain/tasks/knowledge.js.map +1 -0
- package/dist/brain/tasks/link-scout.d.ts +37 -0
- package/dist/brain/tasks/link-scout.d.ts.map +1 -0
- package/dist/brain/tasks/link-scout.js +69 -0
- package/dist/brain/tasks/link-scout.js.map +1 -0
- package/dist/brain/types.d.ts +55 -0
- package/dist/brain/types.d.ts.map +1 -0
- package/dist/brain/types.js +7 -0
- package/dist/brain/types.js.map +1 -0
- package/dist/browser/stealth-init-script.d.ts +9 -0
- package/dist/browser/stealth-init-script.d.ts.map +1 -0
- package/dist/browser/stealth-init-script.js +128 -0
- package/dist/browser/stealth-init-script.js.map +1 -0
- package/dist/browser/storage-state.d.ts +29 -0
- package/dist/browser/storage-state.d.ts.map +1 -0
- package/dist/browser/storage-state.js +47 -0
- package/dist/browser/storage-state.js.map +1 -0
- package/dist/cli/args.d.ts +141 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +167 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/benchmark-sync.d.ts +9 -0
- package/dist/cli/benchmark-sync.d.ts.map +1 -0
- package/dist/cli/benchmark-sync.js +43 -0
- package/dist/cli/benchmark-sync.js.map +1 -0
- package/dist/cli/build-config.d.ts +11 -0
- package/dist/cli/build-config.d.ts.map +1 -0
- package/dist/cli/build-config.js +355 -0
- package/dist/cli/build-config.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +3 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +36 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/chrome-debug.d.ts +7 -0
- package/dist/cli/commands/chrome-debug.d.ts.map +1 -0
- package/dist/cli/commands/chrome-debug.js +11 -0
- package/dist/cli/commands/chrome-debug.js.map +1 -0
- package/dist/cli/commands/design-audit.d.ts +3 -0
- package/dist/cli/commands/design-audit.d.ts.map +1 -0
- package/dist/cli/commands/design-audit.js +68 -0
- package/dist/cli/commands/design-audit.js.map +1 -0
- package/dist/cli/commands/preview.d.ts +14 -0
- package/dist/cli/commands/preview.d.ts.map +1 -0
- package/dist/cli/commands/preview.js +31 -0
- package/dist/cli/commands/preview.js.map +1 -0
- package/dist/cli/commands/run.d.ts +3 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +728 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/runs.d.ts +8 -0
- package/dist/cli/commands/runs.d.ts.map +1 -0
- package/dist/cli/commands/runs.js +35 -0
- package/dist/cli/commands/runs.js.map +1 -0
- package/dist/cli/commands/share.d.ts +10 -0
- package/dist/cli/commands/share.d.ts.map +1 -0
- package/dist/cli/commands/share.js +32 -0
- package/dist/cli/commands/share.js.map +1 -0
- package/dist/cli/commands/showcase.d.ts +17 -0
- package/dist/cli/commands/showcase.d.ts.map +1 -0
- package/dist/cli/commands/showcase.js +20 -0
- package/dist/cli/commands/showcase.js.map +1 -0
- package/dist/cli/commands/snapshot.d.ts +12 -0
- package/dist/cli/commands/snapshot.d.ts.map +1 -0
- package/dist/cli/commands/snapshot.js +24 -0
- package/dist/cli/commands/snapshot.js.map +1 -0
- package/dist/cli/commands/view.d.ts +7 -0
- package/dist/cli/commands/view.d.ts.map +1 -0
- package/dist/cli/commands/view.js +23 -0
- package/dist/cli/commands/view.js.map +1 -0
- package/dist/cli/constants.d.ts +6 -0
- package/dist/cli/constants.d.ts.map +1 -0
- package/dist/cli/constants.js +3 -0
- package/dist/cli/constants.js.map +1 -0
- package/dist/cli/version.d.ts +7 -0
- package/dist/cli/version.d.ts.map +1 -0
- package/dist/cli/version.js +16 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/cli-design-audit.d.ts +44 -36
- package/dist/cli-design-audit.d.ts.map +1 -1
- package/dist/cli-design-audit.js +137 -1646
- package/dist/cli-design-audit.js.map +1 -1
- package/dist/cli-jobs.js +2 -1
- package/dist/cli-jobs.js.map +1 -1
- package/dist/cli.js +66 -1697
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -0
- package/dist/config.js.map +1 -1
- package/dist/design/audit/evolve/agent.d.ts +23 -0
- package/dist/design/audit/evolve/agent.d.ts.map +1 -0
- package/dist/design/audit/evolve/agent.js +272 -0
- package/dist/design/audit/evolve/agent.js.map +1 -0
- package/dist/design/audit/evolve/css.d.ts +10 -0
- package/dist/design/audit/evolve/css.d.ts.map +1 -0
- package/dist/design/audit/evolve/css.js +206 -0
- package/dist/design/audit/evolve/css.js.map +1 -0
- package/dist/design/audit/evolve/index.d.ts +13 -0
- package/dist/design/audit/evolve/index.d.ts.map +1 -0
- package/dist/design/audit/evolve/index.js +12 -0
- package/dist/design/audit/evolve/index.js.map +1 -0
- package/dist/design/audit/evolve/report.d.ts +3 -0
- package/dist/design/audit/evolve/report.d.ts.map +1 -0
- package/dist/design/audit/evolve/report.js +45 -0
- package/dist/design/audit/evolve/report.js.map +1 -0
- package/dist/design/audit/evolve/types.d.ts +14 -0
- package/dist/design/audit/evolve/types.d.ts.map +1 -0
- package/dist/design/audit/evolve/types.js +2 -0
- package/dist/design/audit/evolve/types.js.map +1 -0
- package/dist/design/audit/pipeline.d.ts +12 -0
- package/dist/design/audit/pipeline.d.ts.map +1 -1
- package/dist/design/audit/pipeline.js +43 -27
- package/dist/design/audit/pipeline.js.map +1 -1
- package/dist/design/audit/reference/artifact/build.d.ts +33 -0
- package/dist/design/audit/reference/artifact/build.d.ts.map +1 -0
- package/dist/design/audit/reference/artifact/build.js +64 -0
- package/dist/design/audit/reference/artifact/build.js.map +1 -0
- package/dist/design/audit/reference/artifact/render.d.ts +39 -0
- package/dist/design/audit/reference/artifact/render.d.ts.map +1 -0
- package/dist/design/audit/reference/artifact/render.js +213 -0
- package/dist/design/audit/reference/artifact/render.js.map +1 -0
- package/dist/design/audit/reference/artifact/text.d.ts +11 -0
- package/dist/design/audit/reference/artifact/text.d.ts.map +1 -0
- package/dist/design/audit/reference/artifact/text.js +20 -0
- package/dist/design/audit/reference/artifact/text.js.map +1 -0
- package/dist/design/audit/reference/artifact/to-findings.d.ts +57 -0
- package/dist/design/audit/reference/artifact/to-findings.d.ts.map +1 -0
- package/dist/design/audit/reference/artifact/to-findings.js +314 -0
- package/dist/design/audit/reference/artifact/to-findings.js.map +1 -0
- package/dist/design/audit/reference/config.d.ts +50 -0
- package/dist/design/audit/reference/config.d.ts.map +1 -0
- package/dist/design/audit/reference/config.js +108 -0
- package/dist/design/audit/reference/config.js.map +1 -0
- package/dist/design/audit/reference/contracts.d.ts +1030 -0
- package/dist/design/audit/reference/contracts.d.ts.map +1 -0
- package/dist/design/audit/reference/contracts.js +28 -0
- package/dist/design/audit/reference/contracts.js.map +1 -0
- package/dist/design/audit/reference/corpus/build.d.ts +115 -0
- package/dist/design/audit/reference/corpus/build.d.ts.map +1 -0
- package/dist/design/audit/reference/corpus/build.js +152 -0
- package/dist/design/audit/reference/corpus/build.js.map +1 -0
- package/dist/design/audit/reference/corpus/schema.d.ts +33 -0
- package/dist/design/audit/reference/corpus/schema.d.ts.map +1 -0
- package/dist/design/audit/reference/corpus/schema.js +249 -0
- package/dist/design/audit/reference/corpus/schema.js.map +1 -0
- package/dist/design/audit/reference/corpus/store.d.ts +26 -0
- package/dist/design/audit/reference/corpus/store.d.ts.map +1 -0
- package/dist/design/audit/reference/corpus/store.js +104 -0
- package/dist/design/audit/reference/corpus/store.js.map +1 -0
- package/dist/design/audit/reference/dna/delta.d.ts +21 -0
- package/dist/design/audit/reference/dna/delta.d.ts.map +1 -0
- package/dist/design/audit/reference/dna/delta.js +126 -0
- package/dist/design/audit/reference/dna/delta.js.map +1 -0
- package/dist/design/audit/reference/dna/derive.d.ts +31 -0
- package/dist/design/audit/reference/dna/derive.d.ts.map +1 -0
- package/dist/design/audit/reference/dna/derive.js +381 -0
- package/dist/design/audit/reference/dna/derive.js.map +1 -0
- package/dist/design/audit/reference/dna/descriptor.d.ts +36 -0
- package/dist/design/audit/reference/dna/descriptor.d.ts.map +1 -0
- package/dist/design/audit/reference/dna/descriptor.js +209 -0
- package/dist/design/audit/reference/dna/descriptor.js.map +1 -0
- package/dist/design/audit/reference/dna/page-adapter.d.ts +17 -0
- package/dist/design/audit/reference/dna/page-adapter.d.ts.map +1 -0
- package/dist/design/audit/reference/dna/page-adapter.js +35 -0
- package/dist/design/audit/reference/dna/page-adapter.js.map +1 -0
- package/dist/design/audit/reference/dna/scroll-capture.d.ts +93 -0
- package/dist/design/audit/reference/dna/scroll-capture.d.ts.map +1 -0
- package/dist/design/audit/reference/dna/scroll-capture.js +374 -0
- package/dist/design/audit/reference/dna/scroll-capture.js.map +1 -0
- package/dist/design/audit/reference/engine/budget.d.ts +63 -0
- package/dist/design/audit/reference/engine/budget.d.ts.map +1 -0
- package/dist/design/audit/reference/engine/budget.js +110 -0
- package/dist/design/audit/reference/engine/budget.js.map +1 -0
- package/dist/design/audit/reference/engine/core.d.ts +32 -0
- package/dist/design/audit/reference/engine/core.d.ts.map +1 -0
- package/dist/design/audit/reference/engine/core.js +261 -0
- package/dist/design/audit/reference/engine/core.js.map +1 -0
- package/dist/design/audit/reference/engine/guard.d.ts +43 -0
- package/dist/design/audit/reference/engine/guard.d.ts.map +1 -0
- package/dist/design/audit/reference/engine/guard.js +43 -0
- package/dist/design/audit/reference/engine/guard.js.map +1 -0
- package/dist/design/audit/reference/engine/score-core.d.ts +48 -0
- package/dist/design/audit/reference/engine/score-core.d.ts.map +1 -0
- package/dist/design/audit/reference/engine/score-core.js +134 -0
- package/dist/design/audit/reference/engine/score-core.js.map +1 -0
- package/dist/design/audit/reference/engine/wiring.d.ts +35 -0
- package/dist/design/audit/reference/engine/wiring.d.ts.map +1 -0
- package/dist/design/audit/reference/engine/wiring.js +80 -0
- package/dist/design/audit/reference/engine/wiring.js.map +1 -0
- package/dist/design/audit/reference/eval/taste-core.d.ts +77 -0
- package/dist/design/audit/reference/eval/taste-core.d.ts.map +1 -0
- package/dist/design/audit/reference/eval/taste-core.js +95 -0
- package/dist/design/audit/reference/eval/taste-core.js.map +1 -0
- package/dist/design/audit/reference/generate/generator.d.ts +49 -0
- package/dist/design/audit/reference/generate/generator.d.ts.map +1 -0
- package/dist/design/audit/reference/generate/generator.js +94 -0
- package/dist/design/audit/reference/generate/generator.js.map +1 -0
- package/dist/design/audit/reference/generate/parse.d.ts +28 -0
- package/dist/design/audit/reference/generate/parse.d.ts.map +1 -0
- package/dist/design/audit/reference/generate/parse.js +180 -0
- package/dist/design/audit/reference/generate/parse.js.map +1 -0
- package/dist/design/audit/reference/generate/prompt.d.ts +36 -0
- package/dist/design/audit/reference/generate/prompt.d.ts.map +1 -0
- package/dist/design/audit/reference/generate/prompt.js +124 -0
- package/dist/design/audit/reference/generate/prompt.js.map +1 -0
- package/dist/design/audit/reference/index.d.ts +26 -0
- package/dist/design/audit/reference/index.d.ts.map +1 -0
- package/dist/design/audit/reference/index.js +31 -0
- package/dist/design/audit/reference/index.js.map +1 -0
- package/dist/design/audit/reference/judge/image-clamp.d.ts +34 -0
- package/dist/design/audit/reference/judge/image-clamp.d.ts.map +1 -0
- package/dist/design/audit/reference/judge/image-clamp.js +88 -0
- package/dist/design/audit/reference/judge/image-clamp.js.map +1 -0
- package/dist/design/audit/reference/judge/pairwise.d.ts +34 -0
- package/dist/design/audit/reference/judge/pairwise.d.ts.map +1 -0
- package/dist/design/audit/reference/judge/pairwise.js +105 -0
- package/dist/design/audit/reference/judge/pairwise.js.map +1 -0
- package/dist/design/audit/reference/judge/parse.d.ts +31 -0
- package/dist/design/audit/reference/judge/parse.d.ts.map +1 -0
- package/dist/design/audit/reference/judge/parse.js +113 -0
- package/dist/design/audit/reference/judge/parse.js.map +1 -0
- package/dist/design/audit/reference/judge/prompt.d.ts +38 -0
- package/dist/design/audit/reference/judge/prompt.d.ts.map +1 -0
- package/dist/design/audit/reference/judge/prompt.js +111 -0
- package/dist/design/audit/reference/judge/prompt.js.map +1 -0
- package/dist/design/audit/reference/judge/quality.d.ts +28 -0
- package/dist/design/audit/reference/judge/quality.d.ts.map +1 -0
- package/dist/design/audit/reference/judge/quality.js +62 -0
- package/dist/design/audit/reference/judge/quality.js.map +1 -0
- package/dist/design/audit/reference/judge/rank.d.ts +41 -0
- package/dist/design/audit/reference/judge/rank.d.ts.map +1 -0
- package/dist/design/audit/reference/judge/rank.js +196 -0
- package/dist/design/audit/reference/judge/rank.js.map +1 -0
- package/dist/design/audit/reference/judge/text-judge.d.ts +31 -0
- package/dist/design/audit/reference/judge/text-judge.d.ts.map +1 -0
- package/dist/design/audit/reference/judge/text-judge.js +43 -0
- package/dist/design/audit/reference/judge/text-judge.js.map +1 -0
- package/dist/design/audit/reference/judge/vision-judge.d.ts +59 -0
- package/dist/design/audit/reference/judge/vision-judge.d.ts.map +1 -0
- package/dist/design/audit/reference/judge/vision-judge.js +150 -0
- package/dist/design/audit/reference/judge/vision-judge.js.map +1 -0
- package/dist/design/audit/reference/judge/vision-model.d.ts +65 -0
- package/dist/design/audit/reference/judge/vision-model.d.ts.map +1 -0
- package/dist/design/audit/reference/judge/vision-model.js +110 -0
- package/dist/design/audit/reference/judge/vision-model.js.map +1 -0
- package/dist/design/audit/reference/pipeline/evaluate-reference.d.ts +68 -0
- package/dist/design/audit/reference/pipeline/evaluate-reference.d.ts.map +1 -0
- package/dist/design/audit/reference/pipeline/evaluate-reference.js +52 -0
- package/dist/design/audit/reference/pipeline/evaluate-reference.js.map +1 -0
- package/dist/design/audit/reference/reference-context.d.ts +31 -0
- package/dist/design/audit/reference/reference-context.d.ts.map +1 -0
- package/dist/design/audit/reference/reference-context.js +73 -0
- package/dist/design/audit/reference/reference-context.js.map +1 -0
- package/dist/design/audit/reference/retrieval/embedding-hash.d.ts +30 -0
- package/dist/design/audit/reference/retrieval/embedding-hash.d.ts.map +1 -0
- package/dist/design/audit/reference/retrieval/embedding-hash.js +87 -0
- package/dist/design/audit/reference/retrieval/embedding-hash.js.map +1 -0
- package/dist/design/audit/reference/retrieval/embedding-openai.d.ts +38 -0
- package/dist/design/audit/reference/retrieval/embedding-openai.d.ts.map +1 -0
- package/dist/design/audit/reference/retrieval/embedding-openai.js +73 -0
- package/dist/design/audit/reference/retrieval/embedding-openai.js.map +1 -0
- package/dist/design/audit/reference/retrieval/matcher.d.ts +34 -0
- package/dist/design/audit/reference/retrieval/matcher.d.ts.map +1 -0
- package/dist/design/audit/reference/retrieval/matcher.js +107 -0
- package/dist/design/audit/reference/retrieval/matcher.js.map +1 -0
- package/dist/design/audit/reference/run.d.ts +59 -0
- package/dist/design/audit/reference/run.d.ts.map +1 -0
- package/dist/design/audit/reference/run.js +99 -0
- package/dist/design/audit/reference/run.js.map +1 -0
- package/dist/design/audit/report.d.ts +35 -0
- package/dist/design/audit/report.d.ts.map +1 -0
- package/dist/design/audit/report.js +195 -0
- package/dist/design/audit/report.js.map +1 -0
- package/dist/design/audit/tokens/extract.d.ts +71 -0
- package/dist/design/audit/tokens/extract.d.ts.map +1 -0
- package/dist/design/audit/tokens/extract.js +1034 -0
- package/dist/design/audit/tokens/extract.js.map +1 -0
- package/dist/design/audit/types.d.ts +8 -0
- package/dist/design/audit/types.d.ts.map +1 -1
- package/dist/design/compare.d.ts.map +1 -1
- package/dist/design/compare.js +2 -6
- package/dist/design/compare.js.map +1 -1
- package/dist/design/cookie-consent.d.ts +3 -0
- package/dist/design/cookie-consent.d.ts.map +1 -0
- package/dist/design/cookie-consent.js +26 -0
- package/dist/design/cookie-consent.js.map +1 -0
- package/dist/design/viewports.d.ts +18 -0
- package/dist/design/viewports.d.ts.map +1 -0
- package/dist/design/viewports.js +10 -0
- package/dist/design/viewports.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/memory/store.d.ts +19 -1
- package/dist/memory/store.d.ts.map +1 -1
- package/dist/memory/store.js +47 -0
- package/dist/memory/store.js.map +1 -1
- package/dist/provider-defaults.d.ts +18 -0
- package/dist/provider-defaults.d.ts.map +1 -1
- package/dist/provider-defaults.js +33 -0
- package/dist/provider-defaults.js.map +1 -1
- package/dist/runner/allowed-domains.d.ts +11 -0
- package/dist/runner/allowed-domains.d.ts.map +1 -0
- package/dist/runner/allowed-domains.js +14 -0
- package/dist/runner/allowed-domains.js.map +1 -0
- package/dist/runner/batch-fill.d.ts +28 -0
- package/dist/runner/batch-fill.d.ts.map +1 -0
- package/dist/runner/batch-fill.js +80 -0
- package/dist/runner/batch-fill.js.map +1 -0
- package/dist/runner/completion-policy.d.ts +26 -0
- package/dist/runner/completion-policy.d.ts.map +1 -0
- package/dist/runner/completion-policy.js +76 -0
- package/dist/runner/completion-policy.js.map +1 -0
- package/dist/runner/constants.d.ts +14 -0
- package/dist/runner/constants.d.ts.map +1 -0
- package/dist/runner/constants.js +23 -0
- package/dist/runner/constants.js.map +1 -0
- package/dist/runner/decision-screenshot.d.ts +24 -0
- package/dist/runner/decision-screenshot.d.ts.map +1 -0
- package/dist/runner/decision-screenshot.js +23 -0
- package/dist/runner/decision-screenshot.js.map +1 -0
- package/dist/runner/domain-boundary.d.ts +36 -0
- package/dist/runner/domain-boundary.d.ts.map +1 -0
- package/dist/runner/domain-boundary.js +81 -0
- package/dist/runner/domain-boundary.js.map +1 -0
- package/dist/runner/effect-verify.d.ts +28 -0
- package/dist/runner/effect-verify.d.ts.map +1 -0
- package/dist/runner/effect-verify.js +42 -0
- package/dist/runner/effect-verify.js.map +1 -0
- package/dist/runner/execute-plan.d.ts +58 -0
- package/dist/runner/execute-plan.d.ts.map +1 -0
- package/dist/runner/execute-plan.js +426 -0
- package/dist/runner/execute-plan.js.map +1 -0
- package/dist/runner/max-turns-extension.d.ts +19 -0
- package/dist/runner/max-turns-extension.d.ts.map +1 -0
- package/dist/runner/max-turns-extension.js +25 -0
- package/dist/runner/max-turns-extension.js.map +1 -0
- package/dist/runner/micro-plan.d.ts +11 -0
- package/dist/runner/micro-plan.d.ts.map +1 -0
- package/dist/runner/micro-plan.js +29 -0
- package/dist/runner/micro-plan.js.map +1 -0
- package/dist/runner/prompt-snippets.d.ts +5 -0
- package/dist/runner/prompt-snippets.d.ts.map +1 -0
- package/dist/runner/prompt-snippets.js +13 -0
- package/dist/runner/prompt-snippets.js.map +1 -0
- package/dist/runner/replay/contracts.d.ts +300 -0
- package/dist/runner/replay/contracts.d.ts.map +1 -0
- package/dist/runner/replay/contracts.js +42 -0
- package/dist/runner/replay/contracts.js.map +1 -0
- package/dist/runner/replay/controller.d.ts +27 -0
- package/dist/runner/replay/controller.d.ts.map +1 -0
- package/dist/runner/replay/controller.js +197 -0
- package/dist/runner/replay/controller.js.map +1 -0
- package/dist/runner/replay/guard.d.ts +28 -0
- package/dist/runner/replay/guard.d.ts.map +1 -0
- package/dist/runner/replay/guard.js +100 -0
- package/dist/runner/replay/guard.js.map +1 -0
- package/dist/runner/runner.d.ts +44 -51
- package/dist/runner/runner.d.ts.map +1 -1
- package/dist/runner/runner.js +155 -851
- package/dist/runner/runner.js.map +1 -1
- package/dist/runner/scout-feedback.d.ts +51 -0
- package/dist/runner/scout-feedback.d.ts.map +1 -0
- package/dist/runner/scout-feedback.js +149 -0
- package/dist/runner/scout-feedback.js.map +1 -0
- package/dist/skills/macro-loader.d.ts +1 -1
- package/dist/test-runner.d.ts.map +1 -1
- package/dist/test-runner.js +25 -0
- package/dist/test-runner.js.map +1 -1
- package/dist/types/actions.d.ts +241 -0
- package/dist/types/actions.d.ts.map +1 -0
- package/dist/types/actions.js +5 -0
- package/dist/types/actions.js.map +1 -0
- package/dist/types/config.d.ts +211 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/design-audit.d.ts +92 -0
- package/dist/types/design-audit.d.ts.map +1 -0
- package/dist/types/design-audit.js +5 -0
- package/dist/types/design-audit.js.map +1 -0
- package/dist/types/design-tokens.d.ts +138 -0
- package/dist/types/design-tokens.d.ts.map +1 -0
- package/dist/types/design-tokens.js +5 -0
- package/dist/types/design-tokens.js.map +1 -0
- package/dist/types/page.d.ts +16 -0
- package/dist/types/page.d.ts.map +1 -0
- package/dist/types/page.js +2 -0
- package/dist/types/page.js.map +1 -0
- package/dist/types/plan.d.ts +50 -0
- package/dist/types/plan.d.ts.map +1 -0
- package/dist/types/plan.js +2 -0
- package/dist/types/plan.js.map +1 -0
- package/dist/types/preview.d.ts +9 -0
- package/dist/types/preview.d.ts.map +1 -0
- package/dist/types/preview.js +5 -0
- package/dist/types/preview.js.map +1 -0
- package/dist/types/result.d.ts +62 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +2 -0
- package/dist/types/result.js.map +1 -0
- package/dist/types/scenario.d.ts +20 -0
- package/dist/types/scenario.d.ts.map +1 -0
- package/dist/types/scenario.js +5 -0
- package/dist/types/scenario.js.map +1 -0
- package/dist/types/test-runner.d.ts +145 -0
- package/dist/types/test-runner.d.ts.map +1 -0
- package/dist/types/test-runner.js +10 -0
- package/dist/types/test-runner.js.map +1 -0
- package/dist/types/trajectory.d.ts +38 -0
- package/dist/types/trajectory.d.ts.map +1 -0
- package/dist/types/trajectory.js +2 -0
- package/dist/types/trajectory.js.map +1 -0
- package/dist/types/turn.d.ts +50 -0
- package/dist/types/turn.d.ts.map +1 -0
- package/dist/types/turn.js +2 -0
- package/dist/types/turn.js.map +1 -0
- package/dist/types.d.ts +16 -1017
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +15 -8
- package/dist/types.js.map +1 -1
- package/dist/wallet/rpc-interception.d.ts +15 -0
- package/dist/wallet/rpc-interception.d.ts.map +1 -0
- package/dist/wallet/rpc-interception.js +95 -0
- package/dist/wallet/rpc-interception.js.map +1 -0
- package/package.json +7 -3
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redesign-direction parser — a PURE core of the generative layer.
|
|
3
|
+
*
|
|
4
|
+
* `parseDirection` turns one raw model response into a typed `RedesignDirection`
|
|
5
|
+
* or a typed `DirectionParseError`. It is FAIL-CLOSED by construction: malformed
|
|
6
|
+
* JSON, a missing/ill-typed field, an ungrounded direction, or a hallucinated
|
|
7
|
+
* exemplar id all yield an explicit error — never a fabricated or half-built
|
|
8
|
+
* direction. The generator drops errored calls rather than inventing content.
|
|
9
|
+
*
|
|
10
|
+
* Hostile-input safe: the response is parsed with `JSON.parse` only (no eval),
|
|
11
|
+
* and the returned direction is assembled FIELD-BY-FIELD from validated values,
|
|
12
|
+
* so unexpected keys (including `__proto__`) never leak into the result and no
|
|
13
|
+
* prototype is mutated.
|
|
14
|
+
*
|
|
15
|
+
* No IO, no LLM, no browser — unit-tested on string fixtures alone.
|
|
16
|
+
*/
|
|
17
|
+
const fail = (reason) => ({ ok: false, reason });
|
|
18
|
+
const isRecord = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
19
|
+
const isString = (v) => typeof v === 'string';
|
|
20
|
+
const isFiniteNumber = (v) => typeof v === 'number' && Number.isFinite(v);
|
|
21
|
+
const isStringArray = (v) => Array.isArray(v) && v.every(isString);
|
|
22
|
+
const isNumberArray = (v) => Array.isArray(v) && v.every(isFiniteNumber);
|
|
23
|
+
/**
|
|
24
|
+
* Pull the outermost JSON object out of a model response. Tolerates a leading
|
|
25
|
+
* markdown fence and any prose preamble/suffix the gateway wraps around the
|
|
26
|
+
* object. Returns null when no object literal is present.
|
|
27
|
+
*/
|
|
28
|
+
function extractJsonObject(raw) {
|
|
29
|
+
let text = raw.trim();
|
|
30
|
+
if (text.startsWith('```')) {
|
|
31
|
+
text = text.replace(/^```(?:json)?\s*/i, '').replace(/```\s*$/i, '').trim();
|
|
32
|
+
}
|
|
33
|
+
const first = text.indexOf('{');
|
|
34
|
+
const last = text.lastIndexOf('}');
|
|
35
|
+
if (first < 0 || last <= first)
|
|
36
|
+
return null;
|
|
37
|
+
return text.slice(first, last + 1);
|
|
38
|
+
}
|
|
39
|
+
function parseTypeSystem(raw) {
|
|
40
|
+
if (!isRecord(raw))
|
|
41
|
+
return 'typeSystem must be an object';
|
|
42
|
+
if (!isStringArray(raw.families) || raw.families.length === 0)
|
|
43
|
+
return 'typeSystem.families must be a non-empty string[]';
|
|
44
|
+
if (!isNumberArray(raw.scalePx) || raw.scalePx.length === 0)
|
|
45
|
+
return 'typeSystem.scalePx must be a non-empty number[]';
|
|
46
|
+
if (!isFiniteNumber(raw.ratio))
|
|
47
|
+
return 'typeSystem.ratio must be a number';
|
|
48
|
+
if (!isString(raw.rationale))
|
|
49
|
+
return 'typeSystem.rationale must be a string';
|
|
50
|
+
return { families: raw.families, scalePx: raw.scalePx, ratio: raw.ratio, rationale: raw.rationale };
|
|
51
|
+
}
|
|
52
|
+
function parseColorSystem(raw) {
|
|
53
|
+
if (!isRecord(raw))
|
|
54
|
+
return 'colorSystem must be an object';
|
|
55
|
+
if (!isString(raw.primary))
|
|
56
|
+
return 'colorSystem.primary must be a string';
|
|
57
|
+
if (!isStringArray(raw.neutrals))
|
|
58
|
+
return 'colorSystem.neutrals must be a string[]';
|
|
59
|
+
if (!isString(raw.background))
|
|
60
|
+
return 'colorSystem.background must be a string';
|
|
61
|
+
if (!isString(raw.rationale))
|
|
62
|
+
return 'colorSystem.rationale must be a string';
|
|
63
|
+
if (raw.accent !== undefined && !isString(raw.accent))
|
|
64
|
+
return 'colorSystem.accent must be a string when present';
|
|
65
|
+
const spec = {
|
|
66
|
+
primary: raw.primary,
|
|
67
|
+
neutrals: raw.neutrals,
|
|
68
|
+
background: raw.background,
|
|
69
|
+
rationale: raw.rationale,
|
|
70
|
+
};
|
|
71
|
+
if (isString(raw.accent))
|
|
72
|
+
spec.accent = raw.accent;
|
|
73
|
+
return spec;
|
|
74
|
+
}
|
|
75
|
+
function parseMotionSpec(raw) {
|
|
76
|
+
if (!isRecord(raw))
|
|
77
|
+
return 'motionSpec must be an object';
|
|
78
|
+
if (!isNumberArray(raw.durationsMs))
|
|
79
|
+
return 'motionSpec.durationsMs must be a number[]';
|
|
80
|
+
if (!isStringArray(raw.easings))
|
|
81
|
+
return 'motionSpec.easings must be a string[]';
|
|
82
|
+
if (!isStringArray(raw.cues))
|
|
83
|
+
return 'motionSpec.cues must be a string[]';
|
|
84
|
+
return { durationsMs: raw.durationsMs, easings: raw.easings, cues: raw.cues };
|
|
85
|
+
}
|
|
86
|
+
function parseCopy(raw) {
|
|
87
|
+
if (!Array.isArray(raw))
|
|
88
|
+
return 'copy must be an array';
|
|
89
|
+
const out = [];
|
|
90
|
+
for (const item of raw) {
|
|
91
|
+
if (!isRecord(item))
|
|
92
|
+
return 'each copy entry must be an object';
|
|
93
|
+
if (!isString(item.location))
|
|
94
|
+
return 'copy[].location must be a string';
|
|
95
|
+
if (!isString(item.after))
|
|
96
|
+
return 'copy[].after must be a string';
|
|
97
|
+
if (item.before !== undefined && !isString(item.before))
|
|
98
|
+
return 'copy[].before must be a string when present';
|
|
99
|
+
const rev = { location: item.location, after: item.after };
|
|
100
|
+
if (isString(item.before))
|
|
101
|
+
rev.before = item.before;
|
|
102
|
+
out.push(rev);
|
|
103
|
+
}
|
|
104
|
+
return out;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Ids in `d.groundedInExemplarIds` that are NOT in `allowedIds` (the retrieved
|
|
108
|
+
* set). Empty ⇒ the direction is grounded only in real, retrieved exemplars.
|
|
109
|
+
*/
|
|
110
|
+
export function validateGrounding(d, allowedIds) {
|
|
111
|
+
const allowed = new Set(allowedIds);
|
|
112
|
+
return d.groundedInExemplarIds.filter((id) => !allowed.has(id));
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Parse one model response into a `RedesignDirection`. Fail-closed: any defect
|
|
116
|
+
* returns a `DirectionParseError`, never a partial or invented direction.
|
|
117
|
+
*/
|
|
118
|
+
export function parseDirection(raw, allowedIds) {
|
|
119
|
+
const json = extractJsonObject(raw);
|
|
120
|
+
if (json === null)
|
|
121
|
+
return fail('no JSON object found in model output');
|
|
122
|
+
let parsed;
|
|
123
|
+
try {
|
|
124
|
+
parsed = JSON.parse(json);
|
|
125
|
+
}
|
|
126
|
+
catch (e) {
|
|
127
|
+
return fail(`invalid JSON: ${e instanceof Error ? e.message : String(e)}`);
|
|
128
|
+
}
|
|
129
|
+
if (!isRecord(parsed))
|
|
130
|
+
return fail('parsed value is not an object');
|
|
131
|
+
if (!isString(parsed.id))
|
|
132
|
+
return fail('missing or invalid field: id');
|
|
133
|
+
if (!isString(parsed.name))
|
|
134
|
+
return fail('missing or invalid field: name');
|
|
135
|
+
if (!isString(parsed.rationale))
|
|
136
|
+
return fail('missing or invalid field: rationale');
|
|
137
|
+
if (!isString(parsed.asciiLayout))
|
|
138
|
+
return fail('missing or invalid field: asciiLayout');
|
|
139
|
+
if (!isStringArray(parsed.hierarchy) || parsed.hierarchy.length === 0) {
|
|
140
|
+
return fail('hierarchy must be a non-empty string[]');
|
|
141
|
+
}
|
|
142
|
+
if (!isStringArray(parsed.groundedInExemplarIds)) {
|
|
143
|
+
return fail('missing or invalid field: groundedInExemplarIds');
|
|
144
|
+
}
|
|
145
|
+
const typeSystem = parseTypeSystem(parsed.typeSystem);
|
|
146
|
+
if (typeof typeSystem === 'string')
|
|
147
|
+
return fail(typeSystem);
|
|
148
|
+
const colorSystem = parseColorSystem(parsed.colorSystem);
|
|
149
|
+
if (typeof colorSystem === 'string')
|
|
150
|
+
return fail(colorSystem);
|
|
151
|
+
const motionSpec = parseMotionSpec(parsed.motionSpec);
|
|
152
|
+
if (typeof motionSpec === 'string')
|
|
153
|
+
return fail(motionSpec);
|
|
154
|
+
const copy = parseCopy(parsed.copy);
|
|
155
|
+
if (typeof copy === 'string')
|
|
156
|
+
return fail(copy);
|
|
157
|
+
// Assemble field-by-field — never spread `parsed` — so no unexpected key
|
|
158
|
+
// (e.g. `__proto__`) survives into the result.
|
|
159
|
+
const direction = {
|
|
160
|
+
id: parsed.id,
|
|
161
|
+
name: parsed.name,
|
|
162
|
+
rationale: parsed.rationale,
|
|
163
|
+
asciiLayout: parsed.asciiLayout,
|
|
164
|
+
typeSystem,
|
|
165
|
+
colorSystem,
|
|
166
|
+
motionSpec,
|
|
167
|
+
hierarchy: parsed.hierarchy,
|
|
168
|
+
copy,
|
|
169
|
+
groundedInExemplarIds: parsed.groundedInExemplarIds,
|
|
170
|
+
};
|
|
171
|
+
if (direction.groundedInExemplarIds.length === 0) {
|
|
172
|
+
return fail('direction is ungrounded (empty groundedInExemplarIds)');
|
|
173
|
+
}
|
|
174
|
+
const offenders = validateGrounding(direction, allowedIds);
|
|
175
|
+
if (offenders.length > 0) {
|
|
176
|
+
return fail(`grounded in unknown exemplar ids: ${offenders.join(', ')}`);
|
|
177
|
+
}
|
|
178
|
+
return { ok: true, direction };
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../../../src/design/audit/reference/generate/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redesign-generation prompt builder — a PURE core of the generative layer.
|
|
3
|
+
*
|
|
4
|
+
* `buildDirectionPrompt` grounds ONE retrieved world-class exemplar's identity
|
|
5
|
+
* (id + DNA) into a single-direction generation request for the page under
|
|
6
|
+
* audit. The generator (`generate/generator.ts`) fans this out — one
|
|
7
|
+
* `brain.complete` per exemplar — so the N named `RedesignDirection`s emerge
|
|
8
|
+
* from N independent, individually-grounded calls rather than one mega-prompt.
|
|
9
|
+
*
|
|
10
|
+
* It performs NO IO, NO LLM, NO browser work and is byte-stable for fixed
|
|
11
|
+
* inputs (no clock, no randomness), so it unit-tests on static fixtures and a
|
|
12
|
+
* fixed-input snapshot pins its determinism.
|
|
13
|
+
*
|
|
14
|
+
* Budget discipline: both injected DNA summaries are bounded by `maxRefChars`
|
|
15
|
+
* (via the deterministic `summarizeDNA`) and any operator rubric is truncated,
|
|
16
|
+
* so a large reference can never blow the generation token budget.
|
|
17
|
+
*/
|
|
18
|
+
import type { GenerationContext, RetrievalResult } from '../contracts.js';
|
|
19
|
+
/** Tuning knobs for the deterministic prompt. */
|
|
20
|
+
export interface DirectionPromptOptions {
|
|
21
|
+
/**
|
|
22
|
+
* Max chars for EACH injected DNA summary (page-under-audit + exemplar). The
|
|
23
|
+
* single lever that bounds the prompt's reference payload. px/ms values inside
|
|
24
|
+
* the summary are preserved; only the tail is clipped.
|
|
25
|
+
*/
|
|
26
|
+
maxRefChars?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Build the `{ system, user }` pair for a single reference-grounded redesign
|
|
30
|
+
* direction. Deterministic: identical inputs always yield identical strings.
|
|
31
|
+
*/
|
|
32
|
+
export declare function buildDirectionPrompt(ctx: GenerationContext, exemplar: RetrievalResult, opts?: DirectionPromptOptions): {
|
|
33
|
+
system: string;
|
|
34
|
+
user: string;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../../../src/design/audit/reference/generate/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGzE,iDAAiD;AACjD,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAgGD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,eAAe,EACzB,IAAI,GAAE,sBAA2B,GAChC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAqBlC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redesign-generation prompt builder — a PURE core of the generative layer.
|
|
3
|
+
*
|
|
4
|
+
* `buildDirectionPrompt` grounds ONE retrieved world-class exemplar's identity
|
|
5
|
+
* (id + DNA) into a single-direction generation request for the page under
|
|
6
|
+
* audit. The generator (`generate/generator.ts`) fans this out — one
|
|
7
|
+
* `brain.complete` per exemplar — so the N named `RedesignDirection`s emerge
|
|
8
|
+
* from N independent, individually-grounded calls rather than one mega-prompt.
|
|
9
|
+
*
|
|
10
|
+
* It performs NO IO, NO LLM, NO browser work and is byte-stable for fixed
|
|
11
|
+
* inputs (no clock, no randomness), so it unit-tests on static fixtures and a
|
|
12
|
+
* fixed-input snapshot pins its determinism.
|
|
13
|
+
*
|
|
14
|
+
* Budget discipline: both injected DNA summaries are bounded by `maxRefChars`
|
|
15
|
+
* (via the deterministic `summarizeDNA`) and any operator rubric is truncated,
|
|
16
|
+
* so a large reference can never blow the generation token budget.
|
|
17
|
+
*/
|
|
18
|
+
import { summarizeDNA } from '../dna/derive.js';
|
|
19
|
+
const DEFAULT_MAX_REF_CHARS = 900;
|
|
20
|
+
// The composed rubric body can be arbitrarily long; cap it so scoring criteria
|
|
21
|
+
// never dominate the generation budget. Independent of `maxRefChars` (a
|
|
22
|
+
// different concern: criteria vs reference identity).
|
|
23
|
+
const MAX_RUBRIC_CHARS = 1600;
|
|
24
|
+
const truncate = (s, max) => s.length > max ? `${s.slice(0, max - 1)}…` : s;
|
|
25
|
+
/**
|
|
26
|
+
* The art-director persona + output contract. A module constant so the system
|
|
27
|
+
* half of every generation call is byte-identical run-to-run.
|
|
28
|
+
*/
|
|
29
|
+
const GENERATION_SYSTEM_PROMPT = [
|
|
30
|
+
'You are a world-class art director. You translate ONE concrete, named',
|
|
31
|
+
'world-class reference into a single coherent, buildable redesign direction for',
|
|
32
|
+
'the page under audit — not a menu of options, one opinionated direction.',
|
|
33
|
+
'',
|
|
34
|
+
'Hard rules:',
|
|
35
|
+
'- Ground every decision in the named REFERENCE EXEMPLAR below. Echo its id in',
|
|
36
|
+
' `groundedInExemplarIds`. NEVER invent, guess, or cite an exemplar id you',
|
|
37
|
+
' were not given.',
|
|
38
|
+
'- Specify concrete values: hex colors, px type sizes, ms durations, and real',
|
|
39
|
+
' revised copy strings — never placeholders like "TODO" or "lorem ipsum".',
|
|
40
|
+
'- The ASCII layout must be a real box-drawing diagram of the proposed page',
|
|
41
|
+
' structure, top to bottom.',
|
|
42
|
+
'- Preserve or improve the page\'s measured accessibility (contrast, a11y).',
|
|
43
|
+
' Never propose a change that would regress it.',
|
|
44
|
+
'- If the REFERENCE EXEMPLAR\'s DNA reports scroll-driven motion (scroll',
|
|
45
|
+
' reveals, sticky pinning, or parallax) and the page does not, propose concrete',
|
|
46
|
+
' scroll interactions in `motionSpec.cues`, naming the specific reveal, pin, or',
|
|
47
|
+
' parallax grounded in that exemplar. NEVER invent scroll motion the exemplar',
|
|
48
|
+
' does not show.',
|
|
49
|
+
'- Output STRICT JSON only: a single object matching the OUTPUT CONTRACT, with',
|
|
50
|
+
' no surrounding prose and no markdown code fences.',
|
|
51
|
+
].join('\n');
|
|
52
|
+
function renderPageBlock(ctx, maxRefChars) {
|
|
53
|
+
const c = ctx.classification;
|
|
54
|
+
return [
|
|
55
|
+
'PAGE UNDER REDESIGN',
|
|
56
|
+
`url: ${ctx.url}`,
|
|
57
|
+
`type: ${c.type} domain: ${c.domain} maturity: ${c.maturity}`,
|
|
58
|
+
`intent: ${c.intent}`,
|
|
59
|
+
'current design DNA:',
|
|
60
|
+
summarizeDNA(ctx.dna, { maxChars: maxRefChars }),
|
|
61
|
+
].join('\n');
|
|
62
|
+
}
|
|
63
|
+
function renderExemplarBlock(hit, maxRefChars) {
|
|
64
|
+
const e = hit.exemplar;
|
|
65
|
+
const reasons = hit.reasons.length > 0 ? hit.reasons.join('; ') : 'nearest aesthetic neighbour';
|
|
66
|
+
return [
|
|
67
|
+
'REFERENCE EXEMPLAR (ground every choice in this one page)',
|
|
68
|
+
`id: ${e.id} source: ${e.source} type: ${e.pageType}`,
|
|
69
|
+
`url: ${e.url}`,
|
|
70
|
+
`job-to-be-done: ${e.jobToBeDone}`,
|
|
71
|
+
`why it was retrieved: ${reasons}`,
|
|
72
|
+
'its design DNA:',
|
|
73
|
+
summarizeDNA(e.dna, { maxChars: maxRefChars }),
|
|
74
|
+
].join('\n');
|
|
75
|
+
}
|
|
76
|
+
function renderConstraints(ctx) {
|
|
77
|
+
const m = ctx.measurements;
|
|
78
|
+
if (!m)
|
|
79
|
+
return null;
|
|
80
|
+
const aa = m.contrast.summary.aaPassRate;
|
|
81
|
+
const blocking = m.a11y.violations.filter((v) => v.impact === 'critical' || v.impact === 'serious').length;
|
|
82
|
+
return [
|
|
83
|
+
'GROUND-TRUTH CONSTRAINTS (deterministic — do not regress)',
|
|
84
|
+
`current AA contrast pass rate: ${aa}; blocking a11y issues: ${blocking}.`,
|
|
85
|
+
'The redesign must keep contrast at or above this rate and must not introduce',
|
|
86
|
+
'new blocking accessibility issues.',
|
|
87
|
+
].join('\n');
|
|
88
|
+
}
|
|
89
|
+
const OUTPUT_CONTRACT = [
|
|
90
|
+
'OUTPUT CONTRACT — return STRICT JSON matching this exact shape, nothing else:',
|
|
91
|
+
'{',
|
|
92
|
+
' "id": "short-slug",',
|
|
93
|
+
' "name": "evocative direction name",',
|
|
94
|
+
' "rationale": "why this direction serves the page\'s job-to-be-done",',
|
|
95
|
+
' "asciiLayout": "ASCII / box-drawing diagram of the proposed page structure",',
|
|
96
|
+
' "typeSystem": { "families": ["Font A"], "scalePx": [14, 18, 24, 32], "ratio": 1.25, "rationale": "..." },',
|
|
97
|
+
' "colorSystem": { "primary": "#2563eb", "accent": "#f59e0b", "neutrals": ["#111827", "#6b7280"], "background": "#ffffff", "rationale": "..." },',
|
|
98
|
+
' "motionSpec": { "durationsMs": [160, 240], "easings": ["ease-out"], "cues": ["where motion is applied and why — name scroll reveals / sticky pins / parallax when grounded in a scroll-rich exemplar"] },',
|
|
99
|
+
' "hierarchy": ["most prominent element", "...", "least prominent element"],',
|
|
100
|
+
' "copy": [{ "location": "h1", "before": "current copy", "after": "revised copy" }],',
|
|
101
|
+
' "groundedInExemplarIds": ["<the reference exemplar id above>"]',
|
|
102
|
+
'}',
|
|
103
|
+
].join('\n');
|
|
104
|
+
/**
|
|
105
|
+
* Build the `{ system, user }` pair for a single reference-grounded redesign
|
|
106
|
+
* direction. Deterministic: identical inputs always yield identical strings.
|
|
107
|
+
*/
|
|
108
|
+
export function buildDirectionPrompt(ctx, exemplar, opts = {}) {
|
|
109
|
+
const maxRefChars = opts.maxRefChars ?? DEFAULT_MAX_REF_CHARS;
|
|
110
|
+
const sections = [
|
|
111
|
+
renderPageBlock(ctx, maxRefChars),
|
|
112
|
+
renderExemplarBlock(exemplar, maxRefChars),
|
|
113
|
+
];
|
|
114
|
+
const constraints = renderConstraints(ctx);
|
|
115
|
+
if (constraints)
|
|
116
|
+
sections.push(constraints);
|
|
117
|
+
if (ctx.rubricBody && ctx.rubricBody.trim().length > 0) {
|
|
118
|
+
sections.push(['SCORING CRITERIA (optimise the redesign against these)', truncate(ctx.rubricBody.trim(), MAX_RUBRIC_CHARS)].join('\n'));
|
|
119
|
+
}
|
|
120
|
+
sections.push(OUTPUT_CONTRACT);
|
|
121
|
+
sections.push(`Produce exactly ONE redesign direction grounded in exemplar "${exemplar.exemplar.id}". Return ONLY the JSON object.`);
|
|
122
|
+
return { system: GENERATION_SYSTEM_PROMPT, user: sections.join('\n\n') };
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../../../src/design/audit/reference/generate/prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L5 barrel — the public surface of the reference-grounded engine.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports ONLY the entrypoints, the shared contracts, and the offline
|
|
5
|
+
* authoring + eval helpers a consumer is meant to call. The L1-L3 internals
|
|
6
|
+
* (pure cores, adapters, `engine/core`, `engine/wiring`) are deliberately NOT
|
|
7
|
+
* re-exported here — callers reach the engine through `runReferenceRedesign`
|
|
8
|
+
* (rich artifact) or `evaluateReferenceGrounded` (pipeline `PageAuditResult`),
|
|
9
|
+
* not by importing a stage.
|
|
10
|
+
*/
|
|
11
|
+
export * from './contracts.js';
|
|
12
|
+
export { runReferenceRedesign } from './run.js';
|
|
13
|
+
export type { RunReferenceRedesignOptions } from './run.js';
|
|
14
|
+
export { evaluateReferenceGrounded } from './pipeline/evaluate-reference.js';
|
|
15
|
+
export type { EvaluateReferenceInput, ReferenceEvaluation } from './pipeline/evaluate-reference.js';
|
|
16
|
+
export { renderArtifactMarkdown, renderRedesignDirectionsSummary, renderRedesignTarget, artifactSlug } from './artifact/render.js';
|
|
17
|
+
export { resolveReferenceContext } from './reference-context.js';
|
|
18
|
+
export type { ResolveReferenceDeps, ResolveReferenceOptions } from './reference-context.js';
|
|
19
|
+
export { resolveReferenceConfig, DEFAULT_REFERENCE_CONFIG, DEFAULT_RETRIEVE_WEIGHTS, } from './config.js';
|
|
20
|
+
export type { ReferenceConfigOverrides } from './config.js';
|
|
21
|
+
export type { ReferenceBrain } from './engine/wiring.js';
|
|
22
|
+
export { createFileCorpusStore } from './corpus/store.js';
|
|
23
|
+
export { buildExemplar, ingestCorpus } from './corpus/build.js';
|
|
24
|
+
export type { BuildExemplarOptions, ExemplarClassifier, ExemplarClassifyInput, ExemplarClassification, IngestTarget, IngestCorpusOptions, IngestResult, } from './corpus/build.js';
|
|
25
|
+
export { tasteAgreement, tasteMetricsFromVerdicts } from './eval/taste-core.js';
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/design/audit/reference/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,cAAc,gBAAgB,CAAA;AAG9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,YAAY,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAA;AAG3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAKnG,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGlI,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,YAAY,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAG3F,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAG3D,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC/D,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,mBAAmB,EACnB,YAAY,GACb,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L5 barrel — the public surface of the reference-grounded engine.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports ONLY the entrypoints, the shared contracts, and the offline
|
|
5
|
+
* authoring + eval helpers a consumer is meant to call. The L1-L3 internals
|
|
6
|
+
* (pure cores, adapters, `engine/core`, `engine/wiring`) are deliberately NOT
|
|
7
|
+
* re-exported here — callers reach the engine through `runReferenceRedesign`
|
|
8
|
+
* (rich artifact) or `evaluateReferenceGrounded` (pipeline `PageAuditResult`),
|
|
9
|
+
* not by importing a stage.
|
|
10
|
+
*/
|
|
11
|
+
// All shared types + boundary interfaces (RedesignArtifact, PageAuditResult,
|
|
12
|
+
// ReferenceGroundedConfig, Exemplar, TasteVerdict, …) flow from the one hub.
|
|
13
|
+
export * from './contracts.js';
|
|
14
|
+
// Rich library/CLI entry → RedesignArtifact.
|
|
15
|
+
export { runReferenceRedesign } from './run.js';
|
|
16
|
+
// Flagged STAGE-6 entry → PageAuditResult (drops into the existing pipeline).
|
|
17
|
+
export { evaluateReferenceGrounded } from './pipeline/evaluate-reference.js';
|
|
18
|
+
// Human-facing renderers for the redesign brief surfaced in the audit report:
|
|
19
|
+
// the full rich brief and a compact report-section projection, plus the shared
|
|
20
|
+
// slug used to name the brief file.
|
|
21
|
+
export { renderArtifactMarkdown, renderRedesignDirectionsSummary, renderRedesignTarget, artifactSlug } from './artifact/render.js';
|
|
22
|
+
// CLI plumbing: resolve `--reference <url|path>` into a ReferenceContext once.
|
|
23
|
+
export { resolveReferenceContext } from './reference-context.js';
|
|
24
|
+
// Config: frozen defaults + the clamped operator-override merge.
|
|
25
|
+
export { resolveReferenceConfig, DEFAULT_REFERENCE_CONFIG, DEFAULT_RETRIEVE_WEIGHTS, } from './config.js';
|
|
26
|
+
// Corpus access: the file-backed store + the offline authoring path.
|
|
27
|
+
export { createFileCorpusStore } from './corpus/store.js';
|
|
28
|
+
export { buildExemplar, ingestCorpus } from './corpus/build.js';
|
|
29
|
+
// Taste eval: corpus-vs-corpus agreement + generated-vs-reference metrics.
|
|
30
|
+
export { tasteAgreement, tasteMetricsFromVerdicts } from './eval/taste-core.js';
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/design/audit/reference/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,6EAA6E;AAC7E,6EAA6E;AAC7E,cAAc,gBAAgB,CAAA;AAE9B,6CAA6C;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAG/C,8EAA8E;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAG5E,8EAA8E;AAC9E,+EAA+E;AAC/E,oCAAoC;AACpC,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAElI,+EAA+E;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAGhE,iEAAiE;AACjE,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,aAAa,CAAA;AAMpB,qEAAqE;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAW/D,2EAA2E;AAC3E,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vision-image clamp — the one pre-flight a screenshot needs before a vision API
|
|
3
|
+
* call. PURE (Buffer in → Buffer out, no IO): the disk read lives in the
|
|
4
|
+
* `vision-model` adapter, this only does pixel math, so it unit-tests with
|
|
5
|
+
* synthesised PNGs and no model.
|
|
6
|
+
*
|
|
7
|
+
* Why it exists: corpus exemplars are FULL-PAGE captures (e.g. 1440×14739). The
|
|
8
|
+
* Anthropic vision API rejects any image whose longest edge exceeds 8000px with a
|
|
9
|
+
* 400 `invalid_request_error`, and it internally downscales anything past ~1568px
|
|
10
|
+
* on the long edge regardless — so an un-clamped full-page screenshot either hard-
|
|
11
|
+
* fails (Anthropic-family providers) or burns tokens encoding detail the model
|
|
12
|
+
* never sees. Clamping the longest edge to {@link VISION_MAX_EDGE_PX} both clears
|
|
13
|
+
* the hard limit AND matches the API's own effective resolution, at a fraction of
|
|
14
|
+
* the base64 size.
|
|
15
|
+
*
|
|
16
|
+
* Fail-soft by design: an image already within the limit is returned BYTE-FOR-BYTE
|
|
17
|
+
* unchanged (no decode/re-encode), and a buffer that is not decodable as PNG is
|
|
18
|
+
* passed through untouched rather than thrown — the downstream model call is the
|
|
19
|
+
* place a genuinely bad image surfaces, not this size guard.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Longest-edge ceiling, in px. 1568 is the resolution the Anthropic vision API
|
|
23
|
+
* downscales to internally, and is comfortably under its 8000px hard limit — so
|
|
24
|
+
* clamping here is lossless relative to what the model would actually see while
|
|
25
|
+
* cutting the encoded payload by orders of magnitude on tall captures.
|
|
26
|
+
*/
|
|
27
|
+
export declare const VISION_MAX_EDGE_PX = 1568;
|
|
28
|
+
/**
|
|
29
|
+
* Downscale a PNG so its longest edge is ≤ `maxEdge`, preserving aspect ratio with
|
|
30
|
+
* an area-average (box) filter. Returns the ORIGINAL buffer unchanged when the
|
|
31
|
+
* image is already within bounds or cannot be parsed as PNG.
|
|
32
|
+
*/
|
|
33
|
+
export declare function clampPngLongestEdge(buf: Buffer, maxEdge?: number): Buffer;
|
|
34
|
+
//# sourceMappingURL=image-clamp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-clamp.d.ts","sourceRoot":"","sources":["../../../../../src/design/audit/reference/judge/image-clamp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,OAAO,CAAA;AAEtC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAA2B,GAAG,MAAM,CAsD7F"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vision-image clamp — the one pre-flight a screenshot needs before a vision API
|
|
3
|
+
* call. PURE (Buffer in → Buffer out, no IO): the disk read lives in the
|
|
4
|
+
* `vision-model` adapter, this only does pixel math, so it unit-tests with
|
|
5
|
+
* synthesised PNGs and no model.
|
|
6
|
+
*
|
|
7
|
+
* Why it exists: corpus exemplars are FULL-PAGE captures (e.g. 1440×14739). The
|
|
8
|
+
* Anthropic vision API rejects any image whose longest edge exceeds 8000px with a
|
|
9
|
+
* 400 `invalid_request_error`, and it internally downscales anything past ~1568px
|
|
10
|
+
* on the long edge regardless — so an un-clamped full-page screenshot either hard-
|
|
11
|
+
* fails (Anthropic-family providers) or burns tokens encoding detail the model
|
|
12
|
+
* never sees. Clamping the longest edge to {@link VISION_MAX_EDGE_PX} both clears
|
|
13
|
+
* the hard limit AND matches the API's own effective resolution, at a fraction of
|
|
14
|
+
* the base64 size.
|
|
15
|
+
*
|
|
16
|
+
* Fail-soft by design: an image already within the limit is returned BYTE-FOR-BYTE
|
|
17
|
+
* unchanged (no decode/re-encode), and a buffer that is not decodable as PNG is
|
|
18
|
+
* passed through untouched rather than thrown — the downstream model call is the
|
|
19
|
+
* place a genuinely bad image surfaces, not this size guard.
|
|
20
|
+
*/
|
|
21
|
+
import { PNG } from 'pngjs';
|
|
22
|
+
/**
|
|
23
|
+
* Longest-edge ceiling, in px. 1568 is the resolution the Anthropic vision API
|
|
24
|
+
* downscales to internally, and is comfortably under its 8000px hard limit — so
|
|
25
|
+
* clamping here is lossless relative to what the model would actually see while
|
|
26
|
+
* cutting the encoded payload by orders of magnitude on tall captures.
|
|
27
|
+
*/
|
|
28
|
+
export const VISION_MAX_EDGE_PX = 1568;
|
|
29
|
+
/**
|
|
30
|
+
* Downscale a PNG so its longest edge is ≤ `maxEdge`, preserving aspect ratio with
|
|
31
|
+
* an area-average (box) filter. Returns the ORIGINAL buffer unchanged when the
|
|
32
|
+
* image is already within bounds or cannot be parsed as PNG.
|
|
33
|
+
*/
|
|
34
|
+
export function clampPngLongestEdge(buf, maxEdge = VISION_MAX_EDGE_PX) {
|
|
35
|
+
let png;
|
|
36
|
+
try {
|
|
37
|
+
png = PNG.sync.read(buf);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Not a decodable PNG — leave it to the model call to reject; this guard only
|
|
41
|
+
// shrinks oversized images, it does not validate them.
|
|
42
|
+
return buf;
|
|
43
|
+
}
|
|
44
|
+
const { width, height } = png;
|
|
45
|
+
const longest = Math.max(width, height);
|
|
46
|
+
if (longest <= maxEdge)
|
|
47
|
+
return buf;
|
|
48
|
+
const scale = maxEdge / longest;
|
|
49
|
+
const newW = Math.max(1, Math.round(width * scale));
|
|
50
|
+
const newH = Math.max(1, Math.round(height * scale));
|
|
51
|
+
const out = new PNG({ width: newW, height: newH });
|
|
52
|
+
// Each destination pixel averages the source rectangle it maps to. The
|
|
53
|
+
// rectangles tile the source exactly, so every source pixel is read once —
|
|
54
|
+
// O(source pixels), independent of the downscale factor.
|
|
55
|
+
const src = png.data;
|
|
56
|
+
const dst = out.data;
|
|
57
|
+
for (let y = 0; y < newH; y++) {
|
|
58
|
+
const sy0 = Math.floor((y * height) / newH);
|
|
59
|
+
const sy1 = Math.max(sy0 + 1, Math.floor(((y + 1) * height) / newH));
|
|
60
|
+
for (let x = 0; x < newW; x++) {
|
|
61
|
+
const sx0 = Math.floor((x * width) / newW);
|
|
62
|
+
const sx1 = Math.max(sx0 + 1, Math.floor(((x + 1) * width) / newW));
|
|
63
|
+
let r = 0;
|
|
64
|
+
let g = 0;
|
|
65
|
+
let b = 0;
|
|
66
|
+
let a = 0;
|
|
67
|
+
let n = 0;
|
|
68
|
+
for (let sy = sy0; sy < sy1; sy++) {
|
|
69
|
+
const rowBase = sy * width;
|
|
70
|
+
for (let sx = sx0; sx < sx1; sx++) {
|
|
71
|
+
const idx = (rowBase + sx) << 2;
|
|
72
|
+
r += src[idx];
|
|
73
|
+
g += src[idx + 1];
|
|
74
|
+
b += src[idx + 2];
|
|
75
|
+
a += src[idx + 3];
|
|
76
|
+
n++;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const o = (y * newW + x) << 2;
|
|
80
|
+
dst[o] = Math.round(r / n);
|
|
81
|
+
dst[o + 1] = Math.round(g / n);
|
|
82
|
+
dst[o + 2] = Math.round(b / n);
|
|
83
|
+
dst[o + 3] = Math.round(a / n);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return PNG.sync.write(out);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=image-clamp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-clamp.js","sourceRoot":"","sources":["../../../../../src/design/audit/reference/judge/image-clamp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Position-swapped pairwise debias — the core that cancels slot bias.
|
|
3
|
+
*
|
|
4
|
+
* A single judge call is contaminated by position bias: models systematically
|
|
5
|
+
* over-prefer whichever design sits in slot A. `judgePair` neutralises it by
|
|
6
|
+
* running BOTH slot orders through the INJECTED `TasteJudge` (A-vs-B and
|
|
7
|
+
* B-vs-A) and reconciling. The model call is the only impure part and it is
|
|
8
|
+
* injected, so `reconcileVerdicts` — where all the debias logic lives — is fully
|
|
9
|
+
* pure and unit-tests with stub verdicts and zero live model.
|
|
10
|
+
*
|
|
11
|
+
* Reconciliation rule (measures taste, not slot):
|
|
12
|
+
* - both orders pick the SAME id ⇒ that id wins (margin = mean confidence)
|
|
13
|
+
* - the preferred id FLIPS with the slot ⇒ pure position bias ⇒ tie
|
|
14
|
+
* - only one order separates them ⇒ a low-confidence win (margin halved)
|
|
15
|
+
* - both orders tie ⇒ tie
|
|
16
|
+
*
|
|
17
|
+
* `swapped` re-labels the subjects (a↔b) while preserving `dimension`,
|
|
18
|
+
* `reference`, and `rubricBody`, so the judge sees the same comparison from the
|
|
19
|
+
* other side — the second call is a genuine slot swap, not a different question.
|
|
20
|
+
*/
|
|
21
|
+
import type { JudgePairInput, RawVerdict, TasteJudge, TasteVerdict } from '../contracts.js';
|
|
22
|
+
/**
|
|
23
|
+
* Reconcile the two slot-order verdicts into a stable, id-keyed `TasteVerdict`.
|
|
24
|
+
* Pure: no IO, no model. `ab` presented a→SLOT A, b→SLOT B; `ba` presented
|
|
25
|
+
* b→SLOT A, a→SLOT B.
|
|
26
|
+
*/
|
|
27
|
+
export declare function reconcileVerdicts(ab: RawVerdict, ba: RawVerdict, aId: string, bId: string): TasteVerdict;
|
|
28
|
+
/**
|
|
29
|
+
* Run a single comparison through both slot orders (× `reps`) and reconcile to a
|
|
30
|
+
* position-debiased `TasteVerdict`. The `TasteJudge` is injected, so this is the
|
|
31
|
+
* only impure boundary; all aggregation is deterministic.
|
|
32
|
+
*/
|
|
33
|
+
export declare function judgePair(judge: TasteJudge, input: JudgePairInput, reps?: number): Promise<TasteVerdict>;
|
|
34
|
+
//# sourceMappingURL=pairwise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairwise.d.ts","sourceRoot":"","sources":["../../../../../src/design/audit/reference/judge/pairwise.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAmB3F;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,YAAY,CA+Bd;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,cAAc,EACrB,IAAI,SAAI,GACP,OAAO,CAAC,YAAY,CAAC,CAsBvB"}
|