opendevbrowser 0.0.15 → 0.0.16
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 +1 -1
- package/README.md +229 -34
- package/dist/annotate/direct-annotator.d.ts +22 -0
- package/dist/annotate/direct-annotator.d.ts.map +1 -0
- package/dist/annotate/output.d.ts +10 -0
- package/dist/annotate/output.d.ts.map +1 -0
- package/dist/browser/annotation-manager.d.ts +30 -0
- package/dist/browser/annotation-manager.d.ts.map +1 -0
- package/dist/browser/browser-manager.d.ts +397 -0
- package/dist/browser/browser-manager.d.ts.map +1 -0
- package/dist/browser/fingerprint/adapters.d.ts +26 -0
- package/dist/browser/fingerprint/adapters.d.ts.map +1 -0
- package/dist/browser/fingerprint/canary.d.ts +25 -0
- package/dist/browser/fingerprint/canary.d.ts.map +1 -0
- package/dist/browser/fingerprint/profiles.d.ts +16 -0
- package/dist/browser/fingerprint/profiles.d.ts.map +1 -0
- package/dist/browser/fingerprint/tier1-coherence.d.ts +36 -0
- package/dist/browser/fingerprint/tier1-coherence.d.ts.map +1 -0
- package/dist/browser/fingerprint/tier2-runtime.d.ts +40 -0
- package/dist/browser/fingerprint/tier2-runtime.d.ts.map +1 -0
- package/dist/browser/fingerprint/tier3-adaptive.d.ts +30 -0
- package/dist/browser/fingerprint/tier3-adaptive.d.ts.map +1 -0
- package/dist/browser/manager-types.d.ts +3 -0
- package/dist/browser/manager-types.d.ts.map +1 -0
- package/dist/browser/ops-browser-manager.d.ts +131 -0
- package/dist/browser/ops-browser-manager.d.ts.map +1 -0
- package/dist/browser/ops-client.d.ts +56 -0
- package/dist/browser/ops-client.d.ts.map +1 -0
- package/dist/browser/parallelism-governor.d.ts +31 -0
- package/dist/browser/parallelism-governor.d.ts.map +1 -0
- package/dist/browser/script-runner.d.ts +23 -0
- package/dist/browser/script-runner.d.ts.map +1 -0
- package/dist/browser/session-store.d.ts +63 -0
- package/dist/browser/session-store.d.ts.map +1 -0
- package/dist/browser/target-manager.d.ts +36 -0
- package/dist/browser/target-manager.d.ts.map +1 -0
- package/dist/cache/chrome-locator.d.ts +2 -0
- package/dist/cache/chrome-locator.d.ts.map +1 -0
- package/dist/cache/downloader.d.ts +6 -0
- package/dist/cache/downloader.d.ts.map +1 -0
- package/dist/cache/paths.d.ts +9 -0
- package/dist/cache/paths.d.ts.map +1 -0
- package/dist/chunk-7W3SPXIB.js +166 -0
- package/dist/chunk-7W3SPXIB.js.map +1 -0
- package/dist/chunk-ST7CO5FA.js +18668 -0
- package/dist/chunk-ST7CO5FA.js.map +1 -0
- package/dist/cli/args.d.ts +25 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/client.d.ts +2 -0
- package/dist/cli/client.d.ts.map +1 -0
- package/dist/cli/commands/annotate.d.ts +27 -0
- package/dist/cli/commands/annotate.d.ts.map +1 -0
- package/dist/cli/commands/artifacts.d.ts +24 -0
- package/dist/cli/commands/artifacts.d.ts.map +1 -0
- package/dist/cli/commands/daemon.d.ts +35 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/devtools/console-poll.d.ts +7 -0
- package/dist/cli/commands/devtools/console-poll.d.ts.map +1 -0
- package/dist/cli/commands/devtools/debug-trace-snapshot.d.ts +20 -0
- package/dist/cli/commands/devtools/debug-trace-snapshot.d.ts.map +1 -0
- package/dist/cli/commands/devtools/network-poll.d.ts +7 -0
- package/dist/cli/commands/devtools/network-poll.d.ts.map +1 -0
- package/dist/cli/commands/devtools/perf.d.ts +7 -0
- package/dist/cli/commands/devtools/perf.d.ts.map +1 -0
- package/dist/cli/commands/devtools/screenshot.d.ts +17 -0
- package/dist/cli/commands/devtools/screenshot.d.ts.map +1 -0
- package/dist/cli/commands/dom/attr.d.ts +7 -0
- package/dist/cli/commands/dom/attr.d.ts.map +1 -0
- package/dist/cli/commands/dom/checked.d.ts +7 -0
- package/dist/cli/commands/dom/checked.d.ts.map +1 -0
- package/dist/cli/commands/dom/enabled.d.ts +7 -0
- package/dist/cli/commands/dom/enabled.d.ts.map +1 -0
- package/dist/cli/commands/dom/html.d.ts +7 -0
- package/dist/cli/commands/dom/html.d.ts.map +1 -0
- package/dist/cli/commands/dom/text.d.ts +7 -0
- package/dist/cli/commands/dom/text.d.ts.map +1 -0
- package/dist/cli/commands/dom/value.d.ts +7 -0
- package/dist/cli/commands/dom/value.d.ts.map +1 -0
- package/dist/cli/commands/dom/visible.d.ts +7 -0
- package/dist/cli/commands/dom/visible.d.ts.map +1 -0
- package/dist/cli/commands/export/clone-component.d.ts +7 -0
- package/dist/cli/commands/export/clone-component.d.ts.map +1 -0
- package/dist/cli/commands/export/clone-page.d.ts +7 -0
- package/dist/cli/commands/export/clone-page.d.ts.map +1 -0
- package/dist/cli/commands/interact/check.d.ts +7 -0
- package/dist/cli/commands/interact/check.d.ts.map +1 -0
- package/dist/cli/commands/interact/click.d.ts +7 -0
- package/dist/cli/commands/interact/click.d.ts.map +1 -0
- package/dist/cli/commands/interact/hover.d.ts +7 -0
- package/dist/cli/commands/interact/hover.d.ts.map +1 -0
- package/dist/cli/commands/interact/press.d.ts +7 -0
- package/dist/cli/commands/interact/press.d.ts.map +1 -0
- package/dist/cli/commands/interact/scroll-into-view.d.ts +7 -0
- package/dist/cli/commands/interact/scroll-into-view.d.ts.map +1 -0
- package/dist/cli/commands/interact/scroll.d.ts +7 -0
- package/dist/cli/commands/interact/scroll.d.ts.map +1 -0
- package/dist/cli/commands/interact/select.d.ts +7 -0
- package/dist/cli/commands/interact/select.d.ts.map +1 -0
- package/dist/cli/commands/interact/type.d.ts +7 -0
- package/dist/cli/commands/interact/type.d.ts.map +1 -0
- package/dist/cli/commands/interact/uncheck.d.ts +7 -0
- package/dist/cli/commands/interact/uncheck.d.ts.map +1 -0
- package/dist/cli/commands/macro-resolve.d.ts +18 -0
- package/dist/cli/commands/macro-resolve.d.ts.map +1 -0
- package/dist/cli/commands/native.d.ts +82 -0
- package/dist/cli/commands/native.d.ts.map +1 -0
- package/dist/cli/commands/nav/goto.d.ts +7 -0
- package/dist/cli/commands/nav/goto.d.ts.map +1 -0
- package/dist/cli/commands/nav/snapshot.d.ts +7 -0
- package/dist/cli/commands/nav/snapshot.d.ts.map +1 -0
- package/dist/cli/commands/nav/wait.d.ts +7 -0
- package/dist/cli/commands/nav/wait.d.ts.map +1 -0
- package/dist/cli/commands/pages/close.d.ts +6 -0
- package/dist/cli/commands/pages/close.d.ts.map +1 -0
- package/dist/cli/commands/pages/list.d.ts +7 -0
- package/dist/cli/commands/pages/list.d.ts.map +1 -0
- package/dist/cli/commands/pages/open.d.ts +7 -0
- package/dist/cli/commands/pages/open.d.ts.map +1 -0
- package/dist/cli/commands/product-video.d.ts +25 -0
- package/dist/cli/commands/product-video.d.ts.map +1 -0
- package/dist/cli/commands/registry.d.ts +5 -0
- package/dist/cli/commands/registry.d.ts.map +1 -0
- package/dist/cli/commands/research.d.ts +27 -0
- package/dist/cli/commands/research.d.ts.map +1 -0
- package/dist/cli/commands/rpc.d.ts +28 -0
- package/dist/cli/commands/rpc.d.ts.map +1 -0
- package/dist/cli/commands/run.d.ts +17 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/serve.d.ts +59 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/session/connect.d.ts +9 -0
- package/dist/cli/commands/session/connect.d.ts.map +1 -0
- package/dist/cli/commands/session/cookie-import.d.ts +31 -0
- package/dist/cli/commands/session/cookie-import.d.ts.map +1 -0
- package/dist/cli/commands/session/cookie-list.d.ts +17 -0
- package/dist/cli/commands/session/cookie-list.d.ts.map +1 -0
- package/dist/cli/commands/session/disconnect.d.ts +6 -0
- package/dist/cli/commands/session/disconnect.d.ts.map +1 -0
- package/dist/cli/commands/session/launch.d.ts +29 -0
- package/dist/cli/commands/session/launch.d.ts.map +1 -0
- package/dist/cli/commands/session/status.d.ts +7 -0
- package/dist/cli/commands/session/status.d.ts.map +1 -0
- package/dist/cli/commands/shopping.d.ts +25 -0
- package/dist/cli/commands/shopping.d.ts.map +1 -0
- package/dist/cli/commands/status.d.ts +19 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/targets/close.d.ts +6 -0
- package/dist/cli/commands/targets/close.d.ts.map +1 -0
- package/dist/cli/commands/targets/list.d.ts +7 -0
- package/dist/cli/commands/targets/list.d.ts.map +1 -0
- package/dist/cli/commands/targets/new.d.ts +7 -0
- package/dist/cli/commands/targets/new.d.ts.map +1 -0
- package/dist/cli/commands/targets/use.d.ts +7 -0
- package/dist/cli/commands/targets/use.d.ts.map +1 -0
- package/dist/cli/commands/types.d.ts +13 -0
- package/dist/cli/commands/types.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.d.ts +14 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/update.d.ts +7 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/daemon-autostart.d.ts +46 -0
- package/dist/cli/daemon-autostart.d.ts.map +1 -0
- package/dist/cli/daemon-client.d.ts +33 -0
- package/dist/cli/daemon-client.d.ts.map +1 -0
- package/dist/cli/daemon-commands.d.ts +7 -0
- package/dist/cli/daemon-commands.d.ts.map +1 -0
- package/dist/cli/daemon-state.d.ts +56 -0
- package/dist/cli/daemon-state.d.ts.map +1 -0
- package/dist/cli/daemon-status.d.ts +19 -0
- package/dist/cli/daemon-status.d.ts.map +1 -0
- package/dist/cli/daemon.d.ts +29 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/errors.d.ts +20 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/help.d.ts +28 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +2205 -267
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/installers/global.d.ts +9 -0
- package/dist/cli/installers/global.d.ts.map +1 -0
- package/dist/cli/installers/local.d.ts +9 -0
- package/dist/cli/installers/local.d.ts.map +1 -0
- package/dist/cli/installers/skills.d.ts +19 -0
- package/dist/cli/installers/skills.d.ts.map +1 -0
- package/dist/cli/output.d.ts +7 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/remote-manager.d.ts +96 -0
- package/dist/cli/remote-manager.d.ts.map +1 -0
- package/dist/cli/remote-relay.d.ts +17 -0
- package/dist/cli/remote-relay.d.ts.map +1 -0
- package/dist/cli/templates/config.d.ts +7 -0
- package/dist/cli/templates/config.d.ts.map +1 -0
- package/dist/cli/utils/config.d.ts +20 -0
- package/dist/cli/utils/config.d.ts.map +1 -0
- package/dist/cli/utils/http.d.ts +5 -0
- package/dist/cli/utils/http.d.ts.map +1 -0
- package/dist/cli/utils/parse.d.ts +8 -0
- package/dist/cli/utils/parse.d.ts.map +1 -0
- package/dist/cli/utils/skills.d.ts +12 -0
- package/dist/cli/utils/skills.d.ts.map +1 -0
- package/dist/config.d.ts +208 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/core/bootstrap.d.ts +3 -0
- package/dist/core/bootstrap.d.ts.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/logging.d.ts +34 -0
- package/dist/core/logging.d.ts.map +1 -0
- package/dist/core/types.d.ts +34 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/devtools/console-tracker.d.ts +44 -0
- package/dist/devtools/console-tracker.d.ts.map +1 -0
- package/dist/devtools/exception-tracker.d.ts +42 -0
- package/dist/devtools/exception-tracker.d.ts.map +1 -0
- package/dist/devtools/network-tracker.d.ts +34 -0
- package/dist/devtools/network-tracker.d.ts.map +1 -0
- package/dist/export/css-extract.d.ts +5 -0
- package/dist/export/css-extract.d.ts.map +1 -0
- package/dist/export/dom-capture.d.ts +15 -0
- package/dist/export/dom-capture.d.ts.map +1 -0
- package/dist/export/react-emitter.d.ts +11 -0
- package/dist/export/react-emitter.d.ts.map +1 -0
- package/dist/extension-extractor.d.ts +3 -0
- package/dist/extension-extractor.d.ts.map +1 -0
- package/dist/index.d.ts +3 -4
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +867 -87
- package/dist/index.js.map +1 -1
- package/dist/macros/execute.d.ts +44 -0
- package/dist/macros/execute.d.ts.map +1 -0
- package/dist/macros/index.d.ts +9 -0
- package/dist/macros/index.d.ts.map +1 -0
- package/dist/macros/packs/core.d.ts +3 -0
- package/dist/macros/packs/core.d.ts.map +1 -0
- package/dist/macros/registry.d.ts +48 -0
- package/dist/macros/registry.d.ts.map +1 -0
- package/dist/macros-NUBRM44Y.js +399 -0
- package/dist/macros-NUBRM44Y.js.map +1 -0
- package/dist/opendevbrowser.d.ts +3 -4
- package/dist/opendevbrowser.d.ts.map +1 -0
- package/dist/opendevbrowser.js +867 -87
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/providers/adaptive-concurrency.d.ts +42 -0
- package/dist/providers/adaptive-concurrency.d.ts.map +1 -0
- package/dist/providers/artifacts.d.ts +34 -0
- package/dist/providers/artifacts.d.ts.map +1 -0
- package/dist/providers/blocker.d.ts +47 -0
- package/dist/providers/blocker.d.ts.map +1 -0
- package/dist/providers/community/index.d.ts +44 -0
- package/dist/providers/community/index.d.ts.map +1 -0
- package/dist/providers/enrichment.d.ts +33 -0
- package/dist/providers/enrichment.d.ts.map +1 -0
- package/dist/providers/errors.d.ts +41 -0
- package/dist/providers/errors.d.ts.map +1 -0
- package/dist/providers/index.d.ts +121 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/normalize.d.ts +39 -0
- package/dist/providers/normalize.d.ts.map +1 -0
- package/dist/providers/policy.d.ts +5 -0
- package/dist/providers/policy.d.ts.map +1 -0
- package/dist/providers/registry.d.ts +22 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/renderer.d.ts +49 -0
- package/dist/providers/renderer.d.ts.map +1 -0
- package/dist/providers/runtime-factory.d.ts +20 -0
- package/dist/providers/runtime-factory.d.ts.map +1 -0
- package/dist/providers/safety/prompt-guard.d.ts +34 -0
- package/dist/providers/safety/prompt-guard.d.ts.map +1 -0
- package/dist/providers/shared/anti-bot-policy.d.ts +51 -0
- package/dist/providers/shared/anti-bot-policy.d.ts.map +1 -0
- package/dist/providers/shared/post-policy.d.ts +31 -0
- package/dist/providers/shared/post-policy.d.ts.map +1 -0
- package/dist/providers/shared/request-headers.d.ts +5 -0
- package/dist/providers/shared/request-headers.d.ts.map +1 -0
- package/dist/providers/shared/traversal-url.d.ts +2 -0
- package/dist/providers/shared/traversal-url.d.ts.map +1 -0
- package/dist/providers/shopping/index.d.ts +63 -0
- package/dist/providers/shopping/index.d.ts.map +1 -0
- package/dist/providers/social/bluesky.d.ts +3 -0
- package/dist/providers/social/bluesky.d.ts.map +1 -0
- package/dist/providers/social/facebook.d.ts +3 -0
- package/dist/providers/social/facebook.d.ts.map +1 -0
- package/dist/providers/social/index.d.ts +31 -0
- package/dist/providers/social/index.d.ts.map +1 -0
- package/dist/providers/social/instagram.d.ts +3 -0
- package/dist/providers/social/instagram.d.ts.map +1 -0
- package/dist/providers/social/linkedin.d.ts +3 -0
- package/dist/providers/social/linkedin.d.ts.map +1 -0
- package/dist/providers/social/platform.d.ts +40 -0
- package/dist/providers/social/platform.d.ts.map +1 -0
- package/dist/providers/social/reddit.d.ts +3 -0
- package/dist/providers/social/reddit.d.ts.map +1 -0
- package/dist/providers/social/threads.d.ts +3 -0
- package/dist/providers/social/threads.d.ts.map +1 -0
- package/dist/providers/social/tiktok.d.ts +3 -0
- package/dist/providers/social/tiktok.d.ts.map +1 -0
- package/dist/providers/social/x.d.ts +3 -0
- package/dist/providers/social/x.d.ts.map +1 -0
- package/dist/providers/social/youtube-resolver.d.ts +78 -0
- package/dist/providers/social/youtube-resolver.d.ts.map +1 -0
- package/dist/providers/social/youtube.d.ts +34 -0
- package/dist/providers/social/youtube.d.ts.map +1 -0
- package/dist/providers/tier-router.d.ts +30 -0
- package/dist/providers/tier-router.d.ts.map +1 -0
- package/dist/providers/timebox.d.ts +20 -0
- package/dist/providers/timebox.d.ts.map +1 -0
- package/dist/providers/types.d.ts +344 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/web/crawl-worker.d.ts +36 -0
- package/dist/providers/web/crawl-worker.d.ts.map +1 -0
- package/dist/providers/web/crawler.d.ts +101 -0
- package/dist/providers/web/crawler.d.ts.map +1 -0
- package/dist/providers/web/extract.d.ts +11 -0
- package/dist/providers/web/extract.d.ts.map +1 -0
- package/dist/providers/web/index.d.ts +24 -0
- package/dist/providers/web/index.d.ts.map +1 -0
- package/dist/providers/web/policy.d.ts +14 -0
- package/dist/providers/web/policy.d.ts.map +1 -0
- package/dist/providers/workflows.d.ts +67 -0
- package/dist/providers/workflows.d.ts.map +1 -0
- package/dist/relay/protocol.d.ts +317 -0
- package/dist/relay/protocol.d.ts.map +1 -0
- package/dist/relay/relay-endpoints.d.ts +16 -0
- package/dist/relay/relay-endpoints.d.ts.map +1 -0
- package/dist/relay/relay-server.d.ts +111 -0
- package/dist/relay/relay-server.d.ts.map +1 -0
- package/dist/relay/relay-types.d.ts +9 -0
- package/dist/relay/relay-types.d.ts.map +1 -0
- package/dist/skills/continuity-nudge.d.ts +12 -0
- package/dist/skills/continuity-nudge.d.ts.map +1 -0
- package/dist/skills/skill-loader.d.ts +20 -0
- package/dist/skills/skill-loader.d.ts.map +1 -0
- package/dist/skills/skill-nudge.d.ts +18 -0
- package/dist/skills/skill-nudge.d.ts.map +1 -0
- package/dist/skills/types.d.ts +12 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/snapshot/ops-snapshot.d.ts +16 -0
- package/dist/snapshot/ops-snapshot.d.ts.map +1 -0
- package/dist/snapshot/refs.d.ts +23 -0
- package/dist/snapshot/refs.d.ts.map +1 -0
- package/dist/snapshot/snapshotter.d.ts +27 -0
- package/dist/snapshot/snapshotter.d.ts.map +1 -0
- package/dist/tools/annotate.d.ts +4 -0
- package/dist/tools/annotate.d.ts.map +1 -0
- package/dist/tools/check.d.ts +4 -0
- package/dist/tools/check.d.ts.map +1 -0
- package/dist/tools/click.d.ts +4 -0
- package/dist/tools/click.d.ts.map +1 -0
- package/dist/tools/clone_component.d.ts +4 -0
- package/dist/tools/clone_component.d.ts.map +1 -0
- package/dist/tools/clone_page.d.ts +4 -0
- package/dist/tools/clone_page.d.ts.map +1 -0
- package/dist/tools/close.d.ts +4 -0
- package/dist/tools/close.d.ts.map +1 -0
- package/dist/tools/connect.d.ts +4 -0
- package/dist/tools/connect.d.ts.map +1 -0
- package/dist/tools/console_poll.d.ts +4 -0
- package/dist/tools/console_poll.d.ts.map +1 -0
- package/dist/tools/cookie_import.d.ts +25 -0
- package/dist/tools/cookie_import.d.ts.map +1 -0
- package/dist/tools/cookie_list.d.ts +9 -0
- package/dist/tools/cookie_list.d.ts.map +1 -0
- package/dist/tools/debug_trace_snapshot.d.ts +4 -0
- package/dist/tools/debug_trace_snapshot.d.ts.map +1 -0
- package/dist/tools/deps.d.ts +26 -0
- package/dist/tools/deps.d.ts.map +1 -0
- package/dist/tools/disconnect.d.ts +4 -0
- package/dist/tools/disconnect.d.ts.map +1 -0
- package/dist/tools/dom_get_html.d.ts +4 -0
- package/dist/tools/dom_get_html.d.ts.map +1 -0
- package/dist/tools/dom_get_text.d.ts +4 -0
- package/dist/tools/dom_get_text.d.ts.map +1 -0
- package/dist/tools/get_attr.d.ts +4 -0
- package/dist/tools/get_attr.d.ts.map +1 -0
- package/dist/tools/get_value.d.ts +4 -0
- package/dist/tools/get_value.d.ts.map +1 -0
- package/dist/tools/goto.d.ts +4 -0
- package/dist/tools/goto.d.ts.map +1 -0
- package/dist/tools/hover.d.ts +4 -0
- package/dist/tools/hover.d.ts.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/is_checked.d.ts +4 -0
- package/dist/tools/is_checked.d.ts.map +1 -0
- package/dist/tools/is_enabled.d.ts +4 -0
- package/dist/tools/is_enabled.d.ts.map +1 -0
- package/dist/tools/is_visible.d.ts +4 -0
- package/dist/tools/is_visible.d.ts.map +1 -0
- package/dist/tools/launch.d.ts +4 -0
- package/dist/tools/launch.d.ts.map +1 -0
- package/dist/tools/list.d.ts +4 -0
- package/dist/tools/list.d.ts.map +1 -0
- package/dist/tools/macro_resolve.d.ts +25 -0
- package/dist/tools/macro_resolve.d.ts.map +1 -0
- package/dist/tools/network_poll.d.ts +4 -0
- package/dist/tools/network_poll.d.ts.map +1 -0
- package/dist/tools/page.d.ts +4 -0
- package/dist/tools/page.d.ts.map +1 -0
- package/dist/tools/perf.d.ts +4 -0
- package/dist/tools/perf.d.ts.map +1 -0
- package/dist/tools/press.d.ts +4 -0
- package/dist/tools/press.d.ts.map +1 -0
- package/dist/tools/product_video_run.d.ts +4 -0
- package/dist/tools/product_video_run.d.ts.map +1 -0
- package/dist/tools/prompting_guide.d.ts +4 -0
- package/dist/tools/prompting_guide.d.ts.map +1 -0
- package/dist/tools/research_run.d.ts +4 -0
- package/dist/tools/research_run.d.ts.map +1 -0
- package/dist/tools/response.d.ts +16 -0
- package/dist/tools/response.d.ts.map +1 -0
- package/dist/tools/run.d.ts +4 -0
- package/dist/tools/run.d.ts.map +1 -0
- package/dist/tools/screenshot.d.ts +4 -0
- package/dist/tools/screenshot.d.ts.map +1 -0
- package/dist/tools/scroll.d.ts +4 -0
- package/dist/tools/scroll.d.ts.map +1 -0
- package/dist/tools/scroll_into_view.d.ts +4 -0
- package/dist/tools/scroll_into_view.d.ts.map +1 -0
- package/dist/tools/select.d.ts +4 -0
- package/dist/tools/select.d.ts.map +1 -0
- package/dist/tools/shopping_run.d.ts +4 -0
- package/dist/tools/shopping_run.d.ts.map +1 -0
- package/dist/tools/skill_list.d.ts +4 -0
- package/dist/tools/skill_list.d.ts.map +1 -0
- package/dist/tools/skill_load.d.ts +4 -0
- package/dist/tools/skill_load.d.ts.map +1 -0
- package/dist/tools/snapshot.d.ts +4 -0
- package/dist/tools/snapshot.d.ts.map +1 -0
- package/dist/tools/status.d.ts +4 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/target_close.d.ts +4 -0
- package/dist/tools/target_close.d.ts.map +1 -0
- package/dist/tools/target_new.d.ts +4 -0
- package/dist/tools/target_new.d.ts.map +1 -0
- package/dist/tools/target_use.d.ts +4 -0
- package/dist/tools/target_use.d.ts.map +1 -0
- package/dist/tools/targets_list.d.ts +4 -0
- package/dist/tools/targets_list.d.ts.map +1 -0
- package/dist/tools/type.d.ts +4 -0
- package/dist/tools/type.d.ts.map +1 -0
- package/dist/tools/uncheck.d.ts +4 -0
- package/dist/tools/uncheck.d.ts.map +1 -0
- package/dist/tools/wait.d.ts +4 -0
- package/dist/tools/wait.d.ts.map +1 -0
- package/dist/tools/workflow-runtime.d.ts +4 -0
- package/dist/tools/workflow-runtime.d.ts.map +1 -0
- package/dist/utils/crypto.d.ts +2 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/endpoint-validation.d.ts +2 -0
- package/dist/utils/endpoint-validation.d.ts.map +1 -0
- package/dist/utils/fs.d.ts +5 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/hub-enabled.d.ts +3 -0
- package/dist/utils/hub-enabled.d.ts.map +1 -0
- package/extension/dist/background.js +10 -4
- package/extension/dist/ops/ops-runtime.js +506 -4
- package/extension/dist/ops/ops-session-store.js +16 -2
- package/extension/dist/ops/parallelism-governor.js +117 -0
- package/extension/dist/ops/snapshot-shared.js +21 -5
- package/extension/dist/services/CDPRouter.js +70 -5
- package/extension/dist/services/ConnectionManager.js +5 -3
- package/extension/icons/icon128.png +0 -0
- package/extension/icons/icon16.png +0 -0
- package/extension/icons/icon32.png +0 -0
- package/extension/icons/icon48.png +0 -0
- package/extension/manifest.json +1 -1
- package/package.json +25 -16
- package/scripts/native/host.cjs +230 -0
- package/scripts/native/install.ps1 +73 -0
- package/scripts/native/install.sh +66 -0
- package/scripts/native/uninstall.ps1 +25 -0
- package/scripts/native/uninstall.sh +26 -0
- package/skills/AGENTS.md +17 -8
- package/skills/opendevbrowser-best-practices/SKILL.md +178 -72
- package/skills/opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md +44 -0
- package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +95 -0
- package/skills/opendevbrowser-best-practices/artifacts/debug-trace-playbook.md +36 -0
- package/skills/opendevbrowser-best-practices/artifacts/fingerprint-tiers.md +36 -0
- package/skills/opendevbrowser-best-practices/artifacts/macro-workflows.md +43 -0
- package/skills/opendevbrowser-best-practices/artifacts/parity-gates.md +36 -0
- package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +89 -0
- package/skills/opendevbrowser-best-practices/assets/templates/cdp-forward-envelope.json +11 -0
- package/skills/opendevbrowser-best-practices/assets/templates/mode-flag-matrix.json +56 -0
- package/skills/opendevbrowser-best-practices/assets/templates/ops-request-envelope.json +9 -0
- package/skills/opendevbrowser-best-practices/assets/templates/robustness-checklist.json +79 -0
- package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +24 -0
- package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +144 -0
- package/skills/opendevbrowser-best-practices/scripts/run-robustness-audit.sh +83 -0
- package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +93 -0
- package/skills/opendevbrowser-continuity-ledger/SKILL.md +10 -0
- package/skills/opendevbrowser-data-extraction/SKILL.md +126 -0
- package/skills/opendevbrowser-data-extraction/artifacts/extraction-workflows.md +31 -0
- package/skills/opendevbrowser-data-extraction/assets/templates/compliance-checklist.md +7 -0
- package/skills/opendevbrowser-data-extraction/assets/templates/extraction-schema.json +17 -0
- package/skills/opendevbrowser-data-extraction/assets/templates/pagination-state.json +11 -0
- package/skills/opendevbrowser-data-extraction/assets/templates/quality-gates.json +10 -0
- package/skills/opendevbrowser-data-extraction/examples/sample-schema.json +19 -0
- package/skills/opendevbrowser-data-extraction/scripts/run-extraction-workflow.sh +83 -0
- package/skills/opendevbrowser-data-extraction/scripts/validate-skill-assets.sh +49 -0
- package/skills/opendevbrowser-form-testing/SKILL.md +143 -0
- package/skills/opendevbrowser-form-testing/artifacts/form-workflows.md +37 -0
- package/skills/opendevbrowser-form-testing/assets/templates/a11y-assertions.md +7 -0
- package/skills/opendevbrowser-form-testing/assets/templates/challenge-decision-tree.json +16 -0
- package/skills/opendevbrowser-form-testing/assets/templates/multi-step-state.json +11 -0
- package/skills/opendevbrowser-form-testing/assets/templates/validation-matrix.json +24 -0
- package/skills/opendevbrowser-form-testing/examples/sample-validation-matrix.json +29 -0
- package/skills/opendevbrowser-form-testing/scripts/run-form-workflow.sh +82 -0
- package/skills/opendevbrowser-form-testing/scripts/validate-skill-assets.sh +49 -0
- package/skills/opendevbrowser-login-automation/SKILL.md +159 -0
- package/skills/opendevbrowser-login-automation/artifacts/login-workflows.md +39 -0
- package/skills/opendevbrowser-login-automation/assets/templates/auth-signals.json +21 -0
- package/skills/opendevbrowser-login-automation/assets/templates/challenge-checkpoint.md +10 -0
- package/skills/opendevbrowser-login-automation/assets/templates/login-scenario-matrix.json +26 -0
- package/skills/opendevbrowser-login-automation/examples/sample-auth-signals.json +14 -0
- package/skills/opendevbrowser-login-automation/scripts/record-auth-signals.sh +18 -0
- package/skills/opendevbrowser-login-automation/scripts/run-login-workflow.sh +99 -0
- package/skills/opendevbrowser-login-automation/scripts/validate-skill-assets.sh +50 -0
- package/skills/opendevbrowser-product-presentation-asset/SKILL.md +98 -0
- package/skills/opendevbrowser-product-presentation-asset/artifacts/asset-pack-assembly.md +23 -0
- package/skills/opendevbrowser-product-presentation-asset/artifacts/ugc-creative-guide.md +21 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/claims-evidence-map.md +5 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/copy.md +5 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/features.md +4 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/manifest.schema.json +14 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/shot-list.md +7 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/ugc-concepts.md +17 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/user-actions.md +7 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/video-assembly.md +18 -0
- package/skills/opendevbrowser-product-presentation-asset/examples/sample-input.json +6 -0
- package/skills/opendevbrowser-product-presentation-asset/examples/sample-manifest.json +18 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/capture-screenshots.sh +9 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/collect-product.sh +14 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/download-images.sh +9 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh +96 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/validate-skill-assets.sh +56 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/write-manifest.sh +43 -0
- package/skills/opendevbrowser-research/SKILL.md +73 -0
- package/skills/opendevbrowser-research/artifacts/research-workflows.md +29 -0
- package/skills/opendevbrowser-research/assets/templates/compact.md +7 -0
- package/skills/opendevbrowser-research/assets/templates/context.json +18 -0
- package/skills/opendevbrowser-research/assets/templates/report.md +9 -0
- package/skills/opendevbrowser-research/examples/sample-input.json +6 -0
- package/skills/opendevbrowser-research/examples/sample-output.md +4 -0
- package/skills/opendevbrowser-research/scripts/render-output.sh +12 -0
- package/skills/opendevbrowser-research/scripts/run-research.sh +23 -0
- package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +48 -0
- package/skills/opendevbrowser-research/scripts/write-artifacts.sh +29 -0
- package/skills/opendevbrowser-shopping/SKILL.md +118 -0
- package/skills/opendevbrowser-shopping/artifacts/deal-hunting-workflows.md +37 -0
- package/skills/opendevbrowser-shopping/assets/templates/deal-thresholds.json +8 -0
- package/skills/opendevbrowser-shopping/assets/templates/deals-context.json +9 -0
- package/skills/opendevbrowser-shopping/assets/templates/deals-table.md +4 -0
- package/skills/opendevbrowser-shopping/assets/templates/market-analysis.json +30 -0
- package/skills/opendevbrowser-shopping/examples/sample-deals.md +4 -0
- package/skills/opendevbrowser-shopping/examples/sample-query.json +5 -0
- package/skills/opendevbrowser-shopping/scripts/analyze-market.sh +307 -0
- package/skills/opendevbrowser-shopping/scripts/normalize-offers.sh +28 -0
- package/skills/opendevbrowser-shopping/scripts/render-deals.sh +13 -0
- package/skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh +32 -0
- package/skills/opendevbrowser-shopping/scripts/run-shopping.sh +19 -0
- package/skills/opendevbrowser-shopping/scripts/validate-skill-assets.sh +53 -0
- package/dist/chunk-JVBMT2O5.js +0 -7173
- package/dist/chunk-JVBMT2O5.js.map +0 -1
- package/skills/data-extraction/SKILL.md +0 -128
- package/skills/form-testing/SKILL.md +0 -106
- package/skills/login-automation/SKILL.md +0 -108
package/dist/index.js
CHANGED
|
@@ -2,11 +2,22 @@ import {
|
|
|
2
2
|
DaemonClient,
|
|
3
3
|
ScriptRunner,
|
|
4
4
|
buildAnnotateResult,
|
|
5
|
+
buildBlockerArtifacts,
|
|
6
|
+
classifyBlockerSignal,
|
|
7
|
+
createBrowserFallbackPort,
|
|
8
|
+
createConfiguredProviderRuntime,
|
|
5
9
|
createOpenDevBrowserCore,
|
|
10
|
+
createRequestId,
|
|
11
|
+
executeMacroResolution,
|
|
6
12
|
extractExtension,
|
|
7
13
|
fetchDaemonStatusFromMetadata,
|
|
14
|
+
runProductVideoWorkflow,
|
|
15
|
+
runResearchWorkflow,
|
|
16
|
+
runShoppingWorkflow,
|
|
17
|
+
shapeExecutionPayload,
|
|
8
18
|
startDaemon
|
|
9
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-ST7CO5FA.js";
|
|
20
|
+
import "./chunk-7W3SPXIB.js";
|
|
10
21
|
|
|
11
22
|
// src/cli/remote-manager.ts
|
|
12
23
|
function isLegacyRelayEndpoint(wsEndpoint) {
|
|
@@ -41,77 +52,202 @@ var RemoteManager = class {
|
|
|
41
52
|
status(sessionId) {
|
|
42
53
|
return this.client.call("session.status", { sessionId });
|
|
43
54
|
}
|
|
44
|
-
|
|
45
|
-
return this.client.call("
|
|
55
|
+
cookieImport(sessionId, cookies, strict = true, requestId) {
|
|
56
|
+
return this.client.call("session.cookieImport", {
|
|
57
|
+
sessionId,
|
|
58
|
+
cookies,
|
|
59
|
+
strict,
|
|
60
|
+
requestId
|
|
61
|
+
});
|
|
46
62
|
}
|
|
47
|
-
|
|
48
|
-
return this.client.call("
|
|
63
|
+
cookieList(sessionId, urls, requestId) {
|
|
64
|
+
return this.client.call("session.cookieList", {
|
|
65
|
+
sessionId,
|
|
66
|
+
...urls && urls.length > 0 ? { urls } : {},
|
|
67
|
+
requestId
|
|
68
|
+
});
|
|
49
69
|
}
|
|
50
|
-
|
|
51
|
-
return this.client.call("nav.
|
|
70
|
+
goto(sessionId, url, waitUntil = "load", timeoutMs = 3e4, _sessionOverride, targetId) {
|
|
71
|
+
return this.client.call("nav.goto", {
|
|
72
|
+
sessionId,
|
|
73
|
+
url,
|
|
74
|
+
waitUntil,
|
|
75
|
+
timeoutMs,
|
|
76
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
77
|
+
});
|
|
52
78
|
}
|
|
53
|
-
|
|
54
|
-
return this.client.call("nav.
|
|
79
|
+
waitForLoad(sessionId, until, timeoutMs = 3e4, targetId) {
|
|
80
|
+
return this.client.call("nav.wait", {
|
|
81
|
+
sessionId,
|
|
82
|
+
until,
|
|
83
|
+
timeoutMs,
|
|
84
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
85
|
+
});
|
|
55
86
|
}
|
|
56
|
-
|
|
57
|
-
return this.client.call("
|
|
87
|
+
waitForRef(sessionId, ref, state = "attached", timeoutMs = 3e4, targetId) {
|
|
88
|
+
return this.client.call("nav.wait", {
|
|
89
|
+
sessionId,
|
|
90
|
+
ref,
|
|
91
|
+
state,
|
|
92
|
+
timeoutMs,
|
|
93
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
94
|
+
});
|
|
58
95
|
}
|
|
59
|
-
|
|
60
|
-
return this.client.call("
|
|
96
|
+
snapshot(sessionId, mode, maxChars, cursor, targetId) {
|
|
97
|
+
return this.client.call("nav.snapshot", {
|
|
98
|
+
sessionId,
|
|
99
|
+
mode,
|
|
100
|
+
maxChars,
|
|
101
|
+
cursor,
|
|
102
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
103
|
+
});
|
|
61
104
|
}
|
|
62
|
-
|
|
63
|
-
return this.client.call("interact.
|
|
105
|
+
click(sessionId, ref, targetId) {
|
|
106
|
+
return this.client.call("interact.click", {
|
|
107
|
+
sessionId,
|
|
108
|
+
ref,
|
|
109
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
110
|
+
});
|
|
64
111
|
}
|
|
65
|
-
|
|
66
|
-
return this.client.call("interact.
|
|
112
|
+
hover(sessionId, ref, targetId) {
|
|
113
|
+
return this.client.call("interact.hover", {
|
|
114
|
+
sessionId,
|
|
115
|
+
ref,
|
|
116
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
117
|
+
});
|
|
67
118
|
}
|
|
68
|
-
|
|
69
|
-
return this.client.call("interact.
|
|
119
|
+
press(sessionId, key, ref, targetId) {
|
|
120
|
+
return this.client.call("interact.press", {
|
|
121
|
+
sessionId,
|
|
122
|
+
key,
|
|
123
|
+
ref,
|
|
124
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
125
|
+
});
|
|
70
126
|
}
|
|
71
|
-
|
|
72
|
-
return this.client.call("interact.
|
|
127
|
+
check(sessionId, ref, targetId) {
|
|
128
|
+
return this.client.call("interact.check", {
|
|
129
|
+
sessionId,
|
|
130
|
+
ref,
|
|
131
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
132
|
+
});
|
|
73
133
|
}
|
|
74
|
-
|
|
75
|
-
return this.client.call("interact.
|
|
134
|
+
uncheck(sessionId, ref, targetId) {
|
|
135
|
+
return this.client.call("interact.uncheck", {
|
|
136
|
+
sessionId,
|
|
137
|
+
ref,
|
|
138
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
139
|
+
});
|
|
76
140
|
}
|
|
77
|
-
|
|
78
|
-
return this.client.call("interact.
|
|
141
|
+
type(sessionId, ref, text, clear = false, submit = false, targetId) {
|
|
142
|
+
return this.client.call("interact.type", {
|
|
143
|
+
sessionId,
|
|
144
|
+
ref,
|
|
145
|
+
text,
|
|
146
|
+
clear,
|
|
147
|
+
submit,
|
|
148
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
149
|
+
});
|
|
79
150
|
}
|
|
80
|
-
|
|
81
|
-
return this.client.call("interact.
|
|
151
|
+
select(sessionId, ref, values, targetId) {
|
|
152
|
+
return this.client.call("interact.select", {
|
|
153
|
+
sessionId,
|
|
154
|
+
ref,
|
|
155
|
+
values,
|
|
156
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
157
|
+
});
|
|
82
158
|
}
|
|
83
|
-
|
|
84
|
-
return this.client.call("
|
|
159
|
+
scroll(sessionId, dy, ref, targetId) {
|
|
160
|
+
return this.client.call("interact.scroll", {
|
|
161
|
+
sessionId,
|
|
162
|
+
dy,
|
|
163
|
+
ref,
|
|
164
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
165
|
+
});
|
|
85
166
|
}
|
|
86
|
-
|
|
87
|
-
return this.client.call("
|
|
167
|
+
scrollIntoView(sessionId, ref, targetId) {
|
|
168
|
+
return this.client.call("interact.scrollIntoView", {
|
|
169
|
+
sessionId,
|
|
170
|
+
ref,
|
|
171
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
172
|
+
});
|
|
88
173
|
}
|
|
89
|
-
|
|
90
|
-
return this.client.call("dom.
|
|
174
|
+
domGetHtml(sessionId, ref, maxChars = 8e3, targetId) {
|
|
175
|
+
return this.client.call("dom.getHtml", {
|
|
176
|
+
sessionId,
|
|
177
|
+
ref,
|
|
178
|
+
maxChars,
|
|
179
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
180
|
+
});
|
|
91
181
|
}
|
|
92
|
-
|
|
93
|
-
return this.client.call("dom.
|
|
182
|
+
domGetText(sessionId, ref, maxChars = 8e3, targetId) {
|
|
183
|
+
return this.client.call("dom.getText", {
|
|
184
|
+
sessionId,
|
|
185
|
+
ref,
|
|
186
|
+
maxChars,
|
|
187
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
188
|
+
});
|
|
94
189
|
}
|
|
95
|
-
|
|
96
|
-
return this.client.call("dom.
|
|
190
|
+
domGetAttr(sessionId, ref, name, targetId) {
|
|
191
|
+
return this.client.call("dom.getAttr", {
|
|
192
|
+
sessionId,
|
|
193
|
+
ref,
|
|
194
|
+
name,
|
|
195
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
196
|
+
});
|
|
97
197
|
}
|
|
98
|
-
|
|
99
|
-
return this.client.call("dom.
|
|
198
|
+
domGetValue(sessionId, ref, targetId) {
|
|
199
|
+
return this.client.call("dom.getValue", {
|
|
200
|
+
sessionId,
|
|
201
|
+
ref,
|
|
202
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
203
|
+
});
|
|
100
204
|
}
|
|
101
|
-
|
|
102
|
-
return this.client.call("dom.
|
|
205
|
+
domIsVisible(sessionId, ref, targetId) {
|
|
206
|
+
return this.client.call("dom.isVisible", {
|
|
207
|
+
sessionId,
|
|
208
|
+
ref,
|
|
209
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
210
|
+
});
|
|
103
211
|
}
|
|
104
|
-
|
|
105
|
-
return this.client.call("
|
|
212
|
+
domIsEnabled(sessionId, ref, targetId) {
|
|
213
|
+
return this.client.call("dom.isEnabled", {
|
|
214
|
+
sessionId,
|
|
215
|
+
ref,
|
|
216
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
217
|
+
});
|
|
106
218
|
}
|
|
107
|
-
|
|
108
|
-
return this.client.call("
|
|
219
|
+
domIsChecked(sessionId, ref, targetId) {
|
|
220
|
+
return this.client.call("dom.isChecked", {
|
|
221
|
+
sessionId,
|
|
222
|
+
ref,
|
|
223
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
224
|
+
});
|
|
109
225
|
}
|
|
110
|
-
|
|
111
|
-
return this.client.call("
|
|
226
|
+
clonePage(sessionId, targetId) {
|
|
227
|
+
return this.client.call("export.clonePage", {
|
|
228
|
+
sessionId,
|
|
229
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
230
|
+
});
|
|
112
231
|
}
|
|
113
|
-
|
|
114
|
-
return this.client.call("
|
|
232
|
+
cloneComponent(sessionId, ref, targetId) {
|
|
233
|
+
return this.client.call("export.cloneComponent", {
|
|
234
|
+
sessionId,
|
|
235
|
+
ref,
|
|
236
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
perfMetrics(sessionId, targetId) {
|
|
240
|
+
return this.client.call("devtools.perf", {
|
|
241
|
+
sessionId,
|
|
242
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
screenshot(sessionId, path, targetId) {
|
|
246
|
+
return this.client.call("page.screenshot", {
|
|
247
|
+
sessionId,
|
|
248
|
+
path,
|
|
249
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
250
|
+
});
|
|
115
251
|
}
|
|
116
252
|
consolePoll(sessionId, sinceSeq, max = 50) {
|
|
117
253
|
return this.client.call("devtools.consolePoll", { sessionId, sinceSeq, max });
|
|
@@ -209,7 +345,7 @@ var RemoteRelay = class {
|
|
|
209
345
|
|
|
210
346
|
// src/skills/skill-nudge.ts
|
|
211
347
|
var SKILL_NUDGE_MARKER = "[opendevbrowser:skill-nudge]";
|
|
212
|
-
var SKILL_NUDGE_MESSAGE = `${SKILL_NUDGE_MARKER} If this task likely matches a skill,
|
|
348
|
+
var SKILL_NUDGE_MESSAGE = `${SKILL_NUDGE_MARKER} If this task likely matches a skill, start with skill("opendevbrowser-best-practices", "quick start"). Use another skill only when it is more relevant.`;
|
|
213
349
|
function createSkillNudgeState() {
|
|
214
350
|
return { pending: false, requestedAtMs: null };
|
|
215
351
|
}
|
|
@@ -272,7 +408,7 @@ function consumeContinuityNudge(state, nowMs, maxAgeMs) {
|
|
|
272
408
|
}
|
|
273
409
|
function buildContinuityNudgeMessage(filePath) {
|
|
274
410
|
const target = filePath?.trim() || DEFAULT_FILE_PATH;
|
|
275
|
-
return `${CONTINUITY_NUDGE_MARKER} For long-running tasks, create or update ${target} at the repo root with Goal, Constraints/Assumptions, Key decisions, State (Done/Now/Next), Open questions, and Working set. Keep it brief.`;
|
|
411
|
+
return `${CONTINUITY_NUDGE_MARKER} For long-running tasks, load skill("opendevbrowser-continuity-ledger") and create or update ${target} at the repo root with Goal, Constraints/Assumptions, Key decisions, State (Done/Now/Next), Open questions, and Working set. Keep it brief.`;
|
|
276
412
|
}
|
|
277
413
|
|
|
278
414
|
// src/tools/launch.ts
|
|
@@ -333,6 +469,12 @@ function createLaunchTool(deps) {
|
|
|
333
469
|
const headlessExplicit = args.headless === true;
|
|
334
470
|
const managedExplicit = Boolean(args.noExtension || headlessExplicit);
|
|
335
471
|
const managedHeadless = headlessExplicit ? true : false;
|
|
472
|
+
if (headlessExplicit && !args.noExtension) {
|
|
473
|
+
return failure(
|
|
474
|
+
"Extension mode does not support headless launches. Use noExtension=true with headless=true for managed mode.",
|
|
475
|
+
"unsupported_mode"
|
|
476
|
+
);
|
|
477
|
+
}
|
|
336
478
|
if (args.waitForExtension && !managedExplicit) {
|
|
337
479
|
const observedPort2 = resolveObservedPort(relayStatus, config.relayPort);
|
|
338
480
|
const connected = await waitForExtensionHandshake(deps.relay, observedPort2, waitTimeoutMs);
|
|
@@ -1550,14 +1692,457 @@ function createNetworkPollTool(deps) {
|
|
|
1550
1692
|
});
|
|
1551
1693
|
}
|
|
1552
1694
|
|
|
1553
|
-
// src/tools/
|
|
1695
|
+
// src/tools/debug_trace_snapshot.ts
|
|
1554
1696
|
import { tool as tool35 } from "@opencode-ai/plugin";
|
|
1555
1697
|
var z35 = tool35.schema;
|
|
1556
|
-
function
|
|
1698
|
+
function createDebugTraceSnapshotTool(deps) {
|
|
1557
1699
|
return tool35({
|
|
1700
|
+
description: "Capture a combined debug trace snapshot (page + console + network + exceptions).",
|
|
1701
|
+
args: {
|
|
1702
|
+
sessionId: z35.string().describe("Session id"),
|
|
1703
|
+
sinceConsoleSeq: z35.number().int().optional().describe("Resume cursor for console events"),
|
|
1704
|
+
sinceNetworkSeq: z35.number().int().optional().describe("Resume cursor for network events"),
|
|
1705
|
+
sinceExceptionSeq: z35.number().int().optional().describe("Resume cursor for exception events"),
|
|
1706
|
+
max: z35.number().int().optional().describe("Max events per channel"),
|
|
1707
|
+
requestId: z35.string().optional().describe("Optional trace request id")
|
|
1708
|
+
},
|
|
1709
|
+
async execute(args) {
|
|
1710
|
+
try {
|
|
1711
|
+
const manager = deps.manager;
|
|
1712
|
+
const options = {
|
|
1713
|
+
sinceConsoleSeq: args.sinceConsoleSeq,
|
|
1714
|
+
sinceNetworkSeq: args.sinceNetworkSeq,
|
|
1715
|
+
sinceExceptionSeq: args.sinceExceptionSeq,
|
|
1716
|
+
max: args.max,
|
|
1717
|
+
requestId: args.requestId
|
|
1718
|
+
};
|
|
1719
|
+
if (typeof manager.debugTraceSnapshot === "function") {
|
|
1720
|
+
const result = await manager.debugTraceSnapshot(args.sessionId, options);
|
|
1721
|
+
return ok(result);
|
|
1722
|
+
}
|
|
1723
|
+
const max = args.max ?? 500;
|
|
1724
|
+
const requestId = args.requestId ?? createRequestId();
|
|
1725
|
+
const [page, consoleChannel, networkChannel] = await Promise.all([
|
|
1726
|
+
deps.manager.status(args.sessionId),
|
|
1727
|
+
deps.manager.consolePoll(args.sessionId, args.sinceConsoleSeq, max),
|
|
1728
|
+
deps.manager.networkPoll(args.sessionId, args.sinceNetworkSeq, max)
|
|
1729
|
+
]);
|
|
1730
|
+
const exceptionChannel = typeof manager.exceptionPoll === "function" ? await manager.exceptionPoll(args.sessionId, args.sinceExceptionSeq, max) : {
|
|
1731
|
+
events: [],
|
|
1732
|
+
nextSeq: args.sinceExceptionSeq ?? 0,
|
|
1733
|
+
truncated: false
|
|
1734
|
+
};
|
|
1735
|
+
const annotateTraceContext = (events) => events.map((event) => ({
|
|
1736
|
+
...event,
|
|
1737
|
+
requestId,
|
|
1738
|
+
sessionId: args.sessionId
|
|
1739
|
+
}));
|
|
1740
|
+
const blocker = classifyBlockerSignal({
|
|
1741
|
+
source: "network",
|
|
1742
|
+
url: typeof page.url === "string" ? page.url : void 0,
|
|
1743
|
+
finalUrl: typeof page.url === "string" ? page.url : void 0,
|
|
1744
|
+
title: typeof page.title === "string" ? page.title : void 0,
|
|
1745
|
+
status: findLatestStatus(networkChannel.events),
|
|
1746
|
+
traceRequestId: requestId,
|
|
1747
|
+
networkHosts: extractHosts(networkChannel.events),
|
|
1748
|
+
threshold: deps.config.get().blockerDetectionThreshold,
|
|
1749
|
+
promptGuardEnabled: deps.config.get().security.promptInjectionGuard?.enabled ?? true
|
|
1750
|
+
});
|
|
1751
|
+
const blockerArtifacts = blocker ? buildBlockerArtifacts({
|
|
1752
|
+
networkEvents: networkChannel.events,
|
|
1753
|
+
consoleEvents: consoleChannel.events,
|
|
1754
|
+
exceptionEvents: exceptionChannel.events,
|
|
1755
|
+
promptGuardEnabled: deps.config.get().security.promptInjectionGuard?.enabled ?? true,
|
|
1756
|
+
caps: deps.config.get().blockerArtifactCaps
|
|
1757
|
+
}) : void 0;
|
|
1758
|
+
return ok({
|
|
1759
|
+
requestId,
|
|
1760
|
+
generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1761
|
+
page,
|
|
1762
|
+
channels: {
|
|
1763
|
+
console: {
|
|
1764
|
+
nextSeq: consoleChannel.nextSeq,
|
|
1765
|
+
truncated: consoleChannel.truncated,
|
|
1766
|
+
events: annotateTraceContext(consoleChannel.events)
|
|
1767
|
+
},
|
|
1768
|
+
network: {
|
|
1769
|
+
nextSeq: networkChannel.nextSeq,
|
|
1770
|
+
truncated: networkChannel.truncated,
|
|
1771
|
+
events: annotateTraceContext(networkChannel.events)
|
|
1772
|
+
},
|
|
1773
|
+
exception: {
|
|
1774
|
+
nextSeq: exceptionChannel.nextSeq,
|
|
1775
|
+
truncated: exceptionChannel.truncated,
|
|
1776
|
+
events: annotateTraceContext(exceptionChannel.events)
|
|
1777
|
+
}
|
|
1778
|
+
},
|
|
1779
|
+
meta: {
|
|
1780
|
+
blockerState: blocker ? "active" : "clear",
|
|
1781
|
+
...blocker ? { blocker } : {},
|
|
1782
|
+
...blockerArtifacts ? { blockerArtifacts } : {}
|
|
1783
|
+
}
|
|
1784
|
+
});
|
|
1785
|
+
} catch (error) {
|
|
1786
|
+
return failure(serializeError(error).message, "debug_trace_snapshot_failed");
|
|
1787
|
+
}
|
|
1788
|
+
}
|
|
1789
|
+
});
|
|
1790
|
+
}
|
|
1791
|
+
function findLatestStatus(events) {
|
|
1792
|
+
for (let index = events.length - 1; index >= 0; index -= 1) {
|
|
1793
|
+
const status = events[index]?.status;
|
|
1794
|
+
if (typeof status === "number") {
|
|
1795
|
+
return status;
|
|
1796
|
+
}
|
|
1797
|
+
}
|
|
1798
|
+
return void 0;
|
|
1799
|
+
}
|
|
1800
|
+
function extractHosts(events) {
|
|
1801
|
+
const hosts = [];
|
|
1802
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1803
|
+
for (const event of events) {
|
|
1804
|
+
if (typeof event.url !== "string") continue;
|
|
1805
|
+
try {
|
|
1806
|
+
const host = new URL(event.url).hostname.toLowerCase();
|
|
1807
|
+
if (!host || seen.has(host)) continue;
|
|
1808
|
+
seen.add(host);
|
|
1809
|
+
hosts.push(host);
|
|
1810
|
+
} catch {
|
|
1811
|
+
}
|
|
1812
|
+
}
|
|
1813
|
+
return hosts;
|
|
1814
|
+
}
|
|
1815
|
+
|
|
1816
|
+
// src/tools/cookie_import.ts
|
|
1817
|
+
import { tool as tool36 } from "@opencode-ai/plugin";
|
|
1818
|
+
var z36 = tool36.schema;
|
|
1819
|
+
function validateCookieRecord(cookie) {
|
|
1820
|
+
const name = cookie.name?.trim();
|
|
1821
|
+
if (!name) {
|
|
1822
|
+
return { valid: false, reason: "Cookie name is required.", cookie };
|
|
1823
|
+
}
|
|
1824
|
+
if (!/^[^\s;=]+$/.test(name)) {
|
|
1825
|
+
return { valid: false, reason: `Invalid cookie name: ${cookie.name}.`, cookie };
|
|
1826
|
+
}
|
|
1827
|
+
if (typeof cookie.value !== "string") {
|
|
1828
|
+
return { valid: false, reason: `Invalid cookie value for ${name}.`, cookie };
|
|
1829
|
+
}
|
|
1830
|
+
const value = cookie.value;
|
|
1831
|
+
if (/\r|\n|;/.test(value)) {
|
|
1832
|
+
return { valid: false, reason: `Invalid cookie value for ${name}.`, cookie };
|
|
1833
|
+
}
|
|
1834
|
+
const hasUrl = typeof cookie.url === "string" && cookie.url.trim().length > 0;
|
|
1835
|
+
const hasDomain = typeof cookie.domain === "string" && cookie.domain.trim().length > 0;
|
|
1836
|
+
if (!hasUrl && !hasDomain) {
|
|
1837
|
+
return { valid: false, reason: `Cookie ${name} requires url or domain.`, cookie };
|
|
1838
|
+
}
|
|
1839
|
+
let normalizedUrl;
|
|
1840
|
+
if (hasUrl) {
|
|
1841
|
+
try {
|
|
1842
|
+
const parsedUrl = new URL(cookie.url);
|
|
1843
|
+
if (parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") {
|
|
1844
|
+
return { valid: false, reason: `Cookie ${name} url must be http(s).`, cookie };
|
|
1845
|
+
}
|
|
1846
|
+
normalizedUrl = parsedUrl.toString();
|
|
1847
|
+
} catch {
|
|
1848
|
+
return { valid: false, reason: `Cookie ${name} has invalid url.`, cookie };
|
|
1849
|
+
}
|
|
1850
|
+
}
|
|
1851
|
+
let normalizedDomain;
|
|
1852
|
+
if (hasDomain) {
|
|
1853
|
+
normalizedDomain = String(cookie.domain).trim().toLowerCase();
|
|
1854
|
+
if (!/^\.?[a-z0-9.-]+$/.test(normalizedDomain)) {
|
|
1855
|
+
return { valid: false, reason: `Cookie ${name} has invalid domain.`, cookie };
|
|
1856
|
+
}
|
|
1857
|
+
if (normalizedDomain.includes("..")) {
|
|
1858
|
+
return { valid: false, reason: `Cookie ${name} has invalid domain.`, cookie };
|
|
1859
|
+
}
|
|
1860
|
+
}
|
|
1861
|
+
const normalizedPath = typeof cookie.path === "string" ? cookie.path.trim() : void 0;
|
|
1862
|
+
if (typeof normalizedPath === "string" && !normalizedPath.startsWith("/")) {
|
|
1863
|
+
return { valid: false, reason: `Cookie ${name} path must start with '/'.`, cookie };
|
|
1864
|
+
}
|
|
1865
|
+
if (typeof cookie.expires !== "undefined") {
|
|
1866
|
+
if (!Number.isFinite(cookie.expires)) {
|
|
1867
|
+
return { valid: false, reason: `Cookie ${name} has invalid expires.`, cookie };
|
|
1868
|
+
}
|
|
1869
|
+
if (cookie.expires < -1) {
|
|
1870
|
+
return { valid: false, reason: `Cookie ${name} has invalid expires.`, cookie };
|
|
1871
|
+
}
|
|
1872
|
+
}
|
|
1873
|
+
if (cookie.sameSite === "None" && cookie.secure !== true) {
|
|
1874
|
+
return { valid: false, reason: `Cookie ${name} with SameSite=None must set secure=true.`, cookie };
|
|
1875
|
+
}
|
|
1876
|
+
const normalizedCookie = {
|
|
1877
|
+
name,
|
|
1878
|
+
value,
|
|
1879
|
+
...typeof cookie.expires === "number" ? { expires: cookie.expires } : {},
|
|
1880
|
+
...typeof cookie.httpOnly === "boolean" ? { httpOnly: cookie.httpOnly } : {},
|
|
1881
|
+
...typeof cookie.secure === "boolean" ? { secure: cookie.secure } : {},
|
|
1882
|
+
...cookie.sameSite ? { sameSite: cookie.sameSite } : {}
|
|
1883
|
+
};
|
|
1884
|
+
if (normalizedDomain) {
|
|
1885
|
+
normalizedCookie.domain = normalizedDomain;
|
|
1886
|
+
normalizedCookie.path = normalizedPath ?? "/";
|
|
1887
|
+
} else if (normalizedUrl) {
|
|
1888
|
+
normalizedCookie.url = normalizedUrl;
|
|
1889
|
+
}
|
|
1890
|
+
return {
|
|
1891
|
+
valid: true,
|
|
1892
|
+
reason: "",
|
|
1893
|
+
cookie: normalizedCookie
|
|
1894
|
+
};
|
|
1895
|
+
}
|
|
1896
|
+
function createCookieImportTool(deps) {
|
|
1897
|
+
return tool36({
|
|
1898
|
+
description: "Import validated cookies into the current session context.",
|
|
1899
|
+
args: {
|
|
1900
|
+
sessionId: z36.string().describe("Session id"),
|
|
1901
|
+
cookies: z36.array(z36.object({
|
|
1902
|
+
name: z36.string().min(1),
|
|
1903
|
+
value: z36.string(),
|
|
1904
|
+
url: z36.string().optional(),
|
|
1905
|
+
domain: z36.string().optional(),
|
|
1906
|
+
path: z36.string().optional(),
|
|
1907
|
+
expires: z36.number().optional(),
|
|
1908
|
+
httpOnly: z36.boolean().optional(),
|
|
1909
|
+
secure: z36.boolean().optional(),
|
|
1910
|
+
sameSite: z36.enum(["Strict", "Lax", "None"]).optional()
|
|
1911
|
+
})).min(1).describe("Cookies to import"),
|
|
1912
|
+
strict: z36.boolean().optional().describe("Reject on first invalid cookie (default true)"),
|
|
1913
|
+
requestId: z36.string().optional().describe("Optional trace request id")
|
|
1914
|
+
},
|
|
1915
|
+
async execute(args) {
|
|
1916
|
+
try {
|
|
1917
|
+
const strict = args.strict ?? true;
|
|
1918
|
+
const requestId = args.requestId ?? createRequestId();
|
|
1919
|
+
const manager = deps.manager;
|
|
1920
|
+
const normalized = [];
|
|
1921
|
+
const rejected = [];
|
|
1922
|
+
args.cookies.forEach((cookie, index) => {
|
|
1923
|
+
const validation = validateCookieRecord(cookie);
|
|
1924
|
+
if (!validation.valid) {
|
|
1925
|
+
rejected.push({ index, reason: validation.reason });
|
|
1926
|
+
return;
|
|
1927
|
+
}
|
|
1928
|
+
normalized.push(validation.cookie);
|
|
1929
|
+
});
|
|
1930
|
+
if (typeof manager.cookieImport === "function") {
|
|
1931
|
+
return ok(await manager.cookieImport(args.sessionId, normalized, strict, requestId));
|
|
1932
|
+
}
|
|
1933
|
+
if (strict && rejected.length > 0) {
|
|
1934
|
+
return failure(`Cookie import rejected ${rejected.length} entries.`, "cookie_import_failed");
|
|
1935
|
+
}
|
|
1936
|
+
if (normalized.length > 0) {
|
|
1937
|
+
await deps.manager.withPage(args.sessionId, null, async (page) => {
|
|
1938
|
+
await page.context().addCookies(normalized);
|
|
1939
|
+
return void 0;
|
|
1940
|
+
});
|
|
1941
|
+
}
|
|
1942
|
+
return ok({
|
|
1943
|
+
requestId,
|
|
1944
|
+
imported: normalized.length,
|
|
1945
|
+
rejected
|
|
1946
|
+
});
|
|
1947
|
+
} catch (error) {
|
|
1948
|
+
return failure(serializeError(error).message, "cookie_import_failed");
|
|
1949
|
+
}
|
|
1950
|
+
}
|
|
1951
|
+
});
|
|
1952
|
+
}
|
|
1953
|
+
|
|
1954
|
+
// src/tools/cookie_list.ts
|
|
1955
|
+
import { tool as tool37 } from "@opencode-ai/plugin";
|
|
1956
|
+
var z37 = tool37.schema;
|
|
1957
|
+
function normalizeCookieUrls(urls) {
|
|
1958
|
+
if (!urls || urls.length === 0) {
|
|
1959
|
+
return void 0;
|
|
1960
|
+
}
|
|
1961
|
+
const normalized = [];
|
|
1962
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1963
|
+
for (const value of urls) {
|
|
1964
|
+
const trimmed = value.trim();
|
|
1965
|
+
if (!trimmed) {
|
|
1966
|
+
throw new Error("Cookie list urls must be non-empty strings.");
|
|
1967
|
+
}
|
|
1968
|
+
let parsedUrl;
|
|
1969
|
+
try {
|
|
1970
|
+
parsedUrl = new URL(trimmed);
|
|
1971
|
+
} catch {
|
|
1972
|
+
throw new Error(`Cookie list url is invalid: ${trimmed}`);
|
|
1973
|
+
}
|
|
1974
|
+
if (parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") {
|
|
1975
|
+
throw new Error(`Cookie list url must be http(s): ${trimmed}`);
|
|
1976
|
+
}
|
|
1977
|
+
const normalizedUrl = parsedUrl.toString();
|
|
1978
|
+
if (seen.has(normalizedUrl)) {
|
|
1979
|
+
continue;
|
|
1980
|
+
}
|
|
1981
|
+
seen.add(normalizedUrl);
|
|
1982
|
+
normalized.push(normalizedUrl);
|
|
1983
|
+
}
|
|
1984
|
+
return normalized;
|
|
1985
|
+
}
|
|
1986
|
+
function createCookieListTool(deps) {
|
|
1987
|
+
return tool37({
|
|
1988
|
+
description: "List cookies in the current session context with optional URL filtering.",
|
|
1989
|
+
args: {
|
|
1990
|
+
sessionId: z37.string().describe("Session id"),
|
|
1991
|
+
urls: z37.array(z37.string().min(1)).optional().describe("Optional URL filters for cookie scoping"),
|
|
1992
|
+
requestId: z37.string().optional().describe("Optional trace request id")
|
|
1993
|
+
},
|
|
1994
|
+
async execute(args) {
|
|
1995
|
+
try {
|
|
1996
|
+
const manager = deps.manager;
|
|
1997
|
+
const normalizedUrls = normalizeCookieUrls(args.urls);
|
|
1998
|
+
const requestId = args.requestId ?? createRequestId();
|
|
1999
|
+
if (typeof manager.cookieList === "function") {
|
|
2000
|
+
return ok(await manager.cookieList(args.sessionId, normalizedUrls, requestId));
|
|
2001
|
+
}
|
|
2002
|
+
const cookies = await deps.manager.withPage(
|
|
2003
|
+
args.sessionId,
|
|
2004
|
+
null,
|
|
2005
|
+
async (page) => {
|
|
2006
|
+
const listed = normalizedUrls ? await page.context().cookies(normalizedUrls) : await page.context().cookies();
|
|
2007
|
+
return listed.map((cookie) => ({
|
|
2008
|
+
name: cookie.name,
|
|
2009
|
+
value: cookie.value,
|
|
2010
|
+
domain: cookie.domain,
|
|
2011
|
+
path: cookie.path,
|
|
2012
|
+
expires: cookie.expires,
|
|
2013
|
+
httpOnly: cookie.httpOnly,
|
|
2014
|
+
secure: cookie.secure,
|
|
2015
|
+
...cookie.sameSite ? { sameSite: cookie.sameSite } : {}
|
|
2016
|
+
}));
|
|
2017
|
+
}
|
|
2018
|
+
);
|
|
2019
|
+
return ok({
|
|
2020
|
+
requestId,
|
|
2021
|
+
cookies,
|
|
2022
|
+
count: cookies.length
|
|
2023
|
+
});
|
|
2024
|
+
} catch (error) {
|
|
2025
|
+
return failure(serializeError(error).message, "cookie_list_failed");
|
|
2026
|
+
}
|
|
2027
|
+
}
|
|
2028
|
+
});
|
|
2029
|
+
}
|
|
2030
|
+
|
|
2031
|
+
// src/tools/macro_resolve.ts
|
|
2032
|
+
import { tool as tool38 } from "@opencode-ai/plugin";
|
|
2033
|
+
var z38 = tool38.schema;
|
|
2034
|
+
async function loadMacroRuntime() {
|
|
2035
|
+
try {
|
|
2036
|
+
const module = await import("./macros-NUBRM44Y.js");
|
|
2037
|
+
return module;
|
|
2038
|
+
} catch {
|
|
2039
|
+
return null;
|
|
2040
|
+
}
|
|
2041
|
+
}
|
|
2042
|
+
function parseFallbackMacro(expression, defaultProvider) {
|
|
2043
|
+
const raw = expression.trim();
|
|
2044
|
+
if (!raw.startsWith("@")) {
|
|
2045
|
+
throw new Error("Macro expressions must start with '@'");
|
|
2046
|
+
}
|
|
2047
|
+
const body = raw.slice(1).trim();
|
|
2048
|
+
if (!body) {
|
|
2049
|
+
throw new Error("Macro name is required");
|
|
2050
|
+
}
|
|
2051
|
+
const openParen = body.indexOf("(");
|
|
2052
|
+
const closeParen = body.endsWith(")") ? body.length - 1 : -1;
|
|
2053
|
+
const macroName = openParen >= 0 ? body.slice(0, openParen).trim() : body;
|
|
2054
|
+
const argsBody = openParen >= 0 && closeParen > openParen ? body.slice(openParen + 1, closeParen).trim() : "";
|
|
2055
|
+
const positional = argsBody ? argsBody.split(",").map((part) => part.trim().replace(/^['\"]|['\"]$/g, "")).filter(Boolean) : [];
|
|
2056
|
+
const query = positional[0] ?? macroName;
|
|
2057
|
+
const provider = defaultProvider ?? "web/default";
|
|
2058
|
+
return {
|
|
2059
|
+
action: {
|
|
2060
|
+
source: "web",
|
|
2061
|
+
operation: "search",
|
|
2062
|
+
input: {
|
|
2063
|
+
query,
|
|
2064
|
+
limit: 10,
|
|
2065
|
+
providerId: provider
|
|
2066
|
+
}
|
|
2067
|
+
},
|
|
2068
|
+
provenance: {
|
|
2069
|
+
macro: macroName,
|
|
2070
|
+
provider,
|
|
2071
|
+
resolvedQuery: query,
|
|
2072
|
+
pack: "fallback",
|
|
2073
|
+
args: {
|
|
2074
|
+
positional,
|
|
2075
|
+
named: {}
|
|
2076
|
+
}
|
|
2077
|
+
}
|
|
2078
|
+
};
|
|
2079
|
+
}
|
|
2080
|
+
function createMacroResolveTool(deps) {
|
|
2081
|
+
return tool38({
|
|
2082
|
+
description: "Resolve a macro expression to a provider action with provenance metadata.",
|
|
2083
|
+
args: {
|
|
2084
|
+
expression: z38.string().min(2).describe('Macro expression, e.g. @web.search("query")'),
|
|
2085
|
+
defaultProvider: z38.string().optional().describe("Default provider fallback"),
|
|
2086
|
+
includeCatalog: z38.boolean().optional().describe("Include available runtime macro names"),
|
|
2087
|
+
execute: z38.boolean().optional().describe("Execute the resolved provider action and include execution payload")
|
|
2088
|
+
},
|
|
2089
|
+
async execute(args) {
|
|
2090
|
+
try {
|
|
2091
|
+
const runtime = await loadMacroRuntime();
|
|
2092
|
+
const registry = runtime?.createDefaultMacroRegistry?.();
|
|
2093
|
+
let resolvedRuntime = "fallback";
|
|
2094
|
+
let resolution;
|
|
2095
|
+
let catalog;
|
|
2096
|
+
if (registry) {
|
|
2097
|
+
resolvedRuntime = "macros";
|
|
2098
|
+
resolution = await registry.resolve(args.expression, {
|
|
2099
|
+
defaultProvider: args.defaultProvider
|
|
2100
|
+
});
|
|
2101
|
+
catalog = args.includeCatalog ? registry.list().map((entry) => ({
|
|
2102
|
+
name: entry.name,
|
|
2103
|
+
pack: entry.pack,
|
|
2104
|
+
description: entry.description
|
|
2105
|
+
})) : void 0;
|
|
2106
|
+
} else {
|
|
2107
|
+
resolution = parseFallbackMacro(args.expression, args.defaultProvider);
|
|
2108
|
+
}
|
|
2109
|
+
if (!args.execute) {
|
|
2110
|
+
return ok({
|
|
2111
|
+
runtime: resolvedRuntime,
|
|
2112
|
+
resolution,
|
|
2113
|
+
...catalog ? { catalog } : {}
|
|
2114
|
+
});
|
|
2115
|
+
}
|
|
2116
|
+
const runtimeConfig = deps.config?.get?.();
|
|
2117
|
+
const providerRuntime = deps.providerRuntime ?? createConfiguredProviderRuntime({
|
|
2118
|
+
config: runtimeConfig,
|
|
2119
|
+
manager: deps.manager,
|
|
2120
|
+
browserFallbackPort: deps.browserFallbackPort
|
|
2121
|
+
});
|
|
2122
|
+
const execution = shapeExecutionPayload(
|
|
2123
|
+
await executeMacroResolution(resolution, providerRuntime)
|
|
2124
|
+
);
|
|
2125
|
+
return ok({
|
|
2126
|
+
runtime: resolvedRuntime,
|
|
2127
|
+
resolution,
|
|
2128
|
+
...catalog ? { catalog } : {},
|
|
2129
|
+
execution
|
|
2130
|
+
});
|
|
2131
|
+
} catch (error) {
|
|
2132
|
+
return failure(serializeError(error).message, "macro_resolve_failed");
|
|
2133
|
+
}
|
|
2134
|
+
}
|
|
2135
|
+
});
|
|
2136
|
+
}
|
|
2137
|
+
|
|
2138
|
+
// src/tools/clone_page.ts
|
|
2139
|
+
import { tool as tool39 } from "@opencode-ai/plugin";
|
|
2140
|
+
var z39 = tool39.schema;
|
|
2141
|
+
function createClonePageTool(deps) {
|
|
2142
|
+
return tool39({
|
|
1558
2143
|
description: "Export the active page as a React component and CSS bundle.",
|
|
1559
2144
|
args: {
|
|
1560
|
-
sessionId:
|
|
2145
|
+
sessionId: z39.string().describe("Active browser session id")
|
|
1561
2146
|
},
|
|
1562
2147
|
async execute(args) {
|
|
1563
2148
|
try {
|
|
@@ -1571,14 +2156,14 @@ function createClonePageTool(deps) {
|
|
|
1571
2156
|
}
|
|
1572
2157
|
|
|
1573
2158
|
// src/tools/clone_component.ts
|
|
1574
|
-
import { tool as
|
|
1575
|
-
var
|
|
2159
|
+
import { tool as tool40 } from "@opencode-ai/plugin";
|
|
2160
|
+
var z40 = tool40.schema;
|
|
1576
2161
|
function createCloneComponentTool(deps) {
|
|
1577
|
-
return
|
|
2162
|
+
return tool40({
|
|
1578
2163
|
description: "Export a selected element subtree as a React component and CSS bundle.",
|
|
1579
2164
|
args: {
|
|
1580
|
-
sessionId:
|
|
1581
|
-
ref:
|
|
2165
|
+
sessionId: z40.string().describe("Active browser session id"),
|
|
2166
|
+
ref: z40.string().describe("Element ref from snapshot")
|
|
1582
2167
|
},
|
|
1583
2168
|
async execute(args) {
|
|
1584
2169
|
try {
|
|
@@ -1592,13 +2177,13 @@ function createCloneComponentTool(deps) {
|
|
|
1592
2177
|
}
|
|
1593
2178
|
|
|
1594
2179
|
// src/tools/perf.ts
|
|
1595
|
-
import { tool as
|
|
1596
|
-
var
|
|
2180
|
+
import { tool as tool41 } from "@opencode-ai/plugin";
|
|
2181
|
+
var z41 = tool41.schema;
|
|
1597
2182
|
function createPerfTool(deps) {
|
|
1598
|
-
return
|
|
2183
|
+
return tool41({
|
|
1599
2184
|
description: "Fetch lightweight performance metrics from the active page.",
|
|
1600
2185
|
args: {
|
|
1601
|
-
sessionId:
|
|
2186
|
+
sessionId: z41.string().describe("Active browser session id")
|
|
1602
2187
|
},
|
|
1603
2188
|
async execute(args) {
|
|
1604
2189
|
try {
|
|
@@ -1612,14 +2197,14 @@ function createPerfTool(deps) {
|
|
|
1612
2197
|
}
|
|
1613
2198
|
|
|
1614
2199
|
// src/tools/screenshot.ts
|
|
1615
|
-
import { tool as
|
|
1616
|
-
var
|
|
2200
|
+
import { tool as tool42 } from "@opencode-ai/plugin";
|
|
2201
|
+
var z42 = tool42.schema;
|
|
1617
2202
|
function createScreenshotTool(deps) {
|
|
1618
|
-
return
|
|
2203
|
+
return tool42({
|
|
1619
2204
|
description: "Capture a screenshot of the active page.",
|
|
1620
2205
|
args: {
|
|
1621
|
-
sessionId:
|
|
1622
|
-
path:
|
|
2206
|
+
sessionId: z42.string().describe("Active browser session id"),
|
|
2207
|
+
path: z42.string().optional().describe("Optional output file path")
|
|
1623
2208
|
},
|
|
1624
2209
|
async execute(args) {
|
|
1625
2210
|
try {
|
|
@@ -1633,23 +2218,23 @@ function createScreenshotTool(deps) {
|
|
|
1633
2218
|
}
|
|
1634
2219
|
|
|
1635
2220
|
// src/tools/annotate.ts
|
|
1636
|
-
import { tool as
|
|
1637
|
-
var
|
|
1638
|
-
var screenshotModeSchema =
|
|
1639
|
-
var transportSchema =
|
|
2221
|
+
import { tool as tool43 } from "@opencode-ai/plugin";
|
|
2222
|
+
var z43 = tool43.schema;
|
|
2223
|
+
var screenshotModeSchema = z43.enum(["visible", "full", "none"]);
|
|
2224
|
+
var transportSchema = z43.enum(["auto", "direct", "relay"]);
|
|
1640
2225
|
function createAnnotateTool(deps) {
|
|
1641
|
-
return
|
|
2226
|
+
return tool43({
|
|
1642
2227
|
description: "Request interactive annotations via direct (CDP) or relay transport.",
|
|
1643
2228
|
args: {
|
|
1644
|
-
sessionId:
|
|
2229
|
+
sessionId: z43.string().describe("Session id"),
|
|
1645
2230
|
transport: transportSchema.optional().describe("auto | direct | relay (default: auto)"),
|
|
1646
|
-
targetId:
|
|
1647
|
-
tabId:
|
|
1648
|
-
url:
|
|
2231
|
+
targetId: z43.string().optional().describe("Optional target id for direct mode"),
|
|
2232
|
+
tabId: z43.number().int().optional().describe("Optional Chrome tab id for relay mode"),
|
|
2233
|
+
url: z43.string().optional().describe("Optional URL to open before annotating"),
|
|
1649
2234
|
screenshotMode: screenshotModeSchema.optional().describe("visible | full | none (default: visible)"),
|
|
1650
|
-
debug:
|
|
1651
|
-
context:
|
|
1652
|
-
timeoutMs:
|
|
2235
|
+
debug: z43.boolean().optional().describe("Include debug metadata"),
|
|
2236
|
+
context: z43.string().optional().describe("Optional context for the annotator"),
|
|
2237
|
+
timeoutMs: z43.number().int().optional().describe("Timeout in milliseconds")
|
|
1653
2238
|
},
|
|
1654
2239
|
async execute(args) {
|
|
1655
2240
|
try {
|
|
@@ -1689,10 +2274,186 @@ function createAnnotateTool(deps) {
|
|
|
1689
2274
|
});
|
|
1690
2275
|
}
|
|
1691
2276
|
|
|
2277
|
+
// src/tools/research_run.ts
|
|
2278
|
+
import { tool as tool44 } from "@opencode-ai/plugin";
|
|
2279
|
+
|
|
2280
|
+
// src/tools/workflow-runtime.ts
|
|
2281
|
+
var resolveProviderRuntime = (deps) => {
|
|
2282
|
+
if (deps.providerRuntime) {
|
|
2283
|
+
return deps.providerRuntime;
|
|
2284
|
+
}
|
|
2285
|
+
return createConfiguredProviderRuntime({
|
|
2286
|
+
config: deps.config?.get?.(),
|
|
2287
|
+
manager: deps.manager,
|
|
2288
|
+
browserFallbackPort: deps.browserFallbackPort
|
|
2289
|
+
});
|
|
2290
|
+
};
|
|
2291
|
+
|
|
2292
|
+
// src/tools/research_run.ts
|
|
2293
|
+
var z44 = tool44.schema;
|
|
2294
|
+
var sourceSelectionSchema = z44.enum(["auto", "web", "community", "social", "shopping", "all"]);
|
|
2295
|
+
var sourceSchema = z44.enum(["web", "community", "social", "shopping"]);
|
|
2296
|
+
var modeSchema = z44.enum(["compact", "json", "md", "context", "path"]);
|
|
2297
|
+
var cookiePolicySchema = z44.enum(["off", "auto", "required"]);
|
|
2298
|
+
function createResearchRunTool(deps) {
|
|
2299
|
+
return tool44({
|
|
2300
|
+
description: "Run cross-source research with strict timebox and artifact outputs.",
|
|
2301
|
+
args: {
|
|
2302
|
+
topic: z44.string().min(1).describe("Research topic"),
|
|
2303
|
+
days: z44.number().int().positive().optional().describe("Timebox in days"),
|
|
2304
|
+
from: z44.string().optional().describe("ISO start date"),
|
|
2305
|
+
to: z44.string().optional().describe("ISO end date"),
|
|
2306
|
+
sourceSelection: sourceSelectionSchema.optional().describe("auto|web|community|social|shopping|all"),
|
|
2307
|
+
sources: z44.array(sourceSchema).optional().describe("Explicit source list"),
|
|
2308
|
+
mode: modeSchema.optional().describe("compact|json|md|context|path"),
|
|
2309
|
+
includeEngagement: z44.boolean().optional().describe("Include engagement enrichment"),
|
|
2310
|
+
limitPerSource: z44.number().int().positive().optional().describe("Result limit per source"),
|
|
2311
|
+
outputDir: z44.string().optional().describe("Optional artifact output directory"),
|
|
2312
|
+
ttlHours: z44.number().int().positive().optional().describe("Artifact retention TTL in hours"),
|
|
2313
|
+
useCookies: z44.boolean().optional().describe("Enable/disable provider cookie injection for this run"),
|
|
2314
|
+
cookiePolicyOverride: cookiePolicySchema.optional().describe("Override cookie policy: off|auto|required")
|
|
2315
|
+
},
|
|
2316
|
+
async execute(args) {
|
|
2317
|
+
try {
|
|
2318
|
+
const runtime = resolveProviderRuntime(deps);
|
|
2319
|
+
const result = await runResearchWorkflow(runtime, {
|
|
2320
|
+
topic: args.topic,
|
|
2321
|
+
days: args.days,
|
|
2322
|
+
from: args.from,
|
|
2323
|
+
to: args.to,
|
|
2324
|
+
sourceSelection: args.sourceSelection,
|
|
2325
|
+
sources: args.sources,
|
|
2326
|
+
mode: args.mode ?? "compact",
|
|
2327
|
+
includeEngagement: args.includeEngagement,
|
|
2328
|
+
limitPerSource: args.limitPerSource,
|
|
2329
|
+
outputDir: args.outputDir,
|
|
2330
|
+
ttlHours: args.ttlHours,
|
|
2331
|
+
useCookies: args.useCookies,
|
|
2332
|
+
cookiePolicyOverride: args.cookiePolicyOverride
|
|
2333
|
+
});
|
|
2334
|
+
return ok(result);
|
|
2335
|
+
} catch (error) {
|
|
2336
|
+
return failure(serializeError(error).message, "research_run_failed");
|
|
2337
|
+
}
|
|
2338
|
+
}
|
|
2339
|
+
});
|
|
2340
|
+
}
|
|
2341
|
+
|
|
2342
|
+
// src/tools/shopping_run.ts
|
|
2343
|
+
import { tool as tool45 } from "@opencode-ai/plugin";
|
|
2344
|
+
var z45 = tool45.schema;
|
|
2345
|
+
var sortSchema = z45.enum(["best_deal", "lowest_price", "highest_rating", "fastest_shipping"]);
|
|
2346
|
+
var modeSchema2 = z45.enum(["compact", "json", "md", "context", "path"]);
|
|
2347
|
+
var cookiePolicySchema2 = z45.enum(["off", "auto", "required"]);
|
|
2348
|
+
function createShoppingRunTool(deps) {
|
|
2349
|
+
return tool45({
|
|
2350
|
+
description: "Run shopping/deal intelligence across shopping providers.",
|
|
2351
|
+
args: {
|
|
2352
|
+
query: z45.string().min(1).describe("Shopping query"),
|
|
2353
|
+
providers: z45.array(z45.string()).optional().describe("Optional provider allow-list"),
|
|
2354
|
+
budget: z45.number().positive().optional().describe("Optional budget amount"),
|
|
2355
|
+
region: z45.string().optional().describe("Region hint"),
|
|
2356
|
+
sort: sortSchema.optional().describe("best_deal|lowest_price|highest_rating|fastest_shipping"),
|
|
2357
|
+
mode: modeSchema2.optional().describe("compact|json|md|context|path"),
|
|
2358
|
+
outputDir: z45.string().optional().describe("Optional artifact output directory"),
|
|
2359
|
+
ttlHours: z45.number().int().positive().optional().describe("Artifact retention TTL in hours"),
|
|
2360
|
+
useCookies: z45.boolean().optional().describe("Enable/disable provider cookie injection for this run"),
|
|
2361
|
+
cookiePolicyOverride: cookiePolicySchema2.optional().describe("Override cookie policy: off|auto|required")
|
|
2362
|
+
},
|
|
2363
|
+
async execute(args) {
|
|
2364
|
+
try {
|
|
2365
|
+
const runtime = resolveProviderRuntime(deps);
|
|
2366
|
+
const result = await runShoppingWorkflow(runtime, {
|
|
2367
|
+
query: args.query,
|
|
2368
|
+
providers: args.providers,
|
|
2369
|
+
budget: args.budget,
|
|
2370
|
+
region: args.region,
|
|
2371
|
+
sort: args.sort,
|
|
2372
|
+
mode: args.mode ?? "compact",
|
|
2373
|
+
outputDir: args.outputDir,
|
|
2374
|
+
ttlHours: args.ttlHours,
|
|
2375
|
+
useCookies: args.useCookies,
|
|
2376
|
+
cookiePolicyOverride: args.cookiePolicyOverride
|
|
2377
|
+
});
|
|
2378
|
+
return ok(result);
|
|
2379
|
+
} catch (error) {
|
|
2380
|
+
return failure(serializeError(error).message, "shopping_run_failed");
|
|
2381
|
+
}
|
|
2382
|
+
}
|
|
2383
|
+
});
|
|
2384
|
+
}
|
|
2385
|
+
|
|
2386
|
+
// src/tools/product_video_run.ts
|
|
2387
|
+
import { tool as tool46 } from "@opencode-ai/plugin";
|
|
2388
|
+
var z46 = tool46.schema;
|
|
2389
|
+
var cookiePolicySchema3 = z46.enum(["off", "auto", "required"]);
|
|
2390
|
+
async function captureScreenshotBuffer(deps, url) {
|
|
2391
|
+
let sessionId = null;
|
|
2392
|
+
try {
|
|
2393
|
+
const launched = await deps.manager.launch({
|
|
2394
|
+
headless: true,
|
|
2395
|
+
startUrl: url
|
|
2396
|
+
});
|
|
2397
|
+
sessionId = launched.sessionId;
|
|
2398
|
+
const screenshot = await deps.manager.screenshot(sessionId);
|
|
2399
|
+
if (typeof screenshot.base64 === "string" && screenshot.base64.length > 0) {
|
|
2400
|
+
return Buffer.from(screenshot.base64, "base64");
|
|
2401
|
+
}
|
|
2402
|
+
return null;
|
|
2403
|
+
} catch {
|
|
2404
|
+
return null;
|
|
2405
|
+
} finally {
|
|
2406
|
+
if (sessionId) {
|
|
2407
|
+
await deps.manager.disconnect(sessionId, true).catch(() => {
|
|
2408
|
+
});
|
|
2409
|
+
}
|
|
2410
|
+
}
|
|
2411
|
+
}
|
|
2412
|
+
function createProductVideoRunTool(deps) {
|
|
2413
|
+
return tool46({
|
|
2414
|
+
description: "Collect a product presentation asset pack for video/UGC workflows.",
|
|
2415
|
+
args: {
|
|
2416
|
+
product_url: z46.string().optional().describe("Product URL"),
|
|
2417
|
+
product_name: z46.string().optional().describe("Product name"),
|
|
2418
|
+
provider_hint: z46.string().optional().describe("Optional provider hint"),
|
|
2419
|
+
include_screenshots: z46.boolean().optional().describe("Include screenshots (default true)"),
|
|
2420
|
+
include_all_images: z46.boolean().optional().describe("Include all discovered images (default true)"),
|
|
2421
|
+
include_copy: z46.boolean().optional().describe("Include product copy extraction (default true)"),
|
|
2422
|
+
output_dir: z46.string().optional().describe("Optional output directory"),
|
|
2423
|
+
ttl_hours: z46.number().int().positive().optional().describe("Artifact retention TTL in hours"),
|
|
2424
|
+
useCookies: z46.boolean().optional().describe("Enable/disable provider cookie injection for this run"),
|
|
2425
|
+
cookiePolicyOverride: cookiePolicySchema3.optional().describe("Override cookie policy: off|auto|required")
|
|
2426
|
+
},
|
|
2427
|
+
async execute(args) {
|
|
2428
|
+
try {
|
|
2429
|
+
const runtime = resolveProviderRuntime(deps);
|
|
2430
|
+
const includeScreenshots = args.include_screenshots ?? true;
|
|
2431
|
+
const result = await runProductVideoWorkflow(runtime, {
|
|
2432
|
+
product_url: args.product_url,
|
|
2433
|
+
product_name: args.product_name,
|
|
2434
|
+
provider_hint: args.provider_hint,
|
|
2435
|
+
include_screenshots: includeScreenshots,
|
|
2436
|
+
include_all_images: args.include_all_images,
|
|
2437
|
+
include_copy: args.include_copy,
|
|
2438
|
+
output_dir: args.output_dir,
|
|
2439
|
+
ttl_hours: args.ttl_hours,
|
|
2440
|
+
useCookies: args.useCookies,
|
|
2441
|
+
cookiePolicyOverride: args.cookiePolicyOverride
|
|
2442
|
+
}, {
|
|
2443
|
+
captureScreenshot: includeScreenshots ? async (url) => captureScreenshotBuffer(deps, url) : void 0
|
|
2444
|
+
});
|
|
2445
|
+
return ok(result);
|
|
2446
|
+
} catch (error) {
|
|
2447
|
+
return failure(serializeError(error).message, "product_video_run_failed");
|
|
2448
|
+
}
|
|
2449
|
+
}
|
|
2450
|
+
});
|
|
2451
|
+
}
|
|
2452
|
+
|
|
1692
2453
|
// src/tools/skill_list.ts
|
|
1693
|
-
import { tool as
|
|
2454
|
+
import { tool as tool47 } from "@opencode-ai/plugin";
|
|
1694
2455
|
function createSkillListTool(deps) {
|
|
1695
|
-
return
|
|
2456
|
+
return tool47({
|
|
1696
2457
|
description: "List available skills from OpenCode skill directories (compatibility wrapper)",
|
|
1697
2458
|
args: {},
|
|
1698
2459
|
async execute() {
|
|
@@ -1708,14 +2469,14 @@ function createSkillListTool(deps) {
|
|
|
1708
2469
|
}
|
|
1709
2470
|
|
|
1710
2471
|
// src/tools/skill_load.ts
|
|
1711
|
-
import { tool as
|
|
1712
|
-
var
|
|
2472
|
+
import { tool as tool48 } from "@opencode-ai/plugin";
|
|
2473
|
+
var z47 = tool48.schema;
|
|
1713
2474
|
function createSkillLoadTool(deps) {
|
|
1714
|
-
return
|
|
2475
|
+
return tool48({
|
|
1715
2476
|
description: "Load a specific skill by name from OpenCode skill directories (compatibility wrapper)",
|
|
1716
2477
|
args: {
|
|
1717
|
-
name:
|
|
1718
|
-
topic:
|
|
2478
|
+
name: z47.string().describe("Name of the skill to load (e.g., 'opendevbrowser-login-automation', 'opendevbrowser-form-testing')"),
|
|
2479
|
+
topic: z47.string().optional().describe("Optional topic to filter the skill content")
|
|
1719
2480
|
},
|
|
1720
2481
|
async execute(args) {
|
|
1721
2482
|
try {
|
|
@@ -1779,6 +2540,13 @@ function createTools(deps) {
|
|
|
1779
2540
|
opendevbrowser_prompting_guide: wrap(createPromptingGuideTool(deps)),
|
|
1780
2541
|
opendevbrowser_console_poll: wrap(createConsolePollTool(deps)),
|
|
1781
2542
|
opendevbrowser_network_poll: wrap(createNetworkPollTool(deps)),
|
|
2543
|
+
opendevbrowser_debug_trace_snapshot: wrap(createDebugTraceSnapshotTool(deps)),
|
|
2544
|
+
opendevbrowser_cookie_import: wrap(createCookieImportTool(deps)),
|
|
2545
|
+
opendevbrowser_cookie_list: wrap(createCookieListTool(deps)),
|
|
2546
|
+
opendevbrowser_macro_resolve: wrap(createMacroResolveTool(deps)),
|
|
2547
|
+
opendevbrowser_research_run: wrap(createResearchRunTool(deps)),
|
|
2548
|
+
opendevbrowser_shopping_run: wrap(createShoppingRunTool(deps)),
|
|
2549
|
+
opendevbrowser_product_video_run: wrap(createProductVideoRunTool(deps)),
|
|
1782
2550
|
opendevbrowser_clone_page: wrap(createClonePageTool(deps)),
|
|
1783
2551
|
opendevbrowser_clone_component: wrap(createCloneComponentTool(deps)),
|
|
1784
2552
|
opendevbrowser_perf: wrap(createPerfTool(deps)),
|
|
@@ -1797,6 +2565,8 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
|
|
|
1797
2565
|
let manager = core.manager;
|
|
1798
2566
|
let runner = core.runner;
|
|
1799
2567
|
let annotationManager = core.annotationManager;
|
|
2568
|
+
let providerRuntime = core.providerRuntime;
|
|
2569
|
+
let browserFallbackPort = core.browserFallbackPort;
|
|
1800
2570
|
let hubStop = null;
|
|
1801
2571
|
let daemonClient = null;
|
|
1802
2572
|
const skillNudgeState = createSkillNudgeState();
|
|
@@ -1815,6 +2585,8 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
|
|
|
1815
2585
|
runner,
|
|
1816
2586
|
config: configStore,
|
|
1817
2587
|
skills,
|
|
2588
|
+
providerRuntime,
|
|
2589
|
+
browserFallbackPort,
|
|
1818
2590
|
relay,
|
|
1819
2591
|
getExtensionPath
|
|
1820
2592
|
};
|
|
@@ -1827,9 +2599,17 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
|
|
|
1827
2599
|
annotationManager.setRelay(relay);
|
|
1828
2600
|
annotationManager.setBrowserManager(manager);
|
|
1829
2601
|
runner = new ScriptRunner(manager);
|
|
2602
|
+
browserFallbackPort = createBrowserFallbackPort(manager);
|
|
2603
|
+
providerRuntime = createConfiguredProviderRuntime({
|
|
2604
|
+
config: configStore.get(),
|
|
2605
|
+
manager,
|
|
2606
|
+
browserFallbackPort
|
|
2607
|
+
});
|
|
1830
2608
|
toolDeps.manager = manager;
|
|
1831
2609
|
toolDeps.relay = relay;
|
|
1832
2610
|
toolDeps.runner = runner;
|
|
2611
|
+
toolDeps.providerRuntime = providerRuntime;
|
|
2612
|
+
toolDeps.browserFallbackPort = browserFallbackPort;
|
|
1833
2613
|
};
|
|
1834
2614
|
const ensureHub = async () => {
|
|
1835
2615
|
const currentConfig = configStore.get();
|