@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device/input-strategy.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/device/input-strategy.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};","/** Supported strategies for sending text through a platform input backend. */\nexport const inputStrategies = ['legacy', 'sequential', 'bulk'] as const;\n\n/**\n * `legacy` preserves the platform's pre-existing behavior, `sequential` sends\n * one Unicode code point per Midscene backend call, and `bulk` sends the full\n * value in one backend call where supported.\n */\nexport type InputStrategy = (typeof inputStrategies)[number];\n\n/** Input fields that may be configured at action or platform level. */\nexport type TextInputOptions = {\n keyboardTypeDelay?: number;\n inputStrategy?: InputStrategy;\n};\n\n/** Effective text input configuration after layered defaults are resolved. */\nexport type ResolvedTextInputOptions = {\n keyboardTypeDelay?: number;\n inputStrategy: InputStrategy;\n};\n\n/** Platform callbacks used to send text one Unicode code point at a time. */\nexport type SequentialTextInputHandlers = {\n sendCharacter: (character: string) => unknown;\n wait: (delayMs: number) => unknown;\n};\n\n/**\n * Resolve an input strategy and reject combinations whose intent conflicts.\n * Prefer `resolveTextInputOptions` when both action and platform defaults exist.\n */\nexport function resolveInputStrategy(\n inputStrategy: InputStrategy | undefined,\n keyboardTypeDelay?: number,\n): InputStrategy {\n if (\n keyboardTypeDelay !== undefined &&\n (!Number.isFinite(keyboardTypeDelay) || keyboardTypeDelay < 0)\n ) {\n throw new Error('keyboardTypeDelay must be a finite non-negative number');\n }\n\n const resolved = inputStrategy === undefined ? 'legacy' : inputStrategy;\n if (!inputStrategies.includes(resolved)) {\n throw new Error(\n `inputStrategy must be one of: ${inputStrategies.join(', ')}; received ${String(resolved)}`,\n );\n }\n if (\n resolved === 'bulk' &&\n keyboardTypeDelay !== undefined &&\n keyboardTypeDelay > 0\n ) {\n throw new Error(\n 'inputStrategy \"bulk\" requires keyboardTypeDelay to be omitted or set to 0; use inputStrategy \"sequential\" for delayed input',\n );\n }\n return resolved;\n}\n\n/** Resolve action-level text input options over platform-level defaults. */\nexport function resolveTextInputOptions(\n actionOptions?: TextInputOptions,\n platformDefaults?: TextInputOptions,\n): ResolvedTextInputOptions {\n const keyboardTypeDelay =\n actionOptions?.keyboardTypeDelay ?? platformDefaults?.keyboardTypeDelay;\n const inputStrategy = resolveInputStrategy(\n actionOptions?.inputStrategy !== undefined\n ? actionOptions.inputStrategy\n : platformDefaults?.inputStrategy,\n keyboardTypeDelay,\n );\n\n return { inputStrategy, keyboardTypeDelay };\n}\n\n/**\n * Whether resolved options require Midscene to send Unicode code points\n * separately.\n */\nexport function shouldInputSequentially({\n inputStrategy,\n keyboardTypeDelay,\n}: ResolvedTextInputOptions): boolean {\n return (\n inputStrategy === 'sequential' ||\n (inputStrategy === 'legacy' &&\n keyboardTypeDelay !== undefined &&\n keyboardTypeDelay > 0)\n );\n}\n\n/**\n * Send text one Unicode code point at a time with one canonical delay policy.\n * `delayAfterLast` exists only for platforms whose legacy behavior included a\n * trailing delay; explicit sequential input should leave it disabled.\n */\nexport async function sendTextSequentially(\n text: string,\n handlers: SequentialTextInputHandlers,\n options?: {\n delayMs?: number;\n delayAfterLast?: boolean;\n },\n): Promise<void> {\n const characters = Array.from(text);\n const delayMs = options?.delayMs ?? 0;\n\n for (let index = 0; index < characters.length; index++) {\n await handlers.sendCharacter(characters[index]);\n if (\n delayMs > 0 &&\n (index < characters.length - 1 || options?.delayAfterLast === true)\n ) {\n await handlers.wait(delayMs);\n }\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","inputStrategies","resolveInputStrategy","inputStrategy","keyboardTypeDelay","undefined","Number","Error","resolved","String","resolveTextInputOptions","actionOptions","platformDefaults","shouldInputSequentially","sendTextSequentially","text","handlers","options","characters","Array","delayMs","index"],"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;;;;;;;;;;;ACLO,MAAMI,kBAAkB;IAAC;IAAU;IAAc;CAAO;AA+BxD,SAASC,qBACdC,aAAwC,EACxCC,iBAA0B;IAE1B,IACEA,AAAsBC,WAAtBD,qBACC,EAACE,OAAO,QAAQ,CAACF,sBAAsBA,oBAAoB,IAE5D,MAAM,IAAIG,MAAM;IAGlB,MAAMC,WAAWL,AAAkBE,WAAlBF,gBAA8B,WAAWA;IAC1D,IAAI,CAACF,gBAAgB,QAAQ,CAACO,WAC5B,MAAM,IAAID,MACR,CAAC,8BAA8B,EAAEN,gBAAgB,IAAI,CAAC,MAAM,WAAW,EAAEQ,OAAOD,WAAW;IAG/F,IACEA,AAAa,WAAbA,YACAJ,AAAsBC,WAAtBD,qBACAA,oBAAoB,GAEpB,MAAM,IAAIG,MACR;IAGJ,OAAOC;AACT;AAGO,SAASE,wBACdC,aAAgC,EAChCC,gBAAmC;IAEnC,MAAMR,oBACJO,eAAe,qBAAqBC,kBAAkB;IACxD,MAAMT,gBAAgBD,qBACpBS,eAAe,kBAAkBN,SAC7BM,cAAc,aAAa,GAC3BC,kBAAkB,eACtBR;IAGF,OAAO;QAAED;QAAeC;IAAkB;AAC5C;AAMO,SAASS,wBAAwB,EACtCV,aAAa,EACbC,iBAAiB,EACQ;IACzB,OACED,AAAkB,iBAAlBA,iBACCA,AAAkB,aAAlBA,iBACCC,AAAsBC,WAAtBD,qBACAA,oBAAoB;AAE1B;AAOO,eAAeU,qBACpBC,IAAY,EACZC,QAAqC,EACrCC,OAGC;IAED,MAAMC,aAAaC,MAAM,IAAI,CAACJ;IAC9B,MAAMK,UAAUH,SAAS,WAAW;IAEpC,IAAK,IAAII,QAAQ,GAAGA,QAAQH,WAAW,MAAM,EAAEG,QAAS;QACtD,MAAML,SAAS,aAAa,CAACE,UAAU,CAACG,MAAM;QAC9C,IACED,UAAU,KACTC,CAAAA,QAAQH,WAAW,MAAM,GAAG,KAAKD,SAAS,mBAAmB,IAAG,GAEjE,MAAMD,SAAS,IAAI,CAACI;IAExB;AACF"}
|
|
@@ -39,6 +39,7 @@ var __webpack_exports__ = {};
|
|
|
39
39
|
(()=>{
|
|
40
40
|
__webpack_require__.r(__webpack_exports__);
|
|
41
41
|
__webpack_require__.d(__webpack_exports__, {
|
|
42
|
+
collectImageScriptIds: ()=>collectImageScriptIds,
|
|
42
43
|
generateImageScriptTag: ()=>generateImageScriptTag,
|
|
43
44
|
getBaseUrlFixScript: ()=>getBaseUrlFixScript,
|
|
44
45
|
parseDumpScriptAttributes: ()=>parseDumpScriptAttributes,
|
|
@@ -134,6 +135,21 @@ var __webpack_exports__ = {};
|
|
|
134
135
|
return false;
|
|
135
136
|
});
|
|
136
137
|
}
|
|
138
|
+
function parseImageScriptId(contentAfterType) {
|
|
139
|
+
const match = /^ data-id="([a-z0-9_-]{1,128})">/i.exec(contentAfterType);
|
|
140
|
+
return match?.[1] ?? null;
|
|
141
|
+
}
|
|
142
|
+
async function collectImageScriptIds(filePath) {
|
|
143
|
+
const imageIds = new Set();
|
|
144
|
+
const openTag = '<script type="midscene-image"';
|
|
145
|
+
const closeTag = "<\/script>";
|
|
146
|
+
streamScanTags(filePath, openTag, closeTag, (content)=>{
|
|
147
|
+
const imageId = parseImageScriptId(content);
|
|
148
|
+
if (imageId) imageIds.add(imageId);
|
|
149
|
+
return false;
|
|
150
|
+
});
|
|
151
|
+
return imageIds;
|
|
152
|
+
}
|
|
137
153
|
function extractLastDumpScriptSync(filePath) {
|
|
138
154
|
const openTagPrefix = '<script type="midscene_web_dump"';
|
|
139
155
|
const closeTag = "<\/script>";
|
|
@@ -330,6 +346,7 @@ var __webpack_exports__ = {};
|
|
|
330
346
|
}
|
|
331
347
|
})();
|
|
332
348
|
exports.STREAMING_CHUNK_SIZE = __webpack_exports__.STREAMING_CHUNK_SIZE;
|
|
349
|
+
exports.collectImageScriptIds = __webpack_exports__.collectImageScriptIds;
|
|
333
350
|
exports.escapeContent = __webpack_exports__.escapeContent;
|
|
334
351
|
exports.extractAllDumpScriptsSync = __webpack_exports__.extractAllDumpScriptsSync;
|
|
335
352
|
exports.extractImageByIdSync = __webpack_exports__.extractImageByIdSync;
|
|
@@ -346,6 +363,7 @@ exports.streamScanTags = __webpack_exports__.streamScanTags;
|
|
|
346
363
|
exports.unescapeContent = __webpack_exports__.unescapeContent;
|
|
347
364
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
348
365
|
"STREAMING_CHUNK_SIZE",
|
|
366
|
+
"collectImageScriptIds",
|
|
349
367
|
"escapeContent",
|
|
350
368
|
"extractAllDumpScriptsSync",
|
|
351
369
|
"extractImageByIdSync",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dump/html-utils.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/dump/html-utils.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};","import { closeSync, openSync, readSync, statSync } from 'node:fs';\nimport { antiEscapeScriptTag, escapeScriptTag } from '@aiscene/shared/utils';\n\nexport const escapeContent = escapeScriptTag;\nexport const unescapeContent = antiEscapeScriptTag;\n\n/** Chunk size for streaming file operations (64KB) */\nexport const STREAMING_CHUNK_SIZE = 64 * 1024;\n\n/**\n * Callback for processing matched tags during streaming.\n * @param content - The content between open and close tags\n * @returns true to stop scanning, false to continue\n */\ntype TagMatchCallback = (content: string) => boolean;\n\n/**\n * Stream through a file and find tags matching the pattern.\n * Memory usage: O(chunk_size + tag_size), not O(file_size).\n *\n * @param filePath - Absolute path to the file\n * @param openTag - Opening tag to search for\n * @param closeTag - Closing tag\n * @param onMatch - Callback for each matched tag content\n */\nexport function streamScanTags(\n filePath: string,\n openTag: string,\n closeTag: string,\n onMatch: TagMatchCallback,\n): void {\n const fd = openSync(filePath, 'r');\n const fileSize = statSync(filePath).size;\n const buffer = Buffer.alloc(STREAMING_CHUNK_SIZE);\n\n let position = 0;\n let leftover = '';\n let capturing = false;\n let currentContent = '';\n\n try {\n while (position < fileSize) {\n const bytesRead = readSync(fd, buffer, 0, STREAMING_CHUNK_SIZE, position);\n const chunk = leftover + buffer.toString('utf-8', 0, bytesRead);\n position += bytesRead;\n\n let searchStart = 0;\n\n while (searchStart < chunk.length) {\n if (!capturing) {\n const startIdx = chunk.indexOf(openTag, searchStart);\n if (startIdx !== -1) {\n capturing = true;\n currentContent = chunk.slice(startIdx + openTag.length);\n const endIdx = currentContent.indexOf(closeTag);\n if (endIdx !== -1) {\n const shouldStop = onMatch(currentContent.slice(0, endIdx));\n if (shouldStop) return;\n capturing = false;\n currentContent = '';\n searchStart =\n startIdx + openTag.length + endIdx + closeTag.length;\n } else {\n leftover = currentContent.slice(-closeTag.length);\n currentContent = currentContent.slice(0, -closeTag.length);\n break;\n }\n } else {\n leftover = chunk.slice(-openTag.length);\n break;\n }\n } else {\n const endIdx = chunk.indexOf(closeTag, searchStart);\n if (endIdx !== -1) {\n currentContent += chunk.slice(searchStart, endIdx);\n const shouldStop = onMatch(currentContent);\n if (shouldStop) return;\n capturing = false;\n currentContent = '';\n searchStart = endIdx + closeTag.length;\n } else {\n currentContent += chunk.slice(searchStart, -closeTag.length);\n leftover = chunk.slice(-closeTag.length);\n break;\n }\n }\n }\n }\n } finally {\n closeSync(fd);\n }\n}\n\n/**\n * Synchronously extract a specific image's base64 data from an HTML file by its id.\n * Uses streaming to avoid loading the entire file into memory.\n *\n * @param htmlPath - Absolute path to the HTML file\n * @param imageId - The id of the image to extract\n * @returns The base64 data string, or null if not found\n */\nexport function extractImageByIdSync(\n htmlPath: string,\n imageId: string,\n): string | null {\n const targetTag = `<script type=\"midscene-image\" data-id=\"${imageId}\">`;\n const closeTag = '</script>';\n\n let result: string | null = null;\n\n streamScanTags(htmlPath, targetTag, closeTag, (content) => {\n result = unescapeContent(content);\n return true; // Stop after first match\n });\n\n return result;\n}\n\n/**\n * Stream image script tags from source file directly to output file.\n * Memory usage: O(single_image_size), not O(all_images_size).\n *\n * @param srcFilePath - Source HTML file path\n * @param destFilePath - Destination file path to append to\n */\nexport function streamImageScriptsToFile(\n srcFilePath: string,\n destFilePath: string,\n): void {\n const { appendFileSync } = require('node:fs');\n const openTag = '<script type=\"midscene-image\"';\n const closeTag = '</script>';\n\n streamScanTags(srcFilePath, openTag, closeTag, (content) => {\n // Write complete tag immediately to destination, don't accumulate\n appendFileSync(destFilePath, `${openTag}${content}${closeTag}\\n`);\n return false; // Continue scanning for more tags\n });\n}\n\n/**\n * Extract the LAST dump script content from HTML file using streaming.\n * Memory usage: O(dump_size), not O(file_size).\n *\n * @param filePath - Absolute path to the HTML file\n * @returns The dump script content (trimmed), or empty string if not found\n */\nexport function extractLastDumpScriptSync(filePath: string): string {\n const openTagPrefix = '<script type=\"midscene_web_dump\"';\n const closeTag = '</script>';\n\n let lastContent = '';\n\n // Custom streaming to handle the special case where open tag has variable attributes\n const fd = openSync(filePath, 'r');\n const fileSize = statSync(filePath).size;\n const buffer = Buffer.alloc(STREAMING_CHUNK_SIZE);\n\n let position = 0;\n let leftover = '';\n let capturing = false;\n let currentContent = '';\n\n try {\n while (position < fileSize) {\n const bytesRead = readSync(fd, buffer, 0, STREAMING_CHUNK_SIZE, position);\n const chunk = leftover + buffer.toString('utf-8', 0, bytesRead);\n position += bytesRead;\n\n let searchStart = 0;\n\n while (searchStart < chunk.length) {\n if (!capturing) {\n const startIdx = chunk.indexOf(openTagPrefix, searchStart);\n if (startIdx !== -1) {\n // Find the end of the opening tag (the '>' character)\n const tagEndIdx = chunk.indexOf('>', startIdx);\n if (tagEndIdx !== -1) {\n capturing = true;\n currentContent = chunk.slice(tagEndIdx + 1);\n const endIdx = currentContent.indexOf(closeTag);\n if (endIdx !== -1) {\n lastContent = currentContent.slice(0, endIdx).trim();\n capturing = false;\n currentContent = '';\n searchStart = tagEndIdx + 1 + endIdx + closeTag.length;\n } else {\n leftover = currentContent.slice(-closeTag.length);\n currentContent = currentContent.slice(0, -closeTag.length);\n break;\n }\n } else {\n leftover = chunk.slice(startIdx);\n break;\n }\n } else {\n leftover = chunk.slice(-openTagPrefix.length);\n break;\n }\n } else {\n const endIdx = chunk.indexOf(closeTag, searchStart);\n if (endIdx !== -1) {\n currentContent += chunk.slice(searchStart, endIdx);\n lastContent = currentContent.trim();\n capturing = false;\n currentContent = '';\n searchStart = endIdx + closeTag.length;\n } else {\n currentContent += chunk.slice(searchStart, -closeTag.length);\n leftover = chunk.slice(-closeTag.length);\n break;\n }\n }\n }\n }\n } finally {\n closeSync(fd);\n }\n\n return lastContent;\n}\n\n/**\n * Extract ALL dump script contents from an HTML file using streaming.\n * Each entry includes the full opening tag (for attribute extraction) and the content.\n *\n * @param filePath - Absolute path to the HTML file\n * @returns Array of { openTag, content } for each dump script found\n */\nexport function extractAllDumpScriptsSync(\n filePath: string,\n): { openTag: string; content: string }[] {\n const results: { openTag: string; content: string }[] = [];\n streamDumpScriptsSync(filePath, (dumpScript) => {\n results.push(dumpScript);\n return false;\n });\n return results;\n}\n\n/**\n * Stream ALL dump scripts from an HTML file.\n * Calls onMatch for each dump script and keeps memory bounded to a single\n * dump script payload instead of accumulating every dump in memory.\n *\n * @param filePath - Absolute path to the HTML file\n * @param onMatch - Callback for each dump script; return true to stop early\n */\nexport function streamDumpScriptsSync(\n filePath: string,\n onMatch: (dumpScript: { openTag: string; content: string }) => boolean,\n): void {\n const openTagPrefix = '<script type=\"midscene_web_dump\"';\n const closeTag = '</script>';\n\n const fd = openSync(filePath, 'r');\n const fileSize = statSync(filePath).size;\n const buffer = Buffer.alloc(STREAMING_CHUNK_SIZE);\n\n let position = 0;\n let leftover = '';\n let capturing = false;\n let currentContent = '';\n let currentOpenTag = '';\n\n try {\n while (position < fileSize) {\n const bytesRead = readSync(fd, buffer, 0, STREAMING_CHUNK_SIZE, position);\n const chunk = leftover + buffer.toString('utf-8', 0, bytesRead);\n position += bytesRead;\n\n let searchStart = 0;\n\n while (searchStart < chunk.length) {\n if (!capturing) {\n const startIdx = chunk.indexOf(openTagPrefix, searchStart);\n if (startIdx !== -1) {\n const tagEndIdx = chunk.indexOf('>', startIdx);\n if (tagEndIdx !== -1) {\n capturing = true;\n currentOpenTag = chunk.slice(startIdx, tagEndIdx + 1);\n currentContent = chunk.slice(tagEndIdx + 1);\n const endIdx = currentContent.indexOf(closeTag);\n if (endIdx !== -1) {\n const shouldStop = onMatch({\n openTag: currentOpenTag,\n content: currentContent.slice(0, endIdx).trim(),\n });\n if (shouldStop) return;\n capturing = false;\n currentContent = '';\n currentOpenTag = '';\n searchStart = tagEndIdx + 1 + endIdx + closeTag.length;\n } else {\n leftover = currentContent.slice(-closeTag.length);\n currentContent = currentContent.slice(0, -closeTag.length);\n break;\n }\n } else {\n leftover = chunk.slice(startIdx);\n break;\n }\n } else {\n leftover = chunk.slice(-openTagPrefix.length);\n break;\n }\n } else {\n const endIdx = chunk.indexOf(closeTag, searchStart);\n if (endIdx !== -1) {\n currentContent += chunk.slice(searchStart, endIdx);\n const shouldStop = onMatch({\n openTag: currentOpenTag,\n content: currentContent.trim(),\n });\n if (shouldStop) return;\n capturing = false;\n currentContent = '';\n currentOpenTag = '';\n searchStart = endIdx + closeTag.length;\n } else {\n currentContent += chunk.slice(searchStart, -closeTag.length);\n leftover = chunk.slice(-closeTag.length);\n break;\n }\n }\n }\n }\n } finally {\n closeSync(fd);\n }\n}\n\nexport function parseImageScripts(html: string): Record<string, string> {\n const imageMap: Record<string, string> = {};\n const regex =\n /<script type=\"midscene-image\" data-id=\"([^\"]+)\">([\\s\\S]*?)<\\/script>/g;\n\n for (const match of html.matchAll(regex)) {\n const [, id, content] = match;\n imageMap[id] = unescapeContent(content);\n }\n\n return imageMap;\n}\n\nexport function parseDumpScript(html: string): string {\n // Use string search instead of regex to avoid ReDoS vulnerability\n // Find the LAST dump script tag (template may contain similar patterns in bundled JS)\n const scriptOpenTag = '<script type=\"midscene_web_dump\"';\n const scriptCloseTag = '</script>';\n\n // Find the last occurrence of the opening tag\n const lastOpenIndex = html.lastIndexOf(scriptOpenTag);\n if (lastOpenIndex === -1) {\n throw new Error('No dump script found in HTML');\n }\n\n // Find the end of the opening tag (the '>' character)\n const tagEndIndex = html.indexOf('>', lastOpenIndex);\n if (tagEndIndex === -1) {\n throw new Error('No dump script found in HTML');\n }\n\n // Find the closing tag after the opening tag\n const closeIndex = html.indexOf(scriptCloseTag, tagEndIndex);\n if (closeIndex === -1) {\n throw new Error('No dump script found in HTML');\n }\n\n // Extract content between opening and closing tags\n const content = html.substring(tagEndIndex + 1, closeIndex);\n return unescapeContent(content);\n}\n\nexport function parseDumpScriptAttributes(\n html: string,\n): Record<string, string> {\n const regex = /<script type=\"midscene_web_dump\"([^>]*)>/;\n const match = regex.exec(html);\n\n if (!match) {\n return {};\n }\n\n const attrString = match[1];\n const attributes: Record<string, string> = {};\n const attrRegex = /(\\w+)=\"([^\"]*)\"/g;\n\n for (const attrMatch of attrString.matchAll(attrRegex)) {\n const [, key, value] = attrMatch;\n if (key !== 'type') {\n attributes[key] = decodeURIComponent(value);\n }\n }\n\n return attributes;\n}\n\nexport function generateImageScriptTag(id: string, data: string): string {\n // Do not use template string here, will cause bundle error with <script\n return (\n // biome-ignore lint/style/useTemplate: <explanation>\n '<script type=\"midscene-image\" data-id=\"' +\n id +\n '\">' +\n escapeContent(data) +\n '</script>'\n );\n}\n\n/**\n * Inline script that fixes relative URL resolution for directory-mode reports.\n *\n * Problem: when a static server (e.g. `npx serve`) serves `name/index.html`\n * at URL `/name` (without trailing slash), relative paths like\n * `./screenshots/xxx.png` resolve to `/screenshots/xxx.png` instead of\n * `/name/screenshots/xxx.png`.\n *\n * Fix: dynamically insert a <base> tag so relative URLs resolve correctly.\n */\n// Do not use template string here, will cause bundle error with <script\n//\n// The closing </script> tag is built at runtime via scriptClose() so that no\n// bundler (rslib, webpack, rsbuild) can ever see or inline a literal\n// '</script>' into JS source. A literal '</script>' inside a <script> block\n// causes the HTML parser to prematurely close the block — which breaks the\n// report viewer when this module is bundled into the report HTML template.\n//\n// Do NOT replace this with a string constant, hex escape (\\x3c), or simple\n// concatenation — bundlers will optimise / inline them and re-introduce the\n// literal '</script>'.\nlet _baseUrlFixScript: string;\nexport function getBaseUrlFixScript(): string {\n if (!_baseUrlFixScript) {\n // Closing </script> MUST be split so that no bundler (rslib / webpack /\n // terser) can ever produce a literal '</script>' in bundle output.\n // A literal '</script>' inside a <script> block causes the HTML parser\n // to prematurely close the block, which breaks the report viewer when\n // this module is bundled into the report template.\n const close = '</' + 'script>';\n _baseUrlFixScript =\n // biome-ignore lint/style/useTemplate: see above\n '\\n<script>(function(){' +\n 'var p=window.location.pathname;' +\n 'if(p.endsWith(\"/\")||/\\\\.\\\\w+$/.test(p))return;' +\n 'var b=document.createElement(\"base\");' +\n 'b.href=p+\"/\";' +\n 'document.head.insertBefore(b,document.head.firstChild)' +\n '})()' +\n close +\n '\\n';\n }\n return _baseUrlFixScript;\n}\n\nexport function generateDumpScriptTag(\n json: string,\n attributes?: Record<string, string | number | boolean>,\n): string {\n let attrString = '';\n if (attributes && Object.keys(attributes).length > 0) {\n // Do not use template string here, will cause bundle error with <script\n attrString =\n // biome-ignore lint/style/useTemplate: <explanation>\n ' ' +\n Object.entries(attributes)\n // biome-ignore lint/style/useTemplate: <explanation>\n .map(([k, v]) => k + '=\"' + encodeURIComponent(v) + '\"')\n .join(' ');\n }\n\n // Do not use template string here, will cause bundle error with <script\n return (\n // biome-ignore lint/style/useTemplate: <explanation>\n '<script type=\"midscene_web_dump\"' +\n attrString +\n '>' +\n escapeContent(json) +\n '</script>'\n );\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","escapeContent","escapeScriptTag","unescapeContent","antiEscapeScriptTag","STREAMING_CHUNK_SIZE","streamScanTags","filePath","openTag","closeTag","onMatch","fd","openSync","fileSize","statSync","buffer","Buffer","position","leftover","capturing","currentContent","bytesRead","readSync","chunk","searchStart","endIdx","shouldStop","startIdx","closeSync","extractImageByIdSync","htmlPath","imageId","targetTag","result","content","streamImageScriptsToFile","srcFilePath","destFilePath","appendFileSync","require","extractLastDumpScriptSync","openTagPrefix","lastContent","tagEndIdx","extractAllDumpScriptsSync","results","streamDumpScriptsSync","dumpScript","currentOpenTag","parseImageScripts","html","imageMap","regex","match","id","parseDumpScript","scriptOpenTag","scriptCloseTag","lastOpenIndex","Error","tagEndIndex","closeIndex","parseDumpScriptAttributes","attrString","attributes","attrRegex","attrMatch","value","decodeURIComponent","generateImageScriptTag","data","_baseUrlFixScript","getBaseUrlFixScript","close","generateDumpScriptTag","json","k","v","encodeURIComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dump/html-utils.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/dump/html-utils.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};","import { closeSync, openSync, readSync, statSync } from 'node:fs';\nimport { antiEscapeScriptTag, escapeScriptTag } from '@aiscene/shared/utils';\n\nexport const escapeContent = escapeScriptTag;\nexport const unescapeContent = antiEscapeScriptTag;\n\n/** Chunk size for streaming file operations (64KB) */\nexport const STREAMING_CHUNK_SIZE = 64 * 1024;\n\n/**\n * Callback for processing matched tags during streaming.\n * @param content - The content between open and close tags\n * @returns true to stop scanning, false to continue\n */\ntype TagMatchCallback = (content: string) => boolean;\n\n/**\n * Stream through a file and find tags matching the pattern.\n * Memory usage: O(chunk_size + tag_size), not O(file_size).\n *\n * @param filePath - Absolute path to the file\n * @param openTag - Opening tag to search for\n * @param closeTag - Closing tag\n * @param onMatch - Callback for each matched tag content\n */\nexport function streamScanTags(\n filePath: string,\n openTag: string,\n closeTag: string,\n onMatch: TagMatchCallback,\n): void {\n const fd = openSync(filePath, 'r');\n const fileSize = statSync(filePath).size;\n const buffer = Buffer.alloc(STREAMING_CHUNK_SIZE);\n\n let position = 0;\n let leftover = '';\n let capturing = false;\n let currentContent = '';\n\n try {\n while (position < fileSize) {\n const bytesRead = readSync(fd, buffer, 0, STREAMING_CHUNK_SIZE, position);\n const chunk = leftover + buffer.toString('utf-8', 0, bytesRead);\n position += bytesRead;\n\n let searchStart = 0;\n\n while (searchStart < chunk.length) {\n if (!capturing) {\n const startIdx = chunk.indexOf(openTag, searchStart);\n if (startIdx !== -1) {\n capturing = true;\n currentContent = chunk.slice(startIdx + openTag.length);\n const endIdx = currentContent.indexOf(closeTag);\n if (endIdx !== -1) {\n const shouldStop = onMatch(currentContent.slice(0, endIdx));\n if (shouldStop) return;\n capturing = false;\n currentContent = '';\n searchStart =\n startIdx + openTag.length + endIdx + closeTag.length;\n } else {\n leftover = currentContent.slice(-closeTag.length);\n currentContent = currentContent.slice(0, -closeTag.length);\n break;\n }\n } else {\n leftover = chunk.slice(-openTag.length);\n break;\n }\n } else {\n const endIdx = chunk.indexOf(closeTag, searchStart);\n if (endIdx !== -1) {\n currentContent += chunk.slice(searchStart, endIdx);\n const shouldStop = onMatch(currentContent);\n if (shouldStop) return;\n capturing = false;\n currentContent = '';\n searchStart = endIdx + closeTag.length;\n } else {\n currentContent += chunk.slice(searchStart, -closeTag.length);\n leftover = chunk.slice(-closeTag.length);\n break;\n }\n }\n }\n }\n } finally {\n closeSync(fd);\n }\n}\n\n/**\n * Synchronously extract a specific image's base64 data from an HTML file by its id.\n * Uses streaming to avoid loading the entire file into memory.\n *\n * @param htmlPath - Absolute path to the HTML file\n * @param imageId - The id of the image to extract\n * @returns The base64 data string, or null if not found\n */\nexport function extractImageByIdSync(\n htmlPath: string,\n imageId: string,\n): string | null {\n const targetTag = `<script type=\"midscene-image\" data-id=\"${imageId}\">`;\n const closeTag = '</script>';\n\n let result: string | null = null;\n\n streamScanTags(htmlPath, targetTag, closeTag, (content) => {\n result = unescapeContent(content);\n return true; // Stop after first match\n });\n\n return result;\n}\n\n/**\n * Stream image script tags from source file directly to output file.\n * Memory usage: O(single_image_size), not O(all_images_size).\n *\n * @param srcFilePath - Source HTML file path\n * @param destFilePath - Destination file path to append to\n */\nexport function streamImageScriptsToFile(\n srcFilePath: string,\n destFilePath: string,\n): void {\n const { appendFileSync } = require('node:fs');\n const openTag = '<script type=\"midscene-image\"';\n const closeTag = '</script>';\n\n streamScanTags(srcFilePath, openTag, closeTag, (content) => {\n // Write complete tag immediately to destination, don't accumulate\n appendFileSync(destFilePath, `${openTag}${content}${closeTag}\\n`);\n return false; // Continue scanning for more tags\n });\n}\n\nfunction parseImageScriptId(contentAfterType: string): string | null {\n const match = /^ data-id=\"([a-z0-9_-]{1,128})\">/i.exec(contentAfterType);\n return match?.[1] ?? null;\n}\n\nexport async function collectImageScriptIds(\n filePath: string,\n): Promise<Set<string>> {\n const imageIds = new Set<string>();\n const openTag = '<script type=\"midscene-image\"';\n const closeTag = '</script>';\n\n streamScanTags(filePath, openTag, closeTag, (content) => {\n const imageId = parseImageScriptId(content);\n if (imageId) imageIds.add(imageId);\n return false;\n });\n\n return imageIds;\n}\n\n/**\n * Extract the LAST dump script content from HTML file using streaming.\n * Memory usage: O(dump_size), not O(file_size).\n *\n * @param filePath - Absolute path to the HTML file\n * @returns The dump script content (trimmed), or empty string if not found\n */\nexport function extractLastDumpScriptSync(filePath: string): string {\n const openTagPrefix = '<script type=\"midscene_web_dump\"';\n const closeTag = '</script>';\n\n let lastContent = '';\n\n // Custom streaming to handle the special case where open tag has variable attributes\n const fd = openSync(filePath, 'r');\n const fileSize = statSync(filePath).size;\n const buffer = Buffer.alloc(STREAMING_CHUNK_SIZE);\n\n let position = 0;\n let leftover = '';\n let capturing = false;\n let currentContent = '';\n\n try {\n while (position < fileSize) {\n const bytesRead = readSync(fd, buffer, 0, STREAMING_CHUNK_SIZE, position);\n const chunk = leftover + buffer.toString('utf-8', 0, bytesRead);\n position += bytesRead;\n\n let searchStart = 0;\n\n while (searchStart < chunk.length) {\n if (!capturing) {\n const startIdx = chunk.indexOf(openTagPrefix, searchStart);\n if (startIdx !== -1) {\n // Find the end of the opening tag (the '>' character)\n const tagEndIdx = chunk.indexOf('>', startIdx);\n if (tagEndIdx !== -1) {\n capturing = true;\n currentContent = chunk.slice(tagEndIdx + 1);\n const endIdx = currentContent.indexOf(closeTag);\n if (endIdx !== -1) {\n lastContent = currentContent.slice(0, endIdx).trim();\n capturing = false;\n currentContent = '';\n searchStart = tagEndIdx + 1 + endIdx + closeTag.length;\n } else {\n leftover = currentContent.slice(-closeTag.length);\n currentContent = currentContent.slice(0, -closeTag.length);\n break;\n }\n } else {\n leftover = chunk.slice(startIdx);\n break;\n }\n } else {\n leftover = chunk.slice(-openTagPrefix.length);\n break;\n }\n } else {\n const endIdx = chunk.indexOf(closeTag, searchStart);\n if (endIdx !== -1) {\n currentContent += chunk.slice(searchStart, endIdx);\n lastContent = currentContent.trim();\n capturing = false;\n currentContent = '';\n searchStart = endIdx + closeTag.length;\n } else {\n currentContent += chunk.slice(searchStart, -closeTag.length);\n leftover = chunk.slice(-closeTag.length);\n break;\n }\n }\n }\n }\n } finally {\n closeSync(fd);\n }\n\n return lastContent;\n}\n\n/**\n * Extract ALL dump script contents from an HTML file using streaming.\n * Each entry includes the full opening tag (for attribute extraction) and the content.\n *\n * @param filePath - Absolute path to the HTML file\n * @returns Array of { openTag, content } for each dump script found\n */\nexport function extractAllDumpScriptsSync(\n filePath: string,\n): { openTag: string; content: string }[] {\n const results: { openTag: string; content: string }[] = [];\n streamDumpScriptsSync(filePath, (dumpScript) => {\n results.push(dumpScript);\n return false;\n });\n return results;\n}\n\n/**\n * Stream ALL dump scripts from an HTML file.\n * Calls onMatch for each dump script and keeps memory bounded to a single\n * dump script payload instead of accumulating every dump in memory.\n *\n * @param filePath - Absolute path to the HTML file\n * @param onMatch - Callback for each dump script; return true to stop early\n */\nexport function streamDumpScriptsSync(\n filePath: string,\n onMatch: (dumpScript: { openTag: string; content: string }) => boolean,\n): void {\n const openTagPrefix = '<script type=\"midscene_web_dump\"';\n const closeTag = '</script>';\n\n const fd = openSync(filePath, 'r');\n const fileSize = statSync(filePath).size;\n const buffer = Buffer.alloc(STREAMING_CHUNK_SIZE);\n\n let position = 0;\n let leftover = '';\n let capturing = false;\n let currentContent = '';\n let currentOpenTag = '';\n\n try {\n while (position < fileSize) {\n const bytesRead = readSync(fd, buffer, 0, STREAMING_CHUNK_SIZE, position);\n const chunk = leftover + buffer.toString('utf-8', 0, bytesRead);\n position += bytesRead;\n\n let searchStart = 0;\n\n while (searchStart < chunk.length) {\n if (!capturing) {\n const startIdx = chunk.indexOf(openTagPrefix, searchStart);\n if (startIdx !== -1) {\n const tagEndIdx = chunk.indexOf('>', startIdx);\n if (tagEndIdx !== -1) {\n capturing = true;\n currentOpenTag = chunk.slice(startIdx, tagEndIdx + 1);\n currentContent = chunk.slice(tagEndIdx + 1);\n const endIdx = currentContent.indexOf(closeTag);\n if (endIdx !== -1) {\n const shouldStop = onMatch({\n openTag: currentOpenTag,\n content: currentContent.slice(0, endIdx).trim(),\n });\n if (shouldStop) return;\n capturing = false;\n currentContent = '';\n currentOpenTag = '';\n searchStart = tagEndIdx + 1 + endIdx + closeTag.length;\n } else {\n leftover = currentContent.slice(-closeTag.length);\n currentContent = currentContent.slice(0, -closeTag.length);\n break;\n }\n } else {\n leftover = chunk.slice(startIdx);\n break;\n }\n } else {\n leftover = chunk.slice(-openTagPrefix.length);\n break;\n }\n } else {\n const endIdx = chunk.indexOf(closeTag, searchStart);\n if (endIdx !== -1) {\n currentContent += chunk.slice(searchStart, endIdx);\n const shouldStop = onMatch({\n openTag: currentOpenTag,\n content: currentContent.trim(),\n });\n if (shouldStop) return;\n capturing = false;\n currentContent = '';\n currentOpenTag = '';\n searchStart = endIdx + closeTag.length;\n } else {\n currentContent += chunk.slice(searchStart, -closeTag.length);\n leftover = chunk.slice(-closeTag.length);\n break;\n }\n }\n }\n }\n } finally {\n closeSync(fd);\n }\n}\n\nexport function parseImageScripts(html: string): Record<string, string> {\n const imageMap: Record<string, string> = {};\n const regex =\n /<script type=\"midscene-image\" data-id=\"([^\"]+)\">([\\s\\S]*?)<\\/script>/g;\n\n for (const match of html.matchAll(regex)) {\n const [, id, content] = match;\n imageMap[id] = unescapeContent(content);\n }\n\n return imageMap;\n}\n\nexport function parseDumpScript(html: string): string {\n // Use string search instead of regex to avoid ReDoS vulnerability\n // Find the LAST dump script tag (template may contain similar patterns in bundled JS)\n const scriptOpenTag = '<script type=\"midscene_web_dump\"';\n const scriptCloseTag = '</script>';\n\n // Find the last occurrence of the opening tag\n const lastOpenIndex = html.lastIndexOf(scriptOpenTag);\n if (lastOpenIndex === -1) {\n throw new Error('No dump script found in HTML');\n }\n\n // Find the end of the opening tag (the '>' character)\n const tagEndIndex = html.indexOf('>', lastOpenIndex);\n if (tagEndIndex === -1) {\n throw new Error('No dump script found in HTML');\n }\n\n // Find the closing tag after the opening tag\n const closeIndex = html.indexOf(scriptCloseTag, tagEndIndex);\n if (closeIndex === -1) {\n throw new Error('No dump script found in HTML');\n }\n\n // Extract content between opening and closing tags\n const content = html.substring(tagEndIndex + 1, closeIndex);\n return unescapeContent(content);\n}\n\nexport function parseDumpScriptAttributes(\n html: string,\n): Record<string, string> {\n const regex = /<script type=\"midscene_web_dump\"([^>]*)>/;\n const match = regex.exec(html);\n\n if (!match) {\n return {};\n }\n\n const attrString = match[1];\n const attributes: Record<string, string> = {};\n const attrRegex = /(\\w+)=\"([^\"]*)\"/g;\n\n for (const attrMatch of attrString.matchAll(attrRegex)) {\n const [, key, value] = attrMatch;\n if (key !== 'type') {\n attributes[key] = decodeURIComponent(value);\n }\n }\n\n return attributes;\n}\n\nexport function generateImageScriptTag(id: string, data: string): string {\n // Do not use template string here, will cause bundle error with <script\n return (\n // biome-ignore lint/style/useTemplate: <explanation>\n '<script type=\"midscene-image\" data-id=\"' +\n id +\n '\">' +\n escapeContent(data) +\n '</script>'\n );\n}\n\n/**\n * Inline script that fixes relative URL resolution for directory-mode reports.\n *\n * Problem: when a static server (e.g. `npx serve`) serves `name/index.html`\n * at URL `/name` (without trailing slash), relative paths like\n * `./screenshots/xxx.png` resolve to `/screenshots/xxx.png` instead of\n * `/name/screenshots/xxx.png`.\n *\n * Fix: dynamically insert a <base> tag so relative URLs resolve correctly.\n */\n// Do not use template string here, will cause bundle error with <script\n//\n// The closing </script> tag is built at runtime via scriptClose() so that no\n// bundler (rslib, webpack, rsbuild) can ever see or inline a literal\n// '</script>' into JS source. A literal '</script>' inside a <script> block\n// causes the HTML parser to prematurely close the block — which breaks the\n// report viewer when this module is bundled into the report HTML template.\n//\n// Do NOT replace this with a string constant, hex escape (\\x3c), or simple\n// concatenation — bundlers will optimise / inline them and re-introduce the\n// literal '</script>'.\nlet _baseUrlFixScript: string;\nexport function getBaseUrlFixScript(): string {\n if (!_baseUrlFixScript) {\n // Closing </script> MUST be split so that no bundler (rslib / webpack /\n // terser) can ever produce a literal '</script>' in bundle output.\n // A literal '</script>' inside a <script> block causes the HTML parser\n // to prematurely close the block, which breaks the report viewer when\n // this module is bundled into the report template.\n const close = '</' + 'script>';\n _baseUrlFixScript =\n // biome-ignore lint/style/useTemplate: see above\n '\\n<script>(function(){' +\n 'var p=window.location.pathname;' +\n 'if(p.endsWith(\"/\")||/\\\\.\\\\w+$/.test(p))return;' +\n 'var b=document.createElement(\"base\");' +\n 'b.href=p+\"/\";' +\n 'document.head.insertBefore(b,document.head.firstChild)' +\n '})()' +\n close +\n '\\n';\n }\n return _baseUrlFixScript;\n}\n\nexport function generateDumpScriptTag(\n json: string,\n attributes?: Record<string, string | number | boolean>,\n): string {\n let attrString = '';\n if (attributes && Object.keys(attributes).length > 0) {\n // Do not use template string here, will cause bundle error with <script\n attrString =\n // biome-ignore lint/style/useTemplate: <explanation>\n ' ' +\n Object.entries(attributes)\n // biome-ignore lint/style/useTemplate: <explanation>\n .map(([k, v]) => k + '=\"' + encodeURIComponent(v) + '\"')\n .join(' ');\n }\n\n // Do not use template string here, will cause bundle error with <script\n return (\n // biome-ignore lint/style/useTemplate: <explanation>\n '<script type=\"midscene_web_dump\"' +\n attrString +\n '>' +\n escapeContent(json) +\n '</script>'\n );\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","escapeContent","escapeScriptTag","unescapeContent","antiEscapeScriptTag","STREAMING_CHUNK_SIZE","streamScanTags","filePath","openTag","closeTag","onMatch","fd","openSync","fileSize","statSync","buffer","Buffer","position","leftover","capturing","currentContent","bytesRead","readSync","chunk","searchStart","endIdx","shouldStop","startIdx","closeSync","extractImageByIdSync","htmlPath","imageId","targetTag","result","content","streamImageScriptsToFile","srcFilePath","destFilePath","appendFileSync","require","parseImageScriptId","contentAfterType","match","collectImageScriptIds","imageIds","Set","extractLastDumpScriptSync","openTagPrefix","lastContent","tagEndIdx","extractAllDumpScriptsSync","results","streamDumpScriptsSync","dumpScript","currentOpenTag","parseImageScripts","html","imageMap","regex","id","parseDumpScript","scriptOpenTag","scriptCloseTag","lastOpenIndex","Error","tagEndIndex","closeIndex","parseDumpScriptAttributes","attrString","attributes","attrRegex","attrMatch","value","decodeURIComponent","generateImageScriptTag","data","_baseUrlFixScript","getBaseUrlFixScript","close","generateDumpScriptTag","json","k","v","encodeURIComponent"],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
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
|
+
imageFileExtensionForMimeType: ()=>imageFileExtensionForMimeType,
|
|
28
|
+
imageMimeTypeForFileExtension: ()=>imageMimeTypeForFileExtension,
|
|
29
|
+
imageRefFileExtension: ()=>imageRefFileExtension,
|
|
30
|
+
normalizeImageUrlRef: ()=>normalizeImageUrlRef,
|
|
31
|
+
normalizeScreenshotRef: ()=>normalizeScreenshotRef,
|
|
32
|
+
normalizeStoredImageRef: ()=>normalizeStoredImageRef,
|
|
33
|
+
reportImageAssetPath: ()=>reportImageAssetPath
|
|
34
|
+
});
|
|
35
|
+
const knownImageExtensions = {
|
|
36
|
+
'image/jpeg': 'jpeg',
|
|
37
|
+
'image/jpg': 'jpeg',
|
|
38
|
+
'image/png': 'png',
|
|
39
|
+
'image/webp': 'webp',
|
|
40
|
+
'image/gif': 'gif',
|
|
41
|
+
'image/svg+xml': 'svg',
|
|
42
|
+
'image/avif': 'avif',
|
|
43
|
+
'image/bmp': 'bmp'
|
|
44
|
+
};
|
|
45
|
+
const knownImageMimeTypesByExtension = {
|
|
46
|
+
jpeg: 'image/jpeg',
|
|
47
|
+
jpg: 'image/jpeg',
|
|
48
|
+
png: 'image/png',
|
|
49
|
+
webp: 'image/webp',
|
|
50
|
+
gif: 'image/gif',
|
|
51
|
+
svg: 'image/svg+xml',
|
|
52
|
+
avif: 'image/avif',
|
|
53
|
+
bmp: 'image/bmp'
|
|
54
|
+
};
|
|
55
|
+
function hasValidStorage(record) {
|
|
56
|
+
if ('inline' !== record.storage && 'file' !== record.storage) return false;
|
|
57
|
+
return 'file' !== record.storage || 'string' == typeof record.path;
|
|
58
|
+
}
|
|
59
|
+
function hasValidImageId(record) {
|
|
60
|
+
return 'string' == typeof record.id && /^[a-z0-9_-]{1,128}$/i.test(record.id);
|
|
61
|
+
}
|
|
62
|
+
function normalizeScreenshotRef(value) {
|
|
63
|
+
if ('object' != typeof value || null === value) return null;
|
|
64
|
+
const record = value;
|
|
65
|
+
if ('midscene_screenshot_ref' === record.type && hasValidImageId(record) && 'number' == typeof record.capturedAt && ('image/png' === record.mimeType || 'image/jpeg' === record.mimeType) && hasValidStorage(record)) return record;
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
function normalizeImageUrlRef(value) {
|
|
69
|
+
if ('object' != typeof value || null === value) return null;
|
|
70
|
+
const record = value;
|
|
71
|
+
if ('midscene_image_url_ref' === record.type && hasValidImageId(record) && 'string' == typeof record.mimeType && record.mimeType.startsWith('image/') && hasValidStorage(record)) return record;
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
function normalizeStoredImageRef(value) {
|
|
75
|
+
return normalizeScreenshotRef(value) ?? normalizeImageUrlRef(value);
|
|
76
|
+
}
|
|
77
|
+
function imageFileExtensionForMimeType(mimeType) {
|
|
78
|
+
const knownExtension = knownImageExtensions[mimeType.toLowerCase()];
|
|
79
|
+
if (knownExtension) return knownExtension;
|
|
80
|
+
const subtype = mimeType.slice(6).split('+', 1)[0];
|
|
81
|
+
const sanitized = subtype.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 32);
|
|
82
|
+
if (!sanitized) throw new Error(`Cannot derive a report image file extension for MIME type "${mimeType}"`);
|
|
83
|
+
return sanitized;
|
|
84
|
+
}
|
|
85
|
+
function imageMimeTypeForFileExtension(extension) {
|
|
86
|
+
return knownImageMimeTypesByExtension[extension.toLowerCase()] ?? null;
|
|
87
|
+
}
|
|
88
|
+
function imageRefFileExtension(ref) {
|
|
89
|
+
return imageFileExtensionForMimeType(ref.mimeType);
|
|
90
|
+
}
|
|
91
|
+
function reportImageAssetPath(ref) {
|
|
92
|
+
if ('file' === ref.storage && ref.path) return ref.path;
|
|
93
|
+
return `./screenshots/${encodeURIComponent(ref.id)}.${imageRefFileExtension(ref)}`;
|
|
94
|
+
}
|
|
95
|
+
exports.imageFileExtensionForMimeType = __webpack_exports__.imageFileExtensionForMimeType;
|
|
96
|
+
exports.imageMimeTypeForFileExtension = __webpack_exports__.imageMimeTypeForFileExtension;
|
|
97
|
+
exports.imageRefFileExtension = __webpack_exports__.imageRefFileExtension;
|
|
98
|
+
exports.normalizeImageUrlRef = __webpack_exports__.normalizeImageUrlRef;
|
|
99
|
+
exports.normalizeScreenshotRef = __webpack_exports__.normalizeScreenshotRef;
|
|
100
|
+
exports.normalizeStoredImageRef = __webpack_exports__.normalizeStoredImageRef;
|
|
101
|
+
exports.reportImageAssetPath = __webpack_exports__.reportImageAssetPath;
|
|
102
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
103
|
+
"imageFileExtensionForMimeType",
|
|
104
|
+
"imageMimeTypeForFileExtension",
|
|
105
|
+
"imageRefFileExtension",
|
|
106
|
+
"normalizeImageUrlRef",
|
|
107
|
+
"normalizeScreenshotRef",
|
|
108
|
+
"normalizeStoredImageRef",
|
|
109
|
+
"reportImageAssetPath"
|
|
110
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
111
|
+
Object.defineProperty(exports, '__esModule', {
|
|
112
|
+
value: true
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
//# sourceMappingURL=image-reference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dump/image-reference.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/dump/image-reference.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};","/** Serialized reference to a captured screenshot stored by a report. */\nexport interface ScreenshotRef {\n type: 'midscene_screenshot_ref';\n id: string;\n capturedAt: number;\n mimeType: 'image/png' | 'image/jpeg';\n storage: 'inline' | 'file';\n path?: string;\n}\n\n/** Serialized reference to a multimodal prompt image URL stored by a report. */\nexport interface ImageUrlRef {\n type: 'midscene_image_url_ref';\n id: string;\n mimeType: `image/${string}`;\n storage: 'inline' | 'file';\n path?: string;\n}\n\n/** Any image asset reference supported by report serialization. */\nexport type StoredImageRef = ScreenshotRef | ImageUrlRef;\n\nconst knownImageExtensions: Readonly<Record<string, string>> = {\n 'image/jpeg': 'jpeg',\n 'image/jpg': 'jpeg',\n 'image/png': 'png',\n 'image/webp': 'webp',\n 'image/gif': 'gif',\n 'image/svg+xml': 'svg',\n 'image/avif': 'avif',\n 'image/bmp': 'bmp',\n};\n\nconst knownImageMimeTypesByExtension: Readonly<\n Record<string, `image/${string}`>\n> = {\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n png: 'image/png',\n webp: 'image/webp',\n gif: 'image/gif',\n svg: 'image/svg+xml',\n avif: 'image/avif',\n bmp: 'image/bmp',\n};\n\nfunction hasValidStorage(record: Record<string, unknown>): boolean {\n if (record.storage !== 'inline' && record.storage !== 'file') return false;\n return record.storage !== 'file' || typeof record.path === 'string';\n}\n\nfunction hasValidImageId(record: Record<string, unknown>): boolean {\n return (\n typeof record.id === 'string' && /^[a-z0-9_-]{1,128}$/i.test(record.id)\n );\n}\n\n/** Validate and normalize a serialized screenshot reference. */\nexport function normalizeScreenshotRef(value: unknown): ScreenshotRef | null {\n if (typeof value !== 'object' || value === null) return null;\n const record = value as Record<string, unknown>;\n\n if (\n record.type === 'midscene_screenshot_ref' &&\n hasValidImageId(record) &&\n typeof record.capturedAt === 'number' &&\n (record.mimeType === 'image/png' || record.mimeType === 'image/jpeg') &&\n hasValidStorage(record)\n ) {\n return record as unknown as ScreenshotRef;\n }\n\n return null;\n}\n\n/** Validate and normalize a serialized multimodal prompt image reference. */\nexport function normalizeImageUrlRef(value: unknown): ImageUrlRef | null {\n if (typeof value !== 'object' || value === null) return null;\n const record = value as Record<string, unknown>;\n\n if (\n record.type === 'midscene_image_url_ref' &&\n hasValidImageId(record) &&\n typeof record.mimeType === 'string' &&\n record.mimeType.startsWith('image/') &&\n hasValidStorage(record)\n ) {\n return record as unknown as ImageUrlRef;\n }\n\n return null;\n}\n\n/** Validate any serialized report image reference. */\nexport function normalizeStoredImageRef(value: unknown): StoredImageRef | null {\n return normalizeScreenshotRef(value) ?? normalizeImageUrlRef(value);\n}\n\n/** Resolve the report asset extension for an image MIME type. */\nexport function imageFileExtensionForMimeType(mimeType: string): string {\n const knownExtension = knownImageExtensions[mimeType.toLowerCase()];\n if (knownExtension) return knownExtension;\n\n const subtype = mimeType.slice('image/'.length).split('+', 1)[0];\n const sanitized = subtype\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 32);\n if (!sanitized) {\n throw new Error(\n `Cannot derive a report image file extension for MIME type \"${mimeType}\"`,\n );\n }\n return sanitized;\n}\n\n/** Resolve a supported report image MIME type from its file extension. */\nexport function imageMimeTypeForFileExtension(\n extension: string,\n): `image/${string}` | null {\n return knownImageMimeTypesByExtension[extension.toLowerCase()] ?? null;\n}\n\n/** Resolve the file extension used by a serialized report image reference. */\nexport function imageRefFileExtension(ref: StoredImageRef): string {\n return imageFileExtensionForMimeType(ref.mimeType);\n}\n\n/**\n * Resolve the report-relative asset path for an image reference.\n * Explicit serialized paths win; inline refs use the standard screenshots dir.\n */\nexport function reportImageAssetPath(ref: StoredImageRef): string {\n if (ref.storage === 'file' && ref.path) return ref.path;\n return `./screenshots/${encodeURIComponent(ref.id)}.${imageRefFileExtension(ref)}`;\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","knownImageExtensions","knownImageMimeTypesByExtension","hasValidStorage","record","hasValidImageId","normalizeScreenshotRef","value","normalizeImageUrlRef","normalizeStoredImageRef","imageFileExtensionForMimeType","mimeType","knownExtension","subtype","sanitized","Error","imageMimeTypeForFileExtension","extension","imageRefFileExtension","ref","reportImageAssetPath","encodeURIComponent"],"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;;;;;;;;;;;;;ACgBA,MAAMI,uBAAyD;IAC7D,cAAc;IACd,aAAa;IACb,aAAa;IACb,cAAc;IACd,aAAa;IACb,iBAAiB;IACjB,cAAc;IACd,aAAa;AACf;AAEA,MAAMC,iCAEF;IACF,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;AACP;AAEA,SAASC,gBAAgBC,MAA+B;IACtD,IAAIA,AAAmB,aAAnBA,OAAO,OAAO,IAAiBA,AAAmB,WAAnBA,OAAO,OAAO,EAAa,OAAO;IACrE,OAAOA,AAAmB,WAAnBA,OAAO,OAAO,IAAe,AAAuB,YAAvB,OAAOA,OAAO,IAAI;AACxD;AAEA,SAASC,gBAAgBD,MAA+B;IACtD,OACE,AAAqB,YAArB,OAAOA,OAAO,EAAE,IAAiB,uBAAuB,IAAI,CAACA,OAAO,EAAE;AAE1E;AAGO,SAASE,uBAAuBC,KAAc;IACnD,IAAI,AAAiB,YAAjB,OAAOA,SAAsBA,AAAU,SAAVA,OAAgB,OAAO;IACxD,MAAMH,SAASG;IAEf,IACEH,AAAgB,8BAAhBA,OAAO,IAAI,IACXC,gBAAgBD,WAChB,AAA6B,YAA7B,OAAOA,OAAO,UAAU,IACvBA,CAAAA,AAAoB,gBAApBA,OAAO,QAAQ,IAAoBA,AAAoB,iBAApBA,OAAO,QAAQ,AAAgB,KACnED,gBAAgBC,SAEhB,OAAOA;IAGT,OAAO;AACT;AAGO,SAASI,qBAAqBD,KAAc;IACjD,IAAI,AAAiB,YAAjB,OAAOA,SAAsBA,AAAU,SAAVA,OAAgB,OAAO;IACxD,MAAMH,SAASG;IAEf,IACEH,AAAgB,6BAAhBA,OAAO,IAAI,IACXC,gBAAgBD,WAChB,AAA2B,YAA3B,OAAOA,OAAO,QAAQ,IACtBA,OAAO,QAAQ,CAAC,UAAU,CAAC,aAC3BD,gBAAgBC,SAEhB,OAAOA;IAGT,OAAO;AACT;AAGO,SAASK,wBAAwBF,KAAc;IACpD,OAAOD,uBAAuBC,UAAUC,qBAAqBD;AAC/D;AAGO,SAASG,8BAA8BC,QAAgB;IAC5D,MAAMC,iBAAiBX,oBAAoB,CAACU,SAAS,WAAW,GAAG;IACnE,IAAIC,gBAAgB,OAAOA;IAE3B,MAAMC,UAAUF,SAAS,KAAK,CAAC,GAAiB,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE;IAChE,MAAMG,YAAYD,QACf,WAAW,GACX,OAAO,CAAC,eAAe,KACvB,OAAO,CAAC,YAAY,IACpB,KAAK,CAAC,GAAG;IACZ,IAAI,CAACC,WACH,MAAM,IAAIC,MACR,CAAC,2DAA2D,EAAEJ,SAAS,CAAC,CAAC;IAG7E,OAAOG;AACT;AAGO,SAASE,8BACdC,SAAiB;IAEjB,OAAOf,8BAA8B,CAACe,UAAU,WAAW,GAAG,IAAI;AACpE;AAGO,SAASC,sBAAsBC,GAAmB;IACvD,OAAOT,8BAA8BS,IAAI,QAAQ;AACnD;AAMO,SAASC,qBAAqBD,GAAmB;IACtD,IAAIA,AAAgB,WAAhBA,IAAI,OAAO,IAAeA,IAAI,IAAI,EAAE,OAAOA,IAAI,IAAI;IACvD,OAAO,CAAC,cAAc,EAAEE,mBAAmBF,IAAI,EAAE,EAAE,CAAC,EAAED,sBAAsBC,MAAM;AACpF"}
|
|
@@ -0,0 +1,284 @@
|
|
|
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
|
+
ReportActionDump: ()=>ReportActionDump,
|
|
28
|
+
ExecutionDump: ()=>ExecutionDump,
|
|
29
|
+
GroupedActionDump: ()=>GroupedActionDump
|
|
30
|
+
});
|
|
31
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
32
|
+
const external_node_path_namespaceObject = require("node:path");
|
|
33
|
+
const external_screenshot_item_js_namespaceObject = require("../screenshot-item.js");
|
|
34
|
+
const external_screenshot_restoration_js_namespaceObject = require("./screenshot-restoration.js");
|
|
35
|
+
const external_screenshot_store_js_namespaceObject = require("./screenshot-store.js");
|
|
36
|
+
function _define_property(obj, key, value) {
|
|
37
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
38
|
+
value: value,
|
|
39
|
+
enumerable: true,
|
|
40
|
+
configurable: true,
|
|
41
|
+
writable: true
|
|
42
|
+
});
|
|
43
|
+
else obj[key] = value;
|
|
44
|
+
return obj;
|
|
45
|
+
}
|
|
46
|
+
function isReferenceImageDescriptor(value) {
|
|
47
|
+
if ('object' != typeof value || null === value) return false;
|
|
48
|
+
const record = value;
|
|
49
|
+
return 'string' == typeof record.name && 'string' == typeof record.url;
|
|
50
|
+
}
|
|
51
|
+
function getPageOrBrowserObjectName(value) {
|
|
52
|
+
if ('object' != typeof value || null === value) return null;
|
|
53
|
+
const constructorName = value.constructor?.name;
|
|
54
|
+
return 'Page' === constructorName || 'Browser' === constructorName ? constructorName : null;
|
|
55
|
+
}
|
|
56
|
+
function isCustomSerializableObject(value) {
|
|
57
|
+
return 'object' == typeof value && null !== value && 'function' == typeof value.toSerializable;
|
|
58
|
+
}
|
|
59
|
+
function isPlainRecord(value) {
|
|
60
|
+
const prototype = Object.getPrototypeOf(value);
|
|
61
|
+
return prototype === Object.prototype || null === prototype;
|
|
62
|
+
}
|
|
63
|
+
function replacerForDumpSerialization(key, value) {
|
|
64
|
+
if ('screenshotSequence' === key) return;
|
|
65
|
+
const opaqueObjectName = getPageOrBrowserObjectName(value);
|
|
66
|
+
if (opaqueObjectName) return `[${opaqueObjectName} object]`;
|
|
67
|
+
if (isCustomSerializableObject(value)) return value.toSerializable();
|
|
68
|
+
return value;
|
|
69
|
+
}
|
|
70
|
+
function stringifyDump(data, indents) {
|
|
71
|
+
return JSON.stringify(data, replacerForDumpSerialization, indents);
|
|
72
|
+
}
|
|
73
|
+
function replaceReferenceImageUrls(value, referenceImageRefsByUrl, ancestors = new WeakSet()) {
|
|
74
|
+
if ('object' != typeof value || null === value) return value;
|
|
75
|
+
if (getPageOrBrowserObjectName(value) || isCustomSerializableObject(value) || !Array.isArray(value) && !isPlainRecord(value)) return value;
|
|
76
|
+
if (ancestors.has(value)) return value;
|
|
77
|
+
ancestors.add(value);
|
|
78
|
+
try {
|
|
79
|
+
if (Array.isArray(value)) return value.map((item)=>replaceReferenceImageUrls(item, referenceImageRefsByUrl, ancestors));
|
|
80
|
+
const result = {};
|
|
81
|
+
for (const [key, nestedValue] of Object.entries(value)){
|
|
82
|
+
if ('images' === key && Array.isArray(nestedValue)) {
|
|
83
|
+
result[key] = nestedValue.map((image)=>{
|
|
84
|
+
const transformedImage = replaceReferenceImageUrls(image, referenceImageRefsByUrl, ancestors);
|
|
85
|
+
if (!isReferenceImageDescriptor(image)) return transformedImage;
|
|
86
|
+
const referenceImageRef = referenceImageRefsByUrl.get(image.url);
|
|
87
|
+
if (!referenceImageRef || 'object' != typeof transformedImage || null === transformedImage || !isPlainRecord(transformedImage)) return transformedImage;
|
|
88
|
+
return {
|
|
89
|
+
...transformedImage,
|
|
90
|
+
url: referenceImageRef
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
result[key] = replaceReferenceImageUrls(nestedValue, referenceImageRefsByUrl, ancestors);
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
} finally{
|
|
99
|
+
ancestors.delete(value);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function reviverForDumpDeserialization(key, value) {
|
|
103
|
+
if ('screenshot' !== key || 'object' != typeof value || null === value) return value;
|
|
104
|
+
external_screenshot_item_js_namespaceObject.ScreenshotItem.isSerialized(value);
|
|
105
|
+
return value;
|
|
106
|
+
}
|
|
107
|
+
class ExecutionDump {
|
|
108
|
+
serialize(indents) {
|
|
109
|
+
return stringifyDump(this.toJSON(), indents);
|
|
110
|
+
}
|
|
111
|
+
toJSON() {
|
|
112
|
+
return {
|
|
113
|
+
id: this.id,
|
|
114
|
+
logTime: this.logTime,
|
|
115
|
+
name: this.name,
|
|
116
|
+
description: this.description,
|
|
117
|
+
tasks: this.tasks.map((task)=>({
|
|
118
|
+
...task,
|
|
119
|
+
recorder: task.recorder || []
|
|
120
|
+
})),
|
|
121
|
+
aiActContext: this.aiActContext
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
static fromSerializedString(serialized) {
|
|
125
|
+
const parsed = JSON.parse(serialized, reviverForDumpDeserialization);
|
|
126
|
+
return new ExecutionDump(parsed);
|
|
127
|
+
}
|
|
128
|
+
static fromJSON(data) {
|
|
129
|
+
return new ExecutionDump(data);
|
|
130
|
+
}
|
|
131
|
+
collectScreenshots() {
|
|
132
|
+
const screenshots = [];
|
|
133
|
+
for (const task of this.tasks){
|
|
134
|
+
if (task.uiContext?.screenshot instanceof external_screenshot_item_js_namespaceObject.ScreenshotItem) screenshots.push(task.uiContext.screenshot);
|
|
135
|
+
if (task.recorder) {
|
|
136
|
+
for (const record of task.recorder)if (record.screenshot instanceof external_screenshot_item_js_namespaceObject.ScreenshotItem) screenshots.push(record.screenshot);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return screenshots;
|
|
140
|
+
}
|
|
141
|
+
getReferenceImageUrls() {
|
|
142
|
+
return [
|
|
143
|
+
...this.referenceImageUrls
|
|
144
|
+
];
|
|
145
|
+
}
|
|
146
|
+
constructor(data, options){
|
|
147
|
+
_define_property(this, "id", void 0);
|
|
148
|
+
_define_property(this, "logTime", void 0);
|
|
149
|
+
_define_property(this, "name", void 0);
|
|
150
|
+
_define_property(this, "description", void 0);
|
|
151
|
+
_define_property(this, "tasks", void 0);
|
|
152
|
+
_define_property(this, "aiActContext", void 0);
|
|
153
|
+
_define_property(this, "referenceImageUrls", void 0);
|
|
154
|
+
this.id = data.id;
|
|
155
|
+
this.logTime = data.logTime;
|
|
156
|
+
this.name = data.name;
|
|
157
|
+
this.description = data.description;
|
|
158
|
+
this.tasks = data.tasks;
|
|
159
|
+
this.aiActContext = data.aiActContext;
|
|
160
|
+
this.referenceImageUrls = Array.from(new Set((options?.referenceImageUrls ?? []).filter(external_screenshot_store_js_namespaceObject.isBase64ImageDataUrl)));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
class ReportActionDump {
|
|
164
|
+
serialize(indents) {
|
|
165
|
+
return stringifyDump(this.toJSON(), indents);
|
|
166
|
+
}
|
|
167
|
+
serializeWithReferenceImages(referenceImageRefsByUrl, indents) {
|
|
168
|
+
return stringifyDump(replaceReferenceImageUrls(this.toJSON(), referenceImageRefsByUrl), indents);
|
|
169
|
+
}
|
|
170
|
+
serializeWithInlineScreenshots(indents) {
|
|
171
|
+
const processValue = (obj)=>{
|
|
172
|
+
if (obj instanceof external_screenshot_item_js_namespaceObject.ScreenshotItem) return {
|
|
173
|
+
base64: obj.base64,
|
|
174
|
+
capturedAt: obj.capturedAt
|
|
175
|
+
};
|
|
176
|
+
if (Array.isArray(obj)) return obj.map(processValue);
|
|
177
|
+
if (obj && 'object' == typeof obj) {
|
|
178
|
+
const entries = Object.entries(obj).filter(([key])=>'screenshotSequence' !== key).map(([key, value])=>[
|
|
179
|
+
key,
|
|
180
|
+
processValue(value)
|
|
181
|
+
]);
|
|
182
|
+
return Object.fromEntries(entries);
|
|
183
|
+
}
|
|
184
|
+
return obj;
|
|
185
|
+
};
|
|
186
|
+
const data = processValue(this.toJSON());
|
|
187
|
+
return JSON.stringify(data, null, indents);
|
|
188
|
+
}
|
|
189
|
+
toJSON() {
|
|
190
|
+
return {
|
|
191
|
+
sdkVersion: this.sdkVersion,
|
|
192
|
+
groupName: this.groupName,
|
|
193
|
+
groupDescription: this.groupDescription,
|
|
194
|
+
modelBriefs: this.modelBriefs,
|
|
195
|
+
executions: this.executions.map((exec)=>exec.toJSON()),
|
|
196
|
+
deviceType: this.deviceType
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
static fromSerializedString(serialized) {
|
|
200
|
+
const parsed = JSON.parse(serialized, reviverForDumpDeserialization);
|
|
201
|
+
return new ReportActionDump(parsed);
|
|
202
|
+
}
|
|
203
|
+
static fromJSON(data) {
|
|
204
|
+
return new ReportActionDump(data);
|
|
205
|
+
}
|
|
206
|
+
collectAllScreenshots() {
|
|
207
|
+
const screenshots = [];
|
|
208
|
+
for (const execution of this.executions)screenshots.push(...execution.collectScreenshots());
|
|
209
|
+
return screenshots;
|
|
210
|
+
}
|
|
211
|
+
serializeToFiles(basePath) {
|
|
212
|
+
const screenshotsDir = `${basePath}.screenshots`;
|
|
213
|
+
if (!(0, external_node_fs_namespaceObject.existsSync)(screenshotsDir)) (0, external_node_fs_namespaceObject.mkdirSync)(screenshotsDir, {
|
|
214
|
+
recursive: true
|
|
215
|
+
});
|
|
216
|
+
const screenshots = this.collectAllScreenshots();
|
|
217
|
+
for (const screenshot of screenshots){
|
|
218
|
+
const imagePath = (0, external_node_path_namespaceObject.join)(screenshotsDir, `${screenshot.id}.${screenshot.extension}`);
|
|
219
|
+
if ((0, external_node_fs_namespaceObject.existsSync)(imagePath)) continue;
|
|
220
|
+
const rawBase64 = screenshot.rawBase64;
|
|
221
|
+
(0, external_node_fs_namespaceObject.writeFileSync)(imagePath, Buffer.from(rawBase64, 'base64'));
|
|
222
|
+
}
|
|
223
|
+
(0, external_node_fs_namespaceObject.writeFileSync)(basePath, this.serialize(), 'utf-8');
|
|
224
|
+
}
|
|
225
|
+
static fromFilesAsInlineJson(basePath) {
|
|
226
|
+
const dumpString = (0, external_node_fs_namespaceObject.readFileSync)(basePath, 'utf-8');
|
|
227
|
+
const screenshotsDir = `${basePath}.screenshots`;
|
|
228
|
+
const dumpData = JSON.parse(dumpString);
|
|
229
|
+
const imageStore = new external_screenshot_store_js_namespaceObject.ReportImageStore({
|
|
230
|
+
mode: 'directory',
|
|
231
|
+
reportPath: basePath,
|
|
232
|
+
screenshotsDir
|
|
233
|
+
});
|
|
234
|
+
const resolveImage = (ref)=>imageStore.loadDataUri(ref);
|
|
235
|
+
const processedData = (0, external_screenshot_restoration_js_namespaceObject.restoreImageReferences)(dumpData, resolveImage);
|
|
236
|
+
return JSON.stringify(processedData);
|
|
237
|
+
}
|
|
238
|
+
static cleanupFiles(basePath) {
|
|
239
|
+
const filesToClean = [
|
|
240
|
+
basePath,
|
|
241
|
+
`${basePath}.screenshots`
|
|
242
|
+
];
|
|
243
|
+
for (const filePath of filesToClean)try {
|
|
244
|
+
(0, external_node_fs_namespaceObject.rmSync)(filePath, {
|
|
245
|
+
force: true,
|
|
246
|
+
recursive: true
|
|
247
|
+
});
|
|
248
|
+
} catch {}
|
|
249
|
+
}
|
|
250
|
+
static getFilePaths(basePath) {
|
|
251
|
+
return [
|
|
252
|
+
basePath,
|
|
253
|
+
`${basePath}.screenshots`
|
|
254
|
+
];
|
|
255
|
+
}
|
|
256
|
+
constructor(data){
|
|
257
|
+
_define_property(this, "sdkVersion", void 0);
|
|
258
|
+
_define_property(this, "groupName", void 0);
|
|
259
|
+
_define_property(this, "groupDescription", void 0);
|
|
260
|
+
_define_property(this, "modelBriefs", void 0);
|
|
261
|
+
_define_property(this, "executions", void 0);
|
|
262
|
+
_define_property(this, "deviceType", void 0);
|
|
263
|
+
this.sdkVersion = data.sdkVersion;
|
|
264
|
+
this.groupName = data.groupName;
|
|
265
|
+
this.groupDescription = data.groupDescription;
|
|
266
|
+
this.modelBriefs = data.modelBriefs;
|
|
267
|
+
this.executions = data.executions.map((exec)=>exec instanceof ExecutionDump ? exec : ExecutionDump.fromJSON(exec));
|
|
268
|
+
this.deviceType = data.deviceType;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
const GroupedActionDump = ReportActionDump;
|
|
272
|
+
exports.ExecutionDump = __webpack_exports__.ExecutionDump;
|
|
273
|
+
exports.GroupedActionDump = __webpack_exports__.GroupedActionDump;
|
|
274
|
+
exports.ReportActionDump = __webpack_exports__.ReportActionDump;
|
|
275
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
276
|
+
"ExecutionDump",
|
|
277
|
+
"GroupedActionDump",
|
|
278
|
+
"ReportActionDump"
|
|
279
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
280
|
+
Object.defineProperty(exports, '__esModule', {
|
|
281
|
+
value: true
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
//# sourceMappingURL=report-action-dump.js.map
|