@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,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Artifact → existing-pipeline compatibility layer. PURE: no IO, no LLM.
|
|
3
|
+
*
|
|
4
|
+
* Two responsibilities, both expressed by REUSING the v1 audit helpers rather
|
|
5
|
+
* than re-implementing them — this is what lets the reference-grounded engine
|
|
6
|
+
* return through the unchanged `PageAuditResult` contract that stages 7-9 expect:
|
|
7
|
+
*
|
|
8
|
+
* 1. `directionToFindings` projects the winning `RedesignDirection` + the
|
|
9
|
+
* DNA-altitude `DnaDelta` onto the CLOSED `DesignFinding` enum as `minor`
|
|
10
|
+
* recommendations, then MERGES the deterministic `measurementsToFindings`
|
|
11
|
+
* ground truth (contrast + axe) and ROI-sorts the union via `annotateRoi` /
|
|
12
|
+
* `topByRoi`. Directional items are always `minor`, so the v1
|
|
13
|
+
* major/critical-must-carry-a-patch downgrade rule can never corrupt them;
|
|
14
|
+
* `contrast` / `accessibility` findings come ONLY from measurements — the
|
|
15
|
+
* generator is never allowed to invent them.
|
|
16
|
+
* 2. `toReferencePageAuditResult` maps a finished `RedesignRunResult` onto the
|
|
17
|
+
* `PageAuditResult` shape. It NEVER re-scores: the reported page `score` IS
|
|
18
|
+
* the engine's `headlineScore` — the single scoring authority (`score-core`
|
|
19
|
+
* off one `QualityAssessment`, already measurement-capped by
|
|
20
|
+
* `deriveHeadlineScore`). It does NOT borrow `conservativeScore`: there are no
|
|
21
|
+
* per-pass page scores in this mode, and folding the per-`Dimension` scores in
|
|
22
|
+
* would let an UNASSESSED placeholder (the default-budget fill, score 5 /
|
|
23
|
+
* confidence 'low') drag a genuine headline down to ~5 — the scoring fiction
|
|
24
|
+
* `score-core` was built to avoid. The rich per-dimension surface flows to
|
|
25
|
+
* stage 8 as `precomputedScores`, never into this headline.
|
|
26
|
+
*/
|
|
27
|
+
import { measurementsToFindings } from '../../evaluate.js';
|
|
28
|
+
import { annotateRoi, topByRoi } from '../../roi.js';
|
|
29
|
+
import { clipToWord } from './text.js';
|
|
30
|
+
// Directional recommendations are advisory prose; bound them so an injected
|
|
31
|
+
// rationale can never blow up a finding into a wall of text.
|
|
32
|
+
const MAX_DIRECTIONAL_CHARS = 240;
|
|
33
|
+
const MAX_SUMMARY_CHARS = 400;
|
|
34
|
+
// Cap copy revisions surfaced as findings so a chatty generator can't flood the
|
|
35
|
+
// list; the full set always lives in the rich artifact.
|
|
36
|
+
const MAX_COPY_FINDINGS = 6;
|
|
37
|
+
// A dimension at or above this 1-10 score reads as a genuine strength.
|
|
38
|
+
const STRENGTH_THRESHOLD = 7;
|
|
39
|
+
const DIM_LABEL = {
|
|
40
|
+
product_intent: 'Product intent',
|
|
41
|
+
visual_craft: 'Visual craft',
|
|
42
|
+
trust_clarity: 'Trust & clarity',
|
|
43
|
+
workflow: 'Workflow',
|
|
44
|
+
content_ia: 'Content & IA',
|
|
45
|
+
};
|
|
46
|
+
function clip(s, max = MAX_DIRECTIONAL_CHARS) {
|
|
47
|
+
const t = s.trim().replace(/\s+/g, ' ');
|
|
48
|
+
return t.length > max ? `${t.slice(0, max - 1)}…` : t;
|
|
49
|
+
}
|
|
50
|
+
function directionalFinding(over) {
|
|
51
|
+
return {
|
|
52
|
+
category: over.category,
|
|
53
|
+
severity: 'minor',
|
|
54
|
+
description: clip(over.description),
|
|
55
|
+
location: over.location,
|
|
56
|
+
suggestion: clip(over.suggestion),
|
|
57
|
+
impact: over.impact,
|
|
58
|
+
effort: over.effort,
|
|
59
|
+
blast: over.blast,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Build the advisory "static page vs scroll-rich peers" finding, or `null`.
|
|
64
|
+
*
|
|
65
|
+
* Honest-signals gate: fires ONLY when the audited page's scroll motion was
|
|
66
|
+
* actually OBSERVED (capture ran) and read as NOT scroll-driven, AND at least one
|
|
67
|
+
* retrieved world-class exemplar was observed scroll-driven. If the page's scroll
|
|
68
|
+
* was never captured (`dna.motion.scroll` undefined) nothing fires — absence is
|
|
69
|
+
* not evidence of a static page. Computed directly from the two DNAs because
|
|
70
|
+
* `DnaDelta` carries no motion field.
|
|
71
|
+
*/
|
|
72
|
+
function scrollMotionAdvisory(dna, hits) {
|
|
73
|
+
if (!dna || !hits || hits.length === 0)
|
|
74
|
+
return null;
|
|
75
|
+
const pageScroll = dna.motion.scroll;
|
|
76
|
+
if (!pageScroll || pageScroll.scrollDriven)
|
|
77
|
+
return null;
|
|
78
|
+
const scrollRichPeers = hits.filter((h) => h.exemplar.dna.motion.scroll?.scrollDriven === true);
|
|
79
|
+
if (scrollRichPeers.length === 0)
|
|
80
|
+
return null;
|
|
81
|
+
const peerIds = scrollRichPeers.slice(0, 3).map((h) => h.exemplar.id).join(', ');
|
|
82
|
+
// Aggregate what the peers actually show, so the advice names real interactions.
|
|
83
|
+
const cues = new Set();
|
|
84
|
+
for (const p of scrollRichPeers) {
|
|
85
|
+
const s = p.exemplar.dna.motion.scroll;
|
|
86
|
+
if (!s)
|
|
87
|
+
continue;
|
|
88
|
+
if (s.reveals.count >= 2)
|
|
89
|
+
cues.add('scroll reveals');
|
|
90
|
+
if (s.stickyCount >= 1)
|
|
91
|
+
cues.add('sticky section pinning');
|
|
92
|
+
if (s.parallax >= 0.25)
|
|
93
|
+
cues.add('parallax depth');
|
|
94
|
+
}
|
|
95
|
+
const cueList = [...cues].join(', ') || 'scroll-driven motion';
|
|
96
|
+
return directionalFinding({
|
|
97
|
+
category: 'ux',
|
|
98
|
+
description: `This page reads as static on scroll, but its world-class references (${peerIds}) use ${cueList}. Consider adding grounded scroll interaction.`,
|
|
99
|
+
location: 'page motion',
|
|
100
|
+
suggestion: `Introduce scroll-driven motion seen in the references: ${cueList}. Keep it purposeful and accessible (respect prefers-reduced-motion).`,
|
|
101
|
+
impact: 3,
|
|
102
|
+
effort: 5,
|
|
103
|
+
blast: 'page',
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Project the winning direction + DNA gap onto `minor` `DesignFinding`s, merge
|
|
108
|
+
* the deterministic measurement findings, and return the ROI-sorted union.
|
|
109
|
+
*
|
|
110
|
+
* The directional categories are restricted to `typography` / `spacing` /
|
|
111
|
+
* `layout` / `ux` — `contrast` and `accessibility` are reserved for
|
|
112
|
+
* `measurementsToFindings` so a generated recommendation can never masquerade as
|
|
113
|
+
* a measured a11y/contrast fact.
|
|
114
|
+
*
|
|
115
|
+
* `dna` + `hits` are optional: when both are supplied an advisory scroll-motion
|
|
116
|
+
* finding may be minted (see {@link scrollMotionAdvisory}). Omitting them yields
|
|
117
|
+
* byte-identical output to the prior 3-arg behaviour.
|
|
118
|
+
*/
|
|
119
|
+
export function directionToFindings(winner, gap, measurements, dna, hits) {
|
|
120
|
+
const directional = [];
|
|
121
|
+
// ── Type system ──────────────────────────────────────────────────────────
|
|
122
|
+
const t = winner.typeSystem;
|
|
123
|
+
const ratioStr = t.ratio ? `, modular ratio ~${t.ratio}×` : '';
|
|
124
|
+
const families = t.families.join(', ') || 'a single family';
|
|
125
|
+
const scale = t.scalePx.join('/') || 'a defined scale';
|
|
126
|
+
directional.push(directionalFinding({
|
|
127
|
+
category: 'typography',
|
|
128
|
+
description: `Adopt the "${winner.name}" type system — families ${families}, scale ${scale}px${ratioStr}. ${t.rationale}`,
|
|
129
|
+
location: 'page typography',
|
|
130
|
+
suggestion: `Apply the proposed type scale and families consistently across headings and body. ${t.rationale}`,
|
|
131
|
+
impact: 5,
|
|
132
|
+
effort: 4,
|
|
133
|
+
blast: 'system',
|
|
134
|
+
}));
|
|
135
|
+
// ── Colour system (no `color` enum member → `ux`; `contrast` stays measured) ─
|
|
136
|
+
const c = winner.colorSystem;
|
|
137
|
+
const accent = c.accent ? ` accent ${c.accent},` : '';
|
|
138
|
+
const neutrals = c.neutrals.join(' ') || 'a neutral ramp';
|
|
139
|
+
directional.push(directionalFinding({
|
|
140
|
+
category: 'ux',
|
|
141
|
+
description: `Restyle to the "${winner.name}" colour system — primary ${c.primary},${accent} background ${c.background}, neutrals ${neutrals}. ${c.rationale}`,
|
|
142
|
+
location: 'page colour system',
|
|
143
|
+
suggestion: `Map the proposed palette onto your colour tokens. ${c.rationale}`,
|
|
144
|
+
impact: 5,
|
|
145
|
+
effort: 4,
|
|
146
|
+
blast: 'system',
|
|
147
|
+
}));
|
|
148
|
+
// ── Layout / hierarchy ───────────────────────────────────────────────────
|
|
149
|
+
if (winner.hierarchy.length > 0 || winner.asciiLayout.trim()) {
|
|
150
|
+
const order = winner.hierarchy.length ? winner.hierarchy.join(' → ') : 'the proposed structure';
|
|
151
|
+
directional.push(directionalFinding({
|
|
152
|
+
category: 'layout',
|
|
153
|
+
description: `Restructure toward the "${winner.name}" layout: ${order}. ${winner.rationale}`,
|
|
154
|
+
location: 'page layout',
|
|
155
|
+
suggestion: `Reflow the page to the proposed information hierarchy: ${order}.`,
|
|
156
|
+
impact: 5,
|
|
157
|
+
effort: 6,
|
|
158
|
+
blast: 'page',
|
|
159
|
+
}));
|
|
160
|
+
}
|
|
161
|
+
// ── Spacing rhythm (only when the gap shows a real rhythm change) ──────────
|
|
162
|
+
if (gap.spacing.densityChanged || gap.spacing.baseUnitFrom !== gap.spacing.baseUnitTo) {
|
|
163
|
+
// Only describe a base-unit re-base when the unit actually moved. With an
|
|
164
|
+
// unchanged base unit the gate fired purely on density, so a "from Xpx to Xpx"
|
|
165
|
+
// clause would be a no-op lie — describe the real (density) delta instead.
|
|
166
|
+
const baseChanged = gap.spacing.baseUnitFrom !== gap.spacing.baseUnitTo;
|
|
167
|
+
let description;
|
|
168
|
+
let suggestion;
|
|
169
|
+
if (baseChanged) {
|
|
170
|
+
const from = gap.spacing.baseUnitFrom ?? 'none';
|
|
171
|
+
const to = gap.spacing.baseUnitTo ?? 'none';
|
|
172
|
+
description = `Re-base the spacing rhythm from ${from}px to ${to}px${gap.spacing.densityChanged ? ' and rebalance visual density' : ''}. ${gap.summary}`;
|
|
173
|
+
suggestion = `Snap padding and margins to a ${to}px grid for a consistent rhythm.`;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
description = `Rebalance the visual density of the spacing rhythm. ${gap.summary}`;
|
|
177
|
+
suggestion = 'Rework padding and margins to rebalance density while keeping the existing base unit.';
|
|
178
|
+
}
|
|
179
|
+
directional.push(directionalFinding({
|
|
180
|
+
category: 'spacing',
|
|
181
|
+
description,
|
|
182
|
+
location: 'page spacing',
|
|
183
|
+
suggestion,
|
|
184
|
+
impact: 4,
|
|
185
|
+
effort: 3,
|
|
186
|
+
blast: 'system',
|
|
187
|
+
}));
|
|
188
|
+
}
|
|
189
|
+
// ── Motion (only when the direction actually proposes motion) ─────────────
|
|
190
|
+
const m = winner.motionSpec;
|
|
191
|
+
if (m.cues.length > 0 || m.durationsMs.length > 0) {
|
|
192
|
+
const cues = m.cues.join('; ') || 'key transitions';
|
|
193
|
+
const durations = m.durationsMs.join('/') || 'default';
|
|
194
|
+
directional.push(directionalFinding({
|
|
195
|
+
category: 'ux',
|
|
196
|
+
description: `Add motion per the "${winner.name}" direction — ${cues} (${durations}ms).`,
|
|
197
|
+
location: 'page motion',
|
|
198
|
+
suggestion: `Apply the proposed motion cues: ${cues}.`,
|
|
199
|
+
impact: 3,
|
|
200
|
+
effort: 4,
|
|
201
|
+
blast: 'page',
|
|
202
|
+
}));
|
|
203
|
+
}
|
|
204
|
+
// ── Copy revisions ────────────────────────────────────────────────────────
|
|
205
|
+
// Drop no-op revisions (before === after after trim) BEFORE slicing so the
|
|
206
|
+
// suppressed rows never consume the MAX_COPY_FINDINGS budget. Genuine adds
|
|
207
|
+
// (before undefined) always survive.
|
|
208
|
+
const copyRevisions = winner.copy.filter((rev) => rev.before === undefined || rev.before.trim() !== rev.after.trim());
|
|
209
|
+
for (const rev of copyRevisions.slice(0, MAX_COPY_FINDINGS)) {
|
|
210
|
+
directional.push(directionalFinding({
|
|
211
|
+
category: 'ux',
|
|
212
|
+
description: rev.before
|
|
213
|
+
? `Revise copy at ${rev.location}: "${rev.before}" → "${rev.after}".`
|
|
214
|
+
: `Add copy at ${rev.location}: "${rev.after}".`,
|
|
215
|
+
location: rev.location,
|
|
216
|
+
suggestion: `Use the revised copy: "${rev.after}".`,
|
|
217
|
+
impact: 4,
|
|
218
|
+
effort: 2,
|
|
219
|
+
blast: 'page',
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
222
|
+
// Advisory: audited page is static on scroll but its peers are scroll-rich.
|
|
223
|
+
// Fires only on observed signals (see scrollMotionAdvisory).
|
|
224
|
+
const advisory = scrollMotionAdvisory(dna, hits);
|
|
225
|
+
if (advisory)
|
|
226
|
+
directional.push(advisory);
|
|
227
|
+
// Merge deterministic ground truth, then ROI-annotate + sort the union. Reuse
|
|
228
|
+
// — never reimplement — the v1 measurement→finding and ROI helpers.
|
|
229
|
+
const all = [...directional, ...measurementsToFindings(measurements)];
|
|
230
|
+
annotateRoi(all);
|
|
231
|
+
return topByRoi(all, all.length);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Map a finished engine run onto the v1 `PageAuditResult` so the reference mode
|
|
235
|
+
* flows through stages 7-9 unchanged. Pure: it shapes already-computed values
|
|
236
|
+
* and never issues a new scoring pass.
|
|
237
|
+
*
|
|
238
|
+
* `score` IS `result.headlineScore` — the single scoring authority. The headline
|
|
239
|
+
* is monotonic in the page's win-rate vs world-class exemplars and already capped
|
|
240
|
+
* by `deriveHeadlineScore` when measurements flag blocking issues. The per-
|
|
241
|
+
* `Dimension` scores are NOT folded in here: under the default judge budget they
|
|
242
|
+
* are UNASSESSED placeholders (`score-core`'s confidence-'low' fill), and
|
|
243
|
+
* averaging those into the reported number would crush a genuine headline toward
|
|
244
|
+
* 5. The rich dimension surface is consumed by stage 8 as `precomputedScores`
|
|
245
|
+
* instead. `findings` carries the already ROI-sorted set from the core.
|
|
246
|
+
*/
|
|
247
|
+
export function toReferencePageAuditResult(result) {
|
|
248
|
+
const winner = result.artifact.directions[0];
|
|
249
|
+
return {
|
|
250
|
+
url: result.artifact.url,
|
|
251
|
+
score: result.headlineScore,
|
|
252
|
+
summary: buildSummary(result, winner),
|
|
253
|
+
strengths: buildStrengths(result),
|
|
254
|
+
findings: result.findings,
|
|
255
|
+
classification: result.classification,
|
|
256
|
+
measurements: result.measurements,
|
|
257
|
+
designSystemScore: result.designSystemScore,
|
|
258
|
+
tokensUsed: result.tokensUsed,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
function buildSummary(result, winner) {
|
|
262
|
+
const wr = Math.round(result.quality.overallWinRate * 100);
|
|
263
|
+
const head = winner
|
|
264
|
+
? `Reference-grounded redesign — winner "${winner.name}". ${winner.rationale}`
|
|
265
|
+
: 'Reference-grounded redesign produced no ranked direction.';
|
|
266
|
+
// Word-aware truncation: the summary must end on a clean word boundary, never
|
|
267
|
+
// mid-word ("…pairwise compa…"). The hard `clip` stays on the directional
|
|
268
|
+
// finding bodies whose snapshot text must not shift.
|
|
269
|
+
return clipToWord(`${head} Page wins ${wr}% of ${result.quality.comparisons} pairwise comparisons against world-class exemplars.`, MAX_SUMMARY_CHARS);
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Render one judged dimension as a strength line. `score-core` prefixes its
|
|
273
|
+
* summary with the raw dimension key (`product_intent: …`); strip that so the
|
|
274
|
+
* human label isn't doubled (`Product intent: product_intent: …`).
|
|
275
|
+
*/
|
|
276
|
+
function strengthLine(dim, s) {
|
|
277
|
+
const prefix = `${dim}:`;
|
|
278
|
+
const body = (s.summary.startsWith(prefix) ? s.summary.slice(prefix.length) : s.summary).trim();
|
|
279
|
+
return `${DIM_LABEL[dim]}: ${body}`;
|
|
280
|
+
}
|
|
281
|
+
function buildStrengths(result) {
|
|
282
|
+
// Only genuinely judge-resolved dimensions can be a strength. A dimension is
|
|
283
|
+
// judge-resolved iff it carries a real per-dimension win-rate; the rest are
|
|
284
|
+
// `score-core` placeholders (default-budget fill) and must never be promoted.
|
|
285
|
+
const judged = result.quality.dimensionWinRates ?? {};
|
|
286
|
+
const entries = Object.entries(result.dimensionScores).filter(([dim]) => judged[dim] !== undefined);
|
|
287
|
+
if (entries.length === 0) {
|
|
288
|
+
// No dimension was independently judged under this run's budget. Say so rather
|
|
289
|
+
// than promoting an UNASSESSED placeholder as a strength.
|
|
290
|
+
return ['No dimension was independently judged under this run’s budget — see the headline win-rate and findings.'];
|
|
291
|
+
}
|
|
292
|
+
// A genuine strength must actually beat world-class exemplars at least sometimes
|
|
293
|
+
// (win-rate > 0) AND clear the score floor. A 0%-win-rate dimension is the page's
|
|
294
|
+
// WEAKEST axis — it can never be a strength, regardless of its placeholder score.
|
|
295
|
+
const strong = entries
|
|
296
|
+
.filter(([dim, s]) => (judged[dim] ?? 0) > 0 && s.score >= STRENGTH_THRESHOLD)
|
|
297
|
+
.sort((a, b) => b[1].score - a[1].score)
|
|
298
|
+
.map(([dim, s]) => strengthLine(dim, s));
|
|
299
|
+
if (strong.length > 0)
|
|
300
|
+
return strong;
|
|
301
|
+
// Nothing clears the strength bar — surface the strongest dimension that at
|
|
302
|
+
// least wins SOME comparisons, honestly labelled.
|
|
303
|
+
const contenders = entries
|
|
304
|
+
.filter(([dim]) => (judged[dim] ?? 0) > 0)
|
|
305
|
+
.sort((a, b) => b[1].score - a[1].score);
|
|
306
|
+
if (contenders.length > 0) {
|
|
307
|
+
const [dim, s] = contenders[0];
|
|
308
|
+
return [`Strongest area — ${strengthLine(dim, s)}`];
|
|
309
|
+
}
|
|
310
|
+
// Every judged dimension lost every comparison (0% win-rate). Don't invent a
|
|
311
|
+
// strength out of the page's weakest axes.
|
|
312
|
+
return ['No dimension stood out against world-class exemplars — every judged dimension lost its pairwise comparisons.'];
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=to-findings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-findings.js","sourceRoot":"","sources":["../../../../../src/design/audit/reference/artifact/to-findings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reference-grounded engine configuration — the PURE defaults + clamped merge.
|
|
3
|
+
*
|
|
4
|
+
* Holds the frozen `DEFAULT_REFERENCE_CONFIG` (and its nested `EngineBudget`),
|
|
5
|
+
* the frozen `DEFAULT_RETRIEVE_WEIGHTS`, and `resolveReferenceConfig`, which
|
|
6
|
+
* folds operator overrides onto those defaults field-by-field and clamps the
|
|
7
|
+
* numeric knobs (`k`, `directionCount`, and the budget counts) to their safe
|
|
8
|
+
* minimums. No IO, no LLM, no env reads — fully deterministic.
|
|
9
|
+
*
|
|
10
|
+
* Design rules encoded here:
|
|
11
|
+
* - The defaults are the SINGLE place the engine's cost shape is decided; every
|
|
12
|
+
* other module receives a resolved `ReferenceGroundedConfig`, never a literal.
|
|
13
|
+
* - Overrides are a DEEP-partial (`budget` may be partially specified) so an
|
|
14
|
+
* operator can bump one knob (e.g. `judgeReps`) without restating the bundle.
|
|
15
|
+
* - Clamping is fail-safe, not fail-loud: a non-finite / sub-minimum override
|
|
16
|
+
* falls back to the default rather than producing a zero-budget run that
|
|
17
|
+
* would silently judge nothing.
|
|
18
|
+
*/
|
|
19
|
+
import type { ReferenceGroundedConfig, EngineBudget, RetrieveWeights } from './contracts.js';
|
|
20
|
+
/**
|
|
21
|
+
* Relative blend weights for the matcher. Aesthetic similarity dominates;
|
|
22
|
+
* structural overlap is a secondary signal; the free-form job-to-be-done signal
|
|
23
|
+
* is intentionally low because `classification.intent` is noisy and is
|
|
24
|
+
* fabricated on `--profile` runs (see contracts `RetrieveWeights`). The
|
|
25
|
+
* `pageType` hard filter lives in the matcher, not in these weights.
|
|
26
|
+
*/
|
|
27
|
+
export declare const DEFAULT_RETRIEVE_WEIGHTS: RetrieveWeights;
|
|
28
|
+
/**
|
|
29
|
+
* The frozen default `ReferenceGroundedConfig`. `corpusDir` is the only field an
|
|
30
|
+
* operator almost always overrides; the rest are tuned for the offline/text
|
|
31
|
+
* default path (deterministic hash embedder, text judge) so a run works with
|
|
32
|
+
* zero API key and zero network.
|
|
33
|
+
*/
|
|
34
|
+
export declare const DEFAULT_REFERENCE_CONFIG: ReferenceGroundedConfig;
|
|
35
|
+
/**
|
|
36
|
+
* Deep-partial overrides for `resolveReferenceConfig`: every top-level field is
|
|
37
|
+
* optional, and `budget` is itself partial so a single budget knob can be
|
|
38
|
+
* overridden without restating the whole bundle.
|
|
39
|
+
*/
|
|
40
|
+
export interface ReferenceConfigOverrides extends Partial<Omit<ReferenceGroundedConfig, 'budget'>> {
|
|
41
|
+
budget?: Partial<EngineBudget>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Resolve operator overrides onto the frozen defaults: a field-by-field merge
|
|
45
|
+
* with the count knobs clamped to their minimums. Always returns a fresh,
|
|
46
|
+
* mutable config (the frozen defaults are never handed out directly), so callers
|
|
47
|
+
* that attach a resolved `reference` later don't mutate the shared default.
|
|
48
|
+
*/
|
|
49
|
+
export declare function resolveReferenceConfig(partial?: ReferenceConfigOverrides): ReferenceGroundedConfig;
|
|
50
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/design/audit/reference/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EACV,uBAAuB,EACvB,YAAY,EACZ,eAAe,EAEhB,MAAM,gBAAgB,CAAA;AAEvB;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,EAAE,eAIrC,CAAA;AAkBF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,uBAgBrC,CAAA;AAEF;;;;GAIG;AACH,MAAM,WAAW,wBACf,SAAQ,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CAC/B;AAYD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,wBAA6B,GACrC,uBAAuB,CAsBzB"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reference-grounded engine configuration — the PURE defaults + clamped merge.
|
|
3
|
+
*
|
|
4
|
+
* Holds the frozen `DEFAULT_REFERENCE_CONFIG` (and its nested `EngineBudget`),
|
|
5
|
+
* the frozen `DEFAULT_RETRIEVE_WEIGHTS`, and `resolveReferenceConfig`, which
|
|
6
|
+
* folds operator overrides onto those defaults field-by-field and clamps the
|
|
7
|
+
* numeric knobs (`k`, `directionCount`, and the budget counts) to their safe
|
|
8
|
+
* minimums. No IO, no LLM, no env reads — fully deterministic.
|
|
9
|
+
*
|
|
10
|
+
* Design rules encoded here:
|
|
11
|
+
* - The defaults are the SINGLE place the engine's cost shape is decided; every
|
|
12
|
+
* other module receives a resolved `ReferenceGroundedConfig`, never a literal.
|
|
13
|
+
* - Overrides are a DEEP-partial (`budget` may be partially specified) so an
|
|
14
|
+
* operator can bump one knob (e.g. `judgeReps`) without restating the bundle.
|
|
15
|
+
* - Clamping is fail-safe, not fail-loud: a non-finite / sub-minimum override
|
|
16
|
+
* falls back to the default rather than producing a zero-budget run that
|
|
17
|
+
* would silently judge nothing.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Relative blend weights for the matcher. Aesthetic similarity dominates;
|
|
21
|
+
* structural overlap is a secondary signal; the free-form job-to-be-done signal
|
|
22
|
+
* is intentionally low because `classification.intent` is noisy and is
|
|
23
|
+
* fabricated on `--profile` runs (see contracts `RetrieveWeights`). The
|
|
24
|
+
* `pageType` hard filter lives in the matcher, not in these weights.
|
|
25
|
+
*/
|
|
26
|
+
export const DEFAULT_RETRIEVE_WEIGHTS = Object.freeze({
|
|
27
|
+
aesthetic: 0.7,
|
|
28
|
+
structural: 0.25,
|
|
29
|
+
job: 0.05,
|
|
30
|
+
});
|
|
31
|
+
/**
|
|
32
|
+
* The default per-run cost ceiling. Pairwise judging multiplies LLM calls, so
|
|
33
|
+
* every leg is capped: at most `maxGenerationCalls` directions, at most
|
|
34
|
+
* `maxJudgeCalls` total judge calls across the relative + absolute legs (each
|
|
35
|
+
* pairwise comparison = both slot orders × `judgeReps`), `concurrency` in
|
|
36
|
+
* flight at once. `screenThenValidate` is off by default (full reps on every
|
|
37
|
+
* comparison); flip it on to contain cost on larger direction sets.
|
|
38
|
+
*/
|
|
39
|
+
const DEFAULT_ENGINE_BUDGET = Object.freeze({
|
|
40
|
+
maxGenerationCalls: 3,
|
|
41
|
+
maxJudgeCalls: 24,
|
|
42
|
+
judgeReps: 1,
|
|
43
|
+
concurrency: 4,
|
|
44
|
+
screenThenValidate: false,
|
|
45
|
+
});
|
|
46
|
+
/**
|
|
47
|
+
* The frozen default `ReferenceGroundedConfig`. `corpusDir` is the only field an
|
|
48
|
+
* operator almost always overrides; the rest are tuned for the offline/text
|
|
49
|
+
* default path (deterministic hash embedder, text judge) so a run works with
|
|
50
|
+
* zero API key and zero network.
|
|
51
|
+
*/
|
|
52
|
+
export const DEFAULT_REFERENCE_CONFIG = Object.freeze({
|
|
53
|
+
corpusDir: 'bench/design/reference-corpus',
|
|
54
|
+
artifactDir: undefined,
|
|
55
|
+
k: 4,
|
|
56
|
+
directionCount: 3,
|
|
57
|
+
judge: 'text',
|
|
58
|
+
// A single sensible default vision model ⇒ a single-judge vision run when
|
|
59
|
+
// `judge: 'vision'` is selected without `--judge-models`. Ignored under the
|
|
60
|
+
// default `judge: 'text'`. One ref ⇒ single judge; many ⇒ ensemble.
|
|
61
|
+
// Deep-frozen: the inner ref is frozen too, so a consumer can't mutate the
|
|
62
|
+
// shared default (every config without an override aliases this array).
|
|
63
|
+
visionModels: Object.freeze([Object.freeze({ provider: 'openai', model: 'gpt-5.4' })]),
|
|
64
|
+
embedder: 'deterministic',
|
|
65
|
+
budget: DEFAULT_ENGINE_BUDGET,
|
|
66
|
+
reference: undefined,
|
|
67
|
+
model: undefined,
|
|
68
|
+
});
|
|
69
|
+
/**
|
|
70
|
+
* Clamp a numeric override to a minimum, falling back to `fallback` when the
|
|
71
|
+
* override is absent or non-finite (NaN/Infinity). Counts are rounded to the
|
|
72
|
+
* nearest integer first so a fractional override (`k: 2.6`) resolves sensibly.
|
|
73
|
+
*/
|
|
74
|
+
function clampMin(value, min, fallback) {
|
|
75
|
+
if (value === undefined || !Number.isFinite(value))
|
|
76
|
+
return fallback;
|
|
77
|
+
return Math.max(min, Math.round(value));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Resolve operator overrides onto the frozen defaults: a field-by-field merge
|
|
81
|
+
* with the count knobs clamped to their minimums. Always returns a fresh,
|
|
82
|
+
* mutable config (the frozen defaults are never handed out directly), so callers
|
|
83
|
+
* that attach a resolved `reference` later don't mutate the shared default.
|
|
84
|
+
*/
|
|
85
|
+
export function resolveReferenceConfig(partial = {}) {
|
|
86
|
+
const base = DEFAULT_REFERENCE_CONFIG;
|
|
87
|
+
const b = partial.budget ?? {};
|
|
88
|
+
const budget = {
|
|
89
|
+
maxGenerationCalls: clampMin(b.maxGenerationCalls, 1, base.budget.maxGenerationCalls),
|
|
90
|
+
maxJudgeCalls: clampMin(b.maxJudgeCalls, 1, base.budget.maxJudgeCalls),
|
|
91
|
+
judgeReps: clampMin(b.judgeReps, 1, base.budget.judgeReps),
|
|
92
|
+
concurrency: clampMin(b.concurrency, 1, base.budget.concurrency),
|
|
93
|
+
screenThenValidate: b.screenThenValidate ?? base.budget.screenThenValidate,
|
|
94
|
+
};
|
|
95
|
+
return {
|
|
96
|
+
corpusDir: partial.corpusDir ?? base.corpusDir,
|
|
97
|
+
artifactDir: partial.artifactDir ?? base.artifactDir,
|
|
98
|
+
k: clampMin(partial.k, 1, base.k),
|
|
99
|
+
directionCount: clampMin(partial.directionCount, 1, base.directionCount),
|
|
100
|
+
judge: partial.judge ?? base.judge,
|
|
101
|
+
visionModels: partial.visionModels ?? base.visionModels,
|
|
102
|
+
embedder: partial.embedder ?? base.embedder,
|
|
103
|
+
budget,
|
|
104
|
+
reference: partial.reference ?? base.reference,
|
|
105
|
+
model: partial.model ?? base.model,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/design/audit/reference/config.ts"],"names":[],"mappings":"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"}
|