opendevbrowser 0.0.12 → 0.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +216 -28
- package/dist/chunk-JVBMT2O5.js +7173 -0
- package/dist/chunk-JVBMT2O5.js.map +1 -0
- package/dist/cli/index.js +2486 -589
- package/dist/cli/index.js.map +1 -1
- package/dist/index.js +1057 -194
- package/dist/index.js.map +1 -1
- package/dist/opendevbrowser.js +1057 -194
- package/dist/opendevbrowser.js.map +1 -1
- package/extension/dist/annotate-content.css +237 -0
- package/extension/dist/annotate-content.js +934 -0
- package/extension/dist/background.js +1194 -32
- package/extension/dist/logging.js +50 -0
- package/extension/dist/ops/dom-bridge.js +355 -0
- package/extension/dist/ops/ops-runtime.js +1249 -0
- package/extension/dist/ops/ops-session-store.js +189 -0
- package/extension/dist/ops/redaction.js +52 -0
- package/extension/dist/ops/snapshot-builder.js +4 -0
- package/extension/dist/ops/snapshot-shared.js +220 -0
- package/extension/dist/popup.js +370 -25
- package/extension/dist/relay-settings.js +1 -0
- package/extension/dist/services/CDPRouter.js +501 -103
- package/extension/dist/services/ConnectionManager.js +464 -57
- package/extension/dist/services/NativePortManager.js +182 -0
- package/extension/dist/services/RelayClient.js +227 -26
- package/extension/dist/services/TabManager.js +81 -0
- package/extension/dist/services/TargetSessionMap.js +146 -0
- package/extension/dist/services/cdp-router-commands.js +203 -0
- package/extension/dist/services/url-restrictions.js +41 -0
- package/extension/dist/types.js +3 -1
- package/extension/manifest.json +17 -3
- package/extension/popup.html +144 -0
- package/package.json +2 -2
- package/skills/AGENTS.md +34 -62
- package/skills/data-extraction/SKILL.md +95 -103
- package/skills/form-testing/SKILL.md +75 -82
- package/skills/login-automation/SKILL.md +76 -66
- package/skills/opendevbrowser-best-practices/SKILL.md +90 -49
- package/skills/opendevbrowser-continuity-ledger/SKILL.md +57 -23
- package/dist/chunk-WTFSMBVH.js +0 -2815
- package/dist/chunk-WTFSMBVH.js.map +0 -1
- package/extension/dist/popup.jsx +0 -150
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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/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/click.ts","../src/tools/type.ts","../src/tools/select.ts","../src/tools/scroll.ts","../src/tools/dom_get_html.ts","../src/tools/dom_get_text.ts","../src/tools/run.ts","../src/tools/prompting_guide.ts","../src/tools/console_poll.ts","../src/tools/network_poll.ts","../src/tools/clone_page.ts","../src/tools/clone_component.ts","../src/tools/perf.ts","../src/tools/screenshot.ts","../src/tools/skill_list.ts","../src/tools/skill_load.ts","../src/tools/index.ts","../src/index.ts"],"sourcesContent":["export 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, call the OpenCode skill tool early (skill(\"<skill-name>\", topic?)) and load only the most relevant skill before using browser tools. If unsure which skill applies, check the available skills first.`;\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, 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 type { ToolDeps } from \"./deps\";\nimport { failure, ok, serializeError } from \"./response\";\n\nconst z = tool.schema;\n\nexport function createLaunchTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Launch a managed Chrome session 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 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 try {\n let relayStatus = deps.relay?.status();\n const relayUrl = deps.relay?.getCdpUrl();\n const waitTimeoutMs = args.waitTimeoutMs ?? 30000;\n\n if (args.waitForExtension && deps.relay) {\n const connected = await waitForExtension(deps.relay, waitTimeoutMs);\n if (connected) {\n relayStatus = deps.relay.status();\n }\n }\n\n const useRelay = Boolean(!args.noExtension && relayStatus?.extensionConnected && relayUrl);\n let usedRelay = false;\n let relayWarning: string | null = null;\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 && !useRelay) {\n return failure(\"Extension not connected; use --no-extension to launch a new browser.\", \"extension_not_connected\");\n }\n\n if (useRelay && relayUrl) {\n try {\n result = await deps.manager.connectRelay(relayUrl);\n usedRelay = true;\n } catch {\n if (args.extensionOnly) {\n return failure(\"Extension relay connection failed.\", \"extension_connect_failed\");\n }\n relayWarning = \"Relay connection failed; falling back to managed Chrome.\";\n }\n }\n\n if (!result) {\n if (relayUrl && !args.noExtension) {\n relayWarning ??= \"Extension not connected; launching managed Chrome instead.\";\n }\n result = await deps.manager.launch({\n profile: args.profile,\n headless: args.headless,\n startUrl: args.startUrl,\n chromePath: args.chromePath,\n flags: args.flags,\n persistProfile: args.persistProfile\n });\n }\n\n if (usedRelay && args.startUrl && result.activeTargetId) {\n await deps.manager.goto(result.sessionId, args.startUrl, \"load\", 30000);\n }\n\n const warnings = [\n ...(result.warnings ?? []),\n ...(relayWarning ? [relayWarning] : [])\n ];\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\nasync function waitForExtension(relay: { status: () => { extensionConnected: boolean } }, timeoutMs: number): Promise<boolean> {\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n if (relay.status().extensionConnected) {\n return true;\n }\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n return false;\n}\n","export type ToolError = {\n ok: false;\n error: {\n message: string;\n code?: string;\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): string {\n return JSON.stringify({\n ok: false,\n error: {\n message,\n code\n }\n });\n}\n\nexport function serializeError(error: unknown): { message: string } {\n if (error instanceof Error) {\n return { message: error.message };\n }\n return { message: \"Unknown error\" };\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 createConnectTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"Connect to an existing Chrome CDP endpoint.\",\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 },\n async execute(args) {\n try {\n const relayUrl = deps.relay?.getCdpUrl();\n const useRelay = Boolean(relayUrl && args.wsEndpoint === relayUrl);\n const result = useRelay && relayUrl\n ? await deps.manager.connectRelay(relayUrl)\n : await deps.manager.connect({\n wsEndpoint: args.wsEndpoint,\n host: args.host,\n port: args.port\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\";\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 status of a browser session.\",\n args: {\n sessionId: z.string().describe(\"Session id\")\n },\n async execute(args) {\n try {\n const status = await deps.manager.status(args.sessionId);\n const extensionPath = deps.getExtensionPath?.() ?? null;\n const config = deps.config.get();\n const version = getPackageVersion();\n let updateHint: string | undefined;\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: status.mode,\n activeTargetId: status.activeTargetId,\n url: status.url,\n title: status.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 { 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 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 );\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 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 );\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 );\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 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 );\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 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 ref: z.string().describe(\"Element ref\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.click(args.sessionId, args.ref);\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 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 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 );\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 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);\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 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);\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 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 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 );\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 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 );\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\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 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: \"Return best-practice prompting guidance for OpenDevBrowser.\",\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 = 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 = 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 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 },\n async execute(args) {\n try {\n const result = await deps.manager.clonePage(args.sessionId);\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 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);\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 },\n async execute(args) {\n try {\n const result = await deps.manager.perfMetrics(args.sessionId);\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 path: z.string().optional().describe(\"Optional output file path\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.screenshot(args.sessionId, args.path);\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 { ok } from \"./response\";\n\nexport function createSkillListTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"List available skills from OpenCode skill directories (compatibility wrapper)\",\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({ skills: skillList, count: skillList.length });\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\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 specific skill by name from OpenCode skill directories (compatibility wrapper)\",\n args: {\n name: z.string().describe(\"Name of the skill to load (e.g., 'login-automation', '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 { 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 { createClickTool } from \"./click\";\nimport { createTypeTool } from \"./type\";\nimport { createSelectTool } from \"./select\";\nimport { createScrollTool } from \"./scroll\";\nimport { createDomGetHtmlTool } from \"./dom_get_html\";\nimport { createDomGetTextTool } from \"./dom_get_text\";\nimport { createRunTool } from \"./run\";\nimport { createPromptingGuideTool } from \"./prompting_guide\";\nimport { createConsolePollTool } from \"./console_poll\";\nimport { createNetworkPollTool } from \"./network_poll\";\nimport { createClonePageTool } from \"./clone_page\";\nimport { createCloneComponentTool } from \"./clone_component\";\nimport { createPerfTool } from \"./perf\";\nimport { createScreenshotTool } from \"./screenshot\";\nimport { createSkillListTool } from \"./skill_list\";\nimport { createSkillLoadTool } from \"./skill_load\";\n\nexport function createTools(deps: ToolDeps): Record<string, ToolDefinition> {\n return {\n opendevbrowser_launch: createLaunchTool(deps),\n opendevbrowser_connect: createConnectTool(deps),\n opendevbrowser_disconnect: createDisconnectTool(deps),\n opendevbrowser_status: createStatusTool(deps),\n opendevbrowser_targets_list: createTargetsListTool(deps),\n opendevbrowser_target_use: createTargetUseTool(deps),\n opendevbrowser_target_new: createTargetNewTool(deps),\n opendevbrowser_target_close: createTargetCloseTool(deps),\n opendevbrowser_page: createPageTool(deps),\n opendevbrowser_list: createListTool(deps),\n opendevbrowser_close: createCloseTool(deps),\n opendevbrowser_goto: createGotoTool(deps),\n opendevbrowser_wait: createWaitTool(deps),\n opendevbrowser_snapshot: createSnapshotTool(deps),\n opendevbrowser_click: createClickTool(deps),\n opendevbrowser_type: createTypeTool(deps),\n opendevbrowser_select: createSelectTool(deps),\n opendevbrowser_scroll: createScrollTool(deps),\n opendevbrowser_dom_get_html: createDomGetHtmlTool(deps),\n opendevbrowser_dom_get_text: createDomGetTextTool(deps),\n opendevbrowser_run: createRunTool(deps),\n opendevbrowser_prompting_guide: createPromptingGuideTool(deps),\n opendevbrowser_console_poll: createConsolePollTool(deps),\n opendevbrowser_network_poll: createNetworkPollTool(deps),\n opendevbrowser_clone_page: createClonePageTool(deps),\n opendevbrowser_clone_component: createCloneComponentTool(deps),\n opendevbrowser_perf: createPerfTool(deps),\n opendevbrowser_screenshot: createScreenshotTool(deps),\n opendevbrowser_skill_list: createSkillListTool(deps),\n opendevbrowser_skill_load: createSkillLoadTool(deps)\n };\n}\n","import type { Plugin } from \"@opencode-ai/plugin\";\nimport { createOpenDevBrowserCore } from \"./core\";\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 {\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\";\n\nconst OpenDevBrowserPlugin: Plugin = async ({ directory, worktree }) => {\n const core = createOpenDevBrowserCore({ directory, worktree });\n const { config, configStore, manager, runner, skills, relay, ensureRelay, cleanup, getExtensionPath } = core;\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 process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n process.on(\"beforeExit\", cleanup);\n\n await ensureRelay(config.relayPort);\n\n return {\n tool: createTools({ manager, runner, config: configStore, skills, relay, getExtensionPath }),\n \"chat.message\": async (_input, output) => {\n const config = configStore.get();\n if (output.message.role !== \"user\") return;\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 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":["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","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","tool","tool","z","tool","config"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/remote-manager.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/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/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/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/clone_page.ts","../src/tools/clone_component.ts","../src/tools/perf.ts","../src/tools/screenshot.ts","../src/tools/annotate.ts","../src/tools/skill_list.ts","../src/tools/skill_load.ts","../src/tools/index.ts","../src/index.ts"],"sourcesContent":["import type { BrowserManagerLike } 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 { DaemonClient } from \"./daemon-client\";\n\ntype CallResult<K extends keyof BrowserManagerLike> = Awaited<ReturnType<BrowserManagerLike[K]>>;\n\nfunction isLegacyRelayEndpoint(wsEndpoint: string): boolean {\n try {\n const url = new URL(wsEndpoint);\n const path = url.pathname.endsWith(\"/\") ? url.pathname.slice(0, -1) : url.pathname;\n return path === \"/cdp\";\n } catch {\n return false;\n }\n}\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): ReturnType<BrowserManagerLike[\"connectRelay\"]> {\n return this.client.call<CallResult<\"connectRelay\">>(\n \"session.connect\",\n isLegacyRelayEndpoint(wsEndpoint) ? { wsEndpoint, extensionLegacy: true } : { wsEndpoint }\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 goto(\n sessionId: string,\n url: string,\n waitUntil: \"domcontentloaded\" | \"load\" | \"networkidle\" = \"load\",\n timeoutMs = 30000\n ): ReturnType<BrowserManagerLike[\"goto\"]> {\n return this.client.call<CallResult<\"goto\">>(\"nav.goto\", { sessionId, url, waitUntil, timeoutMs });\n }\n\n waitForLoad(\n sessionId: string,\n until: \"domcontentloaded\" | \"load\" | \"networkidle\",\n timeoutMs = 30000\n ): ReturnType<BrowserManagerLike[\"waitForLoad\"]> {\n return this.client.call<CallResult<\"waitForLoad\">>(\"nav.wait\", { sessionId, until, timeoutMs });\n }\n\n waitForRef(\n sessionId: string,\n ref: string,\n state: \"attached\" | \"visible\" | \"hidden\" = \"attached\",\n timeoutMs = 30000\n ): ReturnType<BrowserManagerLike[\"waitForRef\"]> {\n return this.client.call<CallResult<\"waitForRef\">>(\"nav.wait\", { sessionId, ref, state, timeoutMs });\n }\n\n snapshot(sessionId: string, mode: \"outline\" | \"actionables\", maxChars: number, cursor?: string): ReturnType<BrowserManagerLike[\"snapshot\"]> {\n return this.client.call<CallResult<\"snapshot\">>(\"nav.snapshot\", { sessionId, mode, maxChars, cursor });\n }\n\n click(sessionId: string, ref: string): ReturnType<BrowserManagerLike[\"click\"]> {\n return this.client.call<CallResult<\"click\">>(\"interact.click\", { sessionId, ref });\n }\n\n hover(sessionId: string, ref: string): ReturnType<BrowserManagerLike[\"hover\"]> {\n return this.client.call<CallResult<\"hover\">>(\"interact.hover\", { sessionId, ref });\n }\n\n press(sessionId: string, key: string, ref?: string): ReturnType<BrowserManagerLike[\"press\"]> {\n return this.client.call<CallResult<\"press\">>(\"interact.press\", { sessionId, key, ref });\n }\n\n check(sessionId: string, ref: string): ReturnType<BrowserManagerLike[\"check\"]> {\n return this.client.call<CallResult<\"check\">>(\"interact.check\", { sessionId, ref });\n }\n\n uncheck(sessionId: string, ref: string): ReturnType<BrowserManagerLike[\"uncheck\"]> {\n return this.client.call<CallResult<\"uncheck\">>(\"interact.uncheck\", { sessionId, ref });\n }\n\n type(sessionId: string, ref: string, text: string, clear = false, submit = false): ReturnType<BrowserManagerLike[\"type\"]> {\n return this.client.call<CallResult<\"type\">>(\"interact.type\", { sessionId, ref, text, clear, submit });\n }\n\n select(sessionId: string, ref: string, values: string[]): ReturnType<BrowserManagerLike[\"select\"]> {\n return this.client.call<CallResult<\"select\">>(\"interact.select\", { sessionId, ref, values });\n }\n\n scroll(sessionId: string, dy: number, ref?: string): ReturnType<BrowserManagerLike[\"scroll\"]> {\n return this.client.call<CallResult<\"scroll\">>(\"interact.scroll\", { sessionId, dy, ref });\n }\n\n scrollIntoView(sessionId: string, ref: string): ReturnType<BrowserManagerLike[\"scrollIntoView\"]> {\n return this.client.call<CallResult<\"scrollIntoView\">>(\"interact.scrollIntoView\", { sessionId, ref });\n }\n\n domGetHtml(sessionId: string, ref: string, maxChars = 8000): ReturnType<BrowserManagerLike[\"domGetHtml\"]> {\n return this.client.call<CallResult<\"domGetHtml\">>(\"dom.getHtml\", { sessionId, ref, maxChars });\n }\n\n domGetText(sessionId: string, ref: string, maxChars = 8000): ReturnType<BrowserManagerLike[\"domGetText\"]> {\n return this.client.call<CallResult<\"domGetText\">>(\"dom.getText\", { sessionId, ref, maxChars });\n }\n\n domGetAttr(sessionId: string, ref: string, name: string): ReturnType<BrowserManagerLike[\"domGetAttr\"]> {\n return this.client.call<CallResult<\"domGetAttr\">>(\"dom.getAttr\", { sessionId, ref, name });\n }\n\n domGetValue(sessionId: string, ref: string): ReturnType<BrowserManagerLike[\"domGetValue\"]> {\n return this.client.call<CallResult<\"domGetValue\">>(\"dom.getValue\", { sessionId, ref });\n }\n\n domIsVisible(sessionId: string, ref: string): ReturnType<BrowserManagerLike[\"domIsVisible\"]> {\n return this.client.call<CallResult<\"domIsVisible\">>(\"dom.isVisible\", { sessionId, ref });\n }\n\n domIsEnabled(sessionId: string, ref: string): ReturnType<BrowserManagerLike[\"domIsEnabled\"]> {\n return this.client.call<CallResult<\"domIsEnabled\">>(\"dom.isEnabled\", { sessionId, ref });\n }\n\n domIsChecked(sessionId: string, ref: string): ReturnType<BrowserManagerLike[\"domIsChecked\"]> {\n return this.client.call<CallResult<\"domIsChecked\">>(\"dom.isChecked\", { sessionId, ref });\n }\n\n clonePage(sessionId: string): Promise<ReactExport> {\n return this.client.call(\"export.clonePage\", { sessionId }) as Promise<ReactExport>;\n }\n\n cloneComponent(sessionId: string, ref: string): Promise<ReactExport> {\n return this.client.call(\"export.cloneComponent\", { sessionId, ref }) as Promise<ReactExport>;\n }\n\n perfMetrics(sessionId: string): ReturnType<BrowserManagerLike[\"perfMetrics\"]> {\n return this.client.call<CallResult<\"perfMetrics\">>(\"devtools.perf\", { sessionId });\n }\n\n screenshot(sessionId: string, path?: string): ReturnType<BrowserManagerLike[\"screenshot\"]> {\n return this.client.call<CallResult<\"screenshot\">>(\"page.screenshot\", { sessionId, path });\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 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 { 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 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 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\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 } catch {\n this.lastStatus = emptyStatus;\n this.lastCdpUrl = null;\n this.lastAnnotationUrl = null;\n this.lastOpsUrl = 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","export 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, call the OpenCode skill tool early (skill(\"<skill-name>\", topic?)) and load only the most relevant skill before using browser tools. If unsure which skill applies, check the available skills first.`;\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, 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 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 = `ws://127.0.0.1:${relayPort}/${extensionLegacy ? \"cdp\" : \"ops\"}`;\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\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 ? `ws://127.0.0.1:${fallbackPort}/${extensionLegacy ? \"cdp\" : \"ops\"}` : 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 = 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 if (usedRelay && args.startUrl && result.activeTargetId) {\n await deps.manager.goto(result.sessionId, args.startUrl, \"load\", 30000);\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 };\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): string {\n return JSON.stringify({\n ok: false,\n error: {\n message,\n code\n }\n });\n}\n\nexport function serializeError(error: unknown): { message: string } {\n if (error instanceof Error) {\n return { message: error.message };\n }\n return { message: \"Unknown error\" };\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\nfunction normalizeRelayEndpoint(\n wsEndpoint: string | undefined,\n path: \"cdp\" | \"ops\",\n allowBase: boolean\n): string | null {\n if (!wsEndpoint) return null;\n try {\n const url = new URL(wsEndpoint);\n if (url.protocol !== \"ws:\" && url.protocol !== \"wss:\") return null;\n if (url.hostname !== \"127.0.0.1\" && url.hostname !== \"localhost\") return null;\n if (!url.port || !/^\\d+$/.test(url.port)) return null;\n const normalizedPath = url.pathname.endsWith(\"/\") ? url.pathname.slice(0, -1) : url.pathname;\n if (!allowBase && normalizedPath === \"\") return null;\n if (normalizedPath && normalizedPath !== `/${path}`) return null;\n return `${url.protocol}//${url.hostname}:${url.port}/${path}`;\n } catch {\n return null;\n }\n}\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 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 hasExplicitCdp = Boolean(wsEndpoint || args.host || args.port);\n const relayUrl = extensionLegacy ? deps.relay?.getCdpUrl() ?? null : deps.relay?.getOpsUrl?.() ?? null;\n const normalizedOpsEndpoint = normalizeRelayEndpoint(wsEndpoint, \"ops\", true);\n const normalizedLegacyEndpoint = normalizeRelayEndpoint(wsEndpoint, \"cdp\", extensionLegacy);\n if (normalizedLegacyEndpoint && !extensionLegacy) {\n return failure(\"Legacy extension relay (/cdp) requires extensionLegacy=true.\", \"extension_legacy_required\");\n }\n const relayEndpoint = relayUrl && wsEndpoint === relayUrl\n ? relayUrl\n : extensionLegacy\n ? normalizedLegacyEndpoint ?? normalizedOpsEndpoint\n : normalizedOpsEndpoint;\n let result;\n if (relayEndpoint || (!hasExplicitCdp && relayUrl)) {\n result = await deps.manager.connectRelay(relayEndpoint ?? relayUrl ?? \"\");\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 });\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 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 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 );\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 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 );\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 );\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 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 );\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 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 ref: z.string().describe(\"Element ref\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.click(args.sessionId, args.ref);\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 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);\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 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);\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 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);\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 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);\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 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 );\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 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);\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 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);\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 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);\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 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 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 );\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 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 );\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 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);\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 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);\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 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);\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 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);\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 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);\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 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: \"Return best-practice prompting guidance for OpenDevBrowser.\",\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 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 },\n async execute(args) {\n try {\n const result = await deps.manager.clonePage(args.sessionId);\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 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);\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 },\n async execute(args) {\n try {\n const result = await deps.manager.perfMetrics(args.sessionId);\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 path: z.string().optional().describe(\"Optional output file path\")\n },\n async execute(args) {\n try {\n const result = await deps.manager.screenshot(args.sessionId, args.path);\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\";\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 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.transport ?? \"auto\";\n if (transport === \"relay\") {\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 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 !== \"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 { ok } from \"./response\";\n\nexport function createSkillListTool(deps: ToolDeps): ToolDefinition {\n return tool({\n description: \"List available skills from OpenCode skill directories (compatibility wrapper)\",\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({ skills: skillList, count: skillList.length });\n }\n });\n}\n","import { tool } from \"@opencode-ai/plugin\";\nimport type { ToolDefinition } from \"@opencode-ai/plugin\";\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 specific skill by name from OpenCode skill directories (compatibility wrapper)\",\n args: {\n name: z.string().describe(\"Name of the skill to load (e.g., 'login-automation', '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 { 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 { 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 { 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 { createClonePageTool } from \"./clone_page\";\nimport { createCloneComponentTool } from \"./clone_component\";\nimport { createPerfTool } from \"./perf\";\nimport { createScreenshotTool } from \"./screenshot\";\nimport { createAnnotateTool } from \"./annotate\";\nimport { createSkillListTool } from \"./skill_list\";\nimport { createSkillLoadTool } from \"./skill_load\";\n\nexport function createTools(deps: ToolDeps): Record<string, ToolDefinition> {\n const wrap = (definition: ToolDefinition): ToolDefinition => {\n if (!deps.ensureHub) 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(createLaunchTool(deps)),\n opendevbrowser_connect: wrap(createConnectTool(deps)),\n opendevbrowser_disconnect: wrap(createDisconnectTool(deps)),\n opendevbrowser_status: wrap(createStatusTool(deps)),\n opendevbrowser_targets_list: wrap(createTargetsListTool(deps)),\n opendevbrowser_target_use: wrap(createTargetUseTool(deps)),\n opendevbrowser_target_new: wrap(createTargetNewTool(deps)),\n opendevbrowser_target_close: wrap(createTargetCloseTool(deps)),\n opendevbrowser_page: wrap(createPageTool(deps)),\n opendevbrowser_list: wrap(createListTool(deps)),\n opendevbrowser_close: wrap(createCloseTool(deps)),\n opendevbrowser_goto: wrap(createGotoTool(deps)),\n opendevbrowser_wait: wrap(createWaitTool(deps)),\n opendevbrowser_snapshot: wrap(createSnapshotTool(deps)),\n opendevbrowser_click: wrap(createClickTool(deps)),\n opendevbrowser_hover: wrap(createHoverTool(deps)),\n opendevbrowser_press: wrap(createPressTool(deps)),\n opendevbrowser_check: wrap(createCheckTool(deps)),\n opendevbrowser_uncheck: wrap(createUncheckTool(deps)),\n opendevbrowser_type: wrap(createTypeTool(deps)),\n opendevbrowser_select: wrap(createSelectTool(deps)),\n opendevbrowser_scroll: wrap(createScrollTool(deps)),\n opendevbrowser_scroll_into_view: wrap(createScrollIntoViewTool(deps)),\n opendevbrowser_dom_get_html: wrap(createDomGetHtmlTool(deps)),\n opendevbrowser_dom_get_text: wrap(createDomGetTextTool(deps)),\n opendevbrowser_get_attr: wrap(createGetAttrTool(deps)),\n opendevbrowser_get_value: wrap(createGetValueTool(deps)),\n opendevbrowser_is_visible: wrap(createIsVisibleTool(deps)),\n opendevbrowser_is_enabled: wrap(createIsEnabledTool(deps)),\n opendevbrowser_is_checked: wrap(createIsCheckedTool(deps)),\n opendevbrowser_run: wrap(createRunTool(deps)),\n opendevbrowser_prompting_guide: wrap(createPromptingGuideTool(deps)),\n opendevbrowser_console_poll: wrap(createConsolePollTool(deps)),\n opendevbrowser_network_poll: wrap(createNetworkPollTool(deps)),\n opendevbrowser_clone_page: wrap(createClonePageTool(deps)),\n opendevbrowser_clone_component: wrap(createCloneComponentTool(deps)),\n opendevbrowser_perf: wrap(createPerfTool(deps)),\n opendevbrowser_screenshot: wrap(createScreenshotTool(deps)),\n opendevbrowser_annotate: wrap(createAnnotateTool(deps)),\n opendevbrowser_skill_list: wrap(createSkillListTool(deps)),\n opendevbrowser_skill_load: wrap(createSkillLoadTool(deps))\n };\n}\n","import type { Plugin } from \"@opencode-ai/plugin\";\nimport { createOpenDevBrowserCore } from \"./core\";\nimport { ScriptRunner } from \"./browser/script-runner\";\nimport { startDaemon } from \"./cli/daemon\";\nimport { DaemonClient } from \"./cli/daemon-client\";\nimport { RemoteManager } from \"./cli/remote-manager\";\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 {\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\";\n\nconst OpenDevBrowserPlugin: Plugin = async ({ directory, worktree }) => {\n const core = createOpenDevBrowserCore({ directory, worktree });\n const { config, configStore, skills, ensureRelay, cleanup, getExtensionPath } = core;\n let relay: RelayLike = core.relay;\n let manager = core.manager;\n let runner = core.runner;\n let annotationManager = core.annotationManager;\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 annotationManager,\n runner,\n config: configStore,\n skills,\n relay,\n getExtensionPath\n };\n\n const bindRemote = () => {\n if (!daemonClient) {\n daemonClient = new DaemonClient({ autoRenew: true });\n }\n manager = new RemoteManager(daemonClient);\n relay = new RemoteRelay(daemonClient);\n annotationManager.setRelay(relay);\n annotationManager.setBrowserManager(manager);\n runner = new ScriptRunner(manager);\n toolDeps.manager = manager;\n toolDeps.relay = relay;\n toolDeps.runner = runner;\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\n while (attempt < 2 && Date.now() < deadline) {\n attempt += 1;\n const status = await fetchDaemonStatusFromMetadata(currentConfig);\n if (status?.ok) {\n bindRemote();\n await relay?.refresh?.();\n return;\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 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 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 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":";;;;;;;;;;;AAUA,SAAS,sBAAsB,YAA6B;AAC1D,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,UAAU;AAC9B,UAAM,OAAO,IAAI,SAAS,SAAS,GAAG,IAAI,IAAI,SAAS,MAAM,GAAG,EAAE,IAAI,IAAI;AAC1E,WAAO,SAAS;AAAA,EAClB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,IAAM,gBAAN,MAAkD;AAAA,EAC/C;AAAA,EAER,YAAY,QAAsB;AAChC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,OAAO,SAAkE;AACvE,WAAO,KAAK,OAAO,KAA2B,kBAAkB,OAAkC;AAAA,EACpG;AAAA,EAEA,QAAQ,SAAoE;AAC1E,WAAO,KAAK,OAAO,KAA4B,mBAAmB,OAAkC;AAAA,EACtG;AAAA,EAEA,aAAa,YAAoE;AAC/E,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA,sBAAsB,UAAU,IAAI,EAAE,YAAY,iBAAiB,KAAK,IAAI,EAAE,WAAW;AAAA,IAC3F;AAAA,EACF;AAAA,EAEA,WAAW,WAAmB,eAAe,OAAqD;AAChG,WAAO,KAAK,OAAO,KAA+B,sBAAsB,EAAE,WAAW,aAAa,CAAC;AAAA,EACrG;AAAA,EAEA,OAAO,WAA6D;AAClE,WAAO,KAAK,OAAO,KAA2B,kBAAkB,EAAE,UAAU,CAAC;AAAA,EAC/E;AAAA,EAEA,KACE,WACA,KACA,YAAyD,QACzD,YAAY,KAC4B;AACxC,WAAO,KAAK,OAAO,KAAyB,YAAY,EAAE,WAAW,KAAK,WAAW,UAAU,CAAC;AAAA,EAClG;AAAA,EAEA,YACE,WACA,OACA,YAAY,KACmC;AAC/C,WAAO,KAAK,OAAO,KAAgC,YAAY,EAAE,WAAW,OAAO,UAAU,CAAC;AAAA,EAChG;AAAA,EAEA,WACE,WACA,KACA,QAA2C,YAC3C,YAAY,KACkC;AAC9C,WAAO,KAAK,OAAO,KAA+B,YAAY,EAAE,WAAW,KAAK,OAAO,UAAU,CAAC;AAAA,EACpG;AAAA,EAEA,SAAS,WAAmB,MAAiC,UAAkB,QAA6D;AAC1I,WAAO,KAAK,OAAO,KAA6B,gBAAgB,EAAE,WAAW,MAAM,UAAU,OAAO,CAAC;AAAA,EACvG;AAAA,EAEA,MAAM,WAAmB,KAAsD;AAC7E,WAAO,KAAK,OAAO,KAA0B,kBAAkB,EAAE,WAAW,IAAI,CAAC;AAAA,EACnF;AAAA,EAEA,MAAM,WAAmB,KAAsD;AAC7E,WAAO,KAAK,OAAO,KAA0B,kBAAkB,EAAE,WAAW,IAAI,CAAC;AAAA,EACnF;AAAA,EAEA,MAAM,WAAmB,KAAa,KAAuD;AAC3F,WAAO,KAAK,OAAO,KAA0B,kBAAkB,EAAE,WAAW,KAAK,IAAI,CAAC;AAAA,EACxF;AAAA,EAEA,MAAM,WAAmB,KAAsD;AAC7E,WAAO,KAAK,OAAO,KAA0B,kBAAkB,EAAE,WAAW,IAAI,CAAC;AAAA,EACnF;AAAA,EAEA,QAAQ,WAAmB,KAAwD;AACjF,WAAO,KAAK,OAAO,KAA4B,oBAAoB,EAAE,WAAW,IAAI,CAAC;AAAA,EACvF;AAAA,EAEA,KAAK,WAAmB,KAAa,MAAc,QAAQ,OAAO,SAAS,OAA+C;AACxH,WAAO,KAAK,OAAO,KAAyB,iBAAiB,EAAE,WAAW,KAAK,MAAM,OAAO,OAAO,CAAC;AAAA,EACtG;AAAA,EAEA,OAAO,WAAmB,KAAa,QAA4D;AACjG,WAAO,KAAK,OAAO,KAA2B,mBAAmB,EAAE,WAAW,KAAK,OAAO,CAAC;AAAA,EAC7F;AAAA,EAEA,OAAO,WAAmB,IAAY,KAAwD;AAC5F,WAAO,KAAK,OAAO,KAA2B,mBAAmB,EAAE,WAAW,IAAI,IAAI,CAAC;AAAA,EACzF;AAAA,EAEA,eAAe,WAAmB,KAA+D;AAC/F,WAAO,KAAK,OAAO,KAAmC,2BAA2B,EAAE,WAAW,IAAI,CAAC;AAAA,EACrG;AAAA,EAEA,WAAW,WAAmB,KAAa,WAAW,KAAoD;AACxG,WAAO,KAAK,OAAO,KAA+B,eAAe,EAAE,WAAW,KAAK,SAAS,CAAC;AAAA,EAC/F;AAAA,EAEA,WAAW,WAAmB,KAAa,WAAW,KAAoD;AACxG,WAAO,KAAK,OAAO,KAA+B,eAAe,EAAE,WAAW,KAAK,SAAS,CAAC;AAAA,EAC/F;AAAA,EAEA,WAAW,WAAmB,KAAa,MAA4D;AACrG,WAAO,KAAK,OAAO,KAA+B,eAAe,EAAE,WAAW,KAAK,KAAK,CAAC;AAAA,EAC3F;AAAA,EAEA,YAAY,WAAmB,KAA4D;AACzF,WAAO,KAAK,OAAO,KAAgC,gBAAgB,EAAE,WAAW,IAAI,CAAC;AAAA,EACvF;AAAA,EAEA,aAAa,WAAmB,KAA6D;AAC3F,WAAO,KAAK,OAAO,KAAiC,iBAAiB,EAAE,WAAW,IAAI,CAAC;AAAA,EACzF;AAAA,EAEA,aAAa,WAAmB,KAA6D;AAC3F,WAAO,KAAK,OAAO,KAAiC,iBAAiB,EAAE,WAAW,IAAI,CAAC;AAAA,EACzF;AAAA,EAEA,aAAa,WAAmB,KAA6D;AAC3F,WAAO,KAAK,OAAO,KAAiC,iBAAiB,EAAE,WAAW,IAAI,CAAC;AAAA,EACzF;AAAA,EAEA,UAAU,WAAyC;AACjD,WAAO,KAAK,OAAO,KAAK,oBAAoB,EAAE,UAAU,CAAC;AAAA,EAC3D;AAAA,EAEA,eAAe,WAAmB,KAAmC;AACnE,WAAO,KAAK,OAAO,KAAK,yBAAyB,EAAE,WAAW,IAAI,CAAC;AAAA,EACrE;AAAA,EAEA,YAAY,WAAkE;AAC5E,WAAO,KAAK,OAAO,KAAgC,iBAAiB,EAAE,UAAU,CAAC;AAAA,EACnF;AAAA,EAEA,WAAW,WAAmB,MAA6D;AACzF,WAAO,KAAK,OAAO,KAA+B,mBAAmB,EAAE,WAAW,KAAK,CAAC;AAAA,EAC1F;AAAA,EAEA,YAAY,WAAmB,UAAmB,MAAM,IAAwF;AAC9I,WAAO,KAAK,OAAO,KAAK,wBAAwB,EAAE,WAAW,UAAU,IAAI,CAAC;AAAA,EAI9E;AAAA,EAEA,YAAY,WAAmB,UAAmB,MAAM,IAAwF;AAC9I,WAAO,KAAK,OAAO,KAAK,wBAAwB,EAAE,WAAW,UAAU,IAAI,CAAC;AAAA,EAI9E;AAAA,EAEA,YAAY,WAAmB,cAAc,OAA0E;AACrH,WAAO,KAAK,OAAO,KAAK,gBAAgB,EAAE,WAAW,YAAY,CAAC;AAAA,EAIpE;AAAA,EAEA,UAAU,WAAmB,UAAqF;AAChH,WAAO,KAAK,OAAO,KAAK,eAAe,EAAE,WAAW,SAAS,CAAC;AAAA,EAKhE;AAAA,EAEA,UAAU,WAAmB,KAA6C;AACxE,WAAO,KAAK,OAAO,KAAK,eAAe,EAAE,WAAW,IAAI,CAAC;AAAA,EAC3D;AAAA,EAEA,YAAY,WAAmB,UAAiC;AAC9D,WAAO,KAAK,OAAO,KAAK,iBAAiB,EAAE,WAAW,SAAS,CAAC;AAAA,EAClE;AAAA,EAEA,KAAK,WAAmB,MAAc,KAA6F;AACjI,WAAO,KAAK,OAAO,KAAK,aAAa,EAAE,WAAW,MAAM,IAAI,CAAC;AAAA,EAM/D;AAAA,EAEA,UAAU,WAAgH;AACxH,WAAO,KAAK,OAAO,KAAK,aAAa,EAAE,UAAU,CAAC;AAAA,EAGpD;AAAA,EAEA,UAAU,WAAmB,MAA6B;AACxD,WAAO,KAAK,OAAO,KAAK,cAAc,EAAE,WAAW,KAAK,CAAC;AAAA,EAC3D;AAAA,EAEA,MAAM,SAAY,YAAoB,WAA0B,KAA8C;AAC5G,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACF;;;ACvNA,IAAM,cAA2B;AAAA,EAC/B,SAAS;AAAA,EACT,oBAAoB;AAAA,EACpB,4BAA4B;AAAA,EAC5B,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,oBAAoB;AAAA,IACpB,4BAA4B;AAAA,IAC5B,cAAc;AAAA,IACd,qBAAqB;AAAA,IACrB,cAAc;AAAA,IACd,iBAAiB;AAAA,EACnB;AACF;AAEO,IAAM,cAAN,MAAuC;AAAA,EACpC;AAAA,EACA,aAA0B;AAAA,EAC1B,aAA4B;AAAA,EAC5B,oBAAmC;AAAA,EACnC,aAA4B;AAAA,EAEpC,YAAY,QAAsB;AAChC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAM,UAAyB;AAC7B,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,OAAO,KAAkB,cAAc;AACjE,WAAK,aAAa;AAClB,YAAM,SAAS,MAAM,KAAK,OAAO,KAAoB,cAAc;AACnE,WAAK,aAAa,OAAO,WAAW,WAAW,SAAS;AACxD,YAAM,gBAAgB,MAAM,KAAK,OAAO,KAAoB,qBAAqB;AACjF,WAAK,oBAAoB,OAAO,kBAAkB,WAAW,gBAAgB;AAC7E,YAAM,SAAS,MAAM,KAAK,OAAO,KAAoB,cAAc;AACnE,WAAK,aAAa,OAAO,WAAW,WAAW,SAAS;AAAA,IAC1D,QAAQ;AACN,WAAK,aAAa;AAClB,WAAK,aAAa;AAClB,WAAK,oBAAoB;AACzB,WAAK,aAAa;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,SAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAA2B;AACzB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,mBAAkC;AAChC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAA2B;AACzB,WAAO,KAAK;AAAA,EACd;AACF;;;ACjEO,IAAM,qBAAqB;AAElC,IAAM,sBAAsB,GAAG,kBAAkB;AAK1C,SAAS,wBAAyC;AACvD,SAAO,EAAE,SAAS,OAAO,eAAe,KAAK;AAC/C;AAEO,SAAS,qBAAqB,OAA8B;AACjE,SAAO,MACJ,OAAO,CAAC,SAA2B,KAAK,SAAS,UAAU,OAAO,KAAK,SAAS,QAAQ,EACxF,IAAI,CAAC,SAAS,KAAK,IAAI,EACvB,KAAK,IAAI,EACT,KAAK;AACV;AAEO,SAAS,wBAAwB,MAAc,UAA6B;AACjF,QAAM,aAAa,KAAK,YAAY;AACpC,SAAO,SAAS,KAAK,CAAC,YAAY,WAAW,SAAS,QAAQ,YAAY,CAAC,CAAC;AAC9E;AAEO,SAAS,eAAe,OAAwB,OAAqB;AAC1E,QAAM,UAAU;AAChB,QAAM,gBAAgB;AACxB;AAEO,SAAS,gBAAgB,OAA8B;AAC5D,QAAM,UAAU;AAChB,QAAM,gBAAgB;AACxB;AAEO,SAAS,kBAAkB,OAAwB,OAAe,UAA2B;AAClG,MAAI,CAAC,MAAM,QAAS,QAAO;AAE3B,QAAM,cAAc,MAAM,iBAAiB;AAC3C,MAAI,CAAC,MAAM,iBAAiB,QAAQ,cAAc,UAAU;AAC1D,oBAAgB,KAAK;AACrB,WAAO;AAAA,EACT;AAEA,kBAAgB,KAAK;AACrB,SAAO;AACT;AAEO,SAAS,yBAAiC;AAC/C,SAAO;AACT;;;ACjDO,IAAM,0BAA0B;AAEvC,IAAM,oBAAoB;AAEnB,SAAS,6BAAmD;AACjE,SAAO,EAAE,SAAS,OAAO,eAAe,KAAK;AAC/C;AAEO,SAAS,6BAA6B,MAAc,UAA6B;AACtF,QAAM,aAAa,KAAK,YAAY;AACpC,SAAO,SAAS,KAAK,CAAC,YAAY,WAAW,SAAS,QAAQ,YAAY,CAAC,CAAC;AAC9E;AAEO,SAAS,oBAAoB,OAA6B,OAAqB;AACpF,QAAM,UAAU;AAChB,QAAM,gBAAgB;AACxB;AAEO,SAAS,qBAAqB,OAAmC;AACtE,QAAM,UAAU;AAChB,QAAM,gBAAgB;AACxB;AAEO,SAAS,uBACd,OACA,OACA,UACS;AACT,MAAI,CAAC,MAAM,QAAS,QAAO;AAE3B,QAAM,cAAc,MAAM,iBAAiB;AAC3C,MAAI,CAAC,MAAM,iBAAiB,QAAQ,cAAc,UAAU;AAC1D,yBAAqB,KAAK;AAC1B,WAAO;AAAA,EACT;AAEA,uBAAqB,KAAK;AAC1B,SAAO;AACT;AAEO,SAAS,4BAA4B,UAA2B;AACrE,QAAM,SAAS,UAAU,KAAK,KAAK;AACnC,SAAO,GAAG,uBAAuB,6CAA6C,MAAM;AACtF;;;AChDA,SAAS,YAAY;;;ACUd,SAAS,GAAsC,MAAiB;AACrE,SAAO,KAAK,UAAU,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC;AAC7C;AAEO,SAAS,QAAQ,SAAiB,MAAuB;AAC9D,SAAO,KAAK,UAAU;AAAA,IACpB,IAAI;AAAA,IACJ,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,eAAe,OAAqC;AAClE,MAAI,iBAAiB,OAAO;AAC1B,WAAO,EAAE,SAAS,MAAM,QAAQ;AAAA,EAClC;AACA,SAAO,EAAE,SAAS,gBAAgB;AACpC;;;ADxBA,IAAM,IAAI,KAAK;AAcR,SAAS,iBAAiB,MAAgC;AAC/D,SAAO,KAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,sCAAsC;AAAA,MAC9E,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,6BAA6B;AAAA,MACvE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mCAAmC;AAAA,MAC5E,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,iCAAiC;AAAA,MAC5E,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,oBAAoB;AAAA,MACnE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,uCAAuC;AAAA,MACvF,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,+CAA+C;AAAA,MAC5F,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,iCAAiC;AAAA,MAChF,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,kDAAkD;AAAA,MACnG,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,gDAAgD;AAAA,MAClG,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,uCAAuC;AAAA,IAC7F;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI,kBAAkB;AAEtB,aAAO,MAAM;AACX,YAAI;AACF,gBAAM,KAAK,OAAO,UAAU;AAC5B,gBAAM,SAAS,KAAK,OAAO,IAAI;AAC/B,gBAAM,kBAAkB,KAAK,oBAAoB;AACjD,cAAI,cAAc,KAAK,OAAO,OAAO;AACrC,cAAI,WAAW,kBAAkB,KAAK,OAAO,UAAU,KAAK,OAAO,KAAK,OAAO,YAAY,KAAK;AAChG,gBAAM,YAAY,aAAa;AAC/B,cAAI,CAAC,YAAY,YAAY,SAAS,GAAG;AACvC,uBAAW,kBAAkB,SAAS,IAAI,kBAAkB,QAAQ,KAAK;AAAA,UAC3E;AACA,gBAAM,gBAAgB,iBAAiB,KAAK,iBAAiB,GAAK;AAClE,gBAAM,mBAAmB,KAAK,aAAa;AAC3C,gBAAM,kBAAkB,QAAQ,KAAK,eAAe,gBAAgB;AACpE,gBAAM,kBAAkB,mBAAmB,OAAO;AAElD,cAAI,KAAK,oBAAoB,CAAC,iBAAiB;AAC7C,kBAAMA,gBAAe,oBAAoB,aAAa,OAAO,SAAS;AACtE,kBAAM,YAAY,MAAM,0BAA0B,KAAK,OAAOA,eAAc,aAAa;AACzF,gBAAI,WAAW;AACb,4BAAc,KAAK,OAAO,OAAO,KAAK;AACtC,yBAAW,kBAAkB,KAAK,OAAO,UAAU,KAAK,WAAW,KAAK,OAAO,YAAY,KAAK;AAAA,YAClG;AAAA,UACF;AAEA,gBAAM,eAAe,oBAAoB,aAAa,OAAO,SAAS;AACtE,gBAAM,sBAAsB,CAAC,oBAAoB,CAAC,YAAY,EAAE,aAAa,8BAA8B,aAAa;AACxH,gBAAM,iBAAiB,sBAAsB,MAAM,yBAAyB,YAAY,IAAI;AAC5F,cAAI,CAAC,UAAU;AACb,kBAAM,eAAe,YAAY,gBAAgB,IAAI,IAAI,gBAAgB,OAAO;AAChF,uBAAW,eAAe,kBAAkB,YAAY,IAAI,kBAAkB,QAAQ,KAAK,KAAK;AAAA,UAClG;AACA,gBAAM,iBAAiB;AAAA,YACrB,aACE,aAAa,8BACb,aAAa,sBACb,gBAAgB,8BAChB,gBAAgB;AAAA,UAEpB;AACA,cAAI,YAAY;AAChB,cAAI,SAGO;AAEX,cAAI,KAAK,iBAAiB,CAAC,gBAAgB;AACzC,kBAAM,cAAc,8BAA8B,4BAA4B;AAAA,cAC5E;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF,CAAC;AACD,gBAAI,MAAM,sBAAsB,YAAY,MAAM,iBAAiB,IAAI,GAAG;AACxE,gCAAkB;AAClB;AAAA,YACF;AACA,mBAAO,QAAQ,6BAA6B,YAAY,OAAO,GAAG,yBAAyB;AAAA,UAC7F;AAEA,cAAI,CAAC,iBAAiB;AACpB,gBAAI,CAAC,kBAAkB,CAAC,UAAU;AAChC,oBAAM,cAAc,8BAA8B,4BAA4B;AAAA,gBAC5E;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF,CAAC;AACD,kBAAI,MAAM,sBAAsB,YAAY,MAAM,iBAAiB,IAAI,GAAG;AACxE,kCAAkB;AAClB;AAAA,cACF;AACA,qBAAO,QAAQ,6BAA6B,YAAY,OAAO,GAAG,yBAAyB;AAAA,YAC7F;AACA,gBAAI;AACF,uBAAS,MAAM,KAAK,QAAQ,aAAa,QAAQ;AACjD,0BAAY;AAAA,YACd,SAAS,OAAO;AACd,oBAAM,eAAe,eAAe,KAAK,EAAE;AAC3C,oBAAM,eAAe,aAAa,YAAY,EAAE,SAAS,cAAc,KAAK,aAAa,SAAS,KAAK;AACvG,oBAAM,aAAa,kBAAkB,SAAS;AAC9C,oBAAM,sBAAsB,kBAAkB,MAAM,yBAAyB,YAAY;AACzF,oBAAM,cAAc;AAAA,gBAClB,eACI,4CAA4C,UAAU,oCACtD,sCAAsC,YAAY;AAAA,gBACtD;AAAA,kBACE;AAAA,kBACA;AAAA,kBACA,gBAAgB;AAAA,kBAChB;AAAA,gBACF;AAAA,cACF;AACA,kBAAI,MAAM,sBAAsB,YAAY,MAAM,iBAAiB,IAAI,GAAG;AACxE,kCAAkB;AAClB;AAAA,cACF;AACA,qBAAO,QAAQ,6BAA6B,YAAY,OAAO,GAAG,0BAA0B;AAAA,YAC9F;AAAA,UACF;AAEA,cAAI,CAAC,QAAQ;AACX,gBAAI;AACF,uBAAS,MAAM,KAAK,QAAQ,OAAO;AAAA,gBACjC,SAAS,KAAK;AAAA,gBACd,UAAU;AAAA,gBACV,UAAU,KAAK;AAAA,gBACf,YAAY,KAAK;AAAA,gBACjB,OAAO,KAAK;AAAA,gBACZ,gBAAgB,KAAK;AAAA,gBACrB,aAAa,KAAK;AAAA,cACpB,CAAC;AAAA,YACH,SAAS,OAAO;AACd,qBAAO,QAAQ,2BAA2B,KAAK,GAAG,eAAe;AAAA,YACnE;AAAA,UACF;AAEA,cAAI,aAAa,KAAK,YAAY,OAAO,gBAAgB;AACvD,kBAAM,KAAK,QAAQ,KAAK,OAAO,WAAW,KAAK,UAAU,QAAQ,GAAK;AAAA,UACxE;AAEA,gBAAM,WAAW,OAAO,YAAY,CAAC;AACrC,iBAAO,GAAG;AAAA,YACR,WAAW,OAAO;AAAA,YAClB,MAAM,OAAO;AAAA,YACb,mBAAmB,OAAO;AAAA,YAC1B,gBAAgB,OAAO;AAAA,YACvB,UAAU,SAAS,SAAS,WAAW;AAAA,UACzC,CAAC;AAAA,QACH,SAAS,OAAO;AACd,iBAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,eAAe;AAAA,QAC/D;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,IAAM,+BAA+B,CAAC,WAA2B;AAC/D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,6BAA6B,CAAC,UAA2B;AAC7D,QAAM,SAAS,eAAe,KAAK,EAAE;AACrC,SAAO;AAAA,IACL,2BAA2B,MAAM;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,sBAAsB;AAC5B,IAAM,oBAAoB;AAC1B,IAAM,oBAAoB;AAE1B,SAAS,iBAAiB,WAA2B;AACnD,MAAI,CAAC,OAAO,SAAS,SAAS,GAAG;AAC/B,WAAO;AAAA,EACT;AACA,SAAO,KAAK,IAAI,WAAW,mBAAmB;AAChD;AAEA,eAAe,0BACb,OACA,cACA,WACkB;AAClB,QAAM,QAAQ,KAAK,IAAI;AACvB,MAAI,QAAQ;AACZ,SAAO,KAAK,IAAI,IAAI,QAAQ,WAAW;AACrC,QAAI,OAAO,OAAO,EAAE,4BAA4B;AAC9C,aAAO;AAAA,IACT;AACA,UAAM,iBAAiB,MAAM,yBAAyB,YAAY;AAClE,QAAI,gBAAgB,4BAA4B;AAC9C,aAAO;AAAA,IACT;AACA,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,KAAK,CAAC;AACzD,YAAQ,KAAK,IAAI,QAAQ,GAAG,iBAAiB;AAAA,EAC/C;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,aAAsC,YAAmC;AACpG,QAAM,YAAY,aAAa;AAC/B,MAAI,YAAY,SAAS,EAAG,QAAO;AACnC,MAAI,YAAY,UAAU,EAAG,QAAO;AACpC,SAAO;AACT;AAEA,SAAS,YAAY,MAA+B;AAClD,SAAO,OAAO,SAAS,YAAY,OAAO,UAAU,IAAI,KAAK,OAAO,KAAK,QAAQ;AACnF;AAEA,SAAS,gBAAgB,OAAmC;AAC1D,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,MAAM,MAAM,GAAG,CAAC;AACzB;AAEA,SAAS,eAAe,UAAiC;AACvD,SAAO,YAAY;AACrB;AAEA,SAAS,kBAAkB,QAAyC;AAClE,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,QAAQ,UAAU;AAAA,IAClC;AAAA,IACA,OAAO,QAAQ,SAAS,WAAW,OAAO,OAAO,IAAI,IAAI;AAAA,IACzD;AAAA,IACA,OAAO,QAAQ,QAAQ,kBAAkB,CAAC;AAAA,IAC1C;AAAA,IACA,OAAO,QAAQ,QAAQ,0BAA0B,CAAC;AAAA,IAClD;AAAA,IACA,OAAO,QAAQ,QAAQ,YAAY,CAAC;AAAA,IACpC;AAAA,IACA,OAAO,QAAQ,QAAQ,YAAY,CAAC;AAAA,IACpC;AAAA,IACA,OAAO,QAAQ,QAAQ,eAAe,CAAC;AAAA,IACvC;AAAA,EACF,EAAE,KAAK,EAAE;AACX;AAEA,SAAS,qBAAqB,QAAoC,MAA6B;AAC7F,QAAM,QAAQ,QAAQ;AACtB,MAAI,CAAC,QAAQ;AACX,WAAO,YAAY,KAAK;AAAA,EAC1B;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB,OAAO,UAAU;AAAA,IACjC;AAAA,IACA,OAAO,QAAQ,OAAO,kBAAkB,CAAC;AAAA,IACzC;AAAA,IACA,OAAO,QAAQ,OAAO,0BAA0B,CAAC;AAAA,IACjD;AAAA,IACA,OAAO,QAAQ,OAAO,YAAY,CAAC;AAAA,IACnC;AAAA,IACA,OAAO,QAAQ,OAAO,YAAY,CAAC;AAAA,IACnC;AAAA,IACA,OAAO,QAAQ,OAAO,eAAe,CAAC;AAAA,EACxC,EAAE,KAAK,EAAE;AACX;AAOA,SAAS,8BACP,YACA,QAM0B;AAC1B,QAAM,WAAW,QAAQ,OAAO,aAAa,kBAAkB;AAC/D,QAAM,cAAc,QAAQ,OAAO,gBAAgB,kBAAkB;AACrE,MAAI,OAAO;AACX,MAAI,OAAO,aAAa,MAAM;AAC5B,WAAO;AAAA,EACT,WAAW,OAAO,kBAAkB,CAAC,YAAY,aAAa;AAC5D,WAAO;AAAA,EACT,WAAW,OAAO,aAAa,cAAc,OAAO,gBAAgB,cAC/D,OAAO,YAAY,eAAe,OAAO,eAAe,YAAY;AACvE,WAAO;AAAA,EACT;AACA,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,eAAe,OAAO,QAAQ;AAAA,IAC9B;AAAA,IACA,kBAAkB,OAAO,WAAW;AAAA,IACpC;AAAA,IACA,qBAAqB,OAAO,gBAAgB,OAAO,YAAY;AAAA,IAC/D;AAAA,IACA;AAAA,EACF,EAAE,KAAK,EAAE;AACT,SAAO,EAAE,SAAS,CAAC,YAAY,WAAW,EAAE,KAAK,IAAI,GAAG,KAAK;AAC/D;AAEA,eAAe,sBACb,MACA,WACA,MACkB;AAClB,MAAI,UAAW,QAAO;AACtB,MAAI,SAAS,oBAAqB,QAAO;AACzC,MAAI,CAAC,KAAK,UAAW,QAAO;AAC5B,QAAM,KAAK,UAAU;AACrB,QAAM,KAAK,OAAO,UAAU;AAC5B,SAAO;AACT;AAEA,eAAe,yBAAyB,MAA0D;AAChG,MAAI,CAAC,YAAY,IAAI,EAAG,QAAO;AAC/B,MAAI,OAAO,UAAU,WAAY,QAAO;AAExC,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,YAAY,WAAW,MAAM,WAAW,MAAM,GAAG,GAAG;AAC1D,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,oBAAoB,IAAI,WAAW,EAAE,QAAQ,WAAW,OAAO,CAAC;AAC7F,QAAI,CAAC,SAAS,GAAI,QAAO;AACzB,UAAM,UAAU,MAAM,SAAS,KAAK;AACpC,QAAI,CAAC,WAAW,OAAO,QAAQ,eAAe,SAAU,QAAO;AAC/D,WAAO;AAAA,MACL,YAAY,QAAQ;AAAA,MACpB,SAAS,QAAQ,QAAQ,OAAO;AAAA,MAChC,MAAM,OAAO,QAAQ,SAAS,WAAW,QAAQ,OAAO;AAAA,MACxD,oBAAoB,QAAQ,QAAQ,kBAAkB;AAAA,MACtD,4BAA4B,QAAQ,QAAQ,0BAA0B;AAAA,MACtE,cAAc,QAAQ,QAAQ,YAAY;AAAA,MAC1C,cAAc,QAAQ,QAAQ,YAAY;AAAA,MAC1C,iBAAiB,QAAQ,QAAQ,eAAe;AAAA,IAClD;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT,UAAE;AACA,iBAAa,SAAS;AAAA,EACxB;AACF;;;AEvXA,SAAS,QAAAC,aAAY;AAKrB,IAAMC,KAAIC,MAAK;AAEf,SAAS,uBACP,YACA,MACA,WACe;AACf,MAAI,CAAC,WAAY,QAAO;AACxB,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,UAAU;AAC9B,QAAI,IAAI,aAAa,SAAS,IAAI,aAAa,OAAQ,QAAO;AAC9D,QAAI,IAAI,aAAa,eAAe,IAAI,aAAa,YAAa,QAAO;AACzE,QAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,IAAI,EAAG,QAAO;AACjD,UAAM,iBAAiB,IAAI,SAAS,SAAS,GAAG,IAAI,IAAI,SAAS,MAAM,GAAG,EAAE,IAAI,IAAI;AACpF,QAAI,CAAC,aAAa,mBAAmB,GAAI,QAAO;AAChD,QAAI,kBAAkB,mBAAmB,IAAI,IAAI,GAAI,QAAO;AAC5D,WAAO,GAAG,IAAI,QAAQ,KAAK,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,EAC7D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,kBAAkB,MAAgC;AAChE,SAAOA,MAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,YAAYD,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uCAAuC;AAAA,MAClF,MAAMA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,+BAA+B;AAAA,MACpE,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,+BAA+B;AAAA,MAC1E,iBAAiBA,GAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,kDAAkD;AAAA,IACrG;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,KAAK,OAAO,UAAU;AAC5B,cAAM,aAAa,KAAK;AACxB,cAAM,kBAAkB,KAAK,oBAAoB;AACjD,cAAM,iBAAiB,QAAQ,cAAc,KAAK,QAAQ,KAAK,IAAI;AACnE,cAAM,WAAW,kBAAkB,KAAK,OAAO,UAAU,KAAK,OAAO,KAAK,OAAO,YAAY,KAAK;AAClG,cAAM,wBAAwB,uBAAuB,YAAY,OAAO,IAAI;AAC5E,cAAM,2BAA2B,uBAAuB,YAAY,OAAO,eAAe;AAC1F,YAAI,4BAA4B,CAAC,iBAAiB;AAChD,iBAAO,QAAQ,gEAAgE,2BAA2B;AAAA,QAC5G;AACA,cAAM,gBAAgB,YAAY,eAAe,WAC7C,WACA,kBACE,4BAA4B,wBAC5B;AACN,YAAI;AACJ,YAAI,iBAAkB,CAAC,kBAAkB,UAAW;AAClD,mBAAS,MAAM,KAAK,QAAQ,aAAa,iBAAiB,YAAY,EAAE;AAAA,QAC1E,OAAO;AACL,cAAI,CAAC,gBAAgB;AACnB,mBAAO,QAAQ,sFAAsF,yBAAyB;AAAA,UAChI;AACA,mBAAS,MAAM,KAAK,QAAQ,QAAQ;AAAA,YAClC;AAAA,YACA,MAAM,KAAK;AAAA,YACX,MAAM,KAAK;AAAA,UACb,CAAC;AAAA,QACH;AACA,eAAO,GAAG;AAAA,UACR,WAAW,OAAO;AAAA,UAClB,MAAM,OAAO;AAAA,UACb,mBAAmB,OAAO;AAAA,UAC1B,gBAAgB,OAAO;AAAA,UACvB,UAAU,OAAO,SAAS,SAAS,OAAO,WAAW;AAAA,QACvD,CAAC;AAAA,MACH,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,gBAAgB;AAAA,MAChE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC9EA,SAAS,QAAAE,aAAY;AAKrB,IAAMC,KAAIC,MAAK;AAER,SAAS,qBAAqB,MAAgC;AACnE,SAAOA,MAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,GAAE,OAAO,EAAE,SAAS,yCAAyC;AAAA,MACxE,cAAcA,GAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,sCAAsC;AAAA,IACtF;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,KAAK,QAAQ,WAAW,KAAK,WAAW,QAAQ,KAAK,YAAY,CAAC;AACxE,eAAO,GAAG,CAAC,CAAC;AAAA,MACd,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,mBAAmB;AAAA,MACnE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,oBAAoB;AAC7B,SAAS,SAAS,YAAY;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,QAAAE,aAAY;;;ACDd,IAAM,eAAe,CAAC,WAA0C;AACrE,SAAO,OAAO,eAAe,SAAS,OAAO,YAAY;AAC3D;;;ADMA,IAAMC,KAAIC,MAAK;AAEf,SAAS,oBAAwC;AAC/C,MAAI;AACF,UAAM,UAAU,QAAQ,cAAc,YAAY,GAAG,CAAC;AACtD,UAAM,aAAa;AAAA,MACjB,KAAK,SAAS,MAAM,MAAM,cAAc;AAAA,MACxC,KAAK,SAAS,MAAM,cAAc;AAAA,IACpC;AACA,eAAW,WAAW,YAAY;AAChC,UAAI;AACF,cAAM,MAAM,KAAK,MAAM,aAAa,SAAS,OAAO,CAAC;AACrD,YAAI,OAAO,IAAI,YAAY,UAAU;AACnC,iBAAO,IAAI;AAAA,QACb;AAAA,MACF,SAAS,OAAO;AACd,aAAK;AAAA,MACP;AAAA,IACF;AACA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,SAAK;AACL,WAAO;AAAA,EACT;AACF;AAEA,eAAe,mBAAmB,aAAkD;AAClF,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,YAAY,WAAW,MAAM,WAAW,MAAM,GAAG,GAAI;AAC3D,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,8BAA8B,WAAW,WAAW,EAAE,QAAQ,WAAW,OAAO,CAAC;AAC9G,QAAI,CAAC,SAAS,GAAI,QAAO;AACzB,UAAM,UAAU,MAAM,SAAS,KAAK;AACpC,WAAO,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU;AAAA,EACjE,SAAS,OAAO;AACd,YAAQ,KAAK,yCAAyC,KAAK;AAC3D,WAAO;AAAA,EACT,UAAE;AACA,iBAAa,SAAS;AAAA,EACxB;AACF;AAEO,SAAS,iBAAiB,MAAgC;AAC/D,SAAOA,MAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4CAA4C;AAAA,IACxF;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,KAAK,OAAO,IAAI;AAC/B,cAAM,aAAa,aAAa,MAAM;AACtC,cAAM,gBAAgB,KAAK,mBAAmB,KAAK;AACnD,cAAM,UAAU,kBAAkB;AAClC,YAAI;AACJ,YAAI,gBAAsG;AAE1G,YAAI,YAAY;AACd,gBAAM,eAAe,MAAM,8BAA8B;AACzD,cAAI,CAAC,cAAc;AACjB,mBAAO,QAAQ,8DAA8D,eAAe;AAAA,UAC9F;AACA,cAAI,KAAK,WAAW;AAClB,4BAAgB,MAAM,KAAK,QAAQ,OAAO,KAAK,SAAS;AAAA,UAC1D;AAEA,cAAI,OAAO,mBAAmB,SAAS;AACrC,kBAAM,SAAS,MAAM,mBAAmB,gBAAgB;AACxD,gBAAI,UAAU,WAAW,SAAS;AAChC,2BAAa,qBAAqB,OAAO,OAAO,MAAM;AAAA,YACxD;AAAA,UACF;AAEA,iBAAO,GAAG;AAAA,YACR,GAAI,iBAAiB,CAAC;AAAA,YACtB,QAAQ;AAAA,YACR,YAAY;AAAA,YACZ,eAAe,iBAAiB;AAAA,YAChC;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAI,CAAC,KAAK,WAAW;AACnB,iBAAO,QAAQ,iCAAiC,eAAe;AAAA,QACjE;AAEA,wBAAgB,MAAM,KAAK,QAAQ,OAAO,KAAK,SAAS;AAExD,YAAI,OAAO,mBAAmB,SAAS;AACrC,gBAAM,SAAS,MAAM,mBAAmB,gBAAgB;AACxD,cAAI,UAAU,WAAW,SAAS;AAChC,yBAAa,qBAAqB,OAAO,OAAO,MAAM;AAAA,UACxD;AAAA,QACF;AAEA,eAAO,GAAG;AAAA,UACR,MAAM,cAAc;AAAA,UACpB,gBAAgB,cAAc;AAAA,UAC9B,KAAK,cAAc;AAAA,UACnB,OAAO,cAAc;AAAA,UACrB,eAAe,iBAAiB;AAAA,UAChC;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,eAAe;AAAA,MAC/D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AExHA,SAAS,QAAAE,aAAY;AAKrB,IAAMC,KAAIC,MAAK;AAER,SAAS,sBAAsB,MAAgC;AACpE,SAAOA,MAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,GAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,aAAaA,GAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,qBAAqB;AAAA,IACpE;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,YAAY,KAAK,WAAW,QAAQ,KAAK,WAAW,CAAC;AACvF,eAAO,GAAG;AAAA,UACR,gBAAgB,OAAO;AAAA,UACvB,SAAS,OAAO;AAAA,QAClB,CAAC;AAAA,MACH,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,qBAAqB;AAAA,MACrE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC1BA,SAAS,QAAAE,aAAY;AAKrB,IAAMC,KAAIC,MAAK;AAER,SAAS,oBAAoB,MAAgC;AAClE,SAAOA,MAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,GAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,UAAUA,GAAE,OAAO,EAAE,SAAS,WAAW;AAAA,IAC3C;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,UAAU,KAAK,WAAW,KAAK,QAAQ;AACzE,eAAO,GAAG;AAAA,UACR,gBAAgB,OAAO;AAAA,UACvB,KAAK,OAAO;AAAA,UACZ,OAAO,OAAO;AAAA,QAChB,CAAC;AAAA,MACH,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,mBAAmB;AAAA,MACnE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC3BA,SAAS,QAAAE,aAAY;AAKrB,IAAMC,KAAIC,MAAK;AAER,SAAS,oBAAoB,MAAgC;AAClE,SAAOA,MAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,GAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,KAAKA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,sBAAsB;AAAA,IAC5D;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,UAAU,KAAK,WAAW,KAAK,GAAG;AACpE,eAAO,GAAG,EAAE,UAAU,OAAO,SAAS,CAAC;AAAA,MACzC,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,mBAAmB;AAAA,MACnE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,QAAAE,aAAY;AAKrB,IAAMC,KAAIC,MAAK;AAER,SAAS,sBAAsB,MAAgC;AACpE,SAAOA,MAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,GAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,UAAUA,GAAE,OAAO,EAAE,SAAS,WAAW;AAAA,IAC3C;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,KAAK,QAAQ,YAAY,KAAK,WAAW,KAAK,QAAQ;AAC5D,eAAO,GAAG,CAAC,CAAC;AAAA,MACd,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,qBAAqB;AAAA,MACrE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,QAAAE,aAAY;AAKrB,IAAMC,KAAIC,MAAK;AAER,SAAS,eAAe,MAAgC;AAC7D,SAAOA,MAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,GAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC1D,MAAMA,GAAE,OAAO,EAAE,SAAS,kBAAkB;AAAA,MAC5C,KAAKA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,sBAAsB;AAAA,IAC5D;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,KAAK,KAAK,WAAW,KAAK,MAAM,KAAK,GAAG;AAC1E,eAAO,GAAG;AAAA,UACR,UAAU,OAAO;AAAA,UACjB,SAAS,OAAO;AAAA,UAChB,KAAK,OAAO;AAAA,UACZ,OAAO,OAAO;AAAA,QAChB,CAAC;AAAA,MACH,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,aAAa;AAAA,MAC7D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC7BA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,eAAe,MAAgC;AAC7D,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,IAC5D;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,UAAU,KAAK,SAAS;AAC1D,eAAO,GAAG,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,MACnC,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,aAAa;AAAA,MAC7D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACtBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,gBAAgB,MAAgC;AAC9D,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC1D,MAAMA,IAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,IACjD;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,KAAK,QAAQ,UAAU,KAAK,WAAW,KAAK,IAAI;AACtD,eAAO,GAAG,CAAC,CAAC;AAAA,MACd,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,cAAc;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAEf,IAAM,kBAAkBD,IAAE,KAAK,CAAC,oBAAoB,QAAQ,aAAa,CAAC;AAEnE,SAAS,eAAe,MAAgC;AAC7D,SAAOC,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,KAAKA,IAAE,OAAO,EAAE,SAAS,oBAAoB;AAAA,MAC7C,WAAW,gBAAgB,SAAS,EAAE,SAAS,wBAAwB;AAAA,MACvE,WAAWA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,yBAAyB;AAAA,IAC3E;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ;AAAA,UAChC,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK,aAAa;AAAA,UAClB,KAAK,aAAa;AAAA,QACpB;AACA,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,aAAa;AAAA,MAC7D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AChCA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAEf,IAAMC,mBAAkBF,IAAE,KAAK,CAAC,oBAAoB,QAAQ,aAAa,CAAC;AAC1E,IAAM,kBAAkBA,IAAE,KAAK,CAAC,YAAY,WAAW,QAAQ,CAAC;AAEzD,SAAS,eAAe,MAAgC;AAC7D,SAAOC,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,OAAOE,iBAAgB,SAAS,EAAE,SAAS,wBAAwB;AAAA,MACnE,KAAKF,IAAE,OAAO,EAAE,SAAS,EAAE,SAAS,iBAAiB;AAAA,MACrD,OAAO,gBAAgB,SAAS,EAAE,SAAS,uBAAuB;AAAA,MAClE,WAAWA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,yBAAyB;AAAA,IAC3E;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,YAAI,KAAK,KAAK;AACZ,gBAAMG,UAAS,MAAM,KAAK,QAAQ;AAAA,YAChC,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK,SAAS;AAAA,YACd,KAAK,aAAa;AAAA,UACpB;AACA,iBAAO,GAAGA,OAAM;AAAA,QAClB;AAEA,YAAI,CAAC,KAAK,OAAO;AACf,iBAAO,QAAQ,+BAA+B,cAAc;AAAA,QAC9D;AAEA,cAAM,SAAS,MAAM,KAAK,QAAQ;AAAA,UAChC,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK,aAAa;AAAA,QACpB;AACA,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,aAAa;AAAA,MAC7D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC/CA,SAAS,QAAAC,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAEf,IAAM,eAAeD,IAAE,KAAK,CAAC,WAAW,aAAa,CAAC;AAE/C,SAAS,mBAAmB,MAAgC;AACjE,SAAOC,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,QAAQ,aAAa,SAAS,EAAE,SAAS,iBAAiB;AAAA,MAC1D,UAAUA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,oCAAoC;AAAA,MACnF,QAAQA,IAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAAA,IAC5D;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,KAAK,OAAO,IAAI;AAC/B,cAAM,SAAS,MAAM,KAAK,QAAQ;AAAA,UAChC,KAAK;AAAA,UACL,KAAK,UAAU;AAAA,UACf,KAAK,YAAY,OAAO,SAAS;AAAA,UACjC,KAAK;AAAA,QACP;AACA,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,iBAAiB;AAAA,MACjE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACjCA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,gBAAgB,MAAgC;AAC9D,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,KAAKA,IAAE,OAAO,EAAE,SAAS,aAAa;AAAA,IACxC;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,MAAM,KAAK,WAAW,KAAK,GAAG;AAChE,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,cAAc;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,gBAAgB,MAAgC;AAC9D,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC1D,KAAKA,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,IACtD;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,MAAM,KAAK,WAAW,KAAK,GAAG;AAChE,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,cAAc;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,gBAAgB,MAAgC;AAC9D,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC1D,KAAKA,IAAE,OAAO,EAAE,SAAS,gDAAgD;AAAA,MACzE,KAAKA,IAAE,OAAO,EAAE,SAAS,EAAE,SAAS,qCAAqC;AAAA,IAC3E;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,MAAM,KAAK,WAAW,KAAK,KAAK,KAAK,GAAG;AAC1E,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,cAAc;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACxBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,gBAAgB,MAAgC;AAC9D,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC1D,KAAKA,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,IACtD;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,MAAM,KAAK,WAAW,KAAK,GAAG;AAChE,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,cAAc;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,kBAAkB,MAAgC;AAChE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC1D,KAAKA,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,IACtD;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,QAAQ,KAAK,WAAW,KAAK,GAAG;AAClE,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,gBAAgB;AAAA,MAChE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,eAAe,MAAgC;AAC7D,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,KAAKA,IAAE,OAAO,EAAE,SAAS,aAAa;AAAA,MACtC,MAAMA,IAAE,OAAO,EAAE,SAAS,cAAc;AAAA,MACxC,OAAOA,IAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,qBAAqB;AAAA,MAC5D,QAAQA,IAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,0BAA0B;AAAA,IACpE;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ;AAAA,UAChC,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,QAAQ,KAAK,KAAK;AAAA,UAClB,QAAQ,KAAK,MAAM;AAAA,QACrB;AACA,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,aAAa;AAAA,MAC7D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AChCA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,iBAAiB,MAAgC;AAC/D,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,KAAKA,IAAE,OAAO,EAAE,SAAS,aAAa;AAAA,MACtC,QAAQA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS,kBAAkB;AAAA,IACzD;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,KAAK,QAAQ,OAAO,KAAK,WAAW,KAAK,KAAK,KAAK,MAAM;AAC/D,eAAO,GAAG,CAAC,CAAC;AAAA,MACd,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,eAAe;AAAA,MAC/D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACxBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,iBAAiB,MAAgC;AAC/D,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,IAAIA,IAAE,OAAO,EAAE,SAAS,wBAAwB;AAAA,MAChD,KAAKA,IAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gCAAgC;AAAA,IACtE;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,KAAK,QAAQ,OAAO,KAAK,WAAW,KAAK,IAAI,KAAK,GAAG;AAC3D,eAAO,GAAG,CAAC,CAAC;AAAA,MACd,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,eAAe;AAAA,MAC/D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACxBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,yBAAyB,MAAgC;AACvE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC1D,KAAKA,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,IACtD;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,eAAe,KAAK,WAAW,KAAK,GAAG;AACzE,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,yBAAyB;AAAA,MACzE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,qBAAqB,MAAgC;AACnE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,KAAKA,IAAE,OAAO,EAAE,SAAS,aAAa;AAAA,MACtC,UAAUA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,gBAAgB;AAAA,IACjE;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ;AAAA,UAChC,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK,YAAY;AAAA,QACnB;AACA,eAAO,GAAG;AAAA,UACR,KAAK,KAAK;AAAA,UACV,WAAW,OAAO;AAAA,UAClB,WAAW,OAAO;AAAA,QACpB,CAAC;AAAA,MACH,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,qBAAqB;AAAA,MACrE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AChCA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,qBAAqB,MAAgC;AACnE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,KAAKA,IAAE,OAAO,EAAE,SAAS,aAAa;AAAA,MACtC,UAAUA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,gBAAgB;AAAA,IACjE;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ;AAAA,UAChC,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK,YAAY;AAAA,QACnB;AACA,eAAO,GAAG;AAAA,UACR,KAAK,KAAK;AAAA,UACV,MAAM,OAAO;AAAA,UACb,WAAW,OAAO;AAAA,QACpB,CAAC;AAAA,MACH,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,qBAAqB;AAAA,MACrE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AChCA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,kBAAkB,MAAgC;AAChE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC1D,KAAKA,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MACpD,MAAMA,IAAE,OAAO,EAAE,SAAS,yCAAyC;AAAA,IACrE;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,WAAW,KAAK,WAAW,KAAK,KAAK,KAAK,IAAI;AAChF,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,iBAAiB;AAAA,MACjE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACxBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,mBAAmB,MAAgC;AACjE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC1D,KAAKA,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,IACtD;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,YAAY,KAAK,WAAW,KAAK,GAAG;AACtE,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,kBAAkB;AAAA,MAClE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,oBAAoB,MAAgC;AAClE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC1D,KAAKA,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,IACtD;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,aAAa,KAAK,WAAW,KAAK,GAAG;AACvE,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,mBAAmB;AAAA,MACnE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,oBAAoB,MAAgC;AAClE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC1D,KAAKA,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,IACtD;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,aAAa,KAAK,WAAW,KAAK,GAAG;AACvE,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,mBAAmB;AAAA,MACnE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,oBAAoB,MAAgC;AAClE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC1D,KAAKA,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,IACtD;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,aAAa,KAAK,WAAW,KAAK,GAAG;AACvE,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,mBAAmB;AAAA,MACnE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAEf,IAAM,aAAaD,IAAE,OAAO;AAAA,EAC1B,QAAQA,IAAE,OAAO,EAAE,SAAS,aAAa;AAAA,EACzC,MAAMA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,kBAAkB;AAChF,CAAC;AAEM,SAAS,cAAc,MAAgC;AAC5D,SAAOC,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,OAAOA,IAAE,MAAM,UAAU,EAAE,SAAS,kBAAkB;AAAA,MACtD,aAAaA,IAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAAA,MACrE,kBAAkBA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,qCAAqC;AAAA,IAC9F;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,QAAQ,eAAe,KAAK,OAAO,KAAK,gBAAgB;AAC9D,cAAM,SAAS,MAAM,KAAK,OAAO;AAAA,UAC/B,KAAK;AAAA,UACL;AAAA,UACA,KAAK,eAAe;AAAA,QACtB;AACA,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,YAAY;AAAA,MAC5D;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,eACP,OACA,kBAC2D;AAC3D,MAAI,CAAC,iBAAkB,QAAO;AAE9B,SAAO,MAAM,IAAI,CAAC,SAAS;AACzB,QAAI,KAAK,WAAW,WAAY,QAAO;AACvC,QAAI,KAAK,QAAQ,OAAO,KAAK,KAAK,aAAa,SAAU,QAAO;AAChE,WAAO;AAAA,MACL,GAAG;AAAA,MACH,MAAM;AAAA,QACJ,GAAG,KAAK;AAAA,QACR,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACtDA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,yBAAyB,MAAgC;AACvE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,OAAOD,IAAE,OAAO,EAAE,SAAS,EAAE,SAAS,6BAA6B;AAAA,IACrE;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,QAAQ,MAAM,KAAK,OAAO,kBAAkB,KAAK,KAAK;AAC5D,eAAO,GAAG,EAAE,MAAM,CAAC;AAAA,MACrB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,wBAAwB;AAAA,MACxE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACtBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,sBAAsB,MAAgC;AACpE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,UAAUA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,yBAAyB;AAAA,MACxE,KAAKA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,sBAAsB;AAAA,IAClE;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ;AAAA,UAChC,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK,OAAO;AAAA,QACd;AACA,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,qBAAqB;AAAA,MACrE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC5BA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,sBAAsB,MAAgC;AACpE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,UAAUA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,yBAAyB;AAAA,MACxE,KAAKA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,sBAAsB;AAAA,IAClE;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ;AAAA,UAChC,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK,OAAO;AAAA,QACd;AACA,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,qBAAqB;AAAA,MACrE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC5BA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,oBAAoB,MAAgC;AAClE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,IAC5D;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,UAAU,KAAK,SAAS;AAC1D,eAAO,GAAG,EAAE,WAAW,OAAO,WAAW,KAAK,OAAO,KAAK,UAAU,OAAO,SAAS,CAAC;AAAA,MACvF,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,mBAAmB;AAAA,MACnE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACtBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,yBAAyB,MAAgC;AACvE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC1D,KAAKA,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,IACtD;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,eAAe,KAAK,WAAW,KAAK,GAAG;AACzE,eAAO,GAAG,EAAE,WAAW,OAAO,WAAW,KAAK,OAAO,KAAK,UAAU,OAAO,SAAS,CAAC;AAAA,MACvF,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,wBAAwB;AAAA,MACxE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,eAAe,MAAgC;AAC7D,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,IAC5D;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,YAAY,KAAK,SAAS;AAC5D,eAAO,GAAG,EAAE,SAAS,OAAO,QAAQ,CAAC;AAAA,MACvC,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,aAAa;AAAA,MAC7D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACtBA,SAAS,QAAAE,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,qBAAqB,MAAgC;AACnE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,MAC1D,MAAMA,IAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,IAClE;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,WAAW,KAAK,WAAW,KAAK,IAAI;AACtE,eAAO,GAAG,MAAM;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,mBAAmB;AAAA,MACnE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,QAAAE,cAAY;AAMrB,IAAMC,MAAIC,OAAK;AACf,IAAM,uBAAuBD,IAAE,KAAK,CAAC,WAAW,QAAQ,MAAM,CAAC;AAC/D,IAAM,kBAAkBA,IAAE,KAAK,CAAC,QAAQ,UAAU,OAAO,CAAC;AAEnD,SAAS,mBAAmB,MAAgC;AACjE,SAAOC,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,WAAWD,IAAE,OAAO,EAAE,SAAS,YAAY;AAAA,MAC3C,WAAW,gBAAgB,SAAS,EAAE,SAAS,uCAAuC;AAAA,MACtF,UAAUA,IAAE,OAAO,EAAE,SAAS,EAAE,SAAS,oCAAoC;AAAA,MAC7E,OAAOA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,uCAAuC;AAAA,MACnF,KAAKA,IAAE,OAAO,EAAE,SAAS,EAAE,SAAS,wCAAwC;AAAA,MAC5E,gBAAgB,qBAAqB,SAAS,EAAE,SAAS,0CAA0C;AAAA,MACnG,OAAOA,IAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAAA,MAC/D,SAASA,IAAE,OAAO,EAAE,SAAS,EAAE,SAAS,oCAAoC;AAAA,MAC5E,WAAWA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,yBAAyB;AAAA,IAC3E;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,YAAY,KAAK,aAAa;AACpC,YAAI,cAAc,SAAS;AACzB,gBAAM,SAAS,MAAM,KAAK,QAAQ,OAAO,KAAK,SAAS;AACvD,cAAI,OAAO,SAAS,aAAa;AAC/B,mBAAO,QAAQ,+CAA+C,6BAA6B;AAAA,UAC7F;AAAA,QACF;AAEA,cAAM,WAAW,MAAM,KAAK,kBAAkB,kBAAkB;AAAA,UAC9D,WAAW,KAAK;AAAA,UAChB;AAAA,UACA,UAAU,KAAK;AAAA,UACf,OAAO,KAAK;AAAA,UACZ,KAAK,KAAK;AAAA,UACV,gBAAgB,KAAK,kBAAkB;AAAA,UACvC,OAAO,KAAK,SAAS;AAAA,UACrB,SAAS,KAAK;AAAA,UACd,WAAW,KAAK;AAAA,QAClB,CAAC;AAED,YAAI,SAAS,WAAW,QAAQ,CAAC,SAAS,SAAS;AACjD,gBAAME,WAAU,SAAS,OAAO,WAAW;AAC3C,gBAAM,OAAO,SAAS,OAAO,QAAQ;AACrC,iBAAO,QAAQA,UAAS,IAAI;AAAA,QAC9B;AAEA,cAAM,EAAE,SAAS,SAAS,YAAY,IAAI,MAAM,oBAAoB,SAAS,OAAO;AAEpF,eAAO,GAAG;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,SAAS,OAAO;AACd,eAAO,QAAQ,eAAe,KAAK,EAAE,SAAS,iBAAiB;AAAA,MACjE;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AChEA,SAAS,QAAAC,cAAY;AAKd,SAAS,oBAAoB,MAAgC;AAClE,SAAOC,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM,CAAC;AAAA,IACP,MAAM,UAAU;AACd,YAAM,SAAS,MAAM,KAAK,OAAO,WAAW;AAC5C,YAAM,YAAY,OAAO,IAAI,CAAC,OAAO;AAAA,QACnC,MAAM,EAAE;AAAA,QACR,aAAa,EAAE;AAAA,QACf,SAAS,EAAE;AAAA,MACb,EAAE;AACF,aAAO,GAAG,EAAE,QAAQ,WAAW,OAAO,UAAU,OAAO,CAAC;AAAA,IAC1D;AAAA,EACF,CAAC;AACH;;;ACnBA,SAAS,QAAAC,cAAY;AAKrB,IAAMC,MAAIC,OAAK;AAER,SAAS,oBAAoB,MAAgC;AAClE,SAAOA,OAAK;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,MAAMD,IAAE,OAAO,EAAE,SAAS,sEAAsE;AAAA,MAChG,OAAOA,IAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4CAA4C;AAAA,IACpF;AAAA,IACA,MAAM,QAAQ,MAAM;AAClB,UAAI;AACF,cAAM,UAAU,MAAM,KAAK,OAAO,UAAU,KAAK,MAAM,KAAK,KAAK;AACjE,eAAO,GAAG,EAAE,OAAO,KAAK,MAAM,OAAO,KAAK,OAAO,QAAQ,CAAC;AAAA,MAC5D,SAAS,OAAO;AACd,cAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,eAAO,QAAQ,yBAAyB,KAAK,IAAI,MAAM,OAAO,IAAI,iBAAiB;AAAA,MACrF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACoBO,SAAS,YAAY,MAAgD;AAC1E,QAAM,OAAO,CAAC,eAA+C;AAC3D,QAAI,CAAC,KAAK,UAAW,QAAO;AAC5B,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS,OAAO,MAAM,YAAY;AAChC,YAAI;AACF,gBAAM,KAAK,YAAY;AAAA,QACzB,QAAQ;AAAA,QAER;AACA,eAAO,WAAW,QAAQ,MAAM,OAAO;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,uBAAuB,KAAK,iBAAiB,IAAI,CAAC;AAAA,IAClD,wBAAwB,KAAK,kBAAkB,IAAI,CAAC;AAAA,IACpD,2BAA2B,KAAK,qBAAqB,IAAI,CAAC;AAAA,IAC1D,uBAAuB,KAAK,iBAAiB,IAAI,CAAC;AAAA,IAClD,6BAA6B,KAAK,sBAAsB,IAAI,CAAC;AAAA,IAC7D,2BAA2B,KAAK,oBAAoB,IAAI,CAAC;AAAA,IACzD,2BAA2B,KAAK,oBAAoB,IAAI,CAAC;AAAA,IACzD,6BAA6B,KAAK,sBAAsB,IAAI,CAAC;AAAA,IAC7D,qBAAqB,KAAK,eAAe,IAAI,CAAC;AAAA,IAC9C,qBAAqB,KAAK,eAAe,IAAI,CAAC;AAAA,IAC9C,sBAAsB,KAAK,gBAAgB,IAAI,CAAC;AAAA,IAChD,qBAAqB,KAAK,eAAe,IAAI,CAAC;AAAA,IAC9C,qBAAqB,KAAK,eAAe,IAAI,CAAC;AAAA,IAC9C,yBAAyB,KAAK,mBAAmB,IAAI,CAAC;AAAA,IACtD,sBAAsB,KAAK,gBAAgB,IAAI,CAAC;AAAA,IAChD,sBAAsB,KAAK,gBAAgB,IAAI,CAAC;AAAA,IAChD,sBAAsB,KAAK,gBAAgB,IAAI,CAAC;AAAA,IAChD,sBAAsB,KAAK,gBAAgB,IAAI,CAAC;AAAA,IAChD,wBAAwB,KAAK,kBAAkB,IAAI,CAAC;AAAA,IACpD,qBAAqB,KAAK,eAAe,IAAI,CAAC;AAAA,IAC9C,uBAAuB,KAAK,iBAAiB,IAAI,CAAC;AAAA,IAClD,uBAAuB,KAAK,iBAAiB,IAAI,CAAC;AAAA,IAClD,iCAAiC,KAAK,yBAAyB,IAAI,CAAC;AAAA,IACpE,6BAA6B,KAAK,qBAAqB,IAAI,CAAC;AAAA,IAC5D,6BAA6B,KAAK,qBAAqB,IAAI,CAAC;AAAA,IAC5D,yBAAyB,KAAK,kBAAkB,IAAI,CAAC;AAAA,IACrD,0BAA0B,KAAK,mBAAmB,IAAI,CAAC;AAAA,IACvD,2BAA2B,KAAK,oBAAoB,IAAI,CAAC;AAAA,IACzD,2BAA2B,KAAK,oBAAoB,IAAI,CAAC;AAAA,IACzD,2BAA2B,KAAK,oBAAoB,IAAI,CAAC;AAAA,IACzD,oBAAoB,KAAK,cAAc,IAAI,CAAC;AAAA,IAC5C,gCAAgC,KAAK,yBAAyB,IAAI,CAAC;AAAA,IACnE,6BAA6B,KAAK,sBAAsB,IAAI,CAAC;AAAA,IAC7D,6BAA6B,KAAK,sBAAsB,IAAI,CAAC;AAAA,IAC7D,2BAA2B,KAAK,oBAAoB,IAAI,CAAC;AAAA,IACzD,gCAAgC,KAAK,yBAAyB,IAAI,CAAC;AAAA,IACnE,qBAAqB,KAAK,eAAe,IAAI,CAAC;AAAA,IAC9C,2BAA2B,KAAK,qBAAqB,IAAI,CAAC;AAAA,IAC1D,yBAAyB,KAAK,mBAAmB,IAAI,CAAC;AAAA,IACtD,2BAA2B,KAAK,oBAAoB,IAAI,CAAC;AAAA,IACzD,2BAA2B,KAAK,oBAAoB,IAAI,CAAC;AAAA,EAC3D;AACF;;;ACtEA,IAAM,uBAA+B,OAAO,EAAE,WAAW,SAAS,MAAM;AACtE,QAAM,OAAO,yBAAyB,EAAE,WAAW,SAAS,CAAC;AAC7D,QAAM,EAAE,QAAQ,aAAa,QAAQ,aAAa,SAAS,iBAAiB,IAAI;AAChF,MAAI,QAAmB,KAAK;AAC5B,MAAI,UAAU,KAAK;AACnB,MAAI,SAAS,KAAK;AAClB,MAAI,oBAAoB,KAAK;AAC7B,MAAI,UAAwC;AAC5C,MAAI,eAAoC;AACxC,QAAM,kBAAkB,sBAAsB;AAC9C,QAAM,uBAAuB,2BAA2B;AAIxD,UAAQ;AAAA,IACN,sCAAsC,KAAK,SAAS,WAAW,OAAO,eAAe,QAAQ,aAAa,SAAS;AAAA,EACrH;AAEA,MAAI;AACF,qBAAiB;AAAA,EACnB,SAAS,OAAO;AAEd,YAAQ,KAAK,gCAAgC,iBAAiB,QAAQ,MAAM,UAAU,KAAK;AAAA,EAC7F;AAEA,QAAM,WAAqB;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,aAAa,MAAM;AACvB,QAAI,CAAC,cAAc;AACjB,qBAAe,IAAI,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,IACrD;AACA,cAAU,IAAI,cAAc,YAAY;AACxC,YAAQ,IAAI,YAAY,YAAY;AACpC,sBAAkB,SAAS,KAAK;AAChC,sBAAkB,kBAAkB,OAAO;AAC3C,aAAS,IAAI,aAAa,OAAO;AACjC,aAAS,UAAU;AACnB,aAAS,QAAQ;AACjB,aAAS,SAAS;AAAA,EACpB;AAEA,QAAM,YAAY,YAA2B;AAC3C,UAAM,gBAAgB,YAAY,IAAI;AACtC,QAAI,CAAC,aAAa,aAAa,GAAG;AAChC;AAAA,IACF;AACA,QAAI,CAAC,cAAc;AACjB,qBAAe,IAAI,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,IACrD;AAEA,UAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,QAAI,UAAU;AACd,QAAI,YAA0B;AAE9B,WAAO,UAAU,KAAK,KAAK,IAAI,IAAI,UAAU;AAC3C,iBAAW;AACX,YAAM,SAAS,MAAM,8BAA8B,aAAa;AAChE,UAAI,QAAQ,IAAI;AACd,mBAAW;AACX,cAAM,OAAO,UAAU;AACvB;AAAA,MACF;AACA,UAAI;AACF,cAAM,EAAE,KAAK,IAAI,MAAM,YAAY,EAAE,QAAQ,eAAe,WAAW,SAAS,CAAC;AACjF,kBAAU;AAAA,MACZ,SAAS,OAAO;AACd,oBAAY,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,MACtE;AACA,UAAI,KAAK,IAAI,IAAI,UAAU;AACzB,cAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG,CAAC;AAAA,MACzD;AAAA,IACF;AAEA,QAAI,WAAW;AACb,YAAM;AAAA,IACR;AACA,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAEA,WAAS,YAAY;AAErB,QAAM,aAAa,aAAa,MAAM;AACtC,MAAI,YAAY;AACd,eAAW;AACX,QAAI;AACF,YAAM,UAAU;AAAA,IAClB,SAAS,OAAO;AACd,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,cAAQ,KAAK,4CAA4C,OAAO,EAAE;AAAA,IACpE;AAAA,EACF,OAAO;AACL,UAAM,YAAY,OAAO,SAAS;AAAA,EACpC;AAEA,QAAM,aAAa,MAAM;AACvB,QAAI,SAAS;AACX,cAAQ,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC1B;AACA,kBAAc,eAAe,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAC7C,YAAQ;AAAA,EACV;AAEA,UAAQ,GAAG,UAAU,UAAU;AAC/B,UAAQ,GAAG,WAAW,UAAU;AAChC,UAAQ,GAAG,cAAc,UAAU;AAEnC,SAAO;AAAA,IACL,MAAM,YAAY,QAAQ;AAAA,IAC1B,gBAAgB,OAAO,QAAQ,WAAW;AACxC,YAAME,UAAS,YAAY,IAAI;AAC/B,UAAI,OAAO,QAAQ,SAAS,OAAQ;AAEpC,YAAM,OAAO,qBAAqB,OAAO,KAAK;AAC9C,UAAI,CAAC,KAAM;AAEX,UAAIA,QAAO,OAAO,MAAM,WAAW,wBAAwB,MAAMA,QAAO,OAAO,MAAM,QAAQ,GAAG;AAC9F,uBAAe,iBAAiB,KAAK,IAAI,CAAC;AAAA,MAC5C;AAEA,UAAIA,QAAO,WAAW,WAAWA,QAAO,WAAW,MAAM,SAAS;AAChE,YAAI,6BAA6B,MAAMA,QAAO,WAAW,MAAM,QAAQ,GAAG;AACxE,8BAAoB,sBAAsB,KAAK,IAAI,CAAC;AAAA,QACtD;AAAA,MACF;AAAA,IACF;AAAA,IACA,sCAAsC,OAAO,QAAQ,WAAW;AAC9D,YAAMA,UAAS,YAAY,IAAI;AAC/B,YAAM,gBAAgB,OAAO,UAAU,CAAC;AACxC,UAAI,cAAc;AAClB,UAAI,UAAU;AAEd,UAAIA,QAAO,OAAO,MAAM,SAAS;AAC/B,YAAI,cAAc,KAAK,CAAC,UAAU,MAAM,SAAS,kBAAkB,CAAC,GAAG;AACrE,0BAAgB,eAAe;AAAA,QACjC,WAAW,kBAAkB,iBAAiB,KAAK,IAAI,GAAGA,QAAO,OAAO,MAAM,QAAQ,GAAG;AACvF,wBAAc,CAAC,GAAG,aAAa,uBAAuB,CAAC;AACvD,oBAAU;AAAA,QACZ;AAAA,MACF;AAEA,UAAIA,QAAO,WAAW,WAAWA,QAAO,WAAW,MAAM,SAAS;AAChE,YAAI,cAAc,KAAK,CAAC,UAAU,MAAM,SAAS,uBAAuB,CAAC,GAAG;AAC1E,+BAAqB,oBAAoB;AAAA,QAC3C,WAAW;AAAA,UACT;AAAA,UACA,KAAK,IAAI;AAAA,UACTA,QAAO,WAAW,MAAM;AAAA,QAC1B,GAAG;AACD,wBAAc,CAAC,GAAG,aAAa,4BAA4BA,QAAO,WAAW,QAAQ,CAAC;AACtF,oBAAU;AAAA,QACZ;AAAA,MACF;AAEA,UAAI,SAAS;AACX,eAAO,SAAS;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,gBAAQ;","names":["observedPort","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","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","message","tool","tool","tool","z","tool","config"]}
|