@tangle-network/browser-agent-driver 0.33.3 → 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 +6 -2
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snapshot budgeting: dedup repeated element runs, cap total size while
|
|
3
|
+
* preserving interactive + content lines, and compact the first-turn snapshot.
|
|
4
|
+
*
|
|
5
|
+
* Pure functions over snapshot text — no Brain state.
|
|
6
|
+
*/
|
|
7
|
+
import { AriaSnapshotHelper } from '../drivers/snapshot.js';
|
|
8
|
+
/**
|
|
9
|
+
* Collapse consecutive runs of similar elements (same indent + role, names
|
|
10
|
+
* differing only by a trailing number/short suffix) into a single representative
|
|
11
|
+
* line with a count. Reduces token cost on pages with long pagination, nav
|
|
12
|
+
* lists, or repeated product cards.
|
|
13
|
+
*
|
|
14
|
+
* Skips dialog/alertdialog (agent must see each one) and groups < 3 items.
|
|
15
|
+
*/
|
|
16
|
+
function deduplicateSnapshot(snapshot) {
|
|
17
|
+
const lines = snapshot.split('\n');
|
|
18
|
+
const out = [];
|
|
19
|
+
// Extract (indent, role) from a snapshot line. Returns null for non-element lines.
|
|
20
|
+
const parseLine = (line) => {
|
|
21
|
+
const m = line.match(/^(\s*-\s+)(\w+)\s+"([^"]*)"\s*\[ref=(\w+)\]/);
|
|
22
|
+
if (!m)
|
|
23
|
+
return null;
|
|
24
|
+
return { indent: m[1], role: m[2], name: m[3], ref: m[4], full: line };
|
|
25
|
+
};
|
|
26
|
+
// Strip trailing numbers/ordinals to get a "name stem" for grouping.
|
|
27
|
+
// "Page 1" and "Page 20" → "Page ", "Item #3" and "Item #42" → "Item #"
|
|
28
|
+
const nameStem = (name) => name.replace(/\d+/g, '#');
|
|
29
|
+
// Structural fingerprint for a block of lines (element + its children).
|
|
30
|
+
// Used for card-level dedup: two hotel cards have different names but the
|
|
31
|
+
// same structure (listitem > link + img + text + text + button).
|
|
32
|
+
const structuralFingerprint = (startIdx, baseIndent) => {
|
|
33
|
+
const roles = [];
|
|
34
|
+
let j = startIdx;
|
|
35
|
+
while (j < lines.length) {
|
|
36
|
+
const p = parseLine(lines[j]);
|
|
37
|
+
if (!p) {
|
|
38
|
+
j++;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
// Stop when we hit an element at the same or shallower indent (sibling or parent)
|
|
42
|
+
if (j > startIdx && p.indent.length <= baseIndent.length)
|
|
43
|
+
break;
|
|
44
|
+
roles.push(p.role);
|
|
45
|
+
j++;
|
|
46
|
+
}
|
|
47
|
+
return { fp: roles.join(','), endIdx: j };
|
|
48
|
+
};
|
|
49
|
+
let i = 0;
|
|
50
|
+
while (i < lines.length) {
|
|
51
|
+
const parsed = parseLine(lines[i]);
|
|
52
|
+
// Non-element line or dialog/alertdialog — emit as-is
|
|
53
|
+
if (!parsed || /\b(?:dialog|alertdialog)\b/i.test(parsed.role)) {
|
|
54
|
+
out.push(lines[i]);
|
|
55
|
+
i++;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
// Try block-level dedup first: look for consecutive sibling blocks
|
|
59
|
+
// with the same structural fingerprint (same child-role sequence).
|
|
60
|
+
// This catches card patterns like Booking hotel results, Allrecipes cards.
|
|
61
|
+
if (/\b(?:listitem|article|group|region)\b/i.test(parsed.role)) {
|
|
62
|
+
const { fp: firstFp, endIdx: firstEnd } = structuralFingerprint(i, parsed.indent);
|
|
63
|
+
if (firstEnd > i + 2 && firstFp.includes(',')) { // non-trivial block
|
|
64
|
+
const blocks = [
|
|
65
|
+
{ start: i, end: firstEnd, firstLine: lines[i] },
|
|
66
|
+
];
|
|
67
|
+
let scanIdx = firstEnd;
|
|
68
|
+
while (scanIdx < lines.length) {
|
|
69
|
+
const nextParsed = parseLine(lines[scanIdx]);
|
|
70
|
+
if (!nextParsed || nextParsed.indent !== parsed.indent || nextParsed.role !== parsed.role)
|
|
71
|
+
break;
|
|
72
|
+
const { fp: nextFp, endIdx: nextEnd } = structuralFingerprint(scanIdx, nextParsed.indent);
|
|
73
|
+
if (nextFp !== firstFp)
|
|
74
|
+
break;
|
|
75
|
+
blocks.push({ start: scanIdx, end: nextEnd, firstLine: lines[scanIdx] });
|
|
76
|
+
scanIdx = nextEnd;
|
|
77
|
+
}
|
|
78
|
+
if (blocks.length >= 3) {
|
|
79
|
+
// Emit first 2 blocks fully, summarize the rest
|
|
80
|
+
for (let b = 0; b < Math.min(2, blocks.length); b++) {
|
|
81
|
+
for (let k = blocks[b].start; k < blocks[b].end; k++) {
|
|
82
|
+
out.push(lines[k]);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const remaining = blocks.length - 2;
|
|
86
|
+
out.push(`${parsed.indent}... [${remaining} more similar ${parsed.role} blocks with same structure]`);
|
|
87
|
+
i = blocks[blocks.length - 1].end;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Line-level dedup: consecutive runs of same (indent, role, name stem)
|
|
93
|
+
const group = [parsed];
|
|
94
|
+
const stem = nameStem(parsed.name);
|
|
95
|
+
let j = i + 1;
|
|
96
|
+
while (j < lines.length) {
|
|
97
|
+
const next = parseLine(lines[j]);
|
|
98
|
+
if (!next ||
|
|
99
|
+
next.indent !== parsed.indent ||
|
|
100
|
+
next.role !== parsed.role ||
|
|
101
|
+
nameStem(next.name) !== stem)
|
|
102
|
+
break;
|
|
103
|
+
group.push(next);
|
|
104
|
+
j++;
|
|
105
|
+
}
|
|
106
|
+
if (group.length < 3) {
|
|
107
|
+
// Not enough to dedup — emit originals
|
|
108
|
+
for (const g of group)
|
|
109
|
+
out.push(g.full);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// Emit first element with a summary of the rest
|
|
113
|
+
const last = group[group.length - 1];
|
|
114
|
+
out.push(`${parsed.full} (+${group.length - 1} similar: "${group[1].name}"\u2026"${last.name}")`);
|
|
115
|
+
}
|
|
116
|
+
i = j;
|
|
117
|
+
}
|
|
118
|
+
return out.join('\n');
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Cap snapshot size to control token cost on large pages.
|
|
122
|
+
* Keeps the full snapshot when it fits within budget; otherwise preserves:
|
|
123
|
+
* 1. Interactive elements with refs (buttons, inputs, links — for action targets)
|
|
124
|
+
* 2. Content lines: term/definition/code/pre/paragraph (for extraction tasks
|
|
125
|
+
* like MDN, Python docs, W3C spec where the value the agent needs lives in
|
|
126
|
+
* a `<dl>/<code>/<pre>` block, not in an interactive element)
|
|
127
|
+
*
|
|
128
|
+
* New-page callers use a larger default budget; same-page callers can pass a
|
|
129
|
+
* tighter budget after the model has already seen the full snapshot once.
|
|
130
|
+
*/
|
|
131
|
+
export function budgetSnapshot(snapshot, maxChars = 24_000) {
|
|
132
|
+
// Skip dedup on small snapshots — not enough repetition to justify the O(n) scan
|
|
133
|
+
if (snapshot.length > 6_000) {
|
|
134
|
+
snapshot = deduplicateSnapshot(snapshot);
|
|
135
|
+
}
|
|
136
|
+
if (snapshot.length <= maxChars)
|
|
137
|
+
return snapshot;
|
|
138
|
+
// First pass: separate keep-set (interactive + content lines) from decorative.
|
|
139
|
+
// Content roles (term, definition, code, pre, paragraph) carry text the LLM
|
|
140
|
+
// needs for extraction tasks. They have no [ref=] but the text is the data.
|
|
141
|
+
const lines = snapshot.split('\n');
|
|
142
|
+
const interactive = [];
|
|
143
|
+
const content = [];
|
|
144
|
+
const decorative = [];
|
|
145
|
+
for (const line of lines) {
|
|
146
|
+
if (/\b(?:button|link|textbox|combobox|menuitem|checkbox|radio|select|heading|dialog|alertdialog)\b/i.test(line) && /\[ref=/.test(line)) {
|
|
147
|
+
interactive.push(line);
|
|
148
|
+
}
|
|
149
|
+
else if (/^\s*-\s+(?:term|definition|code|pre|paragraph)\b/i.test(line)) {
|
|
150
|
+
content.push(line);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
decorative.push(line);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// If interactive + content fits, use both with a truncation note
|
|
157
|
+
const keepSet = interactive.concat(content);
|
|
158
|
+
const keepText = keepSet.join('\n');
|
|
159
|
+
if (keepText.length <= maxChars) {
|
|
160
|
+
return keepText + `\n... [${decorative.length} decorative elements omitted for brevity]`;
|
|
161
|
+
}
|
|
162
|
+
// Second pass: when interactive + content still exceed budget, prioritize:
|
|
163
|
+
// 1. inputs (searchbox/textbox/combobox) — essential for form tasks
|
|
164
|
+
// 2. headings + dialogs — structural navigation
|
|
165
|
+
// 3. content lines (term/definition/code/pre) — extraction data
|
|
166
|
+
// 4. bulk links/buttons — main content
|
|
167
|
+
const priority = [];
|
|
168
|
+
const bulk = [];
|
|
169
|
+
for (const line of interactive) {
|
|
170
|
+
if (/\b(?:searchbox|textbox|combobox|heading|dialog|alertdialog)\b/i.test(line)) {
|
|
171
|
+
priority.push(line);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
bulk.push(line);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Content lines come right after priority interactive (they're the extraction
|
|
178
|
+
// data) and before bulk links/buttons.
|
|
179
|
+
const priorityWithContent = priority.concat(content);
|
|
180
|
+
const priorityText = priorityWithContent.join('\n');
|
|
181
|
+
const remaining = maxChars - priorityText.length - 80; // reserve space for note
|
|
182
|
+
if (remaining > 0) {
|
|
183
|
+
const bulkText = bulk.join('\n');
|
|
184
|
+
const trimmedBulk = bulkText.slice(0, remaining);
|
|
185
|
+
const bulkKept = trimmedBulk.lastIndexOf('\n') > 0
|
|
186
|
+
? trimmedBulk.slice(0, trimmedBulk.lastIndexOf('\n'))
|
|
187
|
+
: trimmedBulk;
|
|
188
|
+
return priorityText + '\n' + bulkKept +
|
|
189
|
+
`\n... [${interactive.length - priority.length - bulkKept.split('\n').length} interactive + ${decorative.length} decorative elements omitted]`;
|
|
190
|
+
}
|
|
191
|
+
// Hard cap: take the first maxChars of the full snapshot
|
|
192
|
+
return snapshot.slice(0, maxChars) + '\n... [snapshot truncated — large page]';
|
|
193
|
+
}
|
|
194
|
+
export function compactFirstTurnSnapshot(snapshot) {
|
|
195
|
+
const compact = AriaSnapshotHelper.formatCompact(snapshot);
|
|
196
|
+
const basis = compact.length > 0 ? compact : snapshot;
|
|
197
|
+
const maxChars = 4000;
|
|
198
|
+
if (basis.length <= maxChars)
|
|
199
|
+
return basis;
|
|
200
|
+
return `${basis.slice(0, maxChars)}\n... [snapshot truncated for first-turn fast path]`;
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=snapshot-budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-budget.js","sourceRoot":"","sources":["../../src/brain/snapshot-budget.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic system-prompt assembly for the Brain decision engine: conditional
|
|
3
|
+
* rule-group injection (search / data-extraction / heavy-page), user + domain
|
|
4
|
+
* + macro rule appends, and the Anthropic cache_control split used by
|
|
5
|
+
* `decide()`.
|
|
6
|
+
*
|
|
7
|
+
* Extracted from brain/index.ts via the delegate + host-interface pattern.
|
|
8
|
+
* `buildSystemForDecide` keeps a thin delegator on Brain; the other three
|
|
9
|
+
* helpers moved wholesale. Bodies are verbatim — same ordering, thresholds,
|
|
10
|
+
* and byte-stable cached-prefix placement. State is read through
|
|
11
|
+
* {@link BrainSystemPromptHost}, which Brain `implements`.
|
|
12
|
+
*/
|
|
13
|
+
import type { SystemModelMessage } from 'ai';
|
|
14
|
+
import type { PageState } from '../types.js';
|
|
15
|
+
/**
|
|
16
|
+
* The slice of Brain state the system-prompt assembly reads. Brain declares
|
|
17
|
+
* `implements BrainSystemPromptHost`, so tsc proves this surface is complete.
|
|
18
|
+
* All members are public on Brain by construction.
|
|
19
|
+
*/
|
|
20
|
+
export interface BrainSystemPromptHost {
|
|
21
|
+
systemPrompt: string;
|
|
22
|
+
extensionRules?: {
|
|
23
|
+
global?: string;
|
|
24
|
+
search?: string;
|
|
25
|
+
dataExtraction?: string;
|
|
26
|
+
heavy?: string;
|
|
27
|
+
};
|
|
28
|
+
extensionDomainRules?: Record<string, {
|
|
29
|
+
extraRules?: string;
|
|
30
|
+
}>;
|
|
31
|
+
macroPromptBlock: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Build the system prompt dynamically, injecting conditional rule groups
|
|
35
|
+
* based on goal text, page snapshot content, and turn number.
|
|
36
|
+
* Saves ~800 tokens per turn on simple navigation tasks.
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildSystemPromptImpl(self: BrainSystemPromptHost, goal: string, state: PageState, turn: number): string;
|
|
39
|
+
/**
|
|
40
|
+
* Same as buildSystemPrompt but returns the parts so the caller can decide
|
|
41
|
+
* how to send them. For Anthropic, decide() ships them as a SystemModelMessage[]
|
|
42
|
+
* with cache_control on the stable CORE_RULES prefix; other providers join.
|
|
43
|
+
*
|
|
44
|
+
* The first slot is ALWAYS CORE_RULES (or the user's custom override) so the
|
|
45
|
+
* cache breakpoint placement is deterministic. Extension-supplied rules are
|
|
46
|
+
* appended AFTER REASONING_SUFFIX so the cached prefix stays byte-stable
|
|
47
|
+
* across turns.
|
|
48
|
+
*/
|
|
49
|
+
export declare function composeSystemPromptPartsImpl(self: BrainSystemPromptHost, goal: string, state: PageState, turn: number): string[];
|
|
50
|
+
/**
|
|
51
|
+
* Find the per-domain extra rules whose domain key matches the URL host.
|
|
52
|
+
* Multiple matches are concatenated in registration order.
|
|
53
|
+
*/
|
|
54
|
+
export declare function matchDomainRulesImpl(self: BrainSystemPromptHost, url: string): string | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Build the system prompt for `decide()` in the form best suited to the
|
|
57
|
+
* active provider:
|
|
58
|
+
* - Anthropic: a SystemModelMessage[] with `cache_control: ephemeral`
|
|
59
|
+
* on the CORE_RULES slot. Subsequent turns get a cache hit on the
|
|
60
|
+
* ~1500-token prefix (90% cheaper input + faster TTFT).
|
|
61
|
+
* - Everything else: a single concatenated string (current behavior).
|
|
62
|
+
*
|
|
63
|
+
* Custom system prompts (set via config) are passed verbatim — caching
|
|
64
|
+
* is opt-in via the default prompt path only.
|
|
65
|
+
*/
|
|
66
|
+
export declare function buildSystemForDecideImpl(self: BrainSystemPromptHost, goal: string, state: PageState, turn: number, providerName: 'openai' | 'anthropic' | 'google' | 'cli-bridge' | 'codex-cli' | 'claude-code' | 'sandbox-backend' | 'zai-coding-plan'): string | SystemModelMessage[];
|
|
67
|
+
//# sourceMappingURL=system-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/brain/system-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAY7C;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/F,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvH;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA0ChI;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAejG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,qBAAqB,EAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,iBAAiB,GAAG,iBAAiB,GACnI,MAAM,GAAG,kBAAkB,EAAE,CAmB/B"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic system-prompt assembly for the Brain decision engine: conditional
|
|
3
|
+
* rule-group injection (search / data-extraction / heavy-page), user + domain
|
|
4
|
+
* + macro rule appends, and the Anthropic cache_control split used by
|
|
5
|
+
* `decide()`.
|
|
6
|
+
*
|
|
7
|
+
* Extracted from brain/index.ts via the delegate + host-interface pattern.
|
|
8
|
+
* `buildSystemForDecide` keeps a thin delegator on Brain; the other three
|
|
9
|
+
* helpers moved wholesale. Bodies are verbatim — same ordering, thresholds,
|
|
10
|
+
* and byte-stable cached-prefix placement. State is read through
|
|
11
|
+
* {@link BrainSystemPromptHost}, which Brain `implements`.
|
|
12
|
+
*/
|
|
13
|
+
import { CORE_RULES, SEARCH_RULES, DATA_EXTRACTION_RULES, HEAVY_PAGE_RULES, REASONING_SUFFIX, SYSTEM_PROMPT, DATA_EXTRACTION_PATTERN, SEARCH_SNAPSHOT_PATTERN, } from './prompts.js';
|
|
14
|
+
/**
|
|
15
|
+
* Build the system prompt dynamically, injecting conditional rule groups
|
|
16
|
+
* based on goal text, page snapshot content, and turn number.
|
|
17
|
+
* Saves ~800 tokens per turn on simple navigation tasks.
|
|
18
|
+
*/
|
|
19
|
+
export function buildSystemPromptImpl(self, goal, state, turn) {
|
|
20
|
+
return composeSystemPromptPartsImpl(self, goal, state, turn).join('');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Same as buildSystemPrompt but returns the parts so the caller can decide
|
|
24
|
+
* how to send them. For Anthropic, decide() ships them as a SystemModelMessage[]
|
|
25
|
+
* with cache_control on the stable CORE_RULES prefix; other providers join.
|
|
26
|
+
*
|
|
27
|
+
* The first slot is ALWAYS CORE_RULES (or the user's custom override) so the
|
|
28
|
+
* cache breakpoint placement is deterministic. Extension-supplied rules are
|
|
29
|
+
* appended AFTER REASONING_SUFFIX so the cached prefix stays byte-stable
|
|
30
|
+
* across turns.
|
|
31
|
+
*/
|
|
32
|
+
export function composeSystemPromptPartsImpl(self, goal, state, turn) {
|
|
33
|
+
if (self.systemPrompt !== SYSTEM_PROMPT)
|
|
34
|
+
return [self.systemPrompt];
|
|
35
|
+
const parts = [CORE_RULES];
|
|
36
|
+
const snapshotSample = state.snapshot.length > 4000 ? state.snapshot.slice(0, 4000) : state.snapshot;
|
|
37
|
+
if (SEARCH_SNAPSHOT_PATTERN.test(snapshotSample) || /\/search\b/i.test(state.url)) {
|
|
38
|
+
parts.push(SEARCH_RULES);
|
|
39
|
+
if (self.extensionRules?.search) {
|
|
40
|
+
parts.push(`\n\nUSER RULES (search):\n${self.extensionRules.search}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (DATA_EXTRACTION_PATTERN.test(goal)) {
|
|
44
|
+
parts.push(DATA_EXTRACTION_RULES);
|
|
45
|
+
if (self.extensionRules?.dataExtraction) {
|
|
46
|
+
parts.push(`\n\nUSER RULES (data extraction):\n${self.extensionRules.dataExtraction}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (state.snapshot.length > 10_000 || turn > 10) {
|
|
50
|
+
parts.push(HEAVY_PAGE_RULES);
|
|
51
|
+
if (self.extensionRules?.heavy) {
|
|
52
|
+
parts.push(`\n\nUSER RULES (heavy page):\n${self.extensionRules.heavy}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
parts.push(REASONING_SUFFIX);
|
|
56
|
+
// Global user rules + matching per-domain rules. Both are appended AFTER
|
|
57
|
+
// REASONING_SUFFIX so they don't pollute the byte-stable cached prefix.
|
|
58
|
+
if (self.extensionRules?.global) {
|
|
59
|
+
parts.push(`\n\nUSER RULES (global):\n${self.extensionRules.global}`);
|
|
60
|
+
}
|
|
61
|
+
if (self.extensionDomainRules) {
|
|
62
|
+
const domainRules = matchDomainRulesImpl(self, state.url);
|
|
63
|
+
if (domainRules) {
|
|
64
|
+
parts.push(`\n\nUSER RULES (domain match):\n${domainRules}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Macros live AFTER the cached prefix so registering new macros
|
|
68
|
+
// doesn't bust the Anthropic cache.
|
|
69
|
+
if (self.macroPromptBlock) {
|
|
70
|
+
parts.push(`\n\n${self.macroPromptBlock}`);
|
|
71
|
+
}
|
|
72
|
+
return parts;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Find the per-domain extra rules whose domain key matches the URL host.
|
|
76
|
+
* Multiple matches are concatenated in registration order.
|
|
77
|
+
*/
|
|
78
|
+
export function matchDomainRulesImpl(self, url) {
|
|
79
|
+
if (!self.extensionDomainRules)
|
|
80
|
+
return undefined;
|
|
81
|
+
let host;
|
|
82
|
+
try {
|
|
83
|
+
host = new URL(url).hostname;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
const matches = [];
|
|
89
|
+
for (const [domain, rules] of Object.entries(self.extensionDomainRules)) {
|
|
90
|
+
if (host.includes(domain) && rules.extraRules) {
|
|
91
|
+
matches.push(rules.extraRules);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return matches.length > 0 ? matches.join('\n\n') : undefined;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Build the system prompt for `decide()` in the form best suited to the
|
|
98
|
+
* active provider:
|
|
99
|
+
* - Anthropic: a SystemModelMessage[] with `cache_control: ephemeral`
|
|
100
|
+
* on the CORE_RULES slot. Subsequent turns get a cache hit on the
|
|
101
|
+
* ~1500-token prefix (90% cheaper input + faster TTFT).
|
|
102
|
+
* - Everything else: a single concatenated string (current behavior).
|
|
103
|
+
*
|
|
104
|
+
* Custom system prompts (set via config) are passed verbatim — caching
|
|
105
|
+
* is opt-in via the default prompt path only.
|
|
106
|
+
*/
|
|
107
|
+
export function buildSystemForDecideImpl(self, goal, state, turn, providerName) {
|
|
108
|
+
const parts = composeSystemPromptPartsImpl(self, goal, state, turn);
|
|
109
|
+
if (providerName !== 'anthropic' || self.systemPrompt !== SYSTEM_PROMPT || parts.length === 0) {
|
|
110
|
+
return parts.join('');
|
|
111
|
+
}
|
|
112
|
+
// Anthropic path: first slot is CORE_RULES (cached), remaining parts ship
|
|
113
|
+
// as a separate uncached system message so the prefix stays byte-stable
|
|
114
|
+
// across turns and the cache hits.
|
|
115
|
+
const corePart = {
|
|
116
|
+
role: 'system',
|
|
117
|
+
content: parts[0],
|
|
118
|
+
providerOptions: {
|
|
119
|
+
anthropic: {
|
|
120
|
+
cacheControl: { type: 'ephemeral' },
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
if (parts.length === 1)
|
|
125
|
+
return [corePart];
|
|
126
|
+
return [corePart, { role: 'system', content: parts.slice(1).join('') }];
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=system-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/brain/system-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design-audit task for the Brain decision engine: uses vision to analyze
|
|
3
|
+
* layout, typography, spacing, contrast, and UX, returning structured findings
|
|
4
|
+
* with categories, severities, and optional ROI / patch passthrough.
|
|
5
|
+
*
|
|
6
|
+
* Extracted from brain/index.ts via the delegate + host-interface pattern.
|
|
7
|
+
* Brain.auditDesign keeps a thin delegator; the body lives here verbatim and
|
|
8
|
+
* reads Brain state through {@link BrainDesignAuditHost}, which Brain
|
|
9
|
+
* `implements` so tsc proves the host surface is complete.
|
|
10
|
+
*/
|
|
11
|
+
import type { ModelMessage, SystemModelMessage } from 'ai';
|
|
12
|
+
import type { PageState, DesignFinding } from '../../types.js';
|
|
13
|
+
import type { UserContent } from '../types.js';
|
|
14
|
+
import type { ModelSelection, GenerateResult } from '../model-client.js';
|
|
15
|
+
/**
|
|
16
|
+
* The slice of Brain state `auditDesign` reads. All members are public on Brain
|
|
17
|
+
* by construction; `implements BrainDesignAuditHost` makes a missing/mistyped
|
|
18
|
+
* member a compile error.
|
|
19
|
+
*/
|
|
20
|
+
export interface BrainDesignAuditHost {
|
|
21
|
+
debug: boolean;
|
|
22
|
+
buildUserContent(text: string, screenshot?: string, forceVision?: boolean): UserContent;
|
|
23
|
+
generate(system: string | SystemModelMessage[], messages: ModelMessage[], selection?: ModelSelection, maxOutputTokens?: number): Promise<GenerateResult>;
|
|
24
|
+
}
|
|
25
|
+
export declare function auditDesignImpl(self: BrainDesignAuditHost, state: PageState, goal: string, checkpoints: string[], systemPrompt?: string): Promise<{
|
|
26
|
+
score: number;
|
|
27
|
+
findings: DesignFinding[];
|
|
28
|
+
raw: string;
|
|
29
|
+
tokensUsed?: number;
|
|
30
|
+
designSystemScore?: Record<string, unknown>;
|
|
31
|
+
parseError?: string;
|
|
32
|
+
}>;
|
|
33
|
+
//# sourceMappingURL=design-audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-audit.d.ts","sourceRoot":"","sources":["../../../src/brain/tasks/design-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzE;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IACxF,QAAQ,CACN,MAAM,EAAE,MAAM,GAAG,kBAAkB,EAAE,EACrC,QAAQ,EAAE,YAAY,EAAE,EACxB,SAAS,CAAC,EAAE,cAAc,EAC1B,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAoG3J"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design-audit task for the Brain decision engine: uses vision to analyze
|
|
3
|
+
* layout, typography, spacing, contrast, and UX, returning structured findings
|
|
4
|
+
* with categories, severities, and optional ROI / patch passthrough.
|
|
5
|
+
*
|
|
6
|
+
* Extracted from brain/index.ts via the delegate + host-interface pattern.
|
|
7
|
+
* Brain.auditDesign keeps a thin delegator; the body lives here verbatim and
|
|
8
|
+
* reads Brain state through {@link BrainDesignAuditHost}, which Brain
|
|
9
|
+
* `implements` so tsc proves the host surface is complete.
|
|
10
|
+
*/
|
|
11
|
+
import { DESIGN_AUDIT_PROMPT } from '../prompts.js';
|
|
12
|
+
export async function auditDesignImpl(self, state, goal, checkpoints, systemPrompt) {
|
|
13
|
+
const textContent = `GOAL: ${goal}
|
|
14
|
+
|
|
15
|
+
CHECKPOINTS to verify:
|
|
16
|
+
${checkpoints.map((c, i) => `${i + 1}. ${c}`).join('\n')}
|
|
17
|
+
|
|
18
|
+
CURRENT PAGE:
|
|
19
|
+
URL: ${state.url}
|
|
20
|
+
Title: ${state.title}
|
|
21
|
+
|
|
22
|
+
ELEMENTS:
|
|
23
|
+
${state.snapshot}
|
|
24
|
+
|
|
25
|
+
Audit this page for design quality, UX issues, and visual bugs.`;
|
|
26
|
+
const userContent = self.buildUserContent(textContent, state.screenshot, true);
|
|
27
|
+
const result = await self.generate(systemPrompt ?? DESIGN_AUDIT_PROMPT, [{ role: 'user', content: userContent }], undefined, 8000);
|
|
28
|
+
const raw = result.text;
|
|
29
|
+
const tokensUsed = result.tokensUsed;
|
|
30
|
+
if (self.debug) {
|
|
31
|
+
console.log('[Brain] Design audit:', raw.slice(0, 300));
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
let text = raw.trim();
|
|
35
|
+
if (text.startsWith('```')) {
|
|
36
|
+
text = text.replace(/^```(?:json)?\n?/, '').replace(/\n?```$/, '');
|
|
37
|
+
}
|
|
38
|
+
// Extract JSON object if surrounded by non-JSON text or truncated
|
|
39
|
+
let parsed;
|
|
40
|
+
try {
|
|
41
|
+
parsed = JSON.parse(text);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
const start = text.indexOf('{');
|
|
45
|
+
const end = text.lastIndexOf('}');
|
|
46
|
+
if (start >= 0 && end > start) {
|
|
47
|
+
parsed = JSON.parse(text.slice(start, end + 1));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
throw new Error('No JSON object found');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const VALID_CATEGORIES = new Set(['visual-bug', 'layout', 'contrast', 'alignment', 'spacing', 'typography', 'accessibility', 'ux']);
|
|
54
|
+
const VALID_SEVERITIES = new Set(['critical', 'major', 'minor']);
|
|
55
|
+
const VALID_BLAST = new Set(['page', 'section', 'component', 'system']);
|
|
56
|
+
const clampScore = (n) => typeof n === 'number' ? Math.max(1, Math.min(10, n)) : undefined;
|
|
57
|
+
const findings = Array.isArray(parsed.findings)
|
|
58
|
+
? parsed.findings.map((f) => ({
|
|
59
|
+
category: (VALID_CATEGORIES.has(f.category) ? f.category : 'ux'),
|
|
60
|
+
severity: (VALID_SEVERITIES.has(f.severity) ? f.severity : 'minor'),
|
|
61
|
+
description: String(f.description ?? ''),
|
|
62
|
+
location: String(f.location ?? ''),
|
|
63
|
+
suggestion: String(f.suggestion ?? ''),
|
|
64
|
+
...(f.cssSelector ? { cssSelector: String(f.cssSelector) } : {}),
|
|
65
|
+
...(f.cssFix ? { cssFix: String(f.cssFix) } : {}),
|
|
66
|
+
// Optional ROI fields.
|
|
67
|
+
...(clampScore(f.impact) !== undefined ? { impact: clampScore(f.impact) } : {}),
|
|
68
|
+
...(clampScore(f.effort) !== undefined ? { effort: clampScore(f.effort) } : {}),
|
|
69
|
+
...(VALID_BLAST.has(f.blast)
|
|
70
|
+
? { blast: f.blast }
|
|
71
|
+
: {}),
|
|
72
|
+
// Layer 2 — preserve raw patches array (untyped passthrough). The
|
|
73
|
+
// parsePatches/validatePatch pipeline in build-result.ts converts
|
|
74
|
+
// these into typed, validated Patch objects.
|
|
75
|
+
...(Array.isArray(f.patches) ? { rawPatches: f.patches } : {}),
|
|
76
|
+
}))
|
|
77
|
+
: [];
|
|
78
|
+
const designSystemScore = parsed.designSystemScore && typeof parsed.designSystemScore === 'object'
|
|
79
|
+
? parsed.designSystemScore
|
|
80
|
+
: undefined;
|
|
81
|
+
const rawScore = typeof parsed.score === 'number' ? parsed.score : 5;
|
|
82
|
+
return {
|
|
83
|
+
score: Math.max(1, Math.min(10, rawScore)),
|
|
84
|
+
findings,
|
|
85
|
+
raw,
|
|
86
|
+
tokensUsed,
|
|
87
|
+
designSystemScore,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
return {
|
|
92
|
+
score: 5,
|
|
93
|
+
findings: [],
|
|
94
|
+
raw,
|
|
95
|
+
tokensUsed,
|
|
96
|
+
parseError: err instanceof Error ? err.message : String(err),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=design-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-audit.js","sourceRoot":"","sources":["../../../src/brain/tasks/design-audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quality-evaluation task for the Brain decision engine: asks the LLM to rate
|
|
3
|
+
* the visual quality, design, and professional polish of the current page.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from brain/index.ts via the delegate + host-interface pattern.
|
|
6
|
+
* Brain.evaluate keeps a thin delegator; the body lives here verbatim and reads
|
|
7
|
+
* Brain state through {@link BrainEvaluateHost}, which Brain `implements` so tsc
|
|
8
|
+
* proves the host surface is complete.
|
|
9
|
+
*/
|
|
10
|
+
import type { ModelMessage, SystemModelMessage } from 'ai';
|
|
11
|
+
import type { PageState } from '../../types.js';
|
|
12
|
+
import type { QualityEvaluation, UserContent } from '../types.js';
|
|
13
|
+
import type { ModelSelection, GenerateResult } from '../model-client.js';
|
|
14
|
+
/**
|
|
15
|
+
* The slice of Brain state `evaluate` reads. All members are public on Brain by
|
|
16
|
+
* construction; `implements BrainEvaluateHost` makes a missing/mistyped member a
|
|
17
|
+
* compile error.
|
|
18
|
+
*/
|
|
19
|
+
export interface BrainEvaluateHost {
|
|
20
|
+
debug: boolean;
|
|
21
|
+
buildUserContent(text: string, screenshot?: string, forceVision?: boolean): UserContent;
|
|
22
|
+
generate(system: string | SystemModelMessage[], messages: ModelMessage[], selection?: ModelSelection, maxOutputTokens?: number): Promise<GenerateResult>;
|
|
23
|
+
}
|
|
24
|
+
export declare function evaluateImpl(self: BrainEvaluateHost, state: PageState, goal: string): Promise<QualityEvaluation>;
|
|
25
|
+
//# sourceMappingURL=evaluate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../src/brain/tasks/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzE;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IACxF,QAAQ,CACN,MAAM,EAAE,MAAM,GAAG,kBAAkB,EAAE,EACrC,QAAQ,EAAE,YAAY,EAAE,EACxB,SAAS,CAAC,EAAE,cAAc,EAC1B,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoDtH"}
|