tabwright 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/bin.js +4 -0
- package/dist/a11y-client.js +204 -0
- package/dist/agent-skills/tabwright/SKILL.md +119 -0
- package/dist/aria-snapshot.d.ts +262 -0
- package/dist/aria-snapshot.d.ts.map +1 -0
- package/dist/aria-snapshot.js +1256 -0
- package/dist/aria-snapshot.js.map +1 -0
- package/dist/aria-snapshot.test.d.ts +2 -0
- package/dist/aria-snapshot.test.d.ts.map +1 -0
- package/dist/aria-snapshot.test.js +270 -0
- package/dist/aria-snapshot.test.js.map +1 -0
- package/dist/aria-snapshot.unit.test.d.ts +2 -0
- package/dist/aria-snapshot.unit.test.d.ts.map +1 -0
- package/dist/aria-snapshot.unit.test.js +542 -0
- package/dist/aria-snapshot.unit.test.js.map +1 -0
- package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts +5 -0
- package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts.map +1 -0
- package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js +5 -0
- package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js.map +1 -0
- package/dist/bippy.js +894 -0
- package/dist/browser-config.d.ts +13 -0
- package/dist/browser-config.d.ts.map +1 -0
- package/dist/browser-config.js +126 -0
- package/dist/browser-config.js.map +1 -0
- package/dist/browser-install.d.ts +16 -0
- package/dist/browser-install.d.ts.map +1 -0
- package/dist/browser-install.js +238 -0
- package/dist/browser-install.js.map +1 -0
- package/dist/browser-launch.d.ts +17 -0
- package/dist/browser-launch.d.ts.map +1 -0
- package/dist/browser-launch.js +44 -0
- package/dist/browser-launch.js.map +1 -0
- package/dist/builtin-capabilities.d.ts +28 -0
- package/dist/builtin-capabilities.d.ts.map +1 -0
- package/dist/builtin-capabilities.js +2673 -0
- package/dist/builtin-capabilities.js.map +1 -0
- package/dist/capability-agent-skill.d.ts +60 -0
- package/dist/capability-agent-skill.d.ts.map +1 -0
- package/dist/capability-agent-skill.js +225 -0
- package/dist/capability-agent-skill.js.map +1 -0
- package/dist/capability-auth-state.d.ts +34 -0
- package/dist/capability-auth-state.d.ts.map +1 -0
- package/dist/capability-auth-state.js +157 -0
- package/dist/capability-auth-state.js.map +1 -0
- package/dist/capability-auth.d.ts +36 -0
- package/dist/capability-auth.d.ts.map +1 -0
- package/dist/capability-auth.js +198 -0
- package/dist/capability-auth.js.map +1 -0
- package/dist/capability-cli-confirmation.test.d.ts +2 -0
- package/dist/capability-cli-confirmation.test.d.ts.map +1 -0
- package/dist/capability-cli-confirmation.test.js +79 -0
- package/dist/capability-cli-confirmation.test.js.map +1 -0
- package/dist/capability-options.d.ts +20 -0
- package/dist/capability-options.d.ts.map +1 -0
- package/dist/capability-options.js +31 -0
- package/dist/capability-options.js.map +1 -0
- package/dist/capability-options.test.d.ts +2 -0
- package/dist/capability-options.test.d.ts.map +1 -0
- package/dist/capability-options.test.js +81 -0
- package/dist/capability-options.test.js.map +1 -0
- package/dist/capability-package.d.ts +27 -0
- package/dist/capability-package.d.ts.map +1 -0
- package/dist/capability-package.js +444 -0
- package/dist/capability-package.js.map +1 -0
- package/dist/capability-package.test.d.ts +2 -0
- package/dist/capability-package.test.d.ts.map +1 -0
- package/dist/capability-package.test.js +179 -0
- package/dist/capability-package.test.js.map +1 -0
- package/dist/capability-registry.d.ts +262 -0
- package/dist/capability-registry.d.ts.map +1 -0
- package/dist/capability-registry.js +931 -0
- package/dist/capability-registry.js.map +1 -0
- package/dist/capability-registry.test.d.ts +2 -0
- package/dist/capability-registry.test.d.ts.map +1 -0
- package/dist/capability-registry.test.js +1683 -0
- package/dist/capability-registry.test.js.map +1 -0
- package/dist/capability-runner.d.ts +99 -0
- package/dist/capability-runner.d.ts.map +1 -0
- package/dist/capability-runner.js +608 -0
- package/dist/capability-runner.js.map +1 -0
- package/dist/capability-search-relevance.test.d.ts +2 -0
- package/dist/capability-search-relevance.test.d.ts.map +1 -0
- package/dist/capability-search-relevance.test.js +67 -0
- package/dist/capability-search-relevance.test.js.map +1 -0
- package/dist/capability-studio.d.ts +11 -0
- package/dist/capability-studio.d.ts.map +1 -0
- package/dist/capability-studio.js +593 -0
- package/dist/capability-studio.js.map +1 -0
- package/dist/capability-studio.test.d.ts +2 -0
- package/dist/capability-studio.test.d.ts.map +1 -0
- package/dist/capability-studio.test.js +41 -0
- package/dist/capability-studio.test.js.map +1 -0
- package/dist/cdp-log.d.ts +19 -0
- package/dist/cdp-log.d.ts.map +1 -0
- package/dist/cdp-log.js +83 -0
- package/dist/cdp-log.js.map +1 -0
- package/dist/cdp-log.test.d.ts +2 -0
- package/dist/cdp-log.test.d.ts.map +1 -0
- package/dist/cdp-log.test.js +109 -0
- package/dist/cdp-log.test.js.map +1 -0
- package/dist/cdp-relay.d.ts +19 -0
- package/dist/cdp-relay.d.ts.map +1 -0
- package/dist/cdp-relay.js +2375 -0
- package/dist/cdp-relay.js.map +1 -0
- package/dist/cdp-session.d.ts +37 -0
- package/dist/cdp-session.d.ts.map +1 -0
- package/dist/cdp-session.js +36 -0
- package/dist/cdp-session.js.map +1 -0
- package/dist/cdp-types.d.ts +65 -0
- package/dist/cdp-types.d.ts.map +1 -0
- package/dist/cdp-types.js +91 -0
- package/dist/cdp-types.js.map +1 -0
- package/dist/channel-owner-inspect.test.d.ts +2 -0
- package/dist/channel-owner-inspect.test.d.ts.map +1 -0
- package/dist/channel-owner-inspect.test.js +75 -0
- package/dist/channel-owner-inspect.test.js.map +1 -0
- package/dist/chrome-discovery.d.ts +65 -0
- package/dist/chrome-discovery.d.ts.map +1 -0
- package/dist/chrome-discovery.js +173 -0
- package/dist/chrome-discovery.js.map +1 -0
- package/dist/chrome-discovery.test.d.ts +2 -0
- package/dist/chrome-discovery.test.d.ts.map +1 -0
- package/dist/chrome-discovery.test.js +41 -0
- package/dist/chrome-discovery.test.js.map +1 -0
- package/dist/clean-html.d.ts +11 -0
- package/dist/clean-html.d.ts.map +1 -0
- package/dist/clean-html.js +106 -0
- package/dist/clean-html.js.map +1 -0
- package/dist/cli-help.test.d.ts +2 -0
- package/dist/cli-help.test.d.ts.map +1 -0
- package/dist/cli-help.test.js +98 -0
- package/dist/cli-help.test.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +2709 -0
- package/dist/cli.js.map +1 -0
- package/dist/cloud-client.d.ts +56 -0
- package/dist/cloud-client.d.ts.map +1 -0
- package/dist/cloud-client.js +127 -0
- package/dist/cloud-client.js.map +1 -0
- package/dist/create-logger.d.ts +9 -0
- package/dist/create-logger.d.ts.map +1 -0
- package/dist/create-logger.js +27 -0
- package/dist/create-logger.js.map +1 -0
- package/dist/debugger-api.md +458 -0
- package/dist/debugger-examples-types.d.ts +24 -0
- package/dist/debugger-examples-types.d.ts.map +1 -0
- package/dist/debugger-examples-types.js +2 -0
- package/dist/debugger-examples-types.js.map +1 -0
- package/dist/debugger-examples.d.ts +6 -0
- package/dist/debugger-examples.d.ts.map +1 -0
- package/dist/debugger-examples.js +53 -0
- package/dist/debugger-examples.js.map +1 -0
- package/dist/debugger.d.ts +381 -0
- package/dist/debugger.d.ts.map +1 -0
- package/dist/debugger.js +630 -0
- package/dist/debugger.js.map +1 -0
- package/dist/diff-utils.d.ts +20 -0
- package/dist/diff-utils.d.ts.map +1 -0
- package/dist/diff-utils.js +50 -0
- package/dist/diff-utils.js.map +1 -0
- package/dist/diff-utils.test.d.ts +2 -0
- package/dist/diff-utils.test.d.ts.map +1 -0
- package/dist/diff-utils.test.js +137 -0
- package/dist/diff-utils.test.js.map +1 -0
- package/dist/doctor.d.ts +44 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +246 -0
- package/dist/doctor.js.map +1 -0
- package/dist/doctor.test.d.ts +2 -0
- package/dist/doctor.test.d.ts.map +1 -0
- package/dist/doctor.test.js +208 -0
- package/dist/doctor.test.js.map +1 -0
- package/dist/editor-api.md +374 -0
- package/dist/editor-examples.d.ts +11 -0
- package/dist/editor-examples.d.ts.map +1 -0
- package/dist/editor-examples.js +124 -0
- package/dist/editor-examples.js.map +1 -0
- package/dist/editor.d.ts +203 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +363 -0
- package/dist/editor.js.map +1 -0
- package/dist/env-compat.d.ts +2 -0
- package/dist/env-compat.d.ts.map +1 -0
- package/dist/env-compat.js +27 -0
- package/dist/env-compat.js.map +1 -0
- package/dist/executor.d.ts +229 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +1465 -0
- package/dist/executor.js.map +1 -0
- package/dist/executor.unit.test.d.ts +2 -0
- package/dist/executor.unit.test.d.ts.map +1 -0
- package/dist/executor.unit.test.js +143 -0
- package/dist/executor.unit.test.js.map +1 -0
- package/dist/extension/_locales/en/messages.json +278 -0
- package/dist/extension/_locales/zh_CN/messages.json +256 -0
- package/dist/extension/assets/options-CYH96Lcx.css +1349 -0
- package/dist/extension/background.js +3994 -0
- package/dist/extension/icons/SolarCursorSquareBold.png +0 -0
- package/dist/extension/icons/icon-black-128.png +0 -0
- package/dist/extension/icons/icon-black-16.png +0 -0
- package/dist/extension/icons/icon-black-32.png +0 -0
- package/dist/extension/icons/icon-black-48.png +0 -0
- package/dist/extension/icons/icon-gray-128.png +0 -0
- package/dist/extension/icons/icon-gray-16.png +0 -0
- package/dist/extension/icons/icon-gray-32.png +0 -0
- package/dist/extension/icons/icon-gray-48.png +0 -0
- package/dist/extension/icons/icon-green-128.png +0 -0
- package/dist/extension/icons/icon-green-16.png +0 -0
- package/dist/extension/icons/icon-green-32.png +0 -0
- package/dist/extension/icons/icon-green-48.png +0 -0
- package/dist/extension/icons/tabwright-icon-black.png +0 -0
- package/dist/extension/icons/tabwright-icon-gray-disabled.png +0 -0
- package/dist/extension/icons/tabwright-icon-gray-disabled.svg +1 -0
- package/dist/extension/manifest.json +54 -0
- package/dist/extension/options.js +16145 -0
- package/dist/extension/rrweb-recorder.js +12952 -0
- package/dist/extension/src/options.html +165 -0
- package/dist/extension/src/prism-bash.min.js +1 -0
- package/dist/extension/src/prism.min.js +1 -0
- package/dist/extension/src/welcome.html +396 -0
- package/dist/extension-connection.test.d.ts +2 -0
- package/dist/extension-connection.test.d.ts.map +1 -0
- package/dist/extension-connection.test.js +708 -0
- package/dist/extension-connection.test.js.map +1 -0
- package/dist/extension-icon-warning.test.d.ts +2 -0
- package/dist/extension-icon-warning.test.d.ts.map +1 -0
- package/dist/extension-icon-warning.test.js +33 -0
- package/dist/extension-icon-warning.test.js.map +1 -0
- package/dist/ghost-browser.d.ts +62 -0
- package/dist/ghost-browser.d.ts.map +1 -0
- package/dist/ghost-browser.js +107 -0
- package/dist/ghost-browser.js.map +1 -0
- package/dist/ghost-cursor-client.js +374 -0
- package/dist/ghost-cursor-controller.d.ts +46 -0
- package/dist/ghost-cursor-controller.d.ts.map +1 -0
- package/dist/ghost-cursor-controller.js +98 -0
- package/dist/ghost-cursor-controller.js.map +1 -0
- package/dist/ghost-cursor.d.ts +27 -0
- package/dist/ghost-cursor.d.ts.map +1 -0
- package/dist/ghost-cursor.js +79 -0
- package/dist/ghost-cursor.js.map +1 -0
- package/dist/htmlrewrite.d.ts +8 -0
- package/dist/htmlrewrite.d.ts.map +1 -0
- package/dist/htmlrewrite.js +339 -0
- package/dist/htmlrewrite.js.map +1 -0
- package/dist/htmlrewrite.test.d.ts +2 -0
- package/dist/htmlrewrite.test.d.ts.map +1 -0
- package/dist/htmlrewrite.test.js +7975 -0
- package/dist/htmlrewrite.test.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/kill-port.d.ts +29 -0
- package/dist/kill-port.d.ts.map +1 -0
- package/dist/kill-port.js +190 -0
- package/dist/kill-port.js.map +1 -0
- package/dist/kitty-graphics.d.ts +22 -0
- package/dist/kitty-graphics.d.ts.map +1 -0
- package/dist/kitty-graphics.js +71 -0
- package/dist/kitty-graphics.js.map +1 -0
- package/dist/kitty-graphics.test.d.ts +2 -0
- package/dist/kitty-graphics.test.d.ts.map +1 -0
- package/dist/kitty-graphics.test.js +125 -0
- package/dist/kitty-graphics.test.js.map +1 -0
- package/dist/locator-selector.test.d.ts +2 -0
- package/dist/locator-selector.test.d.ts.map +1 -0
- package/dist/locator-selector.test.js +98 -0
- package/dist/locator-selector.test.js.map +1 -0
- package/dist/mcp-client.d.ts +20 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +56 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/mcp.d.ts +6 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +511 -0
- package/dist/mcp.js.map +1 -0
- package/dist/on-mouse-action.test.d.ts +2 -0
- package/dist/on-mouse-action.test.d.ts.map +1 -0
- package/dist/on-mouse-action.test.js +180 -0
- package/dist/on-mouse-action.test.js.map +1 -0
- package/dist/options-page.test.d.ts +2 -0
- package/dist/options-page.test.d.ts.map +1 -0
- package/dist/options-page.test.js +773 -0
- package/dist/options-page.test.js.map +1 -0
- package/dist/package-paths.d.ts +4 -0
- package/dist/package-paths.d.ts.map +1 -0
- package/dist/package-paths.js +30 -0
- package/dist/package-paths.js.map +1 -0
- package/dist/page-markdown.d.ts +40 -0
- package/dist/page-markdown.d.ts.map +1 -0
- package/dist/page-markdown.js +181 -0
- package/dist/page-markdown.js.map +1 -0
- package/dist/performance-examples.d.ts +5 -0
- package/dist/performance-examples.d.ts.map +1 -0
- package/dist/performance-examples.js +112 -0
- package/dist/performance-examples.js.map +1 -0
- package/dist/performance-profiling.md +417 -0
- package/dist/playwright-import.d.ts +19 -0
- package/dist/playwright-import.d.ts.map +1 -0
- package/dist/playwright-import.js +40 -0
- package/dist/playwright-import.js.map +1 -0
- package/dist/popup-relocation.test.d.ts +7 -0
- package/dist/popup-relocation.test.d.ts.map +1 -0
- package/dist/popup-relocation.test.js +139 -0
- package/dist/popup-relocation.test.js.map +1 -0
- package/dist/product-paths.d.ts +9 -0
- package/dist/product-paths.d.ts.map +1 -0
- package/dist/product-paths.js +24 -0
- package/dist/product-paths.js.map +1 -0
- package/dist/product-paths.test.d.ts +2 -0
- package/dist/product-paths.test.d.ts.map +1 -0
- package/dist/product-paths.test.js +39 -0
- package/dist/product-paths.test.js.map +1 -0
- package/dist/prompt.md +1004 -0
- package/dist/protocol.d.ts +248 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +59 -0
- package/dist/protocol.js.map +1 -0
- package/dist/protocol.test.d.ts +2 -0
- package/dist/protocol.test.d.ts.map +1 -0
- package/dist/protocol.test.js +31 -0
- package/dist/protocol.test.js.map +1 -0
- package/dist/react-source.d.ts +57 -0
- package/dist/react-source.d.ts.map +1 -0
- package/dist/react-source.js +254 -0
- package/dist/react-source.js.map +1 -0
- package/dist/readability.js +1674 -0
- package/dist/relay-client.d.ts +104 -0
- package/dist/relay-client.d.ts.map +1 -0
- package/dist/relay-client.js +426 -0
- package/dist/relay-client.js.map +1 -0
- package/dist/relay-client.test.d.ts +2 -0
- package/dist/relay-client.test.d.ts.map +1 -0
- package/dist/relay-client.test.js +305 -0
- package/dist/relay-client.test.js.map +1 -0
- package/dist/relay-core.test.d.ts +2 -0
- package/dist/relay-core.test.d.ts.map +1 -0
- package/dist/relay-core.test.js +1427 -0
- package/dist/relay-core.test.js.map +1 -0
- package/dist/relay-navigation.test.d.ts +2 -0
- package/dist/relay-navigation.test.d.ts.map +1 -0
- package/dist/relay-navigation.test.js +661 -0
- package/dist/relay-navigation.test.js.map +1 -0
- package/dist/relay-session.test.d.ts +2 -0
- package/dist/relay-session.test.d.ts.map +1 -0
- package/dist/relay-session.test.js +1121 -0
- package/dist/relay-session.test.js.map +1 -0
- package/dist/relay-state.d.ts +178 -0
- package/dist/relay-state.d.ts.map +1 -0
- package/dist/relay-state.js +346 -0
- package/dist/relay-state.js.map +1 -0
- package/dist/relay-state.test.d.ts +2 -0
- package/dist/relay-state.test.d.ts.map +1 -0
- package/dist/relay-state.test.js +594 -0
- package/dist/relay-state.test.js.map +1 -0
- package/dist/replay-ai-index.d.ts +99 -0
- package/dist/replay-ai-index.d.ts.map +1 -0
- package/dist/replay-ai-index.js +677 -0
- package/dist/replay-ai-index.js.map +1 -0
- package/dist/replay-ai-index.test.d.ts +2 -0
- package/dist/replay-ai-index.test.d.ts.map +1 -0
- package/dist/replay-ai-index.test.js +255 -0
- package/dist/replay-ai-index.test.js.map +1 -0
- package/dist/replay-cli.test.d.ts +2 -0
- package/dist/replay-cli.test.d.ts.map +1 -0
- package/dist/replay-cli.test.js +275 -0
- package/dist/replay-cli.test.js.map +1 -0
- package/dist/replay-eval.d.ts +44 -0
- package/dist/replay-eval.d.ts.map +1 -0
- package/dist/replay-eval.js +902 -0
- package/dist/replay-eval.js.map +1 -0
- package/dist/replay-handoff.d.ts +29 -0
- package/dist/replay-handoff.d.ts.map +1 -0
- package/dist/replay-handoff.js +83 -0
- package/dist/replay-handoff.js.map +1 -0
- package/dist/replay-handoff.test.d.ts +2 -0
- package/dist/replay-handoff.test.d.ts.map +1 -0
- package/dist/replay-handoff.test.js +123 -0
- package/dist/replay-handoff.test.js.map +1 -0
- package/dist/replay-workflow-compiler.d.ts +44 -0
- package/dist/replay-workflow-compiler.d.ts.map +1 -0
- package/dist/replay-workflow-compiler.js +601 -0
- package/dist/replay-workflow-compiler.js.map +1 -0
- package/dist/replay-workflow-compiler.test.d.ts +2 -0
- package/dist/replay-workflow-compiler.test.d.ts.map +1 -0
- package/dist/replay-workflow-compiler.test.js +223 -0
- package/dist/replay-workflow-compiler.test.js.map +1 -0
- package/dist/rrweb-recording-relay.d.ts +56 -0
- package/dist/rrweb-recording-relay.d.ts.map +1 -0
- package/dist/rrweb-recording-relay.js +299 -0
- package/dist/rrweb-recording-relay.js.map +1 -0
- package/dist/rrweb-recording-relay.test.d.ts +2 -0
- package/dist/rrweb-recording-relay.test.d.ts.map +1 -0
- package/dist/rrweb-recording-relay.test.js +85 -0
- package/dist/rrweb-recording-relay.test.js.map +1 -0
- package/dist/rrweb-recording.d.ts +104 -0
- package/dist/rrweb-recording.d.ts.map +1 -0
- package/dist/rrweb-recording.js +180 -0
- package/dist/rrweb-recording.js.map +1 -0
- package/dist/scoped-fs.d.ts +95 -0
- package/dist/scoped-fs.d.ts.map +1 -0
- package/dist/scoped-fs.js +358 -0
- package/dist/scoped-fs.js.map +1 -0
- package/dist/scoped-fs.test.d.ts +5 -0
- package/dist/scoped-fs.test.d.ts.map +1 -0
- package/dist/scoped-fs.test.js +73 -0
- package/dist/scoped-fs.test.js.map +1 -0
- package/dist/selector-generator.js +7378 -0
- package/dist/skill-stub.test.d.ts +2 -0
- package/dist/skill-stub.test.d.ts.map +1 -0
- package/dist/skill-stub.test.js +22 -0
- package/dist/skill-stub.test.js.map +1 -0
- package/dist/snapshot-tools.test.d.ts +2 -0
- package/dist/snapshot-tools.test.d.ts.map +1 -0
- package/dist/snapshot-tools.test.js +856 -0
- package/dist/snapshot-tools.test.js.map +1 -0
- package/dist/start-relay-server.d.ts +6 -0
- package/dist/start-relay-server.d.ts.map +1 -0
- package/dist/start-relay-server.js +57 -0
- package/dist/start-relay-server.js.map +1 -0
- package/dist/styles-api.md +124 -0
- package/dist/styles-examples.d.ts +8 -0
- package/dist/styles-examples.d.ts.map +1 -0
- package/dist/styles-examples.js +64 -0
- package/dist/styles-examples.js.map +1 -0
- package/dist/styles.d.ts +27 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +231 -0
- package/dist/styles.js.map +1 -0
- package/dist/tabwright-agent-skill.d.ts +30 -0
- package/dist/tabwright-agent-skill.d.ts.map +1 -0
- package/dist/tabwright-agent-skill.js +74 -0
- package/dist/tabwright-agent-skill.js.map +1 -0
- package/dist/tabwright-agent-skill.test.d.ts +2 -0
- package/dist/tabwright-agent-skill.test.d.ts.map +1 -0
- package/dist/tabwright-agent-skill.test.js +51 -0
- package/dist/tabwright-agent-skill.test.js.map +1 -0
- package/dist/test-declarations.d.ts +13 -0
- package/dist/test-declarations.d.ts.map +1 -0
- package/dist/test-declarations.js +2 -0
- package/dist/test-declarations.js.map +1 -0
- package/dist/test-utils.d.ts +69 -0
- package/dist/test-utils.d.ts.map +1 -0
- package/dist/test-utils.js +448 -0
- package/dist/test-utils.js.map +1 -0
- package/dist/test-utils.test.d.ts +2 -0
- package/dist/test-utils.test.d.ts.map +1 -0
- package/dist/test-utils.test.js +55 -0
- package/dist/test-utils.test.js.map +1 -0
- package/dist/utils.d.ts +26 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +60 -0
- package/dist/utils.js.map +1 -0
- package/dist/wait-for-page-load.d.ts +16 -0
- package/dist/wait-for-page-load.d.ts.map +1 -0
- package/dist/wait-for-page-load.js +146 -0
- package/dist/wait-for-page-load.js.map +1 -0
- package/dist/workflow-capability.d.ts +72 -0
- package/dist/workflow-capability.d.ts.map +1 -0
- package/dist/workflow-capability.js +316 -0
- package/dist/workflow-capability.js.map +1 -0
- package/dist/workflow-script-flow.test.d.ts +2 -0
- package/dist/workflow-script-flow.test.d.ts.map +1 -0
- package/dist/workflow-script-flow.test.js +285 -0
- package/dist/workflow-script-flow.test.js.map +1 -0
- package/package.json +80 -0
- package/src/__snapshots__/x.com.processed.html +1003 -0
- package/src/__snapshots__/x.com.processed.withStyles.html +2720 -0
- package/src/a11y-client.ts +241 -0
- package/src/agent-skills/conan-config/SKILL.md +141 -0
- package/src/agent-skills/conan-config/agents/openai.yaml +4 -0
- package/src/aria-snapshot.test.ts +311 -0
- package/src/aria-snapshot.ts +1681 -0
- package/src/aria-snapshot.unit.test.ts +615 -0
- package/src/aria-snapshots/github-interactive.txt +193 -0
- package/src/aria-snapshots/github-raw.txt +309 -0
- package/src/aria-snapshots/hackernews-interactive.txt +477 -0
- package/src/aria-snapshots/hackernews-raw.txt +428 -0
- package/src/aria-snapshots/prosemirror-interactive.txt +66 -0
- package/src/aria-snapshots/prosemirror-raw.txt +145 -0
- package/src/assets/aria-labels-hacker-news.png +0 -0
- package/src/assets/aria-labels-old-reddit.png +0 -0
- package/src/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.ts +5 -0
- package/src/assets/cursors/screen-studio/pointer-macos-tahoe.svg +18 -0
- package/src/assets/x.com.html +32946 -0
- package/src/browser-config.ts +179 -0
- package/src/browser-install.ts +284 -0
- package/src/browser-launch.ts +75 -0
- package/src/builtin-capabilities.ts +2765 -0
- package/src/capability-agent-skill.ts +305 -0
- package/src/capability-auth-state.ts +197 -0
- package/src/capability-auth.ts +249 -0
- package/src/capability-cli-confirmation.test.ts +90 -0
- package/src/capability-options.test.ts +89 -0
- package/src/capability-options.ts +57 -0
- package/src/capability-package.test.ts +204 -0
- package/src/capability-package.ts +555 -0
- package/src/capability-registry.test.ts +1905 -0
- package/src/capability-registry.ts +1234 -0
- package/src/capability-runner.ts +801 -0
- package/src/capability-search-relevance.test.ts +73 -0
- package/src/capability-studio.test.ts +45 -0
- package/src/capability-studio.ts +641 -0
- package/src/cdp-log.test.ts +131 -0
- package/src/cdp-log.ts +112 -0
- package/src/cdp-relay.ts +2944 -0
- package/src/cdp-session.ts +77 -0
- package/src/cdp-types.ts +158 -0
- package/src/channel-owner-inspect.test.ts +94 -0
- package/src/chrome-discovery.test.ts +50 -0
- package/src/chrome-discovery.ts +220 -0
- package/src/clean-html.ts +141 -0
- package/src/cli-help.test.ts +123 -0
- package/src/cli.ts +3181 -0
- package/src/cloud-client.ts +179 -0
- package/src/create-logger.ts +38 -0
- package/src/debugger-examples-types.ts +16 -0
- package/src/debugger-examples.ts +66 -0
- package/src/debugger.ts +708 -0
- package/src/diff-utils.test.ts +152 -0
- package/src/diff-utils.ts +70 -0
- package/src/doctor.test.ts +244 -0
- package/src/doctor.ts +321 -0
- package/src/editor-examples.ts +158 -0
- package/src/editor.ts +426 -0
- package/src/env-compat.ts +28 -0
- package/src/executor.ts +1824 -0
- package/src/executor.unit.test.ts +168 -0
- package/src/extension-connection.test.ts +855 -0
- package/src/extension-icon-warning.test.ts +45 -0
- package/src/ghost-browser.ts +149 -0
- package/src/ghost-cursor-client.ts +494 -0
- package/src/ghost-cursor-controller.ts +129 -0
- package/src/ghost-cursor.ts +123 -0
- package/src/htmlrewrite.test.ts +8008 -0
- package/src/htmlrewrite.ts +390 -0
- package/src/index.ts +53 -0
- package/src/kill-port.ts +219 -0
- package/src/kitty-graphics.test.ts +139 -0
- package/src/kitty-graphics.ts +79 -0
- package/src/locator-selector.test.ts +119 -0
- package/src/mcp-client.ts +78 -0
- package/src/mcp.ts +629 -0
- package/src/on-mouse-action.test.ts +226 -0
- package/src/options-page.test.ts +839 -0
- package/src/package-paths.ts +38 -0
- package/src/page-markdown.ts +240 -0
- package/src/performance-examples.ts +186 -0
- package/src/playwright-import.ts +59 -0
- package/src/popup-relocation.test.ts +163 -0
- package/src/product-paths.test.ts +47 -0
- package/src/product-paths.ts +28 -0
- package/src/protocol.test.ts +52 -0
- package/src/protocol.ts +351 -0
- package/src/react-source.ts +379 -0
- package/src/relay-client.test.ts +375 -0
- package/src/relay-client.ts +572 -0
- package/src/relay-core.test.ts +1603 -0
- package/src/relay-navigation.test.ts +790 -0
- package/src/relay-session.test.ts +1375 -0
- package/src/relay-state.test.ts +729 -0
- package/src/relay-state.ts +561 -0
- package/src/replay-ai-index.test.ts +278 -0
- package/src/replay-ai-index.ts +872 -0
- package/src/replay-cli.test.ts +325 -0
- package/src/replay-eval.ts +1039 -0
- package/src/replay-handoff.test.ts +163 -0
- package/src/replay-handoff.ts +109 -0
- package/src/replay-workflow-compiler.test.ts +250 -0
- package/src/replay-workflow-compiler.ts +700 -0
- package/src/resource.md +409 -0
- package/src/rrweb-recording-relay.test.ts +99 -0
- package/src/rrweb-recording-relay.ts +400 -0
- package/src/rrweb-recording.ts +322 -0
- package/src/scoped-fs.test.ts +80 -0
- package/src/scoped-fs.ts +420 -0
- package/src/skill-stub.test.ts +24 -0
- package/src/skill.md +1413 -0
- package/src/snapshot-tools.test.ts +1017 -0
- package/src/snapshots/hacker-news-accessibility-full.md +81 -0
- package/src/snapshots/hacker-news-accessibility-interactive.md +43 -0
- package/src/snapshots/page-markdown-output.txt +16 -0
- package/src/snapshots/shadcn-ui-accessibility-full.md +201 -0
- package/src/snapshots/shadcn-ui-accessibility-interactive.md +109 -0
- package/src/start-relay-server.ts +69 -0
- package/src/styles-examples.ts +84 -0
- package/src/styles.ts +343 -0
- package/src/tabwright-agent-skill.test.ts +61 -0
- package/src/tabwright-agent-skill.ts +105 -0
- package/src/test-declarations.ts +13 -0
- package/src/test-utils.test.ts +70 -0
- package/src/test-utils.ts +566 -0
- package/src/utils.ts +78 -0
- package/src/wait-for-page-load.ts +198 -0
- package/src/workflow-capability.ts +417 -0
- package/src/workflow-script-flow.test.ts +388 -0
package/dist/editor.js
ADDED
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A class for viewing and editing web page scripts via Chrome DevTools Protocol.
|
|
3
|
+
* Provides a Claude Code-like interface: list, read, edit, grep.
|
|
4
|
+
*
|
|
5
|
+
* Edits are in-memory only and persist until page reload. They modify the running
|
|
6
|
+
* V8 instance but are not saved to disk or server.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* const cdp = await getCDPSession({ page })
|
|
11
|
+
* const editor = new Editor({ cdp })
|
|
12
|
+
* await editor.enable()
|
|
13
|
+
*
|
|
14
|
+
* // List available scripts
|
|
15
|
+
* const scripts = editor.list({ search: 'app' })
|
|
16
|
+
*
|
|
17
|
+
* // Read a script
|
|
18
|
+
* const { content } = await editor.read({ url: 'https://example.com/app.js' })
|
|
19
|
+
*
|
|
20
|
+
* // Edit a script
|
|
21
|
+
* await editor.edit({
|
|
22
|
+
* url: 'https://example.com/app.js',
|
|
23
|
+
* oldString: 'console.log("old")',
|
|
24
|
+
* newString: 'console.log("new")'
|
|
25
|
+
* })
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export class Editor {
|
|
29
|
+
cdp;
|
|
30
|
+
enabled = false;
|
|
31
|
+
scripts = new Map();
|
|
32
|
+
stylesheets = new Map();
|
|
33
|
+
sourceCache = new Map();
|
|
34
|
+
constructor({ cdp }) {
|
|
35
|
+
this.cdp = cdp;
|
|
36
|
+
this.setupEventListeners();
|
|
37
|
+
}
|
|
38
|
+
setupEventListeners() {
|
|
39
|
+
this.cdp.on('Debugger.scriptParsed', (params) => {
|
|
40
|
+
if (!params.url.startsWith('chrome') && !params.url.startsWith('devtools')) {
|
|
41
|
+
const url = params.url || `inline://${params.scriptId}`;
|
|
42
|
+
this.scripts.set(url, params.scriptId);
|
|
43
|
+
this.sourceCache.delete(params.scriptId);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
this.cdp.on('CSS.styleSheetAdded', (params) => {
|
|
47
|
+
const header = params.header;
|
|
48
|
+
if (header.sourceURL?.startsWith('chrome') || header.sourceURL?.startsWith('devtools')) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const url = header.sourceURL || `inline-css://${header.styleSheetId}`;
|
|
52
|
+
this.stylesheets.set(url, header.styleSheetId);
|
|
53
|
+
this.sourceCache.delete(header.styleSheetId);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Enables the editor. Must be called before other methods.
|
|
58
|
+
* Scripts are collected from Debugger.scriptParsed events.
|
|
59
|
+
* Reload the page after enabling to capture all scripts.
|
|
60
|
+
*/
|
|
61
|
+
async enable() {
|
|
62
|
+
if (this.enabled) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
await this.cdp.send('Debugger.disable');
|
|
66
|
+
await this.cdp.send('CSS.disable');
|
|
67
|
+
this.scripts.clear();
|
|
68
|
+
this.stylesheets.clear();
|
|
69
|
+
this.sourceCache.clear();
|
|
70
|
+
const resourcesReady = new Promise((resolve) => {
|
|
71
|
+
let timeout;
|
|
72
|
+
const listener = () => {
|
|
73
|
+
clearTimeout(timeout);
|
|
74
|
+
timeout = setTimeout(() => {
|
|
75
|
+
this.cdp.off('Debugger.scriptParsed', listener);
|
|
76
|
+
this.cdp.off('CSS.styleSheetAdded', listener);
|
|
77
|
+
resolve();
|
|
78
|
+
}, 100);
|
|
79
|
+
};
|
|
80
|
+
this.cdp.on('Debugger.scriptParsed', listener);
|
|
81
|
+
this.cdp.on('CSS.styleSheetAdded', listener);
|
|
82
|
+
timeout = setTimeout(() => {
|
|
83
|
+
this.cdp.off('Debugger.scriptParsed', listener);
|
|
84
|
+
this.cdp.off('CSS.styleSheetAdded', listener);
|
|
85
|
+
resolve();
|
|
86
|
+
}, 100);
|
|
87
|
+
});
|
|
88
|
+
await this.cdp.send('Debugger.enable');
|
|
89
|
+
await this.cdp.send('DOM.enable');
|
|
90
|
+
await this.cdp.send('CSS.enable');
|
|
91
|
+
await resourcesReady;
|
|
92
|
+
this.enabled = true;
|
|
93
|
+
}
|
|
94
|
+
getIdByUrl(url) {
|
|
95
|
+
const scriptId = this.scripts.get(url);
|
|
96
|
+
if (scriptId) {
|
|
97
|
+
return { scriptId };
|
|
98
|
+
}
|
|
99
|
+
const styleSheetId = this.stylesheets.get(url);
|
|
100
|
+
if (styleSheetId) {
|
|
101
|
+
return { styleSheetId };
|
|
102
|
+
}
|
|
103
|
+
const allUrls = [...Array.from(this.scripts.keys()), ...Array.from(this.stylesheets.keys())];
|
|
104
|
+
const available = allUrls.slice(0, 5);
|
|
105
|
+
throw new Error(`Resource not found: ${url}\nAvailable: ${available.join(', ')}${allUrls.length > 5 ? '...' : ''}`);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Lists available script and stylesheet URLs. Use pattern to filter by regex.
|
|
109
|
+
* Automatically enables the editor if not already enabled.
|
|
110
|
+
*
|
|
111
|
+
* @param options - Options
|
|
112
|
+
* @param options.pattern - Optional regex to filter URLs
|
|
113
|
+
* @returns Array of URLs
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```ts
|
|
117
|
+
* // List all scripts and stylesheets
|
|
118
|
+
* const urls = await editor.list()
|
|
119
|
+
*
|
|
120
|
+
* // List only JS files
|
|
121
|
+
* const jsFiles = await editor.list({ pattern: /\.js/ })
|
|
122
|
+
*
|
|
123
|
+
* // List only CSS files
|
|
124
|
+
* const cssFiles = await editor.list({ pattern: /\.css/ })
|
|
125
|
+
*
|
|
126
|
+
* // Search for specific scripts
|
|
127
|
+
* const appScripts = await editor.list({ pattern: /app/ })
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
async list({ pattern } = {}) {
|
|
131
|
+
await this.enable();
|
|
132
|
+
const urls = [...Array.from(this.scripts.keys()), ...Array.from(this.stylesheets.keys())];
|
|
133
|
+
if (!pattern) {
|
|
134
|
+
return urls;
|
|
135
|
+
}
|
|
136
|
+
return urls.filter((url) => {
|
|
137
|
+
const matches = pattern.test(url);
|
|
138
|
+
pattern.lastIndex = 0;
|
|
139
|
+
return matches;
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Reads a script or stylesheet's source code by URL.
|
|
144
|
+
* Returns line-numbered content like Claude Code's Read tool.
|
|
145
|
+
* For inline scripts, use the `inline://` URL from list() or grep().
|
|
146
|
+
*
|
|
147
|
+
* @param options - Options
|
|
148
|
+
* @param options.url - Script or stylesheet URL (inline scripts have `inline://{id}` URLs)
|
|
149
|
+
* @param options.offset - Line number to start from (0-based, default 0)
|
|
150
|
+
* @param options.limit - Number of lines to return (default 2000)
|
|
151
|
+
* @returns Content with line numbers, total lines, and range info
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```ts
|
|
155
|
+
* // Read by URL
|
|
156
|
+
* const { content, totalLines } = await editor.read({
|
|
157
|
+
* url: 'https://example.com/app.js'
|
|
158
|
+
* })
|
|
159
|
+
*
|
|
160
|
+
* // Read a CSS file
|
|
161
|
+
* const { content } = await editor.read({ url: 'https://example.com/styles.css' })
|
|
162
|
+
*
|
|
163
|
+
* // Read lines 100-200
|
|
164
|
+
* const { content } = await editor.read({
|
|
165
|
+
* url: 'https://example.com/app.js',
|
|
166
|
+
* offset: 100,
|
|
167
|
+
* limit: 100
|
|
168
|
+
* })
|
|
169
|
+
* ```
|
|
170
|
+
*/
|
|
171
|
+
async read({ url, offset = 0, limit = 2000 }) {
|
|
172
|
+
await this.enable();
|
|
173
|
+
const id = this.getIdByUrl(url);
|
|
174
|
+
const source = await this.getSource(id);
|
|
175
|
+
const lines = source.split('\n');
|
|
176
|
+
const totalLines = lines.length;
|
|
177
|
+
const startLine = Math.min(offset, totalLines);
|
|
178
|
+
const endLine = Math.min(offset + limit, totalLines);
|
|
179
|
+
const selectedLines = lines.slice(startLine, endLine);
|
|
180
|
+
const content = selectedLines.map((line, i) => `${String(startLine + i + 1).padStart(5)}| ${line}`).join('\n');
|
|
181
|
+
return {
|
|
182
|
+
content,
|
|
183
|
+
totalLines,
|
|
184
|
+
startLine: startLine + 1,
|
|
185
|
+
endLine,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
async getSource(id) {
|
|
189
|
+
if ('styleSheetId' in id) {
|
|
190
|
+
const cached = this.sourceCache.get(id.styleSheetId);
|
|
191
|
+
if (cached) {
|
|
192
|
+
return cached;
|
|
193
|
+
}
|
|
194
|
+
const response = await this.cdp.send('CSS.getStyleSheetText', { styleSheetId: id.styleSheetId });
|
|
195
|
+
this.sourceCache.set(id.styleSheetId, response.text);
|
|
196
|
+
return response.text;
|
|
197
|
+
}
|
|
198
|
+
const cached = this.sourceCache.get(id.scriptId);
|
|
199
|
+
if (cached) {
|
|
200
|
+
return cached;
|
|
201
|
+
}
|
|
202
|
+
const response = await this.cdp.send('Debugger.getScriptSource', { scriptId: id.scriptId });
|
|
203
|
+
this.sourceCache.set(id.scriptId, response.scriptSource);
|
|
204
|
+
return response.scriptSource;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Edits a script or stylesheet by replacing oldString with newString.
|
|
208
|
+
* Like Claude Code's Edit tool - performs exact string replacement.
|
|
209
|
+
*
|
|
210
|
+
* @param options - Options
|
|
211
|
+
* @param options.url - Script or stylesheet URL (inline scripts have `inline://{id}` URLs)
|
|
212
|
+
* @param options.oldString - Exact string to find and replace
|
|
213
|
+
* @param options.newString - Replacement string
|
|
214
|
+
* @param options.dryRun - If true, validate without applying (default false)
|
|
215
|
+
* @returns Result with success status
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* ```ts
|
|
219
|
+
* // Replace a string in JS
|
|
220
|
+
* await editor.edit({
|
|
221
|
+
* url: 'https://example.com/app.js',
|
|
222
|
+
* oldString: 'const DEBUG = false',
|
|
223
|
+
* newString: 'const DEBUG = true'
|
|
224
|
+
* })
|
|
225
|
+
*
|
|
226
|
+
* // Edit CSS
|
|
227
|
+
* await editor.edit({
|
|
228
|
+
* url: 'https://example.com/styles.css',
|
|
229
|
+
* oldString: 'color: red',
|
|
230
|
+
* newString: 'color: blue'
|
|
231
|
+
* })
|
|
232
|
+
* ```
|
|
233
|
+
*/
|
|
234
|
+
async edit({ url, oldString, newString, dryRun = false, }) {
|
|
235
|
+
await this.enable();
|
|
236
|
+
const id = this.getIdByUrl(url);
|
|
237
|
+
const source = await this.getSource(id);
|
|
238
|
+
const matchCount = source.split(oldString).length - 1;
|
|
239
|
+
if (matchCount === 0) {
|
|
240
|
+
throw new Error(`oldString not found in ${url}`);
|
|
241
|
+
}
|
|
242
|
+
if (matchCount > 1) {
|
|
243
|
+
throw new Error(`oldString found ${matchCount} times in ${url}. Provide more context to make it unique.`);
|
|
244
|
+
}
|
|
245
|
+
const newSource = source.replace(oldString, newString);
|
|
246
|
+
return this.setSource(id, newSource, dryRun);
|
|
247
|
+
}
|
|
248
|
+
async setSource(id, content, dryRun = false) {
|
|
249
|
+
if ('styleSheetId' in id) {
|
|
250
|
+
await this.cdp.send('CSS.setStyleSheetText', { styleSheetId: id.styleSheetId, text: content });
|
|
251
|
+
if (!dryRun) {
|
|
252
|
+
this.sourceCache.set(id.styleSheetId, content);
|
|
253
|
+
}
|
|
254
|
+
return { success: true };
|
|
255
|
+
}
|
|
256
|
+
// Chrome deprecated Debugger.setScriptSource in Chrome 142+ (Feb 2026)
|
|
257
|
+
// Use Runtime.evaluate as fallback to re-execute the modified script
|
|
258
|
+
// This works for scripts that define functions at global scope
|
|
259
|
+
try {
|
|
260
|
+
const response = await this.cdp.send('Debugger.setScriptSource', {
|
|
261
|
+
scriptId: id.scriptId,
|
|
262
|
+
scriptSource: content,
|
|
263
|
+
dryRun,
|
|
264
|
+
});
|
|
265
|
+
if (!dryRun) {
|
|
266
|
+
this.sourceCache.set(id.scriptId, content);
|
|
267
|
+
}
|
|
268
|
+
return { success: true, stackChanged: response.stackChanged };
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
272
|
+
// Check if setScriptSource is deprecated/unavailable
|
|
273
|
+
if (errorMessage.includes('setScriptSource') || errorMessage.includes('-32000')) {
|
|
274
|
+
if (dryRun) {
|
|
275
|
+
// For dry run, just validate the syntax by parsing
|
|
276
|
+
await this.cdp.send('Runtime.compileScript', {
|
|
277
|
+
expression: content,
|
|
278
|
+
sourceURL: 'dry-run-validation',
|
|
279
|
+
persistScript: false,
|
|
280
|
+
});
|
|
281
|
+
return { success: true };
|
|
282
|
+
}
|
|
283
|
+
// Re-execute the entire script to override global functions
|
|
284
|
+
await this.cdp.send('Runtime.evaluate', {
|
|
285
|
+
expression: content,
|
|
286
|
+
returnByValue: false,
|
|
287
|
+
});
|
|
288
|
+
this.sourceCache.set(id.scriptId, content);
|
|
289
|
+
return { success: true, stackChanged: true };
|
|
290
|
+
}
|
|
291
|
+
throw error;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Searches for a regex across all scripts and stylesheets.
|
|
296
|
+
* Like Claude Code's Grep tool - returns matching lines with context.
|
|
297
|
+
*
|
|
298
|
+
* @param options - Options
|
|
299
|
+
* @param options.regex - Regular expression to search for in file contents
|
|
300
|
+
* @param options.pattern - Optional regex to filter which URLs to search
|
|
301
|
+
* @returns Array of matches with url, line number, and line content
|
|
302
|
+
*
|
|
303
|
+
* @example
|
|
304
|
+
* ```ts
|
|
305
|
+
* // Search all scripts and stylesheets for "color"
|
|
306
|
+
* const matches = await editor.grep({ regex: /color/ })
|
|
307
|
+
*
|
|
308
|
+
* // Search only CSS files
|
|
309
|
+
* const matches = await editor.grep({
|
|
310
|
+
* regex: /background-color/,
|
|
311
|
+
* pattern: /\.css/
|
|
312
|
+
* })
|
|
313
|
+
*
|
|
314
|
+
* // Regex search for console methods in JS
|
|
315
|
+
* const matches = await editor.grep({
|
|
316
|
+
* regex: /console\.(log|error|warn)/,
|
|
317
|
+
* pattern: /\.js/
|
|
318
|
+
* })
|
|
319
|
+
* ```
|
|
320
|
+
*/
|
|
321
|
+
async grep({ regex, pattern }) {
|
|
322
|
+
await this.enable();
|
|
323
|
+
const matches = [];
|
|
324
|
+
const urls = await this.list({ pattern });
|
|
325
|
+
for (const url of urls) {
|
|
326
|
+
let source;
|
|
327
|
+
try {
|
|
328
|
+
const id = this.getIdByUrl(url);
|
|
329
|
+
source = await this.getSource(id);
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
const lines = source.split('\n');
|
|
335
|
+
for (let i = 0; i < lines.length; i++) {
|
|
336
|
+
if (regex.test(lines[i])) {
|
|
337
|
+
matches.push({
|
|
338
|
+
url,
|
|
339
|
+
lineNumber: i + 1,
|
|
340
|
+
lineContent: lines[i].trim().slice(0, 200),
|
|
341
|
+
});
|
|
342
|
+
regex.lastIndex = 0;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return matches;
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Writes entire content to a script or stylesheet, replacing all existing code.
|
|
350
|
+
* Use with caution - prefer edit() for targeted changes.
|
|
351
|
+
*
|
|
352
|
+
* @param options - Options
|
|
353
|
+
* @param options.url - Script or stylesheet URL (inline scripts have `inline://{id}` URLs)
|
|
354
|
+
* @param options.content - New content
|
|
355
|
+
* @param options.dryRun - If true, validate without applying (default false, only works for JS)
|
|
356
|
+
*/
|
|
357
|
+
async write({ url, content, dryRun = false, }) {
|
|
358
|
+
await this.enable();
|
|
359
|
+
const id = this.getIdByUrl(url);
|
|
360
|
+
return this.setSource(id, content, dryRun);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
//# sourceMappingURL=editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-compat.d.ts","sourceRoot":"","sources":["../src/env-compat.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const PREFIX_MAPPINGS = [
|
|
2
|
+
['TABWRIGHT_', 'PLAYWRITER_'],
|
|
3
|
+
];
|
|
4
|
+
PREFIX_MAPPINGS.map(([currentPrefix, legacyPrefix]) => {
|
|
5
|
+
const currentEntries = Object.entries(process.env).filter(([name, value]) => {
|
|
6
|
+
return name.startsWith(currentPrefix) && value !== undefined;
|
|
7
|
+
});
|
|
8
|
+
const legacyEntries = Object.entries(process.env).filter(([name, value]) => {
|
|
9
|
+
return name.startsWith(legacyPrefix) && value !== undefined;
|
|
10
|
+
});
|
|
11
|
+
currentEntries.map(([name, value]) => {
|
|
12
|
+
const legacyName = `${legacyPrefix}${name.slice(currentPrefix.length)}`;
|
|
13
|
+
if (process.env[legacyName] === undefined) {
|
|
14
|
+
process.env[legacyName] = value;
|
|
15
|
+
}
|
|
16
|
+
return legacyName;
|
|
17
|
+
});
|
|
18
|
+
legacyEntries.map(([name, value]) => {
|
|
19
|
+
const currentName = `${currentPrefix}${name.slice(legacyPrefix.length)}`;
|
|
20
|
+
if (process.env[currentName] === undefined) {
|
|
21
|
+
process.env[currentName] = value;
|
|
22
|
+
}
|
|
23
|
+
return currentName;
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=env-compat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-compat.js","sourceRoot":"","sources":["../src/env-compat.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG;IACtB,CAAC,YAAY,EAAE,aAAa,CAAC;CACrB,CAAA;AAEV,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE,EAAE;IACpD,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QAC1E,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK,KAAK,SAAS,CAAA;IAC9D,CAAC,CAAC,CAAA;IACF,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QACzE,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,KAAK,KAAK,SAAS,CAAA;IAC7D,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QACnC,MAAM,UAAU,GAAG,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAA;QACvE,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK,CAAA;QACjC,CAAC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QAClC,MAAM,WAAW,GAAG,GAAG,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAA;QACxE,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,KAAK,CAAA;QAClC,CAAC;QACD,OAAO,WAAW,CAAA;IACpB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PlaywrightExecutor - Manages browser connection and code execution per session.
|
|
3
|
+
* Used by both MCP and CLI to execute Playwright code with persistent state.
|
|
4
|
+
*/
|
|
5
|
+
import type { Page, BrowserContext } from '@xmorse/playwright-core';
|
|
6
|
+
import { type SnapshotFormat } from './aria-snapshot.js';
|
|
7
|
+
export type { SnapshotFormat };
|
|
8
|
+
export declare class CodeExecutionTimeoutError extends Error {
|
|
9
|
+
constructor(timeout: number);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parse code and check if it's a single expression that should be auto-returned.
|
|
13
|
+
* Returns the exact expression source (without trailing semicolon) using AST
|
|
14
|
+
* node offsets, or null if the code should not be auto-wrapped. See #58.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getAutoReturnExpression(code: string): string | null;
|
|
17
|
+
/** Backward-compatible helper: returns true if code should be auto-wrapped. */
|
|
18
|
+
export declare function shouldAutoReturn(code: string): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Wraps user code in an async IIFE for vm execution.
|
|
21
|
+
* Uses AST node offsets to extract the expression without trailing semicolons,
|
|
22
|
+
* avoiding SyntaxError when embedding inside `return await (...)`. See #58.
|
|
23
|
+
*/
|
|
24
|
+
export declare function wrapCode(code: string): string;
|
|
25
|
+
export interface ExecuteScreenshot {
|
|
26
|
+
path: string;
|
|
27
|
+
base64: string;
|
|
28
|
+
mimeType: 'image/png';
|
|
29
|
+
snapshot: string;
|
|
30
|
+
labelCount: number;
|
|
31
|
+
}
|
|
32
|
+
export interface ExecuteResult {
|
|
33
|
+
text: string;
|
|
34
|
+
images: Array<{
|
|
35
|
+
data: string;
|
|
36
|
+
mimeType: string;
|
|
37
|
+
}>;
|
|
38
|
+
screenshots: ExecuteScreenshot[];
|
|
39
|
+
isError: boolean;
|
|
40
|
+
structuredResult?: unknown;
|
|
41
|
+
}
|
|
42
|
+
export interface ExecuteOptions {
|
|
43
|
+
includeStructuredResult?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface ExecutorLogger {
|
|
46
|
+
log(...args: any[]): void;
|
|
47
|
+
error(...args: any[]): void;
|
|
48
|
+
}
|
|
49
|
+
export interface CdpConfig {
|
|
50
|
+
host?: string;
|
|
51
|
+
port?: number;
|
|
52
|
+
token?: string;
|
|
53
|
+
extensionId?: string | null;
|
|
54
|
+
/** Direct CDP WebSocket URL — bypasses relay + extension, connects straight to Chrome */
|
|
55
|
+
directCdpUrl?: string;
|
|
56
|
+
/** Launch a headless Chrome via chromium.launch() instead of connecting to an existing one.
|
|
57
|
+
* Uses direct Playwright browser management, no extension or relay CDP routing needed. */
|
|
58
|
+
headless?: boolean;
|
|
59
|
+
}
|
|
60
|
+
export interface SessionMetadata {
|
|
61
|
+
extensionId: string | null;
|
|
62
|
+
browser: string | null;
|
|
63
|
+
profile: {
|
|
64
|
+
email: string;
|
|
65
|
+
id: string;
|
|
66
|
+
} | null;
|
|
67
|
+
}
|
|
68
|
+
export interface SessionInfo {
|
|
69
|
+
id: string;
|
|
70
|
+
stateKeys: string[];
|
|
71
|
+
extensionId: string | null;
|
|
72
|
+
browser: string | null;
|
|
73
|
+
profile: {
|
|
74
|
+
email: string;
|
|
75
|
+
id: string;
|
|
76
|
+
} | null;
|
|
77
|
+
cwd: string | null;
|
|
78
|
+
connected: boolean;
|
|
79
|
+
pageUrl: string | null;
|
|
80
|
+
pagesCount: number;
|
|
81
|
+
}
|
|
82
|
+
export interface CloudSessionInfo {
|
|
83
|
+
/** Timestamp (epoch ms) when the BU VM will hard-timeout */
|
|
84
|
+
timeoutAt?: number;
|
|
85
|
+
/** Whether proxy is enabled — when true, images/video/fonts are blocked to save bandwidth.
|
|
86
|
+
* Set to false via --disable-proxy-bandwidth-acceleration to allow all resources. */
|
|
87
|
+
blockProxyResources?: boolean;
|
|
88
|
+
}
|
|
89
|
+
export interface ExecutorOptions {
|
|
90
|
+
cdpConfig: CdpConfig;
|
|
91
|
+
sessionMetadata?: SessionMetadata;
|
|
92
|
+
logger?: ExecutorLogger;
|
|
93
|
+
/** Working directory for scoped fs access */
|
|
94
|
+
cwd?: string;
|
|
95
|
+
/** Set when this executor is connected to a cloud Browser Use VM */
|
|
96
|
+
cloudSession?: CloudSessionInfo;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Duck-type check for a Playwright ChannelOwner (Response, Page, Browser,
|
|
100
|
+
* Request, Frame, BrowserContext, etc.). Used to skip auto-printing these
|
|
101
|
+
* objects from the REPL — they're meant for programmatic use, and dumping
|
|
102
|
+
* them risks leaking internal fields. Users can still `console.log(obj)` to
|
|
103
|
+
* inspect them via the safe handler in playwright-core. See issue #82.
|
|
104
|
+
*/
|
|
105
|
+
export declare function isPlaywrightChannelOwner(value: any): boolean;
|
|
106
|
+
export declare class PlaywrightExecutor {
|
|
107
|
+
private isConnected;
|
|
108
|
+
private page;
|
|
109
|
+
private browser;
|
|
110
|
+
private context;
|
|
111
|
+
private userState;
|
|
112
|
+
private browserLogs;
|
|
113
|
+
private pageLogCursor;
|
|
114
|
+
private lastSnapshots;
|
|
115
|
+
private lastRefToLocator;
|
|
116
|
+
private warningEvents;
|
|
117
|
+
private nextWarningEventId;
|
|
118
|
+
private lastDeliveredWarningEventId;
|
|
119
|
+
private activeWarningScopes;
|
|
120
|
+
private pagesWithListeners;
|
|
121
|
+
private suppressPageCloseWarnings;
|
|
122
|
+
private scopedFs;
|
|
123
|
+
private sandboxedRequire;
|
|
124
|
+
private cdpConfig;
|
|
125
|
+
private logger;
|
|
126
|
+
private sessionMetadata;
|
|
127
|
+
private sessionCwd;
|
|
128
|
+
private hasWarnedExtensionOutdated;
|
|
129
|
+
private ghostCursorController;
|
|
130
|
+
/** Non-null when this executor is backed by a cloud Browser Use VM */
|
|
131
|
+
private cloudSession;
|
|
132
|
+
/** Last minute bucket for which a cloud timeout warning was enqueued (dedup) */
|
|
133
|
+
private lastCloudTimeoutWarningMinute;
|
|
134
|
+
constructor(options: ExecutorOptions);
|
|
135
|
+
private createSandboxedRequire;
|
|
136
|
+
private setDeviceScaleFactorForMacOS;
|
|
137
|
+
/** Block images, video, and font resources via Network.setBlockedURLs to save
|
|
138
|
+
* residential proxy bandwidth. Single CDP command, zero per-request overhead.
|
|
139
|
+
* Applied per-context on every page (existing and future). */
|
|
140
|
+
private applyProxyResourceBlocking;
|
|
141
|
+
private clearUserState;
|
|
142
|
+
private clearConnectionState;
|
|
143
|
+
enqueueWarning(message: string): void;
|
|
144
|
+
/** Update the cloud session timeout from external tracking (relay timer). */
|
|
145
|
+
updateCloudTimeout(timeoutAt: number): void;
|
|
146
|
+
private beginWarningScope;
|
|
147
|
+
private flushWarningsForScope;
|
|
148
|
+
private pruneDeliveredWarnings;
|
|
149
|
+
private warnIfExtensionOutdated;
|
|
150
|
+
private setupPageListeners;
|
|
151
|
+
private setupPageCloseDetection;
|
|
152
|
+
private setupNewPageLogging;
|
|
153
|
+
private setupPageConsoleListener;
|
|
154
|
+
private addBrowserLog;
|
|
155
|
+
private pagesRelatedToPage;
|
|
156
|
+
private checkExtensionStatus;
|
|
157
|
+
private isDirectCdpMode;
|
|
158
|
+
private isHeadlessMode;
|
|
159
|
+
/**
|
|
160
|
+
* Connect to Chrome and set up context/page. Shared by ensureConnection and reset.
|
|
161
|
+
* In headless mode, launches Chrome via chromium.launch().
|
|
162
|
+
* In direct CDP mode, connects straight to Chrome's WebSocket.
|
|
163
|
+
* In extension mode, checks extension status then connects via relay.
|
|
164
|
+
*/
|
|
165
|
+
private connectToBrowser;
|
|
166
|
+
/**
|
|
167
|
+
* Launch a headless Chrome via chromium.launch(). No extension, no relay CDP routing.
|
|
168
|
+
* Reuses an existing shared browser if one was already launched for headless mode.
|
|
169
|
+
* Does NOT add per-session disconnect listeners to avoid accumulation on the shared
|
|
170
|
+
* browser; instead, ensureConnection checks browser.isConnected() on each call.
|
|
171
|
+
*/
|
|
172
|
+
private connectHeadlessBrowser;
|
|
173
|
+
/** Shared headless browser instance across all headless sessions.
|
|
174
|
+
* Uses a launch promise to prevent concurrent first-session races from
|
|
175
|
+
* spawning multiple browsers. The disconnect handler is registered once
|
|
176
|
+
* at launch time and clears both statics so the next session relaunches. */
|
|
177
|
+
private static _sharedHeadlessBrowser;
|
|
178
|
+
private static _sharedHeadlessBrowserPromise;
|
|
179
|
+
private static getOrLaunchHeadlessBrowser;
|
|
180
|
+
/** Close the headless context for this session (called on session delete). */
|
|
181
|
+
closeHeadlessContext(): Promise<void>;
|
|
182
|
+
/** Close the shared headless browser (called on relay shutdown). */
|
|
183
|
+
static closeSharedHeadlessBrowser(): Promise<void>;
|
|
184
|
+
private ensureConnection;
|
|
185
|
+
private getCurrentPage;
|
|
186
|
+
reset(): Promise<{
|
|
187
|
+
page: Page;
|
|
188
|
+
context: BrowserContext;
|
|
189
|
+
}>;
|
|
190
|
+
execute(code: string, timeout?: number, options?: ExecuteOptions): Promise<ExecuteResult>;
|
|
191
|
+
private ensurePageForContext;
|
|
192
|
+
/** Get info about current connection state */
|
|
193
|
+
getStatus(): {
|
|
194
|
+
connected: boolean;
|
|
195
|
+
pageUrl: string | null;
|
|
196
|
+
pagesCount: number;
|
|
197
|
+
};
|
|
198
|
+
/** Get keys of user-defined state */
|
|
199
|
+
getStateKeys(): string[];
|
|
200
|
+
getSessionMetadata(): SessionMetadata;
|
|
201
|
+
getSessionInfo({ id }: {
|
|
202
|
+
id: string;
|
|
203
|
+
}): SessionInfo;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Session manager for multiple executors, keyed by session ID.
|
|
207
|
+
*/
|
|
208
|
+
export declare class ExecutorManager {
|
|
209
|
+
private executors;
|
|
210
|
+
private cdpConfig;
|
|
211
|
+
private logger;
|
|
212
|
+
constructor(options: {
|
|
213
|
+
cdpConfig: CdpConfig | ((sessionId: string) => CdpConfig);
|
|
214
|
+
logger?: ExecutorLogger;
|
|
215
|
+
});
|
|
216
|
+
getExecutor(options: {
|
|
217
|
+
sessionId: string;
|
|
218
|
+
cwd?: string;
|
|
219
|
+
sessionMetadata?: SessionMetadata;
|
|
220
|
+
/** Override cdpConfig for this session (e.g. direct CDP connection) */
|
|
221
|
+
cdpConfig?: CdpConfig;
|
|
222
|
+
/** Cloud session info (set when connecting to a Browser Use VM) */
|
|
223
|
+
cloudSession?: CloudSessionInfo;
|
|
224
|
+
}): PlaywrightExecutor;
|
|
225
|
+
deleteExecutor(sessionId: string): boolean;
|
|
226
|
+
getSession(sessionId: string): PlaywrightExecutor | null;
|
|
227
|
+
listSessions(): SessionInfo[];
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAkB,cAAc,EAAwC,MAAM,yBAAyB,CAAA;AAqBzH,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAA;AAE3B,YAAY,EAAE,cAAc,EAAE,CAAA;AAmB9B,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAoBD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmDnE;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM7C;AAqFD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,WAAW,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,WAAW,EAAE,iBAAiB,EAAE,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAClC;AAWD,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACzB,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,yFAAyF;IACzF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;+FAC2F;IAC3F,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC7C,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;0FACsF;IACtF,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,CAAA;IACpB,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,oEAAoE;IACpE,YAAY,CAAC,EAAE,gBAAgB,CAAA;CAChC;AAYD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAQ5D;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAA8B;IAE7C,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,WAAW,CAAiC;IAKpD,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,aAAa,CAAoD;IACzE,OAAO,CAAC,gBAAgB,CAAoD;IAC5E,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,kBAAkB,CAAI;IAC9B,OAAO,CAAC,2BAA2B,CAAI;IAEvC,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,kBAAkB,CAAsB;IAChD,OAAO,CAAC,yBAAyB,CAAQ;IAEzC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,gBAAgB,CAAa;IAErC,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,0BAA0B,CAAQ;IAE1C,OAAO,CAAC,qBAAqB,CAAuB;IACpD,sEAAsE;IACtE,OAAO,CAAC,YAAY,CAAyB;IAC7C,gFAAgF;IAChF,OAAO,CAAC,6BAA6B,CAAsB;gBAE/C,OAAO,EAAE,eAAe;IAqBpC,OAAO,CAAC,sBAAsB;YAyBhB,4BAA4B;IAW1C;;mEAE+D;YACjD,0BAA0B;IAkCxC,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,oBAAoB;IAO5B,cAAc,CAAC,OAAO,EAAE,MAAM;IAK9B,6EAA6E;IAC7E,kBAAkB,CAAC,SAAS,EAAE,MAAM;IAMpC,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,uBAAuB;IA2D/B,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,wBAAwB;IA4BhC,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,kBAAkB;YAoBZ,oBAAoB;IAmElC,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,cAAc;IAItB;;;;;OAKG;YACW,gBAAgB;IAmF9B;;;;;OAKG;YACW,sBAAsB;IAmBpC;;;iFAG6E;IAC7E,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAuB;IAC5D,OAAO,CAAC,MAAM,CAAC,6BAA6B,CAAgC;mBAEvD,0BAA0B;IA6C/C,8EAA8E;IACxE,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3C,oEAAoE;WACvD,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC;YAQ1C,gBAAgB;YA2BhB,cAAc;IA0BtB,KAAK,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,cAAc,CAAA;KAAE,CAAC;IAiCzD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAQ,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;YA+mBpF,oBAAoB;IA6ClC,8CAA8C;IAC9C,SAAS,IAAI;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAQ/E,qCAAqC;IACrC,YAAY,IAAI,MAAM,EAAE;IAIxB,kBAAkB,IAAI,eAAe;IAIrC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW;CAcpD;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,SAAS,CAAgD;IACjE,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,EAAE;QAAE,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,cAAc,CAAA;KAAE;IAK3G,WAAW,CAAC,OAAO,EAAE;QACnB,SAAS,EAAE,MAAM,CAAA;QACjB,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,eAAe,CAAC,EAAE,eAAe,CAAA;QACjC,uEAAuE;QACvE,SAAS,CAAC,EAAE,SAAS,CAAA;QACrB,mEAAmE;QACnE,YAAY,CAAC,EAAE,gBAAgB,CAAA;KAChC,GAAG,kBAAkB;IA2BtB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI1C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAIxD,YAAY,IAAI,WAAW,EAAE;CAK9B"}
|