@tangle-network/browser-agent-driver 0.33.3 → 0.35.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/browser-launch.d.ts +6 -0
- package/dist/browser-launch.d.ts.map +1 -1
- package/dist/browser-launch.js +3 -0
- package/dist/browser-launch.js.map +1 -1
- 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 +740 -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 +12 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +20 -2
- 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 +273 -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 +100 -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 +220 -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 +172 -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 +123 -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 +27 -1
- 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 +23 -5
|
@@ -0,0 +1,220 @@
|
|
|
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 isStringArray = (v) => Array.isArray(v) && v.every(isString);
|
|
21
|
+
/**
|
|
22
|
+
* Coerce a numeric value, tolerating the numeric STRINGS many models emit
|
|
23
|
+
* (`"1.25"`, `"16px"`). Same value, just typed — no fabrication. Returns
|
|
24
|
+
* undefined when there's no leading finite number to read.
|
|
25
|
+
*/
|
|
26
|
+
const coerceNumber = (v) => {
|
|
27
|
+
if (typeof v === 'number')
|
|
28
|
+
return Number.isFinite(v) ? v : undefined;
|
|
29
|
+
if (typeof v === 'string') {
|
|
30
|
+
const n = Number.parseFloat(v.trim());
|
|
31
|
+
return Number.isFinite(n) ? n : undefined;
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
};
|
|
35
|
+
/** Coerce an array of numbers, accepting numeric strings per element.
|
|
36
|
+
* Returns undefined if the input isn't an array or any element won't coerce. */
|
|
37
|
+
const coerceNumberArray = (v) => {
|
|
38
|
+
if (!Array.isArray(v))
|
|
39
|
+
return undefined;
|
|
40
|
+
const out = [];
|
|
41
|
+
for (const x of v) {
|
|
42
|
+
const n = coerceNumber(x);
|
|
43
|
+
if (n === undefined)
|
|
44
|
+
return undefined;
|
|
45
|
+
out.push(n);
|
|
46
|
+
}
|
|
47
|
+
return out;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Pull the outermost JSON object out of a model response. Tolerates a leading
|
|
51
|
+
* markdown fence and any prose preamble/suffix the gateway wraps around the
|
|
52
|
+
* object. Distinguishes three cases so the caller can report each truthfully:
|
|
53
|
+
* - `{ json }` — an object literal was found;
|
|
54
|
+
* - `{ truncated }` — an object was OPENED (`{`) but never closed (`}`), i.e.
|
|
55
|
+
* the model ran out of output budget mid-object;
|
|
56
|
+
* - `null` — no object literal at all (empty or non-JSON output).
|
|
57
|
+
*/
|
|
58
|
+
function extractJsonObject(raw) {
|
|
59
|
+
let text = raw.trim();
|
|
60
|
+
if (text.startsWith('```')) {
|
|
61
|
+
text = text.replace(/^```(?:json)?\s*/i, '').replace(/```\s*$/i, '').trim();
|
|
62
|
+
}
|
|
63
|
+
const first = text.indexOf('{');
|
|
64
|
+
if (first < 0)
|
|
65
|
+
return null;
|
|
66
|
+
const last = text.lastIndexOf('}');
|
|
67
|
+
if (last <= first)
|
|
68
|
+
return { truncated: true };
|
|
69
|
+
return { json: text.slice(first, last + 1) };
|
|
70
|
+
}
|
|
71
|
+
function parseTypeSystem(raw) {
|
|
72
|
+
if (!isRecord(raw))
|
|
73
|
+
return 'typeSystem must be an object';
|
|
74
|
+
if (!isStringArray(raw.families) || raw.families.length === 0)
|
|
75
|
+
return 'typeSystem.families must be a non-empty string[]';
|
|
76
|
+
const scalePx = coerceNumberArray(raw.scalePx);
|
|
77
|
+
if (!scalePx || scalePx.length === 0)
|
|
78
|
+
return 'typeSystem.scalePx must be a non-empty number[]';
|
|
79
|
+
const ratio = coerceNumber(raw.ratio);
|
|
80
|
+
if (ratio === undefined)
|
|
81
|
+
return 'typeSystem.ratio must be a number';
|
|
82
|
+
if (!isString(raw.rationale))
|
|
83
|
+
return 'typeSystem.rationale must be a string';
|
|
84
|
+
return { families: raw.families, scalePx, ratio, rationale: raw.rationale };
|
|
85
|
+
}
|
|
86
|
+
function parseColorSystem(raw) {
|
|
87
|
+
if (!isRecord(raw))
|
|
88
|
+
return 'colorSystem must be an object';
|
|
89
|
+
if (!isString(raw.primary))
|
|
90
|
+
return 'colorSystem.primary must be a string';
|
|
91
|
+
if (!isStringArray(raw.neutrals))
|
|
92
|
+
return 'colorSystem.neutrals must be a string[]';
|
|
93
|
+
if (!isString(raw.background))
|
|
94
|
+
return 'colorSystem.background must be a string';
|
|
95
|
+
if (!isString(raw.rationale))
|
|
96
|
+
return 'colorSystem.rationale must be a string';
|
|
97
|
+
if (raw.accent !== undefined && !isString(raw.accent))
|
|
98
|
+
return 'colorSystem.accent must be a string when present';
|
|
99
|
+
const spec = {
|
|
100
|
+
primary: raw.primary,
|
|
101
|
+
neutrals: raw.neutrals,
|
|
102
|
+
background: raw.background,
|
|
103
|
+
rationale: raw.rationale,
|
|
104
|
+
};
|
|
105
|
+
if (isString(raw.accent))
|
|
106
|
+
spec.accent = raw.accent;
|
|
107
|
+
return spec;
|
|
108
|
+
}
|
|
109
|
+
function parseMotionSpec(raw) {
|
|
110
|
+
if (!isRecord(raw))
|
|
111
|
+
return 'motionSpec must be an object';
|
|
112
|
+
const durationsMs = coerceNumberArray(raw.durationsMs);
|
|
113
|
+
if (!durationsMs)
|
|
114
|
+
return 'motionSpec.durationsMs must be a number[]';
|
|
115
|
+
if (!isStringArray(raw.easings))
|
|
116
|
+
return 'motionSpec.easings must be a string[]';
|
|
117
|
+
if (!isStringArray(raw.cues))
|
|
118
|
+
return 'motionSpec.cues must be a string[]';
|
|
119
|
+
return { durationsMs, easings: raw.easings, cues: raw.cues };
|
|
120
|
+
}
|
|
121
|
+
function parseCopy(raw) {
|
|
122
|
+
if (!Array.isArray(raw))
|
|
123
|
+
return 'copy must be an array';
|
|
124
|
+
const out = [];
|
|
125
|
+
for (const item of raw) {
|
|
126
|
+
if (!isRecord(item))
|
|
127
|
+
return 'each copy entry must be an object';
|
|
128
|
+
if (!isString(item.location))
|
|
129
|
+
return 'copy[].location must be a string';
|
|
130
|
+
if (!isString(item.after))
|
|
131
|
+
return 'copy[].after must be a string';
|
|
132
|
+
if (item.before !== undefined && !isString(item.before))
|
|
133
|
+
return 'copy[].before must be a string when present';
|
|
134
|
+
const rev = { location: item.location, after: item.after };
|
|
135
|
+
if (isString(item.before))
|
|
136
|
+
rev.before = item.before;
|
|
137
|
+
out.push(rev);
|
|
138
|
+
}
|
|
139
|
+
return out;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Ids in `d.groundedInExemplarIds` that are NOT in `allowedIds` (the retrieved
|
|
143
|
+
* set). Empty ⇒ the direction is grounded only in real, retrieved exemplars.
|
|
144
|
+
*/
|
|
145
|
+
export function validateGrounding(d, allowedIds) {
|
|
146
|
+
const allowed = new Set(allowedIds);
|
|
147
|
+
return d.groundedInExemplarIds.filter((id) => !allowed.has(id));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Parse one model response into a `RedesignDirection`. Fail-closed: any defect
|
|
151
|
+
* returns a `DirectionParseError`, never a partial or invented direction.
|
|
152
|
+
*/
|
|
153
|
+
export function parseDirection(raw, allowedIds) {
|
|
154
|
+
const extracted = extractJsonObject(raw);
|
|
155
|
+
if (extracted === null) {
|
|
156
|
+
return fail(raw.trim().length === 0 ? 'model returned empty output' : 'no JSON object found in model output');
|
|
157
|
+
}
|
|
158
|
+
if ('truncated' in extracted) {
|
|
159
|
+
return fail('model output truncated — incomplete JSON object (raise the generation token budget for reasoning models)');
|
|
160
|
+
}
|
|
161
|
+
const json = extracted.json;
|
|
162
|
+
let parsed;
|
|
163
|
+
try {
|
|
164
|
+
parsed = JSON.parse(json);
|
|
165
|
+
}
|
|
166
|
+
catch (e) {
|
|
167
|
+
return fail(`invalid JSON: ${e instanceof Error ? e.message : String(e)}`);
|
|
168
|
+
}
|
|
169
|
+
if (!isRecord(parsed))
|
|
170
|
+
return fail('parsed value is not an object');
|
|
171
|
+
if (!isString(parsed.id))
|
|
172
|
+
return fail('missing or invalid field: id');
|
|
173
|
+
if (!isString(parsed.name))
|
|
174
|
+
return fail('missing or invalid field: name');
|
|
175
|
+
if (!isString(parsed.rationale))
|
|
176
|
+
return fail('missing or invalid field: rationale');
|
|
177
|
+
if (!isString(parsed.asciiLayout))
|
|
178
|
+
return fail('missing or invalid field: asciiLayout');
|
|
179
|
+
if (!isStringArray(parsed.hierarchy) || parsed.hierarchy.length === 0) {
|
|
180
|
+
return fail('hierarchy must be a non-empty string[]');
|
|
181
|
+
}
|
|
182
|
+
if (!isStringArray(parsed.groundedInExemplarIds)) {
|
|
183
|
+
return fail('missing or invalid field: groundedInExemplarIds');
|
|
184
|
+
}
|
|
185
|
+
const typeSystem = parseTypeSystem(parsed.typeSystem);
|
|
186
|
+
if (typeof typeSystem === 'string')
|
|
187
|
+
return fail(typeSystem);
|
|
188
|
+
const colorSystem = parseColorSystem(parsed.colorSystem);
|
|
189
|
+
if (typeof colorSystem === 'string')
|
|
190
|
+
return fail(colorSystem);
|
|
191
|
+
const motionSpec = parseMotionSpec(parsed.motionSpec);
|
|
192
|
+
if (typeof motionSpec === 'string')
|
|
193
|
+
return fail(motionSpec);
|
|
194
|
+
const copy = parseCopy(parsed.copy);
|
|
195
|
+
if (typeof copy === 'string')
|
|
196
|
+
return fail(copy);
|
|
197
|
+
// Assemble field-by-field — never spread `parsed` — so no unexpected key
|
|
198
|
+
// (e.g. `__proto__`) survives into the result.
|
|
199
|
+
const direction = {
|
|
200
|
+
id: parsed.id,
|
|
201
|
+
name: parsed.name,
|
|
202
|
+
rationale: parsed.rationale,
|
|
203
|
+
asciiLayout: parsed.asciiLayout,
|
|
204
|
+
typeSystem,
|
|
205
|
+
colorSystem,
|
|
206
|
+
motionSpec,
|
|
207
|
+
hierarchy: parsed.hierarchy,
|
|
208
|
+
copy,
|
|
209
|
+
groundedInExemplarIds: parsed.groundedInExemplarIds,
|
|
210
|
+
};
|
|
211
|
+
if (direction.groundedInExemplarIds.length === 0) {
|
|
212
|
+
return fail('direction is ungrounded (empty groundedInExemplarIds)');
|
|
213
|
+
}
|
|
214
|
+
const offenders = validateGrounding(direction, allowedIds);
|
|
215
|
+
if (offenders.length > 0) {
|
|
216
|
+
return fail(`grounded in unknown exemplar ids: ${offenders.join(', ')}`);
|
|
217
|
+
}
|
|
218
|
+
return { ok: true, direction };
|
|
219
|
+
}
|
|
220
|
+
//# 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;AAsJD;;;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,CAsBlC"}
|
|
@@ -0,0 +1,172 @@
|
|
|
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 senior product designer improving a REAL page so its actual users',
|
|
31
|
+
'accomplish their tasks faster and more easily. A named world-class reference',
|
|
32
|
+
'is provided ONLY as a source of visual craft — type, colour, spacing rhythm,',
|
|
33
|
+
'and motion. It is NOT a template: never copy its structure, layout archetype,',
|
|
34
|
+
'or content into the page. Judge your own work by the page\'s JOB, not by how',
|
|
35
|
+
'decorative it looks.',
|
|
36
|
+
'',
|
|
37
|
+
'Hard rules, in PRIORITY ORDER (a lower rule never justifies breaking a higher one):',
|
|
38
|
+
'- TASK FIRST. Design for the page\'s primary users and the job in its INTENT',
|
|
39
|
+
' below. Every change must make that job easier. Aesthetics serve the task —',
|
|
40
|
+
' never sacrifice the task to look more like the reference.',
|
|
41
|
+
'- PRESERVE FUNCTIONAL AFFORDANCES. Keep every way users find and move through',
|
|
42
|
+
' the page: navigation, table of contents, menus, breadcrumbs, search,',
|
|
43
|
+
' filters, pagination, tabs. Offer equivalent-or-better wayfinding — NEVER',
|
|
44
|
+
' delete navigation to look cleaner.',
|
|
45
|
+
'- PRESERVE DENSITY WHERE IT IS THE VALUE. For information-dense or reference',
|
|
46
|
+
' pages (docs, dashboards, status/console, data tables, lists, feeds,',
|
|
47
|
+
' aggregators) density and scannability ARE the craft. Keep at least as many',
|
|
48
|
+
' items / rows / sections visible as the original; do not trade content for',
|
|
49
|
+
' whitespace, hero banners, or marketing-style cards. The reference informs',
|
|
50
|
+
' polish WITHIN that density, never a reduction of it.',
|
|
51
|
+
'- RIGHT-SIZE THE INTERVENTION. If the page already serves its job well, the',
|
|
52
|
+
' best redesign is surgical: refine type, colour, spacing, and hierarchy while',
|
|
53
|
+
' keeping the structure and affordances. NEVER turn one kind of page into',
|
|
54
|
+
' another — a docs page or a dashboard must not become a landing page.',
|
|
55
|
+
'- Ground the VISUAL CRAFT in the named REFERENCE EXEMPLAR and echo its id in',
|
|
56
|
+
' `groundedInExemplarIds`. NEVER invent, guess, or cite an exemplar id you were',
|
|
57
|
+
' not given. Borrow its craft, never its content or structure.',
|
|
58
|
+
'- Use only the page\'s OWN content. NEVER fabricate content it does not have —',
|
|
59
|
+
' no invented metrics, counts, dates, statuses, activity feeds, or sections.',
|
|
60
|
+
' You are given the page\'s design DNA + intent, NOT its full text or data, so',
|
|
61
|
+
' do not assert specific values (numbers, percentages, dates, names) you were',
|
|
62
|
+
' not given; refer to such content by its role. If the page is genuinely',
|
|
63
|
+
' sparse, keep the redesign proportionally restrained rather than manufacturing',
|
|
64
|
+
' content to fill a denser layout.',
|
|
65
|
+
'- Specify concrete DESIGN values: hex colours, px type sizes, ms durations.',
|
|
66
|
+
' Revised copy may restyle the page\'s existing wording but must never invent',
|
|
67
|
+
' facts or use placeholders like "TODO" or "lorem ipsum".',
|
|
68
|
+
'- The ASCII layout must be a real box-drawing diagram of the proposed structure,',
|
|
69
|
+
' top to bottom, and must show the preserved navigation / affordances.',
|
|
70
|
+
'- Preserve or improve the page\'s measured accessibility (contrast, a11y); never',
|
|
71
|
+
' propose a change that would regress it.',
|
|
72
|
+
'- Output STRICT JSON only: a single object matching the OUTPUT CONTRACT, with',
|
|
73
|
+
' no surrounding prose and no markdown code fences.',
|
|
74
|
+
].join('\n');
|
|
75
|
+
function renderPageBlock(ctx, maxRefChars) {
|
|
76
|
+
const c = ctx.classification;
|
|
77
|
+
return [
|
|
78
|
+
'PAGE UNDER REDESIGN',
|
|
79
|
+
`url: ${ctx.url}`,
|
|
80
|
+
`type: ${c.type} domain: ${c.domain} maturity: ${c.maturity}`,
|
|
81
|
+
`intent: ${c.intent}`,
|
|
82
|
+
'current design DNA:',
|
|
83
|
+
summarizeDNA(ctx.dna, { maxChars: maxRefChars }),
|
|
84
|
+
].join('\n');
|
|
85
|
+
}
|
|
86
|
+
function renderExemplarBlock(hit, maxRefChars) {
|
|
87
|
+
const e = hit.exemplar;
|
|
88
|
+
const reasons = hit.reasons.length > 0 ? hit.reasons.join('; ') : 'nearest aesthetic neighbour';
|
|
89
|
+
return [
|
|
90
|
+
'REFERENCE EXEMPLAR (borrow its VISUAL CRAFT only — type, colour, spacing,',
|
|
91
|
+
'motion. Do NOT copy its structure, information architecture, or content.)',
|
|
92
|
+
`id: ${e.id} source: ${e.source} type: ${e.pageType}`,
|
|
93
|
+
`url: ${e.url}`,
|
|
94
|
+
`job-to-be-done: ${e.jobToBeDone}`,
|
|
95
|
+
`why it was retrieved: ${reasons}`,
|
|
96
|
+
'its design DNA:',
|
|
97
|
+
summarizeDNA(e.dna, { maxChars: maxRefChars }),
|
|
98
|
+
].join('\n');
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The per-page FUNCTIONAL CONTRACT — what the redesign must preserve, derived
|
|
102
|
+
* from the page's own measured DNA (not a hardcoded page-type table). Navigation
|
|
103
|
+
* affordances and information density are user value on functional pages; the
|
|
104
|
+
* generator must keep them. Density gating is data-driven off the measured
|
|
105
|
+
* `layout.density`, so a genuinely sparse page is never forced to stay dense.
|
|
106
|
+
*/
|
|
107
|
+
function renderFunctionalContract(ctx) {
|
|
108
|
+
const dna = ctx.dna;
|
|
109
|
+
const nav = dna.components?.nav ?? 0;
|
|
110
|
+
const density = dna.layout?.density ?? 'balanced';
|
|
111
|
+
const archetype = dna.layout?.archetype ?? 'unknown';
|
|
112
|
+
const lines = [
|
|
113
|
+
'FUNCTIONAL CONTRACT (preserve — the redesign must not regress these):',
|
|
114
|
+
`page type: ${ctx.classification.type}; measured layout density: ${density}; archetype: ${archetype}; navigation affordances detected: ${nav}.`,
|
|
115
|
+
];
|
|
116
|
+
if (nav > 0)
|
|
117
|
+
lines.push(`- Keep all ${nav} navigation / wayfinding affordance(s) (menus, table of contents, breadcrumbs, search, tabs). Provide equivalent-or-better navigation; do not drop any.`);
|
|
118
|
+
if (density === 'dense')
|
|
119
|
+
lines.push('- This page is DENSE: its information density is the value. Keep at least as many items / rows / sections visible as today. Do not trade content for whitespace or hero sections.');
|
|
120
|
+
lines.push('- Improve craft within this structure. Do not convert this page into a different kind of page.');
|
|
121
|
+
return lines.join('\n');
|
|
122
|
+
}
|
|
123
|
+
function renderConstraints(ctx) {
|
|
124
|
+
const m = ctx.measurements;
|
|
125
|
+
if (!m)
|
|
126
|
+
return null;
|
|
127
|
+
const aa = m.contrast.summary.aaPassRate;
|
|
128
|
+
const blocking = m.a11y.violations.filter((v) => v.impact === 'critical' || v.impact === 'serious').length;
|
|
129
|
+
return [
|
|
130
|
+
'GROUND-TRUTH CONSTRAINTS (deterministic — do not regress)',
|
|
131
|
+
`current AA contrast pass rate: ${aa}; blocking a11y issues: ${blocking}.`,
|
|
132
|
+
'The redesign must keep contrast at or above this rate and must not introduce',
|
|
133
|
+
'new blocking accessibility issues.',
|
|
134
|
+
].join('\n');
|
|
135
|
+
}
|
|
136
|
+
const OUTPUT_CONTRACT = [
|
|
137
|
+
'OUTPUT CONTRACT — return STRICT JSON matching this exact shape, nothing else:',
|
|
138
|
+
'{',
|
|
139
|
+
' "id": "short-slug",',
|
|
140
|
+
' "name": "evocative direction name",',
|
|
141
|
+
' "rationale": "why this direction serves the page\'s job-to-be-done",',
|
|
142
|
+
' "asciiLayout": "ASCII / box-drawing diagram of the proposed page structure",',
|
|
143
|
+
' "typeSystem": { "families": ["Font A"], "scalePx": [14, 18, 24, 32], "ratio": 1.25, "rationale": "..." },',
|
|
144
|
+
' "colorSystem": { "primary": "#2563eb", "accent": "#f59e0b", "neutrals": ["#111827", "#6b7280"], "background": "#ffffff", "rationale": "..." },',
|
|
145
|
+
' "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"] },',
|
|
146
|
+
' "hierarchy": ["most prominent element", "...", "least prominent element"],',
|
|
147
|
+
' "copy": [{ "location": "h1", "before": "current copy", "after": "revised copy" }],',
|
|
148
|
+
' "groundedInExemplarIds": ["<the reference exemplar id above>"]',
|
|
149
|
+
'}',
|
|
150
|
+
].join('\n');
|
|
151
|
+
/**
|
|
152
|
+
* Build the `{ system, user }` pair for a single reference-grounded redesign
|
|
153
|
+
* direction. Deterministic: identical inputs always yield identical strings.
|
|
154
|
+
*/
|
|
155
|
+
export function buildDirectionPrompt(ctx, exemplar, opts = {}) {
|
|
156
|
+
const maxRefChars = opts.maxRefChars ?? DEFAULT_MAX_REF_CHARS;
|
|
157
|
+
const sections = [
|
|
158
|
+
renderPageBlock(ctx, maxRefChars),
|
|
159
|
+
renderFunctionalContract(ctx),
|
|
160
|
+
renderExemplarBlock(exemplar, maxRefChars),
|
|
161
|
+
];
|
|
162
|
+
const constraints = renderConstraints(ctx);
|
|
163
|
+
if (constraints)
|
|
164
|
+
sections.push(constraints);
|
|
165
|
+
if (ctx.rubricBody && ctx.rubricBody.trim().length > 0) {
|
|
166
|
+
sections.push(['SCORING CRITERIA (optimise the redesign against these)', truncate(ctx.rubricBody.trim(), MAX_RUBRIC_CHARS)].join('\n'));
|
|
167
|
+
}
|
|
168
|
+
sections.push(OUTPUT_CONTRACT);
|
|
169
|
+
sections.push(`Produce exactly ONE redesign direction grounded in exemplar "${exemplar.exemplar.id}". Return ONLY the JSON object.`);
|
|
170
|
+
return { system: GENERATION_SYSTEM_PROMPT, user: sections.join('\n\n') };
|
|
171
|
+
}
|
|
172
|
+
//# 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"}
|