opendevbrowser 0.0.21 → 0.0.23
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 +13 -3
- package/dist/{chunk-4KVXCXV3.js → chunk-2MG7BRPF.js} +521 -84
- package/dist/{chunk-4KVXCXV3.js.map → chunk-2MG7BRPF.js.map} +1 -1
- package/dist/chunk-3ILXPKSJ.js +86 -0
- package/dist/chunk-3ILXPKSJ.js.map +1 -0
- package/dist/{chunk-ZE2E7ZGH.js → chunk-K2TEHJCV.js} +240 -33
- package/dist/chunk-K2TEHJCV.js.map +1 -0
- package/dist/chunk-QVWOPIZJ.js +612 -0
- package/dist/chunk-QVWOPIZJ.js.map +1 -0
- package/dist/{chunk-3VA6XR25.js → chunk-STGGGVYT.js} +23 -100
- package/dist/chunk-STGGGVYT.js.map +1 -0
- package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
- package/dist/cli/commands/uninstall.d.ts +1 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -1
- package/dist/cli/daemon-commands.d.ts.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.js +298 -618
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/installers/postinstall-skill-sync.d.ts +15 -0
- package/dist/cli/installers/postinstall-skill-sync.d.ts.map +1 -0
- package/dist/cli/installers/postinstall-skill-sync.js +48 -0
- package/dist/cli/installers/postinstall-skill-sync.js.map +1 -0
- package/dist/cli/installers/skills.d.ts +9 -14
- package/dist/cli/installers/skills.d.ts.map +1 -1
- package/dist/cli/skill-lifecycle.d.ts +26 -0
- package/dist/cli/skill-lifecycle.d.ts.map +1 -0
- package/dist/cli/update-skill-modes.d.ts +3 -0
- package/dist/cli/update-skill-modes.d.ts.map +1 -0
- package/dist/cli/utils/workflow-message.d.ts +1 -0
- package/dist/cli/utils/workflow-message.d.ts.map +1 -1
- package/dist/index.js +25 -9
- package/dist/index.js.map +1 -1
- package/dist/opendevbrowser.js +25 -9
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/providers/social/platform.d.ts.map +1 -1
- package/dist/providers/social/search-quality.d.ts.map +1 -1
- package/dist/providers/social/youtube.d.ts.map +1 -1
- package/dist/providers/workflow-handoff.d.ts +27 -3
- package/dist/providers/workflow-handoff.d.ts.map +1 -1
- package/dist/providers/workflows.d.ts +1 -0
- package/dist/providers/workflows.d.ts.map +1 -1
- package/dist/{providers-ZIVHHH4F.js → providers-6YVHKTOJ.js} +2 -2
- package/dist/public-surface/generated-manifest.d.ts +162 -4
- package/dist/public-surface/generated-manifest.d.ts.map +1 -1
- package/dist/public-surface/source.d.ts +12 -6
- package/dist/public-surface/source.d.ts.map +1 -1
- package/dist/skills/skill-loader.js +2 -1
- package/dist/tools/macro_resolve.d.ts.map +1 -1
- package/extension/manifest.json +1 -1
- package/package.json +6 -4
- package/scripts/postinstall-sync-skills.mjs +33 -0
- package/dist/chunk-3VA6XR25.js.map +0 -1
- package/dist/chunk-ZE2E7ZGH.js.map +0 -1
- /package/dist/{providers-ZIVHHH4F.js.map → providers-6YVHKTOJ.js.map} +0 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/remote-manager.ts","../src/cli/remote-canvas-manager.ts","../src/cli/remote-desktop-runtime.ts","../src/cli/remote-relay.ts","../src/skills/skill-nudge.ts","../src/skills/continuity-nudge.ts","../src/tools/launch.ts","../src/tools/response.ts","../src/tools/connect.ts","../src/tools/disconnect.ts","../src/tools/status.ts","../src/utils/hub-enabled.ts","../src/tools/status_capabilities.ts","../src/tools/automation-shared.ts","../src/tools/session_inspector.ts","../src/tools/session_inspector_plan.ts","../src/tools/session_inspector_audit.ts","../src/tools/targets_list.ts","../src/tools/target_use.ts","../src/tools/target_new.ts","../src/tools/target_close.ts","../src/tools/page.ts","../src/tools/list.ts","../src/tools/close.ts","../src/tools/goto.ts","../src/tools/wait.ts","../src/tools/snapshot.ts","../src/tools/review.ts","../src/tools/review_desktop.ts","../src/tools/click.ts","../src/tools/hover.ts","../src/tools/press.ts","../src/tools/check.ts","../src/tools/uncheck.ts","../src/tools/type.ts","../src/tools/select.ts","../src/tools/scroll.ts","../src/tools/scroll_into_view.ts","../src/tools/upload.ts","../src/tools/pointer_move.ts","../src/tools/pointer_down.ts","../src/tools/pointer_up.ts","../src/tools/pointer_drag.ts","../src/tools/dom_get_html.ts","../src/tools/dom_get_text.ts","../src/tools/get_attr.ts","../src/tools/get_value.ts","../src/tools/is_visible.ts","../src/tools/is_enabled.ts","../src/tools/is_checked.ts","../src/tools/run.ts","../src/tools/prompting_guide.ts","../src/tools/console_poll.ts","../src/tools/network_poll.ts","../src/tools/debug_trace_snapshot.ts","../src/tools/cookie_import.ts","../src/tools/cookie_list.ts","../src/tools/macro_resolve.ts","../src/tools/workflow-runtime.ts","../src/tools/clone_page.ts","../src/tools/clone_component.ts","../src/tools/perf.ts","../src/tools/screenshot.ts","../src/tools/screencast_start.ts","../src/tools/screencast_stop.ts","../src/tools/dialog.ts","../src/tools/desktop_status.ts","../src/tools/desktop-shared.ts","../src/tools/desktop_windows.ts","../src/tools/desktop_active_window.ts","../src/tools/desktop_capture_desktop.ts","../src/tools/desktop_capture_window.ts","../src/tools/desktop_accessibility_snapshot.ts","../src/tools/annotate.ts","../src/tools/research_run.ts","../src/tools/shopping_run.ts","../src/tools/product_video_run.ts","../src/tools/inspiredesign_run.ts","../src/tools/canvas.ts","../src/tools/skill_list.ts","../src/tools/skill_load.ts","../src/tools/index.ts","../src/index.ts"],"sourcesContent":["import type { BrowserManagerLike, SessionInspectorHandle } from \"../browser/manager-types\";\nimport type { ConnectOptions, LaunchOptions } from \"../browser/browser-manager\";\nimport type { TargetInfo } from \"../browser/target-manager\";\nimport type { ReactExport } from \"../export/react-emitter\";\nimport type { ConsoleTracker } from \"../devtools/console-tracker\";\nimport type { NetworkTracker } from \"../devtools/network-tracker\";\nimport type { ChallengeAutomationMode, ChallengeInspectPlan } from \"../challenges\";\nimport { classifySessionRelayEndpoint } from \"../relay/relay-endpoints\";\nimport { DaemonClient } from \"./daemon-client\";\n\ntype CookieImportRecord = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n expires?: number;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n};\n\ntype BrowserManagerMethods = {\n [K in keyof BrowserManagerLike as Extract<BrowserManagerLike[K], (...args: never[]) => unknown> extends never ? never : K]-?:\n Extract<BrowserManagerLike[K], (...args: never[]) => unknown>;\n};\n\ntype BrowserManagerMethodKey = keyof BrowserManagerMethods;\n\ntype CallResult<K extends BrowserManagerMethodKey> = Awaited<ReturnType<BrowserManagerMethods[K]>>;\n\nexport class RemoteManager implements BrowserManagerLike {\n private client: DaemonClient;\n\n constructor(client: DaemonClient) {\n this.client = client;\n }\n\n launch(options: LaunchOptions): ReturnType<BrowserManagerLike[\"launch\"]> {\n return this.client.call<CallResult<\"launch\">>(\"session.launch\", options as Record<string, unknown>);\n }\n\n connect(options: ConnectOptions): ReturnType<BrowserManagerLike[\"connect\"]> {\n return this.client.call<CallResult<\"connect\">>(\"session.connect\", options as Record<string, unknown>);\n }\n\n connectRelay(wsEndpoint: string, options?: { startUrl?: string }): ReturnType<BrowserManagerLike[\"connectRelay\"]> {\n const startUrl = typeof options?.startUrl === \"string\" && options.startUrl.trim().length > 0\n ? options.startUrl.trim()\n : undefined;\n const parsedRelayEndpoint = classifySessionRelayEndpoint(wsEndpoint);\n return this.client.call<CallResult<\"connectRelay\">>(\n \"session.connect\",\n {\n wsEndpoint,\n ...(parsedRelayEndpoint?.inputPath === \"/cdp\" ? { extensionLegacy: true } : {}),\n ...(startUrl ? { startUrl } : {})\n }\n );\n }\n\n disconnect(sessionId: string, closeBrowser = false): ReturnType<BrowserManagerLike[\"disconnect\"]> {\n return this.client.call<CallResult<\"disconnect\">>(\"session.disconnect\", { sessionId, closeBrowser });\n }\n\n status(sessionId: string): ReturnType<BrowserManagerLike[\"status\"]> {\n return this.client.call<CallResult<\"status\">>(\"session.status\", { sessionId });\n }\n\n cookieImport(\n sessionId: string,\n cookies: CookieImportRecord[],\n strict = true,\n requestId?: string\n ): ReturnType<BrowserManagerLike[\"cookieImport\"]> {\n return this.client.call<CallResult<\"cookieImport\">>(\"session.cookieImport\", {\n sessionId,\n cookies,\n strict,\n requestId\n });\n }\n\n cookieList(\n sessionId: string,\n urls?: string[],\n requestId?: string\n ): ReturnType<BrowserManagerLike[\"cookieList\"]> {\n return this.client.call<CallResult<\"cookieList\">>(\"session.cookieList\", {\n sessionId,\n ...(urls && urls.length > 0 ? { urls } : {}),\n requestId\n });\n }\n\n goto(\n sessionId: string,\n url: string,\n waitUntil: \"domcontentloaded\" | \"load\" | \"networkidle\" = \"load\",\n timeoutMs = 30000,\n _sessionOverride?: { browser: unknown; context: unknown; targets: unknown },\n targetId?: string | null\n ): ReturnType<BrowserManagerLike[\"goto\"]> {\n return this.client.call<CallResult<\"goto\">>(\"nav.goto\", {\n sessionId,\n url,\n waitUntil,\n timeoutMs,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n waitForLoad(\n sessionId: string,\n until: \"domcontentloaded\" | \"load\" | \"networkidle\",\n timeoutMs = 30000,\n targetId?: string | null\n ): ReturnType<BrowserManagerLike[\"waitForLoad\"]> {\n return this.client.call<CallResult<\"waitForLoad\">>(\"nav.wait\", {\n sessionId,\n until,\n timeoutMs,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n waitForRef(\n sessionId: string,\n ref: string,\n state: \"attached\" | \"visible\" | \"hidden\" = \"attached\",\n timeoutMs = 30000,\n targetId?: string | null\n ): ReturnType<BrowserManagerLike[\"waitForRef\"]> {\n return this.client.call<CallResult<\"waitForRef\">>(\"nav.wait\", {\n sessionId,\n ref,\n state,\n timeoutMs,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n snapshot(\n sessionId: string,\n mode: \"outline\" | \"actionables\",\n maxChars: number,\n cursor?: string,\n targetId?: string | null\n ): ReturnType<BrowserManagerLike[\"snapshot\"]> {\n return this.client.call<CallResult<\"snapshot\">>(\"nav.snapshot\", {\n sessionId,\n mode,\n maxChars,\n cursor,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n click(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"click\"]> {\n return this.client.call<CallResult<\"click\">>(\"interact.click\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n hover(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"hover\"]> {\n return this.client.call<CallResult<\"hover\">>(\"interact.hover\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n press(sessionId: string, key: string, ref?: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"press\"]> {\n return this.client.call<CallResult<\"press\">>(\"interact.press\", {\n sessionId,\n key,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n check(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"check\"]> {\n return this.client.call<CallResult<\"check\">>(\"interact.check\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n uncheck(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"uncheck\"]> {\n return this.client.call<CallResult<\"uncheck\">>(\"interact.uncheck\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n type(\n sessionId: string,\n ref: string,\n text: string,\n clear = false,\n submit = false,\n targetId?: string | null\n ): ReturnType<BrowserManagerLike[\"type\"]> {\n return this.client.call<CallResult<\"type\">>(\"interact.type\", {\n sessionId,\n ref,\n text,\n clear,\n submit,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n select(sessionId: string, ref: string, values: string[], targetId?: string | null): ReturnType<BrowserManagerLike[\"select\"]> {\n return this.client.call<CallResult<\"select\">>(\"interact.select\", {\n sessionId,\n ref,\n values,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n scroll(sessionId: string, dy: number, ref?: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"scroll\"]> {\n return this.client.call<CallResult<\"scroll\">>(\"interact.scroll\", {\n sessionId,\n dy,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n scrollIntoView(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"scrollIntoView\"]> {\n return this.client.call<CallResult<\"scrollIntoView\">>(\"interact.scrollIntoView\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n domGetHtml(sessionId: string, ref: string, maxChars = 8000, targetId?: string | null): ReturnType<BrowserManagerLike[\"domGetHtml\"]> {\n return this.client.call<CallResult<\"domGetHtml\">>(\"dom.getHtml\", {\n sessionId,\n ref,\n maxChars,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n domGetText(sessionId: string, ref: string, maxChars = 8000, targetId?: string | null): ReturnType<BrowserManagerLike[\"domGetText\"]> {\n return this.client.call<CallResult<\"domGetText\">>(\"dom.getText\", {\n sessionId,\n ref,\n maxChars,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n domGetAttr(sessionId: string, ref: string, name: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"domGetAttr\"]> {\n return this.client.call<CallResult<\"domGetAttr\">>(\"dom.getAttr\", {\n sessionId,\n ref,\n name,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n domGetValue(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"domGetValue\"]> {\n return this.client.call<CallResult<\"domGetValue\">>(\"dom.getValue\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n domIsVisible(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"domIsVisible\"]> {\n return this.client.call<CallResult<\"domIsVisible\">>(\"dom.isVisible\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n domIsEnabled(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"domIsEnabled\"]> {\n return this.client.call<CallResult<\"domIsEnabled\">>(\"dom.isEnabled\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n domIsChecked(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"domIsChecked\"]> {\n return this.client.call<CallResult<\"domIsChecked\">>(\"dom.isChecked\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n clonePage(sessionId: string, targetId?: string | null): Promise<ReactExport> {\n return this.client.call(\"export.clonePage\", {\n sessionId,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n }) as Promise<ReactExport>;\n }\n\n cloneComponent(sessionId: string, ref: string, targetId?: string | null): Promise<ReactExport> {\n return this.client.call(\"export.cloneComponent\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n }) as Promise<ReactExport>;\n }\n\n perfMetrics(sessionId: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"perfMetrics\"]> {\n return this.client.call<CallResult<\"perfMetrics\">>(\"devtools.perf\", {\n sessionId,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n screenshot(sessionId: string, options: Parameters<BrowserManagerLike[\"screenshot\"]>[1] = {}): ReturnType<BrowserManagerLike[\"screenshot\"]> {\n return this.client.call<CallResult<\"screenshot\">>(\"page.screenshot\", {\n sessionId,\n ...(typeof options.path === \"string\" ? { path: options.path } : {}),\n ...(typeof options.targetId === \"string\" ? { targetId: options.targetId } : {}),\n ...(typeof options.ref === \"string\" ? { ref: options.ref } : {}),\n ...(options.fullPage === true ? { fullPage: true } : {})\n });\n }\n\n startScreencast(\n sessionId: string,\n options: Parameters<BrowserManagerLike[\"startScreencast\"]>[1] = {}\n ): ReturnType<BrowserManagerLike[\"startScreencast\"]> {\n return this.client.call<CallResult<\"startScreencast\">>(\"page.screencast.start\", {\n sessionId,\n ...(typeof options.targetId === \"string\" ? { targetId: options.targetId } : {}),\n ...(typeof options.outputDir === \"string\" ? { outputDir: options.outputDir } : {}),\n ...(typeof options.intervalMs === \"number\" ? { intervalMs: options.intervalMs } : {}),\n ...(typeof options.maxFrames === \"number\" ? { maxFrames: options.maxFrames } : {})\n });\n }\n\n stopScreencast(sessionId: string, screencastId: string): ReturnType<BrowserManagerLike[\"stopScreencast\"]> {\n return this.client.call<CallResult<\"stopScreencast\">>(\"page.screencast.stop\", {\n sessionId,\n screencastId\n });\n }\n\n upload(sessionId: string, input: Parameters<BrowserManagerLike[\"upload\"]>[1]): ReturnType<BrowserManagerLike[\"upload\"]> {\n return this.client.call<CallResult<\"upload\">>(\"interact.upload\", {\n sessionId,\n ref: input.ref,\n files: input.files,\n ...(typeof input.targetId === \"string\" ? { targetId: input.targetId } : {})\n });\n }\n\n dialog(sessionId: string, input: Parameters<BrowserManagerLike[\"dialog\"]>[1] = {}): ReturnType<BrowserManagerLike[\"dialog\"]> {\n return this.client.call<CallResult<\"dialog\">>(\"page.dialog\", {\n sessionId,\n action: input.action ?? \"status\",\n ...(typeof input.promptText === \"string\" ? { promptText: input.promptText } : {}),\n ...(typeof input.targetId === \"string\" ? { targetId: input.targetId } : {})\n });\n }\n\n consolePoll(sessionId: string, sinceSeq?: number, max = 50): Promise<{ events: ReturnType<ConsoleTracker[\"poll\"]>[\"events\"]; nextSeq: number }> {\n return this.client.call(\"devtools.consolePoll\", { sessionId, sinceSeq, max }) as Promise<{\n events: ReturnType<ConsoleTracker[\"poll\"]>[\"events\"];\n nextSeq: number;\n }>;\n }\n\n networkPoll(sessionId: string, sinceSeq?: number, max = 50): Promise<{ events: ReturnType<NetworkTracker[\"poll\"]>[\"events\"]; nextSeq: number }> {\n return this.client.call(\"devtools.networkPoll\", { sessionId, sinceSeq, max }) as Promise<{\n events: ReturnType<NetworkTracker[\"poll\"]>[\"events\"];\n nextSeq: number;\n }>;\n }\n\n debugTraceSnapshot(\n sessionId: string,\n options: {\n sinceConsoleSeq?: number;\n sinceNetworkSeq?: number;\n sinceExceptionSeq?: number;\n max?: number;\n requestId?: string;\n } = {}\n ): ReturnType<BrowserManagerLike[\"debugTraceSnapshot\"]> {\n return this.client.call<CallResult<\"debugTraceSnapshot\">>(\"devtools.debugTraceSnapshot\", {\n sessionId,\n ...options\n });\n }\n\n inspectChallengePlan(input: {\n sessionId: string;\n targetId?: string | null;\n runMode?: ChallengeAutomationMode;\n }): Promise<ChallengeInspectPlan> {\n return this.client.call<ChallengeInspectPlan>(\"session.inspectPlan\", {\n sessionId: input.sessionId,\n ...(typeof input.targetId === \"string\" ? { targetId: input.targetId } : {}),\n ...(typeof input.runMode === \"string\"\n ? { challengeAutomationMode: input.runMode }\n : {})\n });\n }\n\n createSessionInspector(): SessionInspectorHandle {\n return {\n status: (sessionId) => this.status(sessionId),\n listTargets: (sessionId, includeUrls) => this.listTargets(sessionId, includeUrls),\n consolePoll: (sessionId, sinceSeq, max) => this.consolePoll(sessionId, sinceSeq, max),\n networkPoll: (sessionId, sinceSeq, max) => this.networkPoll(sessionId, sinceSeq, max),\n debugTraceSnapshot: (sessionId, options) => this.debugTraceSnapshot(sessionId, options)\n };\n }\n\n pointerMove(\n sessionId: string,\n x: number,\n y: number,\n targetId?: string | null,\n steps?: number\n ): ReturnType<BrowserManagerLike[\"pointerMove\"]> {\n return this.client.call<CallResult<\"pointerMove\">>(\"pointer.move\", {\n sessionId,\n x,\n y,\n ...(typeof steps === \"number\" ? { steps } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n pointerDown(\n sessionId: string,\n x: number,\n y: number,\n targetId?: string | null,\n button: \"left\" | \"middle\" | \"right\" = \"left\",\n clickCount = 1\n ): ReturnType<BrowserManagerLike[\"pointerDown\"]> {\n return this.client.call<CallResult<\"pointerDown\">>(\"pointer.down\", {\n sessionId,\n x,\n y,\n button,\n clickCount,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n pointerUp(\n sessionId: string,\n x: number,\n y: number,\n targetId?: string | null,\n button: \"left\" | \"middle\" | \"right\" = \"left\",\n clickCount = 1\n ): ReturnType<BrowserManagerLike[\"pointerUp\"]> {\n return this.client.call<CallResult<\"pointerUp\">>(\"pointer.up\", {\n sessionId,\n x,\n y,\n button,\n clickCount,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n drag(\n sessionId: string,\n from: { x: number; y: number },\n to: { x: number; y: number },\n targetId?: string | null,\n steps?: number\n ): ReturnType<BrowserManagerLike[\"drag\"]> {\n return this.client.call<CallResult<\"drag\">>(\"pointer.drag\", {\n sessionId,\n from,\n to,\n ...(typeof steps === \"number\" ? { steps } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n listTargets(sessionId: string, includeUrls = false): Promise<{ activeTargetId: string | null; targets: TargetInfo[] }> {\n return this.client.call(\"targets.list\", { sessionId, includeUrls }) as Promise<{\n activeTargetId: string | null;\n targets: TargetInfo[];\n }>;\n }\n\n useTarget(sessionId: string, targetId: string): Promise<{ activeTargetId: string; url?: string; title?: string }> {\n return this.client.call(\"targets.use\", { sessionId, targetId }) as Promise<{\n activeTargetId: string;\n url?: string;\n title?: string;\n }>;\n }\n\n newTarget(sessionId: string, url?: string): Promise<{ targetId: string }> {\n return this.client.call(\"targets.new\", { sessionId, url }) as Promise<{ targetId: string }>;\n }\n\n closeTarget(sessionId: string, targetId: string): Promise<void> {\n return this.client.call(\"targets.close\", { sessionId, targetId }) as Promise<void>;\n }\n\n page(sessionId: string, name: string, url?: string): Promise<{ targetId: string; created: boolean; url?: string; title?: string }> {\n return this.client.call(\"page.open\", { sessionId, name, url }) as Promise<{\n targetId: string;\n created: boolean;\n url?: string;\n title?: string;\n }>;\n }\n\n listPages(sessionId: string): Promise<{ pages: Array<{ name: string; targetId: string; url?: string; title?: string }> }> {\n return this.client.call(\"page.list\", { sessionId }) as Promise<{\n pages: Array<{ name: string; targetId: string; url?: string; title?: string }>;\n }>;\n }\n\n closePage(sessionId: string, name: string): Promise<void> {\n return this.client.call(\"page.close\", { sessionId, name }) as Promise<void>;\n }\n\n async withPage<T>(_sessionId: string, _targetId: string | null, _fn: (page: never) => Promise<T>): Promise<T> {\n throw new Error(\"Direct annotate is unavailable via daemon-managed sessions.\");\n }\n}\n","import type { CanvasManagerLike } from \"../browser/canvas-manager\";\nimport { DaemonClient } from \"./daemon-client\";\n\nexport class RemoteCanvasManager implements CanvasManagerLike {\n private client: DaemonClient;\n\n constructor(client: DaemonClient) {\n this.client = client;\n }\n\n execute(command: string, params: Record<string, unknown> = {}): Promise<unknown> {\n return this.client.call(\"canvas.execute\", { command, params });\n }\n}\n","import type {\n DesktopCaptureInput,\n DesktopResult,\n DesktopRuntimeLike,\n DesktopRuntimeStatus,\n DesktopAccessibilityValue,\n DesktopCaptureValue,\n DesktopWindowSummary\n} from \"../desktop\";\nimport { DaemonClient } from \"./daemon-client\";\n\nexport class RemoteDesktopRuntime implements DesktopRuntimeLike {\n private readonly client: DaemonClient;\n\n constructor(client: DaemonClient) {\n this.client = client;\n }\n\n status(): Promise<DesktopRuntimeStatus> {\n return this.client.call<DesktopRuntimeStatus>(\"desktop.status\");\n }\n\n listWindows(reason?: string): Promise<DesktopResult<{ windows: DesktopWindowSummary[] }>> {\n return this.client.call(\"desktop.windows.list\", {\n ...(reason ? { reason } : {})\n });\n }\n\n activeWindow(reason?: string): Promise<DesktopResult<DesktopWindowSummary | null>> {\n return this.client.call(\"desktop.window.active\", {\n ...(reason ? { reason } : {})\n });\n }\n\n captureDesktop(input: DesktopCaptureInput): Promise<DesktopResult<DesktopCaptureValue>> {\n return this.client.call(\"desktop.capture.desktop\", { reason: input.reason });\n }\n\n captureWindow(windowId: string, input: DesktopCaptureInput): Promise<DesktopResult<DesktopCaptureValue>> {\n return this.client.call(\"desktop.capture.window\", {\n windowId,\n reason: input.reason\n });\n }\n\n accessibilitySnapshot(reason: string, windowId?: string): Promise<DesktopResult<DesktopAccessibilityValue>> {\n return this.client.call(\"desktop.accessibility.snapshot\", {\n reason,\n ...(windowId ? { windowId } : {})\n });\n }\n}\n","import type { RelayLike } from \"../relay/relay-types\";\nimport type { RelayStatus } from \"../relay/relay-server\";\nimport { DaemonClient } from \"./daemon-client\";\n\nconst emptyStatus: RelayStatus = {\n running: false,\n extensionConnected: false,\n extensionHandshakeComplete: false,\n cdpConnected: false,\n annotationConnected: false,\n opsConnected: false,\n canvasConnected: false,\n pairingRequired: false,\n instanceId: \"\",\n epoch: 0,\n health: {\n ok: false,\n reason: \"relay_down\",\n extensionConnected: false,\n extensionHandshakeComplete: false,\n cdpConnected: false,\n annotationConnected: false,\n opsConnected: false,\n canvasConnected: false,\n pairingRequired: false\n }\n};\n\nexport class RemoteRelay implements RelayLike {\n private client: DaemonClient;\n private lastStatus: RelayStatus = emptyStatus;\n private lastCdpUrl: string | null = null;\n private lastAnnotationUrl: string | null = null;\n private lastOpsUrl: string | null = null;\n private lastCanvasUrl: string | null = null;\n\n constructor(client: DaemonClient) {\n this.client = client;\n }\n\n async refresh(): Promise<void> {\n try {\n const status = await this.client.call<RelayStatus>(\"relay.status\");\n this.lastStatus = status;\n const cdpUrl = await this.client.call<string | null>(\"relay.cdpUrl\");\n this.lastCdpUrl = typeof cdpUrl === \"string\" ? cdpUrl : null;\n const annotationUrl = await this.client.call<string | null>(\"relay.annotationUrl\");\n this.lastAnnotationUrl = typeof annotationUrl === \"string\" ? annotationUrl : null;\n const opsUrl = await this.client.call<string | null>(\"relay.opsUrl\");\n this.lastOpsUrl = typeof opsUrl === \"string\" ? opsUrl : null;\n const canvasUrl = await this.client.call<string | null>(\"relay.canvasUrl\");\n this.lastCanvasUrl = typeof canvasUrl === \"string\" ? canvasUrl : null;\n } catch {\n this.lastStatus = emptyStatus;\n this.lastCdpUrl = null;\n this.lastAnnotationUrl = null;\n this.lastOpsUrl = null;\n this.lastCanvasUrl = null;\n }\n }\n\n status(): RelayStatus {\n return this.lastStatus;\n }\n\n getCdpUrl(): string | null {\n return this.lastCdpUrl;\n }\n\n getAnnotationUrl(): string | null {\n return this.lastAnnotationUrl;\n }\n\n getOpsUrl(): string | null {\n return this.lastOpsUrl;\n }\n\n getCanvasUrl(): string | null {\n return this.lastCanvasUrl;\n }\n}\n","import onboardingMetadata from \"../cli/onboarding-metadata.json\";\n\nexport type SkillNudgeState = {\n pending: boolean;\n requestedAtMs: number | null;\n};\n\nexport const SKILL_NUDGE_MARKER = \"[opendevbrowser:skill-nudge]\";\n\nconst SKILL_NUDGE_MESSAGE = `${SKILL_NUDGE_MARKER} If this task likely matches a skill, start with skill(\"${onboardingMetadata.skillName}\", \"${onboardingMetadata.skillTopic}\"). For frontend, UI, screenshot-to-code, or /canvas design work, then load skill(\"${onboardingMetadata.designSkillName}\", \"${onboardingMetadata.designSkillTopic}\"). Use the canonical opendevbrowser-* packs and start with the bundled quick-start lane before low-level browser commands.`;\n\ntype TextPart = { type: \"text\"; text: string };\ntype UnknownPart = { type: string; text?: string };\n\nexport function createSkillNudgeState(): SkillNudgeState {\n return { pending: false, requestedAtMs: null };\n}\n\nexport function extractTextFromParts(parts: UnknownPart[]): string {\n return parts\n .filter((part): part is TextPart => part.type === \"text\" && typeof part.text === \"string\")\n .map((part) => part.text)\n .join(\"\\n\")\n .trim();\n}\n\nexport function shouldTriggerSkillNudge(text: string, keywords: string[]): boolean {\n const normalized = text.toLowerCase();\n return keywords.some((keyword) => normalized.includes(keyword.toLowerCase()));\n}\n\nexport function markSkillNudge(state: SkillNudgeState, nowMs: number): void {\n state.pending = true;\n state.requestedAtMs = nowMs;\n}\n\nexport function clearSkillNudge(state: SkillNudgeState): void {\n state.pending = false;\n state.requestedAtMs = null;\n}\n\nexport function consumeSkillNudge(state: SkillNudgeState, nowMs: number, maxAgeMs: number): boolean {\n if (!state.pending) return false;\n\n const requestedAt = state.requestedAtMs ?? 0;\n if (!state.requestedAtMs || nowMs - requestedAt > maxAgeMs) {\n clearSkillNudge(state);\n return false;\n }\n\n clearSkillNudge(state);\n return true;\n}\n\nexport function buildSkillNudgeMessage(): string {\n return SKILL_NUDGE_MESSAGE;\n}\n","export type ContinuityNudgeState = {\n pending: boolean;\n requestedAtMs: number | null;\n};\n\nexport const CONTINUITY_NUDGE_MARKER = \"[opendevbrowser:continuity-nudge]\";\n\nconst DEFAULT_FILE_PATH = \"opendevbrowser_continuity.md\";\n\nexport function createContinuityNudgeState(): ContinuityNudgeState {\n return { pending: false, requestedAtMs: null };\n}\n\nexport function shouldTriggerContinuityNudge(text: string, keywords: string[]): boolean {\n const normalized = text.toLowerCase();\n return keywords.some((keyword) => normalized.includes(keyword.toLowerCase()));\n}\n\nexport function markContinuityNudge(state: ContinuityNudgeState, nowMs: number): void {\n state.pending = true;\n state.requestedAtMs = nowMs;\n}\n\nexport function clearContinuityNudge(state: ContinuityNudgeState): void {\n state.pending = false;\n state.requestedAtMs = null;\n}\n\nexport function consumeContinuityNudge(\n state: ContinuityNudgeState,\n nowMs: number,\n maxAgeMs: number\n): boolean {\n if (!state.pending) return false;\n\n const requestedAt = state.requestedAtMs ?? 0;\n if (!state.requestedAtMs || nowMs - requestedAt > maxAgeMs) {\n clearContinuityNudge(state);\n return false;\n }\n\n clearContinuityNudge(state);\n return true;\n}\n\nexport function buildContinuityNudgeMessage(filePath?: string): string {\n const target = filePath?.trim() || DEFAULT_FILE_PATH;\n return `${CONTINUITY_NUDGE_MARKER} For long-running tasks, load skill(\"opendevbrowser-continuity-ledger\") and create or update ${target} at the repo root with Goal, Constraints/Assumptions, Key decisions, State (Done/Now/Next), Open questions, and Working set. Keep it brief.`;\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { buildLoopbackSessionRelayEndpoint } from \"../relay/relay-endpoints\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\ntype RelayStatus = ReturnType<NonNullable<ToolDeps[\"relay\"]>[\"status\"]>;\ntype RelayObservedStatus = {\n instanceId: string;\n running: boolean;\n port?: number;\n extensionConnected: boolean;\n extensionHandshakeComplete: boolean;\n cdpConnected: boolean;\n opsConnected: boolean;\n pairingRequired: boolean;\n};\n\nexport function createLaunchTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Launch a browser session (extension relay first) and return a sessionId.\",\n args: {\n profile: z.string().optional().describe(\"Profile name for persistent browsing\"),\n headless: z.boolean().optional().describe(\"Run Chrome in headless mode\"),\n startUrl: z.string().optional().describe(\"Optional URL to open after launch\"),\n chromePath: z.string().optional().describe(\"Override Chrome executable path\"),\n flags: z.array(z.string()).optional().describe(\"Extra Chrome flags\"),\n persistProfile: z.boolean().optional().describe(\"Persist profile data between sessions\"),\n noExtension: z.boolean().optional().describe(\"Skip extension relay and launch a new browser\"),\n extensionOnly: z.boolean().optional().describe(\"Require extension relay or fail\"),\n extensionLegacy: z.boolean().optional().describe(\"Use legacy extension relay (/cdp) instead of ops\"),\n waitForExtension: z.boolean().optional().describe(\"Wait for extension to connect before launching\"),\n waitTimeoutMs: z.number().int().optional().describe(\"Timeout for waiting on extension (ms)\")\n },\n async execute(args) {\n let attemptedRebind = false;\n\n while (true) {\n try {\n await deps.relay?.refresh?.();\n const config = deps.config.get();\n const extensionLegacy = args.extensionLegacy === true;\n let relayStatus = deps.relay?.status();\n let relayUrl = extensionLegacy ? deps.relay?.getCdpUrl() ?? null : deps.relay?.getOpsUrl?.() ?? null;\n const relayPort = relayStatus?.port;\n if (!relayUrl && isValidPort(relayPort)) {\n relayUrl = buildLoopbackSessionRelayEndpoint(relayPort, { extensionLegacy });\n }\n const waitTimeoutMs = clampWaitTimeout(args.waitTimeoutMs ?? 30000);\n const headlessExplicit = args.headless === true;\n const managedExplicit = Boolean(args.noExtension || headlessExplicit);\n const managedHeadless = headlessExplicit ? true : false;\n if (headlessExplicit && !args.noExtension) {\n return failure(\n \"Extension mode does not support headless launches. Use noExtension=true with headless=true for managed mode.\",\n \"unsupported_mode\"\n );\n }\n\n if (args.waitForExtension && !managedExplicit) {\n const observedPort = resolveObservedPort(relayStatus, config.relayPort);\n const connected = await waitForExtensionHandshake(deps.relay, observedPort, waitTimeoutMs);\n if (connected) {\n relayStatus = deps.relay?.status() ?? relayStatus;\n relayUrl = extensionLegacy ? deps.relay?.getCdpUrl() ?? relayUrl : deps.relay?.getOpsUrl?.() ?? relayUrl;\n }\n }\n\n const observedPort = resolveObservedPort(relayStatus, config.relayPort);\n const shouldFetchObserved = !managedExplicit && (!relayUrl || !(relayStatus?.extensionHandshakeComplete || relayStatus?.extensionConnected));\n const observedStatus = shouldFetchObserved ? await fetchRelayObservedStatus(observedPort) : null;\n if (!relayUrl) {\n const fallbackPort = isValidPort(observedStatus?.port) ? observedStatus?.port : observedPort;\n relayUrl = fallbackPort ? buildLoopbackSessionRelayEndpoint(fallbackPort, { extensionLegacy }) : null;\n }\n const extensionReady = Boolean(\n relayUrl && (\n relayStatus?.extensionHandshakeComplete ||\n relayStatus?.extensionConnected ||\n observedStatus?.extensionHandshakeComplete ||\n observedStatus?.extensionConnected\n )\n );\n let usedRelay = false;\n let result:\n | Awaited<ReturnType<typeof deps.manager.launch>>\n | Awaited<ReturnType<typeof deps.manager.connectRelay>>\n | null = null;\n\n if (args.extensionOnly && !extensionReady) {\n const diagnostics = buildRelayNotReadyDiagnostics(\"Extension not connected.\", {\n relayUrl,\n relayStatus,\n observedStatus,\n observedPort\n });\n if (await maybeRetryHubMismatch(diagnostics.hint, attemptedRebind, deps)) {\n attemptedRebind = true;\n continue;\n }\n return failure(buildExtensionMissingMessage(diagnostics.message), \"extension_not_connected\");\n }\n\n if (!managedExplicit) {\n if (!extensionReady || !relayUrl) {\n const diagnostics = buildRelayNotReadyDiagnostics(\"Extension not connected.\", {\n relayUrl,\n relayStatus,\n observedStatus,\n observedPort\n });\n if (await maybeRetryHubMismatch(diagnostics.hint, attemptedRebind, deps)) {\n attemptedRebind = true;\n continue;\n }\n return failure(buildExtensionMissingMessage(diagnostics.message), \"extension_not_connected\");\n }\n try {\n result = args.startUrl\n ? await deps.manager.connectRelay(relayUrl, { startUrl: args.startUrl })\n : await deps.manager.connectRelay(relayUrl);\n usedRelay = true;\n } catch (error) {\n const errorMessage = serializeError(error).message;\n const unauthorized = errorMessage.toLowerCase().includes(\"unauthorized\") || errorMessage.includes(\"401\");\n const relayLabel = extensionLegacy ? \"/cdp\" : \"/ops\";\n const errorObservedStatus = observedStatus ?? await fetchRelayObservedStatus(observedPort);\n const diagnostics = buildRelayNotReadyDiagnostics(\n unauthorized\n ? `Extension relay connection failed: relay ${relayLabel} unauthorized (token mismatch).`\n : `Extension relay connection failed: ${errorMessage}`,\n {\n relayUrl,\n relayStatus,\n observedStatus: errorObservedStatus,\n observedPort\n }\n );\n if (await maybeRetryHubMismatch(diagnostics.hint, attemptedRebind, deps)) {\n attemptedRebind = true;\n continue;\n }\n return failure(buildExtensionMissingMessage(diagnostics.message), \"extension_connect_failed\");\n }\n }\n\n if (!result) {\n try {\n result = await deps.manager.launch({\n profile: args.profile,\n headless: managedHeadless,\n startUrl: args.startUrl,\n chromePath: args.chromePath,\n flags: args.flags,\n persistProfile: args.persistProfile,\n noExtension: args.noExtension\n });\n } catch (error) {\n return failure(buildManagedFailureMessage(error), \"launch_failed\");\n }\n }\n\n const warnings = result.warnings ?? [];\n return ok({\n sessionId: result.sessionId,\n mode: result.mode,\n browserWsEndpoint: result.wsEndpoint,\n activeTargetId: result.activeTargetId,\n warnings: warnings.length ? warnings : undefined\n });\n } catch (error) {\n return failure(serializeError(error).message, \"launch_failed\");\n }\n }\n }\n });\n}\n\nconst buildExtensionMissingMessage = (reason: string): string => {\n return [\n reason,\n \"Connect the extension: open the Chrome extension popup and click Connect, then retry.\",\n \"Tip: If the popup says Connected, it may be connected to a different relay instance/port than this tool expects.\",\n \"Legend: ext=extension websocket, handshake=extension handshake, ops=active /ops client, cdp=active /cdp client, pairing=token required.\",\n \"\",\n \"Other options (explicit):\",\n \"- Managed (headed): npx opendevbrowser launch --no-extension\",\n \"- Managed (headless): npx opendevbrowser launch --no-extension --headless\",\n \"- Legacy extension relay: npx opendevbrowser launch --extension-legacy\",\n \"- CDPConnect (default port): npx opendevbrowser connect --cdp-port 9222\",\n \"- CDPConnect (explicit WS): npx opendevbrowser connect --ws-endpoint ws://127.0.0.1:9222/devtools/browser/<id>\",\n \"Note: CDPConnect requires Chrome started with --remote-debugging-port=9222.\"\n ].join(\"\\n\");\n};\n\nconst buildManagedFailureMessage = (error: unknown): string => {\n const detail = serializeError(error).message;\n return [\n `Managed session failed: ${detail}`,\n \"\",\n \"Final option (explicit):\",\n \"- CDPConnect (default port): npx opendevbrowser connect --cdp-port 9222\",\n \"- CDPConnect (explicit WS): npx opendevbrowser connect --ws-endpoint ws://127.0.0.1:9222/devtools/browser/<id>\"\n ].join(\"\\n\");\n};\n\nconst MIN_WAIT_TIMEOUT_MS = 3000;\nconst WAIT_MIN_DELAY_MS = 250;\nconst WAIT_MAX_DELAY_MS = 2000;\n\nfunction clampWaitTimeout(timeoutMs: number): number {\n if (!Number.isFinite(timeoutMs)) {\n return MIN_WAIT_TIMEOUT_MS;\n }\n return Math.max(timeoutMs, MIN_WAIT_TIMEOUT_MS);\n}\n\nasync function waitForExtensionHandshake(\n relay: { status: () => { extensionHandshakeComplete: boolean } } | undefined,\n observedPort: number | null,\n timeoutMs: number\n): Promise<boolean> {\n const start = Date.now();\n let delay = WAIT_MIN_DELAY_MS;\n while (Date.now() - start < timeoutMs) {\n if (relay?.status().extensionHandshakeComplete) {\n return true;\n }\n const observedStatus = await fetchRelayObservedStatus(observedPort);\n if (observedStatus?.extensionHandshakeComplete) {\n return true;\n }\n await new Promise((resolve) => setTimeout(resolve, delay));\n delay = Math.min(delay * 2, WAIT_MAX_DELAY_MS);\n }\n return false;\n}\n\nfunction resolveObservedPort(relayStatus: RelayStatus | undefined, configPort: number): number | null {\n const relayPort = relayStatus?.port;\n if (isValidPort(relayPort)) return relayPort;\n if (isValidPort(configPort)) return configPort;\n return null;\n}\n\nfunction isValidPort(port: unknown): port is number {\n return typeof port === \"number\" && Number.isInteger(port) && port > 0 && port <= 65535;\n}\n\nfunction shortInstanceId(value: string | undefined): string {\n if (!value) return \"?\";\n return value.slice(0, 8);\n}\n\nfunction formatRelayUrl(relayUrl: string | null): string {\n return relayUrl ?? \"null\";\n}\n\nfunction formatLocalStatus(status: RelayStatus | undefined): string {\n return [\n \"local(instance=\",\n shortInstanceId(status?.instanceId),\n \" port=\",\n typeof status?.port === \"number\" ? String(status.port) : \"?\",\n \" ext=\",\n String(Boolean(status?.extensionConnected)),\n \" handshake=\",\n String(Boolean(status?.extensionHandshakeComplete)),\n \" ops=\",\n String(Boolean(status?.opsConnected)),\n \" cdp=\",\n String(Boolean(status?.cdpConnected)),\n \" pairing=\",\n String(Boolean(status?.pairingRequired)),\n \")\"\n ].join(\"\");\n}\n\nfunction formatObservedStatus(status: RelayObservedStatus | null, port: number | null): string {\n const label = port ?? \"?\";\n if (!status) {\n return `observed@${label}=none`;\n }\n return [\n \"observed@\",\n label,\n \"=instance=\",\n shortInstanceId(status.instanceId),\n \" ext=\",\n String(Boolean(status.extensionConnected)),\n \" handshake=\",\n String(Boolean(status.extensionHandshakeComplete)),\n \" ops=\",\n String(Boolean(status.opsConnected)),\n \" cdp=\",\n String(Boolean(status.cdpConnected)),\n \" pairing=\",\n String(Boolean(status.pairingRequired))\n ].join(\"\");\n}\n\ntype RelayNotReadyDiagnostics = {\n message: string;\n hint: string;\n};\n\nfunction buildRelayNotReadyDiagnostics(\n baseReason: string,\n detail: {\n relayUrl: string | null;\n relayStatus: RelayStatus | undefined;\n observedStatus: RelayObservedStatus | null;\n observedPort: number | null;\n }\n): RelayNotReadyDiagnostics {\n const localExt = Boolean(detail.relayStatus?.extensionConnected);\n const observedExt = Boolean(detail.observedStatus?.extensionConnected);\n let hint = \"none\";\n if (detail.relayUrl === null) {\n hint = \"relayUrl_null\";\n } else if (detail.observedStatus && !localExt && observedExt) {\n hint = \"possible_mismatch\";\n } else if (detail.relayStatus?.instanceId && detail.observedStatus?.instanceId\n && detail.relayStatus.instanceId !== detail.observedStatus.instanceId) {\n hint = \"possible_mismatch\";\n }\n const diagnostics = [\n \"Diagnostics: relayUrl=\",\n formatRelayUrl(detail.relayUrl),\n \" \",\n formatLocalStatus(detail.relayStatus),\n \" \",\n formatObservedStatus(detail.observedStatus, detail.observedPort),\n \" hint=\",\n hint\n ].join(\"\");\n return { message: [baseReason, diagnostics].join(\"\\n\"), hint };\n}\n\nasync function maybeRetryHubMismatch(\n hint: string,\n attempted: boolean,\n deps: ToolDeps\n): Promise<boolean> {\n if (attempted) return false;\n if (hint !== \"possible_mismatch\") return false;\n if (!deps.ensureHub) return false;\n await deps.ensureHub();\n await deps.relay?.refresh?.();\n return true;\n}\n\nasync function fetchRelayObservedStatus(port: number | null): Promise<RelayObservedStatus | null> {\n if (!isValidPort(port)) return null;\n if (typeof fetch !== \"function\") return null;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 500);\n try {\n const response = await fetch(`http://127.0.0.1:${port}/status`, { signal: controller.signal });\n if (!response.ok) return null;\n const payload = await response.json() as Partial<RelayObservedStatus>;\n if (!payload || typeof payload.instanceId !== \"string\") return null;\n return {\n instanceId: payload.instanceId,\n running: Boolean(payload.running),\n port: typeof payload.port === \"number\" ? payload.port : undefined,\n extensionConnected: Boolean(payload.extensionConnected),\n extensionHandshakeComplete: Boolean(payload.extensionHandshakeComplete),\n cdpConnected: Boolean(payload.cdpConnected),\n opsConnected: Boolean(payload.opsConnected),\n pairingRequired: Boolean(payload.pairingRequired)\n };\n } catch {\n return null;\n } finally {\n clearTimeout(timeoutId);\n }\n}\n","export type ToolError = {\n ok: false;\n error: {\n message: string;\n code?: string;\n details?: Record<string, unknown>;\n };\n};\n\nexport type ToolOk<T> = T & { ok: true };\n\nexport function ok<T extends Record<string, unknown>>(data: T): string {\n return JSON.stringify({ ok: true, ...data });\n}\n\nexport function failure(message: string, code?: string, details?: Record<string, unknown>): string {\n return JSON.stringify({\n ok: false,\n error: {\n message,\n code,\n ...(details ? { details } : {})\n }\n });\n}\n\nexport function serializeError(error: unknown): { message: string; code?: string; details?: Record<string, unknown> } {\n if (error instanceof Error) {\n const detailCarrier = error as Error & { code?: string; blocker?: unknown; details?: unknown };\n const details = detailCarrier.details && typeof detailCarrier.details === \"object\" && !Array.isArray(detailCarrier.details)\n ? detailCarrier.details as Record<string, unknown>\n : detailCarrier.blocker && typeof detailCarrier.blocker === \"object\" && !Array.isArray(detailCarrier.blocker)\n ? { blocker: detailCarrier.blocker as Record<string, unknown> }\n : undefined;\n return {\n message: error.message,\n code: detailCarrier.code,\n details\n };\n }\n return { message: \"Unknown error\" };\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { classifySessionRelayEndpoint, resolveSessionRelayRoute } from \"../relay/relay-endpoints\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createConnectTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Connect to an existing Chrome CDP endpoint or extension relay.\",\n args: {\n wsEndpoint: z.string().optional().describe(\"Full WebSocket endpoint to connect to\"),\n host: z.string().optional().describe(\"Host for /json/version lookup\"),\n port: z.number().int().optional().describe(\"Port for /json/version lookup\"),\n startUrl: z.string().optional().describe(\"Open this URL immediately after connect\"),\n extensionLegacy: z.boolean().optional().describe(\"Use legacy extension relay (/cdp) instead of ops\")\n },\n async execute(args) {\n try {\n await deps.relay?.refresh?.();\n const wsEndpoint = args.wsEndpoint;\n const extensionLegacy = args.extensionLegacy === true;\n const startUrl = typeof args.startUrl === \"string\" && args.startUrl.trim().length > 0\n ? args.startUrl.trim()\n : undefined;\n const hasExplicitCdp = Boolean(wsEndpoint || args.host || args.port);\n const relayUrl = extensionLegacy ? deps.relay?.getCdpUrl() ?? null : deps.relay?.getOpsUrl?.() ?? null;\n const parsedRelayEndpoint = classifySessionRelayEndpoint(wsEndpoint);\n const resolvedRelayEndpoint = parsedRelayEndpoint\n ? resolveSessionRelayRoute(parsedRelayEndpoint, { extensionLegacy })\n : null;\n if (resolvedRelayEndpoint && \"code\" in resolvedRelayEndpoint) {\n return failure(resolvedRelayEndpoint.message, resolvedRelayEndpoint.code);\n }\n const relayEndpoint = relayUrl && wsEndpoint === relayUrl\n ? relayUrl\n : resolvedRelayEndpoint?.normalizedEndpoint ?? null;\n const preferredRelayEndpoint = relayEndpoint ?? (!hasExplicitCdp ? relayUrl : null);\n let result;\n if (preferredRelayEndpoint) {\n result = startUrl\n ? await deps.manager.connectRelay(preferredRelayEndpoint, { startUrl })\n : await deps.manager.connectRelay(preferredRelayEndpoint);\n } else {\n if (!hasExplicitCdp) {\n return failure(\"Extension relay not available. Connect the extension or pass wsEndpoint/host/port.\", \"extension_not_connected\");\n }\n result = await deps.manager.connect({\n wsEndpoint,\n host: args.host,\n port: args.port,\n startUrl\n });\n }\n return ok({\n sessionId: result.sessionId,\n mode: result.mode,\n browserWsEndpoint: result.wsEndpoint,\n activeTargetId: result.activeTargetId,\n warnings: result.warnings.length ? result.warnings : undefined\n });\n } catch (error) {\n return failure(serializeError(error).message, \"connect_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createDisconnectTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Disconnect a browser session.\",\n args: {\n sessionId: z.string().describe(\"Session id returned from launch/connect\"),\n closeBrowser: z.boolean().optional().describe(\"Close the underlying browser process\")\n },\n async execute(args) {\n try {\n await deps.manager.disconnect(args.sessionId, Boolean(args.closeBrowser));\n return ok({});\n } catch (error) {\n return failure(serializeError(error).message, \"disconnect_failed\");\n }\n }\n });\n}\n","import { readFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { fetchDaemonStatusFromMetadata } from \"../cli/daemon-status\";\nimport { isHubEnabled } from \"../utils/hub-enabled\";\n\nconst z = tool.schema;\n\nfunction getPackageVersion(): string | undefined {\n try {\n const baseDir = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n join(baseDir, \"..\", \"..\", \"package.json\"),\n join(baseDir, \"..\", \"package.json\")\n ];\n for (const pkgPath of candidates) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n if (typeof pkg.version === \"string\") {\n return pkg.version;\n }\n } catch (error) {\n void error;\n }\n }\n return undefined;\n } catch (error) {\n void error;\n return undefined;\n }\n}\n\nasync function fetchLatestVersion(packageName: string): Promise<string | undefined> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 5000);\n try {\n const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`, { signal: controller.signal });\n if (!response.ok) return undefined;\n const payload = await response.json() as { version?: unknown };\n return typeof payload.version === \"string\" ? payload.version : undefined;\n } catch (error) {\n console.warn(\"[opendevbrowser] Update check failed:\", error);\n return undefined;\n } finally {\n clearTimeout(timeoutId);\n }\n}\n\nexport function createStatusTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Get daemon or session status.\",\n args: {\n sessionId: z.string().optional().describe(\"Session id (required when hub is disabled)\")\n },\n async execute(args) {\n try {\n const config = deps.config.get();\n const hubEnabled = isHubEnabled(config);\n const extensionPath = deps.getExtensionPath?.() ?? null;\n const version = getPackageVersion();\n let updateHint: string | undefined;\n let sessionStatus: { mode: string; activeTargetId: string | null; url?: string; title?: string } | null = null;\n\n if (hubEnabled) {\n const daemonStatus = await fetchDaemonStatusFromMetadata();\n if (!daemonStatus) {\n return failure(\"Daemon not running. Start with `npx opendevbrowser serve`.\", \"status_failed\");\n }\n if (args.sessionId) {\n sessionStatus = await deps.manager.status(args.sessionId);\n }\n\n if (config.checkForUpdates && version) {\n const latest = await fetchLatestVersion(\"opendevbrowser\");\n if (latest && latest !== version) {\n updateHint = `Update available: ${version} -> ${latest}`;\n }\n }\n\n return ok({\n ...(sessionStatus ?? {}),\n daemon: daemonStatus,\n hubEnabled: true,\n extensionPath: extensionPath ?? undefined,\n version,\n updateHint\n });\n }\n\n if (!args.sessionId) {\n return failure(\"Missing sessionId for status.\", \"status_failed\");\n }\n\n sessionStatus = await deps.manager.status(args.sessionId);\n\n if (config.checkForUpdates && version) {\n const latest = await fetchLatestVersion(\"opendevbrowser\");\n if (latest && latest !== version) {\n updateHint = `Update available: ${version} -> ${latest}`;\n }\n }\n \n return ok({\n mode: sessionStatus.mode,\n activeTargetId: sessionStatus.activeTargetId,\n url: sessionStatus.url,\n title: sessionStatus.title,\n extensionPath: extensionPath ?? undefined,\n version,\n updateHint\n });\n } catch (error) {\n return failure(serializeError(error).message, \"status_failed\");\n }\n }\n });\n}\n","import type { OpenDevBrowserConfig } from \"../config\";\n\nexport const isHubEnabled = (config: OpenDevBrowserConfig): boolean => {\n return config.relayToken !== false && config.relayPort > 0;\n};\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { CHALLENGE_AUTOMATION_MODES } from \"../challenges/types\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { requireAutomationCoordinator } from \"./automation-shared\";\n\nconst z = tool.schema;\nconst challengeAutomationModeSchema = z.enum(CHALLENGE_AUTOMATION_MODES);\n\nexport function createStatusCapabilitiesTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Inspect runtime capability discovery for the host and an optional session.\",\n args: {\n sessionId: z.string().optional().describe(\"Optional session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n challengeAutomationMode: challengeAutomationModeSchema.optional().describe(\"Optional browser-scoped computer-use mode override\")\n },\n async execute(args) {\n try {\n const coordinator = requireAutomationCoordinator(deps);\n if (typeof coordinator === \"string\") {\n return coordinator;\n }\n const result = await coordinator.statusCapabilities({\n browserSessionId: args.sessionId,\n targetId: args.targetId,\n runMode: args.challengeAutomationMode\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"status_capabilities_failed\");\n }\n }\n });\n}\n","import type { SessionInspectorHandle } from \"../browser/manager-types\";\nimport type { AutomationCoordinatorLike } from \"../automation/coordinator\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure } from \"./response\";\n\nexport function requireAutomationCoordinator(\n deps: ToolDeps\n): AutomationCoordinatorLike | string {\n return deps.automationCoordinator\n ?? failure(\"Automation coordinator unavailable.\", \"automation_coordinator_unavailable\");\n}\n\nexport function requireSessionInspectorHandle(\n deps: ToolDeps\n): SessionInspectorHandle | string {\n const inspector = deps.manager.createSessionInspector?.();\n return inspector\n ?? failure(\n \"Session inspector is unavailable for the current runtime.\",\n \"session_inspector_unavailable\"\n );\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { inspectSession } from \"../browser/session-inspector\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { requireSessionInspectorHandle } from \"./automation-shared\";\n\nconst z = tool.schema;\n\nexport function createSessionInspectorTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture a session-first diagnostic bundle with relay health, trace proof, and a suggested next action.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n includeUrls: z.boolean().optional().describe(\"Include target URLs in the targets summary\"),\n sinceConsoleSeq: z.number().int().optional().describe(\"Resume cursor for console events\"),\n sinceNetworkSeq: z.number().int().optional().describe(\"Resume cursor for network events\"),\n sinceExceptionSeq: z.number().int().optional().describe(\"Resume cursor for exception events\"),\n max: z.number().int().optional().describe(\"Max events per diagnostics channel\"),\n requestId: z.string().optional().describe(\"Optional trace request id\")\n },\n async execute(args) {\n try {\n const inspector = requireSessionInspectorHandle(deps);\n if (typeof inspector === \"string\") {\n return inspector;\n }\n\n await deps.relay?.refresh?.().catch(() => undefined);\n const relayStatus = deps.relay?.status?.() ?? null;\n const result = await inspectSession(inspector, {\n sessionId: args.sessionId,\n includeUrls: args.includeUrls,\n sinceConsoleSeq: args.sinceConsoleSeq,\n sinceNetworkSeq: args.sinceNetworkSeq,\n sinceExceptionSeq: args.sinceExceptionSeq,\n max: args.max,\n requestId: args.requestId,\n relayStatus\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"session_inspector_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { CHALLENGE_AUTOMATION_MODES } from \"../challenges/types\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { requireAutomationCoordinator } from \"./automation-shared\";\n\nconst z = tool.schema;\nconst challengeAutomationModeSchema = z.enum(CHALLENGE_AUTOMATION_MODES);\n\nexport function createSessionInspectorPlanTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Inspect browser-scoped computer-use policy, eligibility, and safe suggested steps.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n challengeAutomationMode: challengeAutomationModeSchema.optional().describe(\"Optional browser-scoped computer-use mode override\")\n },\n async execute(args) {\n try {\n const coordinator = requireAutomationCoordinator(deps);\n if (typeof coordinator === \"string\") {\n return coordinator;\n }\n const result = await coordinator.inspectChallengePlan({\n browserSessionId: args.sessionId,\n targetId: args.targetId,\n runMode: args.challengeAutomationMode\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"session_inspector_plan_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { buildCorrelatedAuditBundle } from \"../browser/session-inspector\";\nimport { CHALLENGE_AUTOMATION_MODES } from \"../challenges/types\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport {\n requireAutomationCoordinator,\n requireSessionInspectorHandle\n} from \"./automation-shared\";\n\nconst z = tool.schema;\nconst challengeAutomationModeSchema = z.enum(CHALLENGE_AUTOMATION_MODES);\n\nexport function createSessionInspectorAuditTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture a correlated audit bundle across desktop evidence, browser review, and policy state.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n reason: z.string().optional().describe(\"Optional audit reason\"),\n maxChars: z.number().int().optional().describe(\"Max characters for review output\"),\n cursor: z.string().optional().describe(\"Cursor for paging\"),\n includeUrls: z.boolean().optional().describe(\"Include target URLs in the targets summary\"),\n sinceConsoleSeq: z.number().int().optional().describe(\"Resume cursor for console events\"),\n sinceNetworkSeq: z.number().int().optional().describe(\"Resume cursor for network events\"),\n sinceExceptionSeq: z.number().int().optional().describe(\"Resume cursor for exception events\"),\n max: z.number().int().optional().describe(\"Max events per diagnostics channel\"),\n requestId: z.string().optional().describe(\"Optional trace request id\"),\n challengeAutomationMode: challengeAutomationModeSchema.optional().describe(\"Optional browser-scoped computer-use mode override\")\n },\n async execute(args) {\n try {\n const coordinator = requireAutomationCoordinator(deps);\n if (typeof coordinator === \"string\") {\n return coordinator;\n }\n const inspector = requireSessionInspectorHandle(deps);\n if (typeof inspector === \"string\") {\n return inspector;\n }\n await deps.relay?.refresh?.().catch(() => undefined);\n const review = await coordinator.reviewDesktop({\n browserSessionId: args.sessionId,\n targetId: args.targetId,\n reason: args.reason,\n maxChars: args.maxChars,\n cursor: args.cursor\n });\n const challengePlan = await coordinator.inspectChallengePlan({\n browserSessionId: args.sessionId,\n targetId: args.targetId,\n runMode: args.challengeAutomationMode\n });\n const result = await buildCorrelatedAuditBundle({\n handle: inspector,\n browserSessionId: args.sessionId,\n targetId: args.targetId,\n observation: review.observation,\n review: review.verification,\n challengePlan,\n includeUrls: args.includeUrls,\n sinceConsoleSeq: args.sinceConsoleSeq,\n sinceNetworkSeq: args.sinceNetworkSeq,\n sinceExceptionSeq: args.sinceExceptionSeq,\n max: args.max,\n requestId: args.requestId,\n relayStatus: deps.relay?.status?.() ?? null\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"session_inspector_audit_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createTargetsListTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"List targets (tabs) in the current session.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n includeUrls: z.boolean().optional().describe(\"Include target URLs\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.listTargets(args.sessionId, Boolean(args.includeUrls));\n return ok({\n activeTargetId: result.activeTargetId,\n targets: result.targets\n });\n } catch (error) {\n return failure(serializeError(error).message, \"targets_list_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createTargetUseTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Set the active target (tab).\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().describe(\"Target id\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.useTarget(args.sessionId, args.targetId);\n return ok({\n activeTargetId: result.activeTargetId,\n url: result.url,\n title: result.title\n });\n } catch (error) {\n return failure(serializeError(error).message, \"target_use_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createTargetNewTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Open a new target (tab).\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n url: z.string().optional().describe(\"Optional URL to open\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.newTarget(args.sessionId, args.url);\n return ok({ targetId: result.targetId });\n } catch (error) {\n return failure(serializeError(error).message, \"target_new_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createTargetCloseTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Close a target (tab).\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().describe(\"Target id\")\n },\n async execute(args) {\n try {\n await deps.manager.closeTarget(args.sessionId, args.targetId);\n return ok({});\n } catch (error) {\n return failure(serializeError(error).message, \"target_close_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPageTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Open or focus a named page, optionally navigating to a URL.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n name: z.string().describe(\"Stable page name\"),\n url: z.string().optional().describe(\"Optional URL to open\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.page(args.sessionId, args.name, args.url);\n return ok({\n targetId: result.targetId,\n created: result.created,\n url: result.url,\n title: result.title\n });\n } catch (error) {\n return failure(serializeError(error).message, \"page_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createListTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"List named pages in the current session.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.listPages(args.sessionId);\n return ok({ pages: result.pages });\n } catch (error) {\n return failure(serializeError(error).message, \"list_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createCloseTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Close a named page within the current session.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n name: z.string().describe(\"Named page to close\")\n },\n async execute(args) {\n try {\n await deps.manager.closePage(args.sessionId, args.name);\n return ok({});\n } catch (error) {\n return failure(serializeError(error).message, \"close_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nconst waitUntilSchema = z.enum([\"domcontentloaded\", \"load\", \"networkidle\"]);\n\nexport function createGotoTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Navigate the active target to a URL.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n url: z.string().describe(\"URL to navigate to\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n waitUntil: waitUntilSchema.optional().describe(\"Load state to wait for\"),\n timeoutMs: z.number().int().optional().describe(\"Timeout in milliseconds\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.goto(\n args.sessionId,\n args.url,\n args.waitUntil ?? \"load\",\n args.timeoutMs ?? 30000,\n undefined,\n args.targetId\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"goto_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nconst waitUntilSchema = z.enum([\"domcontentloaded\", \"load\", \"networkidle\"]);\nconst waitStateSchema = z.enum([\"attached\", \"visible\", \"hidden\"]);\n\nexport function createWaitTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Wait for a load state or a ref state.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n until: waitUntilSchema.optional().describe(\"Load state to wait for\"),\n ref: z.string().optional().describe(\"Ref to wait for\"),\n state: waitStateSchema.optional().describe(\"Ref state to wait for\"),\n timeoutMs: z.number().int().optional().describe(\"Timeout in milliseconds\")\n },\n async execute(args) {\n try {\n if (args.ref) {\n const result = await deps.manager.waitForRef(\n args.sessionId,\n args.ref,\n args.state ?? \"attached\",\n args.timeoutMs ?? 30000,\n args.targetId\n );\n return ok(result);\n }\n\n if (!args.until) {\n return failure(\"Provide either ref or until\", \"wait_invalid\");\n }\n\n const result = await deps.manager.waitForLoad(\n args.sessionId,\n args.until,\n args.timeoutMs ?? 30000,\n args.targetId\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"wait_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nconst formatSchema = z.enum([\"outline\", \"actionables\"]);\n\nexport function createSnapshotTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture a snapshot of the current page and return refs.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n format: formatSchema.optional().describe(\"Snapshot format\"),\n maxChars: z.number().int().optional().describe(\"Max characters for snapshot output\"),\n cursor: z.string().optional().describe(\"Cursor for paging\")\n },\n async execute(args) {\n try {\n const config = deps.config.get();\n const result = await deps.manager.snapshot(\n args.sessionId,\n args.format ?? \"outline\",\n args.maxChars ?? config.snapshot.maxChars,\n args.cursor,\n args.targetId\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"snapshot_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { buildBrowserReviewResult } from \"../browser/review-surface\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createReviewTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture a first-class review payload with status and actionables.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n maxChars: z.number().int().optional().describe(\"Max characters for review output\"),\n cursor: z.string().optional().describe(\"Cursor for paging\")\n },\n async execute(args) {\n try {\n const config = deps.config.get();\n const result = await buildBrowserReviewResult({\n manager: deps.manager,\n sessionId: args.sessionId,\n targetId: args.targetId,\n maxChars: args.maxChars ?? config.snapshot.maxChars,\n cursor: args.cursor\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"review_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { requireAutomationCoordinator } from \"./automation-shared\";\n\nconst z = tool.schema;\n\nexport function createReviewDesktopTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture desktop-assisted browser review with read-only desktop evidence and browser-owned verification.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n reason: z.string().optional().describe(\"Optional audit reason\"),\n maxChars: z.number().int().optional().describe(\"Max characters for review output\"),\n cursor: z.string().optional().describe(\"Cursor for paging\")\n },\n async execute(args) {\n try {\n const coordinator = requireAutomationCoordinator(deps);\n if (typeof coordinator === \"string\") {\n return coordinator;\n }\n const result = await coordinator.reviewDesktop({\n browserSessionId: args.sessionId,\n targetId: args.targetId,\n reason: args.reason,\n maxChars: args.maxChars,\n cursor: args.cursor\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"review_desktop_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createClickTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Click a referenced element.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.click(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"click_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createHoverTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Hover over an element by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.hover(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"hover_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPressTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Press a keyboard key, optionally focusing a ref first.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n key: z.string().describe(\"Keyboard key to press, e.g. Enter or ArrowDown\"),\n ref: z.string().optional().describe(\"Optional element ref to focus first\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.press(args.sessionId, args.key, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"press_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createCheckTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Check a checkbox or toggle by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.check(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"check_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createUncheckTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Uncheck a checkbox or toggle by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.uncheck(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"uncheck_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createTypeTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Type text into a referenced input.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref\"),\n text: z.string().describe(\"Text to type\"),\n clear: z.boolean().optional().describe(\"Clear before typing\"),\n submit: z.boolean().optional().describe(\"Press Enter after typing\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.type(\n args.sessionId,\n args.ref,\n args.text,\n Boolean(args.clear),\n Boolean(args.submit),\n args.targetId\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"type_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createSelectTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Select options in a referenced select element.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref\"),\n values: z.array(z.string()).describe(\"Values to select\")\n },\n async execute(args) {\n try {\n await deps.manager.select(args.sessionId, args.ref, args.values, args.targetId);\n return ok({});\n } catch (error) {\n return failure(serializeError(error).message, \"select_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createScrollTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Scroll the page or a referenced element.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n dy: z.number().describe(\"Scroll delta in pixels\"),\n ref: z.string().optional().describe(\"Optional element ref to scroll\")\n },\n async execute(args) {\n try {\n await deps.manager.scroll(args.sessionId, args.dy, args.ref, args.targetId);\n return ok({});\n } catch (error) {\n return failure(serializeError(error).message, \"scroll_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createScrollIntoViewTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Scroll an element into view by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.scrollIntoView(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"scroll_into_view_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createUploadTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Upload files to an input or chooser by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref\"),\n files: z.array(z.string()).min(1).describe(\"Local host file paths\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.upload(args.sessionId, {\n targetId: args.targetId,\n ref: args.ref,\n files: args.files\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"upload_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPointerMoveTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Move the pointer to viewport coordinates.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n x: z.number().describe(\"Viewport x coordinate\"),\n y: z.number().describe(\"Viewport y coordinate\"),\n steps: z.number().int().positive().optional().describe(\"Optional move interpolation step count\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.pointerMove(args.sessionId, args.x, args.y, args.targetId, args.steps);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"pointer_move_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPointerDownTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Move to viewport coordinates and press a mouse button.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n x: z.number().describe(\"Viewport x coordinate\"),\n y: z.number().describe(\"Viewport y coordinate\"),\n button: z.enum([\"left\", \"middle\", \"right\"]).optional().describe(\"Mouse button to press\"),\n clickCount: z.number().int().positive().optional().describe(\"Associated click count\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.pointerDown(\n args.sessionId,\n args.x,\n args.y,\n args.targetId,\n args.button,\n args.clickCount\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"pointer_down_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPointerUpTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Move to viewport coordinates and release a mouse button.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n x: z.number().describe(\"Viewport x coordinate\"),\n y: z.number().describe(\"Viewport y coordinate\"),\n button: z.enum([\"left\", \"middle\", \"right\"]).optional().describe(\"Mouse button to release\"),\n clickCount: z.number().int().positive().optional().describe(\"Associated click count\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.pointerUp(\n args.sessionId,\n args.x,\n args.y,\n args.targetId,\n args.button,\n args.clickCount\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"pointer_up_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPointerDragTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Drag the pointer between two viewport coordinates.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n fromX: z.number().describe(\"Start x coordinate\"),\n fromY: z.number().describe(\"Start y coordinate\"),\n toX: z.number().describe(\"End x coordinate\"),\n toY: z.number().describe(\"End y coordinate\"),\n steps: z.number().int().positive().optional().describe(\"Optional drag interpolation step count\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.drag(\n args.sessionId,\n { x: args.fromX, y: args.fromY },\n { x: args.toX, y: args.toY },\n args.targetId,\n args.steps\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"pointer_drag_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createDomGetHtmlTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Get outerHTML for a referenced element.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref\"),\n maxChars: z.number().int().optional().describe(\"Max characters\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.domGetHtml(\n args.sessionId,\n args.ref,\n args.maxChars ?? 8000,\n args.targetId\n );\n return ok({\n ref: args.ref,\n outerHTML: result.outerHTML,\n truncated: result.truncated\n });\n } catch (error) {\n return failure(serializeError(error).message, \"dom_get_html_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createDomGetTextTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Get inner text for a referenced element.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref\"),\n maxChars: z.number().int().optional().describe(\"Max characters\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.domGetText(\n args.sessionId,\n args.ref,\n args.maxChars ?? 8000,\n args.targetId\n );\n return ok({\n ref: args.ref,\n text: result.text,\n truncated: result.truncated\n });\n } catch (error) {\n return failure(serializeError(error).message, \"dom_get_text_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createGetAttrTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Get a DOM attribute value by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\"),\n name: z.string().describe(\"Attribute name, e.g. href or aria-label\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.domGetAttr(args.sessionId, args.ref, args.name, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"get_attr_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createGetValueTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Get the input value for an element by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.domGetValue(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"get_value_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createIsVisibleTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Check if an element is visible by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.domIsVisible(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"is_visible_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createIsEnabledTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Check if an element is enabled by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.domIsEnabled(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"is_enabled_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createIsCheckedTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Check if an element is checked by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.domIsChecked(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"is_checked_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nconst stepSchema = z.object({\n action: z.string().describe(\"Action name\"),\n args: z.record(z.string(), z.unknown()).optional().describe(\"Action arguments\")\n});\n\nexport function createRunTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Run multiple actions in a single tool call.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n steps: z.array(stepSchema).describe(\"Steps to execute\"),\n stopOnError: z.boolean().optional().describe(\"Stop when a step fails\"),\n maxSnapshotChars: z.number().int().optional().describe(\"Default maxChars for snapshot steps\")\n },\n async execute(args) {\n try {\n const steps = normalizeSteps(args.steps, args.maxSnapshotChars);\n const result = await deps.runner.run(\n args.sessionId,\n steps,\n args.stopOnError ?? true\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"run_failed\");\n }\n }\n });\n}\n\nfunction normalizeSteps(\n steps: Array<{ action: string; args?: Record<string, unknown> }>,\n maxSnapshotChars?: number\n): Array<{ action: string; args?: Record<string, unknown> }> {\n if (!maxSnapshotChars) return steps;\n\n return steps.map((step) => {\n if (step.action !== \"snapshot\") return step;\n if (step.args && typeof step.args.maxChars === \"number\") return step;\n return {\n ...step,\n args: {\n ...step.args,\n maxChars: maxSnapshotChars\n }\n };\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport onboardingMetadata from \"../cli/onboarding-metadata.json\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPromptingGuideTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: `Start here for first-contact OpenDevBrowser guidance, including ${onboardingMetadata.skillName} ${onboardingMetadata.skillTopic}.`,\n args: {\n topic: z.string().optional().describe(\"Optional topic for guidance\")\n },\n async execute(args) {\n try {\n const guide = await deps.skills.loadBestPractices(args.topic);\n return ok({ guide });\n } catch (error) {\n return failure(serializeError(error).message, \"prompting_guide_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createConsolePollTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Poll console events for the active target.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n sinceSeq: z.number().int().optional().describe(\"Sequence to resume from\"),\n max: z.number().int().optional().describe(\"Max events to return\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.consolePoll(\n args.sessionId,\n args.sinceSeq,\n args.max ?? 50\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"console_poll_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createNetworkPollTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Poll network events for the active target.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n sinceSeq: z.number().int().optional().describe(\"Sequence to resume from\"),\n max: z.number().int().optional().describe(\"Max events to return\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.networkPoll(\n args.sessionId,\n args.sinceSeq,\n args.max ?? 50\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"network_poll_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { createRequestId } from \"../core/logging\";\nimport { buildBlockerArtifacts, classifyBlockerSignal } from \"../providers/blocker\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\ntype DebugTraceSnapshotOptions = {\n sinceConsoleSeq?: number;\n sinceNetworkSeq?: number;\n sinceExceptionSeq?: number;\n max?: number;\n requestId?: string;\n};\n\ntype DebugTraceSnapshotCapableManager = {\n debugTraceSnapshot?: (\n sessionId: string,\n options?: DebugTraceSnapshotOptions\n ) => Promise<unknown>;\n exceptionPoll?: (\n sessionId: string,\n sinceSeq?: number,\n max?: number\n ) => Promise<{ events: unknown[]; nextSeq: number; truncated?: boolean }>;\n};\n\nexport function createDebugTraceSnapshotTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture a combined debug trace snapshot (page + console + network + exceptions).\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n sinceConsoleSeq: z.number().int().optional().describe(\"Resume cursor for console events\"),\n sinceNetworkSeq: z.number().int().optional().describe(\"Resume cursor for network events\"),\n sinceExceptionSeq: z.number().int().optional().describe(\"Resume cursor for exception events\"),\n max: z.number().int().optional().describe(\"Max events per channel\"),\n requestId: z.string().optional().describe(\"Optional trace request id\")\n },\n async execute(args) {\n try {\n const manager = deps.manager as ToolDeps[\"manager\"] & DebugTraceSnapshotCapableManager;\n const options: DebugTraceSnapshotOptions = {\n sinceConsoleSeq: args.sinceConsoleSeq,\n sinceNetworkSeq: args.sinceNetworkSeq,\n sinceExceptionSeq: args.sinceExceptionSeq,\n max: args.max,\n requestId: args.requestId\n };\n\n if (typeof manager.debugTraceSnapshot === \"function\") {\n const result = await manager.debugTraceSnapshot(args.sessionId, options);\n return ok(result as Record<string, unknown>);\n }\n\n const max = args.max ?? 500;\n const requestId = args.requestId ?? createRequestId();\n const [page, consoleChannel, networkChannel] = await Promise.all([\n deps.manager.status(args.sessionId),\n deps.manager.consolePoll(args.sessionId, args.sinceConsoleSeq, max),\n deps.manager.networkPoll(args.sessionId, args.sinceNetworkSeq, max)\n ]);\n\n const exceptionChannel = typeof manager.exceptionPoll === \"function\"\n ? await manager.exceptionPoll(args.sessionId, args.sinceExceptionSeq, max)\n : {\n events: [],\n nextSeq: args.sinceExceptionSeq ?? 0,\n truncated: false\n };\n\n const annotateTraceContext = <T extends Record<string, unknown>>(events: T[]) => (\n events.map((event) => ({\n ...event,\n requestId,\n sessionId: args.sessionId\n }))\n );\n\n const blocker = classifyBlockerSignal({\n source: \"network\",\n url: typeof page.url === \"string\" ? page.url : undefined,\n finalUrl: typeof page.url === \"string\" ? page.url : undefined,\n title: typeof page.title === \"string\" ? page.title : undefined,\n status: findLatestStatus(networkChannel.events as Array<{ status?: number }>),\n traceRequestId: requestId,\n networkHosts: extractHosts(networkChannel.events as Array<{ url?: string }>),\n threshold: deps.config.get().blockerDetectionThreshold,\n promptGuardEnabled: deps.config.get().security.promptInjectionGuard?.enabled ?? true\n });\n const blockerArtifacts = blocker\n ? buildBlockerArtifacts({\n networkEvents: networkChannel.events as unknown[],\n consoleEvents: consoleChannel.events as unknown[],\n exceptionEvents: exceptionChannel.events as unknown[],\n promptGuardEnabled: deps.config.get().security.promptInjectionGuard?.enabled ?? true,\n caps: deps.config.get().blockerArtifactCaps\n })\n : undefined;\n\n return ok({\n requestId,\n generatedAt: new Date().toISOString(),\n page,\n channels: {\n console: {\n nextSeq: consoleChannel.nextSeq,\n truncated: consoleChannel.truncated,\n events: annotateTraceContext(consoleChannel.events as Array<Record<string, unknown>>)\n },\n network: {\n nextSeq: networkChannel.nextSeq,\n truncated: networkChannel.truncated,\n events: annotateTraceContext(networkChannel.events as Array<Record<string, unknown>>)\n },\n exception: {\n nextSeq: exceptionChannel.nextSeq,\n truncated: exceptionChannel.truncated,\n events: annotateTraceContext(exceptionChannel.events as Array<Record<string, unknown>>)\n }\n },\n meta: {\n blockerState: blocker ? \"active\" : \"clear\",\n ...(blocker ? { blocker } : {}),\n ...(blockerArtifacts ? { blockerArtifacts } : {})\n }\n });\n } catch (error) {\n return failure(serializeError(error).message, \"debug_trace_snapshot_failed\");\n }\n }\n });\n}\n\nfunction findLatestStatus(events: Array<{ status?: number }>): number | undefined {\n for (let index = events.length - 1; index >= 0; index -= 1) {\n const status = events[index]?.status;\n if (typeof status === \"number\") {\n return status;\n }\n }\n return undefined;\n}\n\nfunction extractHosts(events: Array<{ url?: string }>): string[] {\n const hosts: string[] = [];\n const seen = new Set<string>();\n for (const event of events) {\n if (typeof event.url !== \"string\") continue;\n try {\n const host = new URL(event.url).hostname.toLowerCase();\n if (!host || seen.has(host)) continue;\n seen.add(host);\n hosts.push(host);\n } catch {\n // ignore invalid url values\n }\n }\n return hosts;\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { createRequestId } from \"../core/logging\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\ntype CookieRecord = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n expires?: number;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n};\n\ntype CookieImportCapableManager = {\n cookieImport?: (\n sessionId: string,\n cookies: CookieRecord[],\n strict?: boolean,\n requestId?: string\n ) => Promise<{ requestId: string; imported: number; rejected: Array<{ index: number; reason: string }> }>;\n};\n\ntype CookieValidationResult = {\n valid: boolean;\n reason: string;\n cookie: CookieRecord;\n};\n\nfunction validateCookieRecord(cookie: CookieRecord): CookieValidationResult {\n const name = cookie.name?.trim();\n if (!name) {\n return { valid: false, reason: \"Cookie name is required.\", cookie };\n }\n if (!/^[^\\s;=]+$/.test(name)) {\n return { valid: false, reason: `Invalid cookie name: ${cookie.name}.`, cookie };\n }\n\n if (typeof cookie.value !== \"string\") {\n return { valid: false, reason: `Invalid cookie value for ${name}.`, cookie };\n }\n\n const value = cookie.value;\n if (/\\r|\\n|;/.test(value)) {\n return { valid: false, reason: `Invalid cookie value for ${name}.`, cookie };\n }\n\n const hasUrl = typeof cookie.url === \"string\" && cookie.url.trim().length > 0;\n const hasDomain = typeof cookie.domain === \"string\" && cookie.domain.trim().length > 0;\n if (!hasUrl && !hasDomain) {\n return { valid: false, reason: `Cookie ${name} requires url or domain.`, cookie };\n }\n\n let normalizedUrl: string | undefined;\n if (hasUrl) {\n try {\n const parsedUrl = new URL(cookie.url as string);\n if (parsedUrl.protocol !== \"http:\" && parsedUrl.protocol !== \"https:\") {\n return { valid: false, reason: `Cookie ${name} url must be http(s).`, cookie };\n }\n normalizedUrl = parsedUrl.toString();\n } catch {\n return { valid: false, reason: `Cookie ${name} has invalid url.`, cookie };\n }\n }\n\n let normalizedDomain: string | undefined;\n if (hasDomain) {\n normalizedDomain = String(cookie.domain).trim().toLowerCase();\n if (!/^\\.?[a-z0-9.-]+$/.test(normalizedDomain)) {\n return { valid: false, reason: `Cookie ${name} has invalid domain.`, cookie };\n }\n if (normalizedDomain.includes(\"..\")) {\n return { valid: false, reason: `Cookie ${name} has invalid domain.`, cookie };\n }\n }\n\n const normalizedPath = typeof cookie.path === \"string\" ? cookie.path.trim() : undefined;\n if (typeof normalizedPath === \"string\" && !normalizedPath.startsWith(\"/\")) {\n return { valid: false, reason: `Cookie ${name} path must start with '/'.`, cookie };\n }\n\n if (typeof cookie.expires !== \"undefined\") {\n if (!Number.isFinite(cookie.expires)) {\n return { valid: false, reason: `Cookie ${name} has invalid expires.`, cookie };\n }\n if ((cookie.expires as number) < -1) {\n return { valid: false, reason: `Cookie ${name} has invalid expires.`, cookie };\n }\n }\n\n if (cookie.sameSite === \"None\" && cookie.secure !== true) {\n return { valid: false, reason: `Cookie ${name} with SameSite=None must set secure=true.`, cookie };\n }\n\n const normalizedCookie: CookieRecord = {\n name,\n value,\n ...(typeof cookie.expires === \"number\" ? { expires: cookie.expires } : {}),\n ...(typeof cookie.httpOnly === \"boolean\" ? { httpOnly: cookie.httpOnly } : {}),\n ...(typeof cookie.secure === \"boolean\" ? { secure: cookie.secure } : {}),\n ...(cookie.sameSite ? { sameSite: cookie.sameSite } : {})\n };\n\n if (normalizedDomain) {\n normalizedCookie.domain = normalizedDomain;\n normalizedCookie.path = normalizedPath ?? \"/\";\n } else if (normalizedUrl) {\n normalizedCookie.url = normalizedUrl;\n }\n\n return {\n valid: true,\n reason: \"\",\n cookie: normalizedCookie\n };\n}\n\nexport function createCookieImportTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Import validated cookies into the current session context.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n cookies: z.array(z.object({\n name: z.string().min(1),\n value: z.string(),\n url: z.string().optional(),\n domain: z.string().optional(),\n path: z.string().optional(),\n expires: z.number().optional(),\n httpOnly: z.boolean().optional(),\n secure: z.boolean().optional(),\n sameSite: z.enum([\"Strict\", \"Lax\", \"None\"]).optional()\n })).min(1).describe(\"Cookies to import\"),\n strict: z.boolean().optional().describe(\"Reject on first invalid cookie (default true)\"),\n requestId: z.string().optional().describe(\"Optional trace request id\")\n },\n async execute(args) {\n try {\n const strict = args.strict ?? true;\n const requestId = args.requestId ?? createRequestId();\n const manager = deps.manager as ToolDeps[\"manager\"] & CookieImportCapableManager;\n\n const normalized: CookieRecord[] = [];\n const rejected: Array<{ index: number; reason: string }> = [];\n\n args.cookies.forEach((cookie, index) => {\n const validation = validateCookieRecord(cookie as CookieRecord);\n if (!validation.valid) {\n rejected.push({ index, reason: validation.reason });\n return;\n }\n normalized.push(validation.cookie);\n });\n\n if (typeof manager.cookieImport === \"function\") {\n return ok(await manager.cookieImport(args.sessionId, normalized, strict, requestId));\n }\n\n if (strict && rejected.length > 0) {\n return failure(`Cookie import rejected ${rejected.length} entries.`, \"cookie_import_failed\");\n }\n\n if (normalized.length > 0) {\n await deps.manager.withPage(args.sessionId, null, async (page) => {\n await page.context().addCookies(normalized);\n return undefined;\n });\n }\n\n return ok({\n requestId,\n imported: normalized.length,\n rejected\n });\n } catch (error) {\n return failure(serializeError(error).message, \"cookie_import_failed\");\n }\n }\n });\n}\n\nexport const __test__ = {\n validateCookieRecord\n};\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { createRequestId } from \"../core/logging\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\ntype CookieListRecord = {\n name: string;\n value: string;\n domain: string;\n path: string;\n expires: number;\n httpOnly: boolean;\n secure: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n};\n\ntype CookieListCapableManager = {\n cookieList?: (\n sessionId: string,\n urls?: string[],\n requestId?: string\n ) => Promise<{ requestId: string; cookies: CookieListRecord[]; count: number }>;\n};\n\nfunction normalizeCookieUrls(urls?: string[]): string[] | undefined {\n if (!urls || urls.length === 0) {\n return undefined;\n }\n\n const normalized: string[] = [];\n const seen = new Set<string>();\n for (const value of urls) {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(\"Cookie list urls must be non-empty strings.\");\n }\n\n let parsedUrl: URL;\n try {\n parsedUrl = new URL(trimmed);\n } catch {\n throw new Error(`Cookie list url is invalid: ${trimmed}`);\n }\n if (parsedUrl.protocol !== \"http:\" && parsedUrl.protocol !== \"https:\") {\n throw new Error(`Cookie list url must be http(s): ${trimmed}`);\n }\n\n const normalizedUrl = parsedUrl.toString();\n if (seen.has(normalizedUrl)) {\n continue;\n }\n seen.add(normalizedUrl);\n normalized.push(normalizedUrl);\n }\n\n return normalized;\n}\n\nexport function createCookieListTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"List cookies in the current session context with optional URL filtering.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n urls: z.array(z.string().min(1)).optional().describe(\"Optional URL filters for cookie scoping\"),\n requestId: z.string().optional().describe(\"Optional trace request id\")\n },\n async execute(args) {\n try {\n const manager = deps.manager as ToolDeps[\"manager\"] & CookieListCapableManager;\n const normalizedUrls = normalizeCookieUrls(args.urls);\n const requestId = args.requestId ?? createRequestId();\n\n if (typeof manager.cookieList === \"function\") {\n return ok(await manager.cookieList(args.sessionId, normalizedUrls, requestId));\n }\n\n const cookies = await deps.manager.withPage(\n args.sessionId,\n null,\n async (page) => {\n const listed = normalizedUrls\n ? await page.context().cookies(normalizedUrls)\n : await page.context().cookies();\n return listed.map((cookie) => ({\n name: cookie.name,\n value: cookie.value,\n domain: cookie.domain,\n path: cookie.path,\n expires: cookie.expires,\n httpOnly: cookie.httpOnly,\n secure: cookie.secure,\n ...(cookie.sameSite ? { sameSite: cookie.sameSite as \"Strict\" | \"Lax\" | \"None\" } : {})\n }));\n }\n );\n\n return ok({\n requestId,\n cookies,\n count: cookies.length\n });\n } catch (error) {\n return failure(serializeError(error).message, \"cookie_list_failed\");\n }\n }\n });\n}\n\nexport const __test__ = {\n normalizeCookieUrls\n};\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport {\n type MacroResolution\n} from \"../macros/execute\";\nimport { executeMacroWithRuntime } from \"../macros/execute-runtime\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { resolveProviderRuntime } from \"./workflow-runtime\";\n\nconst z = tool.schema;\n\ntype MacroRuntimeModule = {\n createDefaultMacroRegistry?: () => {\n resolve: (expression: string, context?: { defaultProvider?: string }) => Promise<MacroResolution>;\n list: () => Array<{ name: string; pack?: string; description?: string }>;\n };\n};\n\ntype FallbackMacroResolution = MacroResolution;\n\nasync function loadMacroRuntime(): Promise<MacroRuntimeModule | null> {\n try {\n const module = await import(\"../macros\");\n return module as MacroRuntimeModule;\n } catch {\n return null;\n }\n}\n\nfunction parseFallbackMacro(expression: string, defaultProvider?: string): FallbackMacroResolution {\n const raw = expression.trim();\n if (!raw.startsWith(\"@\")) {\n throw new Error(\"Macro expressions must start with '@'\");\n }\n\n const body = raw.slice(1).trim();\n if (!body) {\n throw new Error(\"Macro name is required\");\n }\n\n const openParen = body.indexOf(\"(\");\n const closeParen = body.endsWith(\")\") ? body.length - 1 : -1;\n const macroName = openParen >= 0 ? body.slice(0, openParen).trim() : body;\n const argsBody = openParen >= 0 && closeParen > openParen\n ? body.slice(openParen + 1, closeParen).trim()\n : \"\";\n const positional = argsBody\n ? argsBody.split(\",\").map((part) => part.trim().replace(/^['\\\"]|['\\\"]$/g, \"\")).filter(Boolean)\n : [];\n const query = positional[0] ?? macroName;\n const provider = defaultProvider ?? \"web/default\";\n\n return {\n action: {\n source: \"web\",\n operation: \"search\",\n input: {\n query,\n limit: 10,\n providerId: provider\n }\n },\n provenance: {\n macro: macroName,\n provider,\n resolvedQuery: query,\n pack: \"fallback\",\n args: {\n positional,\n named: {}\n }\n }\n };\n}\n\n\nexport function createMacroResolveTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Resolve a macro expression to a provider action with provenance metadata.\",\n args: {\n expression: z.string().min(2).describe(\"Macro expression, e.g. @web.search(\\\"query\\\")\"),\n defaultProvider: z.string().optional().describe(\"Default provider fallback\"),\n includeCatalog: z.boolean().optional().describe(\"Include available runtime macro names\"),\n execute: z.boolean().optional().describe(\"Execute the resolved provider action and include execution payload\")\n },\n async execute(args) {\n try {\n const runtime = await loadMacroRuntime();\n const registry = runtime?.createDefaultMacroRegistry?.();\n\n let resolvedRuntime: \"macros\" | \"fallback\" = \"fallback\";\n let resolution: MacroResolution;\n let catalog: Array<{ name: string; pack?: string; description?: string }> | undefined;\n\n if (registry) {\n resolvedRuntime = \"macros\";\n resolution = await registry.resolve(args.expression, {\n defaultProvider: args.defaultProvider\n });\n catalog = args.includeCatalog\n ? registry.list().map((entry) => ({\n name: entry.name,\n pack: entry.pack,\n description: entry.description\n }))\n : undefined;\n } else {\n resolution = parseFallbackMacro(args.expression, args.defaultProvider);\n }\n\n if (!args.execute) {\n return ok({\n runtime: resolvedRuntime,\n resolution,\n ...(catalog ? { catalog } : {})\n });\n }\n\n const providerRuntime = await resolveProviderRuntime(deps);\n const execution = await executeMacroWithRuntime({\n resolution,\n runtime: providerRuntime\n });\n\n return ok({\n runtime: resolvedRuntime,\n resolution,\n ...(catalog ? { catalog } : {}),\n execution\n });\n } catch (error) {\n return failure(serializeError(error).message, \"macro_resolve_failed\");\n }\n }\n });\n}\n\nexport const __test__ = {\n parseFallbackMacro,\n loadMacroRuntime\n};\n","import type { ToolDeps } from \"./deps\";\nimport type { RuntimeInit } from \"../providers\";\nimport { resolveBundledProviderRuntime } from \"../providers/runtime-bundle\";\n\nexport const resolveProviderRuntime = async (\n deps: ToolDeps,\n options?: { init?: Omit<RuntimeInit, \"providers\"> }\n): Promise<NonNullable<ToolDeps[\"providerRuntime\"]>> => {\n return resolveBundledProviderRuntime({\n existingRuntime: deps.providerRuntime,\n config: deps.config?.get?.(),\n manager: deps.manager,\n browserFallbackPort: deps.browserFallbackPort,\n init: options?.init\n });\n};\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createClonePageTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Export the active page as a React component and CSS bundle.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.clonePage(args.sessionId, args.targetId);\n return ok({ component: result.component, css: result.css, warnings: result.warnings });\n } catch (error) {\n return failure(serializeError(error).message, \"clone_page_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createCloneComponentTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Export a selected element subtree as a React component and CSS bundle.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.cloneComponent(args.sessionId, args.ref, args.targetId);\n return ok({ component: result.component, css: result.css, warnings: result.warnings });\n } catch (error) {\n return failure(serializeError(error).message, \"clone_component_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPerfTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Fetch lightweight performance metrics from the active page.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.perfMetrics(args.sessionId, args.targetId);\n return ok({ metrics: result.metrics });\n } catch (error) {\n return failure(serializeError(error).message, \"perf_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createScreenshotTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture a screenshot of the active page.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n path: z.string().optional().describe(\"Optional output file path\"),\n ref: z.string().optional().describe(\"Optional snapshot ref for an element capture\"),\n fullPage: z.boolean().optional().describe(\"Capture the full scrollable page\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.screenshot(args.sessionId, {\n targetId: args.targetId,\n path: args.path,\n ref: args.ref,\n fullPage: args.fullPage\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"screenshot_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createScreencastStartTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Start a browser screencast replay capture.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n outputDir: z.string().optional().describe(\"Optional screencast output directory\"),\n intervalMs: z.number().int().min(250).optional().describe(\"Frame capture interval in milliseconds\"),\n maxFrames: z.number().int().min(1).optional().describe(\"Maximum frame count before auto-stop\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.startScreencast(args.sessionId, {\n targetId: args.targetId,\n outputDir: args.outputDir,\n intervalMs: args.intervalMs,\n maxFrames: args.maxFrames\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"screencast_start_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createScreencastStopTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Stop a browser screencast replay capture.\",\n args: {\n sessionId: z.string().describe(\"Browser session id that owns the screencast\"),\n screencastId: z.string().describe(\"Active screencast id\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.stopScreencast(args.sessionId, args.screencastId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"screencast_stop_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createDialogTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Inspect or handle a JavaScript dialog.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n action: z.enum([\"status\", \"accept\", \"dismiss\"]).optional().describe(\"Dialog action\"),\n promptText: z.string().optional().describe(\"Prompt text to submit when accepting a prompt dialog\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.dialog(args.sessionId, {\n targetId: args.targetId,\n action: args.action,\n promptText: args.promptText\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"dialog_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { desktopToolFailure, requireDesktopRuntime } from \"./desktop-shared\";\nimport { ok } from \"./response\";\n\nexport function createDesktopStatusTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Inspect sibling desktop observation availability.\",\n args: {},\n async execute() {\n const runtime = requireDesktopRuntime(deps);\n if (typeof runtime === \"string\") {\n return runtime;\n }\n try {\n return ok(await runtime.status());\n } catch (error) {\n return desktopToolFailure(error, \"desktop_status_failed\");\n }\n }\n });\n}\n","import type { DesktopResult, DesktopRuntimeLike } from \"../desktop\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, serializeError } from \"./response\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function requireDesktopRuntime(deps: ToolDeps): DesktopRuntimeLike | string {\n if (deps.desktopRuntime) {\n return deps.desktopRuntime;\n }\n return failure(\"Desktop runtime unavailable.\", \"desktop_runtime_unavailable\");\n}\n\nexport function desktopResult<T>(result: DesktopResult<T>): string {\n if (result.ok) {\n const payload = isRecord(result.value)\n ? { ok: true, ...result.value, audit: result.audit }\n : { ok: true, value: result.value, audit: result.audit };\n return JSON.stringify(payload);\n }\n return JSON.stringify({\n ok: false,\n code: result.code,\n message: result.message,\n audit: result.audit\n });\n}\n\nexport function desktopToolFailure(error: unknown, code: string): string {\n return failure(serializeError(error).message, code);\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { desktopResult, desktopToolFailure, requireDesktopRuntime } from \"./desktop-shared\";\n\nconst z = tool.schema;\n\nexport function createDesktopWindowsTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"List observable desktop windows.\",\n args: {\n reason: z.string().optional().describe(\"Optional audit reason\")\n },\n async execute(args) {\n const runtime = requireDesktopRuntime(deps);\n if (typeof runtime === \"string\") {\n return runtime;\n }\n try {\n return desktopResult(await runtime.listWindows(args.reason));\n } catch (error) {\n return desktopToolFailure(error, \"desktop_windows_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { desktopResult, desktopToolFailure, requireDesktopRuntime } from \"./desktop-shared\";\n\nconst z = tool.schema;\n\nexport function createDesktopActiveWindowTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Inspect the active desktop window.\",\n args: {\n reason: z.string().optional().describe(\"Optional audit reason\")\n },\n async execute(args) {\n const runtime = requireDesktopRuntime(deps);\n if (typeof runtime === \"string\") {\n return runtime;\n }\n try {\n return desktopResult(await runtime.activeWindow(args.reason));\n } catch (error) {\n return desktopToolFailure(error, \"desktop_active_window_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { desktopResult, desktopToolFailure, requireDesktopRuntime } from \"./desktop-shared\";\n\nconst z = tool.schema;\n\nexport function createDesktopCaptureDesktopTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture the current desktop surface.\",\n args: {\n reason: z.string().describe(\"Audit reason for the capture\")\n },\n async execute(args) {\n const runtime = requireDesktopRuntime(deps);\n if (typeof runtime === \"string\") {\n return runtime;\n }\n try {\n return desktopResult(await runtime.captureDesktop({ reason: args.reason }));\n } catch (error) {\n return desktopToolFailure(error, \"desktop_capture_desktop_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { desktopResult, desktopToolFailure, requireDesktopRuntime } from \"./desktop-shared\";\n\nconst z = tool.schema;\n\nexport function createDesktopCaptureWindowTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture a specific desktop window.\",\n args: {\n windowId: z.string().describe(\"Desktop window id\"),\n reason: z.string().describe(\"Audit reason for the capture\")\n },\n async execute(args) {\n const runtime = requireDesktopRuntime(deps);\n if (typeof runtime === \"string\") {\n return runtime;\n }\n try {\n return desktopResult(await runtime.captureWindow(args.windowId, { reason: args.reason }));\n } catch (error) {\n return desktopToolFailure(error, \"desktop_capture_window_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { desktopResult, desktopToolFailure, requireDesktopRuntime } from \"./desktop-shared\";\n\nconst z = tool.schema;\n\nexport function createDesktopAccessibilitySnapshotTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture desktop accessibility state.\",\n args: {\n reason: z.string().describe(\"Audit reason for the accessibility snapshot\"),\n windowId: z.string().optional().describe(\"Optional desktop window id\")\n },\n async execute(args) {\n const runtime = requireDesktopRuntime(deps);\n if (typeof runtime === \"string\") {\n return runtime;\n }\n try {\n return desktopResult(await runtime.accessibilitySnapshot(args.reason, args.windowId));\n } catch (error) {\n return desktopToolFailure(error, \"desktop_accessibility_snapshot_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { buildAnnotateResult } from \"../annotate/output\";\n\nconst z = tool.schema;\nconst screenshotModeSchema = z.enum([\"visible\", \"full\", \"none\"]);\nconst transportSchema = z.enum([\"auto\", \"direct\", \"relay\"]);\n\nexport function createAnnotateTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Request interactive annotations via direct (CDP) or relay transport.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n stored: z.boolean().optional().describe(\"Fetch the latest payload explicitly sent from popup/canvas surfaces\"),\n includeScreenshots: z.boolean().optional().describe(\"When fetching stored payloads, prefer screenshots if still available in memory\"),\n transport: transportSchema.optional().describe(\"auto | direct | relay (default: auto)\"),\n targetId: z.string().optional().describe(\"Optional target id for direct mode\"),\n tabId: z.number().int().optional().describe(\"Optional Chrome tab id for relay mode\"),\n url: z.string().optional().describe(\"Optional URL to open before annotating\"),\n screenshotMode: screenshotModeSchema.optional().describe(\"visible | full | none (default: visible)\"),\n debug: z.boolean().optional().describe(\"Include debug metadata\"),\n context: z.string().optional().describe(\"Optional context for the annotator\"),\n timeoutMs: z.number().int().optional().describe(\"Timeout in milliseconds\")\n },\n async execute(args) {\n try {\n const transport = args.stored ? \"relay\" : (args.transport ?? \"auto\");\n if (transport === \"relay\" && !args.stored) {\n const status = await deps.manager.status(args.sessionId);\n if (status.mode !== \"extension\") {\n return failure(\"Annotations require extension mode (relay).\", \"annotate_requires_extension\");\n }\n }\n\n const response = await deps.annotationManager.requestAnnotation({\n sessionId: args.sessionId,\n transport,\n stored: args.stored ?? false,\n includeScreenshots: args.includeScreenshots ?? true,\n targetId: args.targetId,\n tabId: args.tabId,\n url: args.url,\n screenshotMode: args.screenshotMode ?? \"visible\",\n debug: args.debug ?? false,\n context: args.context,\n timeoutMs: args.timeoutMs\n });\n\n if (response.status === \"cancelled\") {\n return ok({\n cancelled: true,\n message: response.error?.message ?? \"Annotation cancelled.\"\n });\n }\n\n if (response.status !== \"ok\" || !response.payload) {\n const message = response.error?.message ?? \"Annotation failed.\";\n const code = response.error?.code ?? \"annotate_failed\";\n return failure(message, code);\n }\n\n const { message, details, screenshots } = await buildAnnotateResult(response.payload);\n\n return ok({\n message,\n details,\n screenshots\n });\n } catch (error) {\n return failure(serializeError(error).message, \"annotate_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { resolveProviderRuntime } from \"./workflow-runtime\";\nimport { CHALLENGE_AUTOMATION_MODES } from \"../challenges/types\";\n\nconst z = tool.schema;\nconst sourceSelectionSchema = z.enum([\"auto\", \"web\", \"community\", \"social\", \"shopping\", \"all\"]);\nconst sourceSchema = z.enum([\"web\", \"community\", \"social\", \"shopping\"]);\nconst modeSchema = z.enum([\"compact\", \"json\", \"md\", \"context\", \"path\"]);\nconst cookiePolicySchema = z.enum([\"off\", \"auto\", \"required\"]);\nconst challengeAutomationModeSchema = z.enum(CHALLENGE_AUTOMATION_MODES);\n\nexport function createResearchRunTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Run cross-source research with strict timebox and artifact outputs.\",\n args: {\n topic: z.string().min(1).describe(\"Research topic\"),\n days: z.number().int().positive().optional().describe(\"Timebox in days\"),\n from: z.string().optional().describe(\"ISO start date\"),\n to: z.string().optional().describe(\"ISO end date\"),\n sourceSelection: sourceSelectionSchema.optional().describe(\"auto|web|community|social|shopping|all\"),\n sources: z.array(sourceSchema).optional().describe(\"Explicit source list\"),\n mode: modeSchema.optional().describe(\"compact|json|md|context|path\"),\n includeEngagement: z.boolean().optional().describe(\"Include engagement enrichment\"),\n limitPerSource: z.number().int().positive().optional().describe(\"Result limit per source\"),\n outputDir: z.string().optional().describe(\"Optional artifact output directory\"),\n ttlHours: z.number().int().positive().optional().describe(\"Artifact retention TTL in hours\"),\n useCookies: z.boolean().optional().describe(\"Enable/disable provider cookie injection for this run\"),\n challengeAutomationMode: challengeAutomationModeSchema.optional().describe(\"Challenge automation mode: off|browser|browser_with_helper\"),\n cookiePolicyOverride: cookiePolicySchema.optional().describe(\"Override cookie policy: off|auto|required\")\n },\n async execute(args) {\n try {\n const runtime = await resolveProviderRuntime(deps);\n const { runResearchWorkflow } = await import(\"../providers\");\n const result = await runResearchWorkflow(runtime, {\n topic: args.topic,\n days: args.days,\n from: args.from,\n to: args.to,\n sourceSelection: args.sourceSelection,\n sources: args.sources,\n mode: args.mode ?? \"compact\",\n includeEngagement: args.includeEngagement,\n limitPerSource: args.limitPerSource,\n outputDir: args.outputDir,\n ttlHours: args.ttlHours,\n useCookies: args.useCookies,\n challengeAutomationMode: args.challengeAutomationMode,\n cookiePolicyOverride: args.cookiePolicyOverride\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"research_run_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { resolveProviderRuntime } from \"./workflow-runtime\";\nimport { CHALLENGE_AUTOMATION_MODES } from \"../challenges/types\";\n\nconst z = tool.schema;\nconst sortSchema = z.enum([\"best_deal\", \"lowest_price\", \"highest_rating\", \"fastest_shipping\"]);\nconst modeSchema = z.enum([\"compact\", \"json\", \"md\", \"context\", \"path\"]);\nconst cookiePolicySchema = z.enum([\"off\", \"auto\", \"required\"]);\nconst challengeAutomationModeSchema = z.enum(CHALLENGE_AUTOMATION_MODES);\n\nexport function createShoppingRunTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Run shopping/deal intelligence across shopping providers.\",\n args: {\n query: z.string().min(1).describe(\"Shopping query\"),\n providers: z.array(z.string()).optional().describe(\"Optional provider allow-list\"),\n budget: z.number().positive().optional().describe(\"Optional budget amount\"),\n region: z.string().optional().describe(\"Region hint\"),\n sort: sortSchema.optional().describe(\"best_deal|lowest_price|highest_rating|fastest_shipping\"),\n mode: modeSchema.optional().describe(\"compact|json|md|context|path\"),\n outputDir: z.string().optional().describe(\"Optional artifact output directory\"),\n ttlHours: z.number().int().positive().optional().describe(\"Artifact retention TTL in hours\"),\n useCookies: z.boolean().optional().describe(\"Enable/disable provider cookie injection for this run\"),\n challengeAutomationMode: challengeAutomationModeSchema.optional().describe(\"Challenge automation mode: off|browser|browser_with_helper\"),\n cookiePolicyOverride: cookiePolicySchema.optional().describe(\"Override cookie policy: off|auto|required\")\n },\n async execute(args) {\n try {\n const runtime = await resolveProviderRuntime(deps);\n const { runShoppingWorkflow } = await import(\"../providers\");\n const result = await runShoppingWorkflow(runtime, {\n query: args.query,\n providers: args.providers,\n budget: args.budget,\n region: args.region,\n sort: args.sort,\n mode: args.mode ?? \"compact\",\n outputDir: args.outputDir,\n ttlHours: args.ttlHours,\n useCookies: args.useCookies,\n challengeAutomationMode: args.challengeAutomationMode,\n cookiePolicyOverride: args.cookiePolicyOverride\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"shopping_run_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { resolveProviderRuntime } from \"./workflow-runtime\";\nimport { CHALLENGE_AUTOMATION_MODES } from \"../challenges/types\";\n\nconst z = tool.schema;\nconst cookiePolicySchema = z.enum([\"off\", \"auto\", \"required\"]);\nconst challengeAutomationModeSchema = z.enum(CHALLENGE_AUTOMATION_MODES);\n\nasync function captureScreenshotBuffer(deps: ToolDeps, url: string): Promise<Buffer | null> {\n let sessionId: string | null = null;\n try {\n const launched = await deps.manager.launch({\n headless: true,\n startUrl: url\n });\n sessionId = launched.sessionId;\n const screenshot = await deps.manager.screenshot(sessionId);\n if (typeof screenshot.base64 === \"string\" && screenshot.base64.length > 0) {\n return Buffer.from(screenshot.base64, \"base64\");\n }\n return null;\n } catch {\n return null;\n } finally {\n if (sessionId) {\n await deps.manager.disconnect(sessionId, true).catch(() => {\n // Best effort cleanup.\n });\n }\n }\n}\n\nexport function createProductVideoRunTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Collect a product presentation asset pack for video/UGC workflows.\",\n args: {\n product_url: z.string().optional().describe(\"Product URL\"),\n product_name: z.string().optional().describe(\"Product name\"),\n provider_hint: z.string().optional().describe(\"Optional provider hint\"),\n include_screenshots: z.boolean().optional().describe(\"Include screenshots (default true)\"),\n include_all_images: z.boolean().optional().describe(\"Include all discovered images (default true)\"),\n include_copy: z.boolean().optional().describe(\"Include product copy extraction (default true)\"),\n output_dir: z.string().optional().describe(\"Optional output directory\"),\n ttl_hours: z.number().int().positive().optional().describe(\"Artifact retention TTL in hours\"),\n timeoutMs: z.number().int().positive().optional().describe(\"Workflow timeout in milliseconds\"),\n useCookies: z.boolean().optional().describe(\"Enable/disable provider cookie injection for this run\"),\n challengeAutomationMode: challengeAutomationModeSchema.optional().describe(\"Challenge automation mode: off|browser|browser_with_helper\"),\n cookiePolicyOverride: cookiePolicySchema.optional().describe(\"Override cookie policy: off|auto|required\")\n },\n async execute(args) {\n try {\n const runtime = await resolveProviderRuntime(deps);\n const { runProductVideoWorkflow } = await import(\"../providers\");\n const includeScreenshots = args.include_screenshots ?? true;\n const result = await runProductVideoWorkflow(runtime, {\n product_url: args.product_url,\n product_name: args.product_name,\n provider_hint: args.provider_hint,\n include_screenshots: includeScreenshots,\n include_all_images: args.include_all_images,\n include_copy: args.include_copy,\n output_dir: args.output_dir,\n ttl_hours: args.ttl_hours,\n timeoutMs: args.timeoutMs,\n useCookies: args.useCookies,\n challengeAutomationMode: args.challengeAutomationMode,\n cookiePolicyOverride: args.cookiePolicyOverride\n }, {\n captureScreenshot: includeScreenshots\n ? async (url) => captureScreenshotBuffer(deps, url)\n : undefined\n });\n\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"product_video_run_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { resolveProviderRuntime } from \"./workflow-runtime\";\nimport { CHALLENGE_AUTOMATION_MODES } from \"../challenges/types\";\nimport { captureInspiredesignReferenceFromManager } from \"../providers/inspiredesign-capture\";\n\nconst z = tool.schema;\nconst modeSchema = z.enum([\"compact\", \"json\", \"md\", \"context\", \"path\"]);\nconst captureModeSchema = z.enum([\"off\", \"deep\"]);\nconst cookiePolicySchema = z.enum([\"off\", \"auto\", \"required\"]);\nconst challengeAutomationModeSchema = z.enum(CHALLENGE_AUTOMATION_MODES);\n\nexport function createInspiredesignRunTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Run the inspiredesign workflow directly.\",\n args: {\n brief: z.string().min(1).describe(\"Inspiredesign brief\"),\n urls: z.array(z.string()).optional().describe(\"Inspiration URLs to analyze\"),\n captureMode: captureModeSchema.optional().describe(\"Capture mode: off|deep\"),\n includePrototypeGuidance: z.boolean().optional().describe(\"Include prototype guidance output\"),\n mode: modeSchema.optional().describe(\"compact|json|md|context|path\"),\n timeoutMs: z.number().int().positive().optional().describe(\"Workflow timeout in milliseconds\"),\n outputDir: z.string().optional().describe(\"Optional artifact output directory\"),\n ttlHours: z.number().int().positive().optional().describe(\"Artifact retention TTL in hours\"),\n useCookies: z.boolean().optional().describe(\"Enable/disable provider cookie injection for this run\"),\n challengeAutomationMode: challengeAutomationModeSchema.optional().describe(\"Challenge automation mode: off|browser|browser_with_helper\"),\n cookiePolicyOverride: cookiePolicySchema.optional().describe(\"Override cookie policy: off|auto|required\")\n },\n async execute(args) {\n try {\n const runtime = await resolveProviderRuntime(deps);\n const { runInspiredesignWorkflow } = await import(\"../providers\");\n const captureMode = args.captureMode ?? \"off\";\n const cookieSource = deps.config.get().providers?.cookieSource;\n const result = await runInspiredesignWorkflow(runtime, {\n brief: args.brief,\n urls: args.urls,\n captureMode,\n includePrototypeGuidance: args.includePrototypeGuidance,\n mode: args.mode ?? \"compact\",\n timeoutMs: args.timeoutMs,\n outputDir: args.outputDir,\n ttlHours: args.ttlHours,\n useCookies: args.useCookies,\n challengeAutomationMode: args.challengeAutomationMode,\n cookiePolicyOverride: args.cookiePolicyOverride\n }, {\n captureReference: captureMode === \"deep\"\n ? async (url, options) => captureInspiredesignReferenceFromManager(deps.manager, url, {\n ...options,\n cookieSource\n })\n : undefined\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"inspiredesign_run_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createCanvasTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Execute a typed design-canvas command such as canvas.session.open, canvas.feedback.next, or canvas.document.patch.\",\n args: {\n command: z.string().min(1).describe(\"Canvas command name\"),\n params: z.record(z.string(), z.unknown()).optional().describe(\"Canvas command payload\")\n },\n async execute(args) {\n if (!deps.canvasManager) {\n return failure(\"Canvas manager unavailable.\", \"canvas_unavailable\");\n }\n try {\n if (!args.command.startsWith(\"canvas.\")) {\n return failure(\"Canvas commands must start with 'canvas.'.\", \"canvas_invalid_command\");\n }\n const result = await deps.canvasManager.execute(args.command, args.params ?? {});\n if (result && typeof result === \"object\" && !Array.isArray(result)) {\n return ok(result as Record<string, unknown>);\n }\n return ok({ result });\n } catch (error) {\n const serialized = serializeError(error);\n return failure(serialized.message, serialized.code ?? \"canvas_failed\", serialized.details);\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { ok } from \"./response\";\n\nexport function createSkillListTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"List bundled and discovered skill packs before choosing a local onboarding or workflow lane.\",\n args: {},\n async execute() {\n const skills = await deps.skills.listSkills();\n const skillList = skills.map((s) => ({\n name: s.name,\n description: s.description,\n version: s.version\n }));\n return ok({\n skills: skillList,\n count: skillList.length\n });\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport onboardingMetadata from \"../cli/onboarding-metadata.json\";\nimport type { ToolDeps } from \"./deps\";\nimport { ok, failure } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createSkillLoadTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: `Load a local skill directly; start with ${onboardingMetadata.skillName} ${onboardingMetadata.skillTopic} before low-level browser commands.`,\n args: {\n name: z.string().describe(\"Name of the skill to load (e.g., 'opendevbrowser-login-automation', 'opendevbrowser-form-testing')\"),\n topic: z.string().optional().describe(\"Optional topic to filter the skill content\")\n },\n async execute(args) {\n try {\n const content = await deps.skills.loadSkill(args.name, args.topic);\n return ok({ skill: args.name, topic: args.topic, content });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return failure(`Failed to load skill '${args.name}': ${message}`, \"SKILL_NOT_FOUND\");\n }\n }\n });\n}\n","import type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { createLaunchTool } from \"./launch\";\nimport { createConnectTool } from \"./connect\";\nimport { createDisconnectTool } from \"./disconnect\";\nimport { createStatusTool } from \"./status\";\nimport { createStatusCapabilitiesTool } from \"./status_capabilities\";\nimport { createSessionInspectorTool } from \"./session_inspector\";\nimport { createSessionInspectorPlanTool } from \"./session_inspector_plan\";\nimport { createSessionInspectorAuditTool } from \"./session_inspector_audit\";\nimport { createTargetsListTool } from \"./targets_list\";\nimport { createTargetUseTool } from \"./target_use\";\nimport { createTargetNewTool } from \"./target_new\";\nimport { createTargetCloseTool } from \"./target_close\";\nimport { createPageTool } from \"./page\";\nimport { createListTool } from \"./list\";\nimport { createCloseTool } from \"./close\";\nimport { createGotoTool } from \"./goto\";\nimport { createWaitTool } from \"./wait\";\nimport { createSnapshotTool } from \"./snapshot\";\nimport { createReviewTool } from \"./review\";\nimport { createReviewDesktopTool } from \"./review_desktop\";\nimport { createClickTool } from \"./click\";\nimport { createHoverTool } from \"./hover\";\nimport { createPressTool } from \"./press\";\nimport { createCheckTool } from \"./check\";\nimport { createUncheckTool } from \"./uncheck\";\nimport { createTypeTool } from \"./type\";\nimport { createSelectTool } from \"./select\";\nimport { createScrollTool } from \"./scroll\";\nimport { createScrollIntoViewTool } from \"./scroll_into_view\";\nimport { createUploadTool } from \"./upload\";\nimport { createPointerMoveTool } from \"./pointer_move\";\nimport { createPointerDownTool } from \"./pointer_down\";\nimport { createPointerUpTool } from \"./pointer_up\";\nimport { createPointerDragTool } from \"./pointer_drag\";\nimport { createDomGetHtmlTool } from \"./dom_get_html\";\nimport { createDomGetTextTool } from \"./dom_get_text\";\nimport { createGetAttrTool } from \"./get_attr\";\nimport { createGetValueTool } from \"./get_value\";\nimport { createIsVisibleTool } from \"./is_visible\";\nimport { createIsEnabledTool } from \"./is_enabled\";\nimport { createIsCheckedTool } from \"./is_checked\";\nimport { createRunTool } from \"./run\";\nimport { createPromptingGuideTool } from \"./prompting_guide\";\nimport { createConsolePollTool } from \"./console_poll\";\nimport { createNetworkPollTool } from \"./network_poll\";\nimport { createDebugTraceSnapshotTool } from \"./debug_trace_snapshot\";\nimport { createCookieImportTool } from \"./cookie_import\";\nimport { createCookieListTool } from \"./cookie_list\";\nimport { createMacroResolveTool } from \"./macro_resolve\";\nimport { createClonePageTool } from \"./clone_page\";\nimport { createCloneComponentTool } from \"./clone_component\";\nimport { createPerfTool } from \"./perf\";\nimport { createScreenshotTool } from \"./screenshot\";\nimport { createScreencastStartTool } from \"./screencast_start\";\nimport { createScreencastStopTool } from \"./screencast_stop\";\nimport { createDialogTool } from \"./dialog\";\nimport { createDesktopStatusTool } from \"./desktop_status\";\nimport { createDesktopWindowsTool } from \"./desktop_windows\";\nimport { createDesktopActiveWindowTool } from \"./desktop_active_window\";\nimport { createDesktopCaptureDesktopTool } from \"./desktop_capture_desktop\";\nimport { createDesktopCaptureWindowTool } from \"./desktop_capture_window\";\nimport { createDesktopAccessibilitySnapshotTool } from \"./desktop_accessibility_snapshot\";\nimport { createAnnotateTool } from \"./annotate\";\nimport { createResearchRunTool } from \"./research_run\";\nimport { createShoppingRunTool } from \"./shopping_run\";\nimport { createProductVideoRunTool } from \"./product_video_run\";\nimport { createInspiredesignRunTool } from \"./inspiredesign_run\";\nimport { createCanvasTool } from \"./canvas\";\nimport { createSkillListTool } from \"./skill_list\";\nimport { createSkillLoadTool } from \"./skill_load\";\nimport onboardingMetadata from \"../cli/onboarding-metadata.json\";\nexport type { ToolSurfaceEntry } from \"../public-surface/source\";\nexport { TOOL_SURFACE_ENTRIES } from \"../public-surface/generated-manifest\";\n\nexport const LOCAL_ONLY_TOOL_NAMES = new Set(onboardingMetadata.localOnlyToolNames);\n\nexport function createTools(deps: ToolDeps): Record<string, ToolDefinition> {\n const wrap = (name: string, definition: ToolDefinition): ToolDefinition => {\n if (!deps.ensureHub || LOCAL_ONLY_TOOL_NAMES.has(name)) return definition;\n return {\n ...definition,\n execute: async (args, context) => {\n try {\n await deps.ensureHub?.();\n } catch {\n // Fall through to tool execution; tool-level error handling will surface issues.\n }\n return definition.execute(args, context);\n }\n };\n };\n\n return {\n opendevbrowser_launch: wrap(\"opendevbrowser_launch\", createLaunchTool(deps)),\n opendevbrowser_connect: wrap(\"opendevbrowser_connect\", createConnectTool(deps)),\n opendevbrowser_disconnect: wrap(\"opendevbrowser_disconnect\", createDisconnectTool(deps)),\n opendevbrowser_status: wrap(\"opendevbrowser_status\", createStatusTool(deps)),\n opendevbrowser_status_capabilities: wrap(\n \"opendevbrowser_status_capabilities\",\n createStatusCapabilitiesTool(deps)\n ),\n opendevbrowser_session_inspector: wrap(\"opendevbrowser_session_inspector\", createSessionInspectorTool(deps)),\n opendevbrowser_session_inspector_plan: wrap(\n \"opendevbrowser_session_inspector_plan\",\n createSessionInspectorPlanTool(deps)\n ),\n opendevbrowser_session_inspector_audit: wrap(\n \"opendevbrowser_session_inspector_audit\",\n createSessionInspectorAuditTool(deps)\n ),\n opendevbrowser_targets_list: wrap(\"opendevbrowser_targets_list\", createTargetsListTool(deps)),\n opendevbrowser_target_use: wrap(\"opendevbrowser_target_use\", createTargetUseTool(deps)),\n opendevbrowser_target_new: wrap(\"opendevbrowser_target_new\", createTargetNewTool(deps)),\n opendevbrowser_target_close: wrap(\"opendevbrowser_target_close\", createTargetCloseTool(deps)),\n opendevbrowser_page: wrap(\"opendevbrowser_page\", createPageTool(deps)),\n opendevbrowser_list: wrap(\"opendevbrowser_list\", createListTool(deps)),\n opendevbrowser_close: wrap(\"opendevbrowser_close\", createCloseTool(deps)),\n opendevbrowser_goto: wrap(\"opendevbrowser_goto\", createGotoTool(deps)),\n opendevbrowser_wait: wrap(\"opendevbrowser_wait\", createWaitTool(deps)),\n opendevbrowser_snapshot: wrap(\"opendevbrowser_snapshot\", createSnapshotTool(deps)),\n opendevbrowser_review: wrap(\"opendevbrowser_review\", createReviewTool(deps)),\n opendevbrowser_review_desktop: wrap(\"opendevbrowser_review_desktop\", createReviewDesktopTool(deps)),\n opendevbrowser_click: wrap(\"opendevbrowser_click\", createClickTool(deps)),\n opendevbrowser_hover: wrap(\"opendevbrowser_hover\", createHoverTool(deps)),\n opendevbrowser_press: wrap(\"opendevbrowser_press\", createPressTool(deps)),\n opendevbrowser_check: wrap(\"opendevbrowser_check\", createCheckTool(deps)),\n opendevbrowser_uncheck: wrap(\"opendevbrowser_uncheck\", createUncheckTool(deps)),\n opendevbrowser_type: wrap(\"opendevbrowser_type\", createTypeTool(deps)),\n opendevbrowser_select: wrap(\"opendevbrowser_select\", createSelectTool(deps)),\n opendevbrowser_scroll: wrap(\"opendevbrowser_scroll\", createScrollTool(deps)),\n opendevbrowser_scroll_into_view: wrap(\"opendevbrowser_scroll_into_view\", createScrollIntoViewTool(deps)),\n opendevbrowser_upload: wrap(\"opendevbrowser_upload\", createUploadTool(deps)),\n opendevbrowser_pointer_move: wrap(\"opendevbrowser_pointer_move\", createPointerMoveTool(deps)),\n opendevbrowser_pointer_down: wrap(\"opendevbrowser_pointer_down\", createPointerDownTool(deps)),\n opendevbrowser_pointer_up: wrap(\"opendevbrowser_pointer_up\", createPointerUpTool(deps)),\n opendevbrowser_pointer_drag: wrap(\"opendevbrowser_pointer_drag\", createPointerDragTool(deps)),\n opendevbrowser_dom_get_html: wrap(\"opendevbrowser_dom_get_html\", createDomGetHtmlTool(deps)),\n opendevbrowser_dom_get_text: wrap(\"opendevbrowser_dom_get_text\", createDomGetTextTool(deps)),\n opendevbrowser_get_attr: wrap(\"opendevbrowser_get_attr\", createGetAttrTool(deps)),\n opendevbrowser_get_value: wrap(\"opendevbrowser_get_value\", createGetValueTool(deps)),\n opendevbrowser_is_visible: wrap(\"opendevbrowser_is_visible\", createIsVisibleTool(deps)),\n opendevbrowser_is_enabled: wrap(\"opendevbrowser_is_enabled\", createIsEnabledTool(deps)),\n opendevbrowser_is_checked: wrap(\"opendevbrowser_is_checked\", createIsCheckedTool(deps)),\n opendevbrowser_run: wrap(\"opendevbrowser_run\", createRunTool(deps)),\n opendevbrowser_prompting_guide: wrap(\"opendevbrowser_prompting_guide\", createPromptingGuideTool(deps)),\n opendevbrowser_console_poll: wrap(\"opendevbrowser_console_poll\", createConsolePollTool(deps)),\n opendevbrowser_network_poll: wrap(\"opendevbrowser_network_poll\", createNetworkPollTool(deps)),\n opendevbrowser_debug_trace_snapshot: wrap(\"opendevbrowser_debug_trace_snapshot\", createDebugTraceSnapshotTool(deps)),\n opendevbrowser_cookie_import: wrap(\"opendevbrowser_cookie_import\", createCookieImportTool(deps)),\n opendevbrowser_cookie_list: wrap(\"opendevbrowser_cookie_list\", createCookieListTool(deps)),\n opendevbrowser_macro_resolve: wrap(\"opendevbrowser_macro_resolve\", createMacroResolveTool(deps)),\n opendevbrowser_research_run: wrap(\"opendevbrowser_research_run\", createResearchRunTool(deps)),\n opendevbrowser_shopping_run: wrap(\"opendevbrowser_shopping_run\", createShoppingRunTool(deps)),\n opendevbrowser_product_video_run: wrap(\"opendevbrowser_product_video_run\", createProductVideoRunTool(deps)),\n opendevbrowser_inspiredesign_run: wrap(\"opendevbrowser_inspiredesign_run\", createInspiredesignRunTool(deps)),\n opendevbrowser_canvas: wrap(\"opendevbrowser_canvas\", createCanvasTool(deps)),\n opendevbrowser_clone_page: wrap(\"opendevbrowser_clone_page\", createClonePageTool(deps)),\n opendevbrowser_clone_component: wrap(\"opendevbrowser_clone_component\", createCloneComponentTool(deps)),\n opendevbrowser_perf: wrap(\"opendevbrowser_perf\", createPerfTool(deps)),\n opendevbrowser_screenshot: wrap(\"opendevbrowser_screenshot\", createScreenshotTool(deps)),\n opendevbrowser_screencast_start: wrap(\"opendevbrowser_screencast_start\", createScreencastStartTool(deps)),\n opendevbrowser_screencast_stop: wrap(\"opendevbrowser_screencast_stop\", createScreencastStopTool(deps)),\n opendevbrowser_dialog: wrap(\"opendevbrowser_dialog\", createDialogTool(deps)),\n opendevbrowser_desktop_status: wrap(\"opendevbrowser_desktop_status\", createDesktopStatusTool(deps)),\n opendevbrowser_desktop_windows: wrap(\"opendevbrowser_desktop_windows\", createDesktopWindowsTool(deps)),\n opendevbrowser_desktop_active_window: wrap(\"opendevbrowser_desktop_active_window\", createDesktopActiveWindowTool(deps)),\n opendevbrowser_desktop_capture_desktop: wrap(\"opendevbrowser_desktop_capture_desktop\", createDesktopCaptureDesktopTool(deps)),\n opendevbrowser_desktop_capture_window: wrap(\"opendevbrowser_desktop_capture_window\", createDesktopCaptureWindowTool(deps)),\n opendevbrowser_desktop_accessibility_snapshot: wrap(\n \"opendevbrowser_desktop_accessibility_snapshot\",\n createDesktopAccessibilitySnapshotTool(deps)\n ),\n opendevbrowser_annotate: wrap(\"opendevbrowser_annotate\", createAnnotateTool(deps)),\n opendevbrowser_skill_list: wrap(\"opendevbrowser_skill_list\", createSkillListTool(deps)),\n opendevbrowser_skill_load: wrap(\"opendevbrowser_skill_load\", createSkillLoadTool(deps))\n };\n}\n","import type { Plugin } from \"@opencode-ai/plugin\";\nimport { createOpenDevBrowserCore } from \"./core\";\nimport { ScriptRunner } from \"./browser/script-runner\";\nimport { getCurrentDaemonFingerprint, readDaemonMetadata, startDaemon } from \"./cli/daemon\";\nimport { DaemonClient } from \"./cli/daemon-client\";\nimport { RemoteManager } from \"./cli/remote-manager\";\nimport { RemoteCanvasManager } from \"./cli/remote-canvas-manager\";\nimport { RemoteDesktopRuntime } from \"./cli/remote-desktop-runtime\";\nimport { RemoteRelay } from \"./cli/remote-relay\";\nimport { fetchDaemonStatusFromMetadata } from \"./cli/daemon-status\";\nimport {\n buildSkillNudgeMessage,\n clearSkillNudge,\n consumeSkillNudge,\n createSkillNudgeState,\n extractTextFromParts,\n markSkillNudge,\n shouldTriggerSkillNudge,\n SKILL_NUDGE_MARKER\n} from \"./skills/skill-nudge\";\nimport { AGENT_INBOX_SYSTEM_MARKER } from \"./annotate/agent-inbox\";\nimport {\n buildContinuityNudgeMessage,\n clearContinuityNudge,\n consumeContinuityNudge,\n createContinuityNudgeState,\n markContinuityNudge,\n shouldTriggerContinuityNudge,\n CONTINUITY_NUDGE_MARKER\n} from \"./skills/continuity-nudge\";\nimport { createTools } from \"./tools\";\nimport { extractExtension } from \"./extension-extractor\";\nimport { isHubEnabled } from \"./utils/hub-enabled\";\nimport type { RelayLike } from \"./relay/relay-types\";\nimport type { ToolDeps } from \"./tools/deps\";\nimport { createCoreRuntimeAssemblies } from \"./core\";\nimport { createAutomationCoordinator } from \"./automation/coordinator\";\nimport { requireChallengeOrchestrationConfig } from \"./config\";\n\nconst OpenDevBrowserPlugin: Plugin = async ({ directory, worktree }) => {\n const core = createOpenDevBrowserCore({ directory, worktree });\n const { config, configStore, skills, ensureRelay, cleanup, getExtensionPath, agentInbox } = core;\n let relay: RelayLike = core.relay;\n let manager = core.manager;\n let canvasManager = core.canvasManager;\n let runner = core.runner;\n let annotationManager = core.annotationManager;\n let desktopRuntime = core.desktopRuntime;\n let automationCoordinator = core.automationCoordinator;\n let providerRuntime = core.providerRuntime;\n let browserFallbackPort = core.browserFallbackPort;\n let hubStop: (() => Promise<void>) | null = null;\n let daemonClient: DaemonClient | null = null;\n const skillNudgeState = createSkillNudgeState();\n const continuityNudgeState = createContinuityNudgeState();\n\n // Minimal startup signal for local testing/debugging.\n // Avoid logging secrets (relayToken can be a string).\n console.info(\n `[opendevbrowser] loaded (cacheRoot=${core.cacheRoot}, relay=${config.relayToken === false ? \"disabled\" : \"enabled\"})`\n );\n\n try {\n extractExtension();\n } catch (error) {\n // Extension extraction is best-effort; keep plugin usable if it fails.\n console.warn(\"Extension extraction failed:\", error instanceof Error ? error.message : error);\n }\n\n const toolDeps: ToolDeps = {\n manager,\n canvasManager,\n annotationManager,\n runner,\n config: configStore,\n skills,\n desktopRuntime,\n automationCoordinator,\n providerRuntime,\n browserFallbackPort,\n relay,\n getExtensionPath\n };\n\n const bindRemote = () => {\n if (!daemonClient) {\n daemonClient = new DaemonClient({ autoRenew: true });\n }\n const currentConfig = configStore.get();\n const challengeConfig = requireChallengeOrchestrationConfig(currentConfig);\n manager = new RemoteManager(daemonClient);\n canvasManager = new RemoteCanvasManager(daemonClient);\n desktopRuntime = new RemoteDesktopRuntime(daemonClient);\n relay = new RemoteRelay(daemonClient);\n annotationManager.setRelay(relay);\n annotationManager.setBrowserManager(manager);\n runner = new ScriptRunner(manager);\n ({\n providerRuntime,\n browserFallbackPort\n } = createCoreRuntimeAssemblies({\n cacheRoot: core.cacheRoot,\n config: currentConfig,\n manager,\n challengeConfig\n }));\n automationCoordinator = createAutomationCoordinator({\n manager,\n desktopRuntime,\n challengeMode: challengeConfig.mode,\n governedLanes: challengeConfig.governed,\n helperBridgeEnabled: challengeConfig.optionalComputerUseBridge.enabled,\n snapshotMaxChars: currentConfig.snapshot.maxChars\n });\n toolDeps.manager = manager;\n toolDeps.canvasManager = canvasManager;\n toolDeps.relay = relay;\n toolDeps.runner = runner;\n toolDeps.desktopRuntime = desktopRuntime;\n toolDeps.automationCoordinator = automationCoordinator;\n toolDeps.providerRuntime = providerRuntime;\n toolDeps.browserFallbackPort = browserFallbackPort;\n };\n\n const ensureHub = async (): Promise<void> => {\n const currentConfig = configStore.get();\n if (!isHubEnabled(currentConfig)) {\n return;\n }\n if (!daemonClient) {\n daemonClient = new DaemonClient({ autoRenew: true });\n }\n\n const deadline = Date.now() + 2000;\n let attempt = 0;\n let lastError: Error | null = null;\n const currentFingerprint = getCurrentDaemonFingerprint();\n\n while (attempt < 2 && Date.now() < deadline) {\n attempt += 1;\n const status = await fetchDaemonStatusFromMetadata(currentConfig);\n if (status?.ok && status.fingerprint === currentFingerprint) {\n bindRemote();\n await relay?.refresh?.();\n return;\n }\n if (status?.ok) {\n const metadata = readDaemonMetadata();\n const daemonPort = metadata?.port ?? currentConfig.daemonPort;\n const daemonToken = metadata?.token ?? currentConfig.daemonToken;\n if (daemonPort > 0 && daemonToken) {\n try {\n await fetch(`http://127.0.0.1:${daemonPort}/stop`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${daemonToken}` }\n });\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n }\n }\n }\n try {\n const { stop } = await startDaemon({ config: currentConfig, directory, worktree });\n hubStop = stop;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n }\n if (Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n }\n\n if (lastError) {\n throw lastError;\n }\n throw new Error(\"Hub daemon unavailable.\");\n };\n\n toolDeps.ensureHub = ensureHub;\n\n const hubEnabled = isHubEnabled(config);\n if (hubEnabled) {\n bindRemote();\n try {\n await ensureHub();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`[opendevbrowser] Hub daemon unavailable: ${message}`);\n }\n } else {\n await ensureRelay(config.relayPort);\n }\n\n const cleanupAll = () => {\n if (hubStop) {\n hubStop().catch(() => {});\n }\n daemonClient?.releaseBinding().catch(() => {});\n cleanup();\n };\n\n process.on(\"SIGINT\", cleanupAll);\n process.on(\"SIGTERM\", cleanupAll);\n process.on(\"beforeExit\", cleanupAll);\n\n const registerAgentInboxScope = (sessionID?: string, registration?: {\n messageId?: string | null;\n agent?: string | null;\n model?: {\n providerID: string;\n modelID: string;\n } | null;\n variant?: string | null;\n }) => {\n if (!sessionID) {\n return;\n }\n try {\n agentInbox.registerScope(sessionID, registration);\n } catch (error) {\n console.warn(\n \"[opendevbrowser] Failed to register agent inbox scope:\",\n error instanceof Error ? error.message : String(error)\n );\n }\n };\n\n return {\n tool: createTools(toolDeps),\n \"chat.message\": async (input, output) => {\n const config = configStore.get();\n if (output.message.role !== \"user\") return;\n\n registerAgentInboxScope(input.sessionID, {\n messageId: input.messageID ?? null,\n agent: input.agent ?? null,\n model: input.model ?? null,\n variant: input.variant ?? null\n });\n\n const text = extractTextFromParts(output.parts);\n if (!text) return;\n\n if (config.skills.nudge.enabled && shouldTriggerSkillNudge(text, config.skills.nudge.keywords)) {\n markSkillNudge(skillNudgeState, Date.now());\n }\n\n if (config.continuity.enabled && config.continuity.nudge.enabled) {\n if (shouldTriggerContinuityNudge(text, config.continuity.nudge.keywords)) {\n markContinuityNudge(continuityNudgeState, Date.now());\n }\n }\n },\n \"experimental.chat.system.transform\": async (input, output) => {\n const config = configStore.get();\n const systemEntries = output.system ?? [];\n let nextEntries = systemEntries;\n let changed = false;\n\n registerAgentInboxScope(input.sessionID, {\n model: null\n });\n if (\n input.sessionID\n && !systemEntries.some((entry) => entry.includes(AGENT_INBOX_SYSTEM_MARKER))\n ) {\n const injection = agentInbox.buildSystemInjection(input.sessionID);\n if (injection) {\n nextEntries = [...nextEntries, injection.systemBlock];\n agentInbox.acknowledge(injection.receiptIds);\n changed = true;\n }\n }\n\n if (config.skills.nudge.enabled) {\n if (systemEntries.some((entry) => entry.includes(SKILL_NUDGE_MARKER))) {\n clearSkillNudge(skillNudgeState);\n } else if (consumeSkillNudge(skillNudgeState, Date.now(), config.skills.nudge.maxAgeMs)) {\n nextEntries = [...nextEntries, buildSkillNudgeMessage()];\n changed = true;\n }\n }\n\n if (config.continuity.enabled && config.continuity.nudge.enabled) {\n if (systemEntries.some((entry) => entry.includes(CONTINUITY_NUDGE_MARKER))) {\n clearContinuityNudge(continuityNudgeState);\n } else if (consumeContinuityNudge(\n continuityNudgeState,\n Date.now(),\n config.continuity.nudge.maxAgeMs\n )) {\n nextEntries = [...nextEntries, buildContinuityNudgeMessage(config.continuity.filePath)];\n changed = true;\n }\n }\n\n if (changed) {\n output.system = nextEntries;\n }\n }\n };\n};\n\nexport default OpenDevBrowserPlugin;\n"],"mappings":"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","names":["observedPort","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","challengeAutomationModeSchema","tool","z","tool","challengeAutomationModeSchema","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","waitUntilSchema","result","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","message","tool","z","tool","challengeAutomationModeSchema","tool","z","tool","modeSchema","cookiePolicySchema","challengeAutomationModeSchema","tool","z","tool","cookiePolicySchema","challengeAutomationModeSchema","tool","z","tool","modeSchema","cookiePolicySchema","challengeAutomationModeSchema","tool","z","tool","tool","tool","tool","z","tool","config"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/remote-manager.ts","../src/cli/remote-canvas-manager.ts","../src/cli/remote-desktop-runtime.ts","../src/cli/remote-relay.ts","../src/skills/skill-nudge.ts","../src/skills/continuity-nudge.ts","../src/tools/launch.ts","../src/tools/response.ts","../src/tools/connect.ts","../src/tools/disconnect.ts","../src/tools/status.ts","../src/utils/hub-enabled.ts","../src/tools/status_capabilities.ts","../src/tools/automation-shared.ts","../src/tools/session_inspector.ts","../src/tools/session_inspector_plan.ts","../src/tools/session_inspector_audit.ts","../src/tools/targets_list.ts","../src/tools/target_use.ts","../src/tools/target_new.ts","../src/tools/target_close.ts","../src/tools/page.ts","../src/tools/list.ts","../src/tools/close.ts","../src/tools/goto.ts","../src/tools/wait.ts","../src/tools/snapshot.ts","../src/tools/review.ts","../src/tools/review_desktop.ts","../src/tools/click.ts","../src/tools/hover.ts","../src/tools/press.ts","../src/tools/check.ts","../src/tools/uncheck.ts","../src/tools/type.ts","../src/tools/select.ts","../src/tools/scroll.ts","../src/tools/scroll_into_view.ts","../src/tools/upload.ts","../src/tools/pointer_move.ts","../src/tools/pointer_down.ts","../src/tools/pointer_up.ts","../src/tools/pointer_drag.ts","../src/tools/dom_get_html.ts","../src/tools/dom_get_text.ts","../src/tools/get_attr.ts","../src/tools/get_value.ts","../src/tools/is_visible.ts","../src/tools/is_enabled.ts","../src/tools/is_checked.ts","../src/tools/run.ts","../src/tools/prompting_guide.ts","../src/tools/console_poll.ts","../src/tools/network_poll.ts","../src/tools/debug_trace_snapshot.ts","../src/tools/cookie_import.ts","../src/tools/cookie_list.ts","../src/tools/macro_resolve.ts","../src/tools/workflow-runtime.ts","../src/tools/clone_page.ts","../src/tools/clone_component.ts","../src/tools/perf.ts","../src/tools/screenshot.ts","../src/tools/screencast_start.ts","../src/tools/screencast_stop.ts","../src/tools/dialog.ts","../src/tools/desktop_status.ts","../src/tools/desktop-shared.ts","../src/tools/desktop_windows.ts","../src/tools/desktop_active_window.ts","../src/tools/desktop_capture_desktop.ts","../src/tools/desktop_capture_window.ts","../src/tools/desktop_accessibility_snapshot.ts","../src/tools/annotate.ts","../src/tools/research_run.ts","../src/tools/shopping_run.ts","../src/tools/product_video_run.ts","../src/tools/inspiredesign_run.ts","../src/tools/canvas.ts","../src/tools/skill_list.ts","../src/tools/skill_load.ts","../src/tools/index.ts","../src/index.ts"],"sourcesContent":["import type { BrowserManagerLike, SessionInspectorHandle } from \"../browser/manager-types\";\nimport type { ConnectOptions, LaunchOptions } from \"../browser/browser-manager\";\nimport type { TargetInfo } from \"../browser/target-manager\";\nimport type { ReactExport } from \"../export/react-emitter\";\nimport type { ConsoleTracker } from \"../devtools/console-tracker\";\nimport type { NetworkTracker } from \"../devtools/network-tracker\";\nimport type { ChallengeAutomationMode, ChallengeInspectPlan } from \"../challenges\";\nimport { classifySessionRelayEndpoint } from \"../relay/relay-endpoints\";\nimport { DaemonClient } from \"./daemon-client\";\n\ntype CookieImportRecord = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n expires?: number;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n};\n\ntype BrowserManagerMethods = {\n [K in keyof BrowserManagerLike as Extract<BrowserManagerLike[K], (...args: never[]) => unknown> extends never ? never : K]-?:\n Extract<BrowserManagerLike[K], (...args: never[]) => unknown>;\n};\n\ntype BrowserManagerMethodKey = keyof BrowserManagerMethods;\n\ntype CallResult<K extends BrowserManagerMethodKey> = Awaited<ReturnType<BrowserManagerMethods[K]>>;\n\nexport class RemoteManager implements BrowserManagerLike {\n private client: DaemonClient;\n\n constructor(client: DaemonClient) {\n this.client = client;\n }\n\n launch(options: LaunchOptions): ReturnType<BrowserManagerLike[\"launch\"]> {\n return this.client.call<CallResult<\"launch\">>(\"session.launch\", options as Record<string, unknown>);\n }\n\n connect(options: ConnectOptions): ReturnType<BrowserManagerLike[\"connect\"]> {\n return this.client.call<CallResult<\"connect\">>(\"session.connect\", options as Record<string, unknown>);\n }\n\n connectRelay(wsEndpoint: string, options?: { startUrl?: string }): ReturnType<BrowserManagerLike[\"connectRelay\"]> {\n const startUrl = typeof options?.startUrl === \"string\" && options.startUrl.trim().length > 0\n ? options.startUrl.trim()\n : undefined;\n const parsedRelayEndpoint = classifySessionRelayEndpoint(wsEndpoint);\n return this.client.call<CallResult<\"connectRelay\">>(\n \"session.connect\",\n {\n wsEndpoint,\n ...(parsedRelayEndpoint?.inputPath === \"/cdp\" ? { extensionLegacy: true } : {}),\n ...(startUrl ? { startUrl } : {})\n }\n );\n }\n\n disconnect(sessionId: string, closeBrowser = false): ReturnType<BrowserManagerLike[\"disconnect\"]> {\n return this.client.call<CallResult<\"disconnect\">>(\"session.disconnect\", { sessionId, closeBrowser });\n }\n\n status(sessionId: string): ReturnType<BrowserManagerLike[\"status\"]> {\n return this.client.call<CallResult<\"status\">>(\"session.status\", { sessionId });\n }\n\n cookieImport(\n sessionId: string,\n cookies: CookieImportRecord[],\n strict = true,\n requestId?: string\n ): ReturnType<BrowserManagerLike[\"cookieImport\"]> {\n return this.client.call<CallResult<\"cookieImport\">>(\"session.cookieImport\", {\n sessionId,\n cookies,\n strict,\n requestId\n });\n }\n\n cookieList(\n sessionId: string,\n urls?: string[],\n requestId?: string\n ): ReturnType<BrowserManagerLike[\"cookieList\"]> {\n return this.client.call<CallResult<\"cookieList\">>(\"session.cookieList\", {\n sessionId,\n ...(urls && urls.length > 0 ? { urls } : {}),\n requestId\n });\n }\n\n goto(\n sessionId: string,\n url: string,\n waitUntil: \"domcontentloaded\" | \"load\" | \"networkidle\" = \"load\",\n timeoutMs = 30000,\n _sessionOverride?: { browser: unknown; context: unknown; targets: unknown },\n targetId?: string | null\n ): ReturnType<BrowserManagerLike[\"goto\"]> {\n return this.client.call<CallResult<\"goto\">>(\"nav.goto\", {\n sessionId,\n url,\n waitUntil,\n timeoutMs,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n waitForLoad(\n sessionId: string,\n until: \"domcontentloaded\" | \"load\" | \"networkidle\",\n timeoutMs = 30000,\n targetId?: string | null\n ): ReturnType<BrowserManagerLike[\"waitForLoad\"]> {\n return this.client.call<CallResult<\"waitForLoad\">>(\"nav.wait\", {\n sessionId,\n until,\n timeoutMs,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n waitForRef(\n sessionId: string,\n ref: string,\n state: \"attached\" | \"visible\" | \"hidden\" = \"attached\",\n timeoutMs = 30000,\n targetId?: string | null\n ): ReturnType<BrowserManagerLike[\"waitForRef\"]> {\n return this.client.call<CallResult<\"waitForRef\">>(\"nav.wait\", {\n sessionId,\n ref,\n state,\n timeoutMs,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n snapshot(\n sessionId: string,\n mode: \"outline\" | \"actionables\",\n maxChars: number,\n cursor?: string,\n targetId?: string | null\n ): ReturnType<BrowserManagerLike[\"snapshot\"]> {\n return this.client.call<CallResult<\"snapshot\">>(\"nav.snapshot\", {\n sessionId,\n mode,\n maxChars,\n cursor,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n click(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"click\"]> {\n return this.client.call<CallResult<\"click\">>(\"interact.click\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n hover(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"hover\"]> {\n return this.client.call<CallResult<\"hover\">>(\"interact.hover\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n press(sessionId: string, key: string, ref?: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"press\"]> {\n return this.client.call<CallResult<\"press\">>(\"interact.press\", {\n sessionId,\n key,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n check(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"check\"]> {\n return this.client.call<CallResult<\"check\">>(\"interact.check\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n uncheck(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"uncheck\"]> {\n return this.client.call<CallResult<\"uncheck\">>(\"interact.uncheck\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n type(\n sessionId: string,\n ref: string,\n text: string,\n clear = false,\n submit = false,\n targetId?: string | null\n ): ReturnType<BrowserManagerLike[\"type\"]> {\n return this.client.call<CallResult<\"type\">>(\"interact.type\", {\n sessionId,\n ref,\n text,\n clear,\n submit,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n select(sessionId: string, ref: string, values: string[], targetId?: string | null): ReturnType<BrowserManagerLike[\"select\"]> {\n return this.client.call<CallResult<\"select\">>(\"interact.select\", {\n sessionId,\n ref,\n values,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n scroll(sessionId: string, dy: number, ref?: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"scroll\"]> {\n return this.client.call<CallResult<\"scroll\">>(\"interact.scroll\", {\n sessionId,\n dy,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n scrollIntoView(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"scrollIntoView\"]> {\n return this.client.call<CallResult<\"scrollIntoView\">>(\"interact.scrollIntoView\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n domGetHtml(sessionId: string, ref: string, maxChars = 8000, targetId?: string | null): ReturnType<BrowserManagerLike[\"domGetHtml\"]> {\n return this.client.call<CallResult<\"domGetHtml\">>(\"dom.getHtml\", {\n sessionId,\n ref,\n maxChars,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n domGetText(sessionId: string, ref: string, maxChars = 8000, targetId?: string | null): ReturnType<BrowserManagerLike[\"domGetText\"]> {\n return this.client.call<CallResult<\"domGetText\">>(\"dom.getText\", {\n sessionId,\n ref,\n maxChars,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n domGetAttr(sessionId: string, ref: string, name: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"domGetAttr\"]> {\n return this.client.call<CallResult<\"domGetAttr\">>(\"dom.getAttr\", {\n sessionId,\n ref,\n name,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n domGetValue(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"domGetValue\"]> {\n return this.client.call<CallResult<\"domGetValue\">>(\"dom.getValue\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n domIsVisible(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"domIsVisible\"]> {\n return this.client.call<CallResult<\"domIsVisible\">>(\"dom.isVisible\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n domIsEnabled(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"domIsEnabled\"]> {\n return this.client.call<CallResult<\"domIsEnabled\">>(\"dom.isEnabled\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n domIsChecked(sessionId: string, ref: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"domIsChecked\"]> {\n return this.client.call<CallResult<\"domIsChecked\">>(\"dom.isChecked\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n clonePage(sessionId: string, targetId?: string | null): Promise<ReactExport> {\n return this.client.call(\"export.clonePage\", {\n sessionId,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n }) as Promise<ReactExport>;\n }\n\n cloneComponent(sessionId: string, ref: string, targetId?: string | null): Promise<ReactExport> {\n return this.client.call(\"export.cloneComponent\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n }) as Promise<ReactExport>;\n }\n\n perfMetrics(sessionId: string, targetId?: string | null): ReturnType<BrowserManagerLike[\"perfMetrics\"]> {\n return this.client.call<CallResult<\"perfMetrics\">>(\"devtools.perf\", {\n sessionId,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n screenshot(sessionId: string, options: Parameters<BrowserManagerLike[\"screenshot\"]>[1] = {}): ReturnType<BrowserManagerLike[\"screenshot\"]> {\n return this.client.call<CallResult<\"screenshot\">>(\"page.screenshot\", {\n sessionId,\n ...(typeof options.path === \"string\" ? { path: options.path } : {}),\n ...(typeof options.targetId === \"string\" ? { targetId: options.targetId } : {}),\n ...(typeof options.ref === \"string\" ? { ref: options.ref } : {}),\n ...(options.fullPage === true ? { fullPage: true } : {})\n });\n }\n\n startScreencast(\n sessionId: string,\n options: Parameters<BrowserManagerLike[\"startScreencast\"]>[1] = {}\n ): ReturnType<BrowserManagerLike[\"startScreencast\"]> {\n return this.client.call<CallResult<\"startScreencast\">>(\"page.screencast.start\", {\n sessionId,\n ...(typeof options.targetId === \"string\" ? { targetId: options.targetId } : {}),\n ...(typeof options.outputDir === \"string\" ? { outputDir: options.outputDir } : {}),\n ...(typeof options.intervalMs === \"number\" ? { intervalMs: options.intervalMs } : {}),\n ...(typeof options.maxFrames === \"number\" ? { maxFrames: options.maxFrames } : {})\n });\n }\n\n stopScreencast(sessionId: string, screencastId: string): ReturnType<BrowserManagerLike[\"stopScreencast\"]> {\n return this.client.call<CallResult<\"stopScreencast\">>(\"page.screencast.stop\", {\n sessionId,\n screencastId\n });\n }\n\n upload(sessionId: string, input: Parameters<BrowserManagerLike[\"upload\"]>[1]): ReturnType<BrowserManagerLike[\"upload\"]> {\n return this.client.call<CallResult<\"upload\">>(\"interact.upload\", {\n sessionId,\n ref: input.ref,\n files: input.files,\n ...(typeof input.targetId === \"string\" ? { targetId: input.targetId } : {})\n });\n }\n\n dialog(sessionId: string, input: Parameters<BrowserManagerLike[\"dialog\"]>[1] = {}): ReturnType<BrowserManagerLike[\"dialog\"]> {\n return this.client.call<CallResult<\"dialog\">>(\"page.dialog\", {\n sessionId,\n action: input.action ?? \"status\",\n ...(typeof input.promptText === \"string\" ? { promptText: input.promptText } : {}),\n ...(typeof input.targetId === \"string\" ? { targetId: input.targetId } : {})\n });\n }\n\n consolePoll(sessionId: string, sinceSeq?: number, max = 50): Promise<{ events: ReturnType<ConsoleTracker[\"poll\"]>[\"events\"]; nextSeq: number }> {\n return this.client.call(\"devtools.consolePoll\", { sessionId, sinceSeq, max }) as Promise<{\n events: ReturnType<ConsoleTracker[\"poll\"]>[\"events\"];\n nextSeq: number;\n }>;\n }\n\n networkPoll(sessionId: string, sinceSeq?: number, max = 50): Promise<{ events: ReturnType<NetworkTracker[\"poll\"]>[\"events\"]; nextSeq: number }> {\n return this.client.call(\"devtools.networkPoll\", { sessionId, sinceSeq, max }) as Promise<{\n events: ReturnType<NetworkTracker[\"poll\"]>[\"events\"];\n nextSeq: number;\n }>;\n }\n\n debugTraceSnapshot(\n sessionId: string,\n options: {\n sinceConsoleSeq?: number;\n sinceNetworkSeq?: number;\n sinceExceptionSeq?: number;\n max?: number;\n requestId?: string;\n } = {}\n ): ReturnType<BrowserManagerLike[\"debugTraceSnapshot\"]> {\n return this.client.call<CallResult<\"debugTraceSnapshot\">>(\"devtools.debugTraceSnapshot\", {\n sessionId,\n ...options\n });\n }\n\n inspectChallengePlan(input: {\n sessionId: string;\n targetId?: string | null;\n runMode?: ChallengeAutomationMode;\n }): Promise<ChallengeInspectPlan> {\n return this.client.call<ChallengeInspectPlan>(\"session.inspectPlan\", {\n sessionId: input.sessionId,\n ...(typeof input.targetId === \"string\" ? { targetId: input.targetId } : {}),\n ...(typeof input.runMode === \"string\"\n ? { challengeAutomationMode: input.runMode }\n : {})\n });\n }\n\n createSessionInspector(): SessionInspectorHandle {\n return {\n status: (sessionId) => this.status(sessionId),\n listTargets: (sessionId, includeUrls) => this.listTargets(sessionId, includeUrls),\n consolePoll: (sessionId, sinceSeq, max) => this.consolePoll(sessionId, sinceSeq, max),\n networkPoll: (sessionId, sinceSeq, max) => this.networkPoll(sessionId, sinceSeq, max),\n debugTraceSnapshot: (sessionId, options) => this.debugTraceSnapshot(sessionId, options)\n };\n }\n\n pointerMove(\n sessionId: string,\n x: number,\n y: number,\n targetId?: string | null,\n steps?: number\n ): ReturnType<BrowserManagerLike[\"pointerMove\"]> {\n return this.client.call<CallResult<\"pointerMove\">>(\"pointer.move\", {\n sessionId,\n x,\n y,\n ...(typeof steps === \"number\" ? { steps } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n pointerDown(\n sessionId: string,\n x: number,\n y: number,\n targetId?: string | null,\n button: \"left\" | \"middle\" | \"right\" = \"left\",\n clickCount = 1\n ): ReturnType<BrowserManagerLike[\"pointerDown\"]> {\n return this.client.call<CallResult<\"pointerDown\">>(\"pointer.down\", {\n sessionId,\n x,\n y,\n button,\n clickCount,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n pointerUp(\n sessionId: string,\n x: number,\n y: number,\n targetId?: string | null,\n button: \"left\" | \"middle\" | \"right\" = \"left\",\n clickCount = 1\n ): ReturnType<BrowserManagerLike[\"pointerUp\"]> {\n return this.client.call<CallResult<\"pointerUp\">>(\"pointer.up\", {\n sessionId,\n x,\n y,\n button,\n clickCount,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n drag(\n sessionId: string,\n from: { x: number; y: number },\n to: { x: number; y: number },\n targetId?: string | null,\n steps?: number\n ): ReturnType<BrowserManagerLike[\"drag\"]> {\n return this.client.call<CallResult<\"drag\">>(\"pointer.drag\", {\n sessionId,\n from,\n to,\n ...(typeof steps === \"number\" ? { steps } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n }\n\n listTargets(sessionId: string, includeUrls = false): Promise<{ activeTargetId: string | null; targets: TargetInfo[] }> {\n return this.client.call(\"targets.list\", { sessionId, includeUrls }) as Promise<{\n activeTargetId: string | null;\n targets: TargetInfo[];\n }>;\n }\n\n useTarget(sessionId: string, targetId: string): Promise<{ activeTargetId: string; url?: string; title?: string }> {\n return this.client.call(\"targets.use\", { sessionId, targetId }) as Promise<{\n activeTargetId: string;\n url?: string;\n title?: string;\n }>;\n }\n\n newTarget(sessionId: string, url?: string): Promise<{ targetId: string }> {\n return this.client.call(\"targets.new\", { sessionId, url }) as Promise<{ targetId: string }>;\n }\n\n closeTarget(sessionId: string, targetId: string): Promise<void> {\n return this.client.call(\"targets.close\", { sessionId, targetId }) as Promise<void>;\n }\n\n page(sessionId: string, name: string, url?: string): Promise<{ targetId: string; created: boolean; url?: string; title?: string }> {\n return this.client.call(\"page.open\", { sessionId, name, url }) as Promise<{\n targetId: string;\n created: boolean;\n url?: string;\n title?: string;\n }>;\n }\n\n listPages(sessionId: string): Promise<{ pages: Array<{ name: string; targetId: string; url?: string; title?: string }> }> {\n return this.client.call(\"page.list\", { sessionId }) as Promise<{\n pages: Array<{ name: string; targetId: string; url?: string; title?: string }>;\n }>;\n }\n\n closePage(sessionId: string, name: string): Promise<void> {\n return this.client.call(\"page.close\", { sessionId, name }) as Promise<void>;\n }\n\n async withPage<T>(_sessionId: string, _targetId: string | null, _fn: (page: never) => Promise<T>): Promise<T> {\n throw new Error(\"Direct annotate is unavailable via daemon-managed sessions.\");\n }\n}\n","import type { CanvasManagerLike } from \"../browser/canvas-manager\";\nimport { DaemonClient } from \"./daemon-client\";\n\nexport class RemoteCanvasManager implements CanvasManagerLike {\n private client: DaemonClient;\n\n constructor(client: DaemonClient) {\n this.client = client;\n }\n\n execute(command: string, params: Record<string, unknown> = {}): Promise<unknown> {\n return this.client.call(\"canvas.execute\", { command, params });\n }\n}\n","import type {\n DesktopCaptureInput,\n DesktopResult,\n DesktopRuntimeLike,\n DesktopRuntimeStatus,\n DesktopAccessibilityValue,\n DesktopCaptureValue,\n DesktopWindowSummary\n} from \"../desktop\";\nimport { DaemonClient } from \"./daemon-client\";\n\nexport class RemoteDesktopRuntime implements DesktopRuntimeLike {\n private readonly client: DaemonClient;\n\n constructor(client: DaemonClient) {\n this.client = client;\n }\n\n status(): Promise<DesktopRuntimeStatus> {\n return this.client.call<DesktopRuntimeStatus>(\"desktop.status\");\n }\n\n listWindows(reason?: string): Promise<DesktopResult<{ windows: DesktopWindowSummary[] }>> {\n return this.client.call(\"desktop.windows.list\", {\n ...(reason ? { reason } : {})\n });\n }\n\n activeWindow(reason?: string): Promise<DesktopResult<DesktopWindowSummary | null>> {\n return this.client.call(\"desktop.window.active\", {\n ...(reason ? { reason } : {})\n });\n }\n\n captureDesktop(input: DesktopCaptureInput): Promise<DesktopResult<DesktopCaptureValue>> {\n return this.client.call(\"desktop.capture.desktop\", { reason: input.reason });\n }\n\n captureWindow(windowId: string, input: DesktopCaptureInput): Promise<DesktopResult<DesktopCaptureValue>> {\n return this.client.call(\"desktop.capture.window\", {\n windowId,\n reason: input.reason\n });\n }\n\n accessibilitySnapshot(reason: string, windowId?: string): Promise<DesktopResult<DesktopAccessibilityValue>> {\n return this.client.call(\"desktop.accessibility.snapshot\", {\n reason,\n ...(windowId ? { windowId } : {})\n });\n }\n}\n","import type { RelayLike } from \"../relay/relay-types\";\nimport type { RelayStatus } from \"../relay/relay-server\";\nimport { DaemonClient } from \"./daemon-client\";\n\nconst emptyStatus: RelayStatus = {\n running: false,\n extensionConnected: false,\n extensionHandshakeComplete: false,\n cdpConnected: false,\n annotationConnected: false,\n opsConnected: false,\n canvasConnected: false,\n pairingRequired: false,\n instanceId: \"\",\n epoch: 0,\n health: {\n ok: false,\n reason: \"relay_down\",\n extensionConnected: false,\n extensionHandshakeComplete: false,\n cdpConnected: false,\n annotationConnected: false,\n opsConnected: false,\n canvasConnected: false,\n pairingRequired: false\n }\n};\n\nexport class RemoteRelay implements RelayLike {\n private client: DaemonClient;\n private lastStatus: RelayStatus = emptyStatus;\n private lastCdpUrl: string | null = null;\n private lastAnnotationUrl: string | null = null;\n private lastOpsUrl: string | null = null;\n private lastCanvasUrl: string | null = null;\n\n constructor(client: DaemonClient) {\n this.client = client;\n }\n\n async refresh(): Promise<void> {\n try {\n const status = await this.client.call<RelayStatus>(\"relay.status\");\n this.lastStatus = status;\n const cdpUrl = await this.client.call<string | null>(\"relay.cdpUrl\");\n this.lastCdpUrl = typeof cdpUrl === \"string\" ? cdpUrl : null;\n const annotationUrl = await this.client.call<string | null>(\"relay.annotationUrl\");\n this.lastAnnotationUrl = typeof annotationUrl === \"string\" ? annotationUrl : null;\n const opsUrl = await this.client.call<string | null>(\"relay.opsUrl\");\n this.lastOpsUrl = typeof opsUrl === \"string\" ? opsUrl : null;\n const canvasUrl = await this.client.call<string | null>(\"relay.canvasUrl\");\n this.lastCanvasUrl = typeof canvasUrl === \"string\" ? canvasUrl : null;\n } catch {\n this.lastStatus = emptyStatus;\n this.lastCdpUrl = null;\n this.lastAnnotationUrl = null;\n this.lastOpsUrl = null;\n this.lastCanvasUrl = null;\n }\n }\n\n status(): RelayStatus {\n return this.lastStatus;\n }\n\n getCdpUrl(): string | null {\n return this.lastCdpUrl;\n }\n\n getAnnotationUrl(): string | null {\n return this.lastAnnotationUrl;\n }\n\n getOpsUrl(): string | null {\n return this.lastOpsUrl;\n }\n\n getCanvasUrl(): string | null {\n return this.lastCanvasUrl;\n }\n}\n","import onboardingMetadata from \"../cli/onboarding-metadata.json\";\n\nexport type SkillNudgeState = {\n pending: boolean;\n requestedAtMs: number | null;\n};\n\nexport const SKILL_NUDGE_MARKER = \"[opendevbrowser:skill-nudge]\";\n\nconst SKILL_NUDGE_MESSAGE = `${SKILL_NUDGE_MARKER} If this task likely matches a skill, start with skill(\"${onboardingMetadata.skillName}\", \"${onboardingMetadata.skillTopic}\"). For frontend, UI, screenshot-to-code, or /canvas design work, then load skill(\"${onboardingMetadata.designSkillName}\", \"${onboardingMetadata.designSkillTopic}\"). Use the canonical opendevbrowser-* packs and start with the bundled quick-start lane before low-level browser commands.`;\n\ntype TextPart = { type: \"text\"; text: string };\ntype UnknownPart = { type: string; text?: string };\n\nexport function createSkillNudgeState(): SkillNudgeState {\n return { pending: false, requestedAtMs: null };\n}\n\nexport function extractTextFromParts(parts: UnknownPart[]): string {\n return parts\n .filter((part): part is TextPart => part.type === \"text\" && typeof part.text === \"string\")\n .map((part) => part.text)\n .join(\"\\n\")\n .trim();\n}\n\nexport function shouldTriggerSkillNudge(text: string, keywords: string[]): boolean {\n const normalized = text.toLowerCase();\n return keywords.some((keyword) => normalized.includes(keyword.toLowerCase()));\n}\n\nexport function markSkillNudge(state: SkillNudgeState, nowMs: number): void {\n state.pending = true;\n state.requestedAtMs = nowMs;\n}\n\nexport function clearSkillNudge(state: SkillNudgeState): void {\n state.pending = false;\n state.requestedAtMs = null;\n}\n\nexport function consumeSkillNudge(state: SkillNudgeState, nowMs: number, maxAgeMs: number): boolean {\n if (!state.pending) return false;\n\n const requestedAt = state.requestedAtMs ?? 0;\n if (!state.requestedAtMs || nowMs - requestedAt > maxAgeMs) {\n clearSkillNudge(state);\n return false;\n }\n\n clearSkillNudge(state);\n return true;\n}\n\nexport function buildSkillNudgeMessage(): string {\n return SKILL_NUDGE_MESSAGE;\n}\n","export type ContinuityNudgeState = {\n pending: boolean;\n requestedAtMs: number | null;\n};\n\nexport const CONTINUITY_NUDGE_MARKER = \"[opendevbrowser:continuity-nudge]\";\n\nconst DEFAULT_FILE_PATH = \"opendevbrowser_continuity.md\";\n\nexport function createContinuityNudgeState(): ContinuityNudgeState {\n return { pending: false, requestedAtMs: null };\n}\n\nexport function shouldTriggerContinuityNudge(text: string, keywords: string[]): boolean {\n const normalized = text.toLowerCase();\n return keywords.some((keyword) => normalized.includes(keyword.toLowerCase()));\n}\n\nexport function markContinuityNudge(state: ContinuityNudgeState, nowMs: number): void {\n state.pending = true;\n state.requestedAtMs = nowMs;\n}\n\nexport function clearContinuityNudge(state: ContinuityNudgeState): void {\n state.pending = false;\n state.requestedAtMs = null;\n}\n\nexport function consumeContinuityNudge(\n state: ContinuityNudgeState,\n nowMs: number,\n maxAgeMs: number\n): boolean {\n if (!state.pending) return false;\n\n const requestedAt = state.requestedAtMs ?? 0;\n if (!state.requestedAtMs || nowMs - requestedAt > maxAgeMs) {\n clearContinuityNudge(state);\n return false;\n }\n\n clearContinuityNudge(state);\n return true;\n}\n\nexport function buildContinuityNudgeMessage(filePath?: string): string {\n const target = filePath?.trim() || DEFAULT_FILE_PATH;\n return `${CONTINUITY_NUDGE_MARKER} For long-running tasks, load skill(\"opendevbrowser-continuity-ledger\") and create or update ${target} at the repo root with Goal, Constraints/Assumptions, Key decisions, State (Done/Now/Next), Open questions, and Working set. Keep it brief.`;\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { buildLoopbackSessionRelayEndpoint } from \"../relay/relay-endpoints\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\ntype RelayStatus = ReturnType<NonNullable<ToolDeps[\"relay\"]>[\"status\"]>;\ntype RelayObservedStatus = {\n instanceId: string;\n running: boolean;\n port?: number;\n extensionConnected: boolean;\n extensionHandshakeComplete: boolean;\n cdpConnected: boolean;\n opsConnected: boolean;\n pairingRequired: boolean;\n};\n\nexport function createLaunchTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Launch a browser session (extension relay first) and return a sessionId.\",\n args: {\n profile: z.string().optional().describe(\"Profile name for persistent browsing\"),\n headless: z.boolean().optional().describe(\"Run Chrome in headless mode\"),\n startUrl: z.string().optional().describe(\"Optional URL to open after launch\"),\n chromePath: z.string().optional().describe(\"Override Chrome executable path\"),\n flags: z.array(z.string()).optional().describe(\"Extra Chrome flags\"),\n persistProfile: z.boolean().optional().describe(\"Persist profile data between sessions\"),\n noExtension: z.boolean().optional().describe(\"Skip extension relay and launch a new browser\"),\n extensionOnly: z.boolean().optional().describe(\"Require extension relay or fail\"),\n extensionLegacy: z.boolean().optional().describe(\"Use legacy extension relay (/cdp) instead of ops\"),\n waitForExtension: z.boolean().optional().describe(\"Wait for extension to connect before launching\"),\n waitTimeoutMs: z.number().int().optional().describe(\"Timeout for waiting on extension (ms)\")\n },\n async execute(args) {\n let attemptedRebind = false;\n\n while (true) {\n try {\n await deps.relay?.refresh?.();\n const config = deps.config.get();\n const extensionLegacy = args.extensionLegacy === true;\n let relayStatus = deps.relay?.status();\n let relayUrl = extensionLegacy ? deps.relay?.getCdpUrl() ?? null : deps.relay?.getOpsUrl?.() ?? null;\n const relayPort = relayStatus?.port;\n if (!relayUrl && isValidPort(relayPort)) {\n relayUrl = buildLoopbackSessionRelayEndpoint(relayPort, { extensionLegacy });\n }\n const waitTimeoutMs = clampWaitTimeout(args.waitTimeoutMs ?? 30000);\n const headlessExplicit = args.headless === true;\n const managedExplicit = Boolean(args.noExtension || headlessExplicit);\n const managedHeadless = headlessExplicit ? true : false;\n if (headlessExplicit && !args.noExtension) {\n return failure(\n \"Extension mode does not support headless launches. Use noExtension=true with headless=true for managed mode.\",\n \"unsupported_mode\"\n );\n }\n\n if (args.waitForExtension && !managedExplicit) {\n const observedPort = resolveObservedPort(relayStatus, config.relayPort);\n const connected = await waitForExtensionHandshake(deps.relay, observedPort, waitTimeoutMs);\n if (connected) {\n relayStatus = deps.relay?.status() ?? relayStatus;\n relayUrl = extensionLegacy ? deps.relay?.getCdpUrl() ?? relayUrl : deps.relay?.getOpsUrl?.() ?? relayUrl;\n }\n }\n\n const observedPort = resolveObservedPort(relayStatus, config.relayPort);\n const shouldFetchObserved = !managedExplicit && (!relayUrl || !(relayStatus?.extensionHandshakeComplete || relayStatus?.extensionConnected));\n const observedStatus = shouldFetchObserved ? await fetchRelayObservedStatus(observedPort) : null;\n if (!relayUrl) {\n const fallbackPort = isValidPort(observedStatus?.port) ? observedStatus?.port : observedPort;\n relayUrl = fallbackPort ? buildLoopbackSessionRelayEndpoint(fallbackPort, { extensionLegacy }) : null;\n }\n const extensionReady = Boolean(\n relayUrl && (\n relayStatus?.extensionHandshakeComplete ||\n relayStatus?.extensionConnected ||\n observedStatus?.extensionHandshakeComplete ||\n observedStatus?.extensionConnected\n )\n );\n let usedRelay = false;\n let result:\n | Awaited<ReturnType<typeof deps.manager.launch>>\n | Awaited<ReturnType<typeof deps.manager.connectRelay>>\n | null = null;\n\n if (args.extensionOnly && !extensionReady) {\n const diagnostics = buildRelayNotReadyDiagnostics(\"Extension not connected.\", {\n relayUrl,\n relayStatus,\n observedStatus,\n observedPort\n });\n if (await maybeRetryHubMismatch(diagnostics.hint, attemptedRebind, deps)) {\n attemptedRebind = true;\n continue;\n }\n return failure(buildExtensionMissingMessage(diagnostics.message), \"extension_not_connected\");\n }\n\n if (!managedExplicit) {\n if (!extensionReady || !relayUrl) {\n const diagnostics = buildRelayNotReadyDiagnostics(\"Extension not connected.\", {\n relayUrl,\n relayStatus,\n observedStatus,\n observedPort\n });\n if (await maybeRetryHubMismatch(diagnostics.hint, attemptedRebind, deps)) {\n attemptedRebind = true;\n continue;\n }\n return failure(buildExtensionMissingMessage(diagnostics.message), \"extension_not_connected\");\n }\n try {\n result = args.startUrl\n ? await deps.manager.connectRelay(relayUrl, { startUrl: args.startUrl })\n : await deps.manager.connectRelay(relayUrl);\n usedRelay = true;\n } catch (error) {\n const errorMessage = serializeError(error).message;\n const unauthorized = errorMessage.toLowerCase().includes(\"unauthorized\") || errorMessage.includes(\"401\");\n const relayLabel = extensionLegacy ? \"/cdp\" : \"/ops\";\n const errorObservedStatus = observedStatus ?? await fetchRelayObservedStatus(observedPort);\n const diagnostics = buildRelayNotReadyDiagnostics(\n unauthorized\n ? `Extension relay connection failed: relay ${relayLabel} unauthorized (token mismatch).`\n : `Extension relay connection failed: ${errorMessage}`,\n {\n relayUrl,\n relayStatus,\n observedStatus: errorObservedStatus,\n observedPort\n }\n );\n if (await maybeRetryHubMismatch(diagnostics.hint, attemptedRebind, deps)) {\n attemptedRebind = true;\n continue;\n }\n return failure(buildExtensionMissingMessage(diagnostics.message), \"extension_connect_failed\");\n }\n }\n\n if (!result) {\n try {\n result = await deps.manager.launch({\n profile: args.profile,\n headless: managedHeadless,\n startUrl: args.startUrl,\n chromePath: args.chromePath,\n flags: args.flags,\n persistProfile: args.persistProfile,\n noExtension: args.noExtension\n });\n } catch (error) {\n return failure(buildManagedFailureMessage(error), \"launch_failed\");\n }\n }\n\n const warnings = result.warnings ?? [];\n return ok({\n sessionId: result.sessionId,\n mode: result.mode,\n browserWsEndpoint: result.wsEndpoint,\n activeTargetId: result.activeTargetId,\n warnings: warnings.length ? warnings : undefined\n });\n } catch (error) {\n return failure(serializeError(error).message, \"launch_failed\");\n }\n }\n }\n });\n}\n\nconst buildExtensionMissingMessage = (reason: string): string => {\n return [\n reason,\n \"Connect the extension: open the Chrome extension popup and click Connect, then retry.\",\n \"Tip: If the popup says Connected, it may be connected to a different relay instance/port than this tool expects.\",\n \"Legend: ext=extension websocket, handshake=extension handshake, ops=active /ops client, cdp=active /cdp client, pairing=token required.\",\n \"\",\n \"Other options (explicit):\",\n \"- Managed (headed): npx opendevbrowser launch --no-extension\",\n \"- Managed (headless): npx opendevbrowser launch --no-extension --headless\",\n \"- Legacy extension relay: npx opendevbrowser launch --extension-legacy\",\n \"- CDPConnect (default port): npx opendevbrowser connect --cdp-port 9222\",\n \"- CDPConnect (explicit WS): npx opendevbrowser connect --ws-endpoint ws://127.0.0.1:9222/devtools/browser/<id>\",\n \"Note: CDPConnect requires Chrome started with --remote-debugging-port=9222.\"\n ].join(\"\\n\");\n};\n\nconst buildManagedFailureMessage = (error: unknown): string => {\n const detail = serializeError(error).message;\n return [\n `Managed session failed: ${detail}`,\n \"\",\n \"Final option (explicit):\",\n \"- CDPConnect (default port): npx opendevbrowser connect --cdp-port 9222\",\n \"- CDPConnect (explicit WS): npx opendevbrowser connect --ws-endpoint ws://127.0.0.1:9222/devtools/browser/<id>\"\n ].join(\"\\n\");\n};\n\nconst MIN_WAIT_TIMEOUT_MS = 3000;\nconst WAIT_MIN_DELAY_MS = 250;\nconst WAIT_MAX_DELAY_MS = 2000;\n\nfunction clampWaitTimeout(timeoutMs: number): number {\n if (!Number.isFinite(timeoutMs)) {\n return MIN_WAIT_TIMEOUT_MS;\n }\n return Math.max(timeoutMs, MIN_WAIT_TIMEOUT_MS);\n}\n\nasync function waitForExtensionHandshake(\n relay: { status: () => { extensionHandshakeComplete: boolean } } | undefined,\n observedPort: number | null,\n timeoutMs: number\n): Promise<boolean> {\n const start = Date.now();\n let delay = WAIT_MIN_DELAY_MS;\n while (Date.now() - start < timeoutMs) {\n if (relay?.status().extensionHandshakeComplete) {\n return true;\n }\n const observedStatus = await fetchRelayObservedStatus(observedPort);\n if (observedStatus?.extensionHandshakeComplete) {\n return true;\n }\n await new Promise((resolve) => setTimeout(resolve, delay));\n delay = Math.min(delay * 2, WAIT_MAX_DELAY_MS);\n }\n return false;\n}\n\nfunction resolveObservedPort(relayStatus: RelayStatus | undefined, configPort: number): number | null {\n const relayPort = relayStatus?.port;\n if (isValidPort(relayPort)) return relayPort;\n if (isValidPort(configPort)) return configPort;\n return null;\n}\n\nfunction isValidPort(port: unknown): port is number {\n return typeof port === \"number\" && Number.isInteger(port) && port > 0 && port <= 65535;\n}\n\nfunction shortInstanceId(value: string | undefined): string {\n if (!value) return \"?\";\n return value.slice(0, 8);\n}\n\nfunction formatRelayUrl(relayUrl: string | null): string {\n return relayUrl ?? \"null\";\n}\n\nfunction formatLocalStatus(status: RelayStatus | undefined): string {\n return [\n \"local(instance=\",\n shortInstanceId(status?.instanceId),\n \" port=\",\n typeof status?.port === \"number\" ? String(status.port) : \"?\",\n \" ext=\",\n String(Boolean(status?.extensionConnected)),\n \" handshake=\",\n String(Boolean(status?.extensionHandshakeComplete)),\n \" ops=\",\n String(Boolean(status?.opsConnected)),\n \" cdp=\",\n String(Boolean(status?.cdpConnected)),\n \" pairing=\",\n String(Boolean(status?.pairingRequired)),\n \")\"\n ].join(\"\");\n}\n\nfunction formatObservedStatus(status: RelayObservedStatus | null, port: number | null): string {\n const label = port ?? \"?\";\n if (!status) {\n return `observed@${label}=none`;\n }\n return [\n \"observed@\",\n label,\n \"=instance=\",\n shortInstanceId(status.instanceId),\n \" ext=\",\n String(Boolean(status.extensionConnected)),\n \" handshake=\",\n String(Boolean(status.extensionHandshakeComplete)),\n \" ops=\",\n String(Boolean(status.opsConnected)),\n \" cdp=\",\n String(Boolean(status.cdpConnected)),\n \" pairing=\",\n String(Boolean(status.pairingRequired))\n ].join(\"\");\n}\n\ntype RelayNotReadyDiagnostics = {\n message: string;\n hint: string;\n};\n\nfunction buildRelayNotReadyDiagnostics(\n baseReason: string,\n detail: {\n relayUrl: string | null;\n relayStatus: RelayStatus | undefined;\n observedStatus: RelayObservedStatus | null;\n observedPort: number | null;\n }\n): RelayNotReadyDiagnostics {\n const localExt = Boolean(detail.relayStatus?.extensionConnected);\n const observedExt = Boolean(detail.observedStatus?.extensionConnected);\n let hint = \"none\";\n if (detail.relayUrl === null) {\n hint = \"relayUrl_null\";\n } else if (detail.observedStatus && !localExt && observedExt) {\n hint = \"possible_mismatch\";\n } else if (detail.relayStatus?.instanceId && detail.observedStatus?.instanceId\n && detail.relayStatus.instanceId !== detail.observedStatus.instanceId) {\n hint = \"possible_mismatch\";\n }\n const diagnostics = [\n \"Diagnostics: relayUrl=\",\n formatRelayUrl(detail.relayUrl),\n \" \",\n formatLocalStatus(detail.relayStatus),\n \" \",\n formatObservedStatus(detail.observedStatus, detail.observedPort),\n \" hint=\",\n hint\n ].join(\"\");\n return { message: [baseReason, diagnostics].join(\"\\n\"), hint };\n}\n\nasync function maybeRetryHubMismatch(\n hint: string,\n attempted: boolean,\n deps: ToolDeps\n): Promise<boolean> {\n if (attempted) return false;\n if (hint !== \"possible_mismatch\") return false;\n if (!deps.ensureHub) return false;\n await deps.ensureHub();\n await deps.relay?.refresh?.();\n return true;\n}\n\nasync function fetchRelayObservedStatus(port: number | null): Promise<RelayObservedStatus | null> {\n if (!isValidPort(port)) return null;\n if (typeof fetch !== \"function\") return null;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 500);\n try {\n const response = await fetch(`http://127.0.0.1:${port}/status`, { signal: controller.signal });\n if (!response.ok) return null;\n const payload = await response.json() as Partial<RelayObservedStatus>;\n if (!payload || typeof payload.instanceId !== \"string\") return null;\n return {\n instanceId: payload.instanceId,\n running: Boolean(payload.running),\n port: typeof payload.port === \"number\" ? payload.port : undefined,\n extensionConnected: Boolean(payload.extensionConnected),\n extensionHandshakeComplete: Boolean(payload.extensionHandshakeComplete),\n cdpConnected: Boolean(payload.cdpConnected),\n opsConnected: Boolean(payload.opsConnected),\n pairingRequired: Boolean(payload.pairingRequired)\n };\n } catch {\n return null;\n } finally {\n clearTimeout(timeoutId);\n }\n}\n","export type ToolError = {\n ok: false;\n error: {\n message: string;\n code?: string;\n details?: Record<string, unknown>;\n };\n};\n\nexport type ToolOk<T> = T & { ok: true };\n\nexport function ok<T extends Record<string, unknown>>(data: T): string {\n return JSON.stringify({ ok: true, ...data });\n}\n\nexport function failure(message: string, code?: string, details?: Record<string, unknown>): string {\n return JSON.stringify({\n ok: false,\n error: {\n message,\n code,\n ...(details ? { details } : {})\n }\n });\n}\n\nexport function serializeError(error: unknown): { message: string; code?: string; details?: Record<string, unknown> } {\n if (error instanceof Error) {\n const detailCarrier = error as Error & { code?: string; blocker?: unknown; details?: unknown };\n const details = detailCarrier.details && typeof detailCarrier.details === \"object\" && !Array.isArray(detailCarrier.details)\n ? detailCarrier.details as Record<string, unknown>\n : detailCarrier.blocker && typeof detailCarrier.blocker === \"object\" && !Array.isArray(detailCarrier.blocker)\n ? { blocker: detailCarrier.blocker as Record<string, unknown> }\n : undefined;\n return {\n message: error.message,\n code: detailCarrier.code,\n details\n };\n }\n return { message: \"Unknown error\" };\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { classifySessionRelayEndpoint, resolveSessionRelayRoute } from \"../relay/relay-endpoints\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createConnectTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Connect to an existing Chrome CDP endpoint or extension relay.\",\n args: {\n wsEndpoint: z.string().optional().describe(\"Full WebSocket endpoint to connect to\"),\n host: z.string().optional().describe(\"Host for /json/version lookup\"),\n port: z.number().int().optional().describe(\"Port for /json/version lookup\"),\n startUrl: z.string().optional().describe(\"Open this URL immediately after connect\"),\n extensionLegacy: z.boolean().optional().describe(\"Use legacy extension relay (/cdp) instead of ops\")\n },\n async execute(args) {\n try {\n await deps.relay?.refresh?.();\n const wsEndpoint = args.wsEndpoint;\n const extensionLegacy = args.extensionLegacy === true;\n const startUrl = typeof args.startUrl === \"string\" && args.startUrl.trim().length > 0\n ? args.startUrl.trim()\n : undefined;\n const hasExplicitCdp = Boolean(wsEndpoint || args.host || args.port);\n const relayUrl = extensionLegacy ? deps.relay?.getCdpUrl() ?? null : deps.relay?.getOpsUrl?.() ?? null;\n const parsedRelayEndpoint = classifySessionRelayEndpoint(wsEndpoint);\n const resolvedRelayEndpoint = parsedRelayEndpoint\n ? resolveSessionRelayRoute(parsedRelayEndpoint, { extensionLegacy })\n : null;\n if (resolvedRelayEndpoint && \"code\" in resolvedRelayEndpoint) {\n return failure(resolvedRelayEndpoint.message, resolvedRelayEndpoint.code);\n }\n const relayEndpoint = relayUrl && wsEndpoint === relayUrl\n ? relayUrl\n : resolvedRelayEndpoint?.normalizedEndpoint ?? null;\n const preferredRelayEndpoint = relayEndpoint ?? (!hasExplicitCdp ? relayUrl : null);\n let result;\n if (preferredRelayEndpoint) {\n result = startUrl\n ? await deps.manager.connectRelay(preferredRelayEndpoint, { startUrl })\n : await deps.manager.connectRelay(preferredRelayEndpoint);\n } else {\n if (!hasExplicitCdp) {\n return failure(\"Extension relay not available. Connect the extension or pass wsEndpoint/host/port.\", \"extension_not_connected\");\n }\n result = await deps.manager.connect({\n wsEndpoint,\n host: args.host,\n port: args.port,\n startUrl\n });\n }\n return ok({\n sessionId: result.sessionId,\n mode: result.mode,\n browserWsEndpoint: result.wsEndpoint,\n activeTargetId: result.activeTargetId,\n warnings: result.warnings.length ? result.warnings : undefined\n });\n } catch (error) {\n return failure(serializeError(error).message, \"connect_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createDisconnectTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Disconnect a browser session.\",\n args: {\n sessionId: z.string().describe(\"Session id returned from launch/connect\"),\n closeBrowser: z.boolean().optional().describe(\"Close the underlying browser process\")\n },\n async execute(args) {\n try {\n await deps.manager.disconnect(args.sessionId, Boolean(args.closeBrowser));\n return ok({});\n } catch (error) {\n return failure(serializeError(error).message, \"disconnect_failed\");\n }\n }\n });\n}\n","import { readFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { fetchDaemonStatusFromMetadata } from \"../cli/daemon-status\";\nimport { isHubEnabled } from \"../utils/hub-enabled\";\n\nconst z = tool.schema;\n\nfunction getPackageVersion(): string | undefined {\n try {\n const baseDir = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n join(baseDir, \"..\", \"..\", \"package.json\"),\n join(baseDir, \"..\", \"package.json\")\n ];\n for (const pkgPath of candidates) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n if (typeof pkg.version === \"string\") {\n return pkg.version;\n }\n } catch (error) {\n void error;\n }\n }\n return undefined;\n } catch (error) {\n void error;\n return undefined;\n }\n}\n\nasync function fetchLatestVersion(packageName: string): Promise<string | undefined> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 5000);\n try {\n const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`, { signal: controller.signal });\n if (!response.ok) return undefined;\n const payload = await response.json() as { version?: unknown };\n return typeof payload.version === \"string\" ? payload.version : undefined;\n } catch (error) {\n console.warn(\"[opendevbrowser] Update check failed:\", error);\n return undefined;\n } finally {\n clearTimeout(timeoutId);\n }\n}\n\nexport function createStatusTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Get daemon or session status.\",\n args: {\n sessionId: z.string().optional().describe(\"Session id (required when hub is disabled)\")\n },\n async execute(args) {\n try {\n const config = deps.config.get();\n const hubEnabled = isHubEnabled(config);\n const extensionPath = deps.getExtensionPath?.() ?? null;\n const version = getPackageVersion();\n let updateHint: string | undefined;\n let sessionStatus: { mode: string; activeTargetId: string | null; url?: string; title?: string } | null = null;\n\n if (hubEnabled) {\n const daemonStatus = await fetchDaemonStatusFromMetadata();\n if (!daemonStatus) {\n return failure(\"Daemon not running. Start with `npx opendevbrowser serve`.\", \"status_failed\");\n }\n if (args.sessionId) {\n sessionStatus = await deps.manager.status(args.sessionId);\n }\n\n if (config.checkForUpdates && version) {\n const latest = await fetchLatestVersion(\"opendevbrowser\");\n if (latest && latest !== version) {\n updateHint = `Update available: ${version} -> ${latest}`;\n }\n }\n\n return ok({\n ...(sessionStatus ?? {}),\n daemon: daemonStatus,\n hubEnabled: true,\n extensionPath: extensionPath ?? undefined,\n version,\n updateHint\n });\n }\n\n if (!args.sessionId) {\n return failure(\"Missing sessionId for status.\", \"status_failed\");\n }\n\n sessionStatus = await deps.manager.status(args.sessionId);\n\n if (config.checkForUpdates && version) {\n const latest = await fetchLatestVersion(\"opendevbrowser\");\n if (latest && latest !== version) {\n updateHint = `Update available: ${version} -> ${latest}`;\n }\n }\n \n return ok({\n mode: sessionStatus.mode,\n activeTargetId: sessionStatus.activeTargetId,\n url: sessionStatus.url,\n title: sessionStatus.title,\n extensionPath: extensionPath ?? undefined,\n version,\n updateHint\n });\n } catch (error) {\n return failure(serializeError(error).message, \"status_failed\");\n }\n }\n });\n}\n","import type { OpenDevBrowserConfig } from \"../config\";\n\nexport const isHubEnabled = (config: OpenDevBrowserConfig): boolean => {\n return config.relayToken !== false && config.relayPort > 0;\n};\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { CHALLENGE_AUTOMATION_MODES } from \"../challenges/types\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { requireAutomationCoordinator } from \"./automation-shared\";\n\nconst z = tool.schema;\nconst challengeAutomationModeSchema = z.enum(CHALLENGE_AUTOMATION_MODES);\n\nexport function createStatusCapabilitiesTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Inspect runtime capability discovery for the host and an optional session.\",\n args: {\n sessionId: z.string().optional().describe(\"Optional session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n challengeAutomationMode: challengeAutomationModeSchema.optional().describe(\"Optional browser-scoped computer-use mode override\")\n },\n async execute(args) {\n try {\n const coordinator = requireAutomationCoordinator(deps);\n if (typeof coordinator === \"string\") {\n return coordinator;\n }\n const result = await coordinator.statusCapabilities({\n browserSessionId: args.sessionId,\n targetId: args.targetId,\n runMode: args.challengeAutomationMode\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"status_capabilities_failed\");\n }\n }\n });\n}\n","import type { SessionInspectorHandle } from \"../browser/manager-types\";\nimport type { AutomationCoordinatorLike } from \"../automation/coordinator\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure } from \"./response\";\n\nexport function requireAutomationCoordinator(\n deps: ToolDeps\n): AutomationCoordinatorLike | string {\n return deps.automationCoordinator\n ?? failure(\"Automation coordinator unavailable.\", \"automation_coordinator_unavailable\");\n}\n\nexport function requireSessionInspectorHandle(\n deps: ToolDeps\n): SessionInspectorHandle | string {\n const inspector = deps.manager.createSessionInspector?.();\n return inspector\n ?? failure(\n \"Session inspector is unavailable for the current runtime.\",\n \"session_inspector_unavailable\"\n );\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { inspectSession } from \"../browser/session-inspector\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { requireSessionInspectorHandle } from \"./automation-shared\";\n\nconst z = tool.schema;\n\nexport function createSessionInspectorTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture a session-first diagnostic bundle with relay health, trace proof, and a suggested next action.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n includeUrls: z.boolean().optional().describe(\"Include target URLs in the targets summary\"),\n sinceConsoleSeq: z.number().int().optional().describe(\"Resume cursor for console events\"),\n sinceNetworkSeq: z.number().int().optional().describe(\"Resume cursor for network events\"),\n sinceExceptionSeq: z.number().int().optional().describe(\"Resume cursor for exception events\"),\n max: z.number().int().optional().describe(\"Max events per diagnostics channel\"),\n requestId: z.string().optional().describe(\"Optional trace request id\")\n },\n async execute(args) {\n try {\n const inspector = requireSessionInspectorHandle(deps);\n if (typeof inspector === \"string\") {\n return inspector;\n }\n\n await deps.relay?.refresh?.().catch(() => undefined);\n const relayStatus = deps.relay?.status?.() ?? null;\n const result = await inspectSession(inspector, {\n sessionId: args.sessionId,\n includeUrls: args.includeUrls,\n sinceConsoleSeq: args.sinceConsoleSeq,\n sinceNetworkSeq: args.sinceNetworkSeq,\n sinceExceptionSeq: args.sinceExceptionSeq,\n max: args.max,\n requestId: args.requestId,\n relayStatus\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"session_inspector_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { CHALLENGE_AUTOMATION_MODES } from \"../challenges/types\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { requireAutomationCoordinator } from \"./automation-shared\";\n\nconst z = tool.schema;\nconst challengeAutomationModeSchema = z.enum(CHALLENGE_AUTOMATION_MODES);\n\nexport function createSessionInspectorPlanTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Inspect browser-scoped computer-use policy, eligibility, and safe suggested steps.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n challengeAutomationMode: challengeAutomationModeSchema.optional().describe(\"Optional browser-scoped computer-use mode override\")\n },\n async execute(args) {\n try {\n const coordinator = requireAutomationCoordinator(deps);\n if (typeof coordinator === \"string\") {\n return coordinator;\n }\n const result = await coordinator.inspectChallengePlan({\n browserSessionId: args.sessionId,\n targetId: args.targetId,\n runMode: args.challengeAutomationMode\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"session_inspector_plan_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { buildCorrelatedAuditBundle } from \"../browser/session-inspector\";\nimport { CHALLENGE_AUTOMATION_MODES } from \"../challenges/types\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport {\n requireAutomationCoordinator,\n requireSessionInspectorHandle\n} from \"./automation-shared\";\n\nconst z = tool.schema;\nconst challengeAutomationModeSchema = z.enum(CHALLENGE_AUTOMATION_MODES);\n\nexport function createSessionInspectorAuditTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture a correlated audit bundle across desktop evidence, browser review, and policy state.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n reason: z.string().optional().describe(\"Optional audit reason\"),\n maxChars: z.number().int().optional().describe(\"Max characters for review output\"),\n cursor: z.string().optional().describe(\"Cursor for paging\"),\n includeUrls: z.boolean().optional().describe(\"Include target URLs in the targets summary\"),\n sinceConsoleSeq: z.number().int().optional().describe(\"Resume cursor for console events\"),\n sinceNetworkSeq: z.number().int().optional().describe(\"Resume cursor for network events\"),\n sinceExceptionSeq: z.number().int().optional().describe(\"Resume cursor for exception events\"),\n max: z.number().int().optional().describe(\"Max events per diagnostics channel\"),\n requestId: z.string().optional().describe(\"Optional trace request id\"),\n challengeAutomationMode: challengeAutomationModeSchema.optional().describe(\"Optional browser-scoped computer-use mode override\")\n },\n async execute(args) {\n try {\n const coordinator = requireAutomationCoordinator(deps);\n if (typeof coordinator === \"string\") {\n return coordinator;\n }\n const inspector = requireSessionInspectorHandle(deps);\n if (typeof inspector === \"string\") {\n return inspector;\n }\n await deps.relay?.refresh?.().catch(() => undefined);\n const review = await coordinator.reviewDesktop({\n browserSessionId: args.sessionId,\n targetId: args.targetId,\n reason: args.reason,\n maxChars: args.maxChars,\n cursor: args.cursor\n });\n const challengePlan = await coordinator.inspectChallengePlan({\n browserSessionId: args.sessionId,\n targetId: args.targetId,\n runMode: args.challengeAutomationMode\n });\n const result = await buildCorrelatedAuditBundle({\n handle: inspector,\n browserSessionId: args.sessionId,\n targetId: args.targetId,\n observation: review.observation,\n review: review.verification,\n challengePlan,\n includeUrls: args.includeUrls,\n sinceConsoleSeq: args.sinceConsoleSeq,\n sinceNetworkSeq: args.sinceNetworkSeq,\n sinceExceptionSeq: args.sinceExceptionSeq,\n max: args.max,\n requestId: args.requestId,\n relayStatus: deps.relay?.status?.() ?? null\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"session_inspector_audit_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createTargetsListTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"List targets (tabs) in the current session.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n includeUrls: z.boolean().optional().describe(\"Include target URLs\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.listTargets(args.sessionId, Boolean(args.includeUrls));\n return ok({\n activeTargetId: result.activeTargetId,\n targets: result.targets\n });\n } catch (error) {\n return failure(serializeError(error).message, \"targets_list_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createTargetUseTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Set the active target (tab).\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().describe(\"Target id\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.useTarget(args.sessionId, args.targetId);\n return ok({\n activeTargetId: result.activeTargetId,\n url: result.url,\n title: result.title\n });\n } catch (error) {\n return failure(serializeError(error).message, \"target_use_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createTargetNewTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Open a new target (tab).\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n url: z.string().optional().describe(\"Optional URL to open\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.newTarget(args.sessionId, args.url);\n return ok({ targetId: result.targetId });\n } catch (error) {\n return failure(serializeError(error).message, \"target_new_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createTargetCloseTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Close a target (tab).\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().describe(\"Target id\")\n },\n async execute(args) {\n try {\n await deps.manager.closeTarget(args.sessionId, args.targetId);\n return ok({});\n } catch (error) {\n return failure(serializeError(error).message, \"target_close_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPageTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Open or focus a named page, optionally navigating to a URL.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n name: z.string().describe(\"Stable page name\"),\n url: z.string().optional().describe(\"Optional URL to open\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.page(args.sessionId, args.name, args.url);\n return ok({\n targetId: result.targetId,\n created: result.created,\n url: result.url,\n title: result.title\n });\n } catch (error) {\n return failure(serializeError(error).message, \"page_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createListTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"List named pages in the current session.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.listPages(args.sessionId);\n return ok({ pages: result.pages });\n } catch (error) {\n return failure(serializeError(error).message, \"list_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createCloseTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Close a named page within the current session.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n name: z.string().describe(\"Named page to close\")\n },\n async execute(args) {\n try {\n await deps.manager.closePage(args.sessionId, args.name);\n return ok({});\n } catch (error) {\n return failure(serializeError(error).message, \"close_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nconst waitUntilSchema = z.enum([\"domcontentloaded\", \"load\", \"networkidle\"]);\n\nexport function createGotoTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Navigate the active target to a URL.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n url: z.string().describe(\"URL to navigate to\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n waitUntil: waitUntilSchema.optional().describe(\"Load state to wait for\"),\n timeoutMs: z.number().int().optional().describe(\"Timeout in milliseconds\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.goto(\n args.sessionId,\n args.url,\n args.waitUntil ?? \"load\",\n args.timeoutMs ?? 30000,\n undefined,\n args.targetId\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"goto_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nconst waitUntilSchema = z.enum([\"domcontentloaded\", \"load\", \"networkidle\"]);\nconst waitStateSchema = z.enum([\"attached\", \"visible\", \"hidden\"]);\n\nexport function createWaitTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Wait for a load state or a ref state.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n until: waitUntilSchema.optional().describe(\"Load state to wait for\"),\n ref: z.string().optional().describe(\"Ref to wait for\"),\n state: waitStateSchema.optional().describe(\"Ref state to wait for\"),\n timeoutMs: z.number().int().optional().describe(\"Timeout in milliseconds\")\n },\n async execute(args) {\n try {\n if (args.ref) {\n const result = await deps.manager.waitForRef(\n args.sessionId,\n args.ref,\n args.state ?? \"attached\",\n args.timeoutMs ?? 30000,\n args.targetId\n );\n return ok(result);\n }\n\n if (!args.until) {\n return failure(\"Provide either ref or until\", \"wait_invalid\");\n }\n\n const result = await deps.manager.waitForLoad(\n args.sessionId,\n args.until,\n args.timeoutMs ?? 30000,\n args.targetId\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"wait_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nconst formatSchema = z.enum([\"outline\", \"actionables\"]);\n\nexport function createSnapshotTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture a snapshot of the current page and return refs.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n format: formatSchema.optional().describe(\"Snapshot format\"),\n maxChars: z.number().int().optional().describe(\"Max characters for snapshot output\"),\n cursor: z.string().optional().describe(\"Cursor for paging\")\n },\n async execute(args) {\n try {\n const config = deps.config.get();\n const result = await deps.manager.snapshot(\n args.sessionId,\n args.format ?? \"outline\",\n args.maxChars ?? config.snapshot.maxChars,\n args.cursor,\n args.targetId\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"snapshot_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { buildBrowserReviewResult } from \"../browser/review-surface\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createReviewTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture a first-class review payload with status and actionables.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n maxChars: z.number().int().optional().describe(\"Max characters for review output\"),\n cursor: z.string().optional().describe(\"Cursor for paging\")\n },\n async execute(args) {\n try {\n const config = deps.config.get();\n const result = await buildBrowserReviewResult({\n manager: deps.manager,\n sessionId: args.sessionId,\n targetId: args.targetId,\n maxChars: args.maxChars ?? config.snapshot.maxChars,\n cursor: args.cursor\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"review_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { requireAutomationCoordinator } from \"./automation-shared\";\n\nconst z = tool.schema;\n\nexport function createReviewDesktopTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture desktop-assisted browser review with read-only desktop evidence and browser-owned verification.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n reason: z.string().optional().describe(\"Optional audit reason\"),\n maxChars: z.number().int().optional().describe(\"Max characters for review output\"),\n cursor: z.string().optional().describe(\"Cursor for paging\")\n },\n async execute(args) {\n try {\n const coordinator = requireAutomationCoordinator(deps);\n if (typeof coordinator === \"string\") {\n return coordinator;\n }\n const result = await coordinator.reviewDesktop({\n browserSessionId: args.sessionId,\n targetId: args.targetId,\n reason: args.reason,\n maxChars: args.maxChars,\n cursor: args.cursor\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"review_desktop_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createClickTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Click a referenced element.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.click(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"click_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createHoverTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Hover over an element by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.hover(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"hover_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPressTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Press a keyboard key, optionally focusing a ref first.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n key: z.string().describe(\"Keyboard key to press, e.g. Enter or ArrowDown\"),\n ref: z.string().optional().describe(\"Optional element ref to focus first\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.press(args.sessionId, args.key, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"press_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createCheckTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Check a checkbox or toggle by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.check(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"check_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createUncheckTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Uncheck a checkbox or toggle by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.uncheck(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"uncheck_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createTypeTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Type text into a referenced input.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref\"),\n text: z.string().describe(\"Text to type\"),\n clear: z.boolean().optional().describe(\"Clear before typing\"),\n submit: z.boolean().optional().describe(\"Press Enter after typing\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.type(\n args.sessionId,\n args.ref,\n args.text,\n Boolean(args.clear),\n Boolean(args.submit),\n args.targetId\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"type_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createSelectTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Select options in a referenced select element.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref\"),\n values: z.array(z.string()).describe(\"Values to select\")\n },\n async execute(args) {\n try {\n await deps.manager.select(args.sessionId, args.ref, args.values, args.targetId);\n return ok({});\n } catch (error) {\n return failure(serializeError(error).message, \"select_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createScrollTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Scroll the page or a referenced element.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n dy: z.number().describe(\"Scroll delta in pixels\"),\n ref: z.string().optional().describe(\"Optional element ref to scroll\")\n },\n async execute(args) {\n try {\n await deps.manager.scroll(args.sessionId, args.dy, args.ref, args.targetId);\n return ok({});\n } catch (error) {\n return failure(serializeError(error).message, \"scroll_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createScrollIntoViewTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Scroll an element into view by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.scrollIntoView(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"scroll_into_view_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createUploadTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Upload files to an input or chooser by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref\"),\n files: z.array(z.string()).min(1).describe(\"Local host file paths\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.upload(args.sessionId, {\n targetId: args.targetId,\n ref: args.ref,\n files: args.files\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"upload_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPointerMoveTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Move the pointer to viewport coordinates.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n x: z.number().describe(\"Viewport x coordinate\"),\n y: z.number().describe(\"Viewport y coordinate\"),\n steps: z.number().int().positive().optional().describe(\"Optional move interpolation step count\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.pointerMove(args.sessionId, args.x, args.y, args.targetId, args.steps);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"pointer_move_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPointerDownTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Move to viewport coordinates and press a mouse button.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n x: z.number().describe(\"Viewport x coordinate\"),\n y: z.number().describe(\"Viewport y coordinate\"),\n button: z.enum([\"left\", \"middle\", \"right\"]).optional().describe(\"Mouse button to press\"),\n clickCount: z.number().int().positive().optional().describe(\"Associated click count\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.pointerDown(\n args.sessionId,\n args.x,\n args.y,\n args.targetId,\n args.button,\n args.clickCount\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"pointer_down_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPointerUpTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Move to viewport coordinates and release a mouse button.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n x: z.number().describe(\"Viewport x coordinate\"),\n y: z.number().describe(\"Viewport y coordinate\"),\n button: z.enum([\"left\", \"middle\", \"right\"]).optional().describe(\"Mouse button to release\"),\n clickCount: z.number().int().positive().optional().describe(\"Associated click count\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.pointerUp(\n args.sessionId,\n args.x,\n args.y,\n args.targetId,\n args.button,\n args.clickCount\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"pointer_up_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPointerDragTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Drag the pointer between two viewport coordinates.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n fromX: z.number().describe(\"Start x coordinate\"),\n fromY: z.number().describe(\"Start y coordinate\"),\n toX: z.number().describe(\"End x coordinate\"),\n toY: z.number().describe(\"End y coordinate\"),\n steps: z.number().int().positive().optional().describe(\"Optional drag interpolation step count\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.drag(\n args.sessionId,\n { x: args.fromX, y: args.fromY },\n { x: args.toX, y: args.toY },\n args.targetId,\n args.steps\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"pointer_drag_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createDomGetHtmlTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Get outerHTML for a referenced element.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref\"),\n maxChars: z.number().int().optional().describe(\"Max characters\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.domGetHtml(\n args.sessionId,\n args.ref,\n args.maxChars ?? 8000,\n args.targetId\n );\n return ok({\n ref: args.ref,\n outerHTML: result.outerHTML,\n truncated: result.truncated\n });\n } catch (error) {\n return failure(serializeError(error).message, \"dom_get_html_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createDomGetTextTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Get inner text for a referenced element.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref\"),\n maxChars: z.number().int().optional().describe(\"Max characters\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.domGetText(\n args.sessionId,\n args.ref,\n args.maxChars ?? 8000,\n args.targetId\n );\n return ok({\n ref: args.ref,\n text: result.text,\n truncated: result.truncated\n });\n } catch (error) {\n return failure(serializeError(error).message, \"dom_get_text_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createGetAttrTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Get a DOM attribute value by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\"),\n name: z.string().describe(\"Attribute name, e.g. href or aria-label\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.domGetAttr(args.sessionId, args.ref, args.name, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"get_attr_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createGetValueTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Get the input value for an element by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.domGetValue(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"get_value_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createIsVisibleTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Check if an element is visible by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.domIsVisible(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"is_visible_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createIsEnabledTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Check if an element is enabled by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.domIsEnabled(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"is_enabled_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createIsCheckedTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Check if an element is checked by ref.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.domIsChecked(args.sessionId, args.ref, args.targetId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"is_checked_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nconst stepSchema = z.object({\n action: z.string().describe(\"Action name\"),\n args: z.record(z.string(), z.unknown()).optional().describe(\"Action arguments\")\n});\n\nexport function createRunTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Run multiple actions in a single tool call.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n steps: z.array(stepSchema).describe(\"Steps to execute\"),\n stopOnError: z.boolean().optional().describe(\"Stop when a step fails\"),\n maxSnapshotChars: z.number().int().optional().describe(\"Default maxChars for snapshot steps\")\n },\n async execute(args) {\n try {\n const steps = normalizeSteps(args.steps, args.maxSnapshotChars);\n const result = await deps.runner.run(\n args.sessionId,\n steps,\n args.stopOnError ?? true\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"run_failed\");\n }\n }\n });\n}\n\nfunction normalizeSteps(\n steps: Array<{ action: string; args?: Record<string, unknown> }>,\n maxSnapshotChars?: number\n): Array<{ action: string; args?: Record<string, unknown> }> {\n if (!maxSnapshotChars) return steps;\n\n return steps.map((step) => {\n if (step.action !== \"snapshot\") return step;\n if (step.args && typeof step.args.maxChars === \"number\") return step;\n return {\n ...step,\n args: {\n ...step.args,\n maxChars: maxSnapshotChars\n }\n };\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport onboardingMetadata from \"../cli/onboarding-metadata.json\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPromptingGuideTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: `Start here for first-contact OpenDevBrowser guidance, including ${onboardingMetadata.skillName} ${onboardingMetadata.skillTopic}.`,\n args: {\n topic: z.string().optional().describe(\"Optional topic for guidance\")\n },\n async execute(args) {\n try {\n const guide = await deps.skills.loadBestPractices(args.topic);\n return ok({ guide });\n } catch (error) {\n return failure(serializeError(error).message, \"prompting_guide_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createConsolePollTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Poll console events for the active target.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n sinceSeq: z.number().int().optional().describe(\"Sequence to resume from\"),\n max: z.number().int().optional().describe(\"Max events to return\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.consolePoll(\n args.sessionId,\n args.sinceSeq,\n args.max ?? 50\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"console_poll_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createNetworkPollTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Poll network events for the active target.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n sinceSeq: z.number().int().optional().describe(\"Sequence to resume from\"),\n max: z.number().int().optional().describe(\"Max events to return\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.networkPoll(\n args.sessionId,\n args.sinceSeq,\n args.max ?? 50\n );\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"network_poll_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { createRequestId } from \"../core/logging\";\nimport { buildBlockerArtifacts, classifyBlockerSignal } from \"../providers/blocker\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\ntype DebugTraceSnapshotOptions = {\n sinceConsoleSeq?: number;\n sinceNetworkSeq?: number;\n sinceExceptionSeq?: number;\n max?: number;\n requestId?: string;\n};\n\ntype DebugTraceSnapshotCapableManager = {\n debugTraceSnapshot?: (\n sessionId: string,\n options?: DebugTraceSnapshotOptions\n ) => Promise<unknown>;\n exceptionPoll?: (\n sessionId: string,\n sinceSeq?: number,\n max?: number\n ) => Promise<{ events: unknown[]; nextSeq: number; truncated?: boolean }>;\n};\n\nexport function createDebugTraceSnapshotTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture a combined debug trace snapshot (page + console + network + exceptions).\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n sinceConsoleSeq: z.number().int().optional().describe(\"Resume cursor for console events\"),\n sinceNetworkSeq: z.number().int().optional().describe(\"Resume cursor for network events\"),\n sinceExceptionSeq: z.number().int().optional().describe(\"Resume cursor for exception events\"),\n max: z.number().int().optional().describe(\"Max events per channel\"),\n requestId: z.string().optional().describe(\"Optional trace request id\")\n },\n async execute(args) {\n try {\n const manager = deps.manager as ToolDeps[\"manager\"] & DebugTraceSnapshotCapableManager;\n const options: DebugTraceSnapshotOptions = {\n sinceConsoleSeq: args.sinceConsoleSeq,\n sinceNetworkSeq: args.sinceNetworkSeq,\n sinceExceptionSeq: args.sinceExceptionSeq,\n max: args.max,\n requestId: args.requestId\n };\n\n if (typeof manager.debugTraceSnapshot === \"function\") {\n const result = await manager.debugTraceSnapshot(args.sessionId, options);\n return ok(result as Record<string, unknown>);\n }\n\n const max = args.max ?? 500;\n const requestId = args.requestId ?? createRequestId();\n const [page, consoleChannel, networkChannel] = await Promise.all([\n deps.manager.status(args.sessionId),\n deps.manager.consolePoll(args.sessionId, args.sinceConsoleSeq, max),\n deps.manager.networkPoll(args.sessionId, args.sinceNetworkSeq, max)\n ]);\n\n const exceptionChannel = typeof manager.exceptionPoll === \"function\"\n ? await manager.exceptionPoll(args.sessionId, args.sinceExceptionSeq, max)\n : {\n events: [],\n nextSeq: args.sinceExceptionSeq ?? 0,\n truncated: false\n };\n\n const annotateTraceContext = <T extends Record<string, unknown>>(events: T[]) => (\n events.map((event) => ({\n ...event,\n requestId,\n sessionId: args.sessionId\n }))\n );\n\n const blocker = classifyBlockerSignal({\n source: \"network\",\n url: typeof page.url === \"string\" ? page.url : undefined,\n finalUrl: typeof page.url === \"string\" ? page.url : undefined,\n title: typeof page.title === \"string\" ? page.title : undefined,\n status: findLatestStatus(networkChannel.events as Array<{ status?: number }>),\n traceRequestId: requestId,\n networkHosts: extractHosts(networkChannel.events as Array<{ url?: string }>),\n threshold: deps.config.get().blockerDetectionThreshold,\n promptGuardEnabled: deps.config.get().security.promptInjectionGuard?.enabled ?? true\n });\n const blockerArtifacts = blocker\n ? buildBlockerArtifacts({\n networkEvents: networkChannel.events as unknown[],\n consoleEvents: consoleChannel.events as unknown[],\n exceptionEvents: exceptionChannel.events as unknown[],\n promptGuardEnabled: deps.config.get().security.promptInjectionGuard?.enabled ?? true,\n caps: deps.config.get().blockerArtifactCaps\n })\n : undefined;\n\n return ok({\n requestId,\n generatedAt: new Date().toISOString(),\n page,\n channels: {\n console: {\n nextSeq: consoleChannel.nextSeq,\n truncated: consoleChannel.truncated,\n events: annotateTraceContext(consoleChannel.events as Array<Record<string, unknown>>)\n },\n network: {\n nextSeq: networkChannel.nextSeq,\n truncated: networkChannel.truncated,\n events: annotateTraceContext(networkChannel.events as Array<Record<string, unknown>>)\n },\n exception: {\n nextSeq: exceptionChannel.nextSeq,\n truncated: exceptionChannel.truncated,\n events: annotateTraceContext(exceptionChannel.events as Array<Record<string, unknown>>)\n }\n },\n meta: {\n blockerState: blocker ? \"active\" : \"clear\",\n ...(blocker ? { blocker } : {}),\n ...(blockerArtifacts ? { blockerArtifacts } : {})\n }\n });\n } catch (error) {\n return failure(serializeError(error).message, \"debug_trace_snapshot_failed\");\n }\n }\n });\n}\n\nfunction findLatestStatus(events: Array<{ status?: number }>): number | undefined {\n for (let index = events.length - 1; index >= 0; index -= 1) {\n const status = events[index]?.status;\n if (typeof status === \"number\") {\n return status;\n }\n }\n return undefined;\n}\n\nfunction extractHosts(events: Array<{ url?: string }>): string[] {\n const hosts: string[] = [];\n const seen = new Set<string>();\n for (const event of events) {\n if (typeof event.url !== \"string\") continue;\n try {\n const host = new URL(event.url).hostname.toLowerCase();\n if (!host || seen.has(host)) continue;\n seen.add(host);\n hosts.push(host);\n } catch {\n // ignore invalid url values\n }\n }\n return hosts;\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { createRequestId } from \"../core/logging\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\ntype CookieRecord = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n expires?: number;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n};\n\ntype CookieImportCapableManager = {\n cookieImport?: (\n sessionId: string,\n cookies: CookieRecord[],\n strict?: boolean,\n requestId?: string\n ) => Promise<{ requestId: string; imported: number; rejected: Array<{ index: number; reason: string }> }>;\n};\n\ntype CookieValidationResult = {\n valid: boolean;\n reason: string;\n cookie: CookieRecord;\n};\n\nfunction validateCookieRecord(cookie: CookieRecord): CookieValidationResult {\n const name = cookie.name?.trim();\n if (!name) {\n return { valid: false, reason: \"Cookie name is required.\", cookie };\n }\n if (!/^[^\\s;=]+$/.test(name)) {\n return { valid: false, reason: `Invalid cookie name: ${cookie.name}.`, cookie };\n }\n\n if (typeof cookie.value !== \"string\") {\n return { valid: false, reason: `Invalid cookie value for ${name}.`, cookie };\n }\n\n const value = cookie.value;\n if (/\\r|\\n|;/.test(value)) {\n return { valid: false, reason: `Invalid cookie value for ${name}.`, cookie };\n }\n\n const hasUrl = typeof cookie.url === \"string\" && cookie.url.trim().length > 0;\n const hasDomain = typeof cookie.domain === \"string\" && cookie.domain.trim().length > 0;\n if (!hasUrl && !hasDomain) {\n return { valid: false, reason: `Cookie ${name} requires url or domain.`, cookie };\n }\n\n let normalizedUrl: string | undefined;\n if (hasUrl) {\n try {\n const parsedUrl = new URL(cookie.url as string);\n if (parsedUrl.protocol !== \"http:\" && parsedUrl.protocol !== \"https:\") {\n return { valid: false, reason: `Cookie ${name} url must be http(s).`, cookie };\n }\n normalizedUrl = parsedUrl.toString();\n } catch {\n return { valid: false, reason: `Cookie ${name} has invalid url.`, cookie };\n }\n }\n\n let normalizedDomain: string | undefined;\n if (hasDomain) {\n normalizedDomain = String(cookie.domain).trim().toLowerCase();\n if (!/^\\.?[a-z0-9.-]+$/.test(normalizedDomain)) {\n return { valid: false, reason: `Cookie ${name} has invalid domain.`, cookie };\n }\n if (normalizedDomain.includes(\"..\")) {\n return { valid: false, reason: `Cookie ${name} has invalid domain.`, cookie };\n }\n }\n\n const normalizedPath = typeof cookie.path === \"string\" ? cookie.path.trim() : undefined;\n if (typeof normalizedPath === \"string\" && !normalizedPath.startsWith(\"/\")) {\n return { valid: false, reason: `Cookie ${name} path must start with '/'.`, cookie };\n }\n\n if (typeof cookie.expires !== \"undefined\") {\n if (!Number.isFinite(cookie.expires)) {\n return { valid: false, reason: `Cookie ${name} has invalid expires.`, cookie };\n }\n if ((cookie.expires as number) < -1) {\n return { valid: false, reason: `Cookie ${name} has invalid expires.`, cookie };\n }\n }\n\n if (cookie.sameSite === \"None\" && cookie.secure !== true) {\n return { valid: false, reason: `Cookie ${name} with SameSite=None must set secure=true.`, cookie };\n }\n\n const normalizedCookie: CookieRecord = {\n name,\n value,\n ...(typeof cookie.expires === \"number\" ? { expires: cookie.expires } : {}),\n ...(typeof cookie.httpOnly === \"boolean\" ? { httpOnly: cookie.httpOnly } : {}),\n ...(typeof cookie.secure === \"boolean\" ? { secure: cookie.secure } : {}),\n ...(cookie.sameSite ? { sameSite: cookie.sameSite } : {})\n };\n\n if (normalizedDomain) {\n normalizedCookie.domain = normalizedDomain;\n normalizedCookie.path = normalizedPath ?? \"/\";\n } else if (normalizedUrl) {\n normalizedCookie.url = normalizedUrl;\n }\n\n return {\n valid: true,\n reason: \"\",\n cookie: normalizedCookie\n };\n}\n\nexport function createCookieImportTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Import validated cookies into the current session context.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n cookies: z.array(z.object({\n name: z.string().min(1),\n value: z.string(),\n url: z.string().optional(),\n domain: z.string().optional(),\n path: z.string().optional(),\n expires: z.number().optional(),\n httpOnly: z.boolean().optional(),\n secure: z.boolean().optional(),\n sameSite: z.enum([\"Strict\", \"Lax\", \"None\"]).optional()\n })).min(1).describe(\"Cookies to import\"),\n strict: z.boolean().optional().describe(\"Reject on first invalid cookie (default true)\"),\n requestId: z.string().optional().describe(\"Optional trace request id\")\n },\n async execute(args) {\n try {\n const strict = args.strict ?? true;\n const requestId = args.requestId ?? createRequestId();\n const manager = deps.manager as ToolDeps[\"manager\"] & CookieImportCapableManager;\n\n const normalized: CookieRecord[] = [];\n const rejected: Array<{ index: number; reason: string }> = [];\n\n args.cookies.forEach((cookie, index) => {\n const validation = validateCookieRecord(cookie as CookieRecord);\n if (!validation.valid) {\n rejected.push({ index, reason: validation.reason });\n return;\n }\n normalized.push(validation.cookie);\n });\n\n if (typeof manager.cookieImport === \"function\") {\n return ok(await manager.cookieImport(args.sessionId, normalized, strict, requestId));\n }\n\n if (strict && rejected.length > 0) {\n return failure(`Cookie import rejected ${rejected.length} entries.`, \"cookie_import_failed\");\n }\n\n if (normalized.length > 0) {\n await deps.manager.withPage(args.sessionId, null, async (page) => {\n await page.context().addCookies(normalized);\n return undefined;\n });\n }\n\n return ok({\n requestId,\n imported: normalized.length,\n rejected\n });\n } catch (error) {\n return failure(serializeError(error).message, \"cookie_import_failed\");\n }\n }\n });\n}\n\nexport const __test__ = {\n validateCookieRecord\n};\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport { createRequestId } from \"../core/logging\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\ntype CookieListRecord = {\n name: string;\n value: string;\n domain: string;\n path: string;\n expires: number;\n httpOnly: boolean;\n secure: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n};\n\ntype CookieListCapableManager = {\n cookieList?: (\n sessionId: string,\n urls?: string[],\n requestId?: string\n ) => Promise<{ requestId: string; cookies: CookieListRecord[]; count: number }>;\n};\n\nfunction normalizeCookieUrls(urls?: string[]): string[] | undefined {\n if (!urls || urls.length === 0) {\n return undefined;\n }\n\n const normalized: string[] = [];\n const seen = new Set<string>();\n for (const value of urls) {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(\"Cookie list urls must be non-empty strings.\");\n }\n\n let parsedUrl: URL;\n try {\n parsedUrl = new URL(trimmed);\n } catch {\n throw new Error(`Cookie list url is invalid: ${trimmed}`);\n }\n if (parsedUrl.protocol !== \"http:\" && parsedUrl.protocol !== \"https:\") {\n throw new Error(`Cookie list url must be http(s): ${trimmed}`);\n }\n\n const normalizedUrl = parsedUrl.toString();\n if (seen.has(normalizedUrl)) {\n continue;\n }\n seen.add(normalizedUrl);\n normalized.push(normalizedUrl);\n }\n\n return normalized;\n}\n\nexport function createCookieListTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"List cookies in the current session context with optional URL filtering.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n urls: z.array(z.string().min(1)).optional().describe(\"Optional URL filters for cookie scoping\"),\n requestId: z.string().optional().describe(\"Optional trace request id\")\n },\n async execute(args) {\n try {\n const manager = deps.manager as ToolDeps[\"manager\"] & CookieListCapableManager;\n const normalizedUrls = normalizeCookieUrls(args.urls);\n const requestId = args.requestId ?? createRequestId();\n\n if (typeof manager.cookieList === \"function\") {\n return ok(await manager.cookieList(args.sessionId, normalizedUrls, requestId));\n }\n\n const cookies = await deps.manager.withPage(\n args.sessionId,\n null,\n async (page) => {\n const listed = normalizedUrls\n ? await page.context().cookies(normalizedUrls)\n : await page.context().cookies();\n return listed.map((cookie) => ({\n name: cookie.name,\n value: cookie.value,\n domain: cookie.domain,\n path: cookie.path,\n expires: cookie.expires,\n httpOnly: cookie.httpOnly,\n secure: cookie.secure,\n ...(cookie.sameSite ? { sameSite: cookie.sameSite as \"Strict\" | \"Lax\" | \"None\" } : {})\n }));\n }\n );\n\n return ok({\n requestId,\n cookies,\n count: cookies.length\n });\n } catch (error) {\n return failure(serializeError(error).message, \"cookie_list_failed\");\n }\n }\n });\n}\n\nexport const __test__ = {\n normalizeCookieUrls\n};\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport {\n type MacroResolution\n} from \"../macros/execute\";\nimport { executeMacroWithRuntime } from \"../macros/execute-runtime\";\nimport { buildMacroResolveSuccessHandoff } from \"../providers/workflow-handoff\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { resolveProviderRuntime } from \"./workflow-runtime\";\n\nconst z = tool.schema;\n\ntype MacroRuntimeModule = {\n createDefaultMacroRegistry?: () => {\n resolve: (expression: string, context?: { defaultProvider?: string }) => Promise<MacroResolution>;\n list: () => Array<{ name: string; pack?: string; description?: string }>;\n };\n};\n\ntype FallbackMacroResolution = MacroResolution;\n\nasync function loadMacroRuntime(): Promise<MacroRuntimeModule | null> {\n try {\n const module = await import(\"../macros\");\n return module as MacroRuntimeModule;\n } catch {\n return null;\n }\n}\n\nfunction parseFallbackMacro(expression: string, defaultProvider?: string): FallbackMacroResolution {\n const raw = expression.trim();\n if (!raw.startsWith(\"@\")) {\n throw new Error(\"Macro expressions must start with '@'\");\n }\n\n const body = raw.slice(1).trim();\n if (!body) {\n throw new Error(\"Macro name is required\");\n }\n\n const openParen = body.indexOf(\"(\");\n const closeParen = body.endsWith(\")\") ? body.length - 1 : -1;\n const macroName = openParen >= 0 ? body.slice(0, openParen).trim() : body;\n const argsBody = openParen >= 0 && closeParen > openParen\n ? body.slice(openParen + 1, closeParen).trim()\n : \"\";\n const positional = argsBody\n ? argsBody.split(\",\").map((part) => part.trim().replace(/^['\\\"]|['\\\"]$/g, \"\")).filter(Boolean)\n : [];\n const query = positional[0] ?? macroName;\n const provider = defaultProvider ?? \"web/default\";\n\n return {\n action: {\n source: \"web\",\n operation: \"search\",\n input: {\n query,\n limit: 10,\n providerId: provider\n }\n },\n provenance: {\n macro: macroName,\n provider,\n resolvedQuery: query,\n pack: \"fallback\",\n args: {\n positional,\n named: {}\n }\n }\n };\n}\n\n\nexport function createMacroResolveTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Resolve a macro expression to a provider action with provenance metadata.\",\n args: {\n expression: z.string().min(2).describe(\"Macro expression, e.g. @web.search(\\\"query\\\")\"),\n defaultProvider: z.string().optional().describe(\"Default provider fallback\"),\n includeCatalog: z.boolean().optional().describe(\"Include available runtime macro names\"),\n execute: z.boolean().optional().describe(\"Execute the resolved provider action and include execution payload\")\n },\n async execute(args) {\n try {\n const runtime = await loadMacroRuntime();\n const registry = runtime?.createDefaultMacroRegistry?.();\n\n let resolvedRuntime: \"macros\" | \"fallback\" = \"fallback\";\n let resolution: MacroResolution;\n let catalog: Array<{ name: string; pack?: string; description?: string }> | undefined;\n\n if (registry) {\n resolvedRuntime = \"macros\";\n resolution = await registry.resolve(args.expression, {\n defaultProvider: args.defaultProvider\n });\n catalog = args.includeCatalog\n ? registry.list().map((entry) => ({\n name: entry.name,\n pack: entry.pack,\n description: entry.description\n }))\n : undefined;\n } else {\n resolution = parseFallbackMacro(args.expression, args.defaultProvider);\n }\n\n if (!args.execute) {\n const handoff = buildMacroResolveSuccessHandoff({\n expression: args.expression,\n defaultProvider: args.defaultProvider,\n execute: false,\n blocked: false\n });\n return ok({\n runtime: resolvedRuntime,\n resolution,\n ...(catalog ? { catalog } : {}),\n ...handoff\n });\n }\n\n const providerRuntime = await resolveProviderRuntime(deps);\n const execution = await executeMacroWithRuntime({\n resolution,\n runtime: providerRuntime\n });\n const handoff = buildMacroResolveSuccessHandoff({\n expression: args.expression,\n defaultProvider: args.defaultProvider,\n execute: true,\n blocked: Boolean(execution.meta.blocker)\n });\n\n return ok({\n runtime: resolvedRuntime,\n resolution,\n ...(catalog ? { catalog } : {}),\n execution,\n ...handoff\n });\n } catch (error) {\n return failure(serializeError(error).message, \"macro_resolve_failed\");\n }\n }\n });\n}\n\nexport const __test__ = {\n parseFallbackMacro,\n loadMacroRuntime\n};\n","import type { ToolDeps } from \"./deps\";\nimport type { RuntimeInit } from \"../providers\";\nimport { resolveBundledProviderRuntime } from \"../providers/runtime-bundle\";\n\nexport const resolveProviderRuntime = async (\n deps: ToolDeps,\n options?: { init?: Omit<RuntimeInit, \"providers\"> }\n): Promise<NonNullable<ToolDeps[\"providerRuntime\"]>> => {\n return resolveBundledProviderRuntime({\n existingRuntime: deps.providerRuntime,\n config: deps.config?.get?.(),\n manager: deps.manager,\n browserFallbackPort: deps.browserFallbackPort,\n init: options?.init\n });\n};\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createClonePageTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Export the active page as a React component and CSS bundle.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.clonePage(args.sessionId, args.targetId);\n return ok({ component: result.component, css: result.css, warnings: result.warnings });\n } catch (error) {\n return failure(serializeError(error).message, \"clone_page_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createCloneComponentTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Export a selected element subtree as a React component and CSS bundle.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n ref: z.string().describe(\"Element ref from snapshot\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.cloneComponent(args.sessionId, args.ref, args.targetId);\n return ok({ component: result.component, css: result.css, warnings: result.warnings });\n } catch (error) {\n return failure(serializeError(error).message, \"clone_component_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createPerfTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Fetch lightweight performance metrics from the active page.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.perfMetrics(args.sessionId, args.targetId);\n return ok({ metrics: result.metrics });\n } catch (error) {\n return failure(serializeError(error).message, \"perf_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createScreenshotTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture a screenshot of the active page.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n path: z.string().optional().describe(\"Optional output file path\"),\n ref: z.string().optional().describe(\"Optional snapshot ref for an element capture\"),\n fullPage: z.boolean().optional().describe(\"Capture the full scrollable page\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.screenshot(args.sessionId, {\n targetId: args.targetId,\n path: args.path,\n ref: args.ref,\n fullPage: args.fullPage\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"screenshot_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createScreencastStartTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Start a browser screencast replay capture.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n outputDir: z.string().optional().describe(\"Optional screencast output directory\"),\n intervalMs: z.number().int().min(250).optional().describe(\"Frame capture interval in milliseconds\"),\n maxFrames: z.number().int().min(1).optional().describe(\"Maximum frame count before auto-stop\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.startScreencast(args.sessionId, {\n targetId: args.targetId,\n outputDir: args.outputDir,\n intervalMs: args.intervalMs,\n maxFrames: args.maxFrames\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"screencast_start_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createScreencastStopTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Stop a browser screencast replay capture.\",\n args: {\n sessionId: z.string().describe(\"Browser session id that owns the screencast\"),\n screencastId: z.string().describe(\"Active screencast id\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.stopScreencast(args.sessionId, args.screencastId);\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"screencast_stop_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createDialogTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Inspect or handle a JavaScript dialog.\",\n args: {\n sessionId: z.string().describe(\"Active browser session id\"),\n targetId: z.string().optional().describe(\"Optional target id\"),\n action: z.enum([\"status\", \"accept\", \"dismiss\"]).optional().describe(\"Dialog action\"),\n promptText: z.string().optional().describe(\"Prompt text to submit when accepting a prompt dialog\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.dialog(args.sessionId, {\n targetId: args.targetId,\n action: args.action,\n promptText: args.promptText\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"dialog_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { desktopToolFailure, requireDesktopRuntime } from \"./desktop-shared\";\nimport { ok } from \"./response\";\n\nexport function createDesktopStatusTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Inspect sibling desktop observation availability.\",\n args: {},\n async execute() {\n const runtime = requireDesktopRuntime(deps);\n if (typeof runtime === \"string\") {\n return runtime;\n }\n try {\n return ok(await runtime.status());\n } catch (error) {\n return desktopToolFailure(error, \"desktop_status_failed\");\n }\n }\n });\n}\n","import type { DesktopResult, DesktopRuntimeLike } from \"../desktop\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, serializeError } from \"./response\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function requireDesktopRuntime(deps: ToolDeps): DesktopRuntimeLike | string {\n if (deps.desktopRuntime) {\n return deps.desktopRuntime;\n }\n return failure(\"Desktop runtime unavailable.\", \"desktop_runtime_unavailable\");\n}\n\nexport function desktopResult<T>(result: DesktopResult<T>): string {\n if (result.ok) {\n const payload = isRecord(result.value)\n ? { ok: true, ...result.value, audit: result.audit }\n : { ok: true, value: result.value, audit: result.audit };\n return JSON.stringify(payload);\n }\n return JSON.stringify({\n ok: false,\n code: result.code,\n message: result.message,\n audit: result.audit\n });\n}\n\nexport function desktopToolFailure(error: unknown, code: string): string {\n return failure(serializeError(error).message, code);\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { desktopResult, desktopToolFailure, requireDesktopRuntime } from \"./desktop-shared\";\n\nconst z = tool.schema;\n\nexport function createDesktopWindowsTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"List observable desktop windows.\",\n args: {\n reason: z.string().optional().describe(\"Optional audit reason\")\n },\n async execute(args) {\n const runtime = requireDesktopRuntime(deps);\n if (typeof runtime === \"string\") {\n return runtime;\n }\n try {\n return desktopResult(await runtime.listWindows(args.reason));\n } catch (error) {\n return desktopToolFailure(error, \"desktop_windows_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { desktopResult, desktopToolFailure, requireDesktopRuntime } from \"./desktop-shared\";\n\nconst z = tool.schema;\n\nexport function createDesktopActiveWindowTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Inspect the active desktop window.\",\n args: {\n reason: z.string().optional().describe(\"Optional audit reason\")\n },\n async execute(args) {\n const runtime = requireDesktopRuntime(deps);\n if (typeof runtime === \"string\") {\n return runtime;\n }\n try {\n return desktopResult(await runtime.activeWindow(args.reason));\n } catch (error) {\n return desktopToolFailure(error, \"desktop_active_window_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { desktopResult, desktopToolFailure, requireDesktopRuntime } from \"./desktop-shared\";\n\nconst z = tool.schema;\n\nexport function createDesktopCaptureDesktopTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture the current desktop surface.\",\n args: {\n reason: z.string().describe(\"Audit reason for the capture\")\n },\n async execute(args) {\n const runtime = requireDesktopRuntime(deps);\n if (typeof runtime === \"string\") {\n return runtime;\n }\n try {\n return desktopResult(await runtime.captureDesktop({ reason: args.reason }));\n } catch (error) {\n return desktopToolFailure(error, \"desktop_capture_desktop_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { desktopResult, desktopToolFailure, requireDesktopRuntime } from \"./desktop-shared\";\n\nconst z = tool.schema;\n\nexport function createDesktopCaptureWindowTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture a specific desktop window.\",\n args: {\n windowId: z.string().describe(\"Desktop window id\"),\n reason: z.string().describe(\"Audit reason for the capture\")\n },\n async execute(args) {\n const runtime = requireDesktopRuntime(deps);\n if (typeof runtime === \"string\") {\n return runtime;\n }\n try {\n return desktopResult(await runtime.captureWindow(args.windowId, { reason: args.reason }));\n } catch (error) {\n return desktopToolFailure(error, \"desktop_capture_window_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { desktopResult, desktopToolFailure, requireDesktopRuntime } from \"./desktop-shared\";\n\nconst z = tool.schema;\n\nexport function createDesktopAccessibilitySnapshotTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Capture desktop accessibility state.\",\n args: {\n reason: z.string().describe(\"Audit reason for the accessibility snapshot\"),\n windowId: z.string().optional().describe(\"Optional desktop window id\")\n },\n async execute(args) {\n const runtime = requireDesktopRuntime(deps);\n if (typeof runtime === \"string\") {\n return runtime;\n }\n try {\n return desktopResult(await runtime.accessibilitySnapshot(args.reason, args.windowId));\n } catch (error) {\n return desktopToolFailure(error, \"desktop_accessibility_snapshot_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { buildAnnotateResult } from \"../annotate/output\";\n\nconst z = tool.schema;\nconst screenshotModeSchema = z.enum([\"visible\", \"full\", \"none\"]);\nconst transportSchema = z.enum([\"auto\", \"direct\", \"relay\"]);\n\nexport function createAnnotateTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Request interactive annotations via direct (CDP) or relay transport.\",\n args: {\n sessionId: z.string().describe(\"Session id\"),\n stored: z.boolean().optional().describe(\"Fetch the latest payload explicitly sent from popup/canvas surfaces\"),\n includeScreenshots: z.boolean().optional().describe(\"When fetching stored payloads, prefer screenshots if still available in memory\"),\n transport: transportSchema.optional().describe(\"auto | direct | relay (default: auto)\"),\n targetId: z.string().optional().describe(\"Optional target id for direct mode\"),\n tabId: z.number().int().optional().describe(\"Optional Chrome tab id for relay mode\"),\n url: z.string().optional().describe(\"Optional URL to open before annotating\"),\n screenshotMode: screenshotModeSchema.optional().describe(\"visible | full | none (default: visible)\"),\n debug: z.boolean().optional().describe(\"Include debug metadata\"),\n context: z.string().optional().describe(\"Optional context for the annotator\"),\n timeoutMs: z.number().int().optional().describe(\"Timeout in milliseconds\")\n },\n async execute(args) {\n try {\n const transport = args.stored ? \"relay\" : (args.transport ?? \"auto\");\n if (transport === \"relay\" && !args.stored) {\n const status = await deps.manager.status(args.sessionId);\n if (status.mode !== \"extension\") {\n return failure(\"Annotations require extension mode (relay).\", \"annotate_requires_extension\");\n }\n }\n\n const response = await deps.annotationManager.requestAnnotation({\n sessionId: args.sessionId,\n transport,\n stored: args.stored ?? false,\n includeScreenshots: args.includeScreenshots ?? true,\n targetId: args.targetId,\n tabId: args.tabId,\n url: args.url,\n screenshotMode: args.screenshotMode ?? \"visible\",\n debug: args.debug ?? false,\n context: args.context,\n timeoutMs: args.timeoutMs\n });\n\n if (response.status === \"cancelled\") {\n return ok({\n cancelled: true,\n message: response.error?.message ?? \"Annotation cancelled.\"\n });\n }\n\n if (response.status !== \"ok\" || !response.payload) {\n const message = response.error?.message ?? \"Annotation failed.\";\n const code = response.error?.code ?? \"annotate_failed\";\n return failure(message, code);\n }\n\n const { message, details, screenshots } = await buildAnnotateResult(response.payload);\n\n return ok({\n message,\n details,\n screenshots\n });\n } catch (error) {\n return failure(serializeError(error).message, \"annotate_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { resolveProviderRuntime } from \"./workflow-runtime\";\nimport { CHALLENGE_AUTOMATION_MODES } from \"../challenges/types\";\n\nconst z = tool.schema;\nconst sourceSelectionSchema = z.enum([\"auto\", \"web\", \"community\", \"social\", \"shopping\", \"all\"]);\nconst sourceSchema = z.enum([\"web\", \"community\", \"social\", \"shopping\"]);\nconst modeSchema = z.enum([\"compact\", \"json\", \"md\", \"context\", \"path\"]);\nconst cookiePolicySchema = z.enum([\"off\", \"auto\", \"required\"]);\nconst challengeAutomationModeSchema = z.enum(CHALLENGE_AUTOMATION_MODES);\n\nexport function createResearchRunTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Run cross-source research with strict timebox and artifact outputs.\",\n args: {\n topic: z.string().min(1).describe(\"Research topic\"),\n days: z.number().int().positive().optional().describe(\"Timebox in days\"),\n from: z.string().optional().describe(\"ISO start date\"),\n to: z.string().optional().describe(\"ISO end date\"),\n sourceSelection: sourceSelectionSchema.optional().describe(\"auto|web|community|social|shopping|all\"),\n sources: z.array(sourceSchema).optional().describe(\"Explicit source list\"),\n mode: modeSchema.optional().describe(\"compact|json|md|context|path\"),\n includeEngagement: z.boolean().optional().describe(\"Include engagement enrichment\"),\n limitPerSource: z.number().int().positive().optional().describe(\"Result limit per source\"),\n outputDir: z.string().optional().describe(\"Optional artifact output directory\"),\n ttlHours: z.number().int().positive().optional().describe(\"Artifact retention TTL in hours\"),\n useCookies: z.boolean().optional().describe(\"Enable/disable provider cookie injection for this run\"),\n challengeAutomationMode: challengeAutomationModeSchema.optional().describe(\"Challenge automation mode: off|browser|browser_with_helper\"),\n cookiePolicyOverride: cookiePolicySchema.optional().describe(\"Override cookie policy: off|auto|required\")\n },\n async execute(args) {\n try {\n const runtime = await resolveProviderRuntime(deps);\n const { runResearchWorkflow } = await import(\"../providers\");\n const result = await runResearchWorkflow(runtime, {\n topic: args.topic,\n days: args.days,\n from: args.from,\n to: args.to,\n sourceSelection: args.sourceSelection,\n sources: args.sources,\n mode: args.mode ?? \"compact\",\n includeEngagement: args.includeEngagement,\n limitPerSource: args.limitPerSource,\n outputDir: args.outputDir,\n ttlHours: args.ttlHours,\n useCookies: args.useCookies,\n challengeAutomationMode: args.challengeAutomationMode,\n cookiePolicyOverride: args.cookiePolicyOverride\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"research_run_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { resolveProviderRuntime } from \"./workflow-runtime\";\nimport { CHALLENGE_AUTOMATION_MODES } from \"../challenges/types\";\n\nconst z = tool.schema;\nconst sortSchema = z.enum([\"best_deal\", \"lowest_price\", \"highest_rating\", \"fastest_shipping\"]);\nconst modeSchema = z.enum([\"compact\", \"json\", \"md\", \"context\", \"path\"]);\nconst cookiePolicySchema = z.enum([\"off\", \"auto\", \"required\"]);\nconst challengeAutomationModeSchema = z.enum(CHALLENGE_AUTOMATION_MODES);\n\nexport function createShoppingRunTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Run shopping/deal intelligence across shopping providers.\",\n args: {\n query: z.string().min(1).describe(\"Shopping query\"),\n providers: z.array(z.string()).optional().describe(\"Optional provider allow-list\"),\n budget: z.number().positive().optional().describe(\"Optional budget amount\"),\n region: z.string().optional().describe(\"Region hint\"),\n sort: sortSchema.optional().describe(\"best_deal|lowest_price|highest_rating|fastest_shipping\"),\n mode: modeSchema.optional().describe(\"compact|json|md|context|path\"),\n outputDir: z.string().optional().describe(\"Optional artifact output directory\"),\n ttlHours: z.number().int().positive().optional().describe(\"Artifact retention TTL in hours\"),\n useCookies: z.boolean().optional().describe(\"Enable/disable provider cookie injection for this run\"),\n challengeAutomationMode: challengeAutomationModeSchema.optional().describe(\"Challenge automation mode: off|browser|browser_with_helper\"),\n cookiePolicyOverride: cookiePolicySchema.optional().describe(\"Override cookie policy: off|auto|required\")\n },\n async execute(args) {\n try {\n const runtime = await resolveProviderRuntime(deps);\n const { runShoppingWorkflow } = await import(\"../providers\");\n const result = await runShoppingWorkflow(runtime, {\n query: args.query,\n providers: args.providers,\n budget: args.budget,\n region: args.region,\n sort: args.sort,\n mode: args.mode ?? \"compact\",\n outputDir: args.outputDir,\n ttlHours: args.ttlHours,\n useCookies: args.useCookies,\n challengeAutomationMode: args.challengeAutomationMode,\n cookiePolicyOverride: args.cookiePolicyOverride\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"shopping_run_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { resolveProviderRuntime } from \"./workflow-runtime\";\nimport { CHALLENGE_AUTOMATION_MODES } from \"../challenges/types\";\n\nconst z = tool.schema;\nconst cookiePolicySchema = z.enum([\"off\", \"auto\", \"required\"]);\nconst challengeAutomationModeSchema = z.enum(CHALLENGE_AUTOMATION_MODES);\n\nasync function captureScreenshotBuffer(deps: ToolDeps, url: string): Promise<Buffer | null> {\n let sessionId: string | null = null;\n try {\n const launched = await deps.manager.launch({\n headless: true,\n startUrl: url\n });\n sessionId = launched.sessionId;\n const screenshot = await deps.manager.screenshot(sessionId);\n if (typeof screenshot.base64 === \"string\" && screenshot.base64.length > 0) {\n return Buffer.from(screenshot.base64, \"base64\");\n }\n return null;\n } catch {\n return null;\n } finally {\n if (sessionId) {\n await deps.manager.disconnect(sessionId, true).catch(() => {\n // Best effort cleanup.\n });\n }\n }\n}\n\nexport function createProductVideoRunTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Collect a product presentation asset pack for video/UGC workflows.\",\n args: {\n product_url: z.string().optional().describe(\"Product URL\"),\n product_name: z.string().optional().describe(\"Product name\"),\n provider_hint: z.string().optional().describe(\"Optional provider hint\"),\n include_screenshots: z.boolean().optional().describe(\"Include screenshots (default true)\"),\n include_all_images: z.boolean().optional().describe(\"Include all discovered images (default true)\"),\n include_copy: z.boolean().optional().describe(\"Include product copy extraction (default true)\"),\n output_dir: z.string().optional().describe(\"Optional output directory\"),\n ttl_hours: z.number().int().positive().optional().describe(\"Artifact retention TTL in hours\"),\n timeoutMs: z.number().int().positive().optional().describe(\"Workflow timeout in milliseconds\"),\n useCookies: z.boolean().optional().describe(\"Enable/disable provider cookie injection for this run\"),\n challengeAutomationMode: challengeAutomationModeSchema.optional().describe(\"Challenge automation mode: off|browser|browser_with_helper\"),\n cookiePolicyOverride: cookiePolicySchema.optional().describe(\"Override cookie policy: off|auto|required\")\n },\n async execute(args) {\n try {\n const runtime = await resolveProviderRuntime(deps);\n const { runProductVideoWorkflow } = await import(\"../providers\");\n const includeScreenshots = args.include_screenshots ?? true;\n const result = await runProductVideoWorkflow(runtime, {\n product_url: args.product_url,\n product_name: args.product_name,\n provider_hint: args.provider_hint,\n include_screenshots: includeScreenshots,\n include_all_images: args.include_all_images,\n include_copy: args.include_copy,\n output_dir: args.output_dir,\n ttl_hours: args.ttl_hours,\n timeoutMs: args.timeoutMs,\n useCookies: args.useCookies,\n challengeAutomationMode: args.challengeAutomationMode,\n cookiePolicyOverride: args.cookiePolicyOverride\n }, {\n captureScreenshot: includeScreenshots\n ? async (url) => captureScreenshotBuffer(deps, url)\n : undefined\n });\n\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"product_video_run_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\nimport { resolveProviderRuntime } from \"./workflow-runtime\";\nimport { CHALLENGE_AUTOMATION_MODES } from \"../challenges/types\";\nimport { captureInspiredesignReferenceFromManager } from \"../providers/inspiredesign-capture\";\n\nconst z = tool.schema;\nconst modeSchema = z.enum([\"compact\", \"json\", \"md\", \"context\", \"path\"]);\nconst captureModeSchema = z.enum([\"off\", \"deep\"]);\nconst cookiePolicySchema = z.enum([\"off\", \"auto\", \"required\"]);\nconst challengeAutomationModeSchema = z.enum(CHALLENGE_AUTOMATION_MODES);\n\nexport function createInspiredesignRunTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Run the inspiredesign workflow directly.\",\n args: {\n brief: z.string().min(1).describe(\"Inspiredesign brief\"),\n urls: z.array(z.string()).optional().describe(\"Inspiration URLs to analyze\"),\n captureMode: captureModeSchema.optional().describe(\"Capture mode: off|deep\"),\n includePrototypeGuidance: z.boolean().optional().describe(\"Include prototype guidance output\"),\n mode: modeSchema.optional().describe(\"compact|json|md|context|path\"),\n timeoutMs: z.number().int().positive().optional().describe(\"Workflow timeout in milliseconds\"),\n outputDir: z.string().optional().describe(\"Optional artifact output directory\"),\n ttlHours: z.number().int().positive().optional().describe(\"Artifact retention TTL in hours\"),\n useCookies: z.boolean().optional().describe(\"Enable/disable provider cookie injection for this run\"),\n challengeAutomationMode: challengeAutomationModeSchema.optional().describe(\"Challenge automation mode: off|browser|browser_with_helper\"),\n cookiePolicyOverride: cookiePolicySchema.optional().describe(\"Override cookie policy: off|auto|required\")\n },\n async execute(args) {\n try {\n const runtime = await resolveProviderRuntime(deps);\n const { runInspiredesignWorkflow } = await import(\"../providers\");\n const captureMode = args.captureMode ?? \"off\";\n const cookieSource = deps.config.get().providers?.cookieSource;\n const result = await runInspiredesignWorkflow(runtime, {\n brief: args.brief,\n urls: args.urls,\n captureMode,\n includePrototypeGuidance: args.includePrototypeGuidance,\n mode: args.mode ?? \"compact\",\n timeoutMs: args.timeoutMs,\n outputDir: args.outputDir,\n ttlHours: args.ttlHours,\n useCookies: args.useCookies,\n challengeAutomationMode: args.challengeAutomationMode,\n cookiePolicyOverride: args.cookiePolicyOverride\n }, {\n captureReference: captureMode === \"deep\"\n ? async (url, options) => captureInspiredesignReferenceFromManager(deps.manager, url, {\n ...options,\n cookieSource\n })\n : undefined\n });\n return ok(result);\n } catch (error) {\n return failure(serializeError(error).message, \"inspiredesign_run_failed\");\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createCanvasTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Execute a typed design-canvas command such as canvas.session.open, canvas.feedback.next, or canvas.document.patch.\",\n args: {\n command: z.string().min(1).describe(\"Canvas command name\"),\n params: z.record(z.string(), z.unknown()).optional().describe(\"Canvas command payload\")\n },\n async execute(args) {\n if (!deps.canvasManager) {\n return failure(\"Canvas manager unavailable.\", \"canvas_unavailable\");\n }\n try {\n if (!args.command.startsWith(\"canvas.\")) {\n return failure(\"Canvas commands must start with 'canvas.'.\", \"canvas_invalid_command\");\n }\n const result = await deps.canvasManager.execute(args.command, args.params ?? {});\n if (result && typeof result === \"object\" && !Array.isArray(result)) {\n return ok(result as Record<string, unknown>);\n }\n return ok({ result });\n } catch (error) {\n const serialized = serializeError(error);\n return failure(serialized.message, serialized.code ?? \"canvas_failed\", serialized.details);\n }\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { ok } from \"./response\";\n\nexport function createSkillListTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"List bundled and discovered skill packs before choosing a local onboarding or workflow lane.\",\n args: {},\n async execute() {\n const skills = await deps.skills.listSkills();\n const skillList = skills.map((s) => ({\n name: s.name,\n description: s.description,\n version: s.version\n }));\n return ok({\n skills: skillList,\n count: skillList.length\n });\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport onboardingMetadata from \"../cli/onboarding-metadata.json\";\nimport type { ToolDeps } from \"./deps\";\nimport { ok, failure } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createSkillLoadTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: `Load a local skill directly; start with ${onboardingMetadata.skillName} ${onboardingMetadata.skillTopic} before low-level browser commands.`,\n args: {\n name: z.string().describe(\"Name of the skill to load (e.g., 'opendevbrowser-login-automation', 'opendevbrowser-form-testing')\"),\n topic: z.string().optional().describe(\"Optional topic to filter the skill content\")\n },\n async execute(args) {\n try {\n const content = await deps.skills.loadSkill(args.name, args.topic);\n return ok({ skill: args.name, topic: args.topic, content });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return failure(`Failed to load skill '${args.name}': ${message}`, \"SKILL_NOT_FOUND\");\n }\n }\n });\n}\n","import type { ToolDefinition } from \"@opencode-ai/plugin\";\nimport type { ToolDeps } from \"./deps\";\nimport { createLaunchTool } from \"./launch\";\nimport { createConnectTool } from \"./connect\";\nimport { createDisconnectTool } from \"./disconnect\";\nimport { createStatusTool } from \"./status\";\nimport { createStatusCapabilitiesTool } from \"./status_capabilities\";\nimport { createSessionInspectorTool } from \"./session_inspector\";\nimport { createSessionInspectorPlanTool } from \"./session_inspector_plan\";\nimport { createSessionInspectorAuditTool } from \"./session_inspector_audit\";\nimport { createTargetsListTool } from \"./targets_list\";\nimport { createTargetUseTool } from \"./target_use\";\nimport { createTargetNewTool } from \"./target_new\";\nimport { createTargetCloseTool } from \"./target_close\";\nimport { createPageTool } from \"./page\";\nimport { createListTool } from \"./list\";\nimport { createCloseTool } from \"./close\";\nimport { createGotoTool } from \"./goto\";\nimport { createWaitTool } from \"./wait\";\nimport { createSnapshotTool } from \"./snapshot\";\nimport { createReviewTool } from \"./review\";\nimport { createReviewDesktopTool } from \"./review_desktop\";\nimport { createClickTool } from \"./click\";\nimport { createHoverTool } from \"./hover\";\nimport { createPressTool } from \"./press\";\nimport { createCheckTool } from \"./check\";\nimport { createUncheckTool } from \"./uncheck\";\nimport { createTypeTool } from \"./type\";\nimport { createSelectTool } from \"./select\";\nimport { createScrollTool } from \"./scroll\";\nimport { createScrollIntoViewTool } from \"./scroll_into_view\";\nimport { createUploadTool } from \"./upload\";\nimport { createPointerMoveTool } from \"./pointer_move\";\nimport { createPointerDownTool } from \"./pointer_down\";\nimport { createPointerUpTool } from \"./pointer_up\";\nimport { createPointerDragTool } from \"./pointer_drag\";\nimport { createDomGetHtmlTool } from \"./dom_get_html\";\nimport { createDomGetTextTool } from \"./dom_get_text\";\nimport { createGetAttrTool } from \"./get_attr\";\nimport { createGetValueTool } from \"./get_value\";\nimport { createIsVisibleTool } from \"./is_visible\";\nimport { createIsEnabledTool } from \"./is_enabled\";\nimport { createIsCheckedTool } from \"./is_checked\";\nimport { createRunTool } from \"./run\";\nimport { createPromptingGuideTool } from \"./prompting_guide\";\nimport { createConsolePollTool } from \"./console_poll\";\nimport { createNetworkPollTool } from \"./network_poll\";\nimport { createDebugTraceSnapshotTool } from \"./debug_trace_snapshot\";\nimport { createCookieImportTool } from \"./cookie_import\";\nimport { createCookieListTool } from \"./cookie_list\";\nimport { createMacroResolveTool } from \"./macro_resolve\";\nimport { createClonePageTool } from \"./clone_page\";\nimport { createCloneComponentTool } from \"./clone_component\";\nimport { createPerfTool } from \"./perf\";\nimport { createScreenshotTool } from \"./screenshot\";\nimport { createScreencastStartTool } from \"./screencast_start\";\nimport { createScreencastStopTool } from \"./screencast_stop\";\nimport { createDialogTool } from \"./dialog\";\nimport { createDesktopStatusTool } from \"./desktop_status\";\nimport { createDesktopWindowsTool } from \"./desktop_windows\";\nimport { createDesktopActiveWindowTool } from \"./desktop_active_window\";\nimport { createDesktopCaptureDesktopTool } from \"./desktop_capture_desktop\";\nimport { createDesktopCaptureWindowTool } from \"./desktop_capture_window\";\nimport { createDesktopAccessibilitySnapshotTool } from \"./desktop_accessibility_snapshot\";\nimport { createAnnotateTool } from \"./annotate\";\nimport { createResearchRunTool } from \"./research_run\";\nimport { createShoppingRunTool } from \"./shopping_run\";\nimport { createProductVideoRunTool } from \"./product_video_run\";\nimport { createInspiredesignRunTool } from \"./inspiredesign_run\";\nimport { createCanvasTool } from \"./canvas\";\nimport { createSkillListTool } from \"./skill_list\";\nimport { createSkillLoadTool } from \"./skill_load\";\nimport onboardingMetadata from \"../cli/onboarding-metadata.json\";\nexport type { ToolSurfaceEntry } from \"../public-surface/source\";\nexport { TOOL_SURFACE_ENTRIES } from \"../public-surface/generated-manifest\";\n\nexport const LOCAL_ONLY_TOOL_NAMES = new Set(onboardingMetadata.localOnlyToolNames);\n\nexport function createTools(deps: ToolDeps): Record<string, ToolDefinition> {\n const wrap = (name: string, definition: ToolDefinition): ToolDefinition => {\n if (!deps.ensureHub || LOCAL_ONLY_TOOL_NAMES.has(name)) return definition;\n return {\n ...definition,\n execute: async (args, context) => {\n try {\n await deps.ensureHub?.();\n } catch {\n // Fall through to tool execution; tool-level error handling will surface issues.\n }\n return definition.execute(args, context);\n }\n };\n };\n\n return {\n opendevbrowser_launch: wrap(\"opendevbrowser_launch\", createLaunchTool(deps)),\n opendevbrowser_connect: wrap(\"opendevbrowser_connect\", createConnectTool(deps)),\n opendevbrowser_disconnect: wrap(\"opendevbrowser_disconnect\", createDisconnectTool(deps)),\n opendevbrowser_status: wrap(\"opendevbrowser_status\", createStatusTool(deps)),\n opendevbrowser_status_capabilities: wrap(\n \"opendevbrowser_status_capabilities\",\n createStatusCapabilitiesTool(deps)\n ),\n opendevbrowser_session_inspector: wrap(\"opendevbrowser_session_inspector\", createSessionInspectorTool(deps)),\n opendevbrowser_session_inspector_plan: wrap(\n \"opendevbrowser_session_inspector_plan\",\n createSessionInspectorPlanTool(deps)\n ),\n opendevbrowser_session_inspector_audit: wrap(\n \"opendevbrowser_session_inspector_audit\",\n createSessionInspectorAuditTool(deps)\n ),\n opendevbrowser_targets_list: wrap(\"opendevbrowser_targets_list\", createTargetsListTool(deps)),\n opendevbrowser_target_use: wrap(\"opendevbrowser_target_use\", createTargetUseTool(deps)),\n opendevbrowser_target_new: wrap(\"opendevbrowser_target_new\", createTargetNewTool(deps)),\n opendevbrowser_target_close: wrap(\"opendevbrowser_target_close\", createTargetCloseTool(deps)),\n opendevbrowser_page: wrap(\"opendevbrowser_page\", createPageTool(deps)),\n opendevbrowser_list: wrap(\"opendevbrowser_list\", createListTool(deps)),\n opendevbrowser_close: wrap(\"opendevbrowser_close\", createCloseTool(deps)),\n opendevbrowser_goto: wrap(\"opendevbrowser_goto\", createGotoTool(deps)),\n opendevbrowser_wait: wrap(\"opendevbrowser_wait\", createWaitTool(deps)),\n opendevbrowser_snapshot: wrap(\"opendevbrowser_snapshot\", createSnapshotTool(deps)),\n opendevbrowser_review: wrap(\"opendevbrowser_review\", createReviewTool(deps)),\n opendevbrowser_review_desktop: wrap(\"opendevbrowser_review_desktop\", createReviewDesktopTool(deps)),\n opendevbrowser_click: wrap(\"opendevbrowser_click\", createClickTool(deps)),\n opendevbrowser_hover: wrap(\"opendevbrowser_hover\", createHoverTool(deps)),\n opendevbrowser_press: wrap(\"opendevbrowser_press\", createPressTool(deps)),\n opendevbrowser_check: wrap(\"opendevbrowser_check\", createCheckTool(deps)),\n opendevbrowser_uncheck: wrap(\"opendevbrowser_uncheck\", createUncheckTool(deps)),\n opendevbrowser_type: wrap(\"opendevbrowser_type\", createTypeTool(deps)),\n opendevbrowser_select: wrap(\"opendevbrowser_select\", createSelectTool(deps)),\n opendevbrowser_scroll: wrap(\"opendevbrowser_scroll\", createScrollTool(deps)),\n opendevbrowser_scroll_into_view: wrap(\"opendevbrowser_scroll_into_view\", createScrollIntoViewTool(deps)),\n opendevbrowser_upload: wrap(\"opendevbrowser_upload\", createUploadTool(deps)),\n opendevbrowser_pointer_move: wrap(\"opendevbrowser_pointer_move\", createPointerMoveTool(deps)),\n opendevbrowser_pointer_down: wrap(\"opendevbrowser_pointer_down\", createPointerDownTool(deps)),\n opendevbrowser_pointer_up: wrap(\"opendevbrowser_pointer_up\", createPointerUpTool(deps)),\n opendevbrowser_pointer_drag: wrap(\"opendevbrowser_pointer_drag\", createPointerDragTool(deps)),\n opendevbrowser_dom_get_html: wrap(\"opendevbrowser_dom_get_html\", createDomGetHtmlTool(deps)),\n opendevbrowser_dom_get_text: wrap(\"opendevbrowser_dom_get_text\", createDomGetTextTool(deps)),\n opendevbrowser_get_attr: wrap(\"opendevbrowser_get_attr\", createGetAttrTool(deps)),\n opendevbrowser_get_value: wrap(\"opendevbrowser_get_value\", createGetValueTool(deps)),\n opendevbrowser_is_visible: wrap(\"opendevbrowser_is_visible\", createIsVisibleTool(deps)),\n opendevbrowser_is_enabled: wrap(\"opendevbrowser_is_enabled\", createIsEnabledTool(deps)),\n opendevbrowser_is_checked: wrap(\"opendevbrowser_is_checked\", createIsCheckedTool(deps)),\n opendevbrowser_run: wrap(\"opendevbrowser_run\", createRunTool(deps)),\n opendevbrowser_prompting_guide: wrap(\"opendevbrowser_prompting_guide\", createPromptingGuideTool(deps)),\n opendevbrowser_console_poll: wrap(\"opendevbrowser_console_poll\", createConsolePollTool(deps)),\n opendevbrowser_network_poll: wrap(\"opendevbrowser_network_poll\", createNetworkPollTool(deps)),\n opendevbrowser_debug_trace_snapshot: wrap(\"opendevbrowser_debug_trace_snapshot\", createDebugTraceSnapshotTool(deps)),\n opendevbrowser_cookie_import: wrap(\"opendevbrowser_cookie_import\", createCookieImportTool(deps)),\n opendevbrowser_cookie_list: wrap(\"opendevbrowser_cookie_list\", createCookieListTool(deps)),\n opendevbrowser_macro_resolve: wrap(\"opendevbrowser_macro_resolve\", createMacroResolveTool(deps)),\n opendevbrowser_research_run: wrap(\"opendevbrowser_research_run\", createResearchRunTool(deps)),\n opendevbrowser_shopping_run: wrap(\"opendevbrowser_shopping_run\", createShoppingRunTool(deps)),\n opendevbrowser_product_video_run: wrap(\"opendevbrowser_product_video_run\", createProductVideoRunTool(deps)),\n opendevbrowser_inspiredesign_run: wrap(\"opendevbrowser_inspiredesign_run\", createInspiredesignRunTool(deps)),\n opendevbrowser_canvas: wrap(\"opendevbrowser_canvas\", createCanvasTool(deps)),\n opendevbrowser_clone_page: wrap(\"opendevbrowser_clone_page\", createClonePageTool(deps)),\n opendevbrowser_clone_component: wrap(\"opendevbrowser_clone_component\", createCloneComponentTool(deps)),\n opendevbrowser_perf: wrap(\"opendevbrowser_perf\", createPerfTool(deps)),\n opendevbrowser_screenshot: wrap(\"opendevbrowser_screenshot\", createScreenshotTool(deps)),\n opendevbrowser_screencast_start: wrap(\"opendevbrowser_screencast_start\", createScreencastStartTool(deps)),\n opendevbrowser_screencast_stop: wrap(\"opendevbrowser_screencast_stop\", createScreencastStopTool(deps)),\n opendevbrowser_dialog: wrap(\"opendevbrowser_dialog\", createDialogTool(deps)),\n opendevbrowser_desktop_status: wrap(\"opendevbrowser_desktop_status\", createDesktopStatusTool(deps)),\n opendevbrowser_desktop_windows: wrap(\"opendevbrowser_desktop_windows\", createDesktopWindowsTool(deps)),\n opendevbrowser_desktop_active_window: wrap(\"opendevbrowser_desktop_active_window\", createDesktopActiveWindowTool(deps)),\n opendevbrowser_desktop_capture_desktop: wrap(\"opendevbrowser_desktop_capture_desktop\", createDesktopCaptureDesktopTool(deps)),\n opendevbrowser_desktop_capture_window: wrap(\"opendevbrowser_desktop_capture_window\", createDesktopCaptureWindowTool(deps)),\n opendevbrowser_desktop_accessibility_snapshot: wrap(\n \"opendevbrowser_desktop_accessibility_snapshot\",\n createDesktopAccessibilitySnapshotTool(deps)\n ),\n opendevbrowser_annotate: wrap(\"opendevbrowser_annotate\", createAnnotateTool(deps)),\n opendevbrowser_skill_list: wrap(\"opendevbrowser_skill_list\", createSkillListTool(deps)),\n opendevbrowser_skill_load: wrap(\"opendevbrowser_skill_load\", createSkillLoadTool(deps))\n };\n}\n","import type { Plugin } from \"@opencode-ai/plugin\";\nimport { createOpenDevBrowserCore } from \"./core\";\nimport { ScriptRunner } from \"./browser/script-runner\";\nimport { getCurrentDaemonFingerprint, readDaemonMetadata, startDaemon } from \"./cli/daemon\";\nimport { DaemonClient } from \"./cli/daemon-client\";\nimport { RemoteManager } from \"./cli/remote-manager\";\nimport { RemoteCanvasManager } from \"./cli/remote-canvas-manager\";\nimport { RemoteDesktopRuntime } from \"./cli/remote-desktop-runtime\";\nimport { RemoteRelay } from \"./cli/remote-relay\";\nimport { fetchDaemonStatusFromMetadata } from \"./cli/daemon-status\";\nimport {\n buildSkillNudgeMessage,\n clearSkillNudge,\n consumeSkillNudge,\n createSkillNudgeState,\n extractTextFromParts,\n markSkillNudge,\n shouldTriggerSkillNudge,\n SKILL_NUDGE_MARKER\n} from \"./skills/skill-nudge\";\nimport { AGENT_INBOX_SYSTEM_MARKER } from \"./annotate/agent-inbox\";\nimport {\n buildContinuityNudgeMessage,\n clearContinuityNudge,\n consumeContinuityNudge,\n createContinuityNudgeState,\n markContinuityNudge,\n shouldTriggerContinuityNudge,\n CONTINUITY_NUDGE_MARKER\n} from \"./skills/continuity-nudge\";\nimport { createTools } from \"./tools\";\nimport { extractExtension } from \"./extension-extractor\";\nimport { isHubEnabled } from \"./utils/hub-enabled\";\nimport type { RelayLike } from \"./relay/relay-types\";\nimport type { ToolDeps } from \"./tools/deps\";\nimport { createCoreRuntimeAssemblies } from \"./core\";\nimport { createAutomationCoordinator } from \"./automation/coordinator\";\nimport { requireChallengeOrchestrationConfig } from \"./config\";\n\nconst OpenDevBrowserPlugin: Plugin = async ({ directory, worktree }) => {\n const core = createOpenDevBrowserCore({ directory, worktree });\n const { config, configStore, skills, ensureRelay, cleanup, getExtensionPath, agentInbox } = core;\n let relay: RelayLike = core.relay;\n let manager = core.manager;\n let canvasManager = core.canvasManager;\n let runner = core.runner;\n let annotationManager = core.annotationManager;\n let desktopRuntime = core.desktopRuntime;\n let automationCoordinator = core.automationCoordinator;\n let providerRuntime = core.providerRuntime;\n let browserFallbackPort = core.browserFallbackPort;\n let hubStop: (() => Promise<void>) | null = null;\n let daemonClient: DaemonClient | null = null;\n const skillNudgeState = createSkillNudgeState();\n const continuityNudgeState = createContinuityNudgeState();\n\n // Minimal startup signal for local testing/debugging.\n // Avoid logging secrets (relayToken can be a string).\n console.info(\n `[opendevbrowser] loaded (cacheRoot=${core.cacheRoot}, relay=${config.relayToken === false ? \"disabled\" : \"enabled\"})`\n );\n\n try {\n extractExtension();\n } catch (error) {\n // Extension extraction is best-effort; keep plugin usable if it fails.\n console.warn(\"Extension extraction failed:\", error instanceof Error ? error.message : error);\n }\n\n const toolDeps: ToolDeps = {\n manager,\n canvasManager,\n annotationManager,\n runner,\n config: configStore,\n skills,\n desktopRuntime,\n automationCoordinator,\n providerRuntime,\n browserFallbackPort,\n relay,\n getExtensionPath\n };\n\n const bindRemote = () => {\n if (!daemonClient) {\n daemonClient = new DaemonClient({ autoRenew: true });\n }\n const currentConfig = configStore.get();\n const challengeConfig = requireChallengeOrchestrationConfig(currentConfig);\n manager = new RemoteManager(daemonClient);\n canvasManager = new RemoteCanvasManager(daemonClient);\n desktopRuntime = new RemoteDesktopRuntime(daemonClient);\n relay = new RemoteRelay(daemonClient);\n annotationManager.setRelay(relay);\n annotationManager.setBrowserManager(manager);\n runner = new ScriptRunner(manager);\n ({\n providerRuntime,\n browserFallbackPort\n } = createCoreRuntimeAssemblies({\n cacheRoot: core.cacheRoot,\n config: currentConfig,\n manager,\n challengeConfig\n }));\n automationCoordinator = createAutomationCoordinator({\n manager,\n desktopRuntime,\n challengeMode: challengeConfig.mode,\n governedLanes: challengeConfig.governed,\n helperBridgeEnabled: challengeConfig.optionalComputerUseBridge.enabled,\n snapshotMaxChars: currentConfig.snapshot.maxChars\n });\n toolDeps.manager = manager;\n toolDeps.canvasManager = canvasManager;\n toolDeps.relay = relay;\n toolDeps.runner = runner;\n toolDeps.desktopRuntime = desktopRuntime;\n toolDeps.automationCoordinator = automationCoordinator;\n toolDeps.providerRuntime = providerRuntime;\n toolDeps.browserFallbackPort = browserFallbackPort;\n };\n\n const ensureHub = async (): Promise<void> => {\n const currentConfig = configStore.get();\n if (!isHubEnabled(currentConfig)) {\n return;\n }\n if (!daemonClient) {\n daemonClient = new DaemonClient({ autoRenew: true });\n }\n\n const deadline = Date.now() + 2000;\n let attempt = 0;\n let lastError: Error | null = null;\n const currentFingerprint = getCurrentDaemonFingerprint();\n\n while (attempt < 2 && Date.now() < deadline) {\n attempt += 1;\n const status = await fetchDaemonStatusFromMetadata(currentConfig);\n if (status?.ok && status.fingerprint === currentFingerprint) {\n bindRemote();\n await relay?.refresh?.();\n return;\n }\n if (status?.ok) {\n const metadata = readDaemonMetadata();\n const daemonPort = metadata?.port ?? currentConfig.daemonPort;\n const daemonToken = metadata?.token ?? currentConfig.daemonToken;\n if (daemonPort > 0 && daemonToken) {\n try {\n await fetch(`http://127.0.0.1:${daemonPort}/stop`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${daemonToken}` }\n });\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n }\n }\n }\n try {\n const { stop } = await startDaemon({ config: currentConfig, directory, worktree });\n hubStop = stop;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n }\n if (Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n }\n\n if (lastError) {\n throw lastError;\n }\n throw new Error(\"Hub daemon unavailable.\");\n };\n\n toolDeps.ensureHub = ensureHub;\n\n const hubEnabled = isHubEnabled(config);\n if (hubEnabled) {\n bindRemote();\n try {\n await ensureHub();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`[opendevbrowser] Hub daemon unavailable: ${message}`);\n }\n } else {\n await ensureRelay(config.relayPort);\n }\n\n const cleanupAll = () => {\n if (hubStop) {\n hubStop().catch(() => {});\n }\n daemonClient?.releaseBinding().catch(() => {});\n cleanup();\n };\n\n process.on(\"SIGINT\", cleanupAll);\n process.on(\"SIGTERM\", cleanupAll);\n process.on(\"beforeExit\", cleanupAll);\n\n const registerAgentInboxScope = (sessionID?: string, registration?: {\n messageId?: string | null;\n agent?: string | null;\n model?: {\n providerID: string;\n modelID: string;\n } | null;\n variant?: string | null;\n }) => {\n if (!sessionID) {\n return;\n }\n try {\n agentInbox.registerScope(sessionID, registration);\n } catch (error) {\n console.warn(\n \"[opendevbrowser] Failed to register agent inbox scope:\",\n error instanceof Error ? error.message : String(error)\n );\n }\n };\n\n return {\n tool: createTools(toolDeps),\n \"chat.message\": async (input, output) => {\n const config = configStore.get();\n if (output.message.role !== \"user\") return;\n\n registerAgentInboxScope(input.sessionID, {\n messageId: input.messageID ?? null,\n agent: input.agent ?? null,\n model: input.model ?? null,\n variant: input.variant ?? null\n });\n\n const text = extractTextFromParts(output.parts);\n if (!text) return;\n\n if (config.skills.nudge.enabled && shouldTriggerSkillNudge(text, config.skills.nudge.keywords)) {\n markSkillNudge(skillNudgeState, Date.now());\n }\n\n if (config.continuity.enabled && config.continuity.nudge.enabled) {\n if (shouldTriggerContinuityNudge(text, config.continuity.nudge.keywords)) {\n markContinuityNudge(continuityNudgeState, Date.now());\n }\n }\n },\n \"experimental.chat.system.transform\": async (input, output) => {\n const config = configStore.get();\n const systemEntries = output.system ?? [];\n let nextEntries = systemEntries;\n let changed = false;\n\n registerAgentInboxScope(input.sessionID, {\n model: null\n });\n if (\n input.sessionID\n && !systemEntries.some((entry) => entry.includes(AGENT_INBOX_SYSTEM_MARKER))\n ) {\n const injection = agentInbox.buildSystemInjection(input.sessionID);\n if (injection) {\n nextEntries = [...nextEntries, injection.systemBlock];\n agentInbox.acknowledge(injection.receiptIds);\n changed = true;\n }\n }\n\n if (config.skills.nudge.enabled) {\n if (systemEntries.some((entry) => entry.includes(SKILL_NUDGE_MARKER))) {\n clearSkillNudge(skillNudgeState);\n } else if (consumeSkillNudge(skillNudgeState, Date.now(), config.skills.nudge.maxAgeMs)) {\n nextEntries = [...nextEntries, buildSkillNudgeMessage()];\n changed = true;\n }\n }\n\n if (config.continuity.enabled && config.continuity.nudge.enabled) {\n if (systemEntries.some((entry) => entry.includes(CONTINUITY_NUDGE_MARKER))) {\n clearContinuityNudge(continuityNudgeState);\n } else if (consumeContinuityNudge(\n continuityNudgeState,\n Date.now(),\n config.continuity.nudge.maxAgeMs\n )) {\n nextEntries = [...nextEntries, buildContinuityNudgeMessage(config.continuity.filePath)];\n changed = true;\n }\n }\n\n if (changed) {\n output.system = nextEntries;\n }\n }\n };\n};\n\nexport default OpenDevBrowserPlugin;\n"],"mappings":"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","names":["observedPort","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","challengeAutomationModeSchema","tool","z","tool","challengeAutomationModeSchema","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","waitUntilSchema","result","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","handoff","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","tool","z","tool","message","tool","z","tool","challengeAutomationModeSchema","tool","z","tool","modeSchema","cookiePolicySchema","challengeAutomationModeSchema","tool","z","tool","cookiePolicySchema","challengeAutomationModeSchema","tool","z","tool","modeSchema","cookiePolicySchema","challengeAutomationModeSchema","tool","z","tool","tool","tool","tool","z","tool","config"]}
|