@aiscene/core 9.0.6 → 9.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/agent/agent.mjs +24 -11
- package/dist/es/agent/agent.mjs.map +1 -1
- package/dist/es/agent/cache-config.mjs +19 -0
- package/dist/es/agent/cache-config.mjs.map +1 -0
- package/dist/es/agent/file-chooser.mjs +82 -0
- package/dist/es/agent/file-chooser.mjs.map +1 -0
- package/dist/es/agent/insight.mjs +101 -0
- package/dist/es/agent/insight.mjs.map +1 -0
- package/dist/es/agent/metrics.mjs +81 -0
- package/dist/es/agent/metrics.mjs.map +1 -0
- package/dist/es/agent/progress/ai-act-progress.mjs +199 -0
- package/dist/es/agent/progress/ai-act-progress.mjs.map +1 -0
- package/dist/es/agent/progress/index.mjs +2 -0
- package/dist/es/agent/progress/progress-bus.mjs +52 -0
- package/dist/es/agent/progress/progress-bus.mjs.map +1 -0
- package/dist/es/agent/prompt-context.mjs +25 -0
- package/dist/es/agent/prompt-context.mjs.map +1 -0
- package/dist/es/agent/record-to-report.mjs +14 -0
- package/dist/es/agent/record-to-report.mjs.map +1 -0
- package/dist/es/agent/run-gherkin-scenario.mjs +114 -0
- package/dist/es/agent/run-gherkin-scenario.mjs.map +1 -0
- package/dist/es/agent/run-markdown.mjs +62 -0
- package/dist/es/agent/run-markdown.mjs.map +1 -0
- package/dist/es/agent/screenshot-preparation.mjs +37 -0
- package/dist/es/agent/screenshot-preparation.mjs.map +1 -0
- package/dist/es/agent/ui-observer.mjs +385 -0
- package/dist/es/agent/ui-observer.mjs.map +1 -0
- package/dist/es/agent/utils.mjs +42 -4
- package/dist/es/agent/utils.mjs.map +1 -1
- package/dist/es/ai-model/connectivity/fixture.mjs +8 -0
- package/dist/es/ai-model/connectivity/fixture.mjs.map +1 -0
- package/dist/es/ai-model/connectivity/index.mjs +2 -0
- package/dist/es/ai-model/connectivity/run-connectivity-test.mjs +160 -0
- package/dist/es/ai-model/connectivity/run-connectivity-test.mjs.map +1 -0
- package/dist/es/ai-model/conversation-history.mjs.map +1 -1
- package/dist/es/ai-model/index.mjs +2 -1
- package/dist/es/ai-model/inspect.mjs +1 -1
- package/dist/es/ai-model/inspect.mjs.map +1 -1
- package/dist/es/ai-model/model-adapter/chat-completion.mjs +69 -0
- package/dist/es/ai-model/model-adapter/chat-completion.mjs.map +1 -0
- package/dist/es/ai-model/model-adapter/custom-planning-action.mjs +6 -0
- package/dist/es/ai-model/model-adapter/custom-planning-action.mjs.map +1 -0
- package/dist/es/ai-model/model-adapter/custom-planning-types.mjs +0 -0
- package/dist/es/ai-model/model-adapter/default-insight-protocol.mjs +28 -0
- package/dist/es/ai-model/model-adapter/default-insight-protocol.mjs.map +1 -0
- package/dist/es/ai-model/model-adapter/default-locate-protocol.mjs +145 -0
- package/dist/es/ai-model/model-adapter/default-locate-protocol.mjs.map +1 -0
- package/dist/es/ai-model/model-adapter/default-planning-protocol.mjs +124 -0
- package/dist/es/ai-model/model-adapter/default-planning-protocol.mjs.map +1 -0
- package/dist/es/ai-model/model-adapter/image-preprocess.mjs +27 -0
- package/dist/es/ai-model/model-adapter/image-preprocess.mjs.map +1 -0
- package/dist/es/ai-model/model-adapter/index.mjs +2 -0
- package/dist/es/ai-model/model-adapter/insight-protocol.mjs +0 -0
- package/dist/es/ai-model/model-adapter/insight.mjs +13 -0
- package/dist/es/ai-model/model-adapter/insight.mjs.map +1 -0
- package/dist/es/ai-model/model-adapter/locate-protocol.mjs +0 -0
- package/dist/es/ai-model/model-adapter/locate.mjs +53 -0
- package/dist/es/ai-model/model-adapter/locate.mjs.map +1 -0
- package/dist/es/ai-model/model-adapter/planning-protocol.mjs +0 -0
- package/dist/es/ai-model/model-adapter/planning.mjs +49 -0
- package/dist/es/ai-model/model-adapter/planning.mjs.map +1 -0
- package/dist/es/ai-model/model-adapter/resolve.mjs +54 -0
- package/dist/es/ai-model/model-adapter/resolve.mjs.map +1 -0
- package/dist/es/ai-model/model-adapter/types.mjs +0 -0
- package/dist/es/ai-model/models/auto-glm/actions.mjs +205 -0
- package/dist/es/ai-model/models/auto-glm/actions.mjs.map +1 -0
- package/dist/es/ai-model/models/auto-glm/adapter.mjs +45 -0
- package/dist/es/ai-model/models/auto-glm/adapter.mjs.map +1 -0
- package/dist/es/ai-model/models/auto-glm/locate.mjs +11 -0
- package/dist/es/ai-model/models/auto-glm/locate.mjs.map +1 -0
- package/dist/es/ai-model/models/auto-glm/parser.mjs +217 -0
- package/dist/es/ai-model/models/auto-glm/parser.mjs.map +1 -0
- package/dist/es/ai-model/models/auto-glm/planning.mjs +33 -0
- package/dist/es/ai-model/models/auto-glm/planning.mjs.map +1 -0
- package/dist/es/ai-model/models/auto-glm/prompt.mjs +214 -0
- package/dist/es/ai-model/models/auto-glm/prompt.mjs.map +1 -0
- package/dist/es/ai-model/models/deepseek/adapter.mjs +79 -0
- package/dist/es/ai-model/models/deepseek/adapter.mjs.map +1 -0
- package/dist/es/ai-model/models/deepseek/locate-protocol.mjs +89 -0
- package/dist/es/ai-model/models/deepseek/locate-protocol.mjs.map +1 -0
- package/dist/es/ai-model/models/default.mjs +13 -0
- package/dist/es/ai-model/models/default.mjs.map +1 -0
- package/dist/es/ai-model/models/doubao.mjs +95 -0
- package/dist/es/ai-model/models/doubao.mjs.map +1 -0
- package/dist/es/ai-model/models/gemini.mjs +100 -0
- package/dist/es/ai-model/models/gemini.mjs.map +1 -0
- package/dist/es/ai-model/models/glm.mjs +46 -0
- package/dist/es/ai-model/models/glm.mjs.map +1 -0
- package/dist/es/ai-model/models/gpt.mjs +43 -0
- package/dist/es/ai-model/models/gpt.mjs.map +1 -0
- package/dist/es/ai-model/models/index.mjs +2 -0
- package/dist/es/ai-model/models/kimi.mjs +102 -0
- package/dist/es/ai-model/models/kimi.mjs.map +1 -0
- package/dist/es/ai-model/models/mimo.mjs +36 -0
- package/dist/es/ai-model/models/mimo.mjs.map +1 -0
- package/dist/es/ai-model/models/qwen.mjs +139 -0
- package/dist/es/ai-model/models/qwen.mjs.map +1 -0
- package/dist/es/ai-model/models/registry.mjs +51 -0
- package/dist/es/ai-model/models/registry.mjs.map +1 -0
- package/dist/es/ai-model/models/ui-tars/actions.mjs +147 -0
- package/dist/es/ai-model/models/ui-tars/actions.mjs.map +1 -0
- package/dist/es/ai-model/models/ui-tars/adapter.mjs +102 -0
- package/dist/es/ai-model/models/ui-tars/adapter.mjs.map +1 -0
- package/dist/es/ai-model/models/ui-tars/parser.mjs +40 -0
- package/dist/es/ai-model/models/ui-tars/parser.mjs.map +1 -0
- package/dist/es/ai-model/models/ui-tars/planning.mjs +25 -0
- package/dist/es/ai-model/models/ui-tars/planning.mjs.map +1 -0
- package/dist/es/ai-model/models/ui-tars/prompt.mjs +36 -0
- package/dist/es/ai-model/models/ui-tars/prompt.mjs.map +1 -0
- package/dist/es/ai-model/models/utils/intent.mjs +6 -0
- package/dist/es/ai-model/models/utils/intent.mjs.map +1 -0
- package/dist/es/ai-model/prompt/insight/index.mjs +3 -0
- package/dist/es/ai-model/prompt/insight/system-prompt.mjs +104 -0
- package/dist/es/ai-model/prompt/insight/system-prompt.mjs.map +1 -0
- package/dist/es/ai-model/prompt/insight/user-prompt.mjs +23 -0
- package/dist/es/ai-model/prompt/insight/user-prompt.mjs.map +1 -0
- package/dist/es/ai-model/prompt/locate/element-system-prompt.mjs +12 -0
- package/dist/es/ai-model/prompt/locate/element-system-prompt.mjs.map +1 -0
- package/dist/es/ai-model/prompt/locate/grounding-rules.mjs +13 -0
- package/dist/es/ai-model/prompt/locate/grounding-rules.mjs.map +1 -0
- package/dist/es/ai-model/prompt/locate/index.mjs +4 -0
- package/dist/es/ai-model/prompt/locate/search-area-system-prompt.mjs +9 -0
- package/dist/es/ai-model/prompt/locate/search-area-system-prompt.mjs.map +1 -0
- package/dist/es/ai-model/prompt/planning/action-output-example.mjs +52 -0
- package/dist/es/ai-model/prompt/planning/action-output-example.mjs.map +1 -0
- package/dist/es/ai-model/prompt/planning/action-space-description.mjs +28 -0
- package/dist/es/ai-model/prompt/planning/action-space-description.mjs.map +1 -0
- package/dist/es/ai-model/prompt/planning/index.mjs +6 -0
- package/dist/es/ai-model/prompt/planning/multi-turn-example.mjs +221 -0
- package/dist/es/ai-model/prompt/planning/multi-turn-example.mjs.map +1 -0
- package/dist/es/ai-model/prompt/planning/planning-response-example.mjs +25 -0
- package/dist/es/ai-model/prompt/planning/planning-response-example.mjs.map +1 -0
- package/dist/es/ai-model/prompt/planning/sub-goals-text.mjs +17 -0
- package/dist/es/ai-model/prompt/planning/sub-goals-text.mjs.map +1 -0
- package/dist/es/ai-model/prompt/planning/system-prompt.mjs +293 -0
- package/dist/es/ai-model/prompt/planning/system-prompt.mjs.map +1 -0
- package/dist/es/ai-model/service-caller/codex-app-server.mjs +1 -0
- package/dist/es/ai-model/service-caller/codex-app-server.mjs.map +1 -1
- package/dist/es/ai-model/service-caller/index.mjs +35 -16
- package/dist/es/ai-model/service-caller/index.mjs.map +1 -1
- package/dist/es/ai-model/service-caller/model-call-recorder.mjs +74 -0
- package/dist/es/ai-model/service-caller/model-call-recorder.mjs.map +1 -0
- package/dist/es/ai-model/service-caller/openai-error.mjs +147 -0
- package/dist/es/ai-model/service-caller/openai-error.mjs.map +1 -0
- package/dist/es/ai-model/service-caller/proxy-deps.node.mjs +9 -0
- package/dist/es/ai-model/service-caller/proxy-deps.node.mjs.map +1 -0
- package/dist/es/ai-model/service-caller/proxy-deps.stub.mjs +12 -0
- package/dist/es/ai-model/service-caller/proxy-deps.stub.mjs.map +1 -0
- package/dist/es/ai-model/service-caller/semantic-retry.mjs +33 -0
- package/dist/es/ai-model/service-caller/semantic-retry.mjs.map +1 -0
- package/dist/es/ai-model/service-caller/types.mjs +0 -0
- package/dist/es/ai-model/shared/action-schema.mjs +15 -0
- package/dist/es/ai-model/shared/action-schema.mjs.map +1 -0
- package/dist/es/ai-model/shared/json.mjs +63 -0
- package/dist/es/ai-model/shared/json.mjs.map +1 -0
- package/dist/es/ai-model/shared/model-locate-result/bbox.mjs +60 -0
- package/dist/es/ai-model/shared/model-locate-result/bbox.mjs.map +1 -0
- package/dist/es/ai-model/shared/model-locate-result/coordinate-distance.mjs +10 -0
- package/dist/es/ai-model/shared/model-locate-result/coordinate-distance.mjs.map +1 -0
- package/dist/es/ai-model/shared/model-locate-result/errors.mjs +9 -0
- package/dist/es/ai-model/shared/model-locate-result/errors.mjs.map +1 -0
- package/dist/es/ai-model/shared/model-locate-result/factory.mjs +39 -0
- package/dist/es/ai-model/shared/model-locate-result/factory.mjs.map +1 -0
- package/dist/es/ai-model/shared/model-locate-result/index.mjs +6 -0
- package/dist/es/ai-model/shared/model-locate-result/parse.mjs +45 -0
- package/dist/es/ai-model/shared/model-locate-result/parse.mjs.map +1 -0
- package/dist/es/ai-model/shared/model-locate-result/pixel-bbox-mapper.mjs +67 -0
- package/dist/es/ai-model/shared/model-locate-result/pixel-bbox-mapper.mjs.map +1 -0
- package/dist/es/ai-model/shared/model-locate-result/prompt-spec.mjs +110 -0
- package/dist/es/ai-model/shared/model-locate-result/prompt-spec.mjs.map +1 -0
- package/dist/es/ai-model/shared/model-locate-result/types.mjs +9 -0
- package/dist/es/ai-model/shared/model-locate-result/types.mjs.map +1 -0
- package/dist/es/ai-model/shared/multimodal-prompt.mjs +55 -0
- package/dist/es/ai-model/shared/multimodal-prompt.mjs.map +1 -0
- package/dist/es/ai-model/shared/xml.mjs +42 -0
- package/dist/es/ai-model/shared/xml.mjs.map +1 -0
- package/dist/es/ai-model/workflows/grounding/index.mjs +4 -0
- package/dist/es/ai-model/workflows/grounding/locate-result-rect.mjs +23 -0
- package/dist/es/ai-model/workflows/grounding/locate-result-rect.mjs.map +1 -0
- package/dist/es/ai-model/workflows/grounding/locate.mjs +168 -0
- package/dist/es/ai-model/workflows/grounding/locate.mjs.map +1 -0
- package/dist/es/ai-model/workflows/grounding/planning-action-locate.mjs +97 -0
- package/dist/es/ai-model/workflows/grounding/planning-action-locate.mjs.map +1 -0
- package/dist/es/ai-model/workflows/grounding/search-area-mapping.mjs +18 -0
- package/dist/es/ai-model/workflows/grounding/search-area-mapping.mjs.map +1 -0
- package/dist/es/ai-model/workflows/grounding/search-area.mjs +55 -0
- package/dist/es/ai-model/workflows/grounding/search-area.mjs.map +1 -0
- package/dist/es/ai-model/workflows/grounding/section-locate.mjs +146 -0
- package/dist/es/ai-model/workflows/grounding/section-locate.mjs.map +1 -0
- package/dist/es/ai-model/workflows/grounding/types.mjs +0 -0
- package/dist/es/ai-model/workflows/grounding/utils.mjs +50 -0
- package/dist/es/ai-model/workflows/grounding/utils.mjs.map +1 -0
- package/dist/es/ai-model/workflows/insight/extraction.mjs +101 -0
- package/dist/es/ai-model/workflows/insight/extraction.mjs.map +1 -0
- package/dist/es/ai-model/workflows/insight/index.mjs +3 -0
- package/dist/es/ai-model/workflows/insight/insight-response-parser.mjs +26 -0
- package/dist/es/ai-model/workflows/insight/insight-response-parser.mjs.map +1 -0
- package/dist/es/ai-model/workflows/insight/order-sensitive.mjs +29 -0
- package/dist/es/ai-model/workflows/insight/order-sensitive.mjs.map +1 -0
- package/dist/es/ai-model/workflows/planning/conversation-history.mjs +185 -0
- package/dist/es/ai-model/workflows/planning/conversation-history.mjs.map +1 -0
- package/dist/es/ai-model/workflows/planning/custom-planning.mjs +129 -0
- package/dist/es/ai-model/workflows/planning/custom-planning.mjs.map +1 -0
- package/dist/es/ai-model/workflows/planning/index.mjs +4 -0
- package/dist/es/ai-model/workflows/planning/locate-normalization.mjs +41 -0
- package/dist/es/ai-model/workflows/planning/locate-normalization.mjs.map +1 -0
- package/dist/es/ai-model/workflows/planning/planning-action-log.mjs +22 -0
- package/dist/es/ai-model/workflows/planning/planning-action-log.mjs.map +1 -0
- package/dist/es/ai-model/workflows/planning/standard-planning-parser.mjs +99 -0
- package/dist/es/ai-model/workflows/planning/standard-planning-parser.mjs.map +1 -0
- package/dist/es/ai-model/workflows/planning/standard-planning.mjs +219 -0
- package/dist/es/ai-model/workflows/planning/standard-planning.mjs.map +1 -0
- package/dist/es/ai-model/workflows/planning/types.mjs +0 -0
- package/dist/es/ai-model/workflows/recorder-generation/common.mjs +171 -0
- package/dist/es/ai-model/workflows/recorder-generation/common.mjs.map +1 -0
- package/dist/es/ai-model/workflows/recorder-generation/index.mjs +5 -0
- package/dist/es/ai-model/workflows/recorder-generation/markdown.mjs +253 -0
- package/dist/es/ai-model/workflows/recorder-generation/markdown.mjs.map +1 -0
- package/dist/es/ai-model/workflows/recorder-generation/metadata.mjs +83 -0
- package/dist/es/ai-model/workflows/recorder-generation/metadata.mjs.map +1 -0
- package/dist/es/ai-model/workflows/recorder-generation/playwright.mjs +123 -0
- package/dist/es/ai-model/workflows/recorder-generation/playwright.mjs.map +1 -0
- package/dist/es/ai-model/workflows/recorder-generation/yaml.mjs +162 -0
- package/dist/es/ai-model/workflows/recorder-generation/yaml.mjs.map +1 -0
- package/dist/es/common.mjs +12 -1
- package/dist/es/common.mjs.map +1 -1
- package/dist/es/constants.mjs +4 -0
- package/dist/es/constants.mjs.map +1 -0
- package/dist/es/device/index.mjs.map +1 -1
- package/dist/es/device/input-strategy.mjs +34 -0
- package/dist/es/device/input-strategy.mjs.map +1 -0
- package/dist/es/dump/html-utils.mjs +16 -1
- package/dist/es/dump/html-utils.mjs.map +1 -1
- package/dist/es/dump/image-reference.mjs +63 -0
- package/dist/es/dump/image-reference.mjs.map +1 -0
- package/dist/es/dump/report-action-dump.mjs +244 -0
- package/dist/es/dump/report-action-dump.mjs.map +1 -0
- package/dist/es/dump/report-dump-compactor.mjs +200 -0
- package/dist/es/dump/report-dump-compactor.mjs.map +1 -0
- package/dist/es/dump/screenshot-store.mjs +124 -37
- package/dist/es/dump/screenshot-store.mjs.map +1 -1
- package/dist/es/dump/task-service-dump.mjs +17 -0
- package/dist/es/dump/task-service-dump.mjs.map +1 -0
- package/dist/es/dump/task-status.mjs +18 -0
- package/dist/es/dump/task-status.mjs.map +1 -0
- package/dist/es/element-describer.mjs +198 -0
- package/dist/es/element-describer.mjs.map +1 -0
- package/dist/es/errors.mjs +20 -0
- package/dist/es/errors.mjs.map +1 -0
- package/dist/es/report-html-template.mjs +4 -0
- package/dist/es/report-html-template.mjs.map +1 -0
- package/dist/es/report-stats.mjs +113 -0
- package/dist/es/report-stats.mjs.map +1 -0
- package/dist/es/screenshot-item.mjs +7 -2
- package/dist/es/screenshot-item.mjs.map +1 -1
- package/dist/es/service/index.mjs +10 -5
- package/dist/es/service/index.mjs.map +1 -1
- package/dist/es/task-runner.mjs.map +1 -1
- package/dist/es/types.mjs.map +1 -1
- package/dist/es/utils.mjs +1 -1
- package/dist/es/yaml/cleanup.mjs +13 -0
- package/dist/es/yaml/cleanup.mjs.map +1 -0
- package/dist/lib/agent/agent.js +24 -11
- package/dist/lib/agent/agent.js.map +1 -1
- package/dist/lib/agent/cache-config.js +53 -0
- package/dist/lib/agent/cache-config.js.map +1 -0
- package/dist/lib/agent/file-chooser.js +125 -0
- package/dist/lib/agent/file-chooser.js.map +1 -0
- package/dist/lib/agent/insight.js +135 -0
- package/dist/lib/agent/insight.js.map +1 -0
- package/dist/lib/agent/metrics.js +115 -0
- package/dist/lib/agent/metrics.js.map +1 -0
- package/dist/lib/agent/progress/ai-act-progress.js +239 -0
- package/dist/lib/agent/progress/ai-act-progress.js.map +1 -0
- package/dist/lib/agent/progress/index.js +67 -0
- package/dist/lib/agent/progress/index.js.map +1 -0
- package/dist/lib/agent/progress/progress-bus.js +86 -0
- package/dist/lib/agent/progress/progress-bus.js.map +1 -0
- package/dist/lib/agent/prompt-context.js +62 -0
- package/dist/lib/agent/prompt-context.js.map +1 -0
- package/dist/lib/agent/record-to-report.js +48 -0
- package/dist/lib/agent/record-to-report.js.map +1 -0
- package/dist/lib/agent/run-gherkin-scenario.js +151 -0
- package/dist/lib/agent/run-gherkin-scenario.js.map +1 -0
- package/dist/lib/agent/run-markdown.js +96 -0
- package/dist/lib/agent/run-markdown.js.map +1 -0
- package/dist/lib/agent/screenshot-preparation.js +74 -0
- package/dist/lib/agent/screenshot-preparation.js.map +1 -0
- package/dist/lib/agent/ui-observer.js +425 -0
- package/dist/lib/agent/ui-observer.js.map +1 -0
- package/dist/lib/agent/utils.js +46 -2
- package/dist/lib/agent/utils.js.map +1 -1
- package/dist/lib/ai-model/connectivity/fixture.js +45 -0
- package/dist/lib/ai-model/connectivity/fixture.js.map +1 -0
- package/dist/lib/ai-model/connectivity/index.js +38 -0
- package/dist/lib/ai-model/connectivity/index.js.map +1 -0
- package/dist/lib/ai-model/connectivity/run-connectivity-test.js +204 -0
- package/dist/lib/ai-model/connectivity/run-connectivity-test.js.map +1 -0
- package/dist/lib/ai-model/conversation-history.js.map +1 -1
- package/dist/lib/ai-model/index.js +15 -11
- package/dist/lib/ai-model/inspect.js +1 -1
- package/dist/lib/ai-model/inspect.js.map +1 -1
- package/dist/lib/ai-model/model-adapter/chat-completion.js +103 -0
- package/dist/lib/ai-model/model-adapter/chat-completion.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/custom-planning-action.js +40 -0
- package/dist/lib/ai-model/model-adapter/custom-planning-action.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/custom-planning-types.js +20 -0
- package/dist/lib/ai-model/model-adapter/custom-planning-types.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/default-insight-protocol.js +62 -0
- package/dist/lib/ai-model/model-adapter/default-insight-protocol.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/default-locate-protocol.js +182 -0
- package/dist/lib/ai-model/model-adapter/default-locate-protocol.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/default-planning-protocol.js +170 -0
- package/dist/lib/ai-model/model-adapter/default-planning-protocol.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/image-preprocess.js +61 -0
- package/dist/lib/ai-model/model-adapter/image-preprocess.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/index.js +38 -0
- package/dist/lib/ai-model/model-adapter/index.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/insight-protocol.js +20 -0
- package/dist/lib/ai-model/model-adapter/insight-protocol.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/insight.js +50 -0
- package/dist/lib/ai-model/model-adapter/insight.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/locate-protocol.js +20 -0
- package/dist/lib/ai-model/model-adapter/locate-protocol.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/locate.js +87 -0
- package/dist/lib/ai-model/model-adapter/locate.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/planning-protocol.js +20 -0
- package/dist/lib/ai-model/model-adapter/planning-protocol.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/planning.js +86 -0
- package/dist/lib/ai-model/model-adapter/planning.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/resolve.js +88 -0
- package/dist/lib/ai-model/model-adapter/resolve.js.map +1 -0
- package/dist/lib/ai-model/model-adapter/types.js +20 -0
- package/dist/lib/ai-model/model-adapter/types.js.map +1 -0
- package/dist/lib/ai-model/models/auto-glm/actions.js +239 -0
- package/dist/lib/ai-model/models/auto-glm/actions.js.map +1 -0
- package/dist/lib/ai-model/models/auto-glm/adapter.js +79 -0
- package/dist/lib/ai-model/models/auto-glm/adapter.js.map +1 -0
- package/dist/lib/ai-model/models/auto-glm/locate.js +45 -0
- package/dist/lib/ai-model/models/auto-glm/locate.js.map +1 -0
- package/dist/lib/ai-model/models/auto-glm/parser.js +260 -0
- package/dist/lib/ai-model/models/auto-glm/parser.js.map +1 -0
- package/dist/lib/ai-model/models/auto-glm/planning.js +67 -0
- package/dist/lib/ai-model/models/auto-glm/planning.js.map +1 -0
- package/dist/lib/ai-model/models/auto-glm/prompt.js +257 -0
- package/dist/lib/ai-model/models/auto-glm/prompt.js.map +1 -0
- package/dist/lib/ai-model/models/deepseek/adapter.js +113 -0
- package/dist/lib/ai-model/models/deepseek/adapter.js.map +1 -0
- package/dist/lib/ai-model/models/deepseek/locate-protocol.js +132 -0
- package/dist/lib/ai-model/models/deepseek/locate-protocol.js.map +1 -0
- package/dist/lib/ai-model/models/default.js +47 -0
- package/dist/lib/ai-model/models/default.js.map +1 -0
- package/dist/lib/ai-model/models/doubao.js +132 -0
- package/dist/lib/ai-model/models/doubao.js.map +1 -0
- package/dist/lib/ai-model/models/gemini.js +137 -0
- package/dist/lib/ai-model/models/gemini.js.map +1 -0
- package/dist/lib/ai-model/models/glm.js +80 -0
- package/dist/lib/ai-model/models/glm.js.map +1 -0
- package/dist/lib/ai-model/models/gpt.js +77 -0
- package/dist/lib/ai-model/models/gpt.js.map +1 -0
- package/dist/lib/ai-model/models/index.js +41 -0
- package/dist/lib/ai-model/models/index.js.map +1 -0
- package/dist/lib/ai-model/models/kimi.js +136 -0
- package/dist/lib/ai-model/models/kimi.js.map +1 -0
- package/dist/lib/ai-model/models/mimo.js +70 -0
- package/dist/lib/ai-model/models/mimo.js.map +1 -0
- package/dist/lib/ai-model/models/qwen.js +173 -0
- package/dist/lib/ai-model/models/qwen.js.map +1 -0
- package/dist/lib/ai-model/models/registry.js +91 -0
- package/dist/lib/ai-model/models/registry.js.map +1 -0
- package/dist/lib/ai-model/models/ui-tars/actions.js +181 -0
- package/dist/lib/ai-model/models/ui-tars/actions.js.map +1 -0
- package/dist/lib/ai-model/models/ui-tars/adapter.js +136 -0
- package/dist/lib/ai-model/models/ui-tars/adapter.js.map +1 -0
- package/dist/lib/ai-model/models/ui-tars/parser.js +74 -0
- package/dist/lib/ai-model/models/ui-tars/parser.js.map +1 -0
- package/dist/lib/ai-model/models/ui-tars/planning.js +59 -0
- package/dist/lib/ai-model/models/ui-tars/planning.js.map +1 -0
- package/dist/lib/ai-model/models/ui-tars/prompt.js +73 -0
- package/dist/lib/ai-model/models/ui-tars/prompt.js.map +1 -0
- package/dist/lib/ai-model/models/utils/intent.js +40 -0
- package/dist/lib/ai-model/models/utils/intent.js.map +1 -0
- package/dist/lib/ai-model/prompt/insight/index.js +45 -0
- package/dist/lib/ai-model/prompt/insight/index.js.map +1 -0
- package/dist/lib/ai-model/prompt/insight/system-prompt.js +138 -0
- package/dist/lib/ai-model/prompt/insight/system-prompt.js.map +1 -0
- package/dist/lib/ai-model/prompt/insight/user-prompt.js +60 -0
- package/dist/lib/ai-model/prompt/insight/user-prompt.js.map +1 -0
- package/dist/lib/ai-model/prompt/locate/element-system-prompt.js +46 -0
- package/dist/lib/ai-model/prompt/locate/element-system-prompt.js.map +1 -0
- package/dist/lib/ai-model/prompt/locate/grounding-rules.js +47 -0
- package/dist/lib/ai-model/prompt/locate/grounding-rules.js.map +1 -0
- package/dist/lib/ai-model/prompt/locate/index.js +46 -0
- package/dist/lib/ai-model/prompt/locate/index.js.map +1 -0
- package/dist/lib/ai-model/prompt/locate/search-area-system-prompt.js +43 -0
- package/dist/lib/ai-model/prompt/locate/search-area-system-prompt.js.map +1 -0
- package/dist/lib/ai-model/prompt/planning/action-output-example.js +92 -0
- package/dist/lib/ai-model/prompt/planning/action-output-example.js.map +1 -0
- package/dist/lib/ai-model/prompt/planning/action-space-description.js +75 -0
- package/dist/lib/ai-model/prompt/planning/action-space-description.js.map +1 -0
- package/dist/lib/ai-model/prompt/planning/index.js +63 -0
- package/dist/lib/ai-model/prompt/planning/index.js.map +1 -0
- package/dist/lib/ai-model/prompt/planning/multi-turn-example.js +255 -0
- package/dist/lib/ai-model/prompt/planning/multi-turn-example.js.map +1 -0
- package/dist/lib/ai-model/prompt/planning/planning-response-example.js +59 -0
- package/dist/lib/ai-model/prompt/planning/planning-response-example.js.map +1 -0
- package/dist/lib/ai-model/prompt/planning/sub-goals-text.js +51 -0
- package/dist/lib/ai-model/prompt/planning/sub-goals-text.js.map +1 -0
- package/dist/lib/ai-model/prompt/planning/system-prompt.js +327 -0
- package/dist/lib/ai-model/prompt/planning/system-prompt.js.map +1 -0
- package/dist/lib/ai-model/service-caller/codex-app-server.js +1 -0
- package/dist/lib/ai-model/service-caller/codex-app-server.js.map +1 -1
- package/dist/lib/ai-model/service-caller/index.js +35 -16
- package/dist/lib/ai-model/service-caller/index.js.map +1 -1
- package/dist/lib/ai-model/service-caller/model-call-recorder.js +124 -0
- package/dist/lib/ai-model/service-caller/model-call-recorder.js.map +1 -0
- package/dist/lib/ai-model/service-caller/openai-error.js +184 -0
- package/dist/lib/ai-model/service-caller/openai-error.js.map +1 -0
- package/dist/lib/ai-model/service-caller/proxy-deps.node.js +46 -0
- package/dist/lib/ai-model/service-caller/proxy-deps.node.js.map +1 -0
- package/dist/lib/ai-model/service-caller/proxy-deps.stub.js +49 -0
- package/dist/lib/ai-model/service-caller/proxy-deps.stub.js.map +1 -0
- package/dist/lib/ai-model/service-caller/semantic-retry.js +70 -0
- package/dist/lib/ai-model/service-caller/semantic-retry.js.map +1 -0
- package/dist/lib/ai-model/service-caller/types.js +20 -0
- package/dist/lib/ai-model/service-caller/types.js.map +1 -0
- package/dist/lib/ai-model/shared/action-schema.js +49 -0
- package/dist/lib/ai-model/shared/action-schema.js.map +1 -0
- package/dist/lib/ai-model/shared/json.js +103 -0
- package/dist/lib/ai-model/shared/json.js.map +1 -0
- package/dist/lib/ai-model/shared/model-locate-result/bbox.js +106 -0
- package/dist/lib/ai-model/shared/model-locate-result/bbox.js.map +1 -0
- package/dist/lib/ai-model/shared/model-locate-result/coordinate-distance.js +44 -0
- package/dist/lib/ai-model/shared/model-locate-result/coordinate-distance.js.map +1 -0
- package/dist/lib/ai-model/shared/model-locate-result/errors.js +46 -0
- package/dist/lib/ai-model/shared/model-locate-result/errors.js.map +1 -0
- package/dist/lib/ai-model/shared/model-locate-result/factory.js +76 -0
- package/dist/lib/ai-model/shared/model-locate-result/factory.js.map +1 -0
- package/dist/lib/ai-model/shared/model-locate-result/index.js +66 -0
- package/dist/lib/ai-model/shared/model-locate-result/index.js.map +1 -0
- package/dist/lib/ai-model/shared/model-locate-result/parse.js +88 -0
- package/dist/lib/ai-model/shared/model-locate-result/parse.js.map +1 -0
- package/dist/lib/ai-model/shared/model-locate-result/pixel-bbox-mapper.js +101 -0
- package/dist/lib/ai-model/shared/model-locate-result/pixel-bbox-mapper.js.map +1 -0
- package/dist/lib/ai-model/shared/model-locate-result/prompt-spec.js +156 -0
- package/dist/lib/ai-model/shared/model-locate-result/prompt-spec.js.map +1 -0
- package/dist/lib/ai-model/shared/model-locate-result/types.js +46 -0
- package/dist/lib/ai-model/shared/model-locate-result/types.js.map +1 -0
- package/dist/lib/ai-model/shared/multimodal-prompt.js +95 -0
- package/dist/lib/ai-model/shared/multimodal-prompt.js.map +1 -0
- package/dist/lib/ai-model/shared/xml.js +79 -0
- package/dist/lib/ai-model/shared/xml.js.map +1 -0
- package/dist/lib/ai-model/workflows/grounding/index.js +46 -0
- package/dist/lib/ai-model/workflows/grounding/index.js.map +1 -0
- package/dist/lib/ai-model/workflows/grounding/locate-result-rect.js +60 -0
- package/dist/lib/ai-model/workflows/grounding/locate-result-rect.js.map +1 -0
- package/dist/lib/ai-model/workflows/grounding/locate.js +208 -0
- package/dist/lib/ai-model/workflows/grounding/locate.js.map +1 -0
- package/dist/lib/ai-model/workflows/grounding/planning-action-locate.js +131 -0
- package/dist/lib/ai-model/workflows/grounding/planning-action-locate.js.map +1 -0
- package/dist/lib/ai-model/workflows/grounding/search-area-mapping.js +52 -0
- package/dist/lib/ai-model/workflows/grounding/search-area-mapping.js.map +1 -0
- package/dist/lib/ai-model/workflows/grounding/search-area.js +92 -0
- package/dist/lib/ai-model/workflows/grounding/search-area.js.map +1 -0
- package/dist/lib/ai-model/workflows/grounding/section-locate.js +180 -0
- package/dist/lib/ai-model/workflows/grounding/section-locate.js.map +1 -0
- package/dist/lib/ai-model/workflows/grounding/types.js +20 -0
- package/dist/lib/ai-model/workflows/grounding/types.js.map +1 -0
- package/dist/lib/ai-model/workflows/grounding/utils.js +87 -0
- package/dist/lib/ai-model/workflows/grounding/utils.js.map +1 -0
- package/dist/lib/ai-model/workflows/insight/extraction.js +135 -0
- package/dist/lib/ai-model/workflows/insight/extraction.js.map +1 -0
- package/dist/lib/ai-model/workflows/insight/index.js +42 -0
- package/dist/lib/ai-model/workflows/insight/index.js.map +1 -0
- package/dist/lib/ai-model/workflows/insight/insight-response-parser.js +60 -0
- package/dist/lib/ai-model/workflows/insight/insight-response-parser.js.map +1 -0
- package/dist/lib/ai-model/workflows/insight/order-sensitive.js +63 -0
- package/dist/lib/ai-model/workflows/insight/order-sensitive.js.map +1 -0
- package/dist/lib/ai-model/workflows/planning/conversation-history.js +219 -0
- package/dist/lib/ai-model/workflows/planning/conversation-history.js.map +1 -0
- package/dist/lib/ai-model/workflows/planning/custom-planning.js +166 -0
- package/dist/lib/ai-model/workflows/planning/custom-planning.js.map +1 -0
- package/dist/lib/ai-model/workflows/planning/index.js +49 -0
- package/dist/lib/ai-model/workflows/planning/index.js.map +1 -0
- package/dist/lib/ai-model/workflows/planning/locate-normalization.js +75 -0
- package/dist/lib/ai-model/workflows/planning/locate-normalization.js.map +1 -0
- package/dist/lib/ai-model/workflows/planning/planning-action-log.js +56 -0
- package/dist/lib/ai-model/workflows/planning/planning-action-log.js.map +1 -0
- package/dist/lib/ai-model/workflows/planning/standard-planning-parser.js +142 -0
- package/dist/lib/ai-model/workflows/planning/standard-planning-parser.js.map +1 -0
- package/dist/lib/ai-model/workflows/planning/standard-planning.js +253 -0
- package/dist/lib/ai-model/workflows/planning/standard-planning.js.map +1 -0
- package/dist/lib/ai-model/workflows/planning/types.js +20 -0
- package/dist/lib/ai-model/workflows/planning/types.js.map +1 -0
- package/dist/lib/ai-model/workflows/recorder-generation/common.js +232 -0
- package/dist/lib/ai-model/workflows/recorder-generation/common.js.map +1 -0
- package/dist/lib/ai-model/workflows/recorder-generation/index.js +68 -0
- package/dist/lib/ai-model/workflows/recorder-generation/index.js.map +1 -0
- package/dist/lib/ai-model/workflows/recorder-generation/markdown.js +293 -0
- package/dist/lib/ai-model/workflows/recorder-generation/markdown.js.map +1 -0
- package/dist/lib/ai-model/workflows/recorder-generation/metadata.js +117 -0
- package/dist/lib/ai-model/workflows/recorder-generation/metadata.js.map +1 -0
- package/dist/lib/ai-model/workflows/recorder-generation/playwright.js +184 -0
- package/dist/lib/ai-model/workflows/recorder-generation/playwright.js.map +1 -0
- package/dist/lib/ai-model/workflows/recorder-generation/yaml.js +232 -0
- package/dist/lib/ai-model/workflows/recorder-generation/yaml.js.map +1 -0
- package/dist/lib/common.js +18 -1
- package/dist/lib/common.js.map +1 -1
- package/dist/lib/constants.js +38 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/device/index.js.map +1 -1
- package/dist/lib/device/input-strategy.js +80 -0
- package/dist/lib/device/input-strategy.js.map +1 -0
- package/dist/lib/dump/html-utils.js +18 -0
- package/dist/lib/dump/html-utils.js.map +1 -1
- package/dist/lib/dump/image-reference.js +115 -0
- package/dist/lib/dump/image-reference.js.map +1 -0
- package/dist/lib/dump/report-action-dump.js +284 -0
- package/dist/lib/dump/report-action-dump.js.map +1 -0
- package/dist/lib/dump/report-dump-compactor.js +234 -0
- package/dist/lib/dump/report-dump-compactor.js.map +1 -0
- package/dist/lib/dump/screenshot-store.js +146 -38
- package/dist/lib/dump/screenshot-store.js.map +1 -1
- package/dist/lib/dump/task-service-dump.js +54 -0
- package/dist/lib/dump/task-service-dump.js.map +1 -0
- package/dist/lib/dump/task-status.js +55 -0
- package/dist/lib/dump/task-status.js.map +1 -0
- package/dist/lib/element-describer.js +238 -0
- package/dist/lib/element-describer.js.map +1 -0
- package/dist/lib/errors.js +54 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/report-html-template.js +38 -0
- package/dist/lib/report-html-template.js.map +1 -0
- package/dist/lib/report-stats.js +147 -0
- package/dist/lib/report-stats.js.map +1 -0
- package/dist/lib/screenshot-item.js +7 -2
- package/dist/lib/screenshot-item.js.map +1 -1
- package/dist/lib/service/index.js +10 -5
- package/dist/lib/service/index.js.map +1 -1
- package/dist/lib/task-runner.js.map +1 -1
- package/dist/lib/types.js +2 -2
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/utils.js +1 -1
- package/dist/lib/yaml/cleanup.js +47 -0
- package/dist/lib/yaml/cleanup.js.map +1 -0
- package/dist/types/agent/agent.d.ts +5 -9
- package/dist/types/agent/cache-config.d.ts +2 -0
- package/dist/types/agent/file-chooser.d.ts +19 -0
- package/dist/types/agent/insight.d.ts +21 -0
- package/dist/types/agent/metrics.d.ts +48 -0
- package/dist/types/agent/progress/ai-act-progress.d.ts +21 -0
- package/dist/types/agent/progress/index.d.ts +2 -0
- package/dist/types/agent/progress/progress-bus.d.ts +33 -0
- package/dist/types/agent/prompt-context.d.ts +3 -0
- package/dist/types/agent/record-to-report.d.ts +2 -0
- package/dist/types/agent/run-gherkin-scenario.d.ts +26 -0
- package/dist/types/agent/run-markdown.d.ts +6 -0
- package/dist/types/agent/screenshot-preparation.d.ts +20 -0
- package/dist/types/agent/ui-observer.d.ts +103 -0
- package/dist/types/agent/utils.d.ts +12 -1
- package/dist/types/ai-model/connectivity/fixture.d.ts +5 -0
- package/dist/types/ai-model/connectivity/index.d.ts +1 -0
- package/dist/types/ai-model/connectivity/run-connectivity-test.d.ts +11 -0
- package/dist/types/ai-model/index.d.ts +2 -0
- package/dist/types/ai-model/model-adapter/chat-completion.d.ts +2 -0
- package/dist/types/ai-model/model-adapter/custom-planning-action.d.ts +25 -0
- package/dist/types/ai-model/model-adapter/custom-planning-types.d.ts +31 -0
- package/dist/types/ai-model/model-adapter/default-insight-protocol.d.ts +2 -0
- package/dist/types/ai-model/model-adapter/default-locate-protocol.d.ts +7 -0
- package/dist/types/ai-model/model-adapter/default-planning-protocol.d.ts +25 -0
- package/dist/types/ai-model/model-adapter/image-preprocess.d.ts +30 -0
- package/dist/types/ai-model/model-adapter/index.d.ts +2 -0
- package/dist/types/ai-model/model-adapter/insight-protocol.d.ts +24 -0
- package/dist/types/ai-model/model-adapter/insight.d.ts +3 -0
- package/dist/types/ai-model/model-adapter/locate-protocol.d.ts +23 -0
- package/dist/types/ai-model/model-adapter/locate.d.ts +4 -0
- package/dist/types/ai-model/model-adapter/planning-protocol.d.ts +53 -0
- package/dist/types/ai-model/model-adapter/planning.d.ts +6 -0
- package/dist/types/ai-model/model-adapter/resolve.d.ts +12 -0
- package/dist/types/ai-model/model-adapter/types.d.ts +218 -0
- package/dist/types/ai-model/models/auto-glm/actions.d.ts +81 -0
- package/dist/types/ai-model/models/auto-glm/adapter.d.ts +5 -0
- package/dist/types/ai-model/models/auto-glm/locate.d.ts +2 -0
- package/dist/types/ai-model/models/auto-glm/parser.d.ts +14 -0
- package/dist/types/ai-model/models/auto-glm/planning.d.ts +5 -0
- package/dist/types/ai-model/models/auto-glm/prompt.d.ts +4 -0
- package/dist/types/ai-model/models/deepseek/adapter.d.ts +39 -0
- package/dist/types/ai-model/models/deepseek/locate-protocol.d.ts +5 -0
- package/dist/types/ai-model/models/default.d.ts +2 -0
- package/dist/types/ai-model/models/doubao.d.ts +7 -0
- package/dist/types/ai-model/models/gemini.d.ts +37 -0
- package/dist/types/ai-model/models/glm.d.ts +21 -0
- package/dist/types/ai-model/models/gpt.d.ts +20 -0
- package/dist/types/ai-model/models/index.d.ts +2 -0
- package/dist/types/ai-model/models/kimi.d.ts +45 -0
- package/dist/types/ai-model/models/mimo.d.ts +10 -0
- package/dist/types/ai-model/models/qwen.d.ts +33 -0
- package/dist/types/ai-model/models/registry.d.ts +187 -0
- package/dist/types/ai-model/models/ui-tars/actions.d.ts +3 -0
- package/dist/types/ai-model/models/ui-tars/adapter.d.ts +6 -0
- package/dist/types/ai-model/models/ui-tars/parser.d.ts +72 -0
- package/dist/types/ai-model/models/ui-tars/planning.d.ts +4 -0
- package/dist/types/ai-model/models/ui-tars/prompt.d.ts +2 -0
- package/dist/types/ai-model/models/utils/intent.d.ts +2 -0
- package/dist/types/ai-model/prompt/insight/index.d.ts +2 -0
- package/dist/types/ai-model/prompt/insight/system-prompt.d.ts +6 -0
- package/dist/types/ai-model/prompt/insight/user-prompt.d.ts +3 -0
- package/dist/types/ai-model/prompt/locate/element-system-prompt.d.ts +4 -0
- package/dist/types/ai-model/prompt/locate/grounding-rules.d.ts +1 -0
- package/dist/types/ai-model/prompt/locate/index.d.ts +3 -0
- package/dist/types/ai-model/prompt/locate/search-area-system-prompt.d.ts +4 -0
- package/dist/types/ai-model/prompt/planning/action-output-example.d.ts +17 -0
- package/dist/types/ai-model/prompt/planning/action-space-description.d.ts +11 -0
- package/dist/types/ai-model/prompt/planning/index.d.ts +6 -0
- package/dist/types/ai-model/prompt/planning/multi-turn-example.d.ts +10 -0
- package/dist/types/ai-model/prompt/planning/planning-response-example.d.ts +28 -0
- package/dist/types/ai-model/prompt/planning/sub-goals-text.d.ts +2 -0
- package/dist/types/ai-model/prompt/planning/system-prompt.d.ts +18 -0
- package/dist/types/ai-model/service-caller/index.d.ts +21 -6
- package/dist/types/ai-model/service-caller/model-call-recorder.d.ts +12 -0
- package/dist/types/ai-model/service-caller/openai-error.d.ts +26 -0
- package/dist/types/ai-model/service-caller/proxy-deps.node.d.ts +2 -0
- package/dist/types/ai-model/service-caller/proxy-deps.stub.d.ts +2 -0
- package/dist/types/ai-model/service-caller/semantic-retry.d.ts +30 -0
- package/dist/types/ai-model/service-caller/types.d.ts +2 -0
- package/dist/types/ai-model/shared/action-schema.d.ts +4 -0
- package/dist/types/ai-model/shared/json.d.ts +26 -0
- package/dist/types/ai-model/shared/model-locate-result/bbox.d.ts +6 -0
- package/dist/types/ai-model/shared/model-locate-result/coordinate-distance.d.ts +4 -0
- package/dist/types/ai-model/shared/model-locate-result/errors.d.ts +2 -0
- package/dist/types/ai-model/shared/model-locate-result/factory.d.ts +3 -0
- package/dist/types/ai-model/shared/model-locate-result/index.d.ts +7 -0
- package/dist/types/ai-model/shared/model-locate-result/parse.d.ts +8 -0
- package/dist/types/ai-model/shared/model-locate-result/pixel-bbox-mapper.d.ts +7 -0
- package/dist/types/ai-model/shared/model-locate-result/prompt-spec.d.ts +6 -0
- package/dist/types/ai-model/shared/model-locate-result/types.d.ts +150 -0
- package/dist/types/ai-model/shared/multimodal-prompt.d.ts +13 -0
- package/dist/types/ai-model/shared/xml.d.ts +15 -0
- package/dist/types/ai-model/workflows/grounding/index.d.ts +3 -0
- package/dist/types/ai-model/workflows/grounding/locate-result-rect.d.ts +5 -0
- package/dist/types/ai-model/workflows/grounding/locate.d.ts +7 -0
- package/dist/types/ai-model/workflows/grounding/planning-action-locate.d.ts +4 -0
- package/dist/types/ai-model/workflows/grounding/search-area-mapping.d.ts +4 -0
- package/dist/types/ai-model/workflows/grounding/search-area.d.ts +18 -0
- package/dist/types/ai-model/workflows/grounding/section-locate.d.ts +16 -0
- package/dist/types/ai-model/workflows/grounding/types.d.ts +56 -0
- package/dist/types/ai-model/workflows/grounding/utils.d.ts +25 -0
- package/dist/types/ai-model/workflows/insight/extraction.d.ts +18 -0
- package/dist/types/ai-model/workflows/insight/index.d.ts +2 -0
- package/dist/types/ai-model/workflows/insight/insight-response-parser.d.ts +4 -0
- package/dist/types/ai-model/workflows/insight/order-sensitive.d.ts +6 -0
- package/dist/types/ai-model/workflows/planning/conversation-history.d.ts +105 -0
- package/dist/types/ai-model/workflows/planning/custom-planning.d.ts +7 -0
- package/dist/types/ai-model/workflows/planning/index.d.ts +3 -0
- package/dist/types/ai-model/workflows/planning/locate-normalization.d.ts +12 -0
- package/dist/types/ai-model/workflows/planning/planning-action-log.d.ts +2 -0
- package/dist/types/ai-model/workflows/planning/standard-planning-parser.d.ts +31 -0
- package/dist/types/ai-model/workflows/planning/standard-planning.d.ts +4 -0
- package/dist/types/ai-model/workflows/planning/types.d.ts +16 -0
- package/dist/types/ai-model/workflows/recorder-generation/common.d.ts +89 -0
- package/dist/types/ai-model/workflows/recorder-generation/index.d.ts +7 -0
- package/dist/types/ai-model/workflows/recorder-generation/markdown.d.ts +7 -0
- package/dist/types/ai-model/workflows/recorder-generation/metadata.d.ts +13 -0
- package/dist/types/ai-model/workflows/recorder-generation/playwright.d.ts +26 -0
- package/dist/types/ai-model/workflows/recorder-generation/yaml.d.ts +17 -0
- package/dist/types/common.d.ts +2 -0
- package/dist/types/constants.d.ts +1 -0
- package/dist/types/device/index.d.ts +15 -4
- package/dist/types/device/input-strategy.d.ts +44 -0
- package/dist/types/dump/html-utils.d.ts +1 -0
- package/dist/types/dump/image-reference.d.ts +36 -0
- package/dist/types/dump/report-action-dump.d.ts +127 -0
- package/dist/types/dump/report-dump-compactor.d.ts +7 -0
- package/dist/types/dump/screenshot-store.d.ts +32 -15
- package/dist/types/dump/task-service-dump.d.ts +3 -0
- package/dist/types/dump/task-status.d.ts +41 -0
- package/dist/types/element-describer.d.ts +43 -0
- package/dist/types/errors.d.ts +5 -0
- package/dist/types/report-html-template.d.ts +1 -0
- package/dist/types/report-stats.d.ts +39 -0
- package/dist/types/screenshot-item.d.ts +1 -0
- package/dist/types/service/index.d.ts +6 -2
- package/dist/types/task-runner.d.ts +6 -0
- package/dist/types/types.d.ts +98 -5
- package/dist/types/yaml/cleanup.d.ts +2 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent/utils.js","sources":["webpack/runtime/compat_get_default_export","webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/agent/utils.ts"],"sourcesContent":["// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { TMultimodalPrompt, TUserPrompt } from '@/common';\nimport type { AbstractInterface } from '@/device';\nimport { ScreenshotItem } from '@/screenshot-item';\nimport type {\n ElementCacheFeature,\n LocateResultElement,\n PlanningLocateParam,\n Rect,\n UIContext,\n} from '@/types';\nimport { uploadTestInfoToServer } from '@/utils';\nimport type { TModelFamily } from '@aiscene/shared/env';\nimport {\n MIDSCENE_REPORT_QUIET,\n MIDSCENE_REPORT_TAG_NAME,\n globalConfigManager,\n} from '@aiscene/shared/env';\nimport { generateElementByRect } from '@aiscene/shared/extractor';\nimport { imageInfoOfBase64, resizeImgBase64 } from '@aiscene/shared/img';\nimport { getDebug } from '@aiscene/shared/logger';\nimport { _keyDefinitions } from '@aiscene/shared/us-keyboard-layout';\nimport { assert, logMsg, uuid } from '@aiscene/shared/utils';\nimport dayjs from 'dayjs';\nimport type { TaskCache } from './task-cache';\nimport { debug as cacheDebug } from './task-cache';\n\nexport async function commonContextParser(\n interfaceInstance: AbstractInterface,\n _opt: {\n uploadServerUrl?: string;\n screenshotShrinkFactor?: number;\n modelFamily?: TModelFamily;\n },\n): Promise<UIContext> {\n const debug = getDebug('commonContextParser');\n\n assert(interfaceInstance, 'interfaceInstance is required');\n\n debug('Getting interface description');\n const description = interfaceInstance.describe?.() || '';\n debug('Interface description end');\n\n debug('Uploading test info to server');\n uploadTestInfoToServer({\n testUrl: description,\n serverUrl: _opt.uploadServerUrl,\n });\n debug('UploadTestInfoToServer end');\n\n debug('will get size');\n const interfaceSize = await interfaceInstance.size();\n const { width: logicalWidth, height: logicalHeight } = interfaceSize;\n\n if ((interfaceSize as unknown as { dpr: number }).dpr) {\n console.warn(\n 'Warning: return value of interface.size() include a dpr property, which is not expected and ignored. ',\n );\n }\n\n if (!Number.isFinite(logicalWidth) || !Number.isFinite(logicalHeight)) {\n throw new Error(\n `Invalid interface size: width and height must be finite numbers. Received width: ${logicalWidth}, height: ${logicalHeight}`,\n );\n }\n\n if (logicalWidth <= 0 || logicalHeight <= 0) {\n throw new Error(\n `Invalid interface size: width and height must be positive numbers. Received width: ${logicalWidth}, height: ${logicalHeight}`,\n );\n }\n\n debug(`size: ${logicalWidth}x${logicalHeight}`);\n\n const screenshotBase64 = await interfaceInstance.screenshotBase64();\n const screenshotCapturedAt = Date.now();\n assert(screenshotBase64!, 'screenshotBase64 is required');\n\n // Get physical screenshot dimensions\n debug('will get screenshot dimensions');\n const { width: imgWidth, height: imgHeight } =\n await imageInfoOfBase64(screenshotBase64);\n\n if (!Number.isFinite(imgWidth) || !Number.isFinite(imgHeight)) {\n throw new Error(\n `Invalid screenshot dimensions: width and height must be finite numbers. Received width: ${imgWidth}, height: ${imgHeight}`,\n );\n }\n if (imgWidth <= 0 || imgHeight <= 0) {\n throw new Error(\n `Invalid screenshot dimensions: width and height must be positive numbers. Received width: ${imgWidth}, height: ${imgHeight}`,\n );\n }\n debug('screenshot dimensions', imgWidth, 'x', imgHeight);\n\n // Detect orientation mismatch between logical size and screenshot.\n // Some devices (e.g. OPPO) report wrong orientation via ADB, causing\n // size() to return portrait dimensions even when the device is landscape.\n // We detect this by comparing aspect ratios and swap if they disagree.\n const logicalIsPortrait = logicalWidth < logicalHeight;\n const screenshotIsPortrait = imgWidth < imgHeight;\n let finalLogicalWidth = logicalWidth;\n let finalLogicalHeight = logicalHeight;\n if (logicalIsPortrait !== screenshotIsPortrait) {\n debug(\n `Orientation mismatch detected: logical size ${logicalWidth}x${logicalHeight} (${logicalIsPortrait ? 'portrait' : 'landscape'}) vs screenshot ${imgWidth}x${imgHeight} (${screenshotIsPortrait ? 'portrait' : 'landscape'}). Swapping logical dimensions.`,\n );\n finalLogicalWidth = logicalHeight;\n finalLogicalHeight = logicalWidth;\n }\n\n const userShrinkFactor = _opt.screenshotShrinkFactor ?? 1;\n\n if (!Number.isFinite(userShrinkFactor) || userShrinkFactor < 1) {\n throw new Error(\n `Invalid screenshotShrinkFactor: must be a finite number >= 1. Received: ${userShrinkFactor}`,\n );\n }\n\n const dpr = imgWidth / finalLogicalWidth;\n\n debug('calculated dpr:', dpr);\n\n const shrunkShotToLogicalRatio = dpr / userShrinkFactor;\n\n debug('shrunkShotToLogicalRatio', shrunkShotToLogicalRatio);\n\n if (userShrinkFactor !== 1) {\n const targetWidth = Math.round(imgWidth / userShrinkFactor);\n const targetHeight = Math.round(imgHeight / userShrinkFactor);\n\n debug(\n `Applying screenshot shrink factor: ${userShrinkFactor} (physical: ${imgWidth}x${imgHeight} -> target: ${targetWidth}x${targetHeight})`,\n );\n\n const resizedBase64 = await resizeImgBase64(screenshotBase64, {\n width: targetWidth,\n height: targetHeight,\n });\n return {\n shotSize: {\n width: targetWidth,\n height: targetHeight,\n },\n deprecatedDpr: dpr,\n screenshot: ScreenshotItem.create(resizedBase64, screenshotCapturedAt),\n shrunkShotToLogicalRatio,\n };\n }\n\n return {\n shotSize: {\n width: imgWidth,\n height: imgHeight,\n },\n deprecatedDpr: dpr,\n screenshot: ScreenshotItem.create(screenshotBase64, screenshotCapturedAt),\n shrunkShotToLogicalRatio,\n };\n}\n\nexport function getReportFileName(tag = 'web') {\n const reportTagName = globalConfigManager.getEnvConfigValue(\n MIDSCENE_REPORT_TAG_NAME,\n );\n const dateTimeInFileName = dayjs().format('YYYY-MM-DD_HH-mm-ss');\n // ensure uniqueness at the same time\n const uniqueId = uuid().substring(0, 8);\n return `${reportTagName || tag}-${dateTimeInFileName}-${uniqueId}`;\n}\n\nexport function printReportMsg(filepath: string) {\n if (globalConfigManager.getEnvConfigInBoolean(MIDSCENE_REPORT_QUIET)) {\n return;\n }\n logMsg(`Midscene - report file updated: ${filepath}`);\n}\n\nexport function ifPlanLocateParamIsBbox(\n planLocateParam: PlanningLocateParam,\n): boolean {\n return !!(\n planLocateParam.bbox &&\n Array.isArray(planLocateParam.bbox) &&\n planLocateParam.bbox.length === 4\n );\n}\n\nexport function matchElementFromPlan(\n planLocateParam: PlanningLocateParam,\n): LocateResultElement | undefined {\n if (!planLocateParam) {\n return undefined;\n }\n\n if (planLocateParam.bbox) {\n // Convert bbox [x1, y1, x2, y2] to rect {left, top, width, height}\n const rect = {\n left: planLocateParam.bbox[0],\n top: planLocateParam.bbox[1],\n width: planLocateParam.bbox[2] - planLocateParam.bbox[0] + 1,\n height: planLocateParam.bbox[3] - planLocateParam.bbox[1] + 1,\n };\n\n const element = generateElementByRect(\n rect,\n typeof planLocateParam.prompt === 'string'\n ? planLocateParam.prompt\n : planLocateParam.prompt?.prompt || '',\n );\n return element;\n }\n\n return undefined;\n}\n\nexport async function matchElementFromCache(\n context: {\n taskCache?: TaskCache;\n interfaceInstance: AbstractInterface;\n },\n cacheEntry: ElementCacheFeature | undefined,\n cachePrompt: TUserPrompt,\n cacheable: boolean | undefined,\n): Promise<LocateResultElement | undefined> {\n if (!cacheEntry) {\n return undefined;\n }\n\n if (cacheable === false) {\n cacheDebug('cache disabled for prompt: %s', cachePrompt);\n return undefined;\n }\n\n if (!context.taskCache?.isCacheResultUsed) {\n return undefined;\n }\n\n if (!context.interfaceInstance.rectMatchesCacheFeature) {\n cacheDebug(\n 'interface does not implement rectMatchesCacheFeature, skip cache',\n );\n return undefined;\n }\n\n try {\n const rect =\n await context.interfaceInstance.rectMatchesCacheFeature(cacheEntry);\n const element: LocateResultElement = {\n center: [\n Math.round(rect.left + rect.width / 2),\n Math.round(rect.top + rect.height / 2),\n ],\n rect,\n description:\n typeof cachePrompt === 'string'\n ? cachePrompt\n : cachePrompt.prompt || '',\n };\n\n cacheDebug('cache hit, prompt: %s', cachePrompt);\n return element;\n } catch (error) {\n cacheDebug('rectMatchesCacheFeature error: %s', error);\n return undefined;\n }\n}\n\ndeclare const __VERSION__: string | undefined;\n\nexport const getMidsceneVersion = (): string => {\n if (typeof __VERSION__ !== 'undefined') {\n return __VERSION__;\n } else if (\n process.env.__VERSION__ &&\n process.env.__VERSION__ !== 'undefined'\n ) {\n return process.env.__VERSION__;\n }\n throw new Error('__VERSION__ inject failed during build');\n};\n\nexport const parsePrompt = (\n prompt: TUserPrompt,\n): {\n textPrompt: string;\n multimodalPrompt?: TMultimodalPrompt;\n} => {\n if (typeof prompt === 'string') {\n return {\n textPrompt: prompt,\n multimodalPrompt: undefined,\n };\n }\n return {\n textPrompt: prompt.prompt,\n multimodalPrompt: prompt.images\n ? {\n images: prompt.images,\n convertHttpImage2Base64: !!prompt.convertHttpImage2Base64,\n }\n : undefined,\n };\n};\n\nexport const transformLogicalElementToScreenshot = (\n element: LocateResultElement,\n shrunkShotToLogicalRatio: number,\n): LocateResultElement => {\n if (shrunkShotToLogicalRatio === 1) {\n return element;\n }\n\n return {\n ...element,\n center: [\n Math.round(element.center[0] * shrunkShotToLogicalRatio),\n Math.round(element.center[1] * shrunkShotToLogicalRatio),\n ],\n rect: {\n ...element.rect,\n left: Math.round(element.rect.left * shrunkShotToLogicalRatio),\n top: Math.round(element.rect.top * shrunkShotToLogicalRatio),\n width: Math.round(element.rect.width * shrunkShotToLogicalRatio),\n height: Math.round(element.rect.height * shrunkShotToLogicalRatio),\n },\n };\n};\n\nexport const transformLogicalRectToScreenshotRect = (\n rect: Rect,\n shrunkShotToLogicalRatio: number,\n): Rect => {\n if (shrunkShotToLogicalRatio === 1) {\n return rect;\n }\n\n return {\n ...rect,\n left: Math.round(rect.left * shrunkShotToLogicalRatio),\n top: Math.round(rect.top * shrunkShotToLogicalRatio),\n width: Math.round(rect.width * shrunkShotToLogicalRatio),\n height: Math.round(rect.height * shrunkShotToLogicalRatio),\n };\n};\n"],"names":["__webpack_require__","module","getter","definition","key","Object","obj","prop","Symbol","commonContextParser","interfaceInstance","_opt","debug","getDebug","assert","description","uploadTestInfoToServer","interfaceSize","logicalWidth","logicalHeight","console","Number","Error","screenshotBase64","screenshotCapturedAt","Date","imgWidth","imgHeight","imageInfoOfBase64","logicalIsPortrait","screenshotIsPortrait","finalLogicalWidth","userShrinkFactor","dpr","shrunkShotToLogicalRatio","targetWidth","Math","targetHeight","resizedBase64","resizeImgBase64","ScreenshotItem","getReportFileName","tag","reportTagName","globalConfigManager","MIDSCENE_REPORT_TAG_NAME","dateTimeInFileName","dayjs","uniqueId","uuid","printReportMsg","filepath","MIDSCENE_REPORT_QUIET","logMsg","ifPlanLocateParamIsBbox","planLocateParam","Array","matchElementFromPlan","rect","element","generateElementByRect","matchElementFromCache","context","cacheEntry","cachePrompt","cacheable","cacheDebug","error","getMidsceneVersion","__VERSION__","parsePrompt","prompt","undefined","transformLogicalElementToScreenshot","transformLogicalRectToScreenshotRect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent/utils.js","sources":["webpack/runtime/compat_get_default_export","webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/agent/utils.ts"],"sourcesContent":["// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { TMultimodalPrompt, TUserPrompt } from '@/common';\nimport type { AbstractInterface } from '@/device';\nimport { ScreenshotItem } from '@/screenshot-item';\nimport { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type {\n ElementCacheFeature,\n LocateResultElement,\n PlanningLocateParam,\n Rect,\n Size,\n UIContext,\n} from '@/types';\nimport { uploadTestInfoToServer } from '@/utils';\nimport type { TModelFamily } from '@aiscene/shared/env';\nimport {\n MIDSCENE_REPORT_QUIET,\n MIDSCENE_REPORT_TAG_NAME,\n globalConfigManager,\n} from '@aiscene/shared/env';\nimport { generateElementByRect } from '@aiscene/shared/extractor';\nimport {\n createImgBase64ByFormat,\n imageInfoOfBase64,\n resizeImgBase64,\n} from '@aiscene/shared/img';\nimport { getDebug } from '@aiscene/shared/logger';\nimport { _keyDefinitions } from '@aiscene/shared/us-keyboard-layout';\nimport { assert, ifInBrowser, logMsg, uuid } from '@aiscene/shared/utils';\nimport dayjs from 'dayjs';\nimport type { TaskCache } from './task-cache';\nimport { debug as cacheDebug } from './task-cache';\n\nconst agentDebug = getDebug('agent');\nconst screenshotDataUrlPattern = /^data:image\\/[a-zA-Z0-9.+-]+;base64,/i;\n\nconst inferBase64ImageFormat = (base64Body: string) => {\n if (base64Body.startsWith('iVBORw0KGgo')) {\n return 'png';\n }\n return 'jpeg';\n};\n\nconst normalizeScreenshotBase64 = (screenshotBase64: string) => {\n const trimmedBase64 = screenshotBase64.trim();\n if (screenshotDataUrlPattern.test(trimmedBase64)) {\n return trimmedBase64;\n }\n\n const base64Body = trimmedBase64.replace(/\\s/g, '');\n assert(base64Body, 'screenshotBase64 must include image data');\n return createImgBase64ByFormat(\n inferBase64ImageFormat(base64Body),\n base64Body,\n );\n};\n\nexport async function commonContextParser(\n interfaceInstance: AbstractInterface,\n _opt: {\n uploadServerUrl?: string;\n screenshotShrinkFactor?: number;\n modelFamily?: TModelFamily;\n },\n): Promise<UIContext> {\n const debug = getDebug('commonContextParser');\n\n assert(interfaceInstance, 'interfaceInstance is required');\n\n debug('Getting interface description');\n const description = interfaceInstance.describe?.() || '';\n debug('Interface description end');\n\n debug('Uploading test info to server');\n uploadTestInfoToServer({\n testUrl: description,\n serverUrl: _opt.uploadServerUrl,\n });\n debug('UploadTestInfoToServer end');\n\n debug('will get size');\n const interfaceSize = await interfaceInstance.size();\n const { width: logicalWidth, height: logicalHeight } = interfaceSize;\n\n if ((interfaceSize as unknown as { dpr: number }).dpr) {\n console.warn(\n 'Warning: return value of interface.size() include a dpr property, which is not expected and ignored. ',\n );\n }\n\n if (!Number.isFinite(logicalWidth) || !Number.isFinite(logicalHeight)) {\n throw new Error(\n `Invalid interface size: width and height must be finite numbers. Received width: ${logicalWidth}, height: ${logicalHeight}`,\n );\n }\n\n if (logicalWidth <= 0 || logicalHeight <= 0) {\n throw new Error(\n `Invalid interface size: width and height must be positive numbers. Received width: ${logicalWidth}, height: ${logicalHeight}`,\n );\n }\n\n debug(`size: ${logicalWidth}x${logicalHeight}`);\n\n const screenshotBase64 = await interfaceInstance.screenshotBase64();\n const screenshotCapturedAt = Date.now();\n assert(screenshotBase64!, 'screenshotBase64 is required');\n\n // Get physical screenshot dimensions\n debug('will get screenshot dimensions');\n const { width: imgWidth, height: imgHeight } =\n await imageInfoOfBase64(screenshotBase64);\n\n if (!Number.isFinite(imgWidth) || !Number.isFinite(imgHeight)) {\n throw new Error(\n `Invalid screenshot dimensions: width and height must be finite numbers. Received width: ${imgWidth}, height: ${imgHeight}`,\n );\n }\n if (imgWidth <= 0 || imgHeight <= 0) {\n throw new Error(\n `Invalid screenshot dimensions: width and height must be positive numbers. Received width: ${imgWidth}, height: ${imgHeight}`,\n );\n }\n debug('screenshot dimensions', imgWidth, 'x', imgHeight);\n\n // Detect orientation mismatch between logical size and screenshot.\n // Some devices (e.g. OPPO) report wrong orientation via ADB, causing\n // size() to return portrait dimensions even when the device is landscape.\n // We detect this by comparing aspect ratios and swap if they disagree.\n const logicalIsPortrait = logicalWidth < logicalHeight;\n const screenshotIsPortrait = imgWidth < imgHeight;\n let finalLogicalWidth = logicalWidth;\n let finalLogicalHeight = logicalHeight;\n if (logicalIsPortrait !== screenshotIsPortrait) {\n debug(\n `Orientation mismatch detected: logical size ${logicalWidth}x${logicalHeight} (${logicalIsPortrait ? 'portrait' : 'landscape'}) vs screenshot ${imgWidth}x${imgHeight} (${screenshotIsPortrait ? 'portrait' : 'landscape'}). Swapping logical dimensions.`,\n );\n finalLogicalWidth = logicalHeight;\n finalLogicalHeight = logicalWidth;\n }\n\n const userShrinkFactor = _opt.screenshotShrinkFactor ?? 1;\n\n if (!Number.isFinite(userShrinkFactor) || userShrinkFactor < 1) {\n throw new Error(\n `Invalid screenshotShrinkFactor: must be a finite number >= 1. Received: ${userShrinkFactor}`,\n );\n }\n\n const dpr = imgWidth / finalLogicalWidth;\n\n debug('calculated dpr:', dpr);\n\n const shrunkShotToLogicalRatio = dpr / userShrinkFactor;\n\n debug('shrunkShotToLogicalRatio', shrunkShotToLogicalRatio);\n\n if (userShrinkFactor !== 1) {\n const targetWidth = Math.round(imgWidth / userShrinkFactor);\n const targetHeight = Math.round(imgHeight / userShrinkFactor);\n\n debug(\n `Applying screenshot shrink factor: ${userShrinkFactor} (physical: ${imgWidth}x${imgHeight} -> target: ${targetWidth}x${targetHeight})`,\n );\n\n const resizedBase64 = await resizeImgBase64(screenshotBase64, {\n width: targetWidth,\n height: targetHeight,\n });\n return {\n shotSize: {\n width: targetWidth,\n height: targetHeight,\n },\n deprecatedDpr: dpr,\n screenshot: ScreenshotItem.create(resizedBase64, screenshotCapturedAt),\n shrunkShotToLogicalRatio,\n };\n }\n\n return {\n shotSize: {\n width: imgWidth,\n height: imgHeight,\n },\n deprecatedDpr: dpr,\n screenshot: ScreenshotItem.create(screenshotBase64, screenshotCapturedAt),\n shrunkShotToLogicalRatio,\n };\n}\n\nexport async function createScreenshotBoundUIContext(\n screenshotBase64: string,\n opt: {\n screenshotSize?: Size;\n },\n): Promise<UIContext> {\n const normalizedScreenshotBase64 =\n normalizeScreenshotBase64(screenshotBase64);\n const actualScreenshotSize = await imageInfoOfBase64(\n normalizedScreenshotBase64,\n );\n if (\n opt.screenshotSize &&\n (opt.screenshotSize.width !== actualScreenshotSize.width ||\n opt.screenshotSize.height !== actualScreenshotSize.height)\n ) {\n agentDebug(\n 'describeElementAtPoint screenshotSize mismatch, use actual size',\n {\n provided: opt.screenshotSize,\n actual: actualScreenshotSize,\n },\n );\n }\n\n return {\n screenshot: ScreenshotItem.create(normalizedScreenshotBase64, Date.now()),\n shotSize: actualScreenshotSize,\n shrunkShotToLogicalRatio: 1,\n _isFrozen: true,\n };\n}\n\nexport function getReportFileName(tag = 'web') {\n const reportTagName = globalConfigManager.getEnvConfigValue(\n MIDSCENE_REPORT_TAG_NAME,\n );\n const dateTimeInFileName = dayjs().format('YYYY-MM-DD_HH-mm-ss');\n // ensure uniqueness at the same time\n const uniqueId = uuid().substring(0, 8);\n return `${reportTagName || tag}-${dateTimeInFileName}-${uniqueId}`;\n}\n\nexport function printReportMsg(filepath: string) {\n if (globalConfigManager.getEnvConfigInBoolean(MIDSCENE_REPORT_QUIET)) {\n return;\n }\n logMsg(`Midscene - report file updated: ${filepath}`);\n}\n\nexport function ifPlanLocateParamIsBbox(\n planLocateParam: PlanningLocateParam,\n): boolean {\n return !!(\n planLocateParam.bbox &&\n Array.isArray(planLocateParam.bbox) &&\n planLocateParam.bbox.length === 4\n );\n}\n\nexport function matchElementFromPlan(\n planLocateParam: PlanningLocateParam,\n): LocateResultElement | undefined {\n if (!planLocateParam) {\n return undefined;\n }\n\n if (planLocateParam.bbox) {\n // Convert bbox [x1, y1, x2, y2] to rect {left, top, width, height}\n const rect = {\n left: planLocateParam.bbox[0],\n top: planLocateParam.bbox[1],\n width: planLocateParam.bbox[2] - planLocateParam.bbox[0] + 1,\n height: planLocateParam.bbox[3] - planLocateParam.bbox[1] + 1,\n };\n\n const element = generateElementByRect(\n rect,\n typeof planLocateParam.prompt === 'string'\n ? planLocateParam.prompt\n : planLocateParam.prompt?.prompt || '',\n );\n return element;\n }\n\n return undefined;\n}\n\nexport async function matchElementFromCache(\n context: {\n taskCache?: TaskCache;\n interfaceInstance: AbstractInterface;\n },\n cacheEntry: ElementCacheFeature | undefined,\n cachePrompt: TUserPrompt,\n cacheable: boolean | undefined,\n): Promise<LocateResultElement | undefined> {\n if (!cacheEntry) {\n return undefined;\n }\n\n if (cacheable === false) {\n cacheDebug('cache disabled for prompt: %s', cachePrompt);\n return undefined;\n }\n\n if (!context.taskCache?.isCacheResultUsed) {\n return undefined;\n }\n\n if (!context.interfaceInstance.rectMatchesCacheFeature) {\n cacheDebug(\n 'interface does not implement rectMatchesCacheFeature, skip cache',\n );\n return undefined;\n }\n\n try {\n const rect =\n await context.interfaceInstance.rectMatchesCacheFeature(cacheEntry);\n const element: LocateResultElement = {\n center: [\n Math.round(rect.left + rect.width / 2),\n Math.round(rect.top + rect.height / 2),\n ],\n rect,\n description:\n typeof cachePrompt === 'string'\n ? cachePrompt\n : cachePrompt.prompt || '',\n };\n\n cacheDebug('cache hit, prompt: %s', cachePrompt);\n return element;\n } catch (error) {\n cacheDebug('rectMatchesCacheFeature error: %s', error);\n return undefined;\n }\n}\n\ndeclare const __VERSION__: string | undefined;\n\nexport const getMidsceneVersion = (): string => {\n if (typeof __VERSION__ !== 'undefined') {\n return __VERSION__;\n } else if (\n process.env.__VERSION__ &&\n process.env.__VERSION__ !== 'undefined'\n ) {\n return process.env.__VERSION__;\n }\n throw new Error('__VERSION__ inject failed during build');\n};\n\nexport const parsePrompt = (\n prompt: TUserPrompt,\n): {\n textPrompt: string;\n multimodalPrompt?: TMultimodalPrompt;\n} => {\n if (typeof prompt === 'string') {\n return {\n textPrompt: prompt,\n multimodalPrompt: undefined,\n };\n }\n return {\n textPrompt: prompt.prompt,\n multimodalPrompt: prompt.images\n ? {\n images: prompt.images,\n convertHttpImage2Base64: !!prompt.convertHttpImage2Base64,\n }\n : undefined,\n };\n};\n\ntype NormalizeFilePathsOptions = {\n fileExists?: (path: string) => boolean;\n isInBrowser?: boolean;\n resolvePath?: (path: string) => string;\n cwd?: string;\n};\n\nexport function normalizeFilePaths(\n files: string[],\n options: NormalizeFilePathsOptions = {},\n): string[] {\n const {\n fileExists = existsSync,\n isInBrowser = ifInBrowser,\n resolvePath = resolve,\n cwd = process.cwd(),\n } = options;\n\n if (isInBrowser) {\n throw new Error('File chooser is not supported in browser environment');\n }\n\n return files.map((file) => {\n const absolutePath = resolvePath(file);\n if (!fileExists(absolutePath)) {\n throw new Error(\n `File not found: ${file}. Resolved to: ${absolutePath}. Current working directory: ${cwd}`,\n );\n }\n return absolutePath;\n });\n}\n\nexport const transformLogicalElementToScreenshot = (\n element: LocateResultElement,\n shrunkShotToLogicalRatio: number,\n): LocateResultElement => {\n if (shrunkShotToLogicalRatio === 1) {\n return element;\n }\n\n return {\n ...element,\n center: [\n Math.round(element.center[0] * shrunkShotToLogicalRatio),\n Math.round(element.center[1] * shrunkShotToLogicalRatio),\n ],\n rect: {\n ...element.rect,\n left: Math.round(element.rect.left * shrunkShotToLogicalRatio),\n top: Math.round(element.rect.top * shrunkShotToLogicalRatio),\n width: Math.round(element.rect.width * shrunkShotToLogicalRatio),\n height: Math.round(element.rect.height * shrunkShotToLogicalRatio),\n },\n };\n};\n\nexport const transformLogicalRectToScreenshotRect = (\n rect: Rect,\n shrunkShotToLogicalRatio: number,\n): Rect => {\n if (shrunkShotToLogicalRatio === 1) {\n return rect;\n }\n\n return {\n ...rect,\n left: Math.round(rect.left * shrunkShotToLogicalRatio),\n top: Math.round(rect.top * shrunkShotToLogicalRatio),\n width: Math.round(rect.width * shrunkShotToLogicalRatio),\n height: Math.round(rect.height * shrunkShotToLogicalRatio),\n };\n};\n"],"names":["__webpack_require__","module","getter","definition","key","Object","obj","prop","Symbol","agentDebug","getDebug","screenshotDataUrlPattern","inferBase64ImageFormat","base64Body","normalizeScreenshotBase64","screenshotBase64","trimmedBase64","assert","createImgBase64ByFormat","commonContextParser","interfaceInstance","_opt","debug","description","uploadTestInfoToServer","interfaceSize","logicalWidth","logicalHeight","console","Number","Error","screenshotCapturedAt","Date","imgWidth","imgHeight","imageInfoOfBase64","logicalIsPortrait","screenshotIsPortrait","finalLogicalWidth","userShrinkFactor","dpr","shrunkShotToLogicalRatio","targetWidth","Math","targetHeight","resizedBase64","resizeImgBase64","ScreenshotItem","createScreenshotBoundUIContext","opt","normalizedScreenshotBase64","actualScreenshotSize","getReportFileName","tag","reportTagName","globalConfigManager","MIDSCENE_REPORT_TAG_NAME","dateTimeInFileName","dayjs","uniqueId","uuid","printReportMsg","filepath","MIDSCENE_REPORT_QUIET","logMsg","ifPlanLocateParamIsBbox","planLocateParam","Array","matchElementFromPlan","rect","element","generateElementByRect","matchElementFromCache","context","cacheEntry","cachePrompt","cacheable","cacheDebug","error","getMidsceneVersion","__VERSION__","parsePrompt","prompt","undefined","normalizeFilePaths","files","options","fileExists","existsSync","isInBrowser","ifInBrowser","resolvePath","resolve","cwd","process","file","absolutePath","transformLogicalElementToScreenshot","transformLogicalRectToScreenshotRect"],"mappings":";;;IACAA,oBAAoB,CAAC,GAAG,CAACC;QACxB,IAAIC,SAASD,UAAUA,OAAO,UAAU,GACvC,IAAOA,MAAM,CAAC,UAAU,GACxB,IAAOA;QACRD,oBAAoB,CAAC,CAACE,QAAQ;YAAE,GAAGA;QAAO;QAC1C,OAAOA;IACR;;;ICPAF,oBAAoB,CAAC,GAAG,CAAC,UAASG;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGH,oBAAoB,CAAC,CAACG,YAAYC,QAAQ,CAACJ,oBAAoB,CAAC,CAAC,UAASI,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAJ,oBAAoB,CAAC,GAAG,CAACM,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFP,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOQ,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC2BA,MAAMI,aAAaC,AAAAA,IAAAA,uBAAAA,QAAAA,AAAAA,EAAS;AAC5B,MAAMC,2BAA2B;AAEjC,MAAMC,yBAAyB,CAACC;IAC9B,IAAIA,WAAW,UAAU,CAAC,gBACxB,OAAO;IAET,OAAO;AACT;AAEA,MAAMC,4BAA4B,CAACC;IACjC,MAAMC,gBAAgBD,iBAAiB,IAAI;IAC3C,IAAIJ,yBAAyB,IAAI,CAACK,gBAChC,OAAOA;IAGT,MAAMH,aAAaG,cAAc,OAAO,CAAC,OAAO;IAChDC,IAAAA,sBAAAA,MAAAA,AAAAA,EAAOJ,YAAY;IACnB,OAAOK,AAAAA,IAAAA,oBAAAA,uBAAAA,AAAAA,EACLN,uBAAuBC,aACvBA;AAEJ;AAEO,eAAeM,oBACpBC,iBAAoC,EACpCC,IAIC;IAED,MAAMC,QAAQZ,AAAAA,IAAAA,uBAAAA,QAAAA,AAAAA,EAAS;IAEvBO,IAAAA,sBAAAA,MAAAA,AAAAA,EAAOG,mBAAmB;IAE1BE,MAAM;IACN,MAAMC,cAAcH,kBAAkB,QAAQ,QAAQ;IACtDE,MAAM;IAENA,MAAM;IACNE,IAAAA,kCAAAA,sBAAAA,AAAAA,EAAuB;QACrB,SAASD;QACT,WAAWF,KAAK,eAAe;IACjC;IACAC,MAAM;IAENA,MAAM;IACN,MAAMG,gBAAgB,MAAML,kBAAkB,IAAI;IAClD,MAAM,EAAE,OAAOM,YAAY,EAAE,QAAQC,aAAa,EAAE,GAAGF;IAEvD,IAAKA,cAA6C,GAAG,EACnDG,QAAQ,IAAI,CACV;IAIJ,IAAI,CAACC,OAAO,QAAQ,CAACH,iBAAiB,CAACG,OAAO,QAAQ,CAACF,gBACrD,MAAM,IAAIG,MACR,CAAC,iFAAiF,EAAEJ,aAAa,UAAU,EAAEC,eAAe;IAIhI,IAAID,gBAAgB,KAAKC,iBAAiB,GACxC,MAAM,IAAIG,MACR,CAAC,mFAAmF,EAAEJ,aAAa,UAAU,EAAEC,eAAe;IAIlIL,MAAM,CAAC,MAAM,EAAEI,aAAa,CAAC,EAAEC,eAAe;IAE9C,MAAMZ,mBAAmB,MAAMK,kBAAkB,gBAAgB;IACjE,MAAMW,uBAAuBC,KAAK,GAAG;IACrCf,IAAAA,sBAAAA,MAAAA,AAAAA,EAAOF,kBAAmB;IAG1BO,MAAM;IACN,MAAM,EAAE,OAAOW,QAAQ,EAAE,QAAQC,SAAS,EAAE,GAC1C,MAAMC,AAAAA,IAAAA,oBAAAA,iBAAAA,AAAAA,EAAkBpB;IAE1B,IAAI,CAACc,OAAO,QAAQ,CAACI,aAAa,CAACJ,OAAO,QAAQ,CAACK,YACjD,MAAM,IAAIJ,MACR,CAAC,wFAAwF,EAAEG,SAAS,UAAU,EAAEC,WAAW;IAG/H,IAAID,YAAY,KAAKC,aAAa,GAChC,MAAM,IAAIJ,MACR,CAAC,0FAA0F,EAAEG,SAAS,UAAU,EAAEC,WAAW;IAGjIZ,MAAM,yBAAyBW,UAAU,KAAKC;IAM9C,MAAME,oBAAoBV,eAAeC;IACzC,MAAMU,uBAAuBJ,WAAWC;IACxC,IAAII,oBAAoBZ;IAExB,IAAIU,sBAAsBC,sBAAsB;QAC9Cf,MACE,CAAC,4CAA4C,EAAEI,aAAa,CAAC,EAAEC,cAAc,EAAE,EAAES,oBAAoB,aAAa,YAAY,gBAAgB,EAAEH,SAAS,CAAC,EAAEC,UAAU,EAAE,EAAEG,uBAAuB,aAAa,YAAY,+BAA+B,CAAC;QAE5PC,oBAAoBX;IAEtB;IAEA,MAAMY,mBAAmBlB,KAAK,sBAAsB,IAAI;IAExD,IAAI,CAACQ,OAAO,QAAQ,CAACU,qBAAqBA,mBAAmB,GAC3D,MAAM,IAAIT,MACR,CAAC,wEAAwE,EAAES,kBAAkB;IAIjG,MAAMC,MAAMP,WAAWK;IAEvBhB,MAAM,mBAAmBkB;IAEzB,MAAMC,2BAA2BD,MAAMD;IAEvCjB,MAAM,4BAA4BmB;IAElC,IAAIF,AAAqB,MAArBA,kBAAwB;QAC1B,MAAMG,cAAcC,KAAK,KAAK,CAACV,WAAWM;QAC1C,MAAMK,eAAeD,KAAK,KAAK,CAACT,YAAYK;QAE5CjB,MACE,CAAC,mCAAmC,EAAEiB,iBAAiB,YAAY,EAAEN,SAAS,CAAC,EAAEC,UAAU,YAAY,EAAEQ,YAAY,CAAC,EAAEE,aAAa,CAAC,CAAC;QAGzI,MAAMC,gBAAgB,MAAMC,AAAAA,IAAAA,oBAAAA,eAAAA,AAAAA,EAAgB/B,kBAAkB;YAC5D,OAAO2B;YACP,QAAQE;QACV;QACA,OAAO;YACL,UAAU;gBACR,OAAOF;gBACP,QAAQE;YACV;YACA,eAAeJ;YACf,YAAYO,4CAAAA,cAAAA,CAAAA,MAAqB,CAACF,eAAed;YACjDU;QACF;IACF;IAEA,OAAO;QACL,UAAU;YACR,OAAOR;YACP,QAAQC;QACV;QACA,eAAeM;QACf,YAAYO,4CAAAA,cAAAA,CAAAA,MAAqB,CAAChC,kBAAkBgB;QACpDU;IACF;AACF;AAEO,eAAeO,+BACpBjC,gBAAwB,EACxBkC,GAEC;IAED,MAAMC,6BACJpC,0BAA0BC;IAC5B,MAAMoC,uBAAuB,MAAMhB,AAAAA,IAAAA,oBAAAA,iBAAAA,AAAAA,EACjCe;IAEF,IACED,IAAI,cAAc,IACjBA,CAAAA,IAAI,cAAc,CAAC,KAAK,KAAKE,qBAAqB,KAAK,IACtDF,IAAI,cAAc,CAAC,MAAM,KAAKE,qBAAqB,MAAK,GAE1D1C,WACE,mEACA;QACE,UAAUwC,IAAI,cAAc;QAC5B,QAAQE;IACV;IAIJ,OAAO;QACL,YAAYJ,4CAAAA,cAAAA,CAAAA,MAAqB,CAACG,4BAA4BlB,KAAK,GAAG;QACtE,UAAUmB;QACV,0BAA0B;QAC1B,WAAW;IACb;AACF;AAEO,SAASC,kBAAkBC,MAAM,KAAK;IAC3C,MAAMC,gBAAgBC,oBAAAA,mBAAAA,CAAAA,iBAAqC,CACzDC,oBAAAA,wBAAwBA;IAE1B,MAAMC,qBAAqBC,2BAAQ,MAAM,CAAC;IAE1C,MAAMC,WAAWC,AAAAA,IAAAA,sBAAAA,IAAAA,AAAAA,IAAO,SAAS,CAAC,GAAG;IACrC,OAAO,GAAGN,iBAAiBD,IAAI,CAAC,EAAEI,mBAAmB,CAAC,EAAEE,UAAU;AACpE;AAEO,SAASE,eAAeC,QAAgB;IAC7C,IAAIP,oBAAAA,mBAAAA,CAAAA,qBAAyC,CAACQ,oBAAAA,qBAAqBA,GACjE;IAEFC,IAAAA,sBAAAA,MAAAA,AAAAA,EAAO,CAAC,gCAAgC,EAAEF,UAAU;AACtD;AAEO,SAASG,wBACdC,eAAoC;IAEpC,OAAO,CAAC,CACNA,CAAAA,gBAAgB,IAAI,IACpBC,MAAM,OAAO,CAACD,gBAAgB,IAAI,KAClCA,AAAgC,MAAhCA,gBAAgB,IAAI,CAAC,MAAM,AAAK;AAEpC;AAEO,SAASE,qBACdF,eAAoC;IAEpC,IAAI,CAACA,iBACH;IAGF,IAAIA,gBAAgB,IAAI,EAAE;QAExB,MAAMG,OAAO;YACX,MAAMH,gBAAgB,IAAI,CAAC,EAAE;YAC7B,KAAKA,gBAAgB,IAAI,CAAC,EAAE;YAC5B,OAAOA,gBAAgB,IAAI,CAAC,EAAE,GAAGA,gBAAgB,IAAI,CAAC,EAAE,GAAG;YAC3D,QAAQA,gBAAgB,IAAI,CAAC,EAAE,GAAGA,gBAAgB,IAAI,CAAC,EAAE,GAAG;QAC9D;QAEA,MAAMI,UAAUC,AAAAA,IAAAA,0BAAAA,qBAAAA,AAAAA,EACdF,MACA,AAAkC,YAAlC,OAAOH,gBAAgB,MAAM,GACzBA,gBAAgB,MAAM,GACtBA,gBAAgB,MAAM,EAAE,UAAU;QAExC,OAAOI;IACT;AAGF;AAEO,eAAeE,sBACpBC,OAGC,EACDC,UAA2C,EAC3CC,WAAwB,EACxBC,SAA8B;IAE9B,IAAI,CAACF,YACH;IAGF,IAAIE,AAAc,UAAdA,WAAqB,YACvBC,AAAAA,IAAAA,uCAAAA,KAAAA,AAAAA,EAAW,iCAAiCF;IAI9C,IAAI,CAACF,QAAQ,SAAS,EAAE,mBACtB;IAGF,IAAI,CAACA,QAAQ,iBAAiB,CAAC,uBAAuB,EAAE,YACtDI,AAAAA,IAAAA,uCAAAA,KAAAA,AAAAA,EACE;IAKJ,IAAI;QACF,MAAMR,OACJ,MAAMI,QAAQ,iBAAiB,CAAC,uBAAuB,CAACC;QAC1D,MAAMJ,UAA+B;YACnC,QAAQ;gBACN3B,KAAK,KAAK,CAAC0B,KAAK,IAAI,GAAGA,KAAK,KAAK,GAAG;gBACpC1B,KAAK,KAAK,CAAC0B,KAAK,GAAG,GAAGA,KAAK,MAAM,GAAG;aACrC;YACDA;YACA,aACE,AAAuB,YAAvB,OAAOM,cACHA,cACAA,YAAY,MAAM,IAAI;QAC9B;QAEAE,IAAAA,uCAAAA,KAAAA,AAAAA,EAAW,yBAAyBF;QACpC,OAAOL;IACT,EAAE,OAAOQ,OAAO;QACdD,IAAAA,uCAAAA,KAAAA,AAAAA,EAAW,qCAAqCC;QAChD;IACF;AACF;AAIO,MAAMC,qBAAqB,IAEvBC;AAUJ,MAAMC,cAAc,CACzBC;IAKA,IAAI,AAAkB,YAAlB,OAAOA,QACT,OAAO;QACL,YAAYA;QACZ,kBAAkBC;IACpB;IAEF,OAAO;QACL,YAAYD,OAAO,MAAM;QACzB,kBAAkBA,OAAO,MAAM,GAC3B;YACE,QAAQA,OAAO,MAAM;YACrB,yBAAyB,CAAC,CAACA,OAAO,uBAAuB;QAC3D,IACAC;IACN;AACF;AASO,SAASC,mBACdC,KAAe,EACfC,UAAqC,CAAC,CAAC;IAEvC,MAAM,EACJC,aAAaC,iCAAAA,UAAU,EACvBC,cAAcC,sBAAAA,WAAW,EACzBC,cAAcC,mCAAAA,OAAO,EACrBC,MAAMC,QAAQ,GAAG,EAAE,EACpB,GAAGR;IAEJ,IAAIG,aACF,MAAM,IAAI3D,MAAM;IAGlB,OAAOuD,MAAM,GAAG,CAAC,CAACU;QAChB,MAAMC,eAAeL,YAAYI;QACjC,IAAI,CAACR,WAAWS,eACd,MAAM,IAAIlE,MACR,CAAC,gBAAgB,EAAEiE,KAAK,eAAe,EAAEC,aAAa,6BAA6B,EAAEH,KAAK;QAG9F,OAAOG;IACT;AACF;AAEO,MAAMC,sCAAsC,CACjD3B,SACA7B;IAEA,IAAIA,AAA6B,MAA7BA,0BACF,OAAO6B;IAGT,OAAO;QACL,GAAGA,OAAO;QACV,QAAQ;YACN3B,KAAK,KAAK,CAAC2B,QAAQ,MAAM,CAAC,EAAE,GAAG7B;YAC/BE,KAAK,KAAK,CAAC2B,QAAQ,MAAM,CAAC,EAAE,GAAG7B;SAChC;QACD,MAAM;YACJ,GAAG6B,QAAQ,IAAI;YACf,MAAM3B,KAAK,KAAK,CAAC2B,QAAQ,IAAI,CAAC,IAAI,GAAG7B;YACrC,KAAKE,KAAK,KAAK,CAAC2B,QAAQ,IAAI,CAAC,GAAG,GAAG7B;YACnC,OAAOE,KAAK,KAAK,CAAC2B,QAAQ,IAAI,CAAC,KAAK,GAAG7B;YACvC,QAAQE,KAAK,KAAK,CAAC2B,QAAQ,IAAI,CAAC,MAAM,GAAG7B;QAC3C;IACF;AACF;AAEO,MAAMyD,uCAAuC,CAClD7B,MACA5B;IAEA,IAAIA,AAA6B,MAA7BA,0BACF,OAAO4B;IAGT,OAAO;QACL,GAAGA,IAAI;QACP,MAAM1B,KAAK,KAAK,CAAC0B,KAAK,IAAI,GAAG5B;QAC7B,KAAKE,KAAK,KAAK,CAAC0B,KAAK,GAAG,GAAG5B;QAC3B,OAAOE,KAAK,KAAK,CAAC0B,KAAK,KAAK,GAAG5B;QAC/B,QAAQE,KAAK,KAAK,CAAC0B,KAAK,MAAM,GAAG5B;IACnC;AACF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
CONNECTIVITY_FIXTURE_IMAGE: ()=>CONNECTIVITY_FIXTURE_IMAGE,
|
|
28
|
+
CONNECTIVITY_FIXTURE_SHOT_SIZE: ()=>CONNECTIVITY_FIXTURE_SHOT_SIZE
|
|
29
|
+
});
|
|
30
|
+
const CONNECTIVITY_FIXTURE_IMAGE = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABvwAAAH0CAMAAADG5HrPAAAAw1BMVEX////6+/3u7/7Y2uoMDQ4DCz2oqP/i4++ur8Odo69BRU5SUf+utf/Aws7v8PTe3+a5vMjOz9bz9Pbs7PDY2OGen6Po6OyztMf29/nS1Nz8/P3IydQNhv99g53j5OlwcXaxtLpBR25ja/86O0HCw/8lJSalqrL4+fqqsLt1df9eX2QrfP+Wlf9UVlmOkJPV1v/g4v+Dhf+gof8Np/3K1f9aWv+Cg4dLTlRGeP+Vyf8Zwvsi2/hrnP+Pbf9lyf2zZ//Ajv8VWQjSAABH5ElEQVR42uzXUQnEUAwF0Y2NqujvI1D/srZURAjcc0wM8ysACCN+AMQRPwDiiB8AccQPgDjiB0Ac8QMgjvgBEEf8AIgjfgDEET8A4ogfAHHED4A44gdAHPEDII74ARBH/ACII34AxBE/AOKIHwBxxA+AOOIHQBzxAyCO+AEQR/wAiCN+sMJ1uk8BE8QPljj9ugsYIH6ww/V0Wz8YIn6wxBe/p4AB4gdLtPjBGPGDJcQP5ogfLCF+MEf8YIn+FDBA/GCHW/xgjvj92bu71sSBKIzjHJjeCFPrS4qV2kQkCoKy4BKJXfr9P9aOR+NMOkns2BqP5fnZi8lssvbuz2gmBZAB8QNoEeIHIIOJH3a5A7QF8QOQIX9/3yF+AC1B/ABEGOf79u0QP4BWIH4AMuS79535QfwA2oD4AYgwzne7ff7wcE+ANiB+ADJ87AzED6AdiB+ACGPED6BFiB+ADMf44flmAG1A/ABuaJwXa71P8cuxBgS4JsQP4IbynUGsFL8/ZoQbPwGuB/EDuJ1xXkSO47cxr0P8csQP4KoQP4AbyjdGzsOPzWbHB858KL1H16UnxiWXAMiC+IF8T+ukS5fok2wfbvy4frmd/6BAk4c9CqIne6FvMiUKvwRAFMQP5IuVsaR6PaoyiNM3CpStjIx+xrpjxFTLjRwP24/flMN0tQvYFPEDgRA/kK+jjPqILGIVVcxGqVIrCrRSxop+Bkd7RvU25fjtED+AdiB+cA9SZaypxmK5T+Pi02SSqr2IwpyPX5bWy8jxpfjtKld+m3uPn544HviSiUsTwE0hfnAHBmrviaqNloqD9UjWS5yqg7Qbp2UdanI+frGqF5MjfOVn48coiKj4PTTAOhBEQPxAPK32ulRtFCs2K04YRDN1sh0uVVlK9VqO399T5KTGT0+Yv4zzkAPxgzuA+IF40ZlmZcUij1jqhC4hajt+862xJuPi+P29Uvy8XQc2fjWnPHyZJgvxgzuA+IEM/frv0LghHaoXufWz8ZtFC2qKX7LypXzKyhcTOx+/zN6a+s34/aVGU0aWF78Jn+FkSXt59OPnpkwjfvBrIX4gQ19VOMQvLbpS68mtX6rYUhPj+KUH5fhFKsDpsufhQcbT0dD1TEHxy53IhcfPi44XvylPTOgoIH58DeIHvxniBzLUx2+oqldjXbJ6h+Lxvj4erp/paGlvFX3+dvysfuqW7Y0KgfF7Na9j/Hic2/m7j990UgUbH0AGxA9kqItffaN6ZBX1i+kYvz4VrhS/Nc8mPF6s7ZaKoPi9vprIvR7iZ4bmlTvz9x4/TT7s+gMpED+QoT5+y4b4WVoZ20dqKX4DZ+HXm5nhkFhY/LhxRfxYXppvND0TPy+P4fEj7ybPOpociB/cAcQPhNBls2KL+ihtip+VmPb1iQLi9xL5ZtyryDenkszuPXzm4WxE7NKV3z9/5ZdTA29dd4X4WdqrWTP39NJdN4gfSIH4gRRj83N6UVr0ba5qPFJZtOLinY+fZ0BH3laHp2REVYbKOS9zbs4JjZ9RxI/lp/lfE7/SHS6IH0iB+IFIXbW3MKMtjyLXsiEq4fHrxkrTgRe/jkpjTZ7jL/VCbDTjIz6v7fjZjNTGj6zbrPzcA8QPpED8QKSk2Ns3rHh0SmynPKHxe1k6gfocv57/5mxu5+1p6YCMS+OXB8dvci5+Wkb8NOIHEiF+IMZjNqJCVnySGFd8vzdTRkKVQuMXu8+/tvFz/1HTJ92U/6NHKqxVUbxfHT/6qnLv3N8T8QMpED+Q4rHDzWCHCCXuXZUDvUfGQO09U6XQ+A1SZ9VWjp/dy1e26JSetD0aJmtlZy6Pnx/CRro5fn4dvxG/yXfiN3WOED+QAvEDIQYd95NEzs6buzBLTuV6KkZVQuNX/gizHL9EVS4x4+MVg16yjrfuo0T71Hb8bJHkxk8jfiAQ4gdCdOw9kzZTLzYq81O5MlsrX1j87Bu/ESvFb8vnL8j1Nl8pNkuVJ6Mfix+PG52Pn9ex9uPHnAgjfiAF4gdCzBVb24Ml0dYW0f5th477LV0vdcyJguPn3tVSjp+u+nO4iWrSbS9+3k4Gr1DTn47ftI4mlxe/CeIH8iB+8J+9+/tREwgCOJ5J1hdzoKgYry2iJaupVtqHC94l9///XYVBmMVZ9jjtj71mPn3ouF3O9OkbOFBfFIquMqZYLPPED+KmJEtcXEDtsyIYqqHxI4emW9DGj2a9go6lstDjNMXhNCh+Ty8vUBoSP9rM8fiZr39z/JxY/OQTXoT3JH7CF/sTfXKLvvQt0O2dJXlTkthM2P3xM5+m6MQvohabMmXSpzQO5rQ+GRC/F1vknmwzbebYA3TsNQvT7fHbSvzE/0biJ7wR1v3QS3hsqzE/qBRQ0Tz5d6K6wG+JH0bqHOBYx48OPFs2V3R2SPNNFEJrWq5mCxgQvy+lVwBr/IBmevgdN3PdMzs/4hegBFeTwKZ+x2oCIf4ZiZ/wyUSryniVG/e+xEtA6SUqoWpqhiJduyd+EzUOABnxe2QPGKJPQRFPFzPgzqrYw7vi9zQgfl+Gx29kfQ3k9viNerGzTyJf6id8JvETHpkqlJ4t3cG1tPnyos9wJX9v/PKMaJpwSzupjMTApJdUokdMwNvxezLjdyz/QM+M8atGXOWCq+9TuE4K/XNN4idEQ+In/BL3f4Fe1kZsEp/0HjpuiF+q3ikHhl8ZHRC/l6Zn7GyPnfnhiNMAyVtJuTd+CXCBxE98UBI/4RVKUgFd2LQd1K7b98HiR2U7UvBsM5byPfGjEnG3x48S1yXxEx+XxE94ZTVWFwF0rFVdN7uPFb8jxa+aAewzbX6BAUZ/Kn79z7hL/MTHJfETfllq+1XPKa6Owe4jxe+1/YXeE05HQPb5Bach8QvebMrfiF+Cto5n4kcoKcntnuLfkfgJ70QKHaArV2gBVjfEL9pcwWppat3mSvvWq1Ydv1UDSgPid6xg/I4IkH1+wWlI/BJ2+wlzW/xoF0PxG7pfnvMTvpD4Cd9srJc9U4UKsHp3/LiwOu5UP+pwrqIVgt1K9YkA3hU/HrxXQLfE7+3LiTfGj9YYiZ/4uCR+wje5QnoOJn1ZXYGNPX6zTbo34zdxxQ9Ltajjt6CAMffHj3p2PH7pBI/mLxS/L4Pil7AnD5i/ET++P9iW2mMlfsIXEj/hGTwDY/F5VBcbsOLxW8ZVyB7N+MWO+O1UqWgecs/pIOa3xY+d7X2548xvwJ0kt8aPCse548d3SPyELyR+wjOFasRAcnUxBiuK31JVirFCu0v8Yp2d66UMbCLsYtjEb5X1hfb++L3QZU+Kn30eHr9khBLXqd+N8XPc7zI0fvQWEj/hC4mf8Mtcq9YCWplyn/pR/AplSi/xi1TjABafdV3KJn7wue+9/nL8nmhzP2ofbCk1zF+JH1/cmkdL/IQvJH7CL3UwDqoy3sPFVFWwgHoGHMUvUB3nS/ygbeoOuOCSRYof5P3PFS5buHu8bOwB3oxf0zMcj8dnCp4xv1L8cNkdP6wNaqcELG6OnyOo1vgl/V/kLvETvpD4Ca/UlZsudffezrOqTHQdMo7iFyqDPmya+KWqlgG3qVM7A4oflgsPdLjpOT/sWRO/EgWPz1RKty0lj0bmvvglwDnjR1uM95D4CV9I/IRPQn3JyUahz4ACVTdph3+vgaH4Yb5QVgR7gCZ+9aE6DYGJm29SAjN+exxVuoc+98fvtRofoJ7LsZxpvQ4hbe6XjGpQChx3fN4YPzqR43j8+A81r3tK/IQvJH7CJ6mqRDjRNc5ZpipT2Ou6LBzFL64jt1sDauI3eywtgZvjBqUXUKL4tV8vOJ5Aj1vj91yqy/ZajQ/AZ9ry/Hx8fganhHrHXpnuix/YUPz4j7DukfgJX0j8hEdi+k71ucbyhABtCMtph1MMXNH8w0QfYupVG78+U63QFJARP1hrVdEbsLPHb5OWYhx5/BCLn2t+roDLdlRL2Gvmlvi5cjU0fvQDJH7CFxI/4Y9pHZsQKpsqHCFOdKfKfoxjAF1NNk97YJzxWxWde0gpfmihFUpDsKH4WTnjh2Vzx4+2vEK/gLdu1FO/W+NHKxyPH18zr3tK/IQvJH7CG5HqlC1V2dxYPhh79Bo69gdVO8ygyx2/IFNIB4AofrU1/btNN36LXZqC4a/EL7GULuBr6Mb4Je+MH79MGkj8hH8kfsIX0dUdnuEJ2xfo5n4UVKjKeAUE23dxDqHDFb/FSdWyCTQofig8N1WdANPED7s3ZqHrjd/rm/F7oJk2c3TaZ9aEisiSdUf8wMYev63jAImf8IXET3hiqihrfFlNoTbT/CbMVJEsAlN//NZpG8w5XLD4wardVYTAHDDLZ63QwPh9ev1a9wwj97UacZVmWscRJ4bSx2OSjGz5uzF+9AaMPX78fYnET/hC4if8ECs6wTNsVC2Fxmd2gXNXH5kXChULME3j0iNcmeFm1tE2fqTdqHdgmEebPNWKWEJ3Ymvo+9evX3/g9PAVR5of2PyAE4flc1zfJNvkajkxXHYY+EVUWiDbBouf4zJpsi3J99gKP0j8hB/O9MABCdO2fSS+usD52B4ZaIV0Gm+i9R641Xy9iKYr4+OzdQyE4mfYtVvnADCronfKmjVX/JZ8DT30x4+H8AeuciNX+/raGIzc+BF9T/mNiD1+YCFf4i48IvETfoj4bZwYM1SAKVUoW0Jln9Hnaj6yJmlCa1DaKHRYQwfFj0zGCkV0nJU+5fg/0Vk2Pp8Op57PEsWeAWLBY/OA+G0DsEl+U/xGCDqc8RtJ/MRHIPETnjjgL/ZMsWLtQ/uzQtkeSjnOOaB1ptwoR2fLI3w8fmif09OFc2WTpfl0DrWZ6iiga0j8fnTjBxasU1xyf/z6rnry+LEDGImf8IrET3hionQEHZGqxXBlntFHVC+7H4E9y7VyoZ+3sD6/x+OHAq1SqF3lVZ/TXbQC01iZIujCnj00kzN+yBm/bQAOQXJ3/OxXPV3xSyR+4kOQ+AlfxBO4slGl7BEYrF8BKFclY89+c9KK4zmKeTja+DFh3gQubaqXHYpdMAcuVYYUuIfvTeS+lZrFaqZ1nGkzUxWEpY9LtvfFz34R0xE/14MOW+PnC/FPSfyE1wqlihVYzMf0u7SYFyYMdnGRpofD6XQ6n8/jjjM4sPgxG1VWLw6Wrh0tHYMDxQ9nFj+XJICBgsQ4apgAWvTaiR0ghOckfsJnaQB2YWo86qBD+F3yQymHu4TTCyykgzt+IIT4UyR+4n8whw8KI8dmiZ8Qf5rET4h/6CdGjs8g8RPij5L4CfGLfTtGYRiGAShKrtE5Y4cMXU1y/1M1CTSEQkbLAr03CV3gYxuPc0bufQ7iB5HED0ZqrV3xa7vbvk1AL+IH4zzH79wDvYgfjPMcv7f4QU/iB+M8x28TP+hJ/GCkrbX5N//Fb5uAXsQPRprv8bsFbzn2QC/iByO95uWa23o77e17oBvxgyzWdXXVCTHED7IQPwgjfpCF+EEY8YMsxA/CiB9ksYkfRBE/SOK1x8/3BoghfpCF+EEY8YMkjpPfZwIiiB9ksXjygyjiB0BB4gdAOeIHQDniB0A54gdAOeIHQDniB0A54gdAOeIHQDniB0A54gdAOeIHQDniB0A54gdAOeIHQDniB0A54gdAOeIHfNmrAwEAAAAAQf7Wg1wSwY78ANiRHwA78gNgR34A7MgPgB35AbAjPwB25AfAjvwA2JEfADvyA2BHfgDsyA+AHfkBsCM/AHbkB8CO/ADYkR8AO/IDYEd+AOzID4Ad+QGwIz8AduQHwI78ANiRHwA78gNgR34A7MgPgB35AbAjPwB25AfAjvwA2JEfQOzaQarDIBSG0YgDZwZ0It1A97/D99pOGwpNbAL3nBU4+/jxEo74ARCO+AEQjvgBEI74ARCO+AEQjvgBEI74ARCO+AEQjvgBEI74ARCO+AEQjvgBEI74ARCO+AEQjvgBEI74ARCO+AEQjvgBEI74ARCO+AEQzmHxG7WXkgFgqlJ6HWmH4+LX+poB4EfW3tIOR8Tv/ipf6W2kBQAmSqP18urfPX1rf/zu/fmEsQDAj4zn7Po2f/vjVx+bry0A8FPtsf9q+mhC/EbJuRh9AJzg1aD0wfHxqzmvVh8AJ2nrh/E3I349574AwGkeJUqbJsTvVv57uwDAiWrOJW2YEb+Ss98+AE42Nus3IX437QPgCjbqNyV+XfsAuITx9t9vRvyq9gFwEePNzeeM+A23LgD8sXMHJxLDMABFY3TwLYb4kg7Sf4dLAgEzsMxJoIH3mvgIyS7jnsjah4T4dW8cAKhjfq79MuK3x9gAoIwRe1tkxO+K8K8LAIUcEVdbJMRvRt8AoJC+XnxmxO9y6QlAMec/o9+3+Bn8APhdy+iXEr9h4wdANUeM9kqI3+HUE4B6RhztkRK/6Y0fAPXMmO2REj/nLgAUdMZoj4z4nREbAJTz/nGWEb/drScAFfXY2+J7/Kz8APh179IvI37dQwcAKjqit1tK/Ny7AFDRmRi/iLYBQDl3oW4Z8XPsCUBNf+zVgQAAAACAIH/rQS6J5AfAjvwA2JEfADvyA2BHfgDsyA+AHfkBsCM/AHbkB8SeHexICkJRGD4uzwIBJaTQhLCieP8nnJbSFo2mO5NMppK630LKIt7o6l8gxMeR+AkhhPg4Ej8hhBAf57/Hb0IrWo8Dp7v2LnQ4mzRudM7hn+mDxq2uvucYRvy1MQQc/TjRqYjN04QJQggh3jN+XTIddjMtDgpHfLOkmc4DCtWES47sccPrTY+oG/glR4PqoTdDs5kBKM446UzA4hlPBpx4csCZocW9TNe8QYEQQog3jZ8m0wAgzFVimiuL6kniW2AuNBcTDK4ppgmATa1hzcjGIrMx4SdaLRLzslhobkKT7BmYMuNFj82jpu3Eoep3ifN+s+6Szn95AMrsHCpNPps3CBBCCPGm8YPPzD1QeJRRRZq2cv5RqHASSYtLXak7iq1xjZ8Ki0SLNWalrviRZaNAM5sF6bHyZI9lY8JZzMwj4JlNI9Otrb+BSu2lzNzNqBI3GZG7CCGEEG8WPwxlqV8/VopqfAHQa61o9Bf/ap8G+ryXrq0iLvnaulHv9vhpLNQ2LjDgd4a4mJmWxUOz1CQ2mTY09crSCKiGxBzhmdBQe/zKJSwGcrZ2rl87jmNk9l/L+gVt73JXJH5CCPHW8cMz0Vye+QVuEuBIt/ZsxoliwdnD2rpjcHAbP0WNe/dnfmv8xuaIbqh56nhk8TIZ8vGK3wCg88f4PeqEYdpm9R02iapWVqFyrx8zQ300cwYic1f/y8/laiCEEOIPe3fUIykKhWH4cPldIIiECCaGK+T//8Jtj1rStr3j7O5FzfZ5khlrqrrsyty8QYR6z/jRopdjYq6g8FFzVqwF7GqiCYjnHN9yOUGBp4sBWBMY1XfxK4yjtD0oq+5J96YPFmU9LFv8Um2q3SNzm2o4VQQ6aEMBeauXqjBf43f+dMZMu56L1qGM50tnODWq4icj/3/MtB5k1CeEEG8bP6bRysSG/cHCFdzFgnppVERJt/Fj9/Gre217IqBs+NVfsji5LX4RRdHOFRguj6EdJ4taLhrqgLBfzR2M+2X8ZvAlYMt/E//KZgwbgLD9VCUaO0+riExCCCHeOH63Sx16xNR1nBszY2dchf1STv8ofveXPV9lqo/i122zk3Y9pC1+Y8VEuww4omkPzxD4OuT+ctSJdilvz3mclVz2xgPZbgo/0sSznSd+20xjolDA4TQ9sUBqAib+Ncp6WewnhBBvF79gVsO38csYHCpRKIHSskukrKOWAlDv4zcOL8vfxm/W5mn8jje2c37nbag9AEcOmOk1iEsFgbMJZEdstKjpmNoczvjd4jgPKH1vYfu+gDQQ93tkLX0SKmpBDSSEEOI942ex0vzgwhKRQ+U/RIoaSdFnBrZgvo1fxIv5HL+sV/WIX0T/LH6jZmU7wbTHj7r9zAEcPw1LZ/ycrcSGijLsD2r36mhxr/iZ+UNBnDeVH3HJ+GN6cKPJrEfyNts+USNNgB0XDUwy6BNCiPeM32St5SHTlK8mHkT1e/xSv0kci2voNEwP+138KvsSv91vx8+hVTl+5+4rS0UFnKoIZ/wai0UJRGPZ7tqJUfEF0J5+Med3jR+NHGK3UIObiok+mII6kBBCiDeM3ypC0y1u0THyw0Y5a77EL5WiRmC4j58lVj/Hb3SH5Tfjl8Iqw/Jx4PgtyRnA7KM4wPGOo0PaO5ZMaEtdRqJhG5htsXOGfjt+ZK0ijUiNYIEaiLkMWLn2KYQQ7x0/Z1pu75fdVjtEhToMQ4Xq0Dfxaxa8aein8bt4Gr+Wfp2H4zcBOJYaDAlwW8mK4o7xhzhpT+yIX8MB3MSKUjdo4wdrK6q1wHZJ+HP8TAZQzYH/mQ0JIYR43/h5tLgPCQetULksd/FTPN/XAe5x/JbamDh+E/zj+HUW8NTEryvVbk/0ho74eeR9EDfyM61l3ADdyJbtxAAfazk18Tvx2de+6X0z7uQrAF3Q0gCqVySEEOJt41fjIe9pGUIIBiWE7u/i12+3TVpMj+M3oqE5fhbzw/gFC8AQs3U2JdMp0St+FnGL3823MWRc7R+60PdQlPLwSlV8OkPhBKNMjrRt0djzKn4hhBBvGz992eqSnXN+OWfcxW8sMMc+nk/jR24VkNfDwvGr6J7GD5jcK2KGLo74LYA74jej0sl3ZOuHggIUlLraT13p3nXOL/I+3JVvOeXo27jQDRWzjPyEEOKN45fNwd7Fr9Z6Gz+NfD54Gj/+WliH/KpKB6iH8SMzukOFd7vlEj+PfN67UpuPPByF03BAV3RzZmTqcOW/xs+BT6vli4uEEOIPj1/jEj8Xvr/sOeMIliuIj+PXoz/jN3S8XXR03ZDoCdzQl/hZ9Gf8+ptxrUEkYOScse3HulqA+lLweh01JQ+fUgXZnr7Gr7+SK55CCPHu8cvmkM/4LQaosN/GbyhnVjyKe7jInQvkUPatwygUhIgS6JF2M9Cyu8avA9wZv2Yyz6EoPpaaCBiplpHYEbNkz5OFgqNgI06k0k388AUJIYR42/i5eDfnZ7QtWJVeofB2J9f4jRV1pENGVQ/jV2HIYVW2hFpSFjBP4zdc5vyma/w0dLvIvSBcdnDLCMTxm2Hp86o+lWHT3vOjfRzQnCtqzoCzrKCuB08boI+NXuInhBBvHD9XK3nk692eGh+2/cAU2DV+KaN0dOCGpc/xS8tLarMFlNGh8jJ1p4GsiJJ+1a/r538XP3dWNmyvT8SWgmU9WOhjnZ+FVdtrgNuanpEHImeb9tEM/ZrzG9Ca7lcNjhI/IYR43/jZAns352d6M6Tjhpfivb+O/BYLBGrMgH70rQ4DCvKAvOcIdqE9t92eDcz/In7XvT2b+z17TtVQYZcjV8oic7UMarNF5xQ/70/tEV/xSwOzmNaDk/gJIcQfFz9AJ/Kw4XBzt+cx50ejesWvq4ChTzyg04P4afQRBXnrUZ5pZyMfAoDpt+KnMV3iN3+KXyqvrLr9Y565UhllOIeHzAPc5NOEud3erJ3zk/gJIcQfFr8K9A/W+e3xaza2NgXwdNED2X0fvwHotiyMNAF1XuiWBfLz+FmbAfMpfqSIvSb7PL9jmwo0QN/miif5OJAzMWUsmPVnzgrcL+PnTcNL/IQQ4k3jlwo8tfFb1Fhh7uKnChJP9HFPIni4dOWBEm7j13VdsEDi9+q9nijVWj196Pv+428diXXQz+OnAWT1KX6rbuicARydOn6nqv4yVlvseFz1dKa3AIoexlgB2MnwmHFGpi1+IwoRyd2eQgjx58aP4kxt/BJWy038CmCJOAxbDOxIN4Zautv41XM53pZPGqMtuNDEDDx9z8exjZ8LwRF9iV/EKlNDw3Lrbi9UToikKlbWKFoFzR+w+GM47KEB2O/ipz+R+AkhxLvGjzUjP52znukmflOeOqJYq91eNnRvCXQbv5hztj5tO1PTYRlm432M/S7Qai6VHvh+e7NVyB/6jhrJD9SqtQ34tBBNxcaQ6NR5zSsBu7omM0zB2t7dx69c5/wKCSGEeOf4/edSon/MoDp6YphH+m+lb59U9IUaZeNOIYSQ+P1HjHwPkBBC/J9J/IQQQvw4Ej8hhBA/jsRPCCHEjyPxE0II8eNI/IQQQvw4Ej8hhBA/jsRPCCHEjyPxE0II8eNI/IQQQvw4Ej8hhBA/jsTvL/bqQAAAAABAkL/1IJdEAOzID4Ad+QGwIz8AduQHwI78ANiRHwA78gNgR34A7MgPgB35AbAjPwB25AfAjvwA2JEfADvyA2BHfgDsyA+AHfkBsCM/AHbkB8CO/ADYkR8AO/IDYEd+AOzID4Ad+QGwIz8AduQHwI78ANiRHwA78gNgR34A7MgPgB35EXt1IAAAAAAgyN96kEsigB35AbAjPwB25AfAjvwA2JEfADvyA2BHfgDsyA+AHfkBsCM/AHbkB8CO/ADYkR8AO/IDYEd+AOzID4Ad+QGwIz8AduQHwI78ANiRHwA78gNgR34A7MgPgB35AbAjPwB25AfAjvwA2JEfADvyA2BHfgDsyA+AHfkBsCM/iL06EAAAAAAQ5G89yCURsCM/AHbkB8CO/ADYkR8AO/IDYEd+AOzID4Ad+QGwIz8AduQHwI78ANiRHwA78gNgR34A7MgPgB35AbAjPwB25AfAjvwA2JEfADvyA2BHfgDsyA+AHfkBsCM/AHbkB8CO/ADYkR8AO/IDYEd+AOzID4Ad+QGwIz8AduQHxJ7d6zgOw0AAtliIDaFCaQLX6qVC7/9sd4fD/strySxER/MBu0UKYhIxHtgBWA7KDwAAloPyAwCA5aD8AABgOSg/AABYDsoPAACWY6H8XHxwh0d053M09AkoJ3l1KdP5MVgyf28GggLAIVdqEn9IUi3uTuXnAncL7mSOgj4BVVlDpV+PwZ75e9MpoP4ADlD1HSrdpvwiM4fnvp3an4GZo3LOMXWCIiKp0KsrSUTK2THYMX9vBoMCQEP1nepNyi8yh33rtAfmqJ3Tpk+QRRKtIYnk42OwUCTW9qY7KNoPoIWS75boDuUXB7/skTnq5rTpExSRTKvIB/d+0eq1e/7eNNwiEIAFJH6AkP3yc8xx+OLgNHPa9Alope4jytJaL2f3yj1/b/qD4nc/AEX3/SVkvvwCh21Q4NB+UUOfoC7zzPO/JLX9yVg1f2+a7pEJYK7kByXr5eeY923QzuyacxT0CUiEPoQX/f+ZCDWOwc7PZ/b2ptOOWz+Ar6ofVo2XX+SwDQscW3M09AmypPfie13h0/tLkn8cg+l7lvl70ymYexQLMBX5C8h2+T34uQ178qM1R0OfIEmhf8Iif0RFUusY7Jq/NwNBAeBd9RdU2+XHvF96LNSao6FPIEKrEdm+sfgQ0dLeDAQFgDfOX+KMl992AbNujh7Kr1l+xi/a8/fmwE1iwR92zrU3dRwIw0k/VBbUiZ2EOBcpQZyoiAoKVKX8/3+2Mx47zo3ScrZ75dUe24kd443DPJmxy11/jw63we9whx/pDr8/U8Edfn3d4XfXXT+l99vg936HH+nH4XfDit9I7vx03eWqcf31jyN9e9x3z29Cd/jddddPqbkNfs0dfle11mkQ/dM8v8NNne6br1x1eH+6hz3/qQP+hw7rrrv+Hj3dBr+nO/ymtGwlPbFL8NTr+VVXyeWE5E/A7/1toH2/vpnPD6a4par9qsGs/ywMPnmLV10Ttmru8PuHDvgfOqy77vp79HhZ+/0nlf9n+ElZ1/ViIcc1LzOrV6+e1ej4naGIep1N6PUn4Pc4H+hpDD+LqpOm32o+f6OsoxN1ZgkKWDva8mHkS1o9Qqv24LsYDG6Bn5SLhc4hvVk/Dz85Ke8G/QT8Mll5F5VFkBTedQUhtQrlhdZRknp/tpLka+0e2tJ+C+WbtMek+G4AKA48pzDJJlulMoIbKOOpujjxsUVOMaSi8Ci3dxtyK/nJzfDzfDD0NCmoAj+1Si5emP7tfx+6lqF5wjIvheJVxTL4LfjtYbLv8Btr4dg1srf1bnZ+eQEEviw8OZsJbH1OLfzOA90Ivwbw40qT8FuhTObgd1hpnQBsmG+e5vMteX4bYBbCb7WxWhH84NyEmuGI5pPa/LznJ+tfqIW3+PWrhxL+/PzM3eESDkN7zeLjY7GMyBw/k5Yy/kn4yXo2qXoxAsjy9eP1OW+P/xL4FZyN4SdLUqY4GBPVYisuu+peJ1lgcr+1WgmJKjhTa+/PUWU6Khj/Uvvm1LTFee8Jeztqed6BCs0IeUcSvNntvWJ79G3F9tjViBlRUCWSK8ZE4YbN+AieIapkSRjmTGI51XcuJAXQQM9OSXe1KPmaqM80rnwlXE9MQnpxjtngscqpx0x3JFmL51Y05wELvb9ZGZPtE1Yy+wwVJK+STobTESsH75zfgt9ez/t/Dn51LX8Lfs6MYWExJuMLPFSzWQXlDyivdxZwr3A00Mst8Gs2c9TbGxSoNAG/joN36MBv3tMJiefClZvDav7oEGThB6Ac6X04ptOkNt/Z9/JN+JGvJ38ZIQNdjXG0d0VrFWYgQUUzgbslHqUORB/pj8FvMbsoOWh5NoOxUPlL4FcylRi5k1ygGPNzVsVKBa39Fk6KdS7wgZJD+EWMFOubzeTAOndQmMVZz1b7xWeNYsZ9z/T5Nadt5ZC3WnVrNnP9QohQPGHhzVX5mY+whHpd8XDa+Mf51l25MqIOrCLOhVKMpLhM0vZ2BIqVCSn2rBQbqCTkkAA8hcIzmBDhRGZoFujD0E0AK/Oukt6bSS5ZNYJfKGXJOMBBMEiwK85aJUDYrIVf0VpsUhSbUsImlFzkGPNvhV+BoK9oOFggVQlTQihK8LamIM4qSH3W6jvw25tn5j8GPzBDvwW/hSYe/AMTSgeX4ZfWubeczdI+/BYiwCxZ5jfB7w0oBQ6fca3esNRchZ/jCgpA9wjZseeavQEIEX5vT4eH/bHpwG+rXUyDxe32/YZY5s94foQ8nIAF8k8O4Afiblos/CTS5bzD4+cu/PBs+HPwq+WkdGjcqfjQWD5jQrD5YfiNjJfqGBwyMAn6FkpgUM4bKXU2jsywg5/RGhUyHTkVopDM9VJUJSvstUgAVXVtNdHBDzn3JhqFxoVKvuqWPGzmW/NpT/P3LvwQhVsNvwbcPwc/PLu3AVN/c3qAC1dY/TARNt04+MVAvFLm4MlVgd+34YK1CodzEODtDC3lEDlw5yANkoSrJMkZT5K1vulKBNSCQypE4foYSHVBV8IEqHQIv1wpwIYyqTRUqXACMmzi4OeoWOiLcTJoIFWpJRgvnaofgF/FEiQgp5OBlBy5HST4eCX4wISYeO4u6+FJGPC0LrOPtP/PwW/xO/ADh09iJ7rkSXx1n4Zf/KJ11mHQ3MGvms1CYw9vgp9hnabfGzFuM4ZfA4ImT5A9Ta75EUUhawXdHjdPDbY+YgfHbQd+2/mKWmH1NNveVz0df/7v/Ah5tlh7Y/h9WDO7s/CLMCSd+16AOJQEvzCO43C5g4r1D8Fv8NDJ7uPYrVji21QMDV5mjoo/Dr+QichHZZylbpAKBhIpUaDNURmx7VP4cVUkWoJ1omZxgIapMJyK2ihloK1n0ZrtMi+tu+CCeWmpGF0xapSw0lhkZfU5BsFpe3+n5evTVufNFfhlpw2kh9PWhwZY6QNAEaOr7FP4XfJ6Is5CX6sX/Qwo7JmHoWQlFC38Ki8JIhZWzCmgD8BZCdJUJmkKtyFNI+NWiijrqzPHvMAWKr0W9nTwWw/gJ5giFRTBljkkcbe7aPhk8fBPgF8RBCnjQYAfmsP94SoEdd63RvArA62Q7hcX3gV9yr4HpN8dfr1XeGvLpLZb9awe9v/ysgP4pb3YFsHP5zAxs7MX6Qtfb4HfGxCP2Adwo/Jm3nxtw8sTiTy/4xxT0B7Z5lYF50fd5Yn6tOuAEPzcaM314ZT3937bet/tnh/RT5ripOd3DuiAz1DCzE9kG3wQ/GL6Hp2hxc/Djx6iafgFMIRlO5hQl34cfn7J+Hpi5S8QLCwECwg0Es3n2po0J5a4C1jusZ70jChIS6UdFk7LUq2Xwi38fIWfjJD1e15kiWFDgt+4kdRuAFOlkWDpFSO69/pfjeMV+NHiYLGFh7mhxg+r0wG/cBanTqfr8EsVC22J+12nT4FcoqSBX8EqDT9gWIUoSq3bnOIL0jDEmAkVeReUmChxgEMgpRgkFAIuXfMKm5TX4NelVsz0h0m34kq+Yl85y38bfi4A7MfMSX0GP+mV9NIWZGmaKg5J8GX47RF6kOx14Q6/XtDUWixdlqY/14JURc+gV6jFPCX4fcw4Wr70BQJu55m4HX4bCH1SRqe+tuFlPqk3jdKtZd/pgPkGt4F+vuHleNoO4bdvD7YX4Ne8dQ+am+E3pl/9qx7CryaUgD7ggND2Ys+he75z8KNGi6l1RScp/yT4Labht4Qh+VS0Y68W9W5XL33duK7D8LU+18967bl+pYtqfZw9f7zs6oW1jtDspV4WVwZKjONZgfI50A5lA5acCSYzLSAQms8R/ETHznMwQQEoVyWTAkuZdSs4R4NPm11Kol/Cw3Vk4IdgNV2EbWdrTMuqwLrJRgXnhd714RxP77LeHzS8DqhmvtX5wxX4bebUojmtTqeDecpPK2hG8jdOV+BHuA8LrVSJDPN24EQZCnuiBvCL+BrgV3GEn6tPQTlLMEMOwfSlUvQU2KacicwtOq7tviXByjIMciesicy+G87AverCb81Ud5U4oXMs6pzzfwB+tGkKY76+YCIGKQ5J0IOfIJKbNT8ZBgyBl5RR6NZRJ3SRfZjuqXiHnzNixniR00cd9vvfCQHnKrKWdsXPwu8c1rPFErAZQs1t8GsIeuZo4+B3dc3vZDVH2YNHaHKkEGhzsh7f4TRfHQz8NtvtFmC41YLXZUix7Ry6H8DvqbE6TsGPLmomD4LvwU8uhvST4w0vS0Ce9ahqOBa08SUyluv19TU28HOuYF8uru0Ofh9+szH8RvgVr68IP272v9QZAfGVjuGxic5m4ET18KW7binsZdG1r8VaAdb6Eq0RV0y1Jynk9knYM7RGTeSSxSxuSVDhKhayr5QoNLnmDwZa+Mk2lCmt5S813wzzphut9fAzOCPNstBlHeB5bg/288fra35YPFLB3+LmMNLqhJHPq2t+A0ltoRXryfrZSgB3BIOkZDxHJQPPj1cAP5k7+Dmgxg40icdZ6SRY4MLFGeQ6VJhxt7TKccYq5nYvRTSPToWDH2TCayXMB9tgAZW9nnCqRSmJX1zwPOvALzOrgmkpuAyIxokXwlFS0Ozm9hI7uYmJgCud9uBnVxx5OyytAl3BCCW+Cj8CHsGPDu7ws9bPGS93JKfW/Gy4LerAL6tnEBLlYK92z9DuFvg1GndEO6If8fA6/Jye0CfsX0MLgO+n0ztcfnzEi7cPF9f8LB6/E/YMKELrgNdQq9s8P9rn4kmi3wX4CYBJaDyqJZSFnpBdr5mFH1Hk2VXYcw54UuPkt+C3MMECKCyG8HPunlOCn/j8cUbc0WDOH3g0S4CU1DiAc2vP30HDxQLSF7Rn0ORj+bqD9OrXokpTsricstzunI9KpsI4MYoSppLP4JcpA7+AxZL5XLbmKfAKlkdKxaXSWlOs1MHPmdCQldaSp1Qg+E02IiBK6zolVD0p8t4O34Tfm9kX08ALYPsDEA2+eh6uwU8MJIGguc8V3WHKSjNgn1xogRmlig/gl5QVi1SM8COPb22J53CY5XQjfJla5kXG7VNmzU5YFvLY3H7Iq7YL2pa0DgLJ0iAoWRwEXc8vZdztvGUsc28kRkJFrQo8buOTawE5/Jda+OGZ0rwyKUW7fyqgV2ezq6JL4hZ+mRJqAL/psCeWk/U6UpL+n1Jo81X4Ee4IfvbwDj+6uCZT1kVh/Qn8xGzmd+DnVbsZenwBZh/ejRte2iLh5M2dcfB7Ar1BhoJsiD4I+wyJoz29wx6KR73sB6Uu/Jzn1y4PDpC73/b06LDXY6ylX0Mx1xvhVwP9kHeOfosJz4/PrI9+jgh+5AxOwo9DiU//Tae07KP+bobfAnNMsbN6DL/dcAQLop4gZNeQpWA3dprSgtBGGQfqFWB2iYtLqsIRr69/LVIWdp0ILui9mzEe9JoJbTNL0ZXSdr7UMS9B8JMCd3uGbG1NcOFF8Aml66yQ0QB+drmuMqArlPL68Bs3ItCqDGvElagnag9vdmP4Fb6/Wfk++Ha+D/Dz/cN86/tUdVphj+8Q9Xjsdg1t52++t1+1cmsM+8thT7fzwow/7dC6UmLtpkKVA/hlFcAvpDU/DYjU8yMUEMqyhvCmYccrt/+kwLC2rXVRUENB4cPtlDmJEy2JoYM1P5oIKZgqIwp3FqPApmJOcbe24KzM9CMVGfj5nHb8pJpuoa6ocCevHyV0McAx0uAuLPxiFSiRgHSKbcqSo7tXDOGXa7yXak3wK8XX4dcY2O1d3vzr4SflQqvGN2TSLfBbOOiRz0fRz17YUy/1VfwVhIEq1JLgR56HMUvLW+Dntrc0m40uIEG+/gsvh8cVBW9aHSxyqGDg53TS3W/7nY3VTGhvK0f0m2Zf8I2wJyBvgf/ayCeUR/ArdvpP/UJkAUUHn8fwo2VZfDCw6iL9HPtuD5dTVhMBJ4Lm52FYNcxzZMYaKlLnGL4iEvHkea0dQFxQy/PUxUCfjcsnlsvoy/CTLOrCT4nKT7rK/BytdVKWo43tCVquHJCnuZUg/NYWAKVwZr6oAmRDVXgD+CmWmqEIw7ekB79xI1IgKl0DJzIgxuc6rPZj+G3nU9KeXUM+4CO8/TV9+7hfbXzvsLWar9rigUYffga/iMk+/PwKaBTYqQhLzqo+/EopOSXk+SUs7Ucn8c44nygFJBhugdDvcfAjVTF5ajCFMFq3gBt5boAEvygtLPwSRl6aCvTMWddTekY+46FR2YdfYqZQspLgh+yjh4WF7TpwZdw8vY4ckWsJWWDglyWVp/p7fMwOoQK4l2U5S7MMSjpmHnOGd/Fb8CM1e+sBmkLz7w971rOR6m8bsUs/0zG14QUKTh8EP9pwkVMzeQv8KO5JEKRC8w34PR0nvucXA5dEWbq62bYCpI21n49FDJ2mX499wbc9P/mLtGjX/eqJ3Z7PeJs53ezL8HOqY+8i/Sz7boefZZ8jYT0Bv9F3NEj4cgkVoSWbdewIe/7Z7pFZh9CQ+BjisiA33Psq/Dgruu5JhpanqxjPoaKiu9xU0LJMxRF5WGCRLpXCehHacodekoO/kJNVHcMv7nGtZNEQfuNG3tr39OUFU2s89K4Ih0ffIfPkIeG22xMGNSDAsYWFapNgjXdEBuIlA0QeoacHwin1C2dQ7w2mnwVguXCOoYOfBJ7kNPgoCbwg116Ng1862sKSAuziBJQzYaLS9DsxTIRasgzNjhW8QSP4kVIhWaDCftiT/LTUTZODecplQBukBvAbr/8mLOjCjzhE843ww61Ua+O5F/QJAhOLyNxhsfBN2FNhE8UzkE79bthz4HJW9Hs2SQ9+/+OfN/vr4Heua2hXLWsQGK0d5guCHy3ivKxpL+Kt8Js3Fn7OFRxrHJg8nrTPp/elODnmHEbwsyuG17WHjgc6Efym6efYd1PY0/h9tbnnBoRD+C3I5wP/78WSQ8Dtn4bfrkbTcP3X7G6HX91Srx8CdXoxdHMKgXCkMfw4OoASE1AA632kpYeM18uDIvsa/GQIUirUciYyYnJiZwXans4ZSfZtvSb4FYJ7WGpNoVAoVnql8j0uyAZfgV+GZvA6/KTKdB6jnfuiNvOO/mDvbHsbxYE4Dn0RWbexeQwGI0EVRYtSZTfpKdl+/292M4yNcV02NH3Y3h1/bYljwIEl5dcZzwzh7+b87r7tR8nud6apCHVkE65H8DtdLnc2Pz/jI9UGfrInE0siVKWRUCSVjMfiJtozZEXqW5EEP5CT4a/Yi+om4adiOIIQRmB1QuIsNZEzFn4UCOMmHggffu48beXCTw+ADYHwq5nuiDS8K8YIfnZI6KqjUlvGiWQMyTsx55dFIMoB1LuIWMLZ8XSBX6/Nc7dnktwAv9Zze6IvdGrOTyD8lJ3zw8WPJ9g+e8K71A3wI3hYt6c2BT0djyeM3TyTq3NN8ANArU5TSQgrmPTbgS5bmNDfXrB5Iqrtdr6x6MPP5jn43lOffsS+W+G3oRk/WFLg54aaPvxwtk9waBmwJMCEwFYGJPjlFCw+pY1l31vgR/SjiWPP7emF3NDRRRjB8muzedHyC8GpayoWdTgf+OvnxmRyJBgWA/sWs+Dn6gr8MG6TJlYiXTiERPCrWKZbNbaMYnSvNbA2pcC96Tk/c0+/PueXmo/G6lbBDO0eoUbL4UDWHYrgt90P8DuP4LdGFPrwCyz8Sih1FiIltyE6VS/HUc5HwyzQWDyscNUMV4DXVjI28EtZhvAruFHmwq+UMqyrgISVGlgCyyYjcQaLacsvlyHAT+UZeTw5quxZow3TPMtws7pOCtd+ZRFN3Gm82f7OTXentXSZzSVsYFcU7ZWMKe3CL4hi6OURBcXE2DcBP+8b2kW8n6/OgIAIP87/7/B7n2jP1kDPBr60E/CjP8AxuNPCL32iRAewD39BAavbAl4wwtOdBXwezPkIfY99lgJRiHKUzliZDDv/trKjQwS3tiOBWjvY3VaDmQ2/7aC/PfgJSz+ffa+s7dkS9WxBa7/AC02MmTjPwsBPkA2FyqDppDpcod9bU2QIbgm1N37Ai022sIff6h1/+PCjbfIHAKBmaRmYEFBUx/vYzxm/Fl2GqlmUsxxbwrKpFkbJCGVpLIWqcKap5KxWY/gVrNItnDUMx/DrWI0eVvzx4MexzwZyxjJ04edvRAaWWYFjXtf+Ur4U7fntQPAD3J1G8NtewhH8zicjCz/c4xGoBz6YcKfDaejwyVXoQUdkoIbxLJYZqnMdzw05KfkAv4ylCL+IcRJrHPgp7Ehs/iV9KBAwtWErwRT8QpnrCi+onFpW/gBuip+x3erhPDvGvXR3gl8IaHMsPwk4K2h9XWgpB37G48+wneai1PCTCYjhspiEHw7UhApUJgXCL64X+L1jqkOih5pOdWh/9m6sNv6rHcEPoJcF7ROHatfpj79+3ZTq8LdN88OkB8/viasJfhjnSWA6TEzO2YFWSEiq8InU2sOeph+fUAs+zBPquMcxp+BnkgfxAy38hGf7Tdp9Yh78EHqafi1hDxHowY+y4aDCXGtdii12o8gDOgt+wcZj382pDhtTG6E1Iz/LKixGHlAF5ls6Db8EXi1WeTDAj8d9KF2DpJ9Z7z2VsReo4c35GXV5iQnwnFFFMQs/AF4JpOQYJZ82uhhxViWBTPp7qZLJ4BKbzvPLYGk0neeXmn7BOHlAr+iMlPPhdwe0Q7zhT2nhd7TpfN6cn9XutLtgYWwsjDR0Su7Dz6pije2x8CNouvBrWEjw01XNXPiVnCWU4Z2O7/8qkqzO7DhTlh/vEH5K+7olveIHKKHFpWmp3iDMR3+E+Hl+CXabtmsXGod1yKRC+AlYIUt7bUke/LBPQ9bAj8rg4DIy8AsjVY+M1xy3jhiJ5vxktcDv3ZLcW/NX++blJPefDxTjAjcnrh7+uh/gV/TP9osqjAYNAIs3wg/zGwaMUJcRzdKtEH5UmgzeY57Cadj/cST4lXUNvzVuidQ6m2x3ylZHF+r2DOsvI/YdX4Af9R0c+Pkyhdk8OM63/Gzci6YI9PjwwxdQbOHHwe+Jr326yWYm/Ohb82b4ebjzvj2tyUv/3pdm63SaBffn/AwhKX7KmIiYSnNPG+r11bxfCwW8Gm7Yaak7G6uo6QKrTMosZ/CvVmP4dZyJhmnxoGZFkHMM5wD4UcYfj8e34FGFl9i4xcik8+DnbWS3wkPvrsV6UgCLDz98s9bwe7wEBD9b01rrtBu03h3dtIdDiCXhL7Y3Y9Uk/HAFtz1iDL+Q1WP4hU2ZxIHKSrzDF6jcgV8kiSywWmaOwaWiOLkOvzRA+HXMESUYehJEnkaXRcjMVC+SrDRnPTL0a+ZUeKmHknbc5PlRQGpmDMjuOfwifUFj+n8sJ92esWQqlrY0XEXdOcacEvwyHIInC/zepbyZzXX3ypvBpAup5fRII7hTPUUGfj/p2X65vi+Lt5Q30zbejrrcWM+Tht9uuwaM7Y9ENl/7oX/VcwuLfhK1qElpfrpsNQDr8ZthIvlPffitz6jHCfiJ4Sx2t9f2tKXMjOfTyodfgrEsnYUfXBRMAL/HabSHci78gk0SvBv8NpPwo3ioTfy91YErLby9531ZF/4C/Da4uWn92PSOThz+O+7W/431FM76tej4+IYdGawUMh9simK0dcV4iWYG3nsyB355kPaxBzkaESXvgoTnuAUOnzJYW6bQdOFnQ94jJpWuae3Cz9/IGn4Vq+l2Z9jjFVO29Vp8+NFMH8Fvv7XwKy9bB5zbO20nXvZjY3KL5ISB8e/RcPh/KCbgR0ef2h7JLfzoFBxoxUmaOTVXGjNIgwM1hqdSdrQnS0h1DQv0ERYT8LOFrVMUl1w22ECSdZFWzEyro/Pi8KoSIiQRtzbzriGZglpcOtcuZRSXAvg08Csly/v9eUlfNBd+SOCCQCwm4ScqLllcZd6sNCKv79FxUWEULg+zfSv8jNE3qvDpDkdFONreslNUUCsE32ep4Rc9UWw+Pa/m9govZDvtegR68Ltg796ZtDt44Shm05VpwfbHLQGPqAX7HCjeZSh5Ddqf7IHQoA78jDz4iSvPOxKvgl9CyPPp58MveLCvFEk4xE8+RIEHv48vbN1Ow29UzmwoIkSC3u8vwC+n7bQdi6KiLh2cPInP+rXIYlbRlJEtDWKfGAdKpR1I5ZIlSt9sCsmq0vq6UtfrpQItyvrLQiKrBz/sZTzhzELAhZ+/ESGGvH6hUxaUOx7asety58GPDMI7gt/dtwPBz9a09l2mNAoJqgJujzoEJoQ2remkVFPwCysWp6MebREJhFQpZYmYwZyQgXG1FIHn9oz6Wil5Z6+fSfNzxNArfRV+IOBZHgL9puf8DN8ozV1H+coa3wg66ZrRUTtQR9Dx2r1yJlam6OlWxnqY7IVozxh3qYNJ+BUszkVAmoZfwRIhebnA783ww8ocfc4Y3dASbI11//M+ooAXhcWUQyrQ33Z6zi/BRqBMVP2PG5Pc7byZX/OFnu/3aEpznh5h0u6EbPO1xk2N4XfGPdc2TJMcngcd3rI7bPUk4YqIp/nqwu8waGfXz368n5gLPwr3NEYgNqfhh1ZQ7qYR3Lc9+r53wSfDj5QEPvysmt7Me2rz0aOT2wpPxoMfnVREreIXoi82qRz37VO/45UDtXXMbKIWZfyRSv2wuJqNHmXLeGZvNmXCZFU6yKOWo4Y1YUniEhbKws/Wj2EsLujjSw9+3kYp9Xa1mfFS9WC3WnhaYUwmLlF2okAh7A6EQMhcOBr42ZrWNq1h98x8vKNCLwQ/XQRtNzy2omFJZCTjwURjPCWsqCHjz55bFHKMbzRnLyQPujguEX4hihIDERIFB1wF07KxujPgJ3qzP4Rl6cHPUYcZB3QGoBzpqt+I2HlAvZ7tJYQxMsfxykXjwtZ5P+0XVjhMLfw5vwh3kbkan4yMIxAtu0Dhh0/Ar+odEOShT2ERpwv8tJvy7Q+zbaGh3/hC+CH7UhNZ0SqCn1Zv6T+0GJd+S54fPsTdPs5dM9D1Rq7dXHMvNR2iUpBmF2en7c7JUXg8QRe0V49bGme37j/1sge2gU6/SXXAcHJjVgrzcl1iNvwIeZDbjkqC1ynNo87p+Gj4tZMPs/W/P6qoCifJXQSzVOaOjyuEc5zza5HVjNWpiUeoQTQdwwfrwb7U2N+DMk1LUwxLcJb8Dn4qjyrJypqNFAW+QhHamtZW3kbmIxqK7UBXnKFfQqWwPBuGCnWukYCuTth/DI7r9WWLz3e/w0c8r13InU0Ql1mijmgMPsLu5enOWIXh6oIDUp2Uxkse6fKYycgwIa5BFAiSZk2OWMmxHdWGf5GUaR+IFLpuT+wJFG7Ga+vldL/fIk2zmBUz4KeQMZG2SlmSInSMJBua0TCyGsFQWLu90k2RVBWcl7DbdNRQopz64vpcerZLUulysNJ7tOHzXpPaTgrShGxTIeMFfvgkmJtvYhZ/JtsdzcAJ+G3Q22mneRz4DdEKT+LV8CObzzzO3Y+bPB129EwiI6hV7YvC17Y7jS5tTvoJeitYsSeL70Sj9yA8XMvz68l6ugY6er0pzw/VktkHsS436FPhl/w1qU88eP9AqexiZt5EMUPVAtpV7av3XZYmQcsWy0p/a/nx3lprqpE8W/vVtO96BLt+vZpCPiPZ+dAMDpiCXh5cQddqjxz7dlmr/SpQFwyARvitT9a5+YJwrTYFQTtjDGKj0s8crwojGVOPzENrbKPi3GT/yTrqhjPra6goXc6lqdAP3KAo4EVXZMkqHstB7m0o1xSYAb8ODqKzR1UT/DxFwe8UycY6uEFxE7yrOJN1SZafGGQpnNRjNWO3Z27yPjK2wO+Gm9gNJT+its3UpjNv1T0u73+5W8ebTVwG8+Fnhc+gtq3J8i5aLyPoeN6dR2vOY/gcRp+5wwDR1c4Z+LD3xoQ7hNO3Bs/n6SrwhNM/H35o7GkAJsGf15yHIE8VB/rM46fD8v/uvkEiihoVuCoi05NBy0qFKvggCdf3RwVKZDFR2OVTdEdl1tIotV5AYkGmJk6iyUq3JxPOuQkNxpLGvH7ByiiKCn+zpvE+GX6cD77xSpXjq911wUepyGYeT38iaRao4fQWt+fb4dcr2Wzatk2S4M2aCT9BP1csqS8pQYs5xznf8msTqtnzFdA383uTvKjg80SH9d8XGDJ/Fn6L/jVa4Pdq+Ln6BPhZbnw1ABKV33Ekgt+/66b95783C/wWLVrg91+G3xei3qs/U8yB5wK/51rgt2jRR2k9RTec6JmG33qBH+mT4Dff+PtKHlAx0eEe5QK/aS3wW7Too7Rb3aTdAj/Sp8BPfDXYiflIFrY1Y+MFfq4W+C1a9FE63wa/8wI/rU+z/IRHPI9BnwxF4YVsOj9z4OjsvFh+nhb4LVr0UTrdBr/TF4efCl4thfcGf5xPlJqEn0+4ud0f8vNeEnPz/FTwdfXnvzczpRb4LfqHvTtYcRyGwQAsaw66CB3cS8jZ9+Tg93+23b1sBpwmdkUnyvT/YAYGihBY9Md2M4Vv0mvhl0KH30MmGjbJw1en5e+g6Mob696MvZ9xD2tffrIxXLXsLUNc18/NQKMA4Dv3rBQ6/LIYDTPJvjotfweLFv7LYn3Qs81a6w1A4xNFl71liOv6uRloFAD+41fCj2OHXxKZXzgUSr46LX8HrHpymLll0A/GovWesY4XVeVmGWIeI0aZm5FGAcC19asUO/zIxGiQiXnrtPwdVC1j/x/att+h7/uenHwWrdSwkDupKHOz6x49AThc8bRDoejhl0QyDckiyVun5e+AVRf+J87D7s1+c/BgdPuzDdRFlfeWIeyJ3fVz0ylj4wfQvr+OZZ9y+PCj3Lz7nL/eX6fl72Dd0s86P1Bi/BPaMPNn86K60o4cL0yizM2OWzQEEAHrYPbFDz/KIjZTp9lEsqPOAX8Hi2o5u/LbXHnrZ83PYE9FdXm+DAGv0S6fm+5GkX0Ae7gMnHky3SH8KIuITTOdmicTkeyoc8zdwaqqZeXfbi2quh4vQ5w4iTA3A40i+wC8n3qpRPcIP0om3Swd1nHxd8BVP0Plw2WI5/q56WS47wN4gmtX9DHdJvyIUn5Ih0dO53U8/B3wUvS3KwufL0Mk189Nd6OIPoADaa1FD676Sl0T0Z3CDwAAgPwQfgAAAAg/AAAAhB8AAHyst4Yf7u8BACCg9Mbwk6+IXxgDAAAfb/qSdMAZfnhgFwDgD3v3juNIDANQUAQDZRLQSoS9gO9/wzUwgdP+TNsauOoSDzQpNwvabozfSB/lBGBBI0c83RK/lrUAwHJqtni6JX7TuScAK8qc8XRL/KK7eAFgPTN7/NgdP0s/AP6218rvjvht2QsALKbnFnuVOKx77ADAarbXr563xG+49wRgNTVH7FbiuHTyAsBaZuYjXnbHz+gHwJ+1Y/C7GL9H2voBsJJtx+B3MX7RHHwCsJKeLQ4ocUb11g+AdYysscPF+M3MVgBgCS1zxhElTmkuPgFYxMxscUiJc4b6AbCEmTnimBInVfUDYAEzs8Y+1+P3T/0A+Lwz7YsSp1VXLwB8WDvWvuvxi5FePADwSSNzxHElLmiZ3X+9APAhW89scUKJK2bNrDZ/AHzAT4PijBLXtMyspj8A3myruWvsuyV+8RiZ2YfxD4C3maNn5njESSUue4yeT3VsMwoA3CjmNmo+9f3puyV+T9voCQBv0scWV5T4JbONWhMAblXraDMuKgEAX0b8APg64gfA1xE/AL6O+AHwdcQPgK8jfgD8b68OBAAAAAAE+VsPckm0Iz8AduQHwI78ANiRHwA78gNgR34A7MgPgB35AbAjPwB25AfAjvwA2JEfADvyA2BHfgDsyA+AHfkBsCM/AHbkB8CO/ADYkR8AO/IDYEd+AOwE685ocur19tAAAAAASUVORK5CYII=';
|
|
31
|
+
const CONNECTIVITY_FIXTURE_SHOT_SIZE = {
|
|
32
|
+
width: 1788,
|
|
33
|
+
height: 500
|
|
34
|
+
};
|
|
35
|
+
exports.CONNECTIVITY_FIXTURE_IMAGE = __webpack_exports__.CONNECTIVITY_FIXTURE_IMAGE;
|
|
36
|
+
exports.CONNECTIVITY_FIXTURE_SHOT_SIZE = __webpack_exports__.CONNECTIVITY_FIXTURE_SHOT_SIZE;
|
|
37
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
38
|
+
"CONNECTIVITY_FIXTURE_IMAGE",
|
|
39
|
+
"CONNECTIVITY_FIXTURE_SHOT_SIZE"
|
|
40
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
41
|
+
Object.defineProperty(exports, '__esModule', {
|
|
42
|
+
value: true
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=fixture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-model/connectivity/fixture.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../src/ai-model/connectivity/fixture.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export const CONNECTIVITY_FIXTURE_IMAGE =\n 'data:image/png;base64,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';\n\n// Keep this hardcoded to avoid pulling photon into connectivity test runtime\n// just to read image dimensions. A unit test verifies it matches the fixture.\nexport const CONNECTIVITY_FIXTURE_SHOT_SIZE = { width: 1788, height: 500 };\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","CONNECTIVITY_FIXTURE_IMAGE","CONNECTIVITY_FIXTURE_SHOT_SIZE"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;ACNO,MAAMI,6BACX;AAIK,MAAMC,iCAAiC;IAAE,OAAO;IAAM,QAAQ;AAAI"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
runConnectivityTest: ()=>external_run_connectivity_test_js_namespaceObject.runConnectivityTest
|
|
28
|
+
});
|
|
29
|
+
const external_run_connectivity_test_js_namespaceObject = require("./run-connectivity-test.js");
|
|
30
|
+
exports.runConnectivityTest = __webpack_exports__.runConnectivityTest;
|
|
31
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
32
|
+
"runConnectivityTest"
|
|
33
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
34
|
+
Object.defineProperty(exports, '__esModule', {
|
|
35
|
+
value: true
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-model/connectivity/index.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
12
|
+
(()=>{
|
|
13
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
14
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: definition[key]
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
})();
|
|
20
|
+
(()=>{
|
|
21
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
22
|
+
})();
|
|
23
|
+
(()=>{
|
|
24
|
+
__webpack_require__.r = (exports1)=>{
|
|
25
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
26
|
+
value: 'Module'
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
29
|
+
value: true
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
})();
|
|
33
|
+
var __webpack_exports__ = {};
|
|
34
|
+
__webpack_require__.r(__webpack_exports__);
|
|
35
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
36
|
+
runConnectivityTest: ()=>runConnectivityTest
|
|
37
|
+
});
|
|
38
|
+
const external_screenshot_item_js_namespaceObject = require("../../screenshot-item.js");
|
|
39
|
+
const index_js_namespaceObject = require("../../service/index.js");
|
|
40
|
+
var index_js_default = /*#__PURE__*/ __webpack_require__.n(index_js_namespaceObject);
|
|
41
|
+
const external_models_index_js_namespaceObject = require("../models/index.js");
|
|
42
|
+
const external_service_caller_index_js_namespaceObject = require("../service-caller/index.js");
|
|
43
|
+
const external_fixture_js_namespaceObject = require("./fixture.js");
|
|
44
|
+
const TEXT_EXPECTED_TOKEN = 'CONNECTIVITY_OK';
|
|
45
|
+
function isFiniteNumber(value) {
|
|
46
|
+
return 'number' == typeof value && Number.isFinite(value);
|
|
47
|
+
}
|
|
48
|
+
function hasValidRect(value) {
|
|
49
|
+
if (!value || 'object' != typeof value) return false;
|
|
50
|
+
const rect = value;
|
|
51
|
+
return isFiniteNumber(rect.left) && isFiniteNumber(rect.top) && isFiniteNumber(rect.width) && isFiniteNumber(rect.height);
|
|
52
|
+
}
|
|
53
|
+
function hasValidCenter(value) {
|
|
54
|
+
return Array.isArray(value) && 2 === value.length && isFiniteNumber(value[0]) && isFiniteNumber(value[1]);
|
|
55
|
+
}
|
|
56
|
+
function buildFixtureContext() {
|
|
57
|
+
return {
|
|
58
|
+
screenshot: external_screenshot_item_js_namespaceObject.ScreenshotItem.create(external_fixture_js_namespaceObject.CONNECTIVITY_FIXTURE_IMAGE, Date.now()),
|
|
59
|
+
shotSize: external_fixture_js_namespaceObject.CONNECTIVITY_FIXTURE_SHOT_SIZE,
|
|
60
|
+
shrunkShotToLogicalRatio: 1
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function buildCheckResult(name, modelRuntime, result) {
|
|
64
|
+
const { config } = modelRuntime;
|
|
65
|
+
return {
|
|
66
|
+
name,
|
|
67
|
+
intent: config.intent,
|
|
68
|
+
modelName: config.modelName,
|
|
69
|
+
modelFamily: config.modelFamily,
|
|
70
|
+
...result
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function buildConnectivityModelRuntime(modelConfig) {
|
|
74
|
+
return (0, external_models_index_js_namespaceObject.getModelRuntime)({
|
|
75
|
+
...modelConfig,
|
|
76
|
+
retryCount: 0
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
function formatConnectivityCheckName(check) {
|
|
80
|
+
const checkName = 'aiLocate' === check.name ? 'AI locate check' : `${check.name[0]?.toUpperCase()}${check.name.slice(1)} check`;
|
|
81
|
+
const modelLabel = check.modelName || check.intent;
|
|
82
|
+
return `${checkName} - ${modelLabel} (${check.intent})`;
|
|
83
|
+
}
|
|
84
|
+
function buildConnectivityFailureMessage(checks) {
|
|
85
|
+
const failedChecks = checks.filter((item)=>!item.passed);
|
|
86
|
+
if (0 === failedChecks.length) return 'Connectivity test failed, but no failed check details were generated.';
|
|
87
|
+
return failedChecks.map((item)=>{
|
|
88
|
+
const detail = item.message || 'Failed without details.';
|
|
89
|
+
return `[${formatConnectivityCheckName(item)}]: ${detail}`;
|
|
90
|
+
}).join('\n');
|
|
91
|
+
}
|
|
92
|
+
async function runTextConnectivityCheck(modelRuntime) {
|
|
93
|
+
const startTime = Date.now();
|
|
94
|
+
try {
|
|
95
|
+
const result = await (0, external_service_caller_index_js_namespaceObject.callAI)([
|
|
96
|
+
{
|
|
97
|
+
role: 'system',
|
|
98
|
+
content: 'Reply with the exact token the user asks for.'
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
role: 'user',
|
|
102
|
+
content: `Return exactly ${TEXT_EXPECTED_TOKEN}`
|
|
103
|
+
}
|
|
104
|
+
], modelRuntime);
|
|
105
|
+
const content = result.content.trim();
|
|
106
|
+
const passed = content.includes(TEXT_EXPECTED_TOKEN);
|
|
107
|
+
return buildCheckResult('text', modelRuntime, {
|
|
108
|
+
passed,
|
|
109
|
+
durationMs: Date.now() - startTime,
|
|
110
|
+
message: passed ? '' : `Unexpected response: ${content}`
|
|
111
|
+
});
|
|
112
|
+
} catch (error) {
|
|
113
|
+
return buildCheckResult('text', modelRuntime, {
|
|
114
|
+
passed: false,
|
|
115
|
+
durationMs: Date.now() - startTime,
|
|
116
|
+
message: error instanceof Error ? error.message : String(error)
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async function runVisionConnectivityCheck(modelRuntime) {
|
|
121
|
+
const startTime = Date.now();
|
|
122
|
+
try {
|
|
123
|
+
await (0, external_service_caller_index_js_namespaceObject.callAI)([
|
|
124
|
+
{
|
|
125
|
+
role: 'user',
|
|
126
|
+
content: [
|
|
127
|
+
{
|
|
128
|
+
type: 'text',
|
|
129
|
+
text: 'What is the main content of this image ? It is a photo or a form ?'
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'image_url',
|
|
133
|
+
image_url: {
|
|
134
|
+
url: external_fixture_js_namespaceObject.CONNECTIVITY_FIXTURE_IMAGE,
|
|
135
|
+
detail: 'high'
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
], modelRuntime);
|
|
141
|
+
return buildCheckResult('vision', modelRuntime, {
|
|
142
|
+
passed: true,
|
|
143
|
+
durationMs: Date.now() - startTime,
|
|
144
|
+
message: ''
|
|
145
|
+
});
|
|
146
|
+
} catch (error) {
|
|
147
|
+
return buildCheckResult('vision', modelRuntime, {
|
|
148
|
+
passed: false,
|
|
149
|
+
durationMs: Date.now() - startTime,
|
|
150
|
+
message: error instanceof Error ? error.message : String(error)
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async function runAiLocateConnectivityCheck(modelRuntime) {
|
|
155
|
+
const startTime = Date.now();
|
|
156
|
+
try {
|
|
157
|
+
const context = buildFixtureContext();
|
|
158
|
+
const service = new (index_js_default())(context);
|
|
159
|
+
const locateResult = await service.locate({
|
|
160
|
+
prompt: 'the main todo input box'
|
|
161
|
+
}, {}, modelRuntime);
|
|
162
|
+
const targetRect = locateResult.rect || locateResult.element?.rect;
|
|
163
|
+
const center = locateResult.element?.center;
|
|
164
|
+
const passed = hasValidRect(targetRect) && hasValidCenter(center);
|
|
165
|
+
return buildCheckResult('aiLocate', modelRuntime, {
|
|
166
|
+
passed,
|
|
167
|
+
durationMs: Date.now() - startTime,
|
|
168
|
+
message: passed ? '' : `Invalid locate result: ${JSON.stringify({
|
|
169
|
+
rect: targetRect,
|
|
170
|
+
center
|
|
171
|
+
})}`
|
|
172
|
+
});
|
|
173
|
+
} catch (error) {
|
|
174
|
+
return buildCheckResult('aiLocate', modelRuntime, {
|
|
175
|
+
passed: false,
|
|
176
|
+
durationMs: Date.now() - startTime,
|
|
177
|
+
message: error instanceof Error ? error.message : String(error)
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async function runConnectivityTest(config) {
|
|
182
|
+
const planningModelRuntime = buildConnectivityModelRuntime(config.planningModelConfig);
|
|
183
|
+
const insightModelRuntime = buildConnectivityModelRuntime(config.insightModelConfig);
|
|
184
|
+
const defaultModelRuntime = buildConnectivityModelRuntime(config.defaultModelConfig);
|
|
185
|
+
const checks = await Promise.all([
|
|
186
|
+
runTextConnectivityCheck(planningModelRuntime),
|
|
187
|
+
runVisionConnectivityCheck(insightModelRuntime),
|
|
188
|
+
runAiLocateConnectivityCheck(defaultModelRuntime)
|
|
189
|
+
]);
|
|
190
|
+
const passed = checks.every((item)=>item.passed);
|
|
191
|
+
return {
|
|
192
|
+
passed,
|
|
193
|
+
message: passed ? void 0 : buildConnectivityFailureMessage(checks)
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
exports.runConnectivityTest = __webpack_exports__.runConnectivityTest;
|
|
197
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
198
|
+
"runConnectivityTest"
|
|
199
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
200
|
+
Object.defineProperty(exports, '__esModule', {
|
|
201
|
+
value: true
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
//# sourceMappingURL=run-connectivity-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-model/connectivity/run-connectivity-test.js","sources":["webpack/runtime/compat_get_default_export","webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../src/ai-model/connectivity/run-connectivity-test.ts"],"sourcesContent":["// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { ScreenshotItem } from '@/screenshot-item';\nimport Service from '@/service';\nimport type { UIContext } from '@/types';\nimport type { IModelConfig, TIntent } from '@aiscene/shared/env';\nimport { getModelRuntime } from '../models';\nimport type { ModelRuntime } from '../models';\nimport { callAI } from '../service-caller';\nimport {\n CONNECTIVITY_FIXTURE_IMAGE,\n CONNECTIVITY_FIXTURE_SHOT_SIZE,\n} from './fixture';\n\nconst TEXT_EXPECTED_TOKEN = 'CONNECTIVITY_OK';\n\ninterface ConnectivityCheckResultItem {\n name: 'text' | 'vision' | 'aiLocate';\n intent: TIntent;\n modelName: string;\n modelFamily?: string;\n passed: boolean;\n durationMs: number;\n message: string;\n}\n\nexport interface ConnectivityTestResult {\n passed: boolean;\n message?: string;\n}\n\nexport interface ConnectivityTestConfig {\n defaultModelConfig: IModelConfig;\n planningModelConfig: IModelConfig;\n insightModelConfig: IModelConfig;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction hasValidRect(value: unknown): boolean {\n if (!value || typeof value !== 'object') {\n return false;\n }\n\n const rect = value as {\n left?: unknown;\n top?: unknown;\n width?: unknown;\n height?: unknown;\n };\n\n return (\n isFiniteNumber(rect.left) &&\n isFiniteNumber(rect.top) &&\n isFiniteNumber(rect.width) &&\n isFiniteNumber(rect.height)\n );\n}\n\nfunction hasValidCenter(value: unknown): boolean {\n return (\n Array.isArray(value) &&\n value.length === 2 &&\n isFiniteNumber(value[0]) &&\n isFiniteNumber(value[1])\n );\n}\n\nfunction buildFixtureContext(): UIContext {\n return {\n screenshot: ScreenshotItem.create(CONNECTIVITY_FIXTURE_IMAGE, Date.now()),\n shotSize: CONNECTIVITY_FIXTURE_SHOT_SIZE,\n shrunkShotToLogicalRatio: 1,\n };\n}\n\nfunction buildCheckResult(\n name: ConnectivityCheckResultItem['name'],\n modelRuntime: ModelRuntime,\n result: Omit<\n ConnectivityCheckResultItem,\n 'name' | 'intent' | 'modelName' | 'modelFamily'\n >,\n): ConnectivityCheckResultItem {\n const { config } = modelRuntime;\n return {\n name,\n intent: config.intent,\n modelName: config.modelName,\n modelFamily: config.modelFamily,\n ...result,\n };\n}\n\nfunction buildConnectivityModelRuntime(\n modelConfig: IModelConfig,\n): ModelRuntime {\n return getModelRuntime({ ...modelConfig, retryCount: 0 });\n}\n\nfunction formatConnectivityCheckName(\n check: ConnectivityCheckResultItem,\n): string {\n const checkName =\n check.name === 'aiLocate'\n ? 'AI locate check'\n : `${check.name[0]?.toUpperCase()}${check.name.slice(1)} check`;\n const modelLabel = check.modelName || check.intent;\n return `${checkName} - ${modelLabel} (${check.intent})`;\n}\n\nfunction buildConnectivityFailureMessage(\n checks: ConnectivityCheckResultItem[],\n): string {\n const failedChecks = checks.filter((item) => !item.passed);\n if (failedChecks.length === 0) {\n return 'Connectivity test failed, but no failed check details were generated.';\n }\n\n return failedChecks\n .map((item) => {\n const detail = item.message || 'Failed without details.';\n return `[${formatConnectivityCheckName(item)}]: ${detail}`;\n })\n .join('\\n');\n}\n\nasync function runTextConnectivityCheck(\n modelRuntime: ModelRuntime,\n): Promise<ConnectivityCheckResultItem> {\n const startTime = Date.now();\n try {\n const result = await callAI(\n [\n {\n role: 'system',\n content: 'Reply with the exact token the user asks for.',\n },\n {\n role: 'user',\n content: `Return exactly ${TEXT_EXPECTED_TOKEN}`,\n },\n ],\n modelRuntime,\n );\n const content = result.content.trim();\n const passed = content.includes(TEXT_EXPECTED_TOKEN);\n return buildCheckResult('text', modelRuntime, {\n passed,\n durationMs: Date.now() - startTime,\n message: passed ? '' : `Unexpected response: ${content}`,\n });\n } catch (error) {\n return buildCheckResult('text', modelRuntime, {\n passed: false,\n durationMs: Date.now() - startTime,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n}\n\nasync function runVisionConnectivityCheck(\n modelRuntime: ModelRuntime,\n): Promise<ConnectivityCheckResultItem> {\n const startTime = Date.now();\n try {\n await callAI(\n [\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: 'What is the main content of this image ? It is a photo or a form ?',\n },\n {\n type: 'image_url',\n image_url: {\n url: CONNECTIVITY_FIXTURE_IMAGE,\n detail: 'high',\n },\n },\n ],\n },\n ],\n modelRuntime,\n );\n return buildCheckResult('vision', modelRuntime, {\n passed: true,\n durationMs: Date.now() - startTime,\n message: '',\n });\n } catch (error) {\n return buildCheckResult('vision', modelRuntime, {\n passed: false,\n durationMs: Date.now() - startTime,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n}\n\nasync function runAiLocateConnectivityCheck(\n modelRuntime: ModelRuntime,\n): Promise<ConnectivityCheckResultItem> {\n const startTime = Date.now();\n try {\n const context = buildFixtureContext();\n const service = new Service(context);\n const locateResult = await service.locate(\n { prompt: 'the main todo input box' },\n {},\n modelRuntime,\n );\n const targetRect = locateResult.rect || locateResult.element?.rect;\n const center = locateResult.element?.center;\n const passed = hasValidRect(targetRect) && hasValidCenter(center);\n return buildCheckResult('aiLocate', modelRuntime, {\n passed,\n durationMs: Date.now() - startTime,\n message: passed\n ? ''\n : `Invalid locate result: ${JSON.stringify({\n rect: targetRect,\n center,\n })}`,\n });\n } catch (error) {\n return buildCheckResult('aiLocate', modelRuntime, {\n passed: false,\n durationMs: Date.now() - startTime,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n}\n\nexport async function runConnectivityTest(\n config: ConnectivityTestConfig,\n): Promise<ConnectivityTestResult> {\n const planningModelRuntime = buildConnectivityModelRuntime(\n config.planningModelConfig,\n );\n const insightModelRuntime = buildConnectivityModelRuntime(\n config.insightModelConfig,\n );\n const defaultModelRuntime = buildConnectivityModelRuntime(\n config.defaultModelConfig,\n );\n const checks = await Promise.all([\n runTextConnectivityCheck(planningModelRuntime),\n runVisionConnectivityCheck(insightModelRuntime),\n runAiLocateConnectivityCheck(defaultModelRuntime),\n ]);\n\n const passed = checks.every((item) => item.passed);\n return {\n passed,\n message: passed ? undefined : buildConnectivityFailureMessage(checks),\n };\n}\n"],"names":["__webpack_require__","module","getter","definition","key","Object","obj","prop","Symbol","TEXT_EXPECTED_TOKEN","isFiniteNumber","value","Number","hasValidRect","rect","hasValidCenter","Array","buildFixtureContext","ScreenshotItem","CONNECTIVITY_FIXTURE_IMAGE","Date","CONNECTIVITY_FIXTURE_SHOT_SIZE","buildCheckResult","name","modelRuntime","result","config","buildConnectivityModelRuntime","modelConfig","getModelRuntime","formatConnectivityCheckName","check","checkName","modelLabel","buildConnectivityFailureMessage","checks","failedChecks","item","detail","runTextConnectivityCheck","startTime","callAI","content","passed","error","Error","String","runVisionConnectivityCheck","runAiLocateConnectivityCheck","context","service","Service","locateResult","targetRect","center","JSON","runConnectivityTest","planningModelRuntime","insightModelRuntime","defaultModelRuntime","Promise","undefined"],"mappings":"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"}
|