opendevbrowser 0.0.16 → 0.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +201 -79
- package/dist/annotate/agent-inbox-store.d.ts +58 -0
- package/dist/annotate/agent-inbox-store.d.ts.map +1 -0
- package/dist/annotate/agent-inbox.d.ts +25 -0
- package/dist/annotate/agent-inbox.d.ts.map +1 -0
- package/dist/annotate/direct-annotator.d.ts.map +1 -1
- package/dist/annotate/timeout-messages.d.ts +4 -0
- package/dist/annotate/timeout-messages.d.ts.map +1 -0
- package/dist/automation/coordinator.d.ts +55 -0
- package/dist/automation/coordinator.d.ts.map +1 -0
- package/dist/browser/annotation-manager.d.ts +7 -1
- package/dist/browser/annotation-manager.d.ts.map +1 -1
- package/dist/browser/browser-manager.d.ts +153 -48
- package/dist/browser/browser-manager.d.ts.map +1 -1
- package/dist/browser/canvas-client.d.ts +54 -0
- package/dist/browser/canvas-client.d.ts.map +1 -0
- package/dist/browser/canvas-code-sync-manager.d.ts +87 -0
- package/dist/browser/canvas-code-sync-manager.d.ts.map +1 -0
- package/dist/browser/canvas-manager.d.ts +122 -0
- package/dist/browser/canvas-manager.d.ts.map +1 -0
- package/dist/browser/canvas-runtime-preview-bridge.d.ts +20 -0
- package/dist/browser/canvas-runtime-preview-bridge.d.ts.map +1 -0
- package/dist/browser/canvas-session-sync-manager.d.ts +21 -0
- package/dist/browser/canvas-session-sync-manager.d.ts.map +1 -0
- package/dist/browser/global-challenge-coordinator.d.ts +27 -0
- package/dist/browser/global-challenge-coordinator.d.ts.map +1 -0
- package/dist/browser/manager-types.d.ts +179 -1
- package/dist/browser/manager-types.d.ts.map +1 -1
- package/dist/browser/ops-browser-manager.d.ts +114 -4
- package/dist/browser/ops-browser-manager.d.ts.map +1 -1
- package/dist/browser/ops-client.d.ts +17 -1
- package/dist/browser/ops-client.d.ts.map +1 -1
- package/dist/browser/playwright-runtime.d.ts +4 -0
- package/dist/browser/playwright-runtime.d.ts.map +1 -0
- package/dist/browser/review-surface.d.ts +9 -0
- package/dist/browser/review-surface.d.ts.map +1 -0
- package/dist/browser/screencast-recorder.d.ts +57 -0
- package/dist/browser/screencast-recorder.d.ts.map +1 -0
- package/dist/browser/session-inspector.d.ts +71 -0
- package/dist/browser/session-inspector.d.ts.map +1 -0
- package/dist/browser/session-store.d.ts +5 -1
- package/dist/browser/session-store.d.ts.map +1 -1
- package/dist/browser/system-chrome-cookies.d.ts +46 -0
- package/dist/browser/system-chrome-cookies.d.ts.map +1 -0
- package/dist/browser/target-manager.d.ts +1 -0
- package/dist/browser/target-manager.d.ts.map +1 -1
- package/dist/cache/chrome-locator.d.ts.map +1 -1
- package/dist/cache/chrome-user-data.d.ts +17 -0
- package/dist/cache/chrome-user-data.d.ts.map +1 -0
- package/dist/canvas/adapter-plugins/loader.d.ts +13 -0
- package/dist/canvas/adapter-plugins/loader.d.ts.map +1 -0
- package/dist/canvas/adapter-plugins/manifest.d.ts +146 -0
- package/dist/canvas/adapter-plugins/manifest.d.ts.map +1 -0
- package/dist/canvas/adapter-plugins/types.d.ts +83 -0
- package/dist/canvas/adapter-plugins/types.d.ts.map +1 -0
- package/dist/canvas/adapter-plugins/validator.d.ts +10 -0
- package/dist/canvas/adapter-plugins/validator.d.ts.map +1 -0
- package/dist/canvas/code-sync/apply-tsx.d.ts +25 -0
- package/dist/canvas/code-sync/apply-tsx.d.ts.map +1 -0
- package/dist/canvas/code-sync/graph.d.ts +5 -0
- package/dist/canvas/code-sync/graph.d.ts.map +1 -0
- package/dist/canvas/code-sync/hash.d.ts +3 -0
- package/dist/canvas/code-sync/hash.d.ts.map +1 -0
- package/dist/canvas/code-sync/import.d.ts +19 -0
- package/dist/canvas/code-sync/import.d.ts.map +1 -0
- package/dist/canvas/code-sync/manifest.d.ts +6 -0
- package/dist/canvas/code-sync/manifest.d.ts.map +1 -0
- package/dist/canvas/code-sync/tsx-adapter.d.ts +8 -0
- package/dist/canvas/code-sync/tsx-adapter.d.ts.map +1 -0
- package/dist/canvas/code-sync/types.d.ts +244 -0
- package/dist/canvas/code-sync/types.d.ts.map +1 -0
- package/dist/canvas/code-sync/write.d.ts +9 -0
- package/dist/canvas/code-sync/write.d.ts.map +1 -0
- package/dist/canvas/document-store.d.ts +91 -0
- package/dist/canvas/document-store.d.ts.map +1 -0
- package/dist/canvas/export.d.ts +12 -0
- package/dist/canvas/export.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/custom-elements-v1.d.ts +3 -0
- package/dist/canvas/framework-adapters/custom-elements-v1.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/html-static-v1.d.ts +3 -0
- package/dist/canvas/framework-adapters/html-static-v1.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/markup.d.ts +9 -0
- package/dist/canvas/framework-adapters/markup.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/react-tsx-v2.d.ts +3 -0
- package/dist/canvas/framework-adapters/react-tsx-v2.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/registry.d.ts +12 -0
- package/dist/canvas/framework-adapters/registry.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/svelte-sfc-v1.d.ts +3 -0
- package/dist/canvas/framework-adapters/svelte-sfc-v1.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/types.d.ts +57 -0
- package/dist/canvas/framework-adapters/types.d.ts.map +1 -0
- package/dist/canvas/framework-adapters/vue-sfc-v1.d.ts +3 -0
- package/dist/canvas/framework-adapters/vue-sfc-v1.d.ts.map +1 -0
- package/dist/canvas/kits/catalog.d.ts +5 -0
- package/dist/canvas/kits/catalog.d.ts.map +1 -0
- package/dist/canvas/library-adapters/react/index.d.ts +3 -0
- package/dist/canvas/library-adapters/react/index.d.ts.map +1 -0
- package/dist/canvas/library-adapters/registry.d.ts +11 -0
- package/dist/canvas/library-adapters/registry.d.ts.map +1 -0
- package/dist/canvas/library-adapters/types.d.ts +43 -0
- package/dist/canvas/library-adapters/types.d.ts.map +1 -0
- package/dist/canvas/repo-store.d.ts +12 -0
- package/dist/canvas/repo-store.d.ts.map +1 -0
- package/dist/canvas/starters/catalog.d.ts +34 -0
- package/dist/canvas/starters/catalog.d.ts.map +1 -0
- package/dist/canvas/surface-palette.d.ts +15 -0
- package/dist/canvas/surface-palette.d.ts.map +1 -0
- package/dist/canvas/token-references.d.ts +22 -0
- package/dist/canvas/token-references.d.ts.map +1 -0
- package/dist/canvas/types.d.ts +594 -0
- package/dist/canvas/types.d.ts.map +1 -0
- package/dist/canvas-runtime-preview-bridge-HBEHXM4T.js +7 -0
- package/dist/canvas-runtime-preview-bridge-HBEHXM4T.js.map +1 -0
- package/dist/challenges/action-loop.d.ts +13 -0
- package/dist/challenges/action-loop.d.ts.map +1 -0
- package/dist/challenges/capability-matrix.d.ts +3 -0
- package/dist/challenges/capability-matrix.d.ts.map +1 -0
- package/dist/challenges/evidence-bundle.d.ts +48 -0
- package/dist/challenges/evidence-bundle.d.ts.map +1 -0
- package/dist/challenges/governed-adapter-gateway.d.ts +4 -0
- package/dist/challenges/governed-adapter-gateway.d.ts.map +1 -0
- package/dist/challenges/human-yield-gate.d.ts +20 -0
- package/dist/challenges/human-yield-gate.d.ts.map +1 -0
- package/dist/challenges/index.d.ts +15 -0
- package/dist/challenges/index.d.ts.map +1 -0
- package/dist/challenges/interpreter.d.ts +3 -0
- package/dist/challenges/interpreter.d.ts.map +1 -0
- package/dist/challenges/optional-computer-use-bridge.d.ts +9 -0
- package/dist/challenges/optional-computer-use-bridge.d.ts.map +1 -0
- package/dist/challenges/orchestrator.d.ts +32 -0
- package/dist/challenges/orchestrator.d.ts.map +1 -0
- package/dist/challenges/outcome-recorder.d.ts +8 -0
- package/dist/challenges/outcome-recorder.d.ts.map +1 -0
- package/dist/challenges/owned-environment-lane.d.ts +3 -0
- package/dist/challenges/owned-environment-lane.d.ts.map +1 -0
- package/dist/challenges/policy-gate.d.ts +9 -0
- package/dist/challenges/policy-gate.d.ts.map +1 -0
- package/dist/challenges/sanctioned-identity-lane.d.ts +3 -0
- package/dist/challenges/sanctioned-identity-lane.d.ts.map +1 -0
- package/dist/challenges/service-adapter-lane.d.ts +3 -0
- package/dist/challenges/service-adapter-lane.d.ts.map +1 -0
- package/dist/challenges/strategy-selector.d.ts +10 -0
- package/dist/challenges/strategy-selector.d.ts.map +1 -0
- package/dist/challenges/types.d.ts +277 -0
- package/dist/challenges/types.d.ts.map +1 -0
- package/dist/challenges/verification-gate.d.ts +15 -0
- package/dist/challenges/verification-gate.d.ts.map +1 -0
- package/dist/chunk-5FZQJRBQ.js +15256 -0
- package/dist/chunk-5FZQJRBQ.js.map +1 -0
- package/dist/{chunk-7W3SPXIB.js → chunk-FUSXMW3G.js} +4 -1
- package/dist/chunk-L57D35TB.js +33513 -0
- package/dist/chunk-L57D35TB.js.map +1 -0
- package/dist/chunk-TBUCZX4A.js +34 -0
- package/dist/chunk-TBUCZX4A.js.map +1 -0
- package/dist/chunk-Y2KL55OG.js +59 -0
- package/dist/chunk-Y2KL55OG.js.map +1 -0
- package/dist/chunk-YBQECXZX.js +409 -0
- package/dist/chunk-YBQECXZX.js.map +1 -0
- package/dist/cli/args.d.ts +4 -4
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/commands/annotate.d.ts +11 -0
- package/dist/cli/commands/annotate.d.ts.map +1 -1
- package/dist/cli/commands/artifacts.d.ts.map +1 -1
- package/dist/cli/commands/canvas.d.ts +45 -0
- package/dist/cli/commands/canvas.d.ts.map +1 -0
- package/dist/cli/commands/daemon.d.ts +7 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/desktop/accessibility-snapshot.d.ts +3 -0
- package/dist/cli/commands/desktop/accessibility-snapshot.d.ts.map +1 -0
- package/dist/cli/commands/desktop/active-window.d.ts +3 -0
- package/dist/cli/commands/desktop/active-window.d.ts.map +1 -0
- package/dist/cli/commands/desktop/capture-desktop.d.ts +3 -0
- package/dist/cli/commands/desktop/capture-desktop.d.ts.map +1 -0
- package/dist/cli/commands/desktop/capture-window.d.ts +3 -0
- package/dist/cli/commands/desktop/capture-window.d.ts.map +1 -0
- package/dist/cli/commands/desktop/shared.d.ts +19 -0
- package/dist/cli/commands/desktop/shared.d.ts.map +1 -0
- package/dist/cli/commands/desktop/status.d.ts +3 -0
- package/dist/cli/commands/desktop/status.d.ts.map +1 -0
- package/dist/cli/commands/desktop/windows.d.ts +3 -0
- package/dist/cli/commands/desktop/windows.d.ts.map +1 -0
- package/dist/cli/commands/devtools/dialog.d.ts +19 -0
- package/dist/cli/commands/devtools/dialog.d.ts.map +1 -0
- package/dist/cli/commands/devtools/perf.d.ts.map +1 -1
- package/dist/cli/commands/devtools/screencast-start.d.ts +20 -0
- package/dist/cli/commands/devtools/screencast-start.d.ts.map +1 -0
- package/dist/cli/commands/devtools/screencast-stop.d.ts +17 -0
- package/dist/cli/commands/devtools/screencast-stop.d.ts.map +1 -0
- package/dist/cli/commands/devtools/screenshot.d.ts +3 -0
- package/dist/cli/commands/devtools/screenshot.d.ts.map +1 -1
- package/dist/cli/commands/dom/attr.d.ts.map +1 -1
- package/dist/cli/commands/dom/checked.d.ts.map +1 -1
- package/dist/cli/commands/dom/enabled.d.ts.map +1 -1
- package/dist/cli/commands/dom/html.d.ts.map +1 -1
- package/dist/cli/commands/dom/text.d.ts.map +1 -1
- package/dist/cli/commands/dom/value.d.ts.map +1 -1
- package/dist/cli/commands/dom/visible.d.ts.map +1 -1
- package/dist/cli/commands/export/clone-component.d.ts +9 -0
- package/dist/cli/commands/export/clone-component.d.ts.map +1 -1
- package/dist/cli/commands/export/clone-page.d.ts +8 -0
- package/dist/cli/commands/export/clone-page.d.ts.map +1 -1
- package/dist/cli/commands/interact/check.d.ts.map +1 -1
- package/dist/cli/commands/interact/click.d.ts.map +1 -1
- package/dist/cli/commands/interact/hover.d.ts.map +1 -1
- package/dist/cli/commands/interact/pointer-down.d.ts +7 -0
- package/dist/cli/commands/interact/pointer-down.d.ts.map +1 -0
- package/dist/cli/commands/interact/pointer-drag.d.ts +7 -0
- package/dist/cli/commands/interact/pointer-drag.d.ts.map +1 -0
- package/dist/cli/commands/interact/pointer-move.d.ts +7 -0
- package/dist/cli/commands/interact/pointer-move.d.ts.map +1 -0
- package/dist/cli/commands/interact/pointer-shared.d.ts +6 -0
- package/dist/cli/commands/interact/pointer-shared.d.ts.map +1 -0
- package/dist/cli/commands/interact/pointer-up.d.ts +7 -0
- package/dist/cli/commands/interact/pointer-up.d.ts.map +1 -0
- package/dist/cli/commands/interact/press.d.ts.map +1 -1
- package/dist/cli/commands/interact/scroll-into-view.d.ts.map +1 -1
- package/dist/cli/commands/interact/scroll.d.ts.map +1 -1
- package/dist/cli/commands/interact/select.d.ts.map +1 -1
- package/dist/cli/commands/interact/type.d.ts.map +1 -1
- package/dist/cli/commands/interact/uncheck.d.ts.map +1 -1
- package/dist/cli/commands/interact/upload.d.ts +18 -0
- package/dist/cli/commands/interact/upload.d.ts.map +1 -0
- package/dist/cli/commands/macro-resolve.d.ts +2 -0
- package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
- package/dist/cli/commands/native.d.ts +22 -8
- package/dist/cli/commands/native.d.ts.map +1 -1
- package/dist/cli/commands/nav/goto.d.ts.map +1 -1
- package/dist/cli/commands/nav/review.d.ts +7 -0
- package/dist/cli/commands/nav/review.d.ts.map +1 -0
- package/dist/cli/commands/nav/snapshot.d.ts.map +1 -1
- package/dist/cli/commands/nav/wait.d.ts.map +1 -1
- package/dist/cli/commands/pages/open.d.ts.map +1 -1
- package/dist/cli/commands/product-video.d.ts +2 -0
- package/dist/cli/commands/product-video.d.ts.map +1 -1
- package/dist/cli/commands/research.d.ts +3 -0
- package/dist/cli/commands/research.d.ts.map +1 -1
- package/dist/cli/commands/run.d.ts +14 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/serve.d.ts +1 -21
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/session/connect.d.ts.map +1 -1
- package/dist/cli/commands/session/disconnect.d.ts.map +1 -1
- package/dist/cli/commands/session/inspector.d.ts +21 -0
- package/dist/cli/commands/session/inspector.d.ts.map +1 -0
- package/dist/cli/commands/session/launch.d.ts.map +1 -1
- package/dist/cli/commands/shopping.d.ts +5 -0
- package/dist/cli/commands/shopping.d.ts.map +1 -1
- package/dist/cli/commands/status.d.ts +2 -9
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/targets/new.d.ts.map +1 -1
- package/dist/cli/daemon-autostart.d.ts +11 -0
- package/dist/cli/daemon-autostart.d.ts.map +1 -1
- package/dist/cli/daemon-client.d.ts +3 -0
- package/dist/cli/daemon-client.d.ts.map +1 -1
- package/dist/cli/daemon-commands.d.ts.map +1 -1
- package/dist/cli/daemon-state.d.ts +16 -0
- package/dist/cli/daemon-state.d.ts.map +1 -1
- package/dist/cli/daemon-status.d.ts +7 -2
- package/dist/cli/daemon-status.d.ts.map +1 -1
- package/dist/cli/daemon.d.ts +1 -0
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/help.d.ts +19 -3
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.js +2927 -932
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/install-autostart-output.d.ts +6 -0
- package/dist/cli/install-autostart-output.d.ts.map +1 -0
- package/dist/cli/install-autostart-reconciliation.d.ts +23 -0
- package/dist/cli/install-autostart-reconciliation.d.ts.map +1 -0
- package/dist/cli/installers/skills.d.ts +42 -6
- package/dist/cli/installers/skills.d.ts.map +1 -1
- package/dist/cli/output.d.ts +3 -0
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/remote-canvas-manager.d.ts +8 -0
- package/dist/cli/remote-canvas-manager.d.ts.map +1 -0
- package/dist/cli/remote-desktop-runtime.d.ts +15 -0
- package/dist/cli/remote-desktop-runtime.d.ts.map +1 -0
- package/dist/cli/remote-manager.d.ts +27 -3
- package/dist/cli/remote-manager.d.ts.map +1 -1
- package/dist/cli/remote-relay.d.ts +2 -0
- package/dist/cli/remote-relay.d.ts.map +1 -1
- package/dist/cli/transport-timeouts.d.ts +8 -0
- package/dist/cli/transport-timeouts.d.ts.map +1 -0
- package/dist/cli/utils/http.d.ts +9 -0
- package/dist/cli/utils/http.d.ts.map +1 -1
- package/dist/cli/utils/parse.d.ts +3 -0
- package/dist/cli/utils/parse.d.ts.map +1 -1
- package/dist/cli/utils/skills.d.ts +1 -2
- package/dist/cli/utils/skills.d.ts.map +1 -1
- package/dist/cli/utils/workflow-message.d.ts +2 -0
- package/dist/cli/utils/workflow-message.d.ts.map +1 -0
- package/dist/config.d.ts +47 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/logging.d.ts +3 -1
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/runtime-assemblies.d.ts +22 -0
- package/dist/core/runtime-assemblies.d.ts.map +1 -0
- package/dist/core/types.d.ts +17 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/desktop/audit.d.ts +37 -0
- package/dist/desktop/audit.d.ts.map +1 -0
- package/dist/desktop/errors.d.ts +7 -0
- package/dist/desktop/errors.d.ts.map +1 -0
- package/dist/desktop/index.d.ts +6 -0
- package/dist/desktop/index.d.ts.map +1 -0
- package/dist/desktop/runtime.d.ts +26 -0
- package/dist/desktop/runtime.d.ts.map +1 -0
- package/dist/desktop/types.d.ts +76 -0
- package/dist/desktop/types.d.ts.map +1 -0
- package/dist/extension-extractor.d.ts +6 -0
- package/dist/extension-extractor.d.ts.map +1 -1
- package/dist/fs-UMRKOBNN.js +7 -0
- package/dist/fs-UMRKOBNN.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1221 -460
- package/dist/index.js.map +1 -1
- package/dist/integrations/figma/assets.d.ts +13 -0
- package/dist/integrations/figma/assets.d.ts.map +1 -0
- package/dist/integrations/figma/auth.d.ts +3 -0
- package/dist/integrations/figma/auth.d.ts.map +1 -0
- package/dist/integrations/figma/client.d.ts +42 -0
- package/dist/integrations/figma/client.d.ts.map +1 -0
- package/dist/integrations/figma/mappers.d.ts +23 -0
- package/dist/integrations/figma/mappers.d.ts.map +1 -0
- package/dist/integrations/figma/normalize.d.ts +99 -0
- package/dist/integrations/figma/normalize.d.ts.map +1 -0
- package/dist/integrations/figma/url.d.ts +17 -0
- package/dist/integrations/figma/url.d.ts.map +1 -0
- package/dist/integrations/figma/variables.d.ts +21 -0
- package/dist/integrations/figma/variables.d.ts.map +1 -0
- package/dist/macros/execute-runtime.d.ts +19 -0
- package/dist/macros/execute-runtime.d.ts.map +1 -0
- package/dist/macros/execute.d.ts +3 -1
- package/dist/macros/execute.d.ts.map +1 -1
- package/dist/{macros-NUBRM44Y.js → macros-ND2M7LWU.js} +2 -2
- package/dist/opendevbrowser.d.ts.map +1 -1
- package/dist/opendevbrowser.js +1221 -460
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/providers/blocker.d.ts.map +1 -1
- package/dist/providers/browser-fallback.d.ts +30 -0
- package/dist/providers/browser-fallback.d.ts.map +1 -0
- package/dist/providers/constraint.d.ts +45 -0
- package/dist/providers/constraint.d.ts.map +1 -0
- package/dist/providers/index.d.ts +11 -2
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/policy.d.ts.map +1 -1
- package/dist/providers/product-video-compiler.d.ts +92 -0
- package/dist/providers/product-video-compiler.d.ts.map +1 -0
- package/dist/providers/registry.d.ts +37 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/renderer.d.ts.map +1 -1
- package/dist/providers/research-compiler.d.ts +64 -0
- package/dist/providers/research-compiler.d.ts.map +1 -0
- package/dist/providers/research-executor.d.ts +27 -0
- package/dist/providers/research-executor.d.ts.map +1 -0
- package/dist/providers/runtime-bundle.d.ts +26 -0
- package/dist/providers/runtime-bundle.d.ts.map +1 -0
- package/dist/providers/runtime-factory.d.ts +6 -1
- package/dist/providers/runtime-factory.d.ts.map +1 -1
- package/dist/providers/runtime-policy.d.ts +24 -0
- package/dist/providers/runtime-policy.d.ts.map +1 -0
- package/dist/providers/shared/anti-bot-policy.d.ts +3 -2
- package/dist/providers/shared/anti-bot-policy.d.ts.map +1 -1
- package/dist/providers/shopping/index.d.ts +11 -1
- package/dist/providers/shopping/index.d.ts.map +1 -1
- package/dist/providers/shopping-compiler.d.ts +51 -0
- package/dist/providers/shopping-compiler.d.ts.map +1 -0
- package/dist/providers/shopping-executor.d.ts +18 -0
- package/dist/providers/shopping-executor.d.ts.map +1 -0
- package/dist/providers/shopping-postprocess.d.ts +46 -0
- package/dist/providers/shopping-postprocess.d.ts.map +1 -0
- package/dist/providers/shopping-workflow.d.ts +33 -0
- package/dist/providers/shopping-workflow.d.ts.map +1 -0
- package/dist/providers/social/platform.d.ts +2 -1
- package/dist/providers/social/platform.d.ts.map +1 -1
- package/dist/providers/social/search-quality.d.ts +16 -0
- package/dist/providers/social/search-quality.d.ts.map +1 -0
- package/dist/providers/social/youtube-resolver.d.ts +2 -1
- package/dist/providers/social/youtube-resolver.d.ts.map +1 -1
- package/dist/providers/social/youtube.d.ts.map +1 -1
- package/dist/providers/types.d.ts +116 -4
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/web/crawl-worker.d.ts.map +1 -1
- package/dist/providers/web/extract.d.ts +16 -0
- package/dist/providers/web/extract.d.ts.map +1 -1
- package/dist/providers/web/index.d.ts.map +1 -1
- package/dist/providers/workflow-contracts.d.ts +53 -0
- package/dist/providers/workflow-contracts.d.ts.map +1 -0
- package/dist/providers/workflows.d.ts +30 -6
- package/dist/providers/workflows.d.ts.map +1 -1
- package/dist/providers-G36AM3Z2.js +121 -0
- package/dist/providers-G36AM3Z2.js.map +1 -0
- package/dist/public-surface/generated-manifest.d.ts +1168 -0
- package/dist/public-surface/generated-manifest.d.ts.map +1 -0
- package/dist/public-surface/source.d.ts +437 -0
- package/dist/public-surface/source.d.ts.map +1 -0
- package/dist/relay/protocol.d.ts +108 -4
- package/dist/relay/protocol.d.ts.map +1 -1
- package/dist/relay/relay-endpoints.d.ts +21 -0
- package/dist/relay/relay-endpoints.d.ts.map +1 -1
- package/dist/relay/relay-server.d.ts +32 -1
- package/dist/relay/relay-server.d.ts.map +1 -1
- package/dist/relay/relay-types.d.ts +3 -0
- package/dist/relay/relay-types.d.ts.map +1 -1
- package/dist/skills/bundled-skill-directories.d.ts +8 -0
- package/dist/skills/bundled-skill-directories.d.ts.map +1 -0
- package/dist/skills/skill-loader.d.ts +9 -1
- package/dist/skills/skill-loader.d.ts.map +1 -1
- package/dist/skills/skill-loader.js +7 -0
- package/dist/skills/skill-loader.js.map +1 -0
- package/dist/skills/skill-nudge.d.ts.map +1 -1
- package/dist/skills/types.d.ts +31 -0
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/snapshot/ops-snapshot.d.ts +1 -1
- package/dist/snapshot/ops-snapshot.d.ts.map +1 -1
- package/dist/snapshot/refs.d.ts +6 -1
- package/dist/snapshot/refs.d.ts.map +1 -1
- package/dist/snapshot/snapshotter.d.ts.map +1 -1
- package/dist/tools/annotate.d.ts.map +1 -1
- package/dist/tools/canvas.d.ts +4 -0
- package/dist/tools/canvas.d.ts.map +1 -0
- package/dist/tools/check.d.ts.map +1 -1
- package/dist/tools/click.d.ts.map +1 -1
- package/dist/tools/clone_component.d.ts.map +1 -1
- package/dist/tools/clone_page.d.ts.map +1 -1
- package/dist/tools/connect.d.ts.map +1 -1
- package/dist/tools/deps.d.ts +6 -0
- package/dist/tools/deps.d.ts.map +1 -1
- package/dist/tools/desktop-shared.d.ts +6 -0
- package/dist/tools/desktop-shared.d.ts.map +1 -0
- package/dist/tools/desktop_accessibility_snapshot.d.ts +4 -0
- package/dist/tools/desktop_accessibility_snapshot.d.ts.map +1 -0
- package/dist/tools/desktop_active_window.d.ts +4 -0
- package/dist/tools/desktop_active_window.d.ts.map +1 -0
- package/dist/tools/desktop_capture_desktop.d.ts +4 -0
- package/dist/tools/desktop_capture_desktop.d.ts.map +1 -0
- package/dist/tools/desktop_capture_window.d.ts +4 -0
- package/dist/tools/desktop_capture_window.d.ts.map +1 -0
- package/dist/tools/desktop_status.d.ts +4 -0
- package/dist/tools/desktop_status.d.ts.map +1 -0
- package/dist/tools/desktop_windows.d.ts +4 -0
- package/dist/tools/desktop_windows.d.ts.map +1 -0
- package/dist/tools/dialog.d.ts +4 -0
- package/dist/tools/dialog.d.ts.map +1 -0
- package/dist/tools/dom_get_html.d.ts.map +1 -1
- package/dist/tools/dom_get_text.d.ts.map +1 -1
- package/dist/tools/get_attr.d.ts.map +1 -1
- package/dist/tools/get_value.d.ts.map +1 -1
- package/dist/tools/goto.d.ts.map +1 -1
- package/dist/tools/hover.d.ts.map +1 -1
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/is_checked.d.ts.map +1 -1
- package/dist/tools/is_enabled.d.ts.map +1 -1
- package/dist/tools/is_visible.d.ts.map +1 -1
- package/dist/tools/launch.d.ts.map +1 -1
- package/dist/tools/macro_resolve.d.ts.map +1 -1
- package/dist/tools/perf.d.ts.map +1 -1
- package/dist/tools/pointer_down.d.ts +4 -0
- package/dist/tools/pointer_down.d.ts.map +1 -0
- package/dist/tools/pointer_drag.d.ts +4 -0
- package/dist/tools/pointer_drag.d.ts.map +1 -0
- package/dist/tools/pointer_move.d.ts +4 -0
- package/dist/tools/pointer_move.d.ts.map +1 -0
- package/dist/tools/pointer_up.d.ts +4 -0
- package/dist/tools/pointer_up.d.ts.map +1 -0
- package/dist/tools/press.d.ts.map +1 -1
- package/dist/tools/product_video_run.d.ts.map +1 -1
- package/dist/tools/prompting_guide.d.ts.map +1 -1
- package/dist/tools/research_run.d.ts.map +1 -1
- package/dist/tools/response.d.ts +4 -1
- package/dist/tools/response.d.ts.map +1 -1
- package/dist/tools/review.d.ts +4 -0
- package/dist/tools/review.d.ts.map +1 -0
- package/dist/tools/screencast_start.d.ts +4 -0
- package/dist/tools/screencast_start.d.ts.map +1 -0
- package/dist/tools/screencast_stop.d.ts +4 -0
- package/dist/tools/screencast_stop.d.ts.map +1 -0
- package/dist/tools/screenshot.d.ts.map +1 -1
- package/dist/tools/scroll.d.ts.map +1 -1
- package/dist/tools/scroll_into_view.d.ts.map +1 -1
- package/dist/tools/select.d.ts.map +1 -1
- package/dist/tools/session_inspector.d.ts +4 -0
- package/dist/tools/session_inspector.d.ts.map +1 -0
- package/dist/tools/shopping_run.d.ts.map +1 -1
- package/dist/tools/skill_list.d.ts.map +1 -1
- package/dist/tools/skill_load.d.ts.map +1 -1
- package/dist/tools/snapshot.d.ts.map +1 -1
- package/dist/tools/type.d.ts.map +1 -1
- package/dist/tools/uncheck.d.ts.map +1 -1
- package/dist/tools/upload.d.ts +4 -0
- package/dist/tools/upload.d.ts.map +1 -0
- package/dist/tools/wait.d.ts.map +1 -1
- package/dist/tools/workflow-runtime.d.ts +4 -2
- package/dist/tools/workflow-runtime.d.ts.map +1 -1
- package/dist/utils/package-assets.d.ts +4 -0
- package/dist/utils/package-assets.d.ts.map +1 -0
- package/extension/canvas.html +1006 -0
- package/extension/dist/annotate-content.css +15 -6
- package/extension/dist/annotate-content.js +175 -35
- package/extension/dist/annotation-payload.js +199 -0
- package/extension/dist/background.js +544 -69
- package/extension/dist/canvas/canvas-runtime.js +1490 -0
- package/extension/dist/canvas/model.js +341 -0
- package/extension/dist/canvas/viewport-fit.js +67 -0
- package/extension/dist/canvas-page.js +3609 -0
- package/extension/dist/ops/dom-bridge.js +255 -3
- package/extension/dist/ops/ops-runtime.js +3324 -301
- package/extension/dist/ops/ops-session-store.js +97 -112
- package/extension/dist/ops/snapshot-builder.js +2 -2
- package/extension/dist/ops/snapshot-shared.js +2 -2
- package/extension/dist/ops/target-session-coordinator.js +159 -0
- package/extension/dist/popup.js +201 -42
- package/extension/dist/services/CDPRouter.js +1567 -63
- package/extension/dist/services/ConnectionManager.js +453 -78
- package/extension/dist/services/RelayClient.js +79 -30
- package/extension/dist/services/TabManager.js +118 -22
- package/extension/dist/services/TargetSessionMap.js +127 -3
- package/extension/dist/services/attach-errors.js +20 -0
- package/extension/dist/services/cdp-router-commands.js +135 -8
- package/extension/dist/services/url-restrictions.js +9 -13
- package/extension/dist/types.js +2 -0
- package/extension/manifest.json +2 -2
- package/extension/popup.html +59 -6
- package/package.json +19 -9
- package/skills/AGENTS.md +8 -4
- package/skills/opendevbrowser-best-practices/SKILL.md +183 -6
- package/skills/opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md +1 -0
- package/skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md +141 -0
- package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +129 -19
- package/skills/opendevbrowser-best-practices/artifacts/parity-gates.md +9 -2
- package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +6 -0
- package/skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md +58 -0
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-blocker-checklist.json +70 -0
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-feedback-eval.json +73 -0
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-generation-plan.v1.json +67 -0
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-handshake-example.json +126 -0
- package/skills/opendevbrowser-best-practices/assets/templates/robustness-checklist.json +57 -0
- package/skills/opendevbrowser-best-practices/assets/templates/skill-runtime-pack-matrix.json +674 -0
- package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +12 -3
- package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +107 -12
- package/skills/opendevbrowser-best-practices/scripts/resolve-odb-cli.sh +100 -0
- package/skills/opendevbrowser-best-practices/scripts/run-robustness-audit.sh +83 -1
- package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +365 -84
- package/skills/opendevbrowser-best-practices/scripts/validator-fixture-cli.sh +208 -0
- package/skills/opendevbrowser-continuity-ledger/SKILL.md +14 -1
- package/skills/opendevbrowser-continuity-ledger/scripts/validate-skill-assets.sh +61 -0
- package/skills/opendevbrowser-data-extraction/SKILL.md +6 -0
- package/skills/opendevbrowser-data-extraction/scripts/validate-skill-assets.sh +112 -0
- package/skills/opendevbrowser-design-agent/SKILL.md +275 -0
- package/skills/opendevbrowser-design-agent/artifacts/app-shell-and-state-wiring.md +84 -0
- package/skills/opendevbrowser-design-agent/artifacts/async-search-state-ownership.md +58 -0
- package/skills/opendevbrowser-design-agent/artifacts/component-pattern-index.md +130 -0
- package/skills/opendevbrowser-design-agent/artifacts/design-contract-playbook.md +157 -0
- package/skills/opendevbrowser-design-agent/artifacts/design-release-gate.md +40 -0
- package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +153 -0
- package/skills/opendevbrowser-design-agent/artifacts/existing-surface-adaptation.md +56 -0
- package/skills/opendevbrowser-design-agent/artifacts/external-pattern-synthesis.md +103 -0
- package/skills/opendevbrowser-design-agent/artifacts/frontend-evaluation-rubric.md +61 -0
- package/skills/opendevbrowser-design-agent/artifacts/implementation-anti-patterns.md +163 -0
- package/skills/opendevbrowser-design-agent/artifacts/isolated-preview-validation.md +68 -0
- package/skills/opendevbrowser-design-agent/artifacts/loading-and-feedback-surfaces.md +56 -0
- package/skills/opendevbrowser-design-agent/artifacts/opendevbrowser-ui-example-map.md +44 -0
- package/skills/opendevbrowser-design-agent/artifacts/performance-audit-playbook.md +70 -0
- package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +81 -0
- package/skills/opendevbrowser-design-agent/artifacts/scroll-reveal-surface-planning.md +64 -0
- package/skills/opendevbrowser-design-agent/artifacts/state-ownership-matrix.md +36 -0
- package/skills/opendevbrowser-design-agent/artifacts/theming-and-token-ownership.md +43 -0
- package/skills/opendevbrowser-design-agent/assets/templates/canvas-generation-plan.design.v1.json +58 -0
- package/skills/opendevbrowser-design-agent/assets/templates/design-audit-report.v1.md +34 -0
- package/skills/opendevbrowser-design-agent/assets/templates/design-brief.v1.md +40 -0
- package/skills/opendevbrowser-design-agent/assets/templates/design-contract.v1.json +226 -0
- package/skills/opendevbrowser-design-agent/assets/templates/design-release-gate.v1.json +35 -0
- package/skills/opendevbrowser-design-agent/assets/templates/design-review-checklist.json +57 -0
- package/skills/opendevbrowser-design-agent/assets/templates/real-surface-design-matrix.json +32 -0
- package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +31 -0
- package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +171 -0
- package/skills/opendevbrowser-design-agent/scripts/extract-canvas-plan.sh +56 -0
- package/skills/opendevbrowser-design-agent/scripts/validate-skill-assets.sh +223 -0
- package/skills/opendevbrowser-form-testing/SKILL.md +19 -3
- package/skills/opendevbrowser-form-testing/artifacts/form-workflows.md +5 -4
- package/skills/opendevbrowser-form-testing/assets/templates/challenge-decision-tree.json +2 -0
- package/skills/opendevbrowser-form-testing/scripts/validate-skill-assets.sh +109 -0
- package/skills/opendevbrowser-login-automation/SKILL.md +21 -3
- package/skills/opendevbrowser-login-automation/artifacts/login-workflows.md +5 -4
- package/skills/opendevbrowser-login-automation/assets/templates/auth-signals.json +5 -0
- package/skills/opendevbrowser-login-automation/assets/templates/login-scenario-matrix.json +3 -2
- package/skills/opendevbrowser-login-automation/scripts/run-login-workflow.sh +17 -1
- package/skills/opendevbrowser-login-automation/scripts/validate-skill-assets.sh +133 -0
- package/skills/opendevbrowser-product-presentation-asset/SKILL.md +23 -11
- package/skills/opendevbrowser-product-presentation-asset/artifacts/asset-pack-assembly.md +5 -3
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/shot-list.md +2 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/video-assembly.md +3 -2
- package/skills/opendevbrowser-product-presentation-asset/scripts/capture-screenshots.sh +5 -1
- package/skills/opendevbrowser-product-presentation-asset/scripts/collect-product.sh +6 -2
- package/skills/opendevbrowser-product-presentation-asset/scripts/download-images.sh +5 -1
- package/skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh +20 -7
- package/skills/opendevbrowser-product-presentation-asset/scripts/validate-skill-assets.sh +39 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/write-manifest.sh +5 -1
- package/skills/opendevbrowser-research/SKILL.md +14 -6
- package/skills/opendevbrowser-research/scripts/render-output.sh +5 -1
- package/skills/opendevbrowser-research/scripts/run-research.sh +5 -1
- package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +45 -0
- package/skills/opendevbrowser-research/scripts/write-artifacts.sh +5 -1
- package/skills/opendevbrowser-shopping/SKILL.md +20 -1
- package/skills/opendevbrowser-shopping/scripts/normalize-offers.sh +6 -2
- package/skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh +5 -1
- package/skills/opendevbrowser-shopping/scripts/run-shopping.sh +5 -1
- package/skills/opendevbrowser-shopping/scripts/validate-skill-assets.sh +54 -0
- package/dist/chunk-ST7CO5FA.js +0 -18668
- package/dist/chunk-ST7CO5FA.js.map +0 -1
- /package/dist/{chunk-7W3SPXIB.js.map → chunk-FUSXMW3G.js.map} +0 -0
- /package/dist/{macros-NUBRM44Y.js.map → macros-ND2M7LWU.js.map} +0 -0
package/dist/opendevbrowser.js
CHANGED
|
@@ -1,34 +1,35 @@
|
|
|
1
1
|
import {
|
|
2
|
+
AGENT_INBOX_SYSTEM_MARKER,
|
|
2
3
|
DaemonClient,
|
|
3
4
|
ScriptRunner,
|
|
4
5
|
buildAnnotateResult,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
buildBrowserReviewResult,
|
|
7
|
+
buildLoopbackSessionRelayEndpoint,
|
|
8
|
+
classifySessionRelayEndpoint,
|
|
9
|
+
createAutomationCoordinator,
|
|
10
|
+
createCoreRuntimeAssemblies,
|
|
9
11
|
createOpenDevBrowserCore,
|
|
10
|
-
|
|
11
|
-
executeMacroResolution,
|
|
12
|
+
executeMacroWithRuntime,
|
|
12
13
|
extractExtension,
|
|
13
14
|
fetchDaemonStatusFromMetadata,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
inspectSession,
|
|
16
|
+
onboarding_metadata_default,
|
|
17
|
+
resolveBundledProviderRuntime,
|
|
18
|
+
resolveSessionRelayRoute,
|
|
18
19
|
startDaemon
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import "./chunk-
|
|
20
|
+
} from "./chunk-L57D35TB.js";
|
|
21
|
+
import "./chunk-YBQECXZX.js";
|
|
22
|
+
import "./chunk-Y2KL55OG.js";
|
|
23
|
+
import "./chunk-TBUCZX4A.js";
|
|
24
|
+
import {
|
|
25
|
+
CHALLENGE_AUTOMATION_MODES,
|
|
26
|
+
buildBlockerArtifacts,
|
|
27
|
+
classifyBlockerSignal,
|
|
28
|
+
createRequestId
|
|
29
|
+
} from "./chunk-5FZQJRBQ.js";
|
|
30
|
+
import "./chunk-FUSXMW3G.js";
|
|
21
31
|
|
|
22
32
|
// src/cli/remote-manager.ts
|
|
23
|
-
function isLegacyRelayEndpoint(wsEndpoint) {
|
|
24
|
-
try {
|
|
25
|
-
const url = new URL(wsEndpoint);
|
|
26
|
-
const path = url.pathname.endsWith("/") ? url.pathname.slice(0, -1) : url.pathname;
|
|
27
|
-
return path === "/cdp";
|
|
28
|
-
} catch {
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
33
|
var RemoteManager = class {
|
|
33
34
|
client;
|
|
34
35
|
constructor(client) {
|
|
@@ -40,10 +41,16 @@ var RemoteManager = class {
|
|
|
40
41
|
connect(options) {
|
|
41
42
|
return this.client.call("session.connect", options);
|
|
42
43
|
}
|
|
43
|
-
connectRelay(wsEndpoint) {
|
|
44
|
+
connectRelay(wsEndpoint, options) {
|
|
45
|
+
const startUrl = typeof options?.startUrl === "string" && options.startUrl.trim().length > 0 ? options.startUrl.trim() : void 0;
|
|
46
|
+
const parsedRelayEndpoint = classifySessionRelayEndpoint(wsEndpoint);
|
|
44
47
|
return this.client.call(
|
|
45
48
|
"session.connect",
|
|
46
|
-
|
|
49
|
+
{
|
|
50
|
+
wsEndpoint,
|
|
51
|
+
...parsedRelayEndpoint?.inputPath === "/cdp" ? { extensionLegacy: true } : {},
|
|
52
|
+
...startUrl ? { startUrl } : {}
|
|
53
|
+
}
|
|
47
54
|
);
|
|
48
55
|
}
|
|
49
56
|
disconnect(sessionId, closeBrowser = false) {
|
|
@@ -242,11 +249,44 @@ var RemoteManager = class {
|
|
|
242
249
|
...typeof targetId === "string" ? { targetId } : {}
|
|
243
250
|
});
|
|
244
251
|
}
|
|
245
|
-
screenshot(sessionId,
|
|
252
|
+
screenshot(sessionId, options = {}) {
|
|
246
253
|
return this.client.call("page.screenshot", {
|
|
247
254
|
sessionId,
|
|
248
|
-
path,
|
|
249
|
-
...typeof targetId === "string" ? { targetId } : {}
|
|
255
|
+
...typeof options.path === "string" ? { path: options.path } : {},
|
|
256
|
+
...typeof options.targetId === "string" ? { targetId: options.targetId } : {},
|
|
257
|
+
...typeof options.ref === "string" ? { ref: options.ref } : {},
|
|
258
|
+
...options.fullPage === true ? { fullPage: true } : {}
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
startScreencast(sessionId, options = {}) {
|
|
262
|
+
return this.client.call("page.screencast.start", {
|
|
263
|
+
sessionId,
|
|
264
|
+
...typeof options.targetId === "string" ? { targetId: options.targetId } : {},
|
|
265
|
+
...typeof options.outputDir === "string" ? { outputDir: options.outputDir } : {},
|
|
266
|
+
...typeof options.intervalMs === "number" ? { intervalMs: options.intervalMs } : {},
|
|
267
|
+
...typeof options.maxFrames === "number" ? { maxFrames: options.maxFrames } : {}
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
stopScreencast(sessionId, screencastId) {
|
|
271
|
+
return this.client.call("page.screencast.stop", {
|
|
272
|
+
sessionId,
|
|
273
|
+
screencastId
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
upload(sessionId, input) {
|
|
277
|
+
return this.client.call("interact.upload", {
|
|
278
|
+
sessionId,
|
|
279
|
+
ref: input.ref,
|
|
280
|
+
files: input.files,
|
|
281
|
+
...typeof input.targetId === "string" ? { targetId: input.targetId } : {}
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
dialog(sessionId, input = {}) {
|
|
285
|
+
return this.client.call("page.dialog", {
|
|
286
|
+
sessionId,
|
|
287
|
+
action: input.action ?? "status",
|
|
288
|
+
...typeof input.promptText === "string" ? { promptText: input.promptText } : {},
|
|
289
|
+
...typeof input.targetId === "string" ? { targetId: input.targetId } : {}
|
|
250
290
|
});
|
|
251
291
|
}
|
|
252
292
|
consolePoll(sessionId, sinceSeq, max = 50) {
|
|
@@ -255,6 +295,59 @@ var RemoteManager = class {
|
|
|
255
295
|
networkPoll(sessionId, sinceSeq, max = 50) {
|
|
256
296
|
return this.client.call("devtools.networkPoll", { sessionId, sinceSeq, max });
|
|
257
297
|
}
|
|
298
|
+
debugTraceSnapshot(sessionId, options = {}) {
|
|
299
|
+
return this.client.call("devtools.debugTraceSnapshot", {
|
|
300
|
+
sessionId,
|
|
301
|
+
...options
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
createSessionInspector() {
|
|
305
|
+
return {
|
|
306
|
+
status: (sessionId) => this.status(sessionId),
|
|
307
|
+
listTargets: (sessionId, includeUrls) => this.listTargets(sessionId, includeUrls),
|
|
308
|
+
consolePoll: (sessionId, sinceSeq, max) => this.consolePoll(sessionId, sinceSeq, max),
|
|
309
|
+
networkPoll: (sessionId, sinceSeq, max) => this.networkPoll(sessionId, sinceSeq, max),
|
|
310
|
+
debugTraceSnapshot: (sessionId, options) => this.debugTraceSnapshot(sessionId, options)
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
pointerMove(sessionId, x, y, targetId, steps) {
|
|
314
|
+
return this.client.call("pointer.move", {
|
|
315
|
+
sessionId,
|
|
316
|
+
x,
|
|
317
|
+
y,
|
|
318
|
+
...typeof steps === "number" ? { steps } : {},
|
|
319
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
pointerDown(sessionId, x, y, targetId, button = "left", clickCount = 1) {
|
|
323
|
+
return this.client.call("pointer.down", {
|
|
324
|
+
sessionId,
|
|
325
|
+
x,
|
|
326
|
+
y,
|
|
327
|
+
button,
|
|
328
|
+
clickCount,
|
|
329
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
pointerUp(sessionId, x, y, targetId, button = "left", clickCount = 1) {
|
|
333
|
+
return this.client.call("pointer.up", {
|
|
334
|
+
sessionId,
|
|
335
|
+
x,
|
|
336
|
+
y,
|
|
337
|
+
button,
|
|
338
|
+
clickCount,
|
|
339
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
drag(sessionId, from, to, targetId, steps) {
|
|
343
|
+
return this.client.call("pointer.drag", {
|
|
344
|
+
sessionId,
|
|
345
|
+
from,
|
|
346
|
+
to,
|
|
347
|
+
...typeof steps === "number" ? { steps } : {},
|
|
348
|
+
...typeof targetId === "string" ? { targetId } : {}
|
|
349
|
+
});
|
|
350
|
+
}
|
|
258
351
|
listTargets(sessionId, includeUrls = false) {
|
|
259
352
|
return this.client.call("targets.list", { sessionId, includeUrls });
|
|
260
353
|
}
|
|
@@ -281,6 +374,53 @@ var RemoteManager = class {
|
|
|
281
374
|
}
|
|
282
375
|
};
|
|
283
376
|
|
|
377
|
+
// src/cli/remote-canvas-manager.ts
|
|
378
|
+
var RemoteCanvasManager = class {
|
|
379
|
+
client;
|
|
380
|
+
constructor(client) {
|
|
381
|
+
this.client = client;
|
|
382
|
+
}
|
|
383
|
+
execute(command, params = {}) {
|
|
384
|
+
return this.client.call("canvas.execute", { command, params });
|
|
385
|
+
}
|
|
386
|
+
};
|
|
387
|
+
|
|
388
|
+
// src/cli/remote-desktop-runtime.ts
|
|
389
|
+
var RemoteDesktopRuntime = class {
|
|
390
|
+
client;
|
|
391
|
+
constructor(client) {
|
|
392
|
+
this.client = client;
|
|
393
|
+
}
|
|
394
|
+
status() {
|
|
395
|
+
return this.client.call("desktop.status");
|
|
396
|
+
}
|
|
397
|
+
listWindows(reason) {
|
|
398
|
+
return this.client.call("desktop.windows.list", {
|
|
399
|
+
...reason ? { reason } : {}
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
activeWindow(reason) {
|
|
403
|
+
return this.client.call("desktop.window.active", {
|
|
404
|
+
...reason ? { reason } : {}
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
captureDesktop(input) {
|
|
408
|
+
return this.client.call("desktop.capture.desktop", { reason: input.reason });
|
|
409
|
+
}
|
|
410
|
+
captureWindow(windowId, input) {
|
|
411
|
+
return this.client.call("desktop.capture.window", {
|
|
412
|
+
windowId,
|
|
413
|
+
reason: input.reason
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
accessibilitySnapshot(reason, windowId) {
|
|
417
|
+
return this.client.call("desktop.accessibility.snapshot", {
|
|
418
|
+
reason,
|
|
419
|
+
...windowId ? { windowId } : {}
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
|
|
284
424
|
// src/cli/remote-relay.ts
|
|
285
425
|
var emptyStatus = {
|
|
286
426
|
running: false,
|
|
@@ -289,6 +429,7 @@ var emptyStatus = {
|
|
|
289
429
|
cdpConnected: false,
|
|
290
430
|
annotationConnected: false,
|
|
291
431
|
opsConnected: false,
|
|
432
|
+
canvasConnected: false,
|
|
292
433
|
pairingRequired: false,
|
|
293
434
|
instanceId: "",
|
|
294
435
|
epoch: 0,
|
|
@@ -300,6 +441,7 @@ var emptyStatus = {
|
|
|
300
441
|
cdpConnected: false,
|
|
301
442
|
annotationConnected: false,
|
|
302
443
|
opsConnected: false,
|
|
444
|
+
canvasConnected: false,
|
|
303
445
|
pairingRequired: false
|
|
304
446
|
}
|
|
305
447
|
};
|
|
@@ -309,6 +451,7 @@ var RemoteRelay = class {
|
|
|
309
451
|
lastCdpUrl = null;
|
|
310
452
|
lastAnnotationUrl = null;
|
|
311
453
|
lastOpsUrl = null;
|
|
454
|
+
lastCanvasUrl = null;
|
|
312
455
|
constructor(client) {
|
|
313
456
|
this.client = client;
|
|
314
457
|
}
|
|
@@ -322,11 +465,14 @@ var RemoteRelay = class {
|
|
|
322
465
|
this.lastAnnotationUrl = typeof annotationUrl === "string" ? annotationUrl : null;
|
|
323
466
|
const opsUrl = await this.client.call("relay.opsUrl");
|
|
324
467
|
this.lastOpsUrl = typeof opsUrl === "string" ? opsUrl : null;
|
|
468
|
+
const canvasUrl = await this.client.call("relay.canvasUrl");
|
|
469
|
+
this.lastCanvasUrl = typeof canvasUrl === "string" ? canvasUrl : null;
|
|
325
470
|
} catch {
|
|
326
471
|
this.lastStatus = emptyStatus;
|
|
327
472
|
this.lastCdpUrl = null;
|
|
328
473
|
this.lastAnnotationUrl = null;
|
|
329
474
|
this.lastOpsUrl = null;
|
|
475
|
+
this.lastCanvasUrl = null;
|
|
330
476
|
}
|
|
331
477
|
}
|
|
332
478
|
status() {
|
|
@@ -341,11 +487,14 @@ var RemoteRelay = class {
|
|
|
341
487
|
getOpsUrl() {
|
|
342
488
|
return this.lastOpsUrl;
|
|
343
489
|
}
|
|
490
|
+
getCanvasUrl() {
|
|
491
|
+
return this.lastCanvasUrl;
|
|
492
|
+
}
|
|
344
493
|
};
|
|
345
494
|
|
|
346
495
|
// src/skills/skill-nudge.ts
|
|
347
496
|
var SKILL_NUDGE_MARKER = "[opendevbrowser:skill-nudge]";
|
|
348
|
-
var SKILL_NUDGE_MESSAGE = `${SKILL_NUDGE_MARKER} If this task likely matches a skill, start with skill("
|
|
497
|
+
var SKILL_NUDGE_MESSAGE = `${SKILL_NUDGE_MARKER} If this task likely matches a skill, start with skill("${onboarding_metadata_default.skillName}", "${onboarding_metadata_default.skillTopic}"). For frontend, UI, screenshot-to-code, or /canvas design work, then load skill("${onboarding_metadata_default.designSkillName}"). Use the canonical opendevbrowser-* packs and start with the bundled quick-start lane before low-level browser commands.`;
|
|
349
498
|
function createSkillNudgeState() {
|
|
350
499
|
return { pending: false, requestedAtMs: null };
|
|
351
500
|
}
|
|
@@ -418,18 +567,25 @@ import { tool } from "@opencode-ai/plugin";
|
|
|
418
567
|
function ok(data) {
|
|
419
568
|
return JSON.stringify({ ok: true, ...data });
|
|
420
569
|
}
|
|
421
|
-
function failure(message, code) {
|
|
570
|
+
function failure(message, code, details) {
|
|
422
571
|
return JSON.stringify({
|
|
423
572
|
ok: false,
|
|
424
573
|
error: {
|
|
425
574
|
message,
|
|
426
|
-
code
|
|
575
|
+
code,
|
|
576
|
+
...details ? { details } : {}
|
|
427
577
|
}
|
|
428
578
|
});
|
|
429
579
|
}
|
|
430
580
|
function serializeError(error) {
|
|
431
581
|
if (error instanceof Error) {
|
|
432
|
-
|
|
582
|
+
const detailCarrier = error;
|
|
583
|
+
const details = detailCarrier.details && typeof detailCarrier.details === "object" && !Array.isArray(detailCarrier.details) ? detailCarrier.details : detailCarrier.blocker && typeof detailCarrier.blocker === "object" && !Array.isArray(detailCarrier.blocker) ? { blocker: detailCarrier.blocker } : void 0;
|
|
584
|
+
return {
|
|
585
|
+
message: error.message,
|
|
586
|
+
code: detailCarrier.code,
|
|
587
|
+
details
|
|
588
|
+
};
|
|
433
589
|
}
|
|
434
590
|
return { message: "Unknown error" };
|
|
435
591
|
}
|
|
@@ -463,7 +619,7 @@ function createLaunchTool(deps) {
|
|
|
463
619
|
let relayUrl = extensionLegacy ? deps.relay?.getCdpUrl() ?? null : deps.relay?.getOpsUrl?.() ?? null;
|
|
464
620
|
const relayPort = relayStatus?.port;
|
|
465
621
|
if (!relayUrl && isValidPort(relayPort)) {
|
|
466
|
-
relayUrl =
|
|
622
|
+
relayUrl = buildLoopbackSessionRelayEndpoint(relayPort, { extensionLegacy });
|
|
467
623
|
}
|
|
468
624
|
const waitTimeoutMs = clampWaitTimeout(args.waitTimeoutMs ?? 3e4);
|
|
469
625
|
const headlessExplicit = args.headless === true;
|
|
@@ -488,7 +644,7 @@ function createLaunchTool(deps) {
|
|
|
488
644
|
const observedStatus = shouldFetchObserved ? await fetchRelayObservedStatus(observedPort) : null;
|
|
489
645
|
if (!relayUrl) {
|
|
490
646
|
const fallbackPort = isValidPort(observedStatus?.port) ? observedStatus?.port : observedPort;
|
|
491
|
-
relayUrl = fallbackPort ?
|
|
647
|
+
relayUrl = fallbackPort ? buildLoopbackSessionRelayEndpoint(fallbackPort, { extensionLegacy }) : null;
|
|
492
648
|
}
|
|
493
649
|
const extensionReady = Boolean(
|
|
494
650
|
relayUrl && (relayStatus?.extensionHandshakeComplete || relayStatus?.extensionConnected || observedStatus?.extensionHandshakeComplete || observedStatus?.extensionConnected)
|
|
@@ -523,7 +679,7 @@ function createLaunchTool(deps) {
|
|
|
523
679
|
return failure(buildExtensionMissingMessage(diagnostics.message), "extension_not_connected");
|
|
524
680
|
}
|
|
525
681
|
try {
|
|
526
|
-
result = await deps.manager.connectRelay(relayUrl);
|
|
682
|
+
result = args.startUrl ? await deps.manager.connectRelay(relayUrl, { startUrl: args.startUrl }) : await deps.manager.connectRelay(relayUrl);
|
|
527
683
|
usedRelay = true;
|
|
528
684
|
} catch (error) {
|
|
529
685
|
const errorMessage = serializeError(error).message;
|
|
@@ -561,9 +717,6 @@ function createLaunchTool(deps) {
|
|
|
561
717
|
return failure(buildManagedFailureMessage(error), "launch_failed");
|
|
562
718
|
}
|
|
563
719
|
}
|
|
564
|
-
if (usedRelay && args.startUrl && result.activeTargetId) {
|
|
565
|
-
await deps.manager.goto(result.sessionId, args.startUrl, "load", 3e4);
|
|
566
|
-
}
|
|
567
720
|
const warnings = result.warnings ?? [];
|
|
568
721
|
return ok({
|
|
569
722
|
sessionId: result.sessionId,
|
|
@@ -748,21 +901,6 @@ async function fetchRelayObservedStatus(port) {
|
|
|
748
901
|
// src/tools/connect.ts
|
|
749
902
|
import { tool as tool2 } from "@opencode-ai/plugin";
|
|
750
903
|
var z2 = tool2.schema;
|
|
751
|
-
function normalizeRelayEndpoint(wsEndpoint, path, allowBase) {
|
|
752
|
-
if (!wsEndpoint) return null;
|
|
753
|
-
try {
|
|
754
|
-
const url = new URL(wsEndpoint);
|
|
755
|
-
if (url.protocol !== "ws:" && url.protocol !== "wss:") return null;
|
|
756
|
-
if (url.hostname !== "127.0.0.1" && url.hostname !== "localhost") return null;
|
|
757
|
-
if (!url.port || !/^\d+$/.test(url.port)) return null;
|
|
758
|
-
const normalizedPath = url.pathname.endsWith("/") ? url.pathname.slice(0, -1) : url.pathname;
|
|
759
|
-
if (!allowBase && normalizedPath === "") return null;
|
|
760
|
-
if (normalizedPath && normalizedPath !== `/${path}`) return null;
|
|
761
|
-
return `${url.protocol}//${url.hostname}:${url.port}/${path}`;
|
|
762
|
-
} catch {
|
|
763
|
-
return null;
|
|
764
|
-
}
|
|
765
|
-
}
|
|
766
904
|
function createConnectTool(deps) {
|
|
767
905
|
return tool2({
|
|
768
906
|
description: "Connect to an existing Chrome CDP endpoint or extension relay.",
|
|
@@ -770,6 +908,7 @@ function createConnectTool(deps) {
|
|
|
770
908
|
wsEndpoint: z2.string().optional().describe("Full WebSocket endpoint to connect to"),
|
|
771
909
|
host: z2.string().optional().describe("Host for /json/version lookup"),
|
|
772
910
|
port: z2.number().int().optional().describe("Port for /json/version lookup"),
|
|
911
|
+
startUrl: z2.string().optional().describe("Open this URL immediately after connect"),
|
|
773
912
|
extensionLegacy: z2.boolean().optional().describe("Use legacy extension relay (/cdp) instead of ops")
|
|
774
913
|
},
|
|
775
914
|
async execute(args) {
|
|
@@ -777,17 +916,19 @@ function createConnectTool(deps) {
|
|
|
777
916
|
await deps.relay?.refresh?.();
|
|
778
917
|
const wsEndpoint = args.wsEndpoint;
|
|
779
918
|
const extensionLegacy = args.extensionLegacy === true;
|
|
919
|
+
const startUrl = typeof args.startUrl === "string" && args.startUrl.trim().length > 0 ? args.startUrl.trim() : void 0;
|
|
780
920
|
const hasExplicitCdp = Boolean(wsEndpoint || args.host || args.port);
|
|
781
921
|
const relayUrl = extensionLegacy ? deps.relay?.getCdpUrl() ?? null : deps.relay?.getOpsUrl?.() ?? null;
|
|
782
|
-
const
|
|
783
|
-
const
|
|
784
|
-
if (
|
|
785
|
-
return failure(
|
|
922
|
+
const parsedRelayEndpoint = classifySessionRelayEndpoint(wsEndpoint);
|
|
923
|
+
const resolvedRelayEndpoint = parsedRelayEndpoint ? resolveSessionRelayRoute(parsedRelayEndpoint, { extensionLegacy }) : null;
|
|
924
|
+
if (resolvedRelayEndpoint && "code" in resolvedRelayEndpoint) {
|
|
925
|
+
return failure(resolvedRelayEndpoint.message, resolvedRelayEndpoint.code);
|
|
786
926
|
}
|
|
787
|
-
const relayEndpoint = relayUrl && wsEndpoint === relayUrl ? relayUrl :
|
|
927
|
+
const relayEndpoint = relayUrl && wsEndpoint === relayUrl ? relayUrl : resolvedRelayEndpoint?.normalizedEndpoint ?? null;
|
|
928
|
+
const preferredRelayEndpoint = relayEndpoint ?? (!hasExplicitCdp ? relayUrl : null);
|
|
788
929
|
let result;
|
|
789
|
-
if (
|
|
790
|
-
result = await deps.manager.connectRelay(
|
|
930
|
+
if (preferredRelayEndpoint) {
|
|
931
|
+
result = startUrl ? await deps.manager.connectRelay(preferredRelayEndpoint, { startUrl }) : await deps.manager.connectRelay(preferredRelayEndpoint);
|
|
791
932
|
} else {
|
|
792
933
|
if (!hasExplicitCdp) {
|
|
793
934
|
return failure("Extension relay not available. Connect the extension or pass wsEndpoint/host/port.", "extension_not_connected");
|
|
@@ -795,7 +936,8 @@ function createConnectTool(deps) {
|
|
|
795
936
|
result = await deps.manager.connect({
|
|
796
937
|
wsEndpoint,
|
|
797
938
|
host: args.host,
|
|
798
|
-
port: args.port
|
|
939
|
+
port: args.port,
|
|
940
|
+
startUrl
|
|
799
941
|
});
|
|
800
942
|
}
|
|
801
943
|
return ok({
|
|
@@ -947,15 +1089,56 @@ function createStatusTool(deps) {
|
|
|
947
1089
|
});
|
|
948
1090
|
}
|
|
949
1091
|
|
|
950
|
-
// src/tools/
|
|
1092
|
+
// src/tools/session_inspector.ts
|
|
951
1093
|
import { tool as tool5 } from "@opencode-ai/plugin";
|
|
952
1094
|
var z5 = tool5.schema;
|
|
953
|
-
function
|
|
1095
|
+
function createSessionInspectorTool(deps) {
|
|
954
1096
|
return tool5({
|
|
955
|
-
description: "
|
|
1097
|
+
description: "Capture a session-first diagnostic bundle with relay health, trace proof, and a suggested next action.",
|
|
956
1098
|
args: {
|
|
957
1099
|
sessionId: z5.string().describe("Session id"),
|
|
958
|
-
includeUrls: z5.boolean().optional().describe("Include target URLs")
|
|
1100
|
+
includeUrls: z5.boolean().optional().describe("Include target URLs in the targets summary"),
|
|
1101
|
+
sinceConsoleSeq: z5.number().int().optional().describe("Resume cursor for console events"),
|
|
1102
|
+
sinceNetworkSeq: z5.number().int().optional().describe("Resume cursor for network events"),
|
|
1103
|
+
sinceExceptionSeq: z5.number().int().optional().describe("Resume cursor for exception events"),
|
|
1104
|
+
max: z5.number().int().optional().describe("Max events per diagnostics channel"),
|
|
1105
|
+
requestId: z5.string().optional().describe("Optional trace request id")
|
|
1106
|
+
},
|
|
1107
|
+
async execute(args) {
|
|
1108
|
+
try {
|
|
1109
|
+
const inspector = deps.manager.createSessionInspector?.();
|
|
1110
|
+
if (!inspector) {
|
|
1111
|
+
return failure("Session inspector is unavailable for the current runtime.", "session_inspector_unavailable");
|
|
1112
|
+
}
|
|
1113
|
+
await deps.relay?.refresh?.().catch(() => void 0);
|
|
1114
|
+
const relayStatus = deps.relay?.status?.() ?? null;
|
|
1115
|
+
const result = await inspectSession(inspector, {
|
|
1116
|
+
sessionId: args.sessionId,
|
|
1117
|
+
includeUrls: args.includeUrls,
|
|
1118
|
+
sinceConsoleSeq: args.sinceConsoleSeq,
|
|
1119
|
+
sinceNetworkSeq: args.sinceNetworkSeq,
|
|
1120
|
+
sinceExceptionSeq: args.sinceExceptionSeq,
|
|
1121
|
+
max: args.max,
|
|
1122
|
+
requestId: args.requestId,
|
|
1123
|
+
relayStatus
|
|
1124
|
+
});
|
|
1125
|
+
return ok(result);
|
|
1126
|
+
} catch (error) {
|
|
1127
|
+
return failure(serializeError(error).message, "session_inspector_failed");
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
});
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
// src/tools/targets_list.ts
|
|
1134
|
+
import { tool as tool6 } from "@opencode-ai/plugin";
|
|
1135
|
+
var z6 = tool6.schema;
|
|
1136
|
+
function createTargetsListTool(deps) {
|
|
1137
|
+
return tool6({
|
|
1138
|
+
description: "List targets (tabs) in the current session.",
|
|
1139
|
+
args: {
|
|
1140
|
+
sessionId: z6.string().describe("Session id"),
|
|
1141
|
+
includeUrls: z6.boolean().optional().describe("Include target URLs")
|
|
959
1142
|
},
|
|
960
1143
|
async execute(args) {
|
|
961
1144
|
try {
|
|
@@ -972,14 +1155,14 @@ function createTargetsListTool(deps) {
|
|
|
972
1155
|
}
|
|
973
1156
|
|
|
974
1157
|
// src/tools/target_use.ts
|
|
975
|
-
import { tool as
|
|
976
|
-
var
|
|
1158
|
+
import { tool as tool7 } from "@opencode-ai/plugin";
|
|
1159
|
+
var z7 = tool7.schema;
|
|
977
1160
|
function createTargetUseTool(deps) {
|
|
978
|
-
return
|
|
1161
|
+
return tool7({
|
|
979
1162
|
description: "Set the active target (tab).",
|
|
980
1163
|
args: {
|
|
981
|
-
sessionId:
|
|
982
|
-
targetId:
|
|
1164
|
+
sessionId: z7.string().describe("Session id"),
|
|
1165
|
+
targetId: z7.string().describe("Target id")
|
|
983
1166
|
},
|
|
984
1167
|
async execute(args) {
|
|
985
1168
|
try {
|
|
@@ -997,14 +1180,14 @@ function createTargetUseTool(deps) {
|
|
|
997
1180
|
}
|
|
998
1181
|
|
|
999
1182
|
// src/tools/target_new.ts
|
|
1000
|
-
import { tool as
|
|
1001
|
-
var
|
|
1183
|
+
import { tool as tool8 } from "@opencode-ai/plugin";
|
|
1184
|
+
var z8 = tool8.schema;
|
|
1002
1185
|
function createTargetNewTool(deps) {
|
|
1003
|
-
return
|
|
1186
|
+
return tool8({
|
|
1004
1187
|
description: "Open a new target (tab).",
|
|
1005
1188
|
args: {
|
|
1006
|
-
sessionId:
|
|
1007
|
-
url:
|
|
1189
|
+
sessionId: z8.string().describe("Session id"),
|
|
1190
|
+
url: z8.string().optional().describe("Optional URL to open")
|
|
1008
1191
|
},
|
|
1009
1192
|
async execute(args) {
|
|
1010
1193
|
try {
|
|
@@ -1018,14 +1201,14 @@ function createTargetNewTool(deps) {
|
|
|
1018
1201
|
}
|
|
1019
1202
|
|
|
1020
1203
|
// src/tools/target_close.ts
|
|
1021
|
-
import { tool as
|
|
1022
|
-
var
|
|
1204
|
+
import { tool as tool9 } from "@opencode-ai/plugin";
|
|
1205
|
+
var z9 = tool9.schema;
|
|
1023
1206
|
function createTargetCloseTool(deps) {
|
|
1024
|
-
return
|
|
1207
|
+
return tool9({
|
|
1025
1208
|
description: "Close a target (tab).",
|
|
1026
1209
|
args: {
|
|
1027
|
-
sessionId:
|
|
1028
|
-
targetId:
|
|
1210
|
+
sessionId: z9.string().describe("Session id"),
|
|
1211
|
+
targetId: z9.string().describe("Target id")
|
|
1029
1212
|
},
|
|
1030
1213
|
async execute(args) {
|
|
1031
1214
|
try {
|
|
@@ -1039,15 +1222,15 @@ function createTargetCloseTool(deps) {
|
|
|
1039
1222
|
}
|
|
1040
1223
|
|
|
1041
1224
|
// src/tools/page.ts
|
|
1042
|
-
import { tool as
|
|
1043
|
-
var
|
|
1225
|
+
import { tool as tool10 } from "@opencode-ai/plugin";
|
|
1226
|
+
var z10 = tool10.schema;
|
|
1044
1227
|
function createPageTool(deps) {
|
|
1045
|
-
return
|
|
1228
|
+
return tool10({
|
|
1046
1229
|
description: "Open or focus a named page, optionally navigating to a URL.",
|
|
1047
1230
|
args: {
|
|
1048
|
-
sessionId:
|
|
1049
|
-
name:
|
|
1050
|
-
url:
|
|
1231
|
+
sessionId: z10.string().describe("Active browser session id"),
|
|
1232
|
+
name: z10.string().describe("Stable page name"),
|
|
1233
|
+
url: z10.string().optional().describe("Optional URL to open")
|
|
1051
1234
|
},
|
|
1052
1235
|
async execute(args) {
|
|
1053
1236
|
try {
|
|
@@ -1066,13 +1249,13 @@ function createPageTool(deps) {
|
|
|
1066
1249
|
}
|
|
1067
1250
|
|
|
1068
1251
|
// src/tools/list.ts
|
|
1069
|
-
import { tool as
|
|
1070
|
-
var
|
|
1252
|
+
import { tool as tool11 } from "@opencode-ai/plugin";
|
|
1253
|
+
var z11 = tool11.schema;
|
|
1071
1254
|
function createListTool(deps) {
|
|
1072
|
-
return
|
|
1255
|
+
return tool11({
|
|
1073
1256
|
description: "List named pages in the current session.",
|
|
1074
1257
|
args: {
|
|
1075
|
-
sessionId:
|
|
1258
|
+
sessionId: z11.string().describe("Active browser session id")
|
|
1076
1259
|
},
|
|
1077
1260
|
async execute(args) {
|
|
1078
1261
|
try {
|
|
@@ -1086,14 +1269,14 @@ function createListTool(deps) {
|
|
|
1086
1269
|
}
|
|
1087
1270
|
|
|
1088
1271
|
// src/tools/close.ts
|
|
1089
|
-
import { tool as
|
|
1090
|
-
var
|
|
1272
|
+
import { tool as tool12 } from "@opencode-ai/plugin";
|
|
1273
|
+
var z12 = tool12.schema;
|
|
1091
1274
|
function createCloseTool(deps) {
|
|
1092
|
-
return
|
|
1275
|
+
return tool12({
|
|
1093
1276
|
description: "Close a named page within the current session.",
|
|
1094
1277
|
args: {
|
|
1095
|
-
sessionId:
|
|
1096
|
-
name:
|
|
1278
|
+
sessionId: z12.string().describe("Active browser session id"),
|
|
1279
|
+
name: z12.string().describe("Named page to close")
|
|
1097
1280
|
},
|
|
1098
1281
|
async execute(args) {
|
|
1099
1282
|
try {
|
|
@@ -1107,17 +1290,18 @@ function createCloseTool(deps) {
|
|
|
1107
1290
|
}
|
|
1108
1291
|
|
|
1109
1292
|
// src/tools/goto.ts
|
|
1110
|
-
import { tool as
|
|
1111
|
-
var
|
|
1112
|
-
var waitUntilSchema =
|
|
1293
|
+
import { tool as tool13 } from "@opencode-ai/plugin";
|
|
1294
|
+
var z13 = tool13.schema;
|
|
1295
|
+
var waitUntilSchema = z13.enum(["domcontentloaded", "load", "networkidle"]);
|
|
1113
1296
|
function createGotoTool(deps) {
|
|
1114
|
-
return
|
|
1297
|
+
return tool13({
|
|
1115
1298
|
description: "Navigate the active target to a URL.",
|
|
1116
1299
|
args: {
|
|
1117
|
-
sessionId:
|
|
1118
|
-
url:
|
|
1300
|
+
sessionId: z13.string().describe("Session id"),
|
|
1301
|
+
url: z13.string().describe("URL to navigate to"),
|
|
1302
|
+
targetId: z13.string().optional().describe("Optional target id"),
|
|
1119
1303
|
waitUntil: waitUntilSchema.optional().describe("Load state to wait for"),
|
|
1120
|
-
timeoutMs:
|
|
1304
|
+
timeoutMs: z13.number().int().optional().describe("Timeout in milliseconds")
|
|
1121
1305
|
},
|
|
1122
1306
|
async execute(args) {
|
|
1123
1307
|
try {
|
|
@@ -1125,7 +1309,9 @@ function createGotoTool(deps) {
|
|
|
1125
1309
|
args.sessionId,
|
|
1126
1310
|
args.url,
|
|
1127
1311
|
args.waitUntil ?? "load",
|
|
1128
|
-
args.timeoutMs ?? 3e4
|
|
1312
|
+
args.timeoutMs ?? 3e4,
|
|
1313
|
+
void 0,
|
|
1314
|
+
args.targetId
|
|
1129
1315
|
);
|
|
1130
1316
|
return ok(result);
|
|
1131
1317
|
} catch (error) {
|
|
@@ -1136,19 +1322,20 @@ function createGotoTool(deps) {
|
|
|
1136
1322
|
}
|
|
1137
1323
|
|
|
1138
1324
|
// src/tools/wait.ts
|
|
1139
|
-
import { tool as
|
|
1140
|
-
var
|
|
1141
|
-
var waitUntilSchema2 =
|
|
1142
|
-
var waitStateSchema =
|
|
1325
|
+
import { tool as tool14 } from "@opencode-ai/plugin";
|
|
1326
|
+
var z14 = tool14.schema;
|
|
1327
|
+
var waitUntilSchema2 = z14.enum(["domcontentloaded", "load", "networkidle"]);
|
|
1328
|
+
var waitStateSchema = z14.enum(["attached", "visible", "hidden"]);
|
|
1143
1329
|
function createWaitTool(deps) {
|
|
1144
|
-
return
|
|
1330
|
+
return tool14({
|
|
1145
1331
|
description: "Wait for a load state or a ref state.",
|
|
1146
1332
|
args: {
|
|
1147
|
-
sessionId:
|
|
1333
|
+
sessionId: z14.string().describe("Session id"),
|
|
1334
|
+
targetId: z14.string().optional().describe("Optional target id"),
|
|
1148
1335
|
until: waitUntilSchema2.optional().describe("Load state to wait for"),
|
|
1149
|
-
ref:
|
|
1336
|
+
ref: z14.string().optional().describe("Ref to wait for"),
|
|
1150
1337
|
state: waitStateSchema.optional().describe("Ref state to wait for"),
|
|
1151
|
-
timeoutMs:
|
|
1338
|
+
timeoutMs: z14.number().int().optional().describe("Timeout in milliseconds")
|
|
1152
1339
|
},
|
|
1153
1340
|
async execute(args) {
|
|
1154
1341
|
try {
|
|
@@ -1157,7 +1344,8 @@ function createWaitTool(deps) {
|
|
|
1157
1344
|
args.sessionId,
|
|
1158
1345
|
args.ref,
|
|
1159
1346
|
args.state ?? "attached",
|
|
1160
|
-
args.timeoutMs ?? 3e4
|
|
1347
|
+
args.timeoutMs ?? 3e4,
|
|
1348
|
+
args.targetId
|
|
1161
1349
|
);
|
|
1162
1350
|
return ok(result2);
|
|
1163
1351
|
}
|
|
@@ -1167,7 +1355,8 @@ function createWaitTool(deps) {
|
|
|
1167
1355
|
const result = await deps.manager.waitForLoad(
|
|
1168
1356
|
args.sessionId,
|
|
1169
1357
|
args.until,
|
|
1170
|
-
args.timeoutMs ?? 3e4
|
|
1358
|
+
args.timeoutMs ?? 3e4,
|
|
1359
|
+
args.targetId
|
|
1171
1360
|
);
|
|
1172
1361
|
return ok(result);
|
|
1173
1362
|
} catch (error) {
|
|
@@ -1178,17 +1367,18 @@ function createWaitTool(deps) {
|
|
|
1178
1367
|
}
|
|
1179
1368
|
|
|
1180
1369
|
// src/tools/snapshot.ts
|
|
1181
|
-
import { tool as
|
|
1182
|
-
var
|
|
1183
|
-
var formatSchema =
|
|
1370
|
+
import { tool as tool15 } from "@opencode-ai/plugin";
|
|
1371
|
+
var z15 = tool15.schema;
|
|
1372
|
+
var formatSchema = z15.enum(["outline", "actionables"]);
|
|
1184
1373
|
function createSnapshotTool(deps) {
|
|
1185
|
-
return
|
|
1374
|
+
return tool15({
|
|
1186
1375
|
description: "Capture a snapshot of the current page and return refs.",
|
|
1187
1376
|
args: {
|
|
1188
|
-
sessionId:
|
|
1377
|
+
sessionId: z15.string().describe("Session id"),
|
|
1378
|
+
targetId: z15.string().optional().describe("Optional target id"),
|
|
1189
1379
|
format: formatSchema.optional().describe("Snapshot format"),
|
|
1190
|
-
maxChars:
|
|
1191
|
-
cursor:
|
|
1380
|
+
maxChars: z15.number().int().optional().describe("Max characters for snapshot output"),
|
|
1381
|
+
cursor: z15.string().optional().describe("Cursor for paging")
|
|
1192
1382
|
},
|
|
1193
1383
|
async execute(args) {
|
|
1194
1384
|
try {
|
|
@@ -1197,7 +1387,8 @@ function createSnapshotTool(deps) {
|
|
|
1197
1387
|
args.sessionId,
|
|
1198
1388
|
args.format ?? "outline",
|
|
1199
1389
|
args.maxChars ?? config.snapshot.maxChars,
|
|
1200
|
-
args.cursor
|
|
1390
|
+
args.cursor,
|
|
1391
|
+
args.targetId
|
|
1201
1392
|
);
|
|
1202
1393
|
return ok(result);
|
|
1203
1394
|
} catch (error) {
|
|
@@ -1207,19 +1398,50 @@ function createSnapshotTool(deps) {
|
|
|
1207
1398
|
});
|
|
1208
1399
|
}
|
|
1209
1400
|
|
|
1401
|
+
// src/tools/review.ts
|
|
1402
|
+
import { tool as tool16 } from "@opencode-ai/plugin";
|
|
1403
|
+
var z16 = tool16.schema;
|
|
1404
|
+
function createReviewTool(deps) {
|
|
1405
|
+
return tool16({
|
|
1406
|
+
description: "Capture a first-class review payload with status and actionables.",
|
|
1407
|
+
args: {
|
|
1408
|
+
sessionId: z16.string().describe("Session id"),
|
|
1409
|
+
targetId: z16.string().optional().describe("Optional target id"),
|
|
1410
|
+
maxChars: z16.number().int().optional().describe("Max characters for review output"),
|
|
1411
|
+
cursor: z16.string().optional().describe("Cursor for paging")
|
|
1412
|
+
},
|
|
1413
|
+
async execute(args) {
|
|
1414
|
+
try {
|
|
1415
|
+
const config = deps.config.get();
|
|
1416
|
+
const result = await buildBrowserReviewResult({
|
|
1417
|
+
manager: deps.manager,
|
|
1418
|
+
sessionId: args.sessionId,
|
|
1419
|
+
targetId: args.targetId,
|
|
1420
|
+
maxChars: args.maxChars ?? config.snapshot.maxChars,
|
|
1421
|
+
cursor: args.cursor
|
|
1422
|
+
});
|
|
1423
|
+
return ok(result);
|
|
1424
|
+
} catch (error) {
|
|
1425
|
+
return failure(serializeError(error).message, "review_failed");
|
|
1426
|
+
}
|
|
1427
|
+
}
|
|
1428
|
+
});
|
|
1429
|
+
}
|
|
1430
|
+
|
|
1210
1431
|
// src/tools/click.ts
|
|
1211
|
-
import { tool as
|
|
1212
|
-
var
|
|
1432
|
+
import { tool as tool17 } from "@opencode-ai/plugin";
|
|
1433
|
+
var z17 = tool17.schema;
|
|
1213
1434
|
function createClickTool(deps) {
|
|
1214
|
-
return
|
|
1435
|
+
return tool17({
|
|
1215
1436
|
description: "Click a referenced element.",
|
|
1216
1437
|
args: {
|
|
1217
|
-
sessionId:
|
|
1218
|
-
|
|
1438
|
+
sessionId: z17.string().describe("Session id"),
|
|
1439
|
+
targetId: z17.string().optional().describe("Optional target id"),
|
|
1440
|
+
ref: z17.string().describe("Element ref")
|
|
1219
1441
|
},
|
|
1220
1442
|
async execute(args) {
|
|
1221
1443
|
try {
|
|
1222
|
-
const result = await deps.manager.click(args.sessionId, args.ref);
|
|
1444
|
+
const result = await deps.manager.click(args.sessionId, args.ref, args.targetId);
|
|
1223
1445
|
return ok(result);
|
|
1224
1446
|
} catch (error) {
|
|
1225
1447
|
return failure(serializeError(error).message, "click_failed");
|
|
@@ -1229,18 +1451,19 @@ function createClickTool(deps) {
|
|
|
1229
1451
|
}
|
|
1230
1452
|
|
|
1231
1453
|
// src/tools/hover.ts
|
|
1232
|
-
import { tool as
|
|
1233
|
-
var
|
|
1454
|
+
import { tool as tool18 } from "@opencode-ai/plugin";
|
|
1455
|
+
var z18 = tool18.schema;
|
|
1234
1456
|
function createHoverTool(deps) {
|
|
1235
|
-
return
|
|
1457
|
+
return tool18({
|
|
1236
1458
|
description: "Hover over an element by ref.",
|
|
1237
1459
|
args: {
|
|
1238
|
-
sessionId:
|
|
1239
|
-
|
|
1460
|
+
sessionId: z18.string().describe("Active browser session id"),
|
|
1461
|
+
targetId: z18.string().optional().describe("Optional target id"),
|
|
1462
|
+
ref: z18.string().describe("Element ref from snapshot")
|
|
1240
1463
|
},
|
|
1241
1464
|
async execute(args) {
|
|
1242
1465
|
try {
|
|
1243
|
-
const result = await deps.manager.hover(args.sessionId, args.ref);
|
|
1466
|
+
const result = await deps.manager.hover(args.sessionId, args.ref, args.targetId);
|
|
1244
1467
|
return ok(result);
|
|
1245
1468
|
} catch (error) {
|
|
1246
1469
|
return failure(serializeError(error).message, "hover_failed");
|
|
@@ -1250,19 +1473,20 @@ function createHoverTool(deps) {
|
|
|
1250
1473
|
}
|
|
1251
1474
|
|
|
1252
1475
|
// src/tools/press.ts
|
|
1253
|
-
import { tool as
|
|
1254
|
-
var
|
|
1476
|
+
import { tool as tool19 } from "@opencode-ai/plugin";
|
|
1477
|
+
var z19 = tool19.schema;
|
|
1255
1478
|
function createPressTool(deps) {
|
|
1256
|
-
return
|
|
1479
|
+
return tool19({
|
|
1257
1480
|
description: "Press a keyboard key, optionally focusing a ref first.",
|
|
1258
1481
|
args: {
|
|
1259
|
-
sessionId:
|
|
1260
|
-
|
|
1261
|
-
|
|
1482
|
+
sessionId: z19.string().describe("Active browser session id"),
|
|
1483
|
+
targetId: z19.string().optional().describe("Optional target id"),
|
|
1484
|
+
key: z19.string().describe("Keyboard key to press, e.g. Enter or ArrowDown"),
|
|
1485
|
+
ref: z19.string().optional().describe("Optional element ref to focus first")
|
|
1262
1486
|
},
|
|
1263
1487
|
async execute(args) {
|
|
1264
1488
|
try {
|
|
1265
|
-
const result = await deps.manager.press(args.sessionId, args.key, args.ref);
|
|
1489
|
+
const result = await deps.manager.press(args.sessionId, args.key, args.ref, args.targetId);
|
|
1266
1490
|
return ok(result);
|
|
1267
1491
|
} catch (error) {
|
|
1268
1492
|
return failure(serializeError(error).message, "press_failed");
|
|
@@ -1272,18 +1496,19 @@ function createPressTool(deps) {
|
|
|
1272
1496
|
}
|
|
1273
1497
|
|
|
1274
1498
|
// src/tools/check.ts
|
|
1275
|
-
import { tool as
|
|
1276
|
-
var
|
|
1499
|
+
import { tool as tool20 } from "@opencode-ai/plugin";
|
|
1500
|
+
var z20 = tool20.schema;
|
|
1277
1501
|
function createCheckTool(deps) {
|
|
1278
|
-
return
|
|
1502
|
+
return tool20({
|
|
1279
1503
|
description: "Check a checkbox or toggle by ref.",
|
|
1280
1504
|
args: {
|
|
1281
|
-
sessionId:
|
|
1282
|
-
|
|
1505
|
+
sessionId: z20.string().describe("Active browser session id"),
|
|
1506
|
+
targetId: z20.string().optional().describe("Optional target id"),
|
|
1507
|
+
ref: z20.string().describe("Element ref from snapshot")
|
|
1283
1508
|
},
|
|
1284
1509
|
async execute(args) {
|
|
1285
1510
|
try {
|
|
1286
|
-
const result = await deps.manager.check(args.sessionId, args.ref);
|
|
1511
|
+
const result = await deps.manager.check(args.sessionId, args.ref, args.targetId);
|
|
1287
1512
|
return ok(result);
|
|
1288
1513
|
} catch (error) {
|
|
1289
1514
|
return failure(serializeError(error).message, "check_failed");
|
|
@@ -1293,18 +1518,19 @@ function createCheckTool(deps) {
|
|
|
1293
1518
|
}
|
|
1294
1519
|
|
|
1295
1520
|
// src/tools/uncheck.ts
|
|
1296
|
-
import { tool as
|
|
1297
|
-
var
|
|
1521
|
+
import { tool as tool21 } from "@opencode-ai/plugin";
|
|
1522
|
+
var z21 = tool21.schema;
|
|
1298
1523
|
function createUncheckTool(deps) {
|
|
1299
|
-
return
|
|
1524
|
+
return tool21({
|
|
1300
1525
|
description: "Uncheck a checkbox or toggle by ref.",
|
|
1301
1526
|
args: {
|
|
1302
|
-
sessionId:
|
|
1303
|
-
|
|
1527
|
+
sessionId: z21.string().describe("Active browser session id"),
|
|
1528
|
+
targetId: z21.string().optional().describe("Optional target id"),
|
|
1529
|
+
ref: z21.string().describe("Element ref from snapshot")
|
|
1304
1530
|
},
|
|
1305
1531
|
async execute(args) {
|
|
1306
1532
|
try {
|
|
1307
|
-
const result = await deps.manager.uncheck(args.sessionId, args.ref);
|
|
1533
|
+
const result = await deps.manager.uncheck(args.sessionId, args.ref, args.targetId);
|
|
1308
1534
|
return ok(result);
|
|
1309
1535
|
} catch (error) {
|
|
1310
1536
|
return failure(serializeError(error).message, "uncheck_failed");
|
|
@@ -1314,17 +1540,18 @@ function createUncheckTool(deps) {
|
|
|
1314
1540
|
}
|
|
1315
1541
|
|
|
1316
1542
|
// src/tools/type.ts
|
|
1317
|
-
import { tool as
|
|
1318
|
-
var
|
|
1543
|
+
import { tool as tool22 } from "@opencode-ai/plugin";
|
|
1544
|
+
var z22 = tool22.schema;
|
|
1319
1545
|
function createTypeTool(deps) {
|
|
1320
|
-
return
|
|
1546
|
+
return tool22({
|
|
1321
1547
|
description: "Type text into a referenced input.",
|
|
1322
1548
|
args: {
|
|
1323
|
-
sessionId:
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1549
|
+
sessionId: z22.string().describe("Session id"),
|
|
1550
|
+
targetId: z22.string().optional().describe("Optional target id"),
|
|
1551
|
+
ref: z22.string().describe("Element ref"),
|
|
1552
|
+
text: z22.string().describe("Text to type"),
|
|
1553
|
+
clear: z22.boolean().optional().describe("Clear before typing"),
|
|
1554
|
+
submit: z22.boolean().optional().describe("Press Enter after typing")
|
|
1328
1555
|
},
|
|
1329
1556
|
async execute(args) {
|
|
1330
1557
|
try {
|
|
@@ -1333,7 +1560,8 @@ function createTypeTool(deps) {
|
|
|
1333
1560
|
args.ref,
|
|
1334
1561
|
args.text,
|
|
1335
1562
|
Boolean(args.clear),
|
|
1336
|
-
Boolean(args.submit)
|
|
1563
|
+
Boolean(args.submit),
|
|
1564
|
+
args.targetId
|
|
1337
1565
|
);
|
|
1338
1566
|
return ok(result);
|
|
1339
1567
|
} catch (error) {
|
|
@@ -1344,19 +1572,20 @@ function createTypeTool(deps) {
|
|
|
1344
1572
|
}
|
|
1345
1573
|
|
|
1346
1574
|
// src/tools/select.ts
|
|
1347
|
-
import { tool as
|
|
1348
|
-
var
|
|
1575
|
+
import { tool as tool23 } from "@opencode-ai/plugin";
|
|
1576
|
+
var z23 = tool23.schema;
|
|
1349
1577
|
function createSelectTool(deps) {
|
|
1350
|
-
return
|
|
1578
|
+
return tool23({
|
|
1351
1579
|
description: "Select options in a referenced select element.",
|
|
1352
1580
|
args: {
|
|
1353
|
-
sessionId:
|
|
1354
|
-
|
|
1355
|
-
|
|
1581
|
+
sessionId: z23.string().describe("Session id"),
|
|
1582
|
+
targetId: z23.string().optional().describe("Optional target id"),
|
|
1583
|
+
ref: z23.string().describe("Element ref"),
|
|
1584
|
+
values: z23.array(z23.string()).describe("Values to select")
|
|
1356
1585
|
},
|
|
1357
1586
|
async execute(args) {
|
|
1358
1587
|
try {
|
|
1359
|
-
await deps.manager.select(args.sessionId, args.ref, args.values);
|
|
1588
|
+
await deps.manager.select(args.sessionId, args.ref, args.values, args.targetId);
|
|
1360
1589
|
return ok({});
|
|
1361
1590
|
} catch (error) {
|
|
1362
1591
|
return failure(serializeError(error).message, "select_failed");
|
|
@@ -1366,19 +1595,20 @@ function createSelectTool(deps) {
|
|
|
1366
1595
|
}
|
|
1367
1596
|
|
|
1368
1597
|
// src/tools/scroll.ts
|
|
1369
|
-
import { tool as
|
|
1370
|
-
var
|
|
1598
|
+
import { tool as tool24 } from "@opencode-ai/plugin";
|
|
1599
|
+
var z24 = tool24.schema;
|
|
1371
1600
|
function createScrollTool(deps) {
|
|
1372
|
-
return
|
|
1601
|
+
return tool24({
|
|
1373
1602
|
description: "Scroll the page or a referenced element.",
|
|
1374
1603
|
args: {
|
|
1375
|
-
sessionId:
|
|
1376
|
-
|
|
1377
|
-
|
|
1604
|
+
sessionId: z24.string().describe("Session id"),
|
|
1605
|
+
targetId: z24.string().optional().describe("Optional target id"),
|
|
1606
|
+
dy: z24.number().describe("Scroll delta in pixels"),
|
|
1607
|
+
ref: z24.string().optional().describe("Optional element ref to scroll")
|
|
1378
1608
|
},
|
|
1379
1609
|
async execute(args) {
|
|
1380
1610
|
try {
|
|
1381
|
-
await deps.manager.scroll(args.sessionId, args.dy, args.ref);
|
|
1611
|
+
await deps.manager.scroll(args.sessionId, args.dy, args.ref, args.targetId);
|
|
1382
1612
|
return ok({});
|
|
1383
1613
|
} catch (error) {
|
|
1384
1614
|
return failure(serializeError(error).message, "scroll_failed");
|
|
@@ -1388,18 +1618,19 @@ function createScrollTool(deps) {
|
|
|
1388
1618
|
}
|
|
1389
1619
|
|
|
1390
1620
|
// src/tools/scroll_into_view.ts
|
|
1391
|
-
import { tool as
|
|
1392
|
-
var
|
|
1621
|
+
import { tool as tool25 } from "@opencode-ai/plugin";
|
|
1622
|
+
var z25 = tool25.schema;
|
|
1393
1623
|
function createScrollIntoViewTool(deps) {
|
|
1394
|
-
return
|
|
1624
|
+
return tool25({
|
|
1395
1625
|
description: "Scroll an element into view by ref.",
|
|
1396
1626
|
args: {
|
|
1397
|
-
sessionId:
|
|
1398
|
-
|
|
1627
|
+
sessionId: z25.string().describe("Active browser session id"),
|
|
1628
|
+
targetId: z25.string().optional().describe("Optional target id"),
|
|
1629
|
+
ref: z25.string().describe("Element ref from snapshot")
|
|
1399
1630
|
},
|
|
1400
1631
|
async execute(args) {
|
|
1401
1632
|
try {
|
|
1402
|
-
const result = await deps.manager.scrollIntoView(args.sessionId, args.ref);
|
|
1633
|
+
const result = await deps.manager.scrollIntoView(args.sessionId, args.ref, args.targetId);
|
|
1403
1634
|
return ok(result);
|
|
1404
1635
|
} catch (error) {
|
|
1405
1636
|
return failure(serializeError(error).message, "scroll_into_view_failed");
|
|
@@ -1408,23 +1639,172 @@ function createScrollIntoViewTool(deps) {
|
|
|
1408
1639
|
});
|
|
1409
1640
|
}
|
|
1410
1641
|
|
|
1642
|
+
// src/tools/upload.ts
|
|
1643
|
+
import { tool as tool26 } from "@opencode-ai/plugin";
|
|
1644
|
+
var z26 = tool26.schema;
|
|
1645
|
+
function createUploadTool(deps) {
|
|
1646
|
+
return tool26({
|
|
1647
|
+
description: "Upload files to an input or chooser by ref.",
|
|
1648
|
+
args: {
|
|
1649
|
+
sessionId: z26.string().describe("Active browser session id"),
|
|
1650
|
+
targetId: z26.string().optional().describe("Optional target id"),
|
|
1651
|
+
ref: z26.string().describe("Element ref"),
|
|
1652
|
+
files: z26.array(z26.string()).min(1).describe("Local host file paths")
|
|
1653
|
+
},
|
|
1654
|
+
async execute(args) {
|
|
1655
|
+
try {
|
|
1656
|
+
const result = await deps.manager.upload(args.sessionId, {
|
|
1657
|
+
targetId: args.targetId,
|
|
1658
|
+
ref: args.ref,
|
|
1659
|
+
files: args.files
|
|
1660
|
+
});
|
|
1661
|
+
return ok(result);
|
|
1662
|
+
} catch (error) {
|
|
1663
|
+
return failure(serializeError(error).message, "upload_failed");
|
|
1664
|
+
}
|
|
1665
|
+
}
|
|
1666
|
+
});
|
|
1667
|
+
}
|
|
1668
|
+
|
|
1669
|
+
// src/tools/pointer_move.ts
|
|
1670
|
+
import { tool as tool27 } from "@opencode-ai/plugin";
|
|
1671
|
+
var z27 = tool27.schema;
|
|
1672
|
+
function createPointerMoveTool(deps) {
|
|
1673
|
+
return tool27({
|
|
1674
|
+
description: "Move the pointer to viewport coordinates.",
|
|
1675
|
+
args: {
|
|
1676
|
+
sessionId: z27.string().describe("Active browser session id"),
|
|
1677
|
+
targetId: z27.string().optional().describe("Optional target id"),
|
|
1678
|
+
x: z27.number().describe("Viewport x coordinate"),
|
|
1679
|
+
y: z27.number().describe("Viewport y coordinate"),
|
|
1680
|
+
steps: z27.number().int().positive().optional().describe("Optional move interpolation step count")
|
|
1681
|
+
},
|
|
1682
|
+
async execute(args) {
|
|
1683
|
+
try {
|
|
1684
|
+
const result = await deps.manager.pointerMove(args.sessionId, args.x, args.y, args.targetId, args.steps);
|
|
1685
|
+
return ok(result);
|
|
1686
|
+
} catch (error) {
|
|
1687
|
+
return failure(serializeError(error).message, "pointer_move_failed");
|
|
1688
|
+
}
|
|
1689
|
+
}
|
|
1690
|
+
});
|
|
1691
|
+
}
|
|
1692
|
+
|
|
1693
|
+
// src/tools/pointer_down.ts
|
|
1694
|
+
import { tool as tool28 } from "@opencode-ai/plugin";
|
|
1695
|
+
var z28 = tool28.schema;
|
|
1696
|
+
function createPointerDownTool(deps) {
|
|
1697
|
+
return tool28({
|
|
1698
|
+
description: "Move to viewport coordinates and press a mouse button.",
|
|
1699
|
+
args: {
|
|
1700
|
+
sessionId: z28.string().describe("Active browser session id"),
|
|
1701
|
+
targetId: z28.string().optional().describe("Optional target id"),
|
|
1702
|
+
x: z28.number().describe("Viewport x coordinate"),
|
|
1703
|
+
y: z28.number().describe("Viewport y coordinate"),
|
|
1704
|
+
button: z28.enum(["left", "middle", "right"]).optional().describe("Mouse button to press"),
|
|
1705
|
+
clickCount: z28.number().int().positive().optional().describe("Associated click count")
|
|
1706
|
+
},
|
|
1707
|
+
async execute(args) {
|
|
1708
|
+
try {
|
|
1709
|
+
const result = await deps.manager.pointerDown(
|
|
1710
|
+
args.sessionId,
|
|
1711
|
+
args.x,
|
|
1712
|
+
args.y,
|
|
1713
|
+
args.targetId,
|
|
1714
|
+
args.button,
|
|
1715
|
+
args.clickCount
|
|
1716
|
+
);
|
|
1717
|
+
return ok(result);
|
|
1718
|
+
} catch (error) {
|
|
1719
|
+
return failure(serializeError(error).message, "pointer_down_failed");
|
|
1720
|
+
}
|
|
1721
|
+
}
|
|
1722
|
+
});
|
|
1723
|
+
}
|
|
1724
|
+
|
|
1725
|
+
// src/tools/pointer_up.ts
|
|
1726
|
+
import { tool as tool29 } from "@opencode-ai/plugin";
|
|
1727
|
+
var z29 = tool29.schema;
|
|
1728
|
+
function createPointerUpTool(deps) {
|
|
1729
|
+
return tool29({
|
|
1730
|
+
description: "Move to viewport coordinates and release a mouse button.",
|
|
1731
|
+
args: {
|
|
1732
|
+
sessionId: z29.string().describe("Active browser session id"),
|
|
1733
|
+
targetId: z29.string().optional().describe("Optional target id"),
|
|
1734
|
+
x: z29.number().describe("Viewport x coordinate"),
|
|
1735
|
+
y: z29.number().describe("Viewport y coordinate"),
|
|
1736
|
+
button: z29.enum(["left", "middle", "right"]).optional().describe("Mouse button to release"),
|
|
1737
|
+
clickCount: z29.number().int().positive().optional().describe("Associated click count")
|
|
1738
|
+
},
|
|
1739
|
+
async execute(args) {
|
|
1740
|
+
try {
|
|
1741
|
+
const result = await deps.manager.pointerUp(
|
|
1742
|
+
args.sessionId,
|
|
1743
|
+
args.x,
|
|
1744
|
+
args.y,
|
|
1745
|
+
args.targetId,
|
|
1746
|
+
args.button,
|
|
1747
|
+
args.clickCount
|
|
1748
|
+
);
|
|
1749
|
+
return ok(result);
|
|
1750
|
+
} catch (error) {
|
|
1751
|
+
return failure(serializeError(error).message, "pointer_up_failed");
|
|
1752
|
+
}
|
|
1753
|
+
}
|
|
1754
|
+
});
|
|
1755
|
+
}
|
|
1756
|
+
|
|
1757
|
+
// src/tools/pointer_drag.ts
|
|
1758
|
+
import { tool as tool30 } from "@opencode-ai/plugin";
|
|
1759
|
+
var z30 = tool30.schema;
|
|
1760
|
+
function createPointerDragTool(deps) {
|
|
1761
|
+
return tool30({
|
|
1762
|
+
description: "Drag the pointer between two viewport coordinates.",
|
|
1763
|
+
args: {
|
|
1764
|
+
sessionId: z30.string().describe("Active browser session id"),
|
|
1765
|
+
targetId: z30.string().optional().describe("Optional target id"),
|
|
1766
|
+
fromX: z30.number().describe("Start x coordinate"),
|
|
1767
|
+
fromY: z30.number().describe("Start y coordinate"),
|
|
1768
|
+
toX: z30.number().describe("End x coordinate"),
|
|
1769
|
+
toY: z30.number().describe("End y coordinate"),
|
|
1770
|
+
steps: z30.number().int().positive().optional().describe("Optional drag interpolation step count")
|
|
1771
|
+
},
|
|
1772
|
+
async execute(args) {
|
|
1773
|
+
try {
|
|
1774
|
+
const result = await deps.manager.drag(
|
|
1775
|
+
args.sessionId,
|
|
1776
|
+
{ x: args.fromX, y: args.fromY },
|
|
1777
|
+
{ x: args.toX, y: args.toY },
|
|
1778
|
+
args.targetId,
|
|
1779
|
+
args.steps
|
|
1780
|
+
);
|
|
1781
|
+
return ok(result);
|
|
1782
|
+
} catch (error) {
|
|
1783
|
+
return failure(serializeError(error).message, "pointer_drag_failed");
|
|
1784
|
+
}
|
|
1785
|
+
}
|
|
1786
|
+
});
|
|
1787
|
+
}
|
|
1788
|
+
|
|
1411
1789
|
// src/tools/dom_get_html.ts
|
|
1412
|
-
import { tool as
|
|
1413
|
-
var
|
|
1790
|
+
import { tool as tool31 } from "@opencode-ai/plugin";
|
|
1791
|
+
var z31 = tool31.schema;
|
|
1414
1792
|
function createDomGetHtmlTool(deps) {
|
|
1415
|
-
return
|
|
1793
|
+
return tool31({
|
|
1416
1794
|
description: "Get outerHTML for a referenced element.",
|
|
1417
1795
|
args: {
|
|
1418
|
-
sessionId:
|
|
1419
|
-
|
|
1420
|
-
|
|
1796
|
+
sessionId: z31.string().describe("Session id"),
|
|
1797
|
+
targetId: z31.string().optional().describe("Optional target id"),
|
|
1798
|
+
ref: z31.string().describe("Element ref"),
|
|
1799
|
+
maxChars: z31.number().int().optional().describe("Max characters")
|
|
1421
1800
|
},
|
|
1422
1801
|
async execute(args) {
|
|
1423
1802
|
try {
|
|
1424
1803
|
const result = await deps.manager.domGetHtml(
|
|
1425
1804
|
args.sessionId,
|
|
1426
1805
|
args.ref,
|
|
1427
|
-
args.maxChars ?? 8e3
|
|
1806
|
+
args.maxChars ?? 8e3,
|
|
1807
|
+
args.targetId
|
|
1428
1808
|
);
|
|
1429
1809
|
return ok({
|
|
1430
1810
|
ref: args.ref,
|
|
@@ -1439,22 +1819,24 @@ function createDomGetHtmlTool(deps) {
|
|
|
1439
1819
|
}
|
|
1440
1820
|
|
|
1441
1821
|
// src/tools/dom_get_text.ts
|
|
1442
|
-
import { tool as
|
|
1443
|
-
var
|
|
1822
|
+
import { tool as tool32 } from "@opencode-ai/plugin";
|
|
1823
|
+
var z32 = tool32.schema;
|
|
1444
1824
|
function createDomGetTextTool(deps) {
|
|
1445
|
-
return
|
|
1825
|
+
return tool32({
|
|
1446
1826
|
description: "Get inner text for a referenced element.",
|
|
1447
1827
|
args: {
|
|
1448
|
-
sessionId:
|
|
1449
|
-
|
|
1450
|
-
|
|
1828
|
+
sessionId: z32.string().describe("Session id"),
|
|
1829
|
+
targetId: z32.string().optional().describe("Optional target id"),
|
|
1830
|
+
ref: z32.string().describe("Element ref"),
|
|
1831
|
+
maxChars: z32.number().int().optional().describe("Max characters")
|
|
1451
1832
|
},
|
|
1452
1833
|
async execute(args) {
|
|
1453
1834
|
try {
|
|
1454
1835
|
const result = await deps.manager.domGetText(
|
|
1455
1836
|
args.sessionId,
|
|
1456
1837
|
args.ref,
|
|
1457
|
-
args.maxChars ?? 8e3
|
|
1838
|
+
args.maxChars ?? 8e3,
|
|
1839
|
+
args.targetId
|
|
1458
1840
|
);
|
|
1459
1841
|
return ok({
|
|
1460
1842
|
ref: args.ref,
|
|
@@ -1469,19 +1851,20 @@ function createDomGetTextTool(deps) {
|
|
|
1469
1851
|
}
|
|
1470
1852
|
|
|
1471
1853
|
// src/tools/get_attr.ts
|
|
1472
|
-
import { tool as
|
|
1473
|
-
var
|
|
1854
|
+
import { tool as tool33 } from "@opencode-ai/plugin";
|
|
1855
|
+
var z33 = tool33.schema;
|
|
1474
1856
|
function createGetAttrTool(deps) {
|
|
1475
|
-
return
|
|
1857
|
+
return tool33({
|
|
1476
1858
|
description: "Get a DOM attribute value by ref.",
|
|
1477
1859
|
args: {
|
|
1478
|
-
sessionId:
|
|
1479
|
-
|
|
1480
|
-
|
|
1860
|
+
sessionId: z33.string().describe("Active browser session id"),
|
|
1861
|
+
targetId: z33.string().optional().describe("Optional target id"),
|
|
1862
|
+
ref: z33.string().describe("Element ref from snapshot"),
|
|
1863
|
+
name: z33.string().describe("Attribute name, e.g. href or aria-label")
|
|
1481
1864
|
},
|
|
1482
1865
|
async execute(args) {
|
|
1483
1866
|
try {
|
|
1484
|
-
const result = await deps.manager.domGetAttr(args.sessionId, args.ref, args.name);
|
|
1867
|
+
const result = await deps.manager.domGetAttr(args.sessionId, args.ref, args.name, args.targetId);
|
|
1485
1868
|
return ok(result);
|
|
1486
1869
|
} catch (error) {
|
|
1487
1870
|
return failure(serializeError(error).message, "get_attr_failed");
|
|
@@ -1491,18 +1874,19 @@ function createGetAttrTool(deps) {
|
|
|
1491
1874
|
}
|
|
1492
1875
|
|
|
1493
1876
|
// src/tools/get_value.ts
|
|
1494
|
-
import { tool as
|
|
1495
|
-
var
|
|
1877
|
+
import { tool as tool34 } from "@opencode-ai/plugin";
|
|
1878
|
+
var z34 = tool34.schema;
|
|
1496
1879
|
function createGetValueTool(deps) {
|
|
1497
|
-
return
|
|
1880
|
+
return tool34({
|
|
1498
1881
|
description: "Get the input value for an element by ref.",
|
|
1499
1882
|
args: {
|
|
1500
|
-
sessionId:
|
|
1501
|
-
|
|
1883
|
+
sessionId: z34.string().describe("Active browser session id"),
|
|
1884
|
+
targetId: z34.string().optional().describe("Optional target id"),
|
|
1885
|
+
ref: z34.string().describe("Element ref from snapshot")
|
|
1502
1886
|
},
|
|
1503
1887
|
async execute(args) {
|
|
1504
1888
|
try {
|
|
1505
|
-
const result = await deps.manager.domGetValue(args.sessionId, args.ref);
|
|
1889
|
+
const result = await deps.manager.domGetValue(args.sessionId, args.ref, args.targetId);
|
|
1506
1890
|
return ok(result);
|
|
1507
1891
|
} catch (error) {
|
|
1508
1892
|
return failure(serializeError(error).message, "get_value_failed");
|
|
@@ -1512,18 +1896,19 @@ function createGetValueTool(deps) {
|
|
|
1512
1896
|
}
|
|
1513
1897
|
|
|
1514
1898
|
// src/tools/is_visible.ts
|
|
1515
|
-
import { tool as
|
|
1516
|
-
var
|
|
1899
|
+
import { tool as tool35 } from "@opencode-ai/plugin";
|
|
1900
|
+
var z35 = tool35.schema;
|
|
1517
1901
|
function createIsVisibleTool(deps) {
|
|
1518
|
-
return
|
|
1902
|
+
return tool35({
|
|
1519
1903
|
description: "Check if an element is visible by ref.",
|
|
1520
1904
|
args: {
|
|
1521
|
-
sessionId:
|
|
1522
|
-
|
|
1905
|
+
sessionId: z35.string().describe("Active browser session id"),
|
|
1906
|
+
targetId: z35.string().optional().describe("Optional target id"),
|
|
1907
|
+
ref: z35.string().describe("Element ref from snapshot")
|
|
1523
1908
|
},
|
|
1524
1909
|
async execute(args) {
|
|
1525
1910
|
try {
|
|
1526
|
-
const result = await deps.manager.domIsVisible(args.sessionId, args.ref);
|
|
1911
|
+
const result = await deps.manager.domIsVisible(args.sessionId, args.ref, args.targetId);
|
|
1527
1912
|
return ok(result);
|
|
1528
1913
|
} catch (error) {
|
|
1529
1914
|
return failure(serializeError(error).message, "is_visible_failed");
|
|
@@ -1533,18 +1918,19 @@ function createIsVisibleTool(deps) {
|
|
|
1533
1918
|
}
|
|
1534
1919
|
|
|
1535
1920
|
// src/tools/is_enabled.ts
|
|
1536
|
-
import { tool as
|
|
1537
|
-
var
|
|
1921
|
+
import { tool as tool36 } from "@opencode-ai/plugin";
|
|
1922
|
+
var z36 = tool36.schema;
|
|
1538
1923
|
function createIsEnabledTool(deps) {
|
|
1539
|
-
return
|
|
1924
|
+
return tool36({
|
|
1540
1925
|
description: "Check if an element is enabled by ref.",
|
|
1541
1926
|
args: {
|
|
1542
|
-
sessionId:
|
|
1543
|
-
|
|
1927
|
+
sessionId: z36.string().describe("Active browser session id"),
|
|
1928
|
+
targetId: z36.string().optional().describe("Optional target id"),
|
|
1929
|
+
ref: z36.string().describe("Element ref from snapshot")
|
|
1544
1930
|
},
|
|
1545
1931
|
async execute(args) {
|
|
1546
1932
|
try {
|
|
1547
|
-
const result = await deps.manager.domIsEnabled(args.sessionId, args.ref);
|
|
1933
|
+
const result = await deps.manager.domIsEnabled(args.sessionId, args.ref, args.targetId);
|
|
1548
1934
|
return ok(result);
|
|
1549
1935
|
} catch (error) {
|
|
1550
1936
|
return failure(serializeError(error).message, "is_enabled_failed");
|
|
@@ -1554,18 +1940,19 @@ function createIsEnabledTool(deps) {
|
|
|
1554
1940
|
}
|
|
1555
1941
|
|
|
1556
1942
|
// src/tools/is_checked.ts
|
|
1557
|
-
import { tool as
|
|
1558
|
-
var
|
|
1943
|
+
import { tool as tool37 } from "@opencode-ai/plugin";
|
|
1944
|
+
var z37 = tool37.schema;
|
|
1559
1945
|
function createIsCheckedTool(deps) {
|
|
1560
|
-
return
|
|
1946
|
+
return tool37({
|
|
1561
1947
|
description: "Check if an element is checked by ref.",
|
|
1562
1948
|
args: {
|
|
1563
|
-
sessionId:
|
|
1564
|
-
|
|
1949
|
+
sessionId: z37.string().describe("Active browser session id"),
|
|
1950
|
+
targetId: z37.string().optional().describe("Optional target id"),
|
|
1951
|
+
ref: z37.string().describe("Element ref from snapshot")
|
|
1565
1952
|
},
|
|
1566
1953
|
async execute(args) {
|
|
1567
1954
|
try {
|
|
1568
|
-
const result = await deps.manager.domIsChecked(args.sessionId, args.ref);
|
|
1955
|
+
const result = await deps.manager.domIsChecked(args.sessionId, args.ref, args.targetId);
|
|
1569
1956
|
return ok(result);
|
|
1570
1957
|
} catch (error) {
|
|
1571
1958
|
return failure(serializeError(error).message, "is_checked_failed");
|
|
@@ -1575,20 +1962,20 @@ function createIsCheckedTool(deps) {
|
|
|
1575
1962
|
}
|
|
1576
1963
|
|
|
1577
1964
|
// src/tools/run.ts
|
|
1578
|
-
import { tool as
|
|
1579
|
-
var
|
|
1580
|
-
var stepSchema =
|
|
1581
|
-
action:
|
|
1582
|
-
args:
|
|
1965
|
+
import { tool as tool38 } from "@opencode-ai/plugin";
|
|
1966
|
+
var z38 = tool38.schema;
|
|
1967
|
+
var stepSchema = z38.object({
|
|
1968
|
+
action: z38.string().describe("Action name"),
|
|
1969
|
+
args: z38.record(z38.string(), z38.unknown()).optional().describe("Action arguments")
|
|
1583
1970
|
});
|
|
1584
1971
|
function createRunTool(deps) {
|
|
1585
|
-
return
|
|
1972
|
+
return tool38({
|
|
1586
1973
|
description: "Run multiple actions in a single tool call.",
|
|
1587
1974
|
args: {
|
|
1588
|
-
sessionId:
|
|
1589
|
-
steps:
|
|
1590
|
-
stopOnError:
|
|
1591
|
-
maxSnapshotChars:
|
|
1975
|
+
sessionId: z38.string().describe("Session id"),
|
|
1976
|
+
steps: z38.array(stepSchema).describe("Steps to execute"),
|
|
1977
|
+
stopOnError: z38.boolean().optional().describe("Stop when a step fails"),
|
|
1978
|
+
maxSnapshotChars: z38.number().int().optional().describe("Default maxChars for snapshot steps")
|
|
1592
1979
|
},
|
|
1593
1980
|
async execute(args) {
|
|
1594
1981
|
try {
|
|
@@ -1621,13 +2008,13 @@ function normalizeSteps(steps, maxSnapshotChars) {
|
|
|
1621
2008
|
}
|
|
1622
2009
|
|
|
1623
2010
|
// src/tools/prompting_guide.ts
|
|
1624
|
-
import { tool as
|
|
1625
|
-
var
|
|
2011
|
+
import { tool as tool39 } from "@opencode-ai/plugin";
|
|
2012
|
+
var z39 = tool39.schema;
|
|
1626
2013
|
function createPromptingGuideTool(deps) {
|
|
1627
|
-
return
|
|
1628
|
-
description:
|
|
2014
|
+
return tool39({
|
|
2015
|
+
description: `Start here for first-contact OpenDevBrowser guidance, including ${onboarding_metadata_default.skillName} ${onboarding_metadata_default.skillTopic}.`,
|
|
1629
2016
|
args: {
|
|
1630
|
-
topic:
|
|
2017
|
+
topic: z39.string().optional().describe("Optional topic for guidance")
|
|
1631
2018
|
},
|
|
1632
2019
|
async execute(args) {
|
|
1633
2020
|
try {
|
|
@@ -1641,15 +2028,15 @@ function createPromptingGuideTool(deps) {
|
|
|
1641
2028
|
}
|
|
1642
2029
|
|
|
1643
2030
|
// src/tools/console_poll.ts
|
|
1644
|
-
import { tool as
|
|
1645
|
-
var
|
|
2031
|
+
import { tool as tool40 } from "@opencode-ai/plugin";
|
|
2032
|
+
var z40 = tool40.schema;
|
|
1646
2033
|
function createConsolePollTool(deps) {
|
|
1647
|
-
return
|
|
2034
|
+
return tool40({
|
|
1648
2035
|
description: "Poll console events for the active target.",
|
|
1649
2036
|
args: {
|
|
1650
|
-
sessionId:
|
|
1651
|
-
sinceSeq:
|
|
1652
|
-
max:
|
|
2037
|
+
sessionId: z40.string().describe("Session id"),
|
|
2038
|
+
sinceSeq: z40.number().int().optional().describe("Sequence to resume from"),
|
|
2039
|
+
max: z40.number().int().optional().describe("Max events to return")
|
|
1653
2040
|
},
|
|
1654
2041
|
async execute(args) {
|
|
1655
2042
|
try {
|
|
@@ -1667,15 +2054,15 @@ function createConsolePollTool(deps) {
|
|
|
1667
2054
|
}
|
|
1668
2055
|
|
|
1669
2056
|
// src/tools/network_poll.ts
|
|
1670
|
-
import { tool as
|
|
1671
|
-
var
|
|
2057
|
+
import { tool as tool41 } from "@opencode-ai/plugin";
|
|
2058
|
+
var z41 = tool41.schema;
|
|
1672
2059
|
function createNetworkPollTool(deps) {
|
|
1673
|
-
return
|
|
2060
|
+
return tool41({
|
|
1674
2061
|
description: "Poll network events for the active target.",
|
|
1675
2062
|
args: {
|
|
1676
|
-
sessionId:
|
|
1677
|
-
sinceSeq:
|
|
1678
|
-
max:
|
|
2063
|
+
sessionId: z41.string().describe("Session id"),
|
|
2064
|
+
sinceSeq: z41.number().int().optional().describe("Sequence to resume from"),
|
|
2065
|
+
max: z41.number().int().optional().describe("Max events to return")
|
|
1679
2066
|
},
|
|
1680
2067
|
async execute(args) {
|
|
1681
2068
|
try {
|
|
@@ -1693,18 +2080,18 @@ function createNetworkPollTool(deps) {
|
|
|
1693
2080
|
}
|
|
1694
2081
|
|
|
1695
2082
|
// src/tools/debug_trace_snapshot.ts
|
|
1696
|
-
import { tool as
|
|
1697
|
-
var
|
|
2083
|
+
import { tool as tool42 } from "@opencode-ai/plugin";
|
|
2084
|
+
var z42 = tool42.schema;
|
|
1698
2085
|
function createDebugTraceSnapshotTool(deps) {
|
|
1699
|
-
return
|
|
2086
|
+
return tool42({
|
|
1700
2087
|
description: "Capture a combined debug trace snapshot (page + console + network + exceptions).",
|
|
1701
2088
|
args: {
|
|
1702
|
-
sessionId:
|
|
1703
|
-
sinceConsoleSeq:
|
|
1704
|
-
sinceNetworkSeq:
|
|
1705
|
-
sinceExceptionSeq:
|
|
1706
|
-
max:
|
|
1707
|
-
requestId:
|
|
2089
|
+
sessionId: z42.string().describe("Session id"),
|
|
2090
|
+
sinceConsoleSeq: z42.number().int().optional().describe("Resume cursor for console events"),
|
|
2091
|
+
sinceNetworkSeq: z42.number().int().optional().describe("Resume cursor for network events"),
|
|
2092
|
+
sinceExceptionSeq: z42.number().int().optional().describe("Resume cursor for exception events"),
|
|
2093
|
+
max: z42.number().int().optional().describe("Max events per channel"),
|
|
2094
|
+
requestId: z42.string().optional().describe("Optional trace request id")
|
|
1708
2095
|
},
|
|
1709
2096
|
async execute(args) {
|
|
1710
2097
|
try {
|
|
@@ -1814,8 +2201,8 @@ function extractHosts(events) {
|
|
|
1814
2201
|
}
|
|
1815
2202
|
|
|
1816
2203
|
// src/tools/cookie_import.ts
|
|
1817
|
-
import { tool as
|
|
1818
|
-
var
|
|
2204
|
+
import { tool as tool43 } from "@opencode-ai/plugin";
|
|
2205
|
+
var z43 = tool43.schema;
|
|
1819
2206
|
function validateCookieRecord(cookie) {
|
|
1820
2207
|
const name = cookie.name?.trim();
|
|
1821
2208
|
if (!name) {
|
|
@@ -1894,23 +2281,23 @@ function validateCookieRecord(cookie) {
|
|
|
1894
2281
|
};
|
|
1895
2282
|
}
|
|
1896
2283
|
function createCookieImportTool(deps) {
|
|
1897
|
-
return
|
|
2284
|
+
return tool43({
|
|
1898
2285
|
description: "Import validated cookies into the current session context.",
|
|
1899
2286
|
args: {
|
|
1900
|
-
sessionId:
|
|
1901
|
-
cookies:
|
|
1902
|
-
name:
|
|
1903
|
-
value:
|
|
1904
|
-
url:
|
|
1905
|
-
domain:
|
|
1906
|
-
path:
|
|
1907
|
-
expires:
|
|
1908
|
-
httpOnly:
|
|
1909
|
-
secure:
|
|
1910
|
-
sameSite:
|
|
2287
|
+
sessionId: z43.string().describe("Session id"),
|
|
2288
|
+
cookies: z43.array(z43.object({
|
|
2289
|
+
name: z43.string().min(1),
|
|
2290
|
+
value: z43.string(),
|
|
2291
|
+
url: z43.string().optional(),
|
|
2292
|
+
domain: z43.string().optional(),
|
|
2293
|
+
path: z43.string().optional(),
|
|
2294
|
+
expires: z43.number().optional(),
|
|
2295
|
+
httpOnly: z43.boolean().optional(),
|
|
2296
|
+
secure: z43.boolean().optional(),
|
|
2297
|
+
sameSite: z43.enum(["Strict", "Lax", "None"]).optional()
|
|
1911
2298
|
})).min(1).describe("Cookies to import"),
|
|
1912
|
-
strict:
|
|
1913
|
-
requestId:
|
|
2299
|
+
strict: z43.boolean().optional().describe("Reject on first invalid cookie (default true)"),
|
|
2300
|
+
requestId: z43.string().optional().describe("Optional trace request id")
|
|
1914
2301
|
},
|
|
1915
2302
|
async execute(args) {
|
|
1916
2303
|
try {
|
|
@@ -1952,8 +2339,8 @@ function createCookieImportTool(deps) {
|
|
|
1952
2339
|
}
|
|
1953
2340
|
|
|
1954
2341
|
// src/tools/cookie_list.ts
|
|
1955
|
-
import { tool as
|
|
1956
|
-
var
|
|
2342
|
+
import { tool as tool44 } from "@opencode-ai/plugin";
|
|
2343
|
+
var z44 = tool44.schema;
|
|
1957
2344
|
function normalizeCookieUrls(urls) {
|
|
1958
2345
|
if (!urls || urls.length === 0) {
|
|
1959
2346
|
return void 0;
|
|
@@ -1984,12 +2371,12 @@ function normalizeCookieUrls(urls) {
|
|
|
1984
2371
|
return normalized;
|
|
1985
2372
|
}
|
|
1986
2373
|
function createCookieListTool(deps) {
|
|
1987
|
-
return
|
|
2374
|
+
return tool44({
|
|
1988
2375
|
description: "List cookies in the current session context with optional URL filtering.",
|
|
1989
2376
|
args: {
|
|
1990
|
-
sessionId:
|
|
1991
|
-
urls:
|
|
1992
|
-
requestId:
|
|
2377
|
+
sessionId: z44.string().describe("Session id"),
|
|
2378
|
+
urls: z44.array(z44.string().min(1)).optional().describe("Optional URL filters for cookie scoping"),
|
|
2379
|
+
requestId: z44.string().optional().describe("Optional trace request id")
|
|
1993
2380
|
},
|
|
1994
2381
|
async execute(args) {
|
|
1995
2382
|
try {
|
|
@@ -2029,11 +2416,24 @@ function createCookieListTool(deps) {
|
|
|
2029
2416
|
}
|
|
2030
2417
|
|
|
2031
2418
|
// src/tools/macro_resolve.ts
|
|
2032
|
-
import { tool as
|
|
2033
|
-
|
|
2419
|
+
import { tool as tool45 } from "@opencode-ai/plugin";
|
|
2420
|
+
|
|
2421
|
+
// src/tools/workflow-runtime.ts
|
|
2422
|
+
var resolveProviderRuntime = async (deps, options) => {
|
|
2423
|
+
return resolveBundledProviderRuntime({
|
|
2424
|
+
existingRuntime: deps.providerRuntime,
|
|
2425
|
+
config: deps.config?.get?.(),
|
|
2426
|
+
manager: deps.manager,
|
|
2427
|
+
browserFallbackPort: deps.browserFallbackPort,
|
|
2428
|
+
init: options?.init
|
|
2429
|
+
});
|
|
2430
|
+
};
|
|
2431
|
+
|
|
2432
|
+
// src/tools/macro_resolve.ts
|
|
2433
|
+
var z45 = tool45.schema;
|
|
2034
2434
|
async function loadMacroRuntime() {
|
|
2035
2435
|
try {
|
|
2036
|
-
const module = await import("./macros-
|
|
2436
|
+
const module = await import("./macros-ND2M7LWU.js");
|
|
2037
2437
|
return module;
|
|
2038
2438
|
} catch {
|
|
2039
2439
|
return null;
|
|
@@ -2078,13 +2478,13 @@ function parseFallbackMacro(expression, defaultProvider) {
|
|
|
2078
2478
|
};
|
|
2079
2479
|
}
|
|
2080
2480
|
function createMacroResolveTool(deps) {
|
|
2081
|
-
return
|
|
2481
|
+
return tool45({
|
|
2082
2482
|
description: "Resolve a macro expression to a provider action with provenance metadata.",
|
|
2083
2483
|
args: {
|
|
2084
|
-
expression:
|
|
2085
|
-
defaultProvider:
|
|
2086
|
-
includeCatalog:
|
|
2087
|
-
execute:
|
|
2484
|
+
expression: z45.string().min(2).describe('Macro expression, e.g. @web.search("query")'),
|
|
2485
|
+
defaultProvider: z45.string().optional().describe("Default provider fallback"),
|
|
2486
|
+
includeCatalog: z45.boolean().optional().describe("Include available runtime macro names"),
|
|
2487
|
+
execute: z45.boolean().optional().describe("Execute the resolved provider action and include execution payload")
|
|
2088
2488
|
},
|
|
2089
2489
|
async execute(args) {
|
|
2090
2490
|
try {
|
|
@@ -2113,15 +2513,11 @@ function createMacroResolveTool(deps) {
|
|
|
2113
2513
|
...catalog ? { catalog } : {}
|
|
2114
2514
|
});
|
|
2115
2515
|
}
|
|
2116
|
-
const
|
|
2117
|
-
const
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
browserFallbackPort: deps.browserFallbackPort
|
|
2516
|
+
const providerRuntime = await resolveProviderRuntime(deps);
|
|
2517
|
+
const execution = await executeMacroWithRuntime({
|
|
2518
|
+
resolution,
|
|
2519
|
+
runtime: providerRuntime
|
|
2121
2520
|
});
|
|
2122
|
-
const execution = shapeExecutionPayload(
|
|
2123
|
-
await executeMacroResolution(resolution, providerRuntime)
|
|
2124
|
-
);
|
|
2125
2521
|
return ok({
|
|
2126
2522
|
runtime: resolvedRuntime,
|
|
2127
2523
|
resolution,
|
|
@@ -2136,17 +2532,18 @@ function createMacroResolveTool(deps) {
|
|
|
2136
2532
|
}
|
|
2137
2533
|
|
|
2138
2534
|
// src/tools/clone_page.ts
|
|
2139
|
-
import { tool as
|
|
2140
|
-
var
|
|
2535
|
+
import { tool as tool46 } from "@opencode-ai/plugin";
|
|
2536
|
+
var z46 = tool46.schema;
|
|
2141
2537
|
function createClonePageTool(deps) {
|
|
2142
|
-
return
|
|
2538
|
+
return tool46({
|
|
2143
2539
|
description: "Export the active page as a React component and CSS bundle.",
|
|
2144
2540
|
args: {
|
|
2145
|
-
sessionId:
|
|
2541
|
+
sessionId: z46.string().describe("Active browser session id"),
|
|
2542
|
+
targetId: z46.string().optional().describe("Optional target id")
|
|
2146
2543
|
},
|
|
2147
2544
|
async execute(args) {
|
|
2148
2545
|
try {
|
|
2149
|
-
const result = await deps.manager.clonePage(args.sessionId);
|
|
2546
|
+
const result = await deps.manager.clonePage(args.sessionId, args.targetId);
|
|
2150
2547
|
return ok({ component: result.component, css: result.css, warnings: result.warnings });
|
|
2151
2548
|
} catch (error) {
|
|
2152
2549
|
return failure(serializeError(error).message, "clone_page_failed");
|
|
@@ -2156,18 +2553,19 @@ function createClonePageTool(deps) {
|
|
|
2156
2553
|
}
|
|
2157
2554
|
|
|
2158
2555
|
// src/tools/clone_component.ts
|
|
2159
|
-
import { tool as
|
|
2160
|
-
var
|
|
2556
|
+
import { tool as tool47 } from "@opencode-ai/plugin";
|
|
2557
|
+
var z47 = tool47.schema;
|
|
2161
2558
|
function createCloneComponentTool(deps) {
|
|
2162
|
-
return
|
|
2559
|
+
return tool47({
|
|
2163
2560
|
description: "Export a selected element subtree as a React component and CSS bundle.",
|
|
2164
2561
|
args: {
|
|
2165
|
-
sessionId:
|
|
2166
|
-
|
|
2562
|
+
sessionId: z47.string().describe("Active browser session id"),
|
|
2563
|
+
targetId: z47.string().optional().describe("Optional target id"),
|
|
2564
|
+
ref: z47.string().describe("Element ref from snapshot")
|
|
2167
2565
|
},
|
|
2168
2566
|
async execute(args) {
|
|
2169
2567
|
try {
|
|
2170
|
-
const result = await deps.manager.cloneComponent(args.sessionId, args.ref);
|
|
2568
|
+
const result = await deps.manager.cloneComponent(args.sessionId, args.ref, args.targetId);
|
|
2171
2569
|
return ok({ component: result.component, css: result.css, warnings: result.warnings });
|
|
2172
2570
|
} catch (error) {
|
|
2173
2571
|
return failure(serializeError(error).message, "clone_component_failed");
|
|
@@ -2177,17 +2575,18 @@ function createCloneComponentTool(deps) {
|
|
|
2177
2575
|
}
|
|
2178
2576
|
|
|
2179
2577
|
// src/tools/perf.ts
|
|
2180
|
-
import { tool as
|
|
2181
|
-
var
|
|
2578
|
+
import { tool as tool48 } from "@opencode-ai/plugin";
|
|
2579
|
+
var z48 = tool48.schema;
|
|
2182
2580
|
function createPerfTool(deps) {
|
|
2183
|
-
return
|
|
2581
|
+
return tool48({
|
|
2184
2582
|
description: "Fetch lightweight performance metrics from the active page.",
|
|
2185
2583
|
args: {
|
|
2186
|
-
sessionId:
|
|
2584
|
+
sessionId: z48.string().describe("Active browser session id"),
|
|
2585
|
+
targetId: z48.string().optional().describe("Optional target id")
|
|
2187
2586
|
},
|
|
2188
2587
|
async execute(args) {
|
|
2189
2588
|
try {
|
|
2190
|
-
const result = await deps.manager.perfMetrics(args.sessionId);
|
|
2589
|
+
const result = await deps.manager.perfMetrics(args.sessionId, args.targetId);
|
|
2191
2590
|
return ok({ metrics: result.metrics });
|
|
2192
2591
|
} catch (error) {
|
|
2193
2592
|
return failure(serializeError(error).message, "perf_failed");
|
|
@@ -2197,18 +2596,26 @@ function createPerfTool(deps) {
|
|
|
2197
2596
|
}
|
|
2198
2597
|
|
|
2199
2598
|
// src/tools/screenshot.ts
|
|
2200
|
-
import { tool as
|
|
2201
|
-
var
|
|
2599
|
+
import { tool as tool49 } from "@opencode-ai/plugin";
|
|
2600
|
+
var z49 = tool49.schema;
|
|
2202
2601
|
function createScreenshotTool(deps) {
|
|
2203
|
-
return
|
|
2602
|
+
return tool49({
|
|
2204
2603
|
description: "Capture a screenshot of the active page.",
|
|
2205
2604
|
args: {
|
|
2206
|
-
sessionId:
|
|
2207
|
-
|
|
2605
|
+
sessionId: z49.string().describe("Active browser session id"),
|
|
2606
|
+
targetId: z49.string().optional().describe("Optional target id"),
|
|
2607
|
+
path: z49.string().optional().describe("Optional output file path"),
|
|
2608
|
+
ref: z49.string().optional().describe("Optional snapshot ref for an element capture"),
|
|
2609
|
+
fullPage: z49.boolean().optional().describe("Capture the full scrollable page")
|
|
2208
2610
|
},
|
|
2209
2611
|
async execute(args) {
|
|
2210
2612
|
try {
|
|
2211
|
-
const result = await deps.manager.screenshot(args.sessionId,
|
|
2613
|
+
const result = await deps.manager.screenshot(args.sessionId, {
|
|
2614
|
+
targetId: args.targetId,
|
|
2615
|
+
path: args.path,
|
|
2616
|
+
ref: args.ref,
|
|
2617
|
+
fullPage: args.fullPage
|
|
2618
|
+
});
|
|
2212
2619
|
return ok(result);
|
|
2213
2620
|
} catch (error) {
|
|
2214
2621
|
return failure(serializeError(error).message, "screenshot_failed");
|
|
@@ -2217,29 +2624,273 @@ function createScreenshotTool(deps) {
|
|
|
2217
2624
|
});
|
|
2218
2625
|
}
|
|
2219
2626
|
|
|
2627
|
+
// src/tools/screencast_start.ts
|
|
2628
|
+
import { tool as tool50 } from "@opencode-ai/plugin";
|
|
2629
|
+
var z50 = tool50.schema;
|
|
2630
|
+
function createScreencastStartTool(deps) {
|
|
2631
|
+
return tool50({
|
|
2632
|
+
description: "Start a browser screencast replay capture.",
|
|
2633
|
+
args: {
|
|
2634
|
+
sessionId: z50.string().describe("Active browser session id"),
|
|
2635
|
+
targetId: z50.string().optional().describe("Optional target id"),
|
|
2636
|
+
outputDir: z50.string().optional().describe("Optional screencast output directory"),
|
|
2637
|
+
intervalMs: z50.number().int().min(250).optional().describe("Frame capture interval in milliseconds"),
|
|
2638
|
+
maxFrames: z50.number().int().min(1).optional().describe("Maximum frame count before auto-stop")
|
|
2639
|
+
},
|
|
2640
|
+
async execute(args) {
|
|
2641
|
+
try {
|
|
2642
|
+
const result = await deps.manager.startScreencast(args.sessionId, {
|
|
2643
|
+
targetId: args.targetId,
|
|
2644
|
+
outputDir: args.outputDir,
|
|
2645
|
+
intervalMs: args.intervalMs,
|
|
2646
|
+
maxFrames: args.maxFrames
|
|
2647
|
+
});
|
|
2648
|
+
return ok(result);
|
|
2649
|
+
} catch (error) {
|
|
2650
|
+
return failure(serializeError(error).message, "screencast_start_failed");
|
|
2651
|
+
}
|
|
2652
|
+
}
|
|
2653
|
+
});
|
|
2654
|
+
}
|
|
2655
|
+
|
|
2656
|
+
// src/tools/screencast_stop.ts
|
|
2657
|
+
import { tool as tool51 } from "@opencode-ai/plugin";
|
|
2658
|
+
var z51 = tool51.schema;
|
|
2659
|
+
function createScreencastStopTool(deps) {
|
|
2660
|
+
return tool51({
|
|
2661
|
+
description: "Stop a browser screencast replay capture.",
|
|
2662
|
+
args: {
|
|
2663
|
+
sessionId: z51.string().describe("Browser session id that owns the screencast"),
|
|
2664
|
+
screencastId: z51.string().describe("Active screencast id")
|
|
2665
|
+
},
|
|
2666
|
+
async execute(args) {
|
|
2667
|
+
try {
|
|
2668
|
+
const result = await deps.manager.stopScreencast(args.sessionId, args.screencastId);
|
|
2669
|
+
return ok(result);
|
|
2670
|
+
} catch (error) {
|
|
2671
|
+
return failure(serializeError(error).message, "screencast_stop_failed");
|
|
2672
|
+
}
|
|
2673
|
+
}
|
|
2674
|
+
});
|
|
2675
|
+
}
|
|
2676
|
+
|
|
2677
|
+
// src/tools/dialog.ts
|
|
2678
|
+
import { tool as tool52 } from "@opencode-ai/plugin";
|
|
2679
|
+
var z52 = tool52.schema;
|
|
2680
|
+
function createDialogTool(deps) {
|
|
2681
|
+
return tool52({
|
|
2682
|
+
description: "Inspect or handle a JavaScript dialog.",
|
|
2683
|
+
args: {
|
|
2684
|
+
sessionId: z52.string().describe("Active browser session id"),
|
|
2685
|
+
targetId: z52.string().optional().describe("Optional target id"),
|
|
2686
|
+
action: z52.enum(["status", "accept", "dismiss"]).optional().describe("Dialog action"),
|
|
2687
|
+
promptText: z52.string().optional().describe("Prompt text to submit when accepting a prompt dialog")
|
|
2688
|
+
},
|
|
2689
|
+
async execute(args) {
|
|
2690
|
+
try {
|
|
2691
|
+
const result = await deps.manager.dialog(args.sessionId, {
|
|
2692
|
+
targetId: args.targetId,
|
|
2693
|
+
action: args.action,
|
|
2694
|
+
promptText: args.promptText
|
|
2695
|
+
});
|
|
2696
|
+
return ok(result);
|
|
2697
|
+
} catch (error) {
|
|
2698
|
+
return failure(serializeError(error).message, "dialog_failed");
|
|
2699
|
+
}
|
|
2700
|
+
}
|
|
2701
|
+
});
|
|
2702
|
+
}
|
|
2703
|
+
|
|
2704
|
+
// src/tools/desktop_status.ts
|
|
2705
|
+
import { tool as tool53 } from "@opencode-ai/plugin";
|
|
2706
|
+
|
|
2707
|
+
// src/tools/desktop-shared.ts
|
|
2708
|
+
function isRecord(value) {
|
|
2709
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2710
|
+
}
|
|
2711
|
+
function requireDesktopRuntime(deps) {
|
|
2712
|
+
if (deps.desktopRuntime) {
|
|
2713
|
+
return deps.desktopRuntime;
|
|
2714
|
+
}
|
|
2715
|
+
return failure("Desktop runtime unavailable.", "desktop_runtime_unavailable");
|
|
2716
|
+
}
|
|
2717
|
+
function desktopResult(result) {
|
|
2718
|
+
if (result.ok) {
|
|
2719
|
+
const payload = isRecord(result.value) ? { ok: true, ...result.value, audit: result.audit } : { ok: true, value: result.value, audit: result.audit };
|
|
2720
|
+
return JSON.stringify(payload);
|
|
2721
|
+
}
|
|
2722
|
+
return JSON.stringify({
|
|
2723
|
+
ok: false,
|
|
2724
|
+
code: result.code,
|
|
2725
|
+
message: result.message,
|
|
2726
|
+
audit: result.audit
|
|
2727
|
+
});
|
|
2728
|
+
}
|
|
2729
|
+
function desktopToolFailure(error, code) {
|
|
2730
|
+
return failure(serializeError(error).message, code);
|
|
2731
|
+
}
|
|
2732
|
+
|
|
2733
|
+
// src/tools/desktop_status.ts
|
|
2734
|
+
function createDesktopStatusTool(deps) {
|
|
2735
|
+
return tool53({
|
|
2736
|
+
description: "Inspect sibling desktop observation availability.",
|
|
2737
|
+
args: {},
|
|
2738
|
+
async execute() {
|
|
2739
|
+
const runtime = requireDesktopRuntime(deps);
|
|
2740
|
+
if (typeof runtime === "string") {
|
|
2741
|
+
return runtime;
|
|
2742
|
+
}
|
|
2743
|
+
try {
|
|
2744
|
+
return ok(await runtime.status());
|
|
2745
|
+
} catch (error) {
|
|
2746
|
+
return desktopToolFailure(error, "desktop_status_failed");
|
|
2747
|
+
}
|
|
2748
|
+
}
|
|
2749
|
+
});
|
|
2750
|
+
}
|
|
2751
|
+
|
|
2752
|
+
// src/tools/desktop_windows.ts
|
|
2753
|
+
import { tool as tool54 } from "@opencode-ai/plugin";
|
|
2754
|
+
var z53 = tool54.schema;
|
|
2755
|
+
function createDesktopWindowsTool(deps) {
|
|
2756
|
+
return tool54({
|
|
2757
|
+
description: "List observable desktop windows.",
|
|
2758
|
+
args: {
|
|
2759
|
+
reason: z53.string().optional().describe("Optional audit reason")
|
|
2760
|
+
},
|
|
2761
|
+
async execute(args) {
|
|
2762
|
+
const runtime = requireDesktopRuntime(deps);
|
|
2763
|
+
if (typeof runtime === "string") {
|
|
2764
|
+
return runtime;
|
|
2765
|
+
}
|
|
2766
|
+
try {
|
|
2767
|
+
return desktopResult(await runtime.listWindows(args.reason));
|
|
2768
|
+
} catch (error) {
|
|
2769
|
+
return desktopToolFailure(error, "desktop_windows_failed");
|
|
2770
|
+
}
|
|
2771
|
+
}
|
|
2772
|
+
});
|
|
2773
|
+
}
|
|
2774
|
+
|
|
2775
|
+
// src/tools/desktop_active_window.ts
|
|
2776
|
+
import { tool as tool55 } from "@opencode-ai/plugin";
|
|
2777
|
+
var z54 = tool55.schema;
|
|
2778
|
+
function createDesktopActiveWindowTool(deps) {
|
|
2779
|
+
return tool55({
|
|
2780
|
+
description: "Inspect the active desktop window.",
|
|
2781
|
+
args: {
|
|
2782
|
+
reason: z54.string().optional().describe("Optional audit reason")
|
|
2783
|
+
},
|
|
2784
|
+
async execute(args) {
|
|
2785
|
+
const runtime = requireDesktopRuntime(deps);
|
|
2786
|
+
if (typeof runtime === "string") {
|
|
2787
|
+
return runtime;
|
|
2788
|
+
}
|
|
2789
|
+
try {
|
|
2790
|
+
return desktopResult(await runtime.activeWindow(args.reason));
|
|
2791
|
+
} catch (error) {
|
|
2792
|
+
return desktopToolFailure(error, "desktop_active_window_failed");
|
|
2793
|
+
}
|
|
2794
|
+
}
|
|
2795
|
+
});
|
|
2796
|
+
}
|
|
2797
|
+
|
|
2798
|
+
// src/tools/desktop_capture_desktop.ts
|
|
2799
|
+
import { tool as tool56 } from "@opencode-ai/plugin";
|
|
2800
|
+
var z55 = tool56.schema;
|
|
2801
|
+
function createDesktopCaptureDesktopTool(deps) {
|
|
2802
|
+
return tool56({
|
|
2803
|
+
description: "Capture the current desktop surface.",
|
|
2804
|
+
args: {
|
|
2805
|
+
reason: z55.string().describe("Audit reason for the capture")
|
|
2806
|
+
},
|
|
2807
|
+
async execute(args) {
|
|
2808
|
+
const runtime = requireDesktopRuntime(deps);
|
|
2809
|
+
if (typeof runtime === "string") {
|
|
2810
|
+
return runtime;
|
|
2811
|
+
}
|
|
2812
|
+
try {
|
|
2813
|
+
return desktopResult(await runtime.captureDesktop({ reason: args.reason }));
|
|
2814
|
+
} catch (error) {
|
|
2815
|
+
return desktopToolFailure(error, "desktop_capture_desktop_failed");
|
|
2816
|
+
}
|
|
2817
|
+
}
|
|
2818
|
+
});
|
|
2819
|
+
}
|
|
2820
|
+
|
|
2821
|
+
// src/tools/desktop_capture_window.ts
|
|
2822
|
+
import { tool as tool57 } from "@opencode-ai/plugin";
|
|
2823
|
+
var z56 = tool57.schema;
|
|
2824
|
+
function createDesktopCaptureWindowTool(deps) {
|
|
2825
|
+
return tool57({
|
|
2826
|
+
description: "Capture a specific desktop window.",
|
|
2827
|
+
args: {
|
|
2828
|
+
windowId: z56.string().describe("Desktop window id"),
|
|
2829
|
+
reason: z56.string().describe("Audit reason for the capture")
|
|
2830
|
+
},
|
|
2831
|
+
async execute(args) {
|
|
2832
|
+
const runtime = requireDesktopRuntime(deps);
|
|
2833
|
+
if (typeof runtime === "string") {
|
|
2834
|
+
return runtime;
|
|
2835
|
+
}
|
|
2836
|
+
try {
|
|
2837
|
+
return desktopResult(await runtime.captureWindow(args.windowId, { reason: args.reason }));
|
|
2838
|
+
} catch (error) {
|
|
2839
|
+
return desktopToolFailure(error, "desktop_capture_window_failed");
|
|
2840
|
+
}
|
|
2841
|
+
}
|
|
2842
|
+
});
|
|
2843
|
+
}
|
|
2844
|
+
|
|
2845
|
+
// src/tools/desktop_accessibility_snapshot.ts
|
|
2846
|
+
import { tool as tool58 } from "@opencode-ai/plugin";
|
|
2847
|
+
var z57 = tool58.schema;
|
|
2848
|
+
function createDesktopAccessibilitySnapshotTool(deps) {
|
|
2849
|
+
return tool58({
|
|
2850
|
+
description: "Capture desktop accessibility state.",
|
|
2851
|
+
args: {
|
|
2852
|
+
reason: z57.string().describe("Audit reason for the accessibility snapshot"),
|
|
2853
|
+
windowId: z57.string().optional().describe("Optional desktop window id")
|
|
2854
|
+
},
|
|
2855
|
+
async execute(args) {
|
|
2856
|
+
const runtime = requireDesktopRuntime(deps);
|
|
2857
|
+
if (typeof runtime === "string") {
|
|
2858
|
+
return runtime;
|
|
2859
|
+
}
|
|
2860
|
+
try {
|
|
2861
|
+
return desktopResult(await runtime.accessibilitySnapshot(args.reason, args.windowId));
|
|
2862
|
+
} catch (error) {
|
|
2863
|
+
return desktopToolFailure(error, "desktop_accessibility_snapshot_failed");
|
|
2864
|
+
}
|
|
2865
|
+
}
|
|
2866
|
+
});
|
|
2867
|
+
}
|
|
2868
|
+
|
|
2220
2869
|
// src/tools/annotate.ts
|
|
2221
|
-
import { tool as
|
|
2222
|
-
var
|
|
2223
|
-
var screenshotModeSchema =
|
|
2224
|
-
var transportSchema =
|
|
2870
|
+
import { tool as tool59 } from "@opencode-ai/plugin";
|
|
2871
|
+
var z58 = tool59.schema;
|
|
2872
|
+
var screenshotModeSchema = z58.enum(["visible", "full", "none"]);
|
|
2873
|
+
var transportSchema = z58.enum(["auto", "direct", "relay"]);
|
|
2225
2874
|
function createAnnotateTool(deps) {
|
|
2226
|
-
return
|
|
2875
|
+
return tool59({
|
|
2227
2876
|
description: "Request interactive annotations via direct (CDP) or relay transport.",
|
|
2228
2877
|
args: {
|
|
2229
|
-
sessionId:
|
|
2878
|
+
sessionId: z58.string().describe("Session id"),
|
|
2879
|
+
stored: z58.boolean().optional().describe("Fetch the latest payload explicitly sent from popup/canvas surfaces"),
|
|
2880
|
+
includeScreenshots: z58.boolean().optional().describe("When fetching stored payloads, prefer screenshots if still available in memory"),
|
|
2230
2881
|
transport: transportSchema.optional().describe("auto | direct | relay (default: auto)"),
|
|
2231
|
-
targetId:
|
|
2232
|
-
tabId:
|
|
2233
|
-
url:
|
|
2882
|
+
targetId: z58.string().optional().describe("Optional target id for direct mode"),
|
|
2883
|
+
tabId: z58.number().int().optional().describe("Optional Chrome tab id for relay mode"),
|
|
2884
|
+
url: z58.string().optional().describe("Optional URL to open before annotating"),
|
|
2234
2885
|
screenshotMode: screenshotModeSchema.optional().describe("visible | full | none (default: visible)"),
|
|
2235
|
-
debug:
|
|
2236
|
-
context:
|
|
2237
|
-
timeoutMs:
|
|
2886
|
+
debug: z58.boolean().optional().describe("Include debug metadata"),
|
|
2887
|
+
context: z58.string().optional().describe("Optional context for the annotator"),
|
|
2888
|
+
timeoutMs: z58.number().int().optional().describe("Timeout in milliseconds")
|
|
2238
2889
|
},
|
|
2239
2890
|
async execute(args) {
|
|
2240
2891
|
try {
|
|
2241
|
-
const transport = args.transport ?? "auto";
|
|
2242
|
-
if (transport === "relay") {
|
|
2892
|
+
const transport = args.stored ? "relay" : args.transport ?? "auto";
|
|
2893
|
+
if (transport === "relay" && !args.stored) {
|
|
2243
2894
|
const status = await deps.manager.status(args.sessionId);
|
|
2244
2895
|
if (status.mode !== "extension") {
|
|
2245
2896
|
return failure("Annotations require extension mode (relay).", "annotate_requires_extension");
|
|
@@ -2248,6 +2899,8 @@ function createAnnotateTool(deps) {
|
|
|
2248
2899
|
const response = await deps.annotationManager.requestAnnotation({
|
|
2249
2900
|
sessionId: args.sessionId,
|
|
2250
2901
|
transport,
|
|
2902
|
+
stored: args.stored ?? false,
|
|
2903
|
+
includeScreenshots: args.includeScreenshots ?? true,
|
|
2251
2904
|
targetId: args.targetId,
|
|
2252
2905
|
tabId: args.tabId,
|
|
2253
2906
|
url: args.url,
|
|
@@ -2256,6 +2909,12 @@ function createAnnotateTool(deps) {
|
|
|
2256
2909
|
context: args.context,
|
|
2257
2910
|
timeoutMs: args.timeoutMs
|
|
2258
2911
|
});
|
|
2912
|
+
if (response.status === "cancelled") {
|
|
2913
|
+
return ok({
|
|
2914
|
+
cancelled: true,
|
|
2915
|
+
message: response.error?.message ?? "Annotation cancelled."
|
|
2916
|
+
});
|
|
2917
|
+
}
|
|
2259
2918
|
if (response.status !== "ok" || !response.payload) {
|
|
2260
2919
|
const message2 = response.error?.message ?? "Annotation failed.";
|
|
2261
2920
|
const code = response.error?.code ?? "annotate_failed";
|
|
@@ -2275,47 +2934,36 @@ function createAnnotateTool(deps) {
|
|
|
2275
2934
|
}
|
|
2276
2935
|
|
|
2277
2936
|
// src/tools/research_run.ts
|
|
2278
|
-
import { tool as
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
-
var
|
|
2282
|
-
|
|
2283
|
-
|
|
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"]);
|
|
2937
|
+
import { tool as tool60 } from "@opencode-ai/plugin";
|
|
2938
|
+
var z59 = tool60.schema;
|
|
2939
|
+
var sourceSelectionSchema = z59.enum(["auto", "web", "community", "social", "shopping", "all"]);
|
|
2940
|
+
var sourceSchema = z59.enum(["web", "community", "social", "shopping"]);
|
|
2941
|
+
var modeSchema = z59.enum(["compact", "json", "md", "context", "path"]);
|
|
2942
|
+
var cookiePolicySchema = z59.enum(["off", "auto", "required"]);
|
|
2943
|
+
var challengeAutomationModeSchema = z59.enum(CHALLENGE_AUTOMATION_MODES);
|
|
2298
2944
|
function createResearchRunTool(deps) {
|
|
2299
|
-
return
|
|
2945
|
+
return tool60({
|
|
2300
2946
|
description: "Run cross-source research with strict timebox and artifact outputs.",
|
|
2301
2947
|
args: {
|
|
2302
|
-
topic:
|
|
2303
|
-
days:
|
|
2304
|
-
from:
|
|
2305
|
-
to:
|
|
2948
|
+
topic: z59.string().min(1).describe("Research topic"),
|
|
2949
|
+
days: z59.number().int().positive().optional().describe("Timebox in days"),
|
|
2950
|
+
from: z59.string().optional().describe("ISO start date"),
|
|
2951
|
+
to: z59.string().optional().describe("ISO end date"),
|
|
2306
2952
|
sourceSelection: sourceSelectionSchema.optional().describe("auto|web|community|social|shopping|all"),
|
|
2307
|
-
sources:
|
|
2953
|
+
sources: z59.array(sourceSchema).optional().describe("Explicit source list"),
|
|
2308
2954
|
mode: modeSchema.optional().describe("compact|json|md|context|path"),
|
|
2309
|
-
includeEngagement:
|
|
2310
|
-
limitPerSource:
|
|
2311
|
-
outputDir:
|
|
2312
|
-
ttlHours:
|
|
2313
|
-
useCookies:
|
|
2955
|
+
includeEngagement: z59.boolean().optional().describe("Include engagement enrichment"),
|
|
2956
|
+
limitPerSource: z59.number().int().positive().optional().describe("Result limit per source"),
|
|
2957
|
+
outputDir: z59.string().optional().describe("Optional artifact output directory"),
|
|
2958
|
+
ttlHours: z59.number().int().positive().optional().describe("Artifact retention TTL in hours"),
|
|
2959
|
+
useCookies: z59.boolean().optional().describe("Enable/disable provider cookie injection for this run"),
|
|
2960
|
+
challengeAutomationMode: challengeAutomationModeSchema.optional().describe("Challenge automation mode: off|browser|browser_with_helper"),
|
|
2314
2961
|
cookiePolicyOverride: cookiePolicySchema.optional().describe("Override cookie policy: off|auto|required")
|
|
2315
2962
|
},
|
|
2316
2963
|
async execute(args) {
|
|
2317
2964
|
try {
|
|
2318
|
-
const runtime = resolveProviderRuntime(deps);
|
|
2965
|
+
const runtime = await resolveProviderRuntime(deps);
|
|
2966
|
+
const { runResearchWorkflow } = await import("./providers-G36AM3Z2.js");
|
|
2319
2967
|
const result = await runResearchWorkflow(runtime, {
|
|
2320
2968
|
topic: args.topic,
|
|
2321
2969
|
days: args.days,
|
|
@@ -2329,6 +2977,7 @@ function createResearchRunTool(deps) {
|
|
|
2329
2977
|
outputDir: args.outputDir,
|
|
2330
2978
|
ttlHours: args.ttlHours,
|
|
2331
2979
|
useCookies: args.useCookies,
|
|
2980
|
+
challengeAutomationMode: args.challengeAutomationMode,
|
|
2332
2981
|
cookiePolicyOverride: args.cookiePolicyOverride
|
|
2333
2982
|
});
|
|
2334
2983
|
return ok(result);
|
|
@@ -2340,29 +2989,32 @@ function createResearchRunTool(deps) {
|
|
|
2340
2989
|
}
|
|
2341
2990
|
|
|
2342
2991
|
// src/tools/shopping_run.ts
|
|
2343
|
-
import { tool as
|
|
2344
|
-
var
|
|
2345
|
-
var sortSchema =
|
|
2346
|
-
var modeSchema2 =
|
|
2347
|
-
var cookiePolicySchema2 =
|
|
2992
|
+
import { tool as tool61 } from "@opencode-ai/plugin";
|
|
2993
|
+
var z60 = tool61.schema;
|
|
2994
|
+
var sortSchema = z60.enum(["best_deal", "lowest_price", "highest_rating", "fastest_shipping"]);
|
|
2995
|
+
var modeSchema2 = z60.enum(["compact", "json", "md", "context", "path"]);
|
|
2996
|
+
var cookiePolicySchema2 = z60.enum(["off", "auto", "required"]);
|
|
2997
|
+
var challengeAutomationModeSchema2 = z60.enum(CHALLENGE_AUTOMATION_MODES);
|
|
2348
2998
|
function createShoppingRunTool(deps) {
|
|
2349
|
-
return
|
|
2999
|
+
return tool61({
|
|
2350
3000
|
description: "Run shopping/deal intelligence across shopping providers.",
|
|
2351
3001
|
args: {
|
|
2352
|
-
query:
|
|
2353
|
-
providers:
|
|
2354
|
-
budget:
|
|
2355
|
-
region:
|
|
3002
|
+
query: z60.string().min(1).describe("Shopping query"),
|
|
3003
|
+
providers: z60.array(z60.string()).optional().describe("Optional provider allow-list"),
|
|
3004
|
+
budget: z60.number().positive().optional().describe("Optional budget amount"),
|
|
3005
|
+
region: z60.string().optional().describe("Region hint"),
|
|
2356
3006
|
sort: sortSchema.optional().describe("best_deal|lowest_price|highest_rating|fastest_shipping"),
|
|
2357
3007
|
mode: modeSchema2.optional().describe("compact|json|md|context|path"),
|
|
2358
|
-
outputDir:
|
|
2359
|
-
ttlHours:
|
|
2360
|
-
useCookies:
|
|
3008
|
+
outputDir: z60.string().optional().describe("Optional artifact output directory"),
|
|
3009
|
+
ttlHours: z60.number().int().positive().optional().describe("Artifact retention TTL in hours"),
|
|
3010
|
+
useCookies: z60.boolean().optional().describe("Enable/disable provider cookie injection for this run"),
|
|
3011
|
+
challengeAutomationMode: challengeAutomationModeSchema2.optional().describe("Challenge automation mode: off|browser|browser_with_helper"),
|
|
2361
3012
|
cookiePolicyOverride: cookiePolicySchema2.optional().describe("Override cookie policy: off|auto|required")
|
|
2362
3013
|
},
|
|
2363
3014
|
async execute(args) {
|
|
2364
3015
|
try {
|
|
2365
|
-
const runtime = resolveProviderRuntime(deps);
|
|
3016
|
+
const runtime = await resolveProviderRuntime(deps);
|
|
3017
|
+
const { runShoppingWorkflow } = await import("./providers-G36AM3Z2.js");
|
|
2366
3018
|
const result = await runShoppingWorkflow(runtime, {
|
|
2367
3019
|
query: args.query,
|
|
2368
3020
|
providers: args.providers,
|
|
@@ -2373,6 +3025,7 @@ function createShoppingRunTool(deps) {
|
|
|
2373
3025
|
outputDir: args.outputDir,
|
|
2374
3026
|
ttlHours: args.ttlHours,
|
|
2375
3027
|
useCookies: args.useCookies,
|
|
3028
|
+
challengeAutomationMode: args.challengeAutomationMode,
|
|
2376
3029
|
cookiePolicyOverride: args.cookiePolicyOverride
|
|
2377
3030
|
});
|
|
2378
3031
|
return ok(result);
|
|
@@ -2384,9 +3037,10 @@ function createShoppingRunTool(deps) {
|
|
|
2384
3037
|
}
|
|
2385
3038
|
|
|
2386
3039
|
// src/tools/product_video_run.ts
|
|
2387
|
-
import { tool as
|
|
2388
|
-
var
|
|
2389
|
-
var cookiePolicySchema3 =
|
|
3040
|
+
import { tool as tool62 } from "@opencode-ai/plugin";
|
|
3041
|
+
var z61 = tool62.schema;
|
|
3042
|
+
var cookiePolicySchema3 = z61.enum(["off", "auto", "required"]);
|
|
3043
|
+
var challengeAutomationModeSchema3 = z61.enum(CHALLENGE_AUTOMATION_MODES);
|
|
2390
3044
|
async function captureScreenshotBuffer(deps, url) {
|
|
2391
3045
|
let sessionId = null;
|
|
2392
3046
|
try {
|
|
@@ -2410,23 +3064,26 @@ async function captureScreenshotBuffer(deps, url) {
|
|
|
2410
3064
|
}
|
|
2411
3065
|
}
|
|
2412
3066
|
function createProductVideoRunTool(deps) {
|
|
2413
|
-
return
|
|
3067
|
+
return tool62({
|
|
2414
3068
|
description: "Collect a product presentation asset pack for video/UGC workflows.",
|
|
2415
3069
|
args: {
|
|
2416
|
-
product_url:
|
|
2417
|
-
product_name:
|
|
2418
|
-
provider_hint:
|
|
2419
|
-
include_screenshots:
|
|
2420
|
-
include_all_images:
|
|
2421
|
-
include_copy:
|
|
2422
|
-
output_dir:
|
|
2423
|
-
ttl_hours:
|
|
2424
|
-
|
|
3070
|
+
product_url: z61.string().optional().describe("Product URL"),
|
|
3071
|
+
product_name: z61.string().optional().describe("Product name"),
|
|
3072
|
+
provider_hint: z61.string().optional().describe("Optional provider hint"),
|
|
3073
|
+
include_screenshots: z61.boolean().optional().describe("Include screenshots (default true)"),
|
|
3074
|
+
include_all_images: z61.boolean().optional().describe("Include all discovered images (default true)"),
|
|
3075
|
+
include_copy: z61.boolean().optional().describe("Include product copy extraction (default true)"),
|
|
3076
|
+
output_dir: z61.string().optional().describe("Optional output directory"),
|
|
3077
|
+
ttl_hours: z61.number().int().positive().optional().describe("Artifact retention TTL in hours"),
|
|
3078
|
+
timeoutMs: z61.number().int().positive().optional().describe("Workflow timeout in milliseconds"),
|
|
3079
|
+
useCookies: z61.boolean().optional().describe("Enable/disable provider cookie injection for this run"),
|
|
3080
|
+
challengeAutomationMode: challengeAutomationModeSchema3.optional().describe("Challenge automation mode: off|browser|browser_with_helper"),
|
|
2425
3081
|
cookiePolicyOverride: cookiePolicySchema3.optional().describe("Override cookie policy: off|auto|required")
|
|
2426
3082
|
},
|
|
2427
3083
|
async execute(args) {
|
|
2428
3084
|
try {
|
|
2429
|
-
const runtime = resolveProviderRuntime(deps);
|
|
3085
|
+
const runtime = await resolveProviderRuntime(deps);
|
|
3086
|
+
const { runProductVideoWorkflow } = await import("./providers-G36AM3Z2.js");
|
|
2430
3087
|
const includeScreenshots = args.include_screenshots ?? true;
|
|
2431
3088
|
const result = await runProductVideoWorkflow(runtime, {
|
|
2432
3089
|
product_url: args.product_url,
|
|
@@ -2437,7 +3094,9 @@ function createProductVideoRunTool(deps) {
|
|
|
2437
3094
|
include_copy: args.include_copy,
|
|
2438
3095
|
output_dir: args.output_dir,
|
|
2439
3096
|
ttl_hours: args.ttl_hours,
|
|
3097
|
+
timeoutMs: args.timeoutMs,
|
|
2440
3098
|
useCookies: args.useCookies,
|
|
3099
|
+
challengeAutomationMode: args.challengeAutomationMode,
|
|
2441
3100
|
cookiePolicyOverride: args.cookiePolicyOverride
|
|
2442
3101
|
}, {
|
|
2443
3102
|
captureScreenshot: includeScreenshots ? async (url) => captureScreenshotBuffer(deps, url) : void 0
|
|
@@ -2450,11 +3109,42 @@ function createProductVideoRunTool(deps) {
|
|
|
2450
3109
|
});
|
|
2451
3110
|
}
|
|
2452
3111
|
|
|
3112
|
+
// src/tools/canvas.ts
|
|
3113
|
+
import { tool as tool63 } from "@opencode-ai/plugin";
|
|
3114
|
+
var z62 = tool63.schema;
|
|
3115
|
+
function createCanvasTool(deps) {
|
|
3116
|
+
return tool63({
|
|
3117
|
+
description: "Execute a typed design-canvas command such as canvas.session.open, canvas.feedback.next, or canvas.document.patch.",
|
|
3118
|
+
args: {
|
|
3119
|
+
command: z62.string().min(1).describe("Canvas command name"),
|
|
3120
|
+
params: z62.record(z62.string(), z62.unknown()).optional().describe("Canvas command payload")
|
|
3121
|
+
},
|
|
3122
|
+
async execute(args) {
|
|
3123
|
+
if (!deps.canvasManager) {
|
|
3124
|
+
return failure("Canvas manager unavailable.", "canvas_unavailable");
|
|
3125
|
+
}
|
|
3126
|
+
try {
|
|
3127
|
+
if (!args.command.startsWith("canvas.")) {
|
|
3128
|
+
return failure("Canvas commands must start with 'canvas.'.", "canvas_invalid_command");
|
|
3129
|
+
}
|
|
3130
|
+
const result = await deps.canvasManager.execute(args.command, args.params ?? {});
|
|
3131
|
+
if (result && typeof result === "object" && !Array.isArray(result)) {
|
|
3132
|
+
return ok(result);
|
|
3133
|
+
}
|
|
3134
|
+
return ok({ result });
|
|
3135
|
+
} catch (error) {
|
|
3136
|
+
const serialized = serializeError(error);
|
|
3137
|
+
return failure(serialized.message, serialized.code ?? "canvas_failed", serialized.details);
|
|
3138
|
+
}
|
|
3139
|
+
}
|
|
3140
|
+
});
|
|
3141
|
+
}
|
|
3142
|
+
|
|
2453
3143
|
// src/tools/skill_list.ts
|
|
2454
|
-
import { tool as
|
|
3144
|
+
import { tool as tool64 } from "@opencode-ai/plugin";
|
|
2455
3145
|
function createSkillListTool(deps) {
|
|
2456
|
-
return
|
|
2457
|
-
description: "List
|
|
3146
|
+
return tool64({
|
|
3147
|
+
description: "List bundled and discovered skill packs before choosing a local onboarding or workflow lane.",
|
|
2458
3148
|
args: {},
|
|
2459
3149
|
async execute() {
|
|
2460
3150
|
const skills = await deps.skills.listSkills();
|
|
@@ -2463,20 +3153,23 @@ function createSkillListTool(deps) {
|
|
|
2463
3153
|
description: s.description,
|
|
2464
3154
|
version: s.version
|
|
2465
3155
|
}));
|
|
2466
|
-
return ok({
|
|
3156
|
+
return ok({
|
|
3157
|
+
skills: skillList,
|
|
3158
|
+
count: skillList.length
|
|
3159
|
+
});
|
|
2467
3160
|
}
|
|
2468
3161
|
});
|
|
2469
3162
|
}
|
|
2470
3163
|
|
|
2471
3164
|
// src/tools/skill_load.ts
|
|
2472
|
-
import { tool as
|
|
2473
|
-
var
|
|
3165
|
+
import { tool as tool65 } from "@opencode-ai/plugin";
|
|
3166
|
+
var z63 = tool65.schema;
|
|
2474
3167
|
function createSkillLoadTool(deps) {
|
|
2475
|
-
return
|
|
2476
|
-
description:
|
|
3168
|
+
return tool65({
|
|
3169
|
+
description: `Load a local skill directly; start with ${onboarding_metadata_default.skillName} ${onboarding_metadata_default.skillTopic} before low-level browser commands.`,
|
|
2477
3170
|
args: {
|
|
2478
|
-
name:
|
|
2479
|
-
topic:
|
|
3171
|
+
name: z63.string().describe("Name of the skill to load (e.g., 'opendevbrowser-login-automation', 'opendevbrowser-form-testing')"),
|
|
3172
|
+
topic: z63.string().optional().describe("Optional topic to filter the skill content")
|
|
2480
3173
|
},
|
|
2481
3174
|
async execute(args) {
|
|
2482
3175
|
try {
|
|
@@ -2491,9 +3184,10 @@ function createSkillLoadTool(deps) {
|
|
|
2491
3184
|
}
|
|
2492
3185
|
|
|
2493
3186
|
// src/tools/index.ts
|
|
3187
|
+
var LOCAL_ONLY_TOOL_NAMES = new Set(onboarding_metadata_default.localOnlyToolNames);
|
|
2494
3188
|
function createTools(deps) {
|
|
2495
|
-
const wrap = (definition) => {
|
|
2496
|
-
if (!deps.ensureHub) return definition;
|
|
3189
|
+
const wrap = (name, definition) => {
|
|
3190
|
+
if (!deps.ensureHub || LOCAL_ONLY_TOOL_NAMES.has(name)) return definition;
|
|
2497
3191
|
return {
|
|
2498
3192
|
...definition,
|
|
2499
3193
|
execute: async (args, context) => {
|
|
@@ -2506,65 +3200,88 @@ function createTools(deps) {
|
|
|
2506
3200
|
};
|
|
2507
3201
|
};
|
|
2508
3202
|
return {
|
|
2509
|
-
opendevbrowser_launch: wrap(createLaunchTool(deps)),
|
|
2510
|
-
opendevbrowser_connect: wrap(createConnectTool(deps)),
|
|
2511
|
-
opendevbrowser_disconnect: wrap(createDisconnectTool(deps)),
|
|
2512
|
-
opendevbrowser_status: wrap(createStatusTool(deps)),
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
3203
|
+
opendevbrowser_launch: wrap("opendevbrowser_launch", createLaunchTool(deps)),
|
|
3204
|
+
opendevbrowser_connect: wrap("opendevbrowser_connect", createConnectTool(deps)),
|
|
3205
|
+
opendevbrowser_disconnect: wrap("opendevbrowser_disconnect", createDisconnectTool(deps)),
|
|
3206
|
+
opendevbrowser_status: wrap("opendevbrowser_status", createStatusTool(deps)),
|
|
3207
|
+
opendevbrowser_session_inspector: wrap("opendevbrowser_session_inspector", createSessionInspectorTool(deps)),
|
|
3208
|
+
opendevbrowser_targets_list: wrap("opendevbrowser_targets_list", createTargetsListTool(deps)),
|
|
3209
|
+
opendevbrowser_target_use: wrap("opendevbrowser_target_use", createTargetUseTool(deps)),
|
|
3210
|
+
opendevbrowser_target_new: wrap("opendevbrowser_target_new", createTargetNewTool(deps)),
|
|
3211
|
+
opendevbrowser_target_close: wrap("opendevbrowser_target_close", createTargetCloseTool(deps)),
|
|
3212
|
+
opendevbrowser_page: wrap("opendevbrowser_page", createPageTool(deps)),
|
|
3213
|
+
opendevbrowser_list: wrap("opendevbrowser_list", createListTool(deps)),
|
|
3214
|
+
opendevbrowser_close: wrap("opendevbrowser_close", createCloseTool(deps)),
|
|
3215
|
+
opendevbrowser_goto: wrap("opendevbrowser_goto", createGotoTool(deps)),
|
|
3216
|
+
opendevbrowser_wait: wrap("opendevbrowser_wait", createWaitTool(deps)),
|
|
3217
|
+
opendevbrowser_snapshot: wrap("opendevbrowser_snapshot", createSnapshotTool(deps)),
|
|
3218
|
+
opendevbrowser_review: wrap("opendevbrowser_review", createReviewTool(deps)),
|
|
3219
|
+
opendevbrowser_click: wrap("opendevbrowser_click", createClickTool(deps)),
|
|
3220
|
+
opendevbrowser_hover: wrap("opendevbrowser_hover", createHoverTool(deps)),
|
|
3221
|
+
opendevbrowser_press: wrap("opendevbrowser_press", createPressTool(deps)),
|
|
3222
|
+
opendevbrowser_check: wrap("opendevbrowser_check", createCheckTool(deps)),
|
|
3223
|
+
opendevbrowser_uncheck: wrap("opendevbrowser_uncheck", createUncheckTool(deps)),
|
|
3224
|
+
opendevbrowser_type: wrap("opendevbrowser_type", createTypeTool(deps)),
|
|
3225
|
+
opendevbrowser_select: wrap("opendevbrowser_select", createSelectTool(deps)),
|
|
3226
|
+
opendevbrowser_scroll: wrap("opendevbrowser_scroll", createScrollTool(deps)),
|
|
3227
|
+
opendevbrowser_scroll_into_view: wrap("opendevbrowser_scroll_into_view", createScrollIntoViewTool(deps)),
|
|
3228
|
+
opendevbrowser_upload: wrap("opendevbrowser_upload", createUploadTool(deps)),
|
|
3229
|
+
opendevbrowser_pointer_move: wrap("opendevbrowser_pointer_move", createPointerMoveTool(deps)),
|
|
3230
|
+
opendevbrowser_pointer_down: wrap("opendevbrowser_pointer_down", createPointerDownTool(deps)),
|
|
3231
|
+
opendevbrowser_pointer_up: wrap("opendevbrowser_pointer_up", createPointerUpTool(deps)),
|
|
3232
|
+
opendevbrowser_pointer_drag: wrap("opendevbrowser_pointer_drag", createPointerDragTool(deps)),
|
|
3233
|
+
opendevbrowser_dom_get_html: wrap("opendevbrowser_dom_get_html", createDomGetHtmlTool(deps)),
|
|
3234
|
+
opendevbrowser_dom_get_text: wrap("opendevbrowser_dom_get_text", createDomGetTextTool(deps)),
|
|
3235
|
+
opendevbrowser_get_attr: wrap("opendevbrowser_get_attr", createGetAttrTool(deps)),
|
|
3236
|
+
opendevbrowser_get_value: wrap("opendevbrowser_get_value", createGetValueTool(deps)),
|
|
3237
|
+
opendevbrowser_is_visible: wrap("opendevbrowser_is_visible", createIsVisibleTool(deps)),
|
|
3238
|
+
opendevbrowser_is_enabled: wrap("opendevbrowser_is_enabled", createIsEnabledTool(deps)),
|
|
3239
|
+
opendevbrowser_is_checked: wrap("opendevbrowser_is_checked", createIsCheckedTool(deps)),
|
|
3240
|
+
opendevbrowser_run: wrap("opendevbrowser_run", createRunTool(deps)),
|
|
3241
|
+
opendevbrowser_prompting_guide: wrap("opendevbrowser_prompting_guide", createPromptingGuideTool(deps)),
|
|
3242
|
+
opendevbrowser_console_poll: wrap("opendevbrowser_console_poll", createConsolePollTool(deps)),
|
|
3243
|
+
opendevbrowser_network_poll: wrap("opendevbrowser_network_poll", createNetworkPollTool(deps)),
|
|
3244
|
+
opendevbrowser_debug_trace_snapshot: wrap("opendevbrowser_debug_trace_snapshot", createDebugTraceSnapshotTool(deps)),
|
|
3245
|
+
opendevbrowser_cookie_import: wrap("opendevbrowser_cookie_import", createCookieImportTool(deps)),
|
|
3246
|
+
opendevbrowser_cookie_list: wrap("opendevbrowser_cookie_list", createCookieListTool(deps)),
|
|
3247
|
+
opendevbrowser_macro_resolve: wrap("opendevbrowser_macro_resolve", createMacroResolveTool(deps)),
|
|
3248
|
+
opendevbrowser_research_run: wrap("opendevbrowser_research_run", createResearchRunTool(deps)),
|
|
3249
|
+
opendevbrowser_shopping_run: wrap("opendevbrowser_shopping_run", createShoppingRunTool(deps)),
|
|
3250
|
+
opendevbrowser_product_video_run: wrap("opendevbrowser_product_video_run", createProductVideoRunTool(deps)),
|
|
3251
|
+
opendevbrowser_canvas: wrap("opendevbrowser_canvas", createCanvasTool(deps)),
|
|
3252
|
+
opendevbrowser_clone_page: wrap("opendevbrowser_clone_page", createClonePageTool(deps)),
|
|
3253
|
+
opendevbrowser_clone_component: wrap("opendevbrowser_clone_component", createCloneComponentTool(deps)),
|
|
3254
|
+
opendevbrowser_perf: wrap("opendevbrowser_perf", createPerfTool(deps)),
|
|
3255
|
+
opendevbrowser_screenshot: wrap("opendevbrowser_screenshot", createScreenshotTool(deps)),
|
|
3256
|
+
opendevbrowser_screencast_start: wrap("opendevbrowser_screencast_start", createScreencastStartTool(deps)),
|
|
3257
|
+
opendevbrowser_screencast_stop: wrap("opendevbrowser_screencast_stop", createScreencastStopTool(deps)),
|
|
3258
|
+
opendevbrowser_dialog: wrap("opendevbrowser_dialog", createDialogTool(deps)),
|
|
3259
|
+
opendevbrowser_desktop_status: wrap("opendevbrowser_desktop_status", createDesktopStatusTool(deps)),
|
|
3260
|
+
opendevbrowser_desktop_windows: wrap("opendevbrowser_desktop_windows", createDesktopWindowsTool(deps)),
|
|
3261
|
+
opendevbrowser_desktop_active_window: wrap("opendevbrowser_desktop_active_window", createDesktopActiveWindowTool(deps)),
|
|
3262
|
+
opendevbrowser_desktop_capture_desktop: wrap("opendevbrowser_desktop_capture_desktop", createDesktopCaptureDesktopTool(deps)),
|
|
3263
|
+
opendevbrowser_desktop_capture_window: wrap("opendevbrowser_desktop_capture_window", createDesktopCaptureWindowTool(deps)),
|
|
3264
|
+
opendevbrowser_desktop_accessibility_snapshot: wrap(
|
|
3265
|
+
"opendevbrowser_desktop_accessibility_snapshot",
|
|
3266
|
+
createDesktopAccessibilitySnapshotTool(deps)
|
|
3267
|
+
),
|
|
3268
|
+
opendevbrowser_annotate: wrap("opendevbrowser_annotate", createAnnotateTool(deps)),
|
|
3269
|
+
opendevbrowser_skill_list: wrap("opendevbrowser_skill_list", createSkillListTool(deps)),
|
|
3270
|
+
opendevbrowser_skill_load: wrap("opendevbrowser_skill_load", createSkillLoadTool(deps))
|
|
2557
3271
|
};
|
|
2558
3272
|
}
|
|
2559
3273
|
|
|
2560
3274
|
// src/index.ts
|
|
2561
3275
|
var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
|
|
2562
3276
|
const core = createOpenDevBrowserCore({ directory, worktree });
|
|
2563
|
-
const { config, configStore, skills, ensureRelay, cleanup, getExtensionPath } = core;
|
|
3277
|
+
const { config, configStore, skills, ensureRelay, cleanup, getExtensionPath, agentInbox } = core;
|
|
2564
3278
|
let relay = core.relay;
|
|
2565
3279
|
let manager = core.manager;
|
|
3280
|
+
let canvasManager = core.canvasManager;
|
|
2566
3281
|
let runner = core.runner;
|
|
2567
3282
|
let annotationManager = core.annotationManager;
|
|
3283
|
+
let desktopRuntime = core.desktopRuntime;
|
|
3284
|
+
let automationCoordinator = core.automationCoordinator;
|
|
2568
3285
|
let providerRuntime = core.providerRuntime;
|
|
2569
3286
|
let browserFallbackPort = core.browserFallbackPort;
|
|
2570
3287
|
let hubStop = null;
|
|
@@ -2581,10 +3298,13 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
|
|
|
2581
3298
|
}
|
|
2582
3299
|
const toolDeps = {
|
|
2583
3300
|
manager,
|
|
3301
|
+
canvasManager,
|
|
2584
3302
|
annotationManager,
|
|
2585
3303
|
runner,
|
|
2586
3304
|
config: configStore,
|
|
2587
3305
|
skills,
|
|
3306
|
+
desktopRuntime,
|
|
3307
|
+
automationCoordinator,
|
|
2588
3308
|
providerRuntime,
|
|
2589
3309
|
browserFallbackPort,
|
|
2590
3310
|
relay,
|
|
@@ -2595,19 +3315,30 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
|
|
|
2595
3315
|
daemonClient = new DaemonClient({ autoRenew: true });
|
|
2596
3316
|
}
|
|
2597
3317
|
manager = new RemoteManager(daemonClient);
|
|
3318
|
+
canvasManager = new RemoteCanvasManager(daemonClient);
|
|
3319
|
+
desktopRuntime = new RemoteDesktopRuntime(daemonClient);
|
|
2598
3320
|
relay = new RemoteRelay(daemonClient);
|
|
2599
3321
|
annotationManager.setRelay(relay);
|
|
2600
3322
|
annotationManager.setBrowserManager(manager);
|
|
2601
3323
|
runner = new ScriptRunner(manager);
|
|
2602
|
-
|
|
2603
|
-
|
|
3324
|
+
({
|
|
3325
|
+
providerRuntime,
|
|
3326
|
+
browserFallbackPort
|
|
3327
|
+
} = createCoreRuntimeAssemblies({
|
|
3328
|
+
cacheRoot: core.cacheRoot,
|
|
2604
3329
|
config: configStore.get(),
|
|
3330
|
+
manager
|
|
3331
|
+
}));
|
|
3332
|
+
automationCoordinator = createAutomationCoordinator({
|
|
2605
3333
|
manager,
|
|
2606
|
-
|
|
3334
|
+
desktopRuntime
|
|
2607
3335
|
});
|
|
2608
3336
|
toolDeps.manager = manager;
|
|
3337
|
+
toolDeps.canvasManager = canvasManager;
|
|
2609
3338
|
toolDeps.relay = relay;
|
|
2610
3339
|
toolDeps.runner = runner;
|
|
3340
|
+
toolDeps.desktopRuntime = desktopRuntime;
|
|
3341
|
+
toolDeps.automationCoordinator = automationCoordinator;
|
|
2611
3342
|
toolDeps.providerRuntime = providerRuntime;
|
|
2612
3343
|
toolDeps.browserFallbackPort = browserFallbackPort;
|
|
2613
3344
|
};
|
|
@@ -2670,11 +3401,30 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
|
|
|
2670
3401
|
process.on("SIGINT", cleanupAll);
|
|
2671
3402
|
process.on("SIGTERM", cleanupAll);
|
|
2672
3403
|
process.on("beforeExit", cleanupAll);
|
|
3404
|
+
const registerAgentInboxScope = (sessionID, registration) => {
|
|
3405
|
+
if (!sessionID) {
|
|
3406
|
+
return;
|
|
3407
|
+
}
|
|
3408
|
+
try {
|
|
3409
|
+
agentInbox.registerScope(sessionID, registration);
|
|
3410
|
+
} catch (error) {
|
|
3411
|
+
console.warn(
|
|
3412
|
+
"[opendevbrowser] Failed to register agent inbox scope:",
|
|
3413
|
+
error instanceof Error ? error.message : String(error)
|
|
3414
|
+
);
|
|
3415
|
+
}
|
|
3416
|
+
};
|
|
2673
3417
|
return {
|
|
2674
3418
|
tool: createTools(toolDeps),
|
|
2675
|
-
"chat.message": async (
|
|
3419
|
+
"chat.message": async (input, output) => {
|
|
2676
3420
|
const config2 = configStore.get();
|
|
2677
3421
|
if (output.message.role !== "user") return;
|
|
3422
|
+
registerAgentInboxScope(input.sessionID, {
|
|
3423
|
+
messageId: input.messageID ?? null,
|
|
3424
|
+
agent: input.agent ?? null,
|
|
3425
|
+
model: input.model ?? null,
|
|
3426
|
+
variant: input.variant ?? null
|
|
3427
|
+
});
|
|
2678
3428
|
const text = extractTextFromParts(output.parts);
|
|
2679
3429
|
if (!text) return;
|
|
2680
3430
|
if (config2.skills.nudge.enabled && shouldTriggerSkillNudge(text, config2.skills.nudge.keywords)) {
|
|
@@ -2686,11 +3436,22 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
|
|
|
2686
3436
|
}
|
|
2687
3437
|
}
|
|
2688
3438
|
},
|
|
2689
|
-
"experimental.chat.system.transform": async (
|
|
3439
|
+
"experimental.chat.system.transform": async (input, output) => {
|
|
2690
3440
|
const config2 = configStore.get();
|
|
2691
3441
|
const systemEntries = output.system ?? [];
|
|
2692
3442
|
let nextEntries = systemEntries;
|
|
2693
3443
|
let changed = false;
|
|
3444
|
+
registerAgentInboxScope(input.sessionID, {
|
|
3445
|
+
model: null
|
|
3446
|
+
});
|
|
3447
|
+
if (input.sessionID && !systemEntries.some((entry) => entry.includes(AGENT_INBOX_SYSTEM_MARKER))) {
|
|
3448
|
+
const injection = agentInbox.buildSystemInjection(input.sessionID);
|
|
3449
|
+
if (injection) {
|
|
3450
|
+
nextEntries = [...nextEntries, injection.systemBlock];
|
|
3451
|
+
agentInbox.acknowledge(injection.receiptIds);
|
|
3452
|
+
changed = true;
|
|
3453
|
+
}
|
|
3454
|
+
}
|
|
2694
3455
|
if (config2.skills.nudge.enabled) {
|
|
2695
3456
|
if (systemEntries.some((entry) => entry.includes(SKILL_NUDGE_MARKER))) {
|
|
2696
3457
|
clearSkillNudge(skillNudgeState);
|