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
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/errors.ts","../../src/cli/args.ts","../../src/cli/commands/registry.ts","../../src/cli/installers/global.ts","../../src/cli/utils/config.ts","../../src/utils/fs.ts","../../src/cli/templates/config.ts","../../src/cli/installers/local.ts","../../src/cli/installers/skills.ts","../../src/cli/utils/skills.ts","../../src/cli/commands/update.ts","../../src/cli/commands/uninstall.ts","../../src/cli/daemon.ts","../../src/cli/daemon-commands.ts","../../src/cli/commands/serve.ts","../../src/cli/commands/run.ts","../../src/cli/output.ts","../../src/cli/client.ts","../../src/cli/commands/session/launch.ts","../../src/cli/commands/session/connect.ts","../../src/cli/commands/session/disconnect.ts","../../src/cli/commands/session/status.ts","../../src/cli/commands/nav/goto.ts","../../src/cli/commands/nav/wait.ts","../../src/cli/commands/nav/snapshot.ts","../../src/cli/commands/interact/click.ts","../../src/cli/commands/interact/type.ts","../../src/cli/commands/interact/select.ts","../../src/cli/commands/interact/scroll.ts","../../src/cli/index.ts"],"sourcesContent":["import type { CommandResult } from \"./commands/types\";\n\nexport const EXIT_SUCCESS = 0;\nexport const EXIT_USAGE = 1;\nexport const EXIT_EXECUTION = 2;\nexport const EXIT_DISCONNECTED = 10;\n\nexport class CliError extends Error {\n exitCode: number;\n\n constructor(message: string, exitCode: number) {\n super(message);\n this.exitCode = exitCode;\n }\n}\n\nexport function createUsageError(message: string): CliError {\n return new CliError(message, EXIT_USAGE);\n}\n\nexport function createDisconnectedError(message: string): CliError {\n return new CliError(message, EXIT_DISCONNECTED);\n}\n\nexport function toCliError(error: unknown, fallbackExitCode = EXIT_EXECUTION): CliError {\n if (error instanceof CliError) {\n return error;\n }\n const message = error instanceof Error ? error.message : String(error);\n return new CliError(message, fallbackExitCode);\n}\n\nexport type ErrorPayload = {\n success: false;\n error: string;\n exitCode: number;\n};\n\nexport function formatErrorPayload(error: CliError): ErrorPayload {\n return {\n success: false,\n error: error.message,\n exitCode: error.exitCode\n };\n}\n\nexport function resolveExitCode(result: CommandResult): number | null {\n if (result.exitCode === null) {\n return null;\n }\n if (typeof result.exitCode === \"number\") {\n return result.exitCode;\n }\n return result.success ? EXIT_SUCCESS : EXIT_EXECUTION;\n}\n","import { createUsageError } from \"./errors\";\n\nexport type CliCommand = \"install\" | \"update\" | \"uninstall\" | \"help\" | \"version\" | \"serve\" | \"run\"\n | \"launch\" | \"connect\" | \"disconnect\" | \"status\"\n | \"goto\" | \"wait\" | \"snapshot\"\n | \"click\" | \"type\" | \"select\" | \"scroll\";\nexport type InstallMode = \"global\" | \"local\";\nexport type SkillsMode = \"global\" | \"local\" | \"none\";\nexport type OutputFormat = \"text\" | \"json\" | \"stream-json\";\n\nexport interface ParsedArgs {\n command: CliCommand;\n mode?: InstallMode;\n withConfig: boolean;\n noPrompt: boolean;\n noInteractive: boolean;\n quiet: boolean;\n outputFormat: OutputFormat;\n skillsMode: SkillsMode;\n fullInstall: boolean;\n rawArgs: string[];\n}\n\nconst SHORT_FLAGS: Record<string, string> = {\n \"-g\": \"--global\",\n \"-l\": \"--local\",\n \"-u\": \"--update\",\n \"-h\": \"--help\",\n \"-v\": \"--version\",\n \"-f\": \"--full\"\n};\n\nfunction expandShortFlags(args: string[]): string[] {\n return args.map((arg) => SHORT_FLAGS[arg] ?? arg);\n}\n\nfunction parseSkillsMode(args: string[]): SkillsMode {\n if (args.includes(\"--no-skills\")) {\n return \"none\";\n }\n if (args.includes(\"--skills-local\")) {\n return \"local\";\n }\n if (args.includes(\"--skills-global\")) {\n return \"global\";\n }\n return \"global\";\n}\n\nfunction parseOutputFormat(args: string[]): OutputFormat {\n const outputFlag = args.find((arg) => arg.startsWith(\"--output-format\"));\n if (!outputFlag) {\n return \"text\";\n }\n\n let value: string | undefined;\n if (outputFlag.includes(\"=\")) {\n value = outputFlag.split(\"=\", 2)[1];\n } else {\n const index = args.indexOf(outputFlag);\n value = index >= 0 ? args[index + 1] : undefined;\n }\n\n if (value === \"text\" || value === \"json\" || value === \"stream-json\") {\n return value;\n }\n\n throw createUsageError(`Invalid --output-format: ${value ?? \"missing\"}`);\n}\n\nexport function parseArgs(argv: string[]): ParsedArgs {\n let args = expandShortFlags(argv.slice(2));\n let commandOverride: CliCommand | null = null;\n\n if (args[0] && !args[0].startsWith(\"-\")) {\n const candidate = args[0];\n if (candidate === \"install\" || candidate === \"update\" || candidate === \"uninstall\" || candidate === \"help\" || candidate === \"version\" || candidate === \"serve\" || candidate === \"run\"\n || candidate === \"launch\" || candidate === \"connect\" || candidate === \"disconnect\" || candidate === \"status\"\n || candidate === \"goto\" || candidate === \"wait\" || candidate === \"snapshot\"\n || candidate === \"click\" || candidate === \"type\" || candidate === \"select\" || candidate === \"scroll\") {\n commandOverride = candidate;\n args = args.slice(1);\n } else {\n throw createUsageError(`Unknown command: ${candidate}`);\n }\n }\n const skillsMode = parseSkillsMode(args);\n const fullInstall = args.includes(\"--full\");\n const outputFormat = parseOutputFormat(args);\n\n if (commandOverride === \"help\" || args.includes(\"--help\") || args.includes(\"-h\")) {\n return {\n command: \"help\",\n withConfig: false,\n noPrompt: false,\n noInteractive: false,\n quiet: false,\n outputFormat,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n if (commandOverride === \"version\" || args.includes(\"--version\") || args.includes(\"-v\")) {\n return {\n command: \"version\",\n withConfig: false,\n noPrompt: false,\n noInteractive: false,\n quiet: false,\n outputFormat,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n if (commandOverride === \"update\" || args.includes(\"--update\")) {\n const mode = args.includes(\"--global\") ? \"global\" : args.includes(\"--local\") ? \"local\" : undefined;\n return {\n command: \"update\",\n mode,\n withConfig: false,\n noPrompt: false,\n noInteractive: false,\n quiet: false,\n outputFormat,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n if (commandOverride === \"uninstall\" || args.includes(\"--uninstall\")) {\n const mode = args.includes(\"--global\") ? \"global\" : args.includes(\"--local\") ? \"local\" : undefined;\n const noPrompt = args.includes(\"--no-prompt\") || args.includes(\"--no-interactive\");\n return {\n command: \"uninstall\",\n mode,\n withConfig: false,\n noPrompt,\n noInteractive: noPrompt,\n quiet: args.includes(\"--quiet\"),\n outputFormat,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n const withConfig = args.includes(\"--with-config\") || fullInstall;\n const noPrompt = args.includes(\"--no-prompt\") || args.includes(\"--no-interactive\");\n const noInteractive = args.includes(\"--no-interactive\") || noPrompt;\n const quiet = args.includes(\"--quiet\");\n\n let mode: InstallMode | undefined;\n if (args.includes(\"--global\")) {\n mode = \"global\";\n } else if (args.includes(\"--local\")) {\n mode = \"local\";\n } else if (noPrompt) {\n mode = \"global\";\n }\n\n const validFlags = new Set([\n \"--global\", \"--local\", \"--update\", \"--uninstall\",\n \"--help\", \"--version\", \"--with-config\", \"--no-prompt\",\n \"--no-interactive\", \"--quiet\", \"--output-format\",\n \"--full\",\n \"--port\", \"--token\", \"--stop\",\n \"--script\", \"--headless\", \"--profile\", \"--persist-profile\", \"--chrome-path\", \"--start-url\", \"--flag\",\n \"--session-id\", \"--close-browser\", \"--ws-endpoint\", \"--host\", \"--cdp-port\",\n \"--url\", \"--wait-until\", \"--timeout-ms\", \"--ref\", \"--state\", \"--until\", \"--mode\", \"--max-chars\", \"--cursor\",\n \"--text\", \"--clear\", \"--submit\", \"--values\", \"--dy\",\n \"--no-extension\", \"--extension-only\", \"--wait-for-extension\", \"--wait-timeout-ms\",\n \"--skills-global\", \"--skills-local\", \"--no-skills\"\n ]);\n \n for (const arg of args) {\n if (arg.startsWith(\"--\") && !validFlags.has(arg)) {\n throw createUsageError(`Unknown flag: ${arg}`);\n }\n if (arg.startsWith(\"-\") && !arg.startsWith(\"--\") && !SHORT_FLAGS[arg]) {\n throw createUsageError(`Unknown flag: ${arg}`);\n }\n }\n\n return {\n command: commandOverride ?? \"install\",\n mode,\n withConfig,\n noPrompt,\n noInteractive,\n quiet,\n outputFormat,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n}\n\nexport function getHelpText(): string {\n return `\nOpenDevBrowser CLI - Install and manage the OpenDevBrowser plugin\n\nUSAGE:\n npx opendevbrowser [command] [options]\n\nCOMMANDS:\n install Install the plugin (default if no command specified)\n update Clear cached plugin to trigger reinstall\n uninstall Remove plugin from config\n serve Start or stop the local daemon\n run Execute a JSON script in a single process\n launch Launch a managed browser session via daemon\n connect Connect to an existing browser via daemon\n disconnect Disconnect a daemon session\n status Get daemon session status\n goto Navigate current session to a URL\n wait Wait for load or a ref to appear\n snapshot Capture a snapshot of the active page\n click Click an element by ref\n type Type into an element by ref\n select Select values in a select by ref\n scroll Scroll the page or element by ref\n help Show this help message\n version Show version\n\nALIASES:\n --update, -u Same as update\n --uninstall Same as uninstall\n --help, -h Same as help\n --version, -v Same as version\n\nINSTALL OPTIONS:\n --global, -g Install to ~/.config/opencode/opencode.json\n --local, -l Install to ./opencode.json (project-local)\n --with-config Also create opendevbrowser.jsonc with defaults\n --full, -f Create config and pre-extract extension assets\n --no-prompt Skip prompts, use defaults (global install)\n --no-interactive Alias of --no-prompt\n --quiet Suppress non-error output\n --output-format Output format: text (default), json, stream-json\n --skills-global Install bundled skills to ~/.config/opencode/skill (default)\n --skills-local Install bundled skills to ./.opencode/skill\n --no-skills Skip installing bundled skills\n\nEXAMPLES:\n npx opendevbrowser # Interactive install\n npx opendevbrowser --global # Global install\n npx opendevbrowser --local # Project install\n npx opendevbrowser --full # Install + config + extension assets\n npx opendevbrowser -g --with-config # Global + config file\n npx opendevbrowser --skills-local # Install skills locally\n npx opendevbrowser --no-skills # Skip skill installation\n npx opendevbrowser --update # Update plugin\n npx opendevbrowser --uninstall --global # Remove from global config\n`.trim();\n}\n\nexport function detectOutputFormat(argv: string[]): OutputFormat {\n const args = expandShortFlags(argv.slice(2));\n try {\n return parseOutputFormat(args);\n } catch {\n return \"text\";\n }\n}\n\nexport function detectQuiet(argv: string[]): boolean {\n const args = expandShortFlags(argv.slice(2));\n return args.includes(\"--quiet\");\n}\n","import type { CommandDefinition } from \"./types\";\n\nconst registry = new Map<string, CommandDefinition>();\n\nexport function registerCommand(definition: CommandDefinition): void {\n registry.set(definition.name, definition);\n}\n\nexport function getCommand(name: string): CommandDefinition | undefined {\n return registry.get(name);\n}\n\nexport function listCommands(): CommandDefinition[] {\n return Array.from(registry.values());\n}\n","import * as fs from \"fs\";\nimport {\n getGlobalConfigPath,\n readConfig,\n hasPlugin,\n ensureDir,\n updateConfigContent\n} from \"../utils/config\";\nimport { createPluginConfig } from \"../templates/config\";\n\nexport interface InstallResult {\n success: boolean;\n message: string;\n configPath: string;\n created: boolean;\n alreadyInstalled: boolean;\n}\n\nexport function installGlobal(withConfig: boolean = false): InstallResult {\n const configPath = getGlobalConfigPath();\n\n try {\n const { content, config } = readConfig(configPath);\n\n if (hasPlugin(config)) {\n return {\n success: true,\n message: `opendevbrowser is already installed in ${configPath}`,\n configPath,\n created: false,\n alreadyInstalled: true\n };\n }\n\n const newContent = updateConfigContent(content, \"opendevbrowser\");\n\n ensureDir(configPath.replace(/[/\\\\][^/\\\\]+$/, \"\"));\n fs.writeFileSync(configPath, newContent, \"utf-8\");\n\n if (withConfig) {\n createPluginConfig(\"global\");\n }\n\n return {\n success: true,\n message: `Added opendevbrowser to ${configPath}`,\n configPath,\n created: content.trim() === \"\",\n alreadyInstalled: false\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to install globally: ${message}`,\n configPath,\n created: false,\n alreadyInstalled: false\n };\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport { parse as parseJsonc, modify, applyEdits } from \"jsonc-parser\";\nimport { writeFileAtomic } from \"../../utils/fs\";\n\nconst PLUGIN_NAME = \"opendevbrowser\";\nconst SCHEMA_URL = \"https://opencode.ai/config.json\";\n\nexport interface OpenCodeConfig {\n $schema?: string;\n plugin?: string[];\n [key: string]: unknown;\n}\n\nexport function getGlobalConfigPath(): string {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, \"opencode.json\");\n}\n\nexport function getLocalConfigPath(): string {\n return path.join(process.cwd(), \"opencode.json\");\n}\n\nexport function ensureDir(dirPath: string): void {\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true });\n }\n}\n\nexport function readConfig(configPath: string): { content: string; config: OpenCodeConfig } {\n if (!fs.existsSync(configPath)) {\n return { content: \"\", config: {} };\n }\n\n const content = fs.readFileSync(configPath, \"utf-8\");\n const errors: Array<{ error: number; offset: number; length: number }> = [];\n const parsed = parseJsonc(content, errors, { allowTrailingComma: true });\n\n if (errors.length > 0) {\n const firstError = errors[0];\n throw new Error(`Invalid JSONC at ${configPath}: parse error at offset ${firstError?.offset ?? 0}`);\n }\n\n return { content, config: (parsed ?? {}) as OpenCodeConfig };\n}\n\nexport function writeConfig(configPath: string, config: OpenCodeConfig): void {\n ensureDir(path.dirname(configPath));\n const content = JSON.stringify(config, null, 2) + \"\\n\";\n writeFileAtomic(configPath, content);\n}\n\nexport function addPlugin(config: OpenCodeConfig, pluginName: string = PLUGIN_NAME): OpenCodeConfig {\n const result = { ...config };\n\n if (!result.$schema) {\n result.$schema = SCHEMA_URL;\n }\n\n if (!result.plugin) {\n result.plugin = [pluginName];\n } else if (!result.plugin.includes(pluginName)) {\n result.plugin = [...result.plugin, pluginName];\n }\n\n return result;\n}\n\nexport function removePlugin(config: OpenCodeConfig, pluginName: string = PLUGIN_NAME): OpenCodeConfig {\n const result = { ...config };\n\n if (result.plugin) {\n result.plugin = result.plugin.filter((p) => p !== pluginName);\n if (result.plugin.length === 0) {\n delete result.plugin;\n }\n }\n\n return result;\n}\n\nexport function hasPlugin(config: OpenCodeConfig, pluginName: string = PLUGIN_NAME): boolean {\n return config.plugin?.includes(pluginName) ?? false;\n}\n\nexport function createConfigWithPlugin(pluginName: string = PLUGIN_NAME): OpenCodeConfig {\n return {\n $schema: SCHEMA_URL,\n plugin: [pluginName]\n };\n}\n\nexport function updateConfigContent(content: string, pluginName: string = PLUGIN_NAME): string {\n if (!content.trim()) {\n return JSON.stringify(createConfigWithPlugin(pluginName), null, 2) + \"\\n\";\n }\n\n const parsed = parseJsonc(content, [], { allowTrailingComma: true }) as OpenCodeConfig ?? {};\n\n if (parsed.plugin?.includes(pluginName)) {\n return content;\n }\n\n let result = content;\n\n if (!parsed.$schema) {\n const edits = modify(result, [\"$schema\"], SCHEMA_URL, { formattingOptions: { tabSize: 2, insertSpaces: true } });\n result = applyEdits(result, edits);\n }\n\n const newPlugins = parsed.plugin ? [...parsed.plugin, pluginName] : [pluginName];\n const edits = modify(result, [\"plugin\"], newPlugins, { formattingOptions: { tabSize: 2, insertSpaces: true } });\n result = applyEdits(result, edits);\n\n return result;\n}\n\nexport function removePluginFromContent(content: string, pluginName: string = PLUGIN_NAME): string {\n if (!content.trim()) {\n return content;\n }\n\n const parsed = parseJsonc(content, [], { allowTrailingComma: true }) as OpenCodeConfig ?? {};\n\n if (!parsed.plugin?.includes(pluginName)) {\n return content;\n }\n\n const newPlugins = parsed.plugin.filter((p) => p !== pluginName);\n const edits = modify(content, [\"plugin\"], newPlugins.length > 0 ? newPlugins : undefined, {\n formattingOptions: { tabSize: 2, insertSpaces: true }\n });\n\n return applyEdits(content, edits);\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as crypto from \"crypto\";\n\nexport function writeFileAtomic(\n filePath: string,\n content: string,\n options: { encoding?: BufferEncoding; mode?: number } = {}\n): void {\n const { encoding = \"utf-8\", mode } = options;\n const dir = path.dirname(filePath);\n const hash = crypto.randomBytes(8).toString(\"hex\");\n const tempPath = path.join(dir, `.${path.basename(filePath)}.${process.pid}.${hash}.tmp`);\n\n try {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n const writeOptions: fs.WriteFileOptions = { encoding };\n if (mode !== undefined) {\n writeOptions.mode = mode;\n }\n fs.writeFileSync(tempPath, content, writeOptions);\n fs.renameSync(tempPath, filePath);\n } catch (error) {\n try {\n if (fs.existsSync(tempPath)) {\n fs.unlinkSync(tempPath);\n }\n } catch {\n /* best-effort cleanup */\n }\n throw error;\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport { generateSecureToken } from \"../../utils/crypto\";\nimport { writeFileAtomic } from \"../../utils/fs\";\n\nfunction buildConfigTemplate(token: string): string {\n return `{\n // OpenDevBrowser Plugin Configuration\n // See: https://github.com/anthropics/opendevbrowser#configuration\n\n \"headless\": false,\n \"profile\": \"default\",\n \"persistProfile\": true,\n\n \"snapshot\": {\n \"maxChars\": 16000,\n \"maxNodes\": 1000\n },\n\n \"export\": {\n \"maxNodes\": 1000,\n \"inlineStyles\": true\n },\n\n \"devtools\": {\n \"showFullUrls\": false,\n \"showFullConsole\": false\n },\n\n \"security\": {\n \"allowRawCDP\": false,\n \"allowNonLocalCdp\": false,\n \"allowUnsafeExport\": false\n },\n\n \"skillPaths\": [],\n \"skills\": {\n \"nudge\": {\n \"enabled\": true,\n \"keywords\": [\"login\", \"form\", \"extract\"],\n \"maxAgeMs\": 60000\n }\n },\n\n \"continuity\": {\n \"enabled\": true,\n \"filePath\": \"opendevbrowser_continuity.md\",\n \"nudge\": {\n \"enabled\": true,\n \"keywords\": [\n \"plan\",\n \"multi-step\",\n \"multi step\",\n \"long-running\",\n \"long running\",\n \"refactor\",\n \"migration\",\n \"rollout\",\n \"release\",\n \"upgrade\",\n \"investigate\",\n \"follow-up\",\n \"continue\"\n ],\n \"maxAgeMs\": 60000\n }\n },\n\n \"relayPort\": 8787,\n \"relayToken\": \"${token}\",\n\n \"flags\": [],\n\n \"checkForUpdates\": false\n}\n`;\n}\n\nexport function getPluginConfigPath(mode: \"global\" | \"local\"): string {\n if (mode === \"global\") {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, \"opendevbrowser.jsonc\");\n }\n return path.join(process.cwd(), \"opendevbrowser.jsonc\");\n}\n\nexport function createPluginConfig(mode: \"global\" | \"local\"): { created: boolean; path: string } {\n const configPath = getPluginConfigPath(mode);\n\n if (fs.existsSync(configPath)) {\n return { created: false, path: configPath };\n }\n\n const dir = path.dirname(configPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n const token = generateSecureToken();\n writeFileAtomic(configPath, buildConfigTemplate(token));\n return { created: true, path: configPath };\n}\n\nexport function getConfigTemplate(): string {\n return buildConfigTemplate(generateSecureToken());\n}\n","import * as fs from \"fs\";\nimport {\n getLocalConfigPath,\n readConfig,\n hasPlugin,\n updateConfigContent\n} from \"../utils/config\";\nimport { createPluginConfig } from \"../templates/config\";\n\nexport interface InstallResult {\n success: boolean;\n message: string;\n configPath: string;\n created: boolean;\n alreadyInstalled: boolean;\n}\n\nexport function installLocal(withConfig: boolean = false): InstallResult {\n const configPath = getLocalConfigPath();\n\n try {\n const { content, config } = readConfig(configPath);\n\n if (hasPlugin(config)) {\n return {\n success: true,\n message: `opendevbrowser is already installed in ${configPath}`,\n configPath,\n created: false,\n alreadyInstalled: true\n };\n }\n\n const newContent = updateConfigContent(content, \"opendevbrowser\");\n\n fs.writeFileSync(configPath, newContent, \"utf-8\");\n\n if (withConfig) {\n createPluginConfig(\"local\");\n }\n\n return {\n success: true,\n message: `Added opendevbrowser to ${configPath}`,\n configPath,\n created: content.trim() === \"\",\n alreadyInstalled: false\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to install locally: ${message}`,\n configPath,\n created: false,\n alreadyInstalled: false\n };\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { ensureDir } from \"../utils/config\";\nimport { getBundledSkillsDir, getGlobalSkillDir, getLocalSkillDir } from \"../utils/skills\";\n\nexport type SkillInstallMode = \"global\" | \"local\";\n\nexport interface SkillInstallResult {\n success: boolean;\n message: string;\n targetDir: string;\n installed: string[];\n skipped: string[];\n}\n\nexport function installSkills(mode: SkillInstallMode): SkillInstallResult {\n const targetDir = mode === \"global\" ? getGlobalSkillDir() : getLocalSkillDir();\n const installed: string[] = [];\n const skipped: string[] = [];\n\n try {\n const sourceDir = getBundledSkillsDir();\n const entries = fs.readdirSync(sourceDir, { withFileTypes: true });\n\n ensureDir(targetDir);\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const skillName = entry.name;\n const sourcePath = path.join(sourceDir, skillName);\n const targetPath = path.join(targetDir, skillName);\n\n if (fs.existsSync(targetPath)) {\n skipped.push(skillName);\n continue;\n }\n\n fs.cpSync(sourcePath, targetPath, { recursive: true });\n installed.push(skillName);\n }\n\n const summary = `Skills ${mode} install: ${installed.length} installed${skipped.length ? `, ${skipped.length} skipped` : \"\"} (${targetDir})`;\n return {\n success: true,\n message: summary,\n targetDir,\n installed,\n skipped\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to install skills (${mode}): ${message}`,\n targetDir,\n installed,\n skipped\n };\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport { fileURLToPath } from \"url\";\n\nconst PACKAGE_NAME = \"opendevbrowser\";\nconst SKILL_DIR_NAME = \"skill\";\n\nlet cachedPackageRoot: string | null = null;\n\nfunction findPackageRoot(startDir: string): string {\n let current = startDir;\n\n while (true) {\n const pkgPath = path.join(current, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n try {\n const parsed = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\")) as { name?: string };\n if (parsed.name === PACKAGE_NAME) {\n return current;\n }\n } catch {\n void 0;\n }\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n\n throw new Error(\"Unable to locate opendevbrowser package root for skill installation.\");\n}\n\nexport function getPackageRoot(): string {\n if (cachedPackageRoot) return cachedPackageRoot;\n const moduleDir = path.dirname(fileURLToPath(import.meta.url));\n cachedPackageRoot = findPackageRoot(moduleDir);\n return cachedPackageRoot;\n}\n\nexport function getBundledSkillsDir(): string {\n const skillsDir = path.join(getPackageRoot(), \"skills\");\n if (!fs.existsSync(skillsDir)) {\n throw new Error(`Bundled skills directory not found at ${skillsDir}`);\n }\n return skillsDir;\n}\n\nexport function getGlobalSkillDir(): string {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, SKILL_DIR_NAME);\n}\n\nexport function getLocalSkillDir(): string {\n return path.join(process.cwd(), \".opencode\", SKILL_DIR_NAME);\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\n\nconst PLUGIN_NAME = \"opendevbrowser\";\n\nexport interface UpdateResult {\n success: boolean;\n message: string;\n cleared: boolean;\n}\n\nfunction getCacheDir(): string {\n return process.env.OPENCODE_CACHE_DIR\n || path.join(os.homedir(), \".cache\", \"opencode\");\n}\n\nfunction rmdir(dirPath: string): void {\n const cacheDir = getCacheDir();\n const resolvedCache = path.resolve(cacheDir);\n const resolvedPath = path.resolve(dirPath);\n\n if (!resolvedPath.startsWith(resolvedCache + path.sep) || resolvedPath === resolvedCache) {\n throw new Error(`Security: refusing to delete path outside cache directory: ${dirPath}`);\n }\n\n if (fs.existsSync(dirPath)) {\n fs.rmSync(dirPath, { recursive: true, force: true });\n }\n}\n\nexport function runUpdate(): UpdateResult {\n const cacheDir = getCacheDir();\n const nodeModulesDir = path.join(cacheDir, \"node_modules\");\n const pluginCacheDir = path.join(nodeModulesDir, PLUGIN_NAME);\n\n try {\n if (!fs.existsSync(pluginCacheDir)) {\n if (fs.existsSync(nodeModulesDir)) {\n rmdir(nodeModulesDir);\n return {\n success: true,\n message: \"Cleared OpenCode plugin cache. The latest version will be installed on next run.\",\n cleared: true\n };\n }\n\n return {\n success: true,\n message: \"No cached plugin found. OpenCode will install the latest version on next run.\",\n cleared: false\n };\n }\n\n rmdir(pluginCacheDir);\n\n return {\n success: true,\n message: \"Cache cleared. OpenCode will install the latest version on next run.\",\n cleared: true\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to clear cache: ${message}`,\n cleared: false\n };\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport {\n getGlobalConfigPath,\n getLocalConfigPath,\n readConfig,\n hasPlugin,\n removePluginFromContent\n} from \"../utils/config\";\nimport type { InstallMode } from \"../args\";\n\nexport interface UninstallResult {\n success: boolean;\n message: string;\n configPath?: string;\n removed: boolean;\n configFileDeleted: boolean;\n}\n\nfunction getPluginConfigPath(mode: InstallMode): string {\n if (mode === \"global\") {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, \"opendevbrowser.jsonc\");\n }\n return path.join(process.cwd(), \"opendevbrowser.jsonc\");\n}\n\nfunction removePluginConfigFile(mode: InstallMode): boolean {\n const configPath = getPluginConfigPath(mode);\n if (fs.existsSync(configPath)) {\n fs.unlinkSync(configPath);\n return true;\n }\n return false;\n}\n\nexport function runUninstall(\n mode: InstallMode,\n deleteConfigFile: boolean = false\n): UninstallResult {\n const configPath = mode === \"global\" ? getGlobalConfigPath() : getLocalConfigPath();\n\n try {\n const { content, config } = readConfig(configPath);\n\n if (!hasPlugin(config)) {\n return {\n success: true,\n message: `opendevbrowser is not installed in ${configPath}`,\n configPath,\n removed: false,\n configFileDeleted: false\n };\n }\n\n const newContent = removePluginFromContent(content, \"opendevbrowser\");\n\n fs.writeFileSync(configPath, newContent, \"utf-8\");\n\n let configFileDeleted = false;\n if (deleteConfigFile) {\n configFileDeleted = removePluginConfigFile(mode);\n }\n\n return {\n success: true,\n message: `Removed opendevbrowser from ${configPath}`,\n configPath,\n removed: true,\n configFileDeleted\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to uninstall: ${message}`,\n configPath,\n removed: false,\n configFileDeleted: false\n };\n }\n}\n\nexport function findInstalledConfigs(): { global: boolean; local: boolean } {\n let global = false;\n let local = false;\n\n try {\n const { config: globalConfig } = readConfig(getGlobalConfigPath());\n global = hasPlugin(globalConfig);\n } catch {\n void 0;\n }\n\n try {\n const { config: localConfig } = readConfig(getLocalConfigPath());\n local = hasPlugin(localConfig);\n } catch {\n void 0;\n }\n\n return { global, local };\n}\n","import { createServer, type IncomingMessage, type ServerResponse } from \"http\";\nimport { timingSafeEqual } from \"crypto\";\nimport { mkdirSync, readFileSync, writeFileSync, unlinkSync, existsSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nimport { generateSecureToken } from \"../utils/crypto\";\nimport { createOpenDevBrowserCore } from \"../core\";\nimport { loadGlobalConfig, type OpenDevBrowserConfig } from \"../config\";\nimport { handleDaemonCommand } from \"./daemon-commands\";\n\nconst DEFAULT_DAEMON_PORT = 8788;\n\nexport type DaemonState = {\n port: number;\n token: string;\n pid: number;\n relayPort: number;\n startedAt: string;\n};\n\ntype DaemonOptions = {\n port?: number;\n token?: string;\n config?: OpenDevBrowserConfig;\n directory?: string;\n worktree?: string | null;\n};\n\nfunction getCacheRoot(): string {\n const base = process.env.OPENCODE_CACHE_DIR\n ?? process.env.XDG_CACHE_HOME\n ?? join(homedir(), \".cache\");\n return join(base, \"opendevbrowser\");\n}\n\nexport function getDaemonMetadataPath(): string {\n return join(getCacheRoot(), \"daemon.json\");\n}\n\nexport function readDaemonMetadata(): DaemonState | null {\n const metadataPath = getDaemonMetadataPath();\n if (!existsSync(metadataPath)) {\n return null;\n }\n try {\n const content = readFileSync(metadataPath, \"utf-8\");\n return JSON.parse(content) as DaemonState;\n } catch {\n return null;\n }\n}\n\nexport function writeDaemonMetadata(state: DaemonState): void {\n const metadataPath = getDaemonMetadataPath();\n mkdirSync(join(getCacheRoot()), { recursive: true });\n writeFileSync(metadataPath, JSON.stringify(state, null, 2), { encoding: \"utf-8\", mode: 0o600 });\n}\n\nexport function clearDaemonMetadata(): void {\n const metadataPath = getDaemonMetadataPath();\n try {\n unlinkSync(metadataPath);\n } catch {\n void 0;\n }\n}\n\nfunction isAuthorized(request: IncomingMessage, token: string): boolean {\n const header = request.headers.authorization ?? \"\";\n if (!header.startsWith(\"Bearer \")) {\n return false;\n }\n const received = header.slice(\"Bearer \".length).trim();\n const expectedBuf = Buffer.from(token, \"utf-8\");\n const receivedBuf = Buffer.from(received, \"utf-8\");\n\n if (expectedBuf.length !== receivedBuf.length) {\n timingSafeEqual(expectedBuf, expectedBuf);\n return false;\n }\n return timingSafeEqual(expectedBuf, receivedBuf);\n}\n\nfunction sendJson(response: ServerResponse, status: number, payload: unknown): void {\n response.writeHead(status, {\n \"Content-Type\": \"application/json\",\n \"Cache-Control\": \"no-store\"\n });\n response.end(JSON.stringify(payload));\n}\n\nexport async function startDaemon(options: DaemonOptions = {}): Promise<{ state: DaemonState; stop: () => Promise<void> }> {\n const config = options.config ?? loadGlobalConfig();\n const port = options.port ?? DEFAULT_DAEMON_PORT;\n const token = options.token ?? generateSecureToken();\n const core = createOpenDevBrowserCore({\n directory: options.directory ?? process.cwd(),\n worktree: options.worktree ?? null,\n config\n });\n\n await core.ensureRelay(config.relayPort);\n\n const server = createServer(async (request, response) => {\n if (!isAuthorized(request, token)) {\n sendJson(response, 401, { error: \"Unauthorized\" });\n return;\n }\n\n const url = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n\n if (request.method === \"GET\" && url.pathname === \"/status\") {\n sendJson(response, 200, {\n ok: true,\n pid: process.pid,\n relay: core.relay.status()\n });\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/stop\") {\n sendJson(response, 200, { ok: true });\n await stop();\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/command\") {\n try {\n const body = await readJson(request);\n const data = await handleDaemonCommand(core, body);\n sendJson(response, 200, { ok: true, data });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendJson(response, 400, { ok: false, error: message });\n }\n return;\n }\n\n sendJson(response, 404, { error: \"Not found\" });\n });\n\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(port, \"127.0.0.1\", () => resolve());\n });\n\n const state: DaemonState = {\n port,\n token,\n pid: process.pid,\n relayPort: config.relayPort,\n startedAt: new Date().toISOString()\n };\n writeDaemonMetadata(state);\n\n const stop = async () => {\n clearDaemonMetadata();\n core.cleanup();\n await new Promise<void>((resolve) => {\n server.close(() => resolve());\n });\n };\n\n process.on(\"SIGINT\", () => {\n stop().catch(() => {});\n });\n process.on(\"SIGTERM\", () => {\n stop().catch(() => {});\n });\n\n return { state, stop };\n}\n\nfunction readJson(request: IncomingMessage): Promise<Record<string, unknown>> {\n return new Promise((resolve, reject) => {\n let data = \"\";\n request.setEncoding(\"utf8\");\n request.on(\"data\", (chunk) => {\n data += chunk;\n });\n request.on(\"end\", () => {\n try {\n const parsed = JSON.parse(data || \"{}\");\n if (!parsed || typeof parsed !== \"object\") {\n reject(new Error(\"Invalid JSON body\"));\n return;\n }\n resolve(parsed as Record<string, unknown>);\n } catch (error) {\n reject(error);\n }\n });\n request.on(\"error\", reject);\n });\n}\n","import type { OpenDevBrowserCore } from \"../core\";\n\nexport type DaemonCommandRequest = {\n name: string;\n params?: Record<string, unknown>;\n};\n\nexport async function handleDaemonCommand(core: OpenDevBrowserCore, request: DaemonCommandRequest): Promise<unknown> {\n const params = request.params ?? {};\n\n switch (request.name) {\n case \"session.launch\":\n return launchWithRelay(core, params);\n case \"session.connect\":\n return core.manager.connect({\n wsEndpoint: optionalString(params.wsEndpoint),\n host: optionalString(params.host),\n port: optionalNumber(params.port)\n });\n case \"session.disconnect\":\n await core.manager.disconnect(requireString(params.sessionId, \"sessionId\"), optionalBoolean(params.closeBrowser) ?? false);\n return { ok: true };\n case \"session.status\":\n return core.manager.status(requireString(params.sessionId, \"sessionId\"));\n case \"nav.goto\":\n return core.manager.goto(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.url, \"url\"),\n requireWaitUntil(params.waitUntil),\n optionalNumber(params.timeoutMs) ?? 30000\n );\n case \"nav.wait\":\n if (typeof params.ref === \"string\") {\n return core.manager.waitForRef(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n requireState(params.state),\n optionalNumber(params.timeoutMs) ?? 30000\n );\n }\n return core.manager.waitForLoad(\n requireString(params.sessionId, \"sessionId\"),\n requireWaitUntil(params.until),\n optionalNumber(params.timeoutMs) ?? 30000\n );\n case \"nav.snapshot\":\n return core.manager.snapshot(\n requireString(params.sessionId, \"sessionId\"),\n requireSnapshotMode(params.mode),\n optionalNumber(params.maxChars) ?? 16000,\n optionalString(params.cursor)\n );\n case \"interact.click\":\n return core.manager.click(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\")\n );\n case \"interact.type\":\n return core.manager.type(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n requireString(params.text, \"text\"),\n optionalBoolean(params.clear) ?? false,\n optionalBoolean(params.submit) ?? false\n );\n case \"interact.select\":\n return core.manager.select(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n requireStringArray(params.values, \"values\")\n );\n case \"interact.scroll\":\n return core.manager.scroll(\n requireString(params.sessionId, \"sessionId\"),\n optionalNumber(params.dy) ?? 0,\n optionalString(params.ref)\n );\n default:\n throw new Error(`Unknown daemon command: ${request.name}`);\n }\n}\n\nasync function launchWithRelay(core: OpenDevBrowserCore, params: Record<string, unknown>) {\n let relayStatus = core.relay.status();\n const relayUrl = core.relay.getCdpUrl();\n const noExtension = optionalBoolean(params.noExtension) ?? false;\n const extensionOnly = optionalBoolean(params.extensionOnly) ?? false;\n const waitForExtension = optionalBoolean(params.waitForExtension) ?? false;\n const waitTimeoutMs = optionalNumber(params.waitTimeoutMs) ?? 30000;\n\n if (waitForExtension) {\n const connected = await waitForRelay(core.relay, waitTimeoutMs);\n if (connected) {\n relayStatus = core.relay.status();\n }\n }\n\n const useRelay = Boolean(!noExtension && relayStatus.extensionConnected && relayUrl);\n let relayWarning: string | null = null;\n\n if (extensionOnly && !useRelay) {\n throw new Error(\"Extension not connected; use --no-extension to launch a new browser.\");\n }\n\n if (useRelay && relayUrl) {\n try {\n const result = await core.manager.connectRelay(relayUrl);\n return { ...result, warnings: result.warnings ?? [] };\n } catch (error) {\n if (extensionOnly) {\n throw error instanceof Error ? error : new Error(\"Extension relay connection failed.\");\n }\n relayWarning = \"Relay connection failed; falling back to managed Chrome.\";\n }\n }\n\n if (relayUrl && !noExtension) {\n relayWarning ??= \"Extension not connected; launching managed Chrome instead.\";\n }\n\n const result = await core.manager.launch({\n profile: optionalString(params.profile),\n headless: optionalBoolean(params.headless),\n startUrl: optionalString(params.startUrl),\n chromePath: optionalString(params.chromePath),\n flags: optionalStringArray(params.flags),\n persistProfile: optionalBoolean(params.persistProfile)\n });\n\n const warnings = [\n ...(result.warnings ?? []),\n ...(relayWarning ? [relayWarning] : [])\n ];\n return { ...result, warnings };\n}\n\nfunction requireString(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !value.trim()) {\n throw new Error(`Missing ${label}`);\n }\n return value;\n}\n\nfunction requireStringArray(value: unknown, label: string): string[] {\n if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n throw new Error(`Invalid ${label}`);\n }\n return value as string[];\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction optionalStringArray(value: unknown): string[] | undefined {\n return Array.isArray(value) && value.every((item) => typeof item === \"string\")\n ? value as string[]\n : undefined;\n}\n\nfunction optionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction optionalBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction requireWaitUntil(value: unknown): \"domcontentloaded\" | \"load\" | \"networkidle\" {\n if (value === \"domcontentloaded\" || value === \"load\" || value === \"networkidle\") {\n return value;\n }\n return \"load\";\n}\n\nfunction requireSnapshotMode(value: unknown): \"outline\" | \"actionables\" {\n if (value === \"actionables\") return \"actionables\";\n return \"outline\";\n}\n\nfunction requireState(value: unknown): \"attached\" | \"visible\" | \"hidden\" {\n if (value === \"visible\" || value === \"hidden\") return value;\n return \"attached\";\n}\n\nasync function waitForRelay(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","import type { ParsedArgs } from \"../args\";\nimport { startDaemon, readDaemonMetadata } from \"../daemon\";\nimport { createUsageError, EXIT_DISCONNECTED, EXIT_EXECUTION } from \"../errors\";\n\ntype ServeArgs = {\n port?: number;\n token?: string;\n stop: boolean;\n};\n\nfunction parseServeArgs(rawArgs: string[]): ServeArgs {\n const parsed: ServeArgs = { stop: false };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--stop\") {\n parsed.stop = true;\n continue;\n }\n if (arg === \"--port\") {\n const value = rawArgs[i + 1];\n if (!value) {\n throw createUsageError(\"Missing value for --port\");\n }\n parsed.port = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--port=\")) {\n parsed.port = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n if (arg === \"--token\") {\n const value = rawArgs[i + 1];\n if (!value) {\n throw createUsageError(\"Missing value for --token\");\n }\n parsed.token = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--token=\")) {\n parsed.token = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runServe(args: ParsedArgs) {\n const serveArgs = parseServeArgs(args.rawArgs);\n\n if (serveArgs.stop) {\n const metadata = readDaemonMetadata();\n if (!metadata) {\n return { success: false, message: \"Daemon not running.\", exitCode: EXIT_DISCONNECTED };\n }\n\n try {\n const response = await fetch(`http://127.0.0.1:${metadata.port}/stop`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${metadata.token}` }\n });\n if (!response.ok) {\n throw new Error(`Stop failed (${response.status})`);\n }\n return { success: true, message: \"Daemon stopped.\" };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, message: `Failed to stop daemon: ${message}`, exitCode: EXIT_EXECUTION };\n }\n }\n\n const { state } = await startDaemon({\n port: serveArgs.port,\n token: serveArgs.token\n });\n\n return {\n success: true,\n message: `Daemon running on 127.0.0.1:${state.port}`,\n data: { port: state.port, pid: state.pid, relayPort: state.relayPort },\n exitCode: null\n };\n}\n","import { readFileSync } from \"fs\";\nimport { createOpenDevBrowserCore } from \"../../core\";\nimport type { ParsedArgs } from \"../args\";\nimport { writeOutput } from \"../output\";\nimport { createUsageError, EXIT_USAGE } from \"../errors\";\n\ntype RunArgs = {\n scriptPath?: string;\n headless?: boolean;\n profile?: string;\n persistProfile?: boolean;\n chromePath?: string;\n startUrl?: string;\n flags: string[];\n};\n\nfunction parseRunArgs(rawArgs: string[]): RunArgs {\n const parsed: RunArgs = { flags: [] };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--script\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --script\");\n parsed.scriptPath = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--script=\")) {\n parsed.scriptPath = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--headless\") {\n parsed.headless = true;\n continue;\n }\n if (arg === \"--profile\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --profile\");\n parsed.profile = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--profile=\")) {\n parsed.profile = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--persist-profile\") {\n parsed.persistProfile = true;\n continue;\n }\n if (arg === \"--chrome-path\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --chrome-path\");\n parsed.chromePath = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--chrome-path=\")) {\n parsed.chromePath = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--start-url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --start-url\");\n parsed.startUrl = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--start-url=\")) {\n parsed.startUrl = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--flag\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --flag\");\n parsed.flags.push(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--flag=\")) {\n parsed.flags.push(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nfunction readScriptFromStdin(): Promise<string> {\n return new Promise((resolve, reject) => {\n let data = \"\";\n process.stdin.setEncoding(\"utf8\");\n process.stdin.on(\"data\", (chunk) => {\n data += chunk;\n });\n process.stdin.on(\"end\", () => resolve(data));\n process.stdin.on(\"error\", reject);\n });\n}\n\nexport async function runScriptCommand(args: ParsedArgs) {\n const runArgs = parseRunArgs(args.rawArgs);\n const outputOptions = { format: args.outputFormat, quiet: args.quiet };\n\n let scriptRaw = \"\";\n if (runArgs.scriptPath) {\n scriptRaw = readFileSync(runArgs.scriptPath, \"utf-8\");\n } else if (!process.stdin.isTTY) {\n scriptRaw = await readScriptFromStdin();\n } else {\n throw createUsageError(\"Provide --script <path> or pipe JSON to stdin.\");\n }\n\n let steps: Array<{ action: string; args?: Record<string, unknown> }> = [];\n try {\n const parsed = JSON.parse(scriptRaw);\n if (Array.isArray(parsed)) {\n steps = parsed;\n } else if (parsed && typeof parsed === \"object\" && Array.isArray(parsed.steps)) {\n steps = parsed.steps;\n } else {\n throw new Error(\"Script must be a JSON array or an object with steps.\");\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON script.\";\n writeOutput({ success: false, error: message, exitCode: EXIT_USAGE }, outputOptions);\n return { success: false, message, exitCode: EXIT_USAGE, data: { suppressOutput: true } };\n }\n\n const core = createOpenDevBrowserCore({ directory: process.cwd() });\n const launchResult = await core.manager.launch({\n profile: runArgs.profile,\n headless: runArgs.headless,\n startUrl: runArgs.startUrl,\n chromePath: runArgs.chromePath,\n flags: runArgs.flags.length ? runArgs.flags : undefined,\n persistProfile: runArgs.persistProfile\n });\n\n try {\n const result = await core.runner.run(launchResult.sessionId, steps, true);\n writeOutput({\n success: true,\n sessionId: launchResult.sessionId,\n warnings: launchResult.warnings.length ? launchResult.warnings : undefined,\n ...result\n }, outputOptions);\n return { success: true, data: { suppressOutput: true } };\n } finally {\n await core.manager.disconnect(launchResult.sessionId, true);\n core.cleanup();\n }\n}\n","import type { OutputFormat } from \"./args\";\n\nexport type OutputOptions = {\n format: OutputFormat;\n quiet?: boolean;\n};\n\nexport function writeOutput(payload: unknown, options: OutputOptions): void {\n if (options.quiet) {\n return;\n }\n\n if (options.format === \"text\") {\n if (typeof payload === \"string\") {\n console.log(payload);\n } else {\n console.log(JSON.stringify(payload, null, 2));\n }\n return;\n }\n\n if (options.format === \"stream-json\") {\n if (Array.isArray(payload)) {\n for (const entry of payload) {\n console.log(JSON.stringify(entry));\n }\n return;\n }\n }\n\n console.log(JSON.stringify(payload));\n}\n","import { readDaemonMetadata } from \"./daemon\";\nimport { CliError, createDisconnectedError, EXIT_EXECUTION } from \"./errors\";\n\nexport async function callDaemon(command: string, params?: Record<string, unknown>): Promise<unknown> {\n const metadata = readDaemonMetadata();\n if (!metadata) {\n throw createDisconnectedError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n\n let response: Response;\n try {\n response = await fetch(`http://127.0.0.1:${metadata.port}/command`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${metadata.token}`\n },\n body: JSON.stringify({ name: command, params: params ?? {} })\n });\n } catch {\n throw createDisconnectedError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n\n if (!response.ok) {\n const message = await response.text();\n throw new CliError(`Daemon error: ${message || response.status}`, EXIT_EXECUTION);\n }\n\n const payload = await response.json() as { ok?: boolean; data?: unknown; error?: string };\n if (!payload.ok) {\n throw new CliError(payload.error || \"Daemon command failed.\", EXIT_EXECUTION);\n }\n return payload.data;\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\ntype LaunchArgs = {\n profile?: string;\n headless?: boolean;\n startUrl?: string;\n chromePath?: string;\n flags: string[];\n persistProfile?: boolean;\n noExtension?: boolean;\n extensionOnly?: boolean;\n waitForExtension?: boolean;\n waitTimeoutMs?: number;\n};\n\nfunction parseLaunchArgs(rawArgs: string[]): LaunchArgs {\n const parsed: LaunchArgs = { flags: [] };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--headless\") {\n parsed.headless = true;\n continue;\n }\n if (arg === \"--profile\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --profile\");\n parsed.profile = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--profile=\")) {\n parsed.profile = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--start-url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --start-url\");\n parsed.startUrl = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--start-url=\")) {\n parsed.startUrl = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--chrome-path\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --chrome-path\");\n parsed.chromePath = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--chrome-path=\")) {\n parsed.chromePath = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--persist-profile\") {\n parsed.persistProfile = true;\n continue;\n }\n if (arg === \"--no-extension\") {\n parsed.noExtension = true;\n continue;\n }\n if (arg === \"--extension-only\") {\n parsed.extensionOnly = true;\n continue;\n }\n if (arg === \"--wait-for-extension\") {\n parsed.waitForExtension = true;\n continue;\n }\n if (arg === \"--wait-timeout-ms\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --wait-timeout-ms\");\n parsed.waitTimeoutMs = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--wait-timeout-ms=\")) {\n parsed.waitTimeoutMs = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n if (arg === \"--flag\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --flag\");\n parsed.flags.push(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--flag=\")) {\n parsed.flags.push(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionLaunch(args: ParsedArgs) {\n const launchArgs = parseLaunchArgs(args.rawArgs);\n const result = await callDaemon(\"session.launch\", launchArgs) as { sessionId: string };\n return {\n success: true,\n message: `Session launched: ${result.sessionId}`,\n data: result\n };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\ntype ConnectArgs = {\n wsEndpoint?: string;\n host?: string;\n port?: number;\n};\n\nfunction parseConnectArgs(rawArgs: string[]): ConnectArgs {\n const parsed: ConnectArgs = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--ws-endpoint\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ws-endpoint\");\n parsed.wsEndpoint = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ws-endpoint=\")) {\n parsed.wsEndpoint = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--host\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --host\");\n parsed.host = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--host=\")) {\n parsed.host = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--cdp-port\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --cdp-port\");\n parsed.port = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--cdp-port=\")) {\n parsed.port = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionConnect(args: ParsedArgs) {\n const connectArgs = parseConnectArgs(args.rawArgs);\n const result = await callDaemon(\"session.connect\", connectArgs) as { sessionId: string };\n return {\n success: true,\n message: `Session connected: ${result.sessionId}`,\n data: result\n };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDisconnectArgs(rawArgs: string[]): { sessionId?: string; closeBrowser?: boolean } {\n const parsed: { sessionId?: string; closeBrowser?: boolean } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--close-browser\") {\n parsed.closeBrowser = true;\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionDisconnect(args: ParsedArgs) {\n const { sessionId, closeBrowser } = parseDisconnectArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n await callDaemon(\"session.disconnect\", { sessionId, closeBrowser });\n return { success: true, message: `Session disconnected: ${sessionId}` };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseStatusArgs(rawArgs: string[]): { sessionId?: string } {\n const parsed: { sessionId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionStatus(args: ParsedArgs) {\n const { sessionId } = parseStatusArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n const result = await callDaemon(\"session.status\", { sessionId });\n return { success: true, message: `Session status: ${sessionId}`, data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseGotoArgs(rawArgs: string[]): { sessionId?: string; url?: string; waitUntil?: string; timeoutMs?: number } {\n const parsed: { sessionId?: string; url?: string; waitUntil?: string; timeoutMs?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --url\");\n parsed.url = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--url=\")) {\n parsed.url = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--wait-until\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --wait-until\");\n parsed.waitUntil = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--wait-until=\")) {\n parsed.waitUntil = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--timeout-ms\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --timeout-ms\");\n parsed.timeoutMs = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runGoto(args: ParsedArgs) {\n const { sessionId, url, waitUntil, timeoutMs } = parseGotoArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!url) throw createUsageError(\"Missing --url\");\n const result = await callDaemon(\"nav.goto\", { sessionId, url, waitUntil, timeoutMs });\n return { success: true, message: `Navigated: ${url}`, data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseWaitArgs(rawArgs: string[]): { sessionId?: string; ref?: string; state?: string; until?: string; timeoutMs?: number } {\n const parsed: { sessionId?: string; ref?: string; state?: string; until?: string; timeoutMs?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--state\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --state\");\n parsed.state = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--state=\")) {\n parsed.state = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--until\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --until\");\n parsed.until = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--until=\")) {\n parsed.until = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--timeout-ms\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --timeout-ms\");\n parsed.timeoutMs = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runWait(args: ParsedArgs) {\n const { sessionId, ref, state, until, timeoutMs } = parseWaitArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"nav.wait\", { sessionId, ref, state, until, timeoutMs });\n return { success: true, message: \"Wait complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseSnapshotArgs(rawArgs: string[]): { sessionId?: string; mode?: string; maxChars?: number; cursor?: string } {\n const parsed: { sessionId?: string; mode?: string; maxChars?: number; cursor?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--mode\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --mode\");\n parsed.mode = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--mode=\")) {\n parsed.mode = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--max-chars\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --max-chars\");\n parsed.maxChars = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--max-chars=\")) {\n parsed.maxChars = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n if (arg === \"--cursor\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --cursor\");\n parsed.cursor = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--cursor=\")) {\n parsed.cursor = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSnapshot(args: ParsedArgs) {\n const { sessionId, mode, maxChars, cursor } = parseSnapshotArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"nav.snapshot\", { sessionId, mode, maxChars, cursor });\n return { success: true, message: \"Snapshot captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseClickArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runClick(args: ParsedArgs) {\n const { sessionId, ref } = parseClickArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.click\", { sessionId, ref });\n return { success: true, message: \"Click complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseTypeArgs(rawArgs: string[]): { sessionId?: string; ref?: string; text?: string; clear?: boolean; submit?: boolean } {\n const parsed: { sessionId?: string; ref?: string; text?: string; clear?: boolean; submit?: boolean } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--text\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --text\");\n parsed.text = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--text=\")) {\n parsed.text = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--clear\") {\n parsed.clear = true;\n continue;\n }\n if (arg === \"--submit\") {\n parsed.submit = true;\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runType(args: ParsedArgs) {\n const { sessionId, ref, text, clear, submit } = parseTypeArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n if (!text) throw createUsageError(\"Missing --text\");\n const result = await callDaemon(\"interact.type\", { sessionId, ref, text, clear, submit });\n return { success: true, message: \"Type complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseSelectArgs(rawArgs: string[]): { sessionId?: string; ref?: string; values?: string[] } {\n const parsed: { sessionId?: string; ref?: string; values?: string[] } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--values\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --values\");\n parsed.values = value.split(\",\").map((entry) => entry.trim()).filter(Boolean);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--values=\")) {\n parsed.values = arg.split(\"=\", 2)[1].split(\",\").map((entry) => entry.trim()).filter(Boolean);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSelect(args: ParsedArgs) {\n const { sessionId, ref, values } = parseSelectArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n if (!values || values.length === 0) throw createUsageError(\"Missing --values\");\n const result = await callDaemon(\"interact.select\", { sessionId, ref, values });\n return { success: true, message: \"Select complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseScrollArgs(rawArgs: string[]): { sessionId?: string; ref?: string; dy?: number } {\n const parsed: { sessionId?: string; ref?: string; dy?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--dy\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --dy\");\n parsed.dy = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--dy=\")) {\n parsed.dy = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runScroll(args: ParsedArgs) {\n const { sessionId, ref, dy } = parseScrollArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (typeof dy !== \"number\" || Number.isNaN(dy)) throw createUsageError(\"Missing --dy\");\n const result = await callDaemon(\"interact.scroll\", { sessionId, ref, dy });\n return { success: true, message: \"Scroll complete.\", data: result };\n}\n","#!/usr/bin/env node\n\nimport { parseArgs, getHelpText, detectOutputFormat } from \"./args\";\nimport type { OutputFormat } from \"./args\";\nimport { registerCommand, getCommand } from \"./commands/registry\";\nimport type { CommandResult } from \"./commands/types\";\nimport { installGlobal } from \"./installers/global\";\nimport { installLocal } from \"./installers/local\";\nimport { installSkills } from \"./installers/skills\";\nimport { runUpdate } from \"./commands/update\";\nimport { runUninstall, findInstalledConfigs } from \"./commands/uninstall\";\nimport { runServe } from \"./commands/serve\";\nimport { runScriptCommand } from \"./commands/run\";\nimport { runSessionLaunch } from \"./commands/session/launch\";\nimport { runSessionConnect } from \"./commands/session/connect\";\nimport { runSessionDisconnect } from \"./commands/session/disconnect\";\nimport { runSessionStatus } from \"./commands/session/status\";\nimport { runGoto } from \"./commands/nav/goto\";\nimport { runWait } from \"./commands/nav/wait\";\nimport { runSnapshot } from \"./commands/nav/snapshot\";\nimport { runClick } from \"./commands/interact/click\";\nimport { runType } from \"./commands/interact/type\";\nimport { runSelect } from \"./commands/interact/select\";\nimport { runScroll } from \"./commands/interact/scroll\";\nimport { extractExtension } from \"../extension-extractor\";\nimport { writeOutput } from \"./output\";\nimport type { InstallMode } from \"./args\";\nimport { formatErrorPayload, resolveExitCode, toCliError, EXIT_EXECUTION, EXIT_USAGE } from \"./errors\";\nimport type { CliError } from \"./errors\";\n\nconst VERSION = \"0.1.0\";\n\nasync function promptInstallMode(): Promise<InstallMode> {\n if (!process.stdin.isTTY) {\n console.log(\"Non-interactive mode detected. Using global install.\");\n return \"global\";\n }\n\n return new Promise((resolve) => {\n console.log(\"\\nWhere would you like to install opendevbrowser?\\n\");\n console.log(\" 1. Global (~/.config/opencode/opencode.json)\");\n console.log(\" 2. Local (./opencode.json in this project)\\n\");\n\n process.stdout.write(\"Enter choice [1]: \");\n\n process.stdin.setEncoding(\"utf8\");\n let resolved = false;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n process.stdin.once(\"data\", (data) => {\n cleanup();\n if (resolved) return;\n resolved = true;\n const input = data.toString().trim();\n if (input === \"2\") {\n resolve(\"local\");\n } else {\n resolve(\"global\");\n }\n });\n\n process.stdin.once(\"close\", () => {\n cleanup();\n if (resolved) return;\n resolved = true;\n resolve(\"global\");\n });\n\n timeoutId = setTimeout(() => {\n timeoutId = null;\n if (resolved) return;\n resolved = true;\n console.log(\"\\nTimeout - using global install.\");\n resolve(\"global\");\n }, 30000);\n });\n}\n\nasync function promptUninstallMode(): Promise<InstallMode | null> {\n const installed = findInstalledConfigs();\n\n if (!installed.global && !installed.local) {\n console.log(\"opendevbrowser is not installed in any config.\");\n return null;\n }\n\n if (installed.global && !installed.local) {\n return \"global\";\n }\n\n if (!installed.global && installed.local) {\n return \"local\";\n }\n\n if (!process.stdin.isTTY) {\n console.log(\"Plugin found in both global and local configs. Use --global or --local flag.\");\n return null;\n }\n\n return new Promise((resolve) => {\n console.log(\"\\nopendevbrowser is installed in multiple locations:\\n\");\n console.log(\" 1. Global (~/.config/opencode/opencode.json)\");\n console.log(\" 2. Local (./opencode.json)\");\n console.log(\" 3. Cancel\\n\");\n\n process.stdout.write(\"Which to uninstall? [3]: \");\n\n process.stdin.setEncoding(\"utf8\");\n process.stdin.once(\"data\", (data) => {\n const input = data.toString().trim();\n if (input === \"1\") {\n resolve(\"global\");\n } else if (input === \"2\") {\n resolve(\"local\");\n } else {\n resolve(null);\n }\n });\n\n process.stdin.once(\"close\", () => {\n resolve(null);\n });\n });\n}\n\nfunction emitFatalError(error: CliError, outputFormat: OutputFormat): void {\n if (outputFormat === \"text\") {\n console.error(`Error: ${error.message}`);\n if (error.exitCode === EXIT_USAGE) {\n console.error(\"\\nFor help: npx opendevbrowser --help\");\n }\n return;\n }\n\n writeOutput(formatErrorPayload(error), { format: outputFormat });\n}\n\nasync function main(): Promise<void> {\n let outputFormat: OutputFormat | null = null;\n let parseSucceeded = false;\n try {\n const args = parseArgs(process.argv);\n parseSucceeded = true;\n outputFormat = args.outputFormat;\n const outputOptions = { format: args.outputFormat, quiet: args.quiet };\n\n const emitResult = (result: CommandResult, payload?: Record<string, unknown>) => {\n const suppressOutput = Boolean(\n result.data\n && typeof result.data === \"object\"\n && \"suppressOutput\" in result.data\n && (result.data as { suppressOutput?: boolean }).suppressOutput\n );\n if (suppressOutput) {\n return;\n }\n if (args.outputFormat === \"text\") {\n if (result.message) {\n writeOutput(result.message, outputOptions);\n }\n } else {\n const exitCode = resolveExitCode(result);\n writeOutput({\n success: result.success,\n message: result.message,\n ...(result.success || !result.message ? {} : { error: result.message }),\n ...(result.success || exitCode === null ? {} : { exitCode }),\n ...payload\n }, outputOptions);\n }\n };\n\n registerCommand({\n name: \"help\",\n description: \"Show help\",\n run: () => ({ success: true, message: getHelpText() })\n });\n\n registerCommand({\n name: \"version\",\n description: \"Show version\",\n run: () => ({ success: true, message: `opendevbrowser v${VERSION}` })\n });\n\n registerCommand({\n name: \"update\",\n description: \"Clear cached plugin to trigger reinstall\",\n run: () => {\n const result = runUpdate();\n return { success: result.success, message: result.message };\n }\n });\n\n registerCommand({\n name: \"uninstall\",\n description: \"Remove plugin from config\",\n run: async () => {\n let mode = args.mode;\n if (!mode && !args.noPrompt) {\n mode = await promptUninstallMode() ?? undefined;\n if (!mode) {\n return { success: true, message: \"Uninstall cancelled.\" };\n }\n }\n if (!mode) {\n return { success: false, message: \"Error: Please specify --global or --local for uninstall.\", exitCode: EXIT_USAGE };\n }\n const result = runUninstall(mode);\n return { success: result.success, message: result.message };\n }\n });\n\n registerCommand({\n name: \"install\",\n description: \"Install the plugin\",\n run: async () => {\n const log = (...values: unknown[]) => {\n if (args.quiet) return;\n console.log(...values);\n };\n const warn = (...values: unknown[]) => {\n if (args.quiet) return;\n console.warn(...values);\n };\n\n let mode = args.mode;\n if (!mode) {\n mode = await promptInstallMode();\n }\n\n const result = mode === \"global\"\n ? installGlobal(args.withConfig)\n : installLocal(args.withConfig);\n\n if (args.outputFormat !== \"text\") {\n const payload: Record<string, unknown> = {\n alreadyInstalled: result.alreadyInstalled\n };\n\n if (result.success && args.skillsMode !== \"none\") {\n const skillsResult = installSkills(args.skillsMode);\n payload.skills = skillsResult;\n }\n\n if (args.fullInstall && result.success) {\n try {\n const extensionPath = extractExtension();\n payload.extensionPath = extensionPath;\n } catch (error) {\n payload.extensionError = error instanceof Error ? error.message : String(error);\n }\n }\n\n return { success: result.success, message: result.message, data: payload };\n }\n\n log(result.message);\n\n if (args.skillsMode === \"none\") {\n log(\"Skill installation skipped (--no-skills).\");\n } else if (result.success) {\n const skillsResult = installSkills(args.skillsMode);\n if (skillsResult.success) {\n log(skillsResult.message);\n } else {\n warn(skillsResult.message);\n }\n } else {\n warn(\"Skill installation skipped because plugin install failed.\");\n }\n\n if (args.fullInstall && result.success) {\n try {\n const extensionPath = extractExtension();\n if (extensionPath) {\n log(`Extension assets extracted to ${extensionPath}`);\n } else {\n warn(\"Extension assets not found; skipping extraction.\");\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n warn(`Extension pre-extraction failed: ${message}`);\n }\n }\n\n if (result.success && !result.alreadyInstalled) {\n log(\"\\nNext steps:\");\n log(\" 1. Start or restart OpenCode\");\n log(\" 2. Use opendevbrowser_status to verify the plugin is loaded\");\n log(\"\\nFor help: npx opendevbrowser --help\");\n }\n\n return { success: result.success, message: result.message };\n }\n });\n\n registerCommand({\n name: \"serve\",\n description: \"Start or stop the local daemon\",\n run: async () => runServe(args)\n });\n\n registerCommand({\n name: \"run\",\n description: \"Execute a JSON script in a single process\",\n run: async () => runScriptCommand(args)\n });\n\n registerCommand({\n name: \"launch\",\n description: \"Launch a managed browser session via daemon\",\n run: async () => runSessionLaunch(args)\n });\n\n registerCommand({\n name: \"connect\",\n description: \"Connect to an existing browser via daemon\",\n run: async () => runSessionConnect(args)\n });\n\n registerCommand({\n name: \"disconnect\",\n description: \"Disconnect a daemon session\",\n run: async () => runSessionDisconnect(args)\n });\n\n registerCommand({\n name: \"status\",\n description: \"Get daemon session status\",\n run: async () => runSessionStatus(args)\n });\n\n registerCommand({\n name: \"goto\",\n description: \"Navigate current session to a URL\",\n run: async () => runGoto(args)\n });\n\n registerCommand({\n name: \"wait\",\n description: \"Wait for load or a ref to appear\",\n run: async () => runWait(args)\n });\n\n registerCommand({\n name: \"snapshot\",\n description: \"Capture a snapshot of the active page\",\n run: async () => runSnapshot(args)\n });\n\n registerCommand({\n name: \"click\",\n description: \"Click an element by ref\",\n run: async () => runClick(args)\n });\n\n registerCommand({\n name: \"type\",\n description: \"Type into an element by ref\",\n run: async () => runType(args)\n });\n\n registerCommand({\n name: \"select\",\n description: \"Select values in a select by ref\",\n run: async () => runSelect(args)\n });\n\n registerCommand({\n name: \"scroll\",\n description: \"Scroll the page or element by ref\",\n run: async () => runScroll(args)\n });\n const command = getCommand(args.command);\n if (!command) {\n throw new Error(`Unknown command: ${args.command}`);\n }\n\n const result = await command.run(args);\n emitResult(result, result.data ? { data: result.data } : undefined);\n const exitCode = resolveExitCode(result);\n if (exitCode === null) {\n return;\n }\n process.exit(exitCode);\n } catch (error) {\n const format = outputFormat ?? detectOutputFormat(process.argv);\n const cliError = toCliError(error, parseSucceeded ? EXIT_EXECUTION : EXIT_USAGE);\n emitFatalError(cliError, format);\n process.exit(cliError.exitCode);\n }\n}\n\nmain().catch((error: unknown) => {\n const cliError = toCliError(error, EXIT_EXECUTION);\n emitFatalError(cliError, detectOutputFormat(process.argv));\n process.exit(cliError.exitCode);\n});\n"],"mappings":"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","names":["mode","noPrompt","fs","fs","path","edits","fs","path","os","fs","fs","path","fs","path","os","fs","path","os","PLUGIN_NAME","fs","path","os","getPluginConfigPath","mkdirSync","readFileSync","writeFileSync","unlinkSync","existsSync","homedir","join","result","resolve","join","homedir","existsSync","readFileSync","mkdirSync","writeFileSync","unlinkSync","resolve","readFileSync","resolve","readFileSync","resolve","result","exitCode"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/args.ts","../../src/cli/commands/registry.ts","../../src/cli/installers/global.ts","../../src/cli/utils/config.ts","../../src/cli/templates/config.ts","../../src/cli/installers/local.ts","../../src/cli/installers/skills.ts","../../src/cli/utils/skills.ts","../../src/cli/commands/update.ts","../../src/cli/commands/uninstall.ts","../../src/cli/utils/parse.ts","../../src/cli/commands/native.ts","../../src/cli/commands/serve.ts","../../src/cli/daemon-autostart.ts","../../src/cli/commands/daemon.ts","../../src/cli/commands/run.ts","../../src/cli/output.ts","../../src/cli/commands/session/launch.ts","../../src/cli/commands/session/connect.ts","../../src/cli/commands/session/disconnect.ts","../../src/cli/commands/session/status.ts","../../src/cli/commands/status.ts","../../src/cli/commands/nav/goto.ts","../../src/cli/commands/nav/wait.ts","../../src/cli/commands/nav/snapshot.ts","../../src/cli/commands/annotate.ts","../../src/cli/commands/interact/click.ts","../../src/cli/commands/interact/hover.ts","../../src/cli/commands/interact/press.ts","../../src/cli/commands/interact/check.ts","../../src/cli/commands/interact/uncheck.ts","../../src/cli/commands/interact/type.ts","../../src/cli/commands/interact/select.ts","../../src/cli/commands/interact/scroll.ts","../../src/cli/commands/interact/scroll-into-view.ts","../../src/cli/commands/targets/list.ts","../../src/cli/commands/targets/use.ts","../../src/cli/commands/targets/new.ts","../../src/cli/commands/targets/close.ts","../../src/cli/commands/pages/open.ts","../../src/cli/commands/pages/list.ts","../../src/cli/commands/pages/close.ts","../../src/cli/commands/dom/html.ts","../../src/cli/commands/dom/text.ts","../../src/cli/commands/dom/attr.ts","../../src/cli/commands/dom/value.ts","../../src/cli/commands/dom/visible.ts","../../src/cli/commands/dom/enabled.ts","../../src/cli/commands/dom/checked.ts","../../src/cli/commands/export/clone-page.ts","../../src/cli/commands/export/clone-component.ts","../../src/cli/commands/devtools/perf.ts","../../src/cli/commands/devtools/screenshot.ts","../../src/cli/commands/devtools/console-poll.ts","../../src/cli/commands/devtools/network-poll.ts","../../src/cli/index.ts"],"sourcesContent":["import { createUsageError } from \"./errors\";\n\nexport type CliCommand = \"install\" | \"update\" | \"uninstall\" | \"help\" | \"version\" | \"serve\" | \"daemon\" | \"native\" | \"run\"\n | \"launch\" | \"connect\" | \"disconnect\" | \"status\"\n | \"goto\" | \"wait\" | \"snapshot\"\n | \"click\" | \"hover\" | \"press\" | \"check\" | \"uncheck\" | \"type\" | \"select\" | \"scroll\" | \"scroll-into-view\"\n | \"targets-list\" | \"target-use\" | \"target-new\" | \"target-close\"\n | \"page\" | \"pages\" | \"page-close\"\n | \"dom-html\" | \"dom-text\" | \"dom-attr\" | \"dom-value\" | \"dom-visible\" | \"dom-enabled\" | \"dom-checked\"\n | \"clone-page\" | \"clone-component\"\n | \"perf\" | \"screenshot\" | \"console-poll\" | \"network-poll\"\n | \"annotate\";\nexport type InstallMode = \"global\" | \"local\";\nexport type SkillsMode = \"global\" | \"local\" | \"none\";\nexport type OutputFormat = \"text\" | \"json\" | \"stream-json\";\nexport type TransportMode = \"relay\" | \"native\";\n\nexport interface ParsedArgs {\n command: CliCommand;\n mode?: InstallMode;\n withConfig: boolean;\n noPrompt: boolean;\n noInteractive: boolean;\n quiet: boolean;\n outputFormat: OutputFormat;\n transport: TransportMode;\n skillsMode: SkillsMode;\n fullInstall: boolean;\n rawArgs: string[];\n}\n\nconst SHORT_FLAGS: Record<string, string> = {\n \"-g\": \"--global\",\n \"-l\": \"--local\",\n \"-u\": \"--update\",\n \"-h\": \"--help\",\n \"-v\": \"--version\",\n \"-f\": \"--full\"\n};\n\nfunction expandShortFlags(args: string[]): string[] {\n return args.map((arg) => SHORT_FLAGS[arg] ?? arg);\n}\n\nfunction parseSkillsMode(args: string[]): SkillsMode {\n const hasLocal = args.includes(\"--skills-local\");\n const hasGlobal = args.includes(\"--skills-global\");\n if (hasLocal && hasGlobal) {\n throw createUsageError(\"Choose either --skills-local or --skills-global.\");\n }\n if (args.includes(\"--no-skills\")) {\n return \"none\";\n }\n if (hasLocal) {\n return \"local\";\n }\n if (hasGlobal) {\n return \"global\";\n }\n return \"global\";\n}\n\nfunction parseOutputFormat(args: string[]): OutputFormat {\n const outputFlag = args.find((arg) => arg.startsWith(\"--output-format\"));\n if (!outputFlag) {\n return \"text\";\n }\n\n let value: string | undefined;\n if (outputFlag.includes(\"=\")) {\n value = outputFlag.split(\"=\", 2)[1];\n } else {\n const index = args.indexOf(outputFlag);\n value = index >= 0 ? args[index + 1] : undefined;\n }\n\n if (value === \"text\" || value === \"json\" || value === \"stream-json\") {\n return value;\n }\n\n throw createUsageError(`Invalid --output-format: ${value ?? \"missing\"}`);\n}\n\nfunction parseTransport(args: string[]): TransportMode {\n const transportFlag = args.find((arg) => arg.startsWith(\"--transport\"));\n if (!transportFlag) {\n return \"relay\";\n }\n\n let value: string | undefined;\n if (transportFlag.includes(\"=\")) {\n value = transportFlag.split(\"=\", 2)[1];\n } else {\n const index = args.indexOf(transportFlag);\n value = index >= 0 ? args[index + 1] : undefined;\n }\n\n if (value === \"relay\" || value === \"native\") {\n return value;\n }\n\n throw createUsageError(`Invalid --transport: ${value ?? \"missing\"}`);\n}\n\nexport function parseArgs(argv: string[]): ParsedArgs {\n let args = expandShortFlags(argv.slice(2));\n let commandOverride: CliCommand | null = null;\n\n if (args[0] && !args[0].startsWith(\"-\")) {\n const candidate = args[0];\n if (candidate === \"install\" || candidate === \"update\" || candidate === \"uninstall\" || candidate === \"help\" || candidate === \"version\" || candidate === \"serve\" || candidate === \"daemon\" || candidate === \"native\" || candidate === \"run\"\n || candidate === \"launch\" || candidate === \"connect\" || candidate === \"disconnect\" || candidate === \"status\"\n || candidate === \"goto\" || candidate === \"wait\" || candidate === \"snapshot\"\n || candidate === \"click\" || candidate === \"hover\" || candidate === \"press\" || candidate === \"check\" || candidate === \"uncheck\"\n || candidate === \"type\" || candidate === \"select\" || candidate === \"scroll\" || candidate === \"scroll-into-view\"\n || candidate === \"targets-list\" || candidate === \"target-use\" || candidate === \"target-new\" || candidate === \"target-close\"\n || candidate === \"page\" || candidate === \"pages\" || candidate === \"page-close\"\n || candidate === \"dom-html\" || candidate === \"dom-text\" || candidate === \"dom-attr\" || candidate === \"dom-value\"\n || candidate === \"dom-visible\" || candidate === \"dom-enabled\" || candidate === \"dom-checked\"\n || candidate === \"clone-page\" || candidate === \"clone-component\"\n || candidate === \"perf\" || candidate === \"screenshot\" || candidate === \"console-poll\" || candidate === \"network-poll\"\n || candidate === \"annotate\") {\n commandOverride = candidate;\n args = args.slice(1);\n } else {\n throw createUsageError(`Unknown command: ${candidate}`);\n }\n }\n const hasGlobal = args.includes(\"--global\");\n const hasLocal = args.includes(\"--local\");\n if (hasGlobal && hasLocal) {\n throw createUsageError(\"Choose either --global or --local.\");\n }\n\n const skillsMode = parseSkillsMode(args);\n const fullInstall = args.includes(\"--full\");\n const outputFormat = parseOutputFormat(args);\n const transport = commandOverride === \"annotate\" ? \"relay\" : parseTransport(args);\n\n if (commandOverride === \"help\" || args.includes(\"--help\") || args.includes(\"-h\")) {\n return {\n command: \"help\",\n withConfig: false,\n noPrompt: false,\n noInteractive: false,\n quiet: false,\n outputFormat,\n transport,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n if (commandOverride === \"version\" || args.includes(\"--version\") || args.includes(\"-v\")) {\n return {\n command: \"version\",\n withConfig: false,\n noPrompt: false,\n noInteractive: false,\n quiet: false,\n outputFormat,\n transport,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n if (commandOverride === \"update\" || args.includes(\"--update\")) {\n const mode = args.includes(\"--global\") ? \"global\" : args.includes(\"--local\") ? \"local\" : undefined;\n return {\n command: \"update\",\n mode,\n withConfig: false,\n noPrompt: false,\n noInteractive: false,\n quiet: false,\n outputFormat,\n transport,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n if (commandOverride === \"uninstall\" || args.includes(\"--uninstall\")) {\n const mode = args.includes(\"--global\") ? \"global\" : args.includes(\"--local\") ? \"local\" : undefined;\n const noPrompt = args.includes(\"--no-prompt\") || args.includes(\"--no-interactive\");\n return {\n command: \"uninstall\",\n mode,\n withConfig: false,\n noPrompt,\n noInteractive: noPrompt,\n quiet: args.includes(\"--quiet\"),\n outputFormat,\n transport,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n const withConfig = args.includes(\"--with-config\") || fullInstall;\n const noPrompt = args.includes(\"--no-prompt\") || args.includes(\"--no-interactive\");\n const noInteractive = args.includes(\"--no-interactive\") || noPrompt;\n const quiet = args.includes(\"--quiet\");\n\n let mode: InstallMode | undefined;\n if (args.includes(\"--global\")) {\n mode = \"global\";\n } else if (args.includes(\"--local\")) {\n mode = \"local\";\n } else if (noPrompt) {\n mode = \"global\";\n }\n\n const validFlags = new Set([\n \"--global\", \"--local\", \"--update\", \"--uninstall\",\n \"--help\", \"--version\", \"--with-config\", \"--no-prompt\",\n \"--no-interactive\", \"--quiet\", \"--output-format\",\n \"--full\",\n \"--port\", \"--token\", \"--stop\",\n \"--script\", \"--headless\", \"--profile\", \"--persist-profile\", \"--chrome-path\", \"--start-url\", \"--flag\",\n \"--session-id\", \"--close-browser\", \"--ws-endpoint\", \"--host\", \"--cdp-port\",\n \"--url\", \"--wait-until\", \"--timeout-ms\", \"--ref\", \"--state\", \"--until\", \"--mode\", \"--max-chars\", \"--cursor\",\n \"--text\", \"--clear\", \"--submit\", \"--values\", \"--dy\", \"--key\", \"--attr\",\n \"--name\", \"--target-id\", \"--tab-id\", \"--include-urls\", \"--path\", \"--since-seq\", \"--max\",\n \"--daemon\",\n \"--transport\",\n \"--no-extension\", \"--extension-only\", \"--extension-legacy\", \"--wait-for-extension\", \"--wait-timeout-ms\",\n \"--skills-global\", \"--skills-local\", \"--no-skills\",\n \"--screenshot-mode\", \"--debug\", \"--context\"\n ]);\n\n const validEqualsFlags = new Set([\n \"--output-format\",\n \"--transport\",\n \"--session-id\",\n \"--url\",\n \"--screenshot-mode\",\n \"--context\",\n \"--timeout-ms\",\n \"--target-id\",\n \"--tab-id\"\n ]);\n\n for (const arg of args) {\n if (arg.startsWith(\"--\") && !validFlags.has(arg)) {\n if (arg.includes(\"=\")) {\n const baseFlag = arg.split(\"=\", 2)[0] ?? \"\";\n if (validEqualsFlags.has(baseFlag)) {\n continue;\n }\n }\n throw createUsageError(`Unknown flag: ${arg}`);\n }\n if (arg.startsWith(\"-\") && !arg.startsWith(\"--\") && !SHORT_FLAGS[arg]) {\n throw createUsageError(`Unknown flag: ${arg}`);\n }\n }\n\n return {\n command: commandOverride ?? \"install\",\n mode,\n withConfig,\n noPrompt,\n noInteractive,\n quiet,\n outputFormat,\n transport,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n}\n\nexport function getHelpText(): string {\n return `\nOpenDevBrowser CLI - Install and manage the OpenDevBrowser plugin\n\nUSAGE:\n npx opendevbrowser [command] [options]\n\nCOMMANDS:\n install Install the plugin (default if no command specified)\n update Clear cached plugin to trigger reinstall\n uninstall Remove plugin from config\n serve Start or stop the local daemon\n daemon Install/uninstall/status daemon auto-start\n native Install/uninstall/status native messaging host\n run Execute a JSON script in a single process\n launch Launch a managed browser session via daemon\n connect Connect to an existing browser via daemon\n disconnect Disconnect a daemon session\n status Get daemon status (or session status with --session-id)\n goto Navigate current session to a URL\n wait Wait for load or a ref to appear\n snapshot Capture a snapshot of the active page\n click Click an element by ref\n hover Hover an element by ref\n press Press a keyboard key\n check Check a checkbox by ref\n uncheck Uncheck a checkbox by ref\n type Type into an element by ref\n select Select values in a select by ref\n scroll Scroll the page or element by ref\n scroll-into-view Scroll an element into view by ref\n targets-list List page targets\n target-use Focus a target by id\n target-new Open a new target\n target-close Close a target by id\n page Open or focus a named page\n pages List named pages\n page-close Close a named page\n dom-html Capture HTML for a ref\n dom-text Capture text for a ref\n dom-attr Capture attribute value for a ref\n dom-value Capture input value for a ref\n dom-visible Check visibility for a ref\n dom-enabled Check enabled state for a ref\n dom-checked Check checked state for a ref\n clone-page Clone the active page to React\n clone-component Clone a component by ref\n perf Capture performance metrics\n screenshot Capture a screenshot\n console-poll Poll console events\n network-poll Poll network events\n annotate Request interactive annotations (direct or relay)\n help Show this help message\n version Show version\n\nALIASES:\n --update, -u Same as update\n --uninstall Same as uninstall\n --help, -h Same as help\n --version, -v Same as version\n\nINSTALL OPTIONS:\n --global, -g Install to ~/.config/opencode/opencode.json\n --local, -l Install to ./opencode.json (project-local)\n --with-config Also create opendevbrowser.jsonc with defaults\n --full, -f Create config and pre-extract extension assets\n --no-prompt Skip prompts, use defaults (global install)\n --no-interactive Alias of --no-prompt\n --quiet Suppress non-error output\n --output-format Output format: text (default), json, stream-json\n --transport Transport: relay (default) or native\n --skills-global Install bundled skills to ~/.config/opencode/skill (default)\n --skills-local Install bundled skills to ./.opencode/skill\n --no-skills Skip installing bundled skills\n\nEXAMPLES:\n npx opendevbrowser # Interactive install\n npx opendevbrowser --global # Global install\n npx opendevbrowser --local # Project install\n npx opendevbrowser --full # Install + config + extension assets\n npx opendevbrowser -g --with-config # Global + config file\n npx opendevbrowser --skills-local # Install skills locally\n npx opendevbrowser --no-skills # Skip skill installation\n npx opendevbrowser --update # Update plugin\n npx opendevbrowser --uninstall --global # Remove from global config\n npx opendevbrowser native install <extension-id> # Install native host\n`.trim();\n}\n\nexport function detectOutputFormat(argv: string[]): OutputFormat {\n const args = expandShortFlags(argv.slice(2));\n try {\n return parseOutputFormat(args);\n } catch {\n return \"text\";\n }\n}\n\nexport function detectQuiet(argv: string[]): boolean {\n const args = expandShortFlags(argv.slice(2));\n return args.includes(\"--quiet\");\n}\n","import type { CommandDefinition } from \"./types\";\n\nconst registry = new Map<string, CommandDefinition>();\n\nexport function registerCommand(definition: CommandDefinition): void {\n registry.set(definition.name, definition);\n}\n\nexport function getCommand(name: string): CommandDefinition | undefined {\n return registry.get(name);\n}\n\nexport function listCommands(): CommandDefinition[] {\n return Array.from(registry.values());\n}\n","import * as fs from \"fs\";\nimport {\n getGlobalConfigPath,\n readConfig,\n hasPlugin,\n ensureDir,\n updateConfigContent\n} from \"../utils/config\";\nimport { createPluginConfig } from \"../templates/config\";\n\nexport interface InstallResult {\n success: boolean;\n message: string;\n configPath: string;\n created: boolean;\n alreadyInstalled: boolean;\n}\n\nexport function installGlobal(withConfig: boolean = false): InstallResult {\n const configPath = getGlobalConfigPath();\n\n try {\n const { content, config } = readConfig(configPath);\n\n if (hasPlugin(config)) {\n return {\n success: true,\n message: `opendevbrowser is already installed in ${configPath}`,\n configPath,\n created: false,\n alreadyInstalled: true\n };\n }\n\n const newContent = updateConfigContent(content, \"opendevbrowser\");\n\n ensureDir(configPath.replace(/[/\\\\][^/\\\\]+$/, \"\"));\n fs.writeFileSync(configPath, newContent, \"utf-8\");\n\n if (withConfig) {\n createPluginConfig(\"global\");\n }\n\n return {\n success: true,\n message: `Added opendevbrowser to ${configPath}`,\n configPath,\n created: content.trim() === \"\",\n alreadyInstalled: false\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to install globally: ${message}`,\n configPath,\n created: false,\n alreadyInstalled: false\n };\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport { parse as parseJsonc, modify, applyEdits } from \"jsonc-parser\";\nimport { writeFileAtomic } from \"../../utils/fs\";\n\nconst PLUGIN_NAME = \"opendevbrowser\";\nconst SCHEMA_URL = \"https://opencode.ai/config.json\";\n\nexport interface OpenCodeConfig {\n $schema?: string;\n plugin?: string[];\n [key: string]: unknown;\n}\n\nexport function getGlobalConfigPath(): string {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, \"opencode.json\");\n}\n\nexport function getLocalConfigPath(): string {\n return path.join(process.cwd(), \"opencode.json\");\n}\n\nexport function ensureDir(dirPath: string): void {\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true });\n }\n}\n\nexport function readConfig(configPath: string): { content: string; config: OpenCodeConfig } {\n if (!fs.existsSync(configPath)) {\n return { content: \"\", config: {} };\n }\n\n const content = fs.readFileSync(configPath, \"utf-8\");\n const errors: Array<{ error: number; offset: number; length: number }> = [];\n const parsed = parseJsonc(content, errors, { allowTrailingComma: true });\n\n if (errors.length > 0) {\n const firstError = errors[0];\n throw new Error(`Invalid JSONC at ${configPath}: parse error at offset ${firstError?.offset ?? 0}`);\n }\n\n return { content, config: (parsed ?? {}) as OpenCodeConfig };\n}\n\nexport function writeConfig(configPath: string, config: OpenCodeConfig): void {\n ensureDir(path.dirname(configPath));\n const content = JSON.stringify(config, null, 2) + \"\\n\";\n writeFileAtomic(configPath, content);\n}\n\nexport function addPlugin(config: OpenCodeConfig, pluginName: string = PLUGIN_NAME): OpenCodeConfig {\n const result = { ...config };\n\n if (!result.$schema) {\n result.$schema = SCHEMA_URL;\n }\n\n if (!result.plugin) {\n result.plugin = [pluginName];\n } else if (!result.plugin.includes(pluginName)) {\n result.plugin = [...result.plugin, pluginName];\n }\n\n return result;\n}\n\nexport function removePlugin(config: OpenCodeConfig, pluginName: string = PLUGIN_NAME): OpenCodeConfig {\n const result = { ...config };\n\n if (result.plugin) {\n result.plugin = result.plugin.filter((p) => p !== pluginName);\n if (result.plugin.length === 0) {\n delete result.plugin;\n }\n }\n\n return result;\n}\n\nexport function hasPlugin(config: OpenCodeConfig, pluginName: string = PLUGIN_NAME): boolean {\n return config.plugin?.includes(pluginName) ?? false;\n}\n\nexport function createConfigWithPlugin(pluginName: string = PLUGIN_NAME): OpenCodeConfig {\n return {\n $schema: SCHEMA_URL,\n plugin: [pluginName]\n };\n}\n\nexport function updateConfigContent(content: string, pluginName: string = PLUGIN_NAME): string {\n if (!content.trim()) {\n return JSON.stringify(createConfigWithPlugin(pluginName), null, 2) + \"\\n\";\n }\n\n const parsed = parseJsonc(content, [], { allowTrailingComma: true }) as OpenCodeConfig ?? {};\n\n if (parsed.plugin?.includes(pluginName)) {\n return content;\n }\n\n let result = content;\n\n if (!parsed.$schema) {\n const edits = modify(result, [\"$schema\"], SCHEMA_URL, { formattingOptions: { tabSize: 2, insertSpaces: true } });\n result = applyEdits(result, edits);\n }\n\n const newPlugins = parsed.plugin ? [...parsed.plugin, pluginName] : [pluginName];\n const edits = modify(result, [\"plugin\"], newPlugins, { formattingOptions: { tabSize: 2, insertSpaces: true } });\n result = applyEdits(result, edits);\n\n return result;\n}\n\nexport function removePluginFromContent(content: string, pluginName: string = PLUGIN_NAME): string {\n if (!content.trim()) {\n return content;\n }\n\n const parsed = parseJsonc(content, [], { allowTrailingComma: true }) as OpenCodeConfig ?? {};\n\n if (!parsed.plugin?.includes(pluginName)) {\n return content;\n }\n\n const newPlugins = parsed.plugin.filter((p) => p !== pluginName);\n const edits = modify(content, [\"plugin\"], newPlugins.length > 0 ? newPlugins : undefined, {\n formattingOptions: { tabSize: 2, insertSpaces: true }\n });\n\n return applyEdits(content, edits);\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport { generateSecureToken } from \"../../utils/crypto\";\nimport { writeFileAtomic } from \"../../utils/fs\";\n\nfunction buildConfigTemplate(relayToken: string, daemonToken: string): string {\n return `{\n // OpenDevBrowser Plugin Configuration\n // See: https://github.com/anthropics/opendevbrowser#configuration\n\n \"headless\": false,\n \"profile\": \"default\",\n \"persistProfile\": true,\n\n \"snapshot\": {\n \"maxChars\": 16000,\n \"maxNodes\": 1000\n },\n\n \"export\": {\n \"maxNodes\": 1000,\n \"inlineStyles\": true\n },\n\n \"devtools\": {\n \"showFullUrls\": false,\n \"showFullConsole\": false\n },\n\n \"security\": {\n \"allowRawCDP\": false,\n \"allowNonLocalCdp\": false,\n \"allowUnsafeExport\": false\n },\n\n \"skillPaths\": [],\n \"skills\": {\n \"nudge\": {\n \"enabled\": true,\n \"keywords\": [\"login\", \"form\", \"extract\"],\n \"maxAgeMs\": 60000\n }\n },\n\n \"continuity\": {\n \"enabled\": true,\n \"filePath\": \"opendevbrowser_continuity.md\",\n \"nudge\": {\n \"enabled\": true,\n \"keywords\": [\n \"plan\",\n \"multi-step\",\n \"multi step\",\n \"long-running\",\n \"long running\",\n \"refactor\",\n \"migration\",\n \"rollout\",\n \"release\",\n \"upgrade\",\n \"investigate\",\n \"follow-up\",\n \"continue\"\n ],\n \"maxAgeMs\": 60000\n }\n },\n\n \"relayPort\": 8787,\n \"relayToken\": \"${relayToken}\",\n \"daemonPort\": 8788,\n \"daemonToken\": \"${daemonToken}\",\n\n \"flags\": [],\n\n \"checkForUpdates\": false\n}\n`;\n}\n\nexport function getPluginConfigPath(mode: \"global\" | \"local\"): string {\n if (mode === \"global\") {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, \"opendevbrowser.jsonc\");\n }\n return path.join(process.cwd(), \"opendevbrowser.jsonc\");\n}\n\nexport function createPluginConfig(mode: \"global\" | \"local\"): { created: boolean; path: string } {\n const configPath = getPluginConfigPath(mode);\n\n if (fs.existsSync(configPath)) {\n return { created: false, path: configPath };\n }\n\n const dir = path.dirname(configPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n const relayToken = generateSecureToken();\n const daemonToken = generateSecureToken();\n writeFileAtomic(configPath, buildConfigTemplate(relayToken, daemonToken));\n return { created: true, path: configPath };\n}\n\nexport function getConfigTemplate(): string {\n return buildConfigTemplate(generateSecureToken(), generateSecureToken());\n}\n","import * as fs from \"fs\";\nimport {\n getLocalConfigPath,\n readConfig,\n hasPlugin,\n updateConfigContent\n} from \"../utils/config\";\nimport { createPluginConfig } from \"../templates/config\";\n\nexport interface InstallResult {\n success: boolean;\n message: string;\n configPath: string;\n created: boolean;\n alreadyInstalled: boolean;\n}\n\nexport function installLocal(withConfig: boolean = false): InstallResult {\n const configPath = getLocalConfigPath();\n\n try {\n const { content, config } = readConfig(configPath);\n\n if (hasPlugin(config)) {\n return {\n success: true,\n message: `opendevbrowser is already installed in ${configPath}`,\n configPath,\n created: false,\n alreadyInstalled: true\n };\n }\n\n const newContent = updateConfigContent(content, \"opendevbrowser\");\n\n fs.writeFileSync(configPath, newContent, \"utf-8\");\n\n if (withConfig) {\n createPluginConfig(\"local\");\n }\n\n return {\n success: true,\n message: `Added opendevbrowser to ${configPath}`,\n configPath,\n created: content.trim() === \"\",\n alreadyInstalled: false\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to install locally: ${message}`,\n configPath,\n created: false,\n alreadyInstalled: false\n };\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { ensureDir } from \"../utils/config\";\nimport { getBundledSkillsDir, getGlobalSkillDir, getLocalSkillDir } from \"../utils/skills\";\n\nexport type SkillInstallMode = \"global\" | \"local\";\n\nexport interface SkillInstallResult {\n success: boolean;\n message: string;\n targetDir: string;\n installed: string[];\n skipped: string[];\n}\n\nexport function installSkills(mode: SkillInstallMode): SkillInstallResult {\n const targetDir = mode === \"global\" ? getGlobalSkillDir() : getLocalSkillDir();\n const installed: string[] = [];\n const skipped: string[] = [];\n\n try {\n const sourceDir = getBundledSkillsDir();\n const entries = fs.readdirSync(sourceDir, { withFileTypes: true });\n\n ensureDir(targetDir);\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const skillName = entry.name;\n const sourcePath = path.join(sourceDir, skillName);\n const targetPath = path.join(targetDir, skillName);\n\n if (fs.existsSync(targetPath)) {\n skipped.push(skillName);\n continue;\n }\n\n fs.cpSync(sourcePath, targetPath, { recursive: true });\n installed.push(skillName);\n }\n\n const summary = `Skills ${mode} install: ${installed.length} installed${skipped.length ? `, ${skipped.length} skipped` : \"\"} (${targetDir})`;\n return {\n success: true,\n message: summary,\n targetDir,\n installed,\n skipped\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to install skills (${mode}): ${message}`,\n targetDir,\n installed,\n skipped\n };\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport { fileURLToPath } from \"url\";\n\nconst PACKAGE_NAME = \"opendevbrowser\";\nconst SKILL_DIR_NAME = \"skill\";\n\nlet cachedPackageRoot: string | null = null;\n\nfunction findPackageRoot(startDir: string): string {\n let current = startDir;\n\n while (true) {\n const pkgPath = path.join(current, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n try {\n const parsed = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\")) as { name?: string };\n if (parsed.name === PACKAGE_NAME) {\n return current;\n }\n } catch {\n void 0;\n }\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n\n throw new Error(\"Unable to locate opendevbrowser package root for skill installation.\");\n}\n\nexport function getPackageRoot(): string {\n if (cachedPackageRoot) return cachedPackageRoot;\n const moduleDir = path.dirname(fileURLToPath(import.meta.url));\n cachedPackageRoot = findPackageRoot(moduleDir);\n return cachedPackageRoot;\n}\n\nexport function getBundledSkillsDir(): string {\n const skillsDir = path.join(getPackageRoot(), \"skills\");\n if (!fs.existsSync(skillsDir)) {\n throw new Error(`Bundled skills directory not found at ${skillsDir}`);\n }\n return skillsDir;\n}\n\nexport function getGlobalSkillDir(): string {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, SKILL_DIR_NAME);\n}\n\nexport function getLocalSkillDir(): string {\n return path.join(process.cwd(), \".opencode\", SKILL_DIR_NAME);\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\n\nconst PLUGIN_NAME = \"opendevbrowser\";\n\nexport interface UpdateResult {\n success: boolean;\n message: string;\n cleared: boolean;\n}\n\nfunction getCacheDir(): string {\n return process.env.OPENCODE_CACHE_DIR\n || path.join(os.homedir(), \".cache\", \"opencode\");\n}\n\nfunction rmdir(dirPath: string): void {\n const cacheDir = getCacheDir();\n const resolvedCache = path.resolve(cacheDir);\n const resolvedPath = path.resolve(dirPath);\n\n if (!resolvedPath.startsWith(resolvedCache + path.sep) || resolvedPath === resolvedCache) {\n throw new Error(`Security: refusing to delete path outside cache directory: ${dirPath}`);\n }\n\n if (fs.existsSync(dirPath)) {\n fs.rmSync(dirPath, { recursive: true, force: true });\n }\n}\n\nexport function runUpdate(): UpdateResult {\n const cacheDir = getCacheDir();\n const nodeModulesDir = path.join(cacheDir, \"node_modules\");\n const pluginCacheDir = path.join(nodeModulesDir, PLUGIN_NAME);\n\n try {\n if (!fs.existsSync(pluginCacheDir)) {\n if (fs.existsSync(nodeModulesDir)) {\n rmdir(nodeModulesDir);\n return {\n success: true,\n message: \"Cleared OpenCode plugin cache. The latest version will be installed on next run.\",\n cleared: true\n };\n }\n\n return {\n success: true,\n message: \"No cached plugin found. OpenCode will install the latest version on next run.\",\n cleared: false\n };\n }\n\n rmdir(pluginCacheDir);\n\n return {\n success: true,\n message: \"Cache cleared. OpenCode will install the latest version on next run.\",\n cleared: true\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to clear cache: ${message}`,\n cleared: false\n };\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport {\n getGlobalConfigPath,\n getLocalConfigPath,\n readConfig,\n hasPlugin,\n removePluginFromContent\n} from \"../utils/config\";\nimport type { InstallMode } from \"../args\";\n\nexport interface UninstallResult {\n success: boolean;\n message: string;\n configPath?: string;\n removed: boolean;\n configFileDeleted: boolean;\n}\n\nfunction getPluginConfigPath(mode: InstallMode): string {\n if (mode === \"global\") {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, \"opendevbrowser.jsonc\");\n }\n return path.join(process.cwd(), \"opendevbrowser.jsonc\");\n}\n\nfunction removePluginConfigFile(mode: InstallMode): boolean {\n const configPath = getPluginConfigPath(mode);\n if (fs.existsSync(configPath)) {\n fs.unlinkSync(configPath);\n return true;\n }\n return false;\n}\n\nexport function runUninstall(\n mode: InstallMode,\n deleteConfigFile: boolean = false\n): UninstallResult {\n const configPath = mode === \"global\" ? getGlobalConfigPath() : getLocalConfigPath();\n\n try {\n const { content, config } = readConfig(configPath);\n\n if (!hasPlugin(config)) {\n return {\n success: true,\n message: `opendevbrowser is not installed in ${configPath}`,\n configPath,\n removed: false,\n configFileDeleted: false\n };\n }\n\n const newContent = removePluginFromContent(content, \"opendevbrowser\");\n\n fs.writeFileSync(configPath, newContent, \"utf-8\");\n\n let configFileDeleted = false;\n if (deleteConfigFile) {\n configFileDeleted = removePluginConfigFile(mode);\n }\n\n return {\n success: true,\n message: `Removed opendevbrowser from ${configPath}`,\n configPath,\n removed: true,\n configFileDeleted\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to uninstall: ${message}`,\n configPath,\n removed: false,\n configFileDeleted: false\n };\n }\n}\n\nexport function findInstalledConfigs(): { global: boolean; local: boolean } {\n let global = false;\n let local = false;\n\n try {\n const { config: globalConfig } = readConfig(getGlobalConfigPath());\n global = hasPlugin(globalConfig);\n } catch {\n void 0;\n }\n\n try {\n const { config: localConfig } = readConfig(getLocalConfigPath());\n local = hasPlugin(localConfig);\n } catch {\n void 0;\n }\n\n return { global, local };\n}\n","import { createUsageError } from \"../errors\";\n\ntype NumberFlagOptions = {\n min?: number;\n max?: number;\n integer?: boolean;\n};\n\nexport function parseNumberFlag(value: string, flag: string, options: NumberFlagOptions = {}): number {\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) {\n throw createUsageError(`Invalid ${flag}: ${value}`);\n }\n const requireInteger = options.integer ?? true;\n if (requireInteger && !Number.isInteger(parsed)) {\n throw createUsageError(`Invalid ${flag}: ${value}`);\n }\n if (typeof options.min === \"number\" && parsed < options.min) {\n throw createUsageError(`Invalid ${flag}: ${value}`);\n }\n if (typeof options.max === \"number\" && parsed > options.max) {\n throw createUsageError(`Invalid ${flag}: ${value}`);\n }\n return parsed;\n}\n\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { homedir } from \"os\";\nimport { execFileSync } from \"child_process\";\nimport { fileURLToPath } from \"url\";\nimport type { ParsedArgs } from \"../args\";\nimport { createUsageError, EXIT_DISCONNECTED, EXIT_EXECUTION } from \"../errors\";\nimport { getExtensionPath } from \"../../extension-extractor\";\n\ntype NativeSubcommand = \"install\" | \"uninstall\" | \"status\";\n\ntype NativeStatus = {\n installed: boolean;\n manifestPath: string | null;\n wrapperPath: string | null;\n hostScriptPath: string;\n extensionId: string | null;\n registryPath: string | null;\n};\n\nconst EXTENSION_ID_RE = /^[a-p]{32}$/;\nconst EXTENSION_NAME = \"OpenDevBrowser Relay\";\nconst ANNOTATION_COMMAND_NAME = \"toggle-annotation\";\ntype ExtensionIdMatchReason = \"path\" | \"name\" | \"command\";\n\nconst normalizeExtensionId = (value: string | undefined): string | null => {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n return EXTENSION_ID_RE.test(trimmed) ? trimmed : null;\n};\n\nconst requireExtensionId = (value: string | undefined): string => {\n if (!value) {\n throw createUsageError(\"Missing extension ID. Usage: opendevbrowser native install <extension-id>\");\n }\n const normalized = normalizeExtensionId(value);\n if (!normalized) {\n throw createUsageError(\"Invalid extension ID format. Expected 32 characters (a-p).\");\n }\n return normalized;\n};\n\nconst parseNativeArgs = (rawArgs: string[]): { subcommand: NativeSubcommand; extensionId?: string } => {\n const subcommand = rawArgs[0];\n if (subcommand !== \"install\" && subcommand !== \"uninstall\" && subcommand !== \"status\") {\n throw createUsageError(\"Usage: opendevbrowser native <install|uninstall|status> [extension-id]\");\n }\n if (subcommand === \"install\") {\n const extensionId = requireExtensionId(rawArgs[1]);\n return { subcommand, extensionId };\n }\n return { subcommand };\n};\n\nconst getManifestDir = (): string => {\n if (process.platform === \"darwin\") {\n return path.join(process.env.HOME || \"\", \"Library\", \"Application Support\", \"Google\", \"Chrome\", \"NativeMessagingHosts\");\n }\n if (process.platform === \"linux\") {\n return path.join(process.env.HOME || \"\", \".config\", \"google-chrome\", \"NativeMessagingHosts\");\n }\n if (process.platform === \"win32\") {\n const base = process.env.LOCALAPPDATA\n || (process.env.USERPROFILE ? path.join(process.env.USERPROFILE, \"AppData\", \"Local\") : \"\");\n if (!base) {\n throw createUsageError(\"LOCALAPPDATA is not set. Unable to locate NativeMessagingHosts directory.\");\n }\n return path.join(base, \"Google\", \"Chrome\", \"User Data\", \"NativeMessagingHosts\");\n }\n throw createUsageError(`Native messaging is not supported on ${process.platform}.`);\n};\n\nconst getScriptsDir = (): string => {\n const __filename = fileURLToPath(import.meta.url);\n const startDir = path.dirname(__filename);\n const rootsToScan = [startDir, process.cwd()];\n\n for (const root of rootsToScan) {\n let current = path.resolve(root);\n while (true) {\n const scriptsDir = path.join(current, \"scripts\", \"native\");\n const packageJsonPath = path.join(current, \"package.json\");\n if (fs.existsSync(scriptsDir) && fs.existsSync(packageJsonPath)) {\n return scriptsDir;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n }\n\n throw createUsageError(\"Unable to locate scripts/native directory.\");\n};\n\nconst getHostScriptPath = (): string => {\n return path.join(getScriptsDir(), \"host.cjs\");\n};\n\nconst getManifestPath = (): string => {\n return path.join(getManifestDir(), \"com.opendevbrowser.native.json\");\n};\n\nconst getWrapperPath = (): string => {\n const wrapperName = process.platform === \"win32\"\n ? \"com.opendevbrowser.native.cmd\"\n : \"com.opendevbrowser.native.sh\";\n return path.join(getManifestDir(), wrapperName);\n};\n\nconst readManifest = (manifestPath: string): { extensionId: string | null } => {\n try {\n const raw = fs.readFileSync(manifestPath, \"utf8\");\n const data = JSON.parse(raw) as { allowed_origins?: string[] };\n const origins = Array.isArray(data.allowed_origins) ? data.allowed_origins : [];\n const match = origins.find((origin) => origin.startsWith(\"chrome-extension://\"));\n if (!match) return { extensionId: null };\n const id = match.replace(\"chrome-extension://\", \"\").replace(\"/\", \"\");\n return { extensionId: EXTENSION_ID_RE.test(id) ? id : null };\n } catch {\n return { extensionId: null };\n }\n};\n\nconst runScript = (script: string, args: string[]): void => {\n if (process.platform === \"win32\") {\n execFileSync(\"powershell\", [\"-NoProfile\", \"-ExecutionPolicy\", \"Bypass\", \"-File\", script, ...args], { stdio: \"pipe\" });\n return;\n }\n execFileSync(\"bash\", [script, ...args], { stdio: \"pipe\" });\n};\n\nconst readRegistryPath = (): string | null => {\n if (process.platform !== \"win32\") return null;\n const key = \"HKCU\\\\Software\\\\Google\\\\Chrome\\\\NativeMessagingHosts\\\\com.opendevbrowser.native\";\n try {\n const output = execFileSync(\"reg\", [\"query\", key, \"/ve\"], { encoding: \"utf8\" });\n const lines = output.split(/\\r?\\n/);\n for (const line of lines) {\n if (line.includes(\"REG_SZ\")) {\n const parts = line.trim().split(/\\s{2,}/);\n return parts[parts.length - 1] || null;\n }\n }\n return null;\n } catch {\n return null;\n }\n};\n\nconst normalizePath = (value: string): string => {\n try {\n return fs.realpathSync(value);\n } catch {\n return path.resolve(value);\n }\n};\n\nconst getChromeUserDataRoots = (): string[] => {\n if (process.platform === \"darwin\") {\n return [\n path.join(homedir(), \"Library\", \"Application Support\", \"Google\", \"Chrome\"),\n path.join(homedir(), \"Library\", \"Application Support\", \"Chromium\"),\n path.join(homedir(), \"Library\", \"Application Support\", \"BraveSoftware\", \"Brave-Browser\")\n ];\n }\n if (process.platform === \"linux\") {\n return [\n path.join(homedir(), \".config\", \"google-chrome\"),\n path.join(homedir(), \".config\", \"chromium\"),\n path.join(homedir(), \".config\", \"BraveSoftware\", \"Brave-Browser\")\n ];\n }\n if (process.platform === \"win32\") {\n const base = process.env.LOCALAPPDATA\n || (process.env.USERPROFILE ? path.join(process.env.USERPROFILE, \"AppData\", \"Local\") : \"\");\n if (!base) return [];\n return [\n path.join(base, \"Google\", \"Chrome\", \"User Data\"),\n path.join(base, \"Chromium\", \"User Data\"),\n path.join(base, \"BraveSoftware\", \"Brave-Browser\", \"User Data\")\n ];\n }\n return [];\n};\n\nconst PROFILE_PREFERENCES_FILES = [\"Preferences\", \"Secure Preferences\"] as const;\n\nconst getProfileDirs = (root: string): string[] => {\n try {\n const entries = fs.readdirSync(root, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory() && (entry.name === \"Default\" || entry.name.startsWith(\"Profile \")))\n .map((entry) => path.join(root, entry.name))\n .filter((dir) => PROFILE_PREFERENCES_FILES.some((filename) => fs.existsSync(path.join(dir, filename))));\n } catch {\n return [];\n }\n};\n\nconst readProfilePreferences = (profileDir: string): Record<string, unknown>[] => {\n const records: Record<string, unknown>[] = [];\n for (const filename of PROFILE_PREFERENCES_FILES) {\n try {\n const raw = fs.readFileSync(path.join(profileDir, filename), \"utf8\");\n records.push(JSON.parse(raw) as Record<string, unknown>);\n } catch {\n // Missing or invalid preference files are ignored; other sources may still be valid.\n }\n }\n return records;\n};\n\nconst findExtensionIdInCommands = (preferences: Record<string, unknown>): string | null => {\n const extensionCommands = preferences.extensions as Record<string, unknown> | undefined;\n const commandMaps: Array<Record<string, unknown> | undefined> = [\n extensionCommands?.commands as Record<string, unknown> | undefined,\n ((preferences.account_values as Record<string, unknown> | undefined)?.extensions as Record<string, unknown> | undefined)\n ?.commands as Record<string, unknown> | undefined\n ];\n\n for (const commandMap of commandMaps) {\n if (!commandMap) {\n continue;\n }\n for (const value of Object.values(commandMap)) {\n if (typeof value !== \"object\" || value === null) {\n continue;\n }\n const entry = value as Record<string, unknown>;\n const commandName = typeof entry.command_name === \"string\" ? entry.command_name : null;\n const extensionId = typeof entry.extension === \"string\" ? entry.extension : null;\n if (commandName === ANNOTATION_COMMAND_NAME && extensionId && EXTENSION_ID_RE.test(extensionId)) {\n return extensionId;\n }\n }\n }\n\n return null;\n};\n\nconst findExtensionIdInPreferences = (\n preferences: Record<string, unknown>,\n extensionPath: string | null\n): { id: string; matchedBy: \"path\" | \"name\" } | null => {\n const extensions = preferences.extensions as Record<string, unknown> | undefined;\n const settings = extensions?.settings as Record<string, unknown> | undefined;\n if (!settings) return null;\n\n const normalizedTargetPath = extensionPath ? normalizePath(extensionPath) : null;\n let nameMatch: string | null = null;\n\n for (const [id, entry] of Object.entries(settings)) {\n if (!EXTENSION_ID_RE.test(id) || typeof entry !== \"object\" || entry === null) {\n continue;\n }\n const record = entry as Record<string, unknown>;\n const recordPath = typeof record.path === \"string\" ? record.path : null;\n if (recordPath && normalizedTargetPath) {\n if (normalizePath(recordPath) === normalizedTargetPath) {\n return { id, matchedBy: \"path\" };\n }\n }\n const manifest = record.manifest as Record<string, unknown> | undefined;\n const name = typeof manifest?.name === \"string\" ? manifest.name : null;\n if (!nameMatch && name === EXTENSION_NAME) {\n nameMatch = id;\n }\n }\n\n if (nameMatch) {\n return { id: nameMatch, matchedBy: \"name\" };\n }\n return null;\n};\n\nconst getExtensionPathCandidates = (): Array<string | null> => {\n const candidates = new Set<string>();\n const primary = getExtensionPath();\n if (primary) {\n candidates.add(normalizePath(primary));\n }\n\n const cwdExtension = path.join(process.cwd(), \"extension\");\n if (fs.existsSync(path.join(cwdExtension, \"manifest.json\"))) {\n candidates.add(normalizePath(cwdExtension));\n }\n\n if (candidates.size === 0) {\n return [null];\n }\n return [...candidates];\n};\n\nexport const getNativeStatusSnapshot = (): NativeStatus => {\n const hostScript = getHostScriptPath();\n const manifestPath = getManifestPath();\n const wrapperPath = getWrapperPath();\n const registryPath = readRegistryPath();\n\n let installed = false;\n let manifestExists = false;\n let wrapperExists = false;\n let extensionIdValue: string | null = null;\n if (fs.existsSync(manifestPath)) {\n manifestExists = true;\n installed = true;\n const manifest = readManifest(manifestPath);\n extensionIdValue = manifest.extensionId;\n }\n if (fs.existsSync(wrapperPath)) {\n wrapperExists = true;\n }\n if (!manifestExists || !wrapperExists) {\n installed = false;\n }\n if (process.platform === \"win32\" && !registryPath) {\n installed = false;\n }\n\n return {\n installed,\n manifestPath: manifestExists ? manifestPath : null,\n wrapperPath: wrapperExists ? wrapperPath : null,\n hostScriptPath: hostScript,\n extensionId: extensionIdValue,\n registryPath\n };\n};\n\nexport function discoverExtensionId(): { extensionId: string | null; matchedBy?: ExtensionIdMatchReason } {\n const extensionPaths = getExtensionPathCandidates();\n const roots = getChromeUserDataRoots();\n for (const root of roots) {\n for (const profileDir of getProfileDirs(root)) {\n let nameFallback: { id: string; matchedBy: \"name\" } | null = null;\n let commandFallback: string | null = null;\n for (const preferences of readProfilePreferences(profileDir)) {\n for (const extensionPath of extensionPaths) {\n const match = findExtensionIdInPreferences(preferences, extensionPath);\n if (!match) {\n continue;\n }\n if (match.matchedBy === \"path\") {\n return { extensionId: match.id, matchedBy: match.matchedBy };\n }\n if (!nameFallback) {\n nameFallback = match;\n }\n }\n\n if (!commandFallback) {\n commandFallback = findExtensionIdInCommands(preferences);\n }\n }\n if (nameFallback) {\n return { extensionId: nameFallback.id, matchedBy: nameFallback.matchedBy };\n }\n if (commandFallback) {\n return { extensionId: commandFallback, matchedBy: \"command\" };\n }\n }\n }\n return { extensionId: null };\n}\n\nexport function installNativeHost(extensionId: string) {\n const normalized = normalizeExtensionId(extensionId);\n if (!normalized) {\n return {\n success: false,\n message: \"Invalid extension ID format. Expected 32 characters (a-p).\",\n exitCode: EXIT_EXECUTION\n };\n }\n\n const hostScript = getHostScriptPath();\n if (!fs.existsSync(hostScript)) {\n return {\n success: false,\n message: `Native host not found at ${hostScript}.`,\n exitCode: EXIT_EXECUTION\n };\n }\n\n const scriptsDir = getScriptsDir();\n const manifestPath = getManifestPath();\n const installScript = process.platform === \"win32\"\n ? path.join(scriptsDir, \"install.ps1\")\n : path.join(scriptsDir, \"install.sh\");\n\n try {\n runScript(installScript, [normalized]);\n return {\n success: true,\n message: `Native host installed for extension ${normalized}.`,\n data: { manifestPath }\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Native install failed: ${message}`,\n exitCode: EXIT_EXECUTION\n };\n }\n}\n\nexport async function runNativeCommand(args: ParsedArgs) {\n const { subcommand, extensionId } = parseNativeArgs(args.rawArgs);\n const scriptsDir = getScriptsDir();\n const uninstallScript = process.platform === \"win32\"\n ? path.join(scriptsDir, \"uninstall.ps1\")\n : path.join(scriptsDir, \"uninstall.sh\");\n\n if (subcommand === \"install\") {\n return installNativeHost(extensionId as string);\n }\n\n if (subcommand === \"uninstall\") {\n try {\n runScript(uninstallScript, []);\n return { success: true, message: \"Native host uninstalled.\" };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, message: `Native uninstall failed: ${message}`, exitCode: EXIT_EXECUTION };\n }\n }\n\n const data = getNativeStatusSnapshot();\n\n if (!data.installed) {\n return {\n success: false,\n message: \"Native host not installed.\",\n data,\n exitCode: EXIT_DISCONNECTED\n };\n }\n\n const message = data.extensionId\n ? `Native host installed for extension ${data.extensionId}.`\n : \"Native host installed (extension id missing).\";\n return { success: true, message, data };\n}\n\nexport const __test__ = {\n readManifest,\n getManifestDir,\n getManifestPath,\n getWrapperPath,\n getHostScriptPath,\n parseNativeArgs,\n getNativeStatusSnapshot,\n normalizeExtensionId,\n findExtensionIdInPreferences,\n getProfileDirs,\n readProfilePreferences,\n findExtensionIdInCommands,\n getExtensionPathCandidates\n};\n","import type { ParsedArgs } from \"../args\";\nimport { startDaemon, readDaemonMetadata } from \"../daemon\";\nimport { loadGlobalConfig } from \"../../config\";\nimport { createUsageError, EXIT_DISCONNECTED, EXIT_EXECUTION } from \"../errors\";\nimport { parseNumberFlag } from \"../utils/parse\";\nimport { fetchWithTimeout } from \"../utils/http\";\nimport { discoverExtensionId, getNativeStatusSnapshot, installNativeHost } from \"./native\";\n\ntype ServeArgs = {\n port?: number;\n token?: string;\n stop: boolean;\n};\n\ntype DaemonHandle = {\n stop: () => Promise<void>;\n};\n\nlet daemonHandle: DaemonHandle | null = null;\n\nfunction parseServeArgs(rawArgs: string[]): ServeArgs {\n const parsed: ServeArgs = { stop: false };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--stop\") {\n parsed.stop = true;\n continue;\n }\n if (arg === \"--port\") {\n const value = rawArgs[i + 1];\n if (!value) {\n throw createUsageError(\"Missing value for --port\");\n }\n parsed.port = parseNumberFlag(value, \"--port\", { min: 1, max: 65535 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--port=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) {\n throw createUsageError(\"Missing value for --port\");\n }\n parsed.port = parseNumberFlag(value, \"--port\", { min: 1, max: 65535 });\n continue;\n }\n if (arg === \"--token\") {\n const value = rawArgs[i + 1];\n if (!value) {\n throw createUsageError(\"Missing value for --token\");\n }\n parsed.token = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--token=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) {\n throw createUsageError(\"Missing value for --token\");\n }\n parsed.token = value;\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runServe(args: ParsedArgs) {\n const serveArgs = parseServeArgs(args.rawArgs);\n\n if (serveArgs.stop) {\n const metadata = readDaemonMetadata();\n if (!metadata) {\n if (daemonHandle) {\n await daemonHandle.stop();\n daemonHandle = null;\n return { success: true, message: \"Daemon stopped.\" };\n }\n return { success: false, message: \"Daemon not running.\", exitCode: EXIT_DISCONNECTED };\n }\n\n try {\n const response = await fetchWithTimeout(`http://127.0.0.1:${metadata.port}/stop`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${metadata.token}` }\n });\n if (!response.ok) {\n throw new Error(`Stop failed (${response.status})`);\n }\n return { success: true, message: \"Daemon stopped.\" };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, message: `Failed to stop daemon: ${message}`, exitCode: EXIT_EXECUTION };\n }\n }\n\n const config = loadGlobalConfig();\n let nativeStatus = getNativeStatusSnapshot();\n let nativeMessage: string | null = null;\n if (!nativeStatus.installed) {\n const discovered = discoverExtensionId();\n const extensionId = config.nativeExtensionId ?? discovered.extensionId ?? null;\n const usedDiscovery = !config.nativeExtensionId && Boolean(discovered.extensionId);\n if (extensionId) {\n const installResult = installNativeHost(extensionId);\n if (installResult.success) {\n const suffix = usedDiscovery && discovered.matchedBy ? ` (auto-detected by ${discovered.matchedBy})` : \"\";\n nativeMessage = `${installResult.message ?? \"Native host installed.\"}${suffix}`;\n nativeStatus = getNativeStatusSnapshot();\n } else {\n nativeMessage = `Native host install skipped: ${installResult.message ?? \"unknown error\"}`;\n }\n } else {\n nativeMessage = \"Native host not installed. Set nativeExtensionId in opendevbrowser.jsonc to auto-install.\";\n }\n }\n\n const handle = await startDaemon({\n port: serveArgs.port,\n token: serveArgs.token,\n config\n });\n daemonHandle = handle;\n const { state } = handle;\n\n const baseMessage = `Daemon running on 127.0.0.1:${state.port} (relay ${state.relayPort})`;\n const message = nativeMessage ? `${baseMessage}\\n${nativeMessage}` : baseMessage;\n\n return {\n success: true,\n message,\n data: { port: state.port, pid: state.pid, relayPort: state.relayPort, native: nativeStatus },\n exitCode: null\n };\n}\n","import { execFileSync } from \"child_process\";\nimport { existsSync, mkdirSync, unlinkSync, writeFileSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { dirname, join, resolve } from \"path\";\nimport { fileURLToPath } from \"url\";\n\nconst MAC_LABEL = \"com.opendevbrowser.daemon\";\nconst WIN_TASK_NAME = \"OpenDevBrowser Daemon\";\n\nexport type CliEntrypoint = {\n nodePath: string;\n cliPath: string;\n args: string[];\n command: string;\n};\n\nexport type AutostartStatus = {\n platform: NodeJS.Platform;\n supported: boolean;\n installed: boolean;\n location?: string;\n taskName?: string;\n command?: string;\n label?: string;\n};\n\nexport type AutostartInstallResult = AutostartStatus;\n\nexport type AutostartDeps = {\n platform?: NodeJS.Platform;\n argv1?: string;\n moduleUrl?: string;\n uid?: number;\n homedir?: () => string;\n existsSync?: typeof existsSync;\n mkdirSync?: typeof mkdirSync;\n writeFileSync?: typeof writeFileSync;\n unlinkSync?: typeof unlinkSync;\n execFileSync?: typeof execFileSync;\n};\n\nconst defaultDeps = (): Required<AutostartDeps> => ({\n platform: process.platform,\n argv1: process.argv[1] ?? \"\",\n moduleUrl: import.meta.url,\n uid: typeof process.getuid === \"function\" ? process.getuid() : 0,\n homedir,\n existsSync,\n mkdirSync,\n writeFileSync,\n unlinkSync,\n execFileSync\n});\n\nconst resolveCliPathFromModule = (moduleUrl: string, exists: typeof existsSync): string => {\n const modulePath = fileURLToPath(moduleUrl);\n const candidate = resolve(dirname(modulePath), \"..\", \"index.js\");\n if (!exists(candidate)) {\n throw new Error(`CLI entrypoint not found at ${candidate}`);\n }\n return candidate;\n};\n\nexport const resolveCliEntrypoint = (deps: AutostartDeps = {}): CliEntrypoint => {\n const resolved = { ...defaultDeps(), ...deps };\n const exists = resolved.existsSync;\n let cliPath: string | null = null;\n\n if (resolved.argv1) {\n const candidate = resolve(resolved.argv1);\n if (exists(candidate)) {\n cliPath = candidate;\n }\n }\n\n if (!cliPath) {\n cliPath = resolveCliPathFromModule(resolved.moduleUrl, exists);\n }\n\n const nodePath = process.execPath;\n const args = [cliPath, \"serve\"];\n const command = `\"${nodePath}\" \"${cliPath}\" serve`;\n\n return { nodePath, cliPath, args, command };\n};\n\nexport const getLaunchAgentPath = (home = homedir()): string => {\n return join(home, \"Library\", \"LaunchAgents\", `${MAC_LABEL}.plist`);\n};\n\nexport const buildLaunchAgentPlist = (\n entrypoint: CliEntrypoint,\n options: { label?: string; stdoutPath?: string; stderrPath?: string } = {}\n): string => {\n const label = options.label ?? MAC_LABEL;\n const stdoutPath = options.stdoutPath ?? join(homedir(), \"Library\", \"Logs\", \"opendevbrowser-daemon.log\");\n const stderrPath = options.stderrPath ?? join(homedir(), \"Library\", \"Logs\", \"opendevbrowser-daemon.err.log\");\n const programArgs = [entrypoint.nodePath, ...entrypoint.args]\n .map((value) => ` <string>${value}</string>`)\n .join(\"\\n\");\n\n return [\n \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\",\n \"<!DOCTYPE plist PUBLIC \\\"-//Apple//DTD PLIST 1.0//EN\\\" \\\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\\\">\",\n \"<plist version=\\\"1.0\\\">\",\n \"<dict>\",\n ` <key>Label</key>`,\n ` <string>${label}</string>`,\n \" <key>ProgramArguments</key>\",\n \" <array>\",\n programArgs,\n \" </array>\",\n \" <key>RunAtLoad</key>\",\n \" <true/>\",\n \" <key>KeepAlive</key>\",\n \" <true/>\",\n \" <key>StandardOutPath</key>\",\n ` <string>${stdoutPath}</string>`,\n \" <key>StandardErrorPath</key>\",\n ` <string>${stderrPath}</string>`,\n \"</dict>\",\n \"</plist>\",\n \"\"\n ].join(\"\\n\");\n};\n\nexport const buildWindowsTaskArgs = (\n entrypoint: CliEntrypoint,\n taskName = WIN_TASK_NAME\n): { taskName: string; command: string; args: string[] } => {\n const command = `\"${entrypoint.nodePath}\" \"${entrypoint.cliPath}\" serve`;\n const args = [\n \"/Create\",\n \"/TN\",\n taskName,\n \"/TR\",\n command,\n \"/SC\",\n \"ONLOGON\",\n \"/RL\",\n \"LIMITED\",\n \"/F\"\n ];\n return { taskName, command, args };\n};\n\nconst runCommand = (\n exec: typeof execFileSync,\n command: string,\n args: string[],\n ignoreFailure = false\n): void => {\n try {\n exec(command, args, { stdio: \"ignore\" });\n } catch (error) {\n if (ignoreFailure) return;\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`${command} ${args.join(\" \")} failed: ${message}`);\n }\n};\n\nconst installMacAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n const entrypoint = resolveCliEntrypoint(resolved);\n const plistPath = getLaunchAgentPath(resolved.homedir());\n resolved.mkdirSync(dirname(plistPath), { recursive: true });\n resolved.writeFileSync(plistPath, buildLaunchAgentPlist(entrypoint), { encoding: \"utf-8\" });\n\n const uid = resolved.uid;\n runCommand(resolved.execFileSync, \"launchctl\", [\"bootout\", `gui/${uid}`, plistPath], true);\n runCommand(resolved.execFileSync, \"launchctl\", [\"bootstrap\", `gui/${uid}`, plistPath]);\n runCommand(resolved.execFileSync, \"launchctl\", [\"enable\", `gui/${uid}/${MAC_LABEL}`], true);\n runCommand(resolved.execFileSync, \"launchctl\", [\"kickstart\", \"-k\", `gui/${uid}/${MAC_LABEL}`], true);\n\n return {\n platform: \"darwin\",\n supported: true,\n installed: true,\n location: plistPath,\n label: MAC_LABEL,\n command: entrypoint.command\n };\n};\n\nconst uninstallMacAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n const plistPath = getLaunchAgentPath(resolved.homedir());\n const uid = resolved.uid;\n runCommand(resolved.execFileSync, \"launchctl\", [\"bootout\", `gui/${uid}`, plistPath], true);\n if (resolved.existsSync(plistPath)) {\n resolved.unlinkSync(plistPath);\n }\n return {\n platform: \"darwin\",\n supported: true,\n installed: false,\n location: plistPath,\n label: MAC_LABEL\n };\n};\n\nconst isWindowsTaskInstalled = (deps: AutostartDeps = {}): boolean => {\n const resolved = { ...defaultDeps(), ...deps };\n try {\n resolved.execFileSync(\"schtasks\", [\"/Query\", \"/TN\", WIN_TASK_NAME], { stdio: \"ignore\" });\n return true;\n } catch {\n return false;\n }\n};\n\nconst installWindowsAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n const entrypoint = resolveCliEntrypoint(resolved);\n const { args } = buildWindowsTaskArgs(entrypoint, WIN_TASK_NAME);\n runCommand(resolved.execFileSync, \"schtasks\", args);\n return {\n platform: \"win32\",\n supported: true,\n installed: true,\n taskName: WIN_TASK_NAME,\n command: entrypoint.command\n };\n};\n\nconst uninstallWindowsAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n runCommand(resolved.execFileSync, \"schtasks\", [\"/Delete\", \"/TN\", WIN_TASK_NAME, \"/F\"], true);\n return {\n platform: \"win32\",\n supported: true,\n installed: false,\n taskName: WIN_TASK_NAME\n };\n};\n\nexport const getAutostartStatus = (deps: AutostartDeps = {}): AutostartStatus => {\n const resolved = { ...defaultDeps(), ...deps };\n const platform = resolved.platform;\n\n if (platform === \"darwin\") {\n const location = getLaunchAgentPath(resolved.homedir());\n return {\n platform,\n supported: true,\n installed: resolved.existsSync(location),\n location,\n label: MAC_LABEL\n };\n }\n\n if (platform === \"win32\") {\n return {\n platform,\n supported: true,\n installed: isWindowsTaskInstalled(resolved),\n taskName: WIN_TASK_NAME\n };\n }\n\n return {\n platform,\n supported: false,\n installed: false\n };\n};\n\nexport const installAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const platform = deps.platform ?? process.platform;\n if (platform === \"darwin\") {\n return installMacAutostart(deps);\n }\n if (platform === \"win32\") {\n return installWindowsAutostart(deps);\n }\n return {\n platform,\n supported: false,\n installed: false\n };\n};\n\nexport const uninstallAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const platform = deps.platform ?? process.platform;\n if (platform === \"darwin\") {\n return uninstallMacAutostart(deps);\n }\n if (platform === \"win32\") {\n return uninstallWindowsAutostart(deps);\n }\n return {\n platform,\n supported: false,\n installed: false\n };\n};\n","import type { ParsedArgs } from \"../args\";\nimport { createUsageError, EXIT_DISCONNECTED, EXIT_EXECUTION } from \"../errors\";\nimport { fetchDaemonStatusFromMetadata } from \"../daemon-status\";\nimport { readDaemonMetadata } from \"../daemon\";\nimport { fetchWithTimeout } from \"../utils/http\";\nimport { getAutostartStatus, installAutostart, uninstallAutostart } from \"../daemon-autostart\";\n\ntype DaemonSubcommand = \"install\" | \"uninstall\" | \"status\";\n\ntype DaemonResult = {\n installed: boolean;\n running: boolean;\n autostart?: ReturnType<typeof getAutostartStatus>;\n};\n\nconst parseDaemonArgs = (rawArgs: string[]): { subcommand: DaemonSubcommand } => {\n const subcommand = rawArgs[0];\n if (subcommand === \"install\" || subcommand === \"uninstall\" || subcommand === \"status\") {\n return { subcommand };\n }\n throw createUsageError(\"Usage: opendevbrowser daemon <install|uninstall|status>\");\n};\n\nconst stopDaemonIfRunning = async (): Promise<boolean> => {\n const metadata = readDaemonMetadata();\n if (!metadata) {\n return false;\n }\n try {\n const response = await fetchWithTimeout(`http://127.0.0.1:${metadata.port}/stop`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${metadata.token}` }\n });\n return response.ok;\n } catch {\n return false;\n }\n};\n\nconst buildStatusMessage = (autostart: ReturnType<typeof getAutostartStatus>, running: boolean): string => {\n if (!autostart.supported) {\n return `Daemon autostart is not supported on ${autostart.platform}.`;\n }\n\n const installed = autostart.installed ? \"installed\" : \"not installed\";\n const runningText = running ? \"running\" : \"not running\";\n const location = autostart.location ? ` at ${autostart.location}` : \"\";\n const task = autostart.taskName ? ` (${autostart.taskName})` : \"\";\n return `Autostart ${installed}${location}${task}. Daemon is ${runningText}.`;\n};\n\nexport async function runDaemonCommand(args: ParsedArgs) {\n const { subcommand } = parseDaemonArgs(args.rawArgs);\n\n if (subcommand === \"install\") {\n const result = installAutostart();\n if (!result.supported) {\n return {\n success: false,\n message: `Daemon autostart is not supported on ${result.platform}.`,\n data: result,\n exitCode: EXIT_EXECUTION\n };\n }\n return {\n success: true,\n message: `Daemon autostart installed (${result.platform}).`,\n data: result\n };\n }\n\n if (subcommand === \"uninstall\") {\n const result = uninstallAutostart();\n if (!result.supported) {\n return {\n success: false,\n message: `Daemon autostart is not supported on ${result.platform}.`,\n data: result,\n exitCode: EXIT_EXECUTION\n };\n }\n await stopDaemonIfRunning();\n return {\n success: true,\n message: `Daemon autostart removed (${result.platform}).`,\n data: result\n };\n }\n\n const autostart = getAutostartStatus();\n const daemonStatus = await fetchDaemonStatusFromMetadata();\n const running = Boolean(daemonStatus);\n const message = buildStatusMessage(autostart, running);\n const data: DaemonResult = {\n installed: autostart.installed,\n running,\n autostart: autostart.supported ? autostart : undefined\n };\n\n if (!running) {\n return {\n success: false,\n message,\n data,\n exitCode: EXIT_DISCONNECTED\n };\n }\n\n return {\n success: true,\n message,\n data: { ...data, status: daemonStatus }\n };\n}\n","import { readFileSync } from \"fs\";\nimport { createOpenDevBrowserCore } from \"../../core\";\nimport type { ParsedArgs } from \"../args\";\nimport { writeOutput } from \"../output\";\nimport { createUsageError, EXIT_USAGE } from \"../errors\";\n\ntype RunArgs = {\n scriptPath?: string;\n headless?: boolean;\n profile?: string;\n persistProfile?: boolean;\n chromePath?: string;\n startUrl?: string;\n flags: string[];\n};\n\nfunction parseRunArgs(rawArgs: string[]): RunArgs {\n const parsed: RunArgs = { flags: [] };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--script\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --script\");\n parsed.scriptPath = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--script=\")) {\n parsed.scriptPath = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--headless\") {\n parsed.headless = true;\n continue;\n }\n if (arg === \"--profile\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --profile\");\n parsed.profile = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--profile=\")) {\n parsed.profile = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--persist-profile\") {\n parsed.persistProfile = true;\n continue;\n }\n if (arg === \"--chrome-path\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --chrome-path\");\n parsed.chromePath = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--chrome-path=\")) {\n parsed.chromePath = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--start-url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --start-url\");\n parsed.startUrl = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--start-url=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --start-url\");\n parsed.startUrl = value;\n continue;\n }\n if (arg === \"--flag\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --flag\");\n parsed.flags.push(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--flag=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --flag\");\n parsed.flags.push(value);\n continue;\n }\n }\n return parsed;\n}\n\nfunction readScriptFromStdin(): Promise<string> {\n return new Promise((resolve, reject) => {\n let data = \"\";\n process.stdin.setEncoding(\"utf8\");\n process.stdin.on(\"data\", (chunk) => {\n data += chunk;\n });\n process.stdin.on(\"end\", () => resolve(data));\n process.stdin.on(\"error\", reject);\n });\n}\n\nexport async function runScriptCommand(args: ParsedArgs) {\n const runArgs = parseRunArgs(args.rawArgs);\n const outputOptions = { format: args.outputFormat, quiet: args.quiet };\n\n let scriptRaw = \"\";\n if (runArgs.scriptPath) {\n scriptRaw = readFileSync(runArgs.scriptPath, \"utf-8\");\n } else if (!process.stdin.isTTY) {\n scriptRaw = await readScriptFromStdin();\n } else {\n throw createUsageError(\"Provide --script <path> or pipe JSON to stdin.\");\n }\n\n let steps: Array<{ action: string; args?: Record<string, unknown> }> = [];\n try {\n const parsed = JSON.parse(scriptRaw);\n if (Array.isArray(parsed)) {\n steps = parsed;\n } else if (parsed && typeof parsed === \"object\" && Array.isArray(parsed.steps)) {\n steps = parsed.steps;\n } else {\n throw new Error(\"Script must be a JSON array or an object with steps.\");\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON script.\";\n writeOutput({ success: false, error: message, exitCode: EXIT_USAGE }, outputOptions);\n return { success: false, message, exitCode: EXIT_USAGE, data: { suppressOutput: true } };\n }\n\n const core = createOpenDevBrowserCore({ directory: process.cwd() });\n const launchResult = await core.manager.launch({\n profile: runArgs.profile,\n headless: runArgs.headless,\n startUrl: runArgs.startUrl,\n chromePath: runArgs.chromePath,\n flags: runArgs.flags.length ? runArgs.flags : undefined,\n persistProfile: runArgs.persistProfile\n });\n\n try {\n const result = await core.runner.run(launchResult.sessionId, steps, true);\n writeOutput({\n success: true,\n sessionId: launchResult.sessionId,\n warnings: launchResult.warnings.length ? launchResult.warnings : undefined,\n ...result\n }, outputOptions);\n return { success: true, data: { suppressOutput: true } };\n } finally {\n await core.manager.disconnect(launchResult.sessionId, true);\n core.cleanup();\n }\n}\n","import type { OutputFormat } from \"./args\";\n\nexport type OutputOptions = {\n format: OutputFormat;\n quiet?: boolean;\n};\n\nexport function writeOutput(payload: unknown, options: OutputOptions): void {\n if (options.quiet) {\n return;\n }\n\n if (options.format === \"text\") {\n if (typeof payload === \"string\") {\n console.log(payload);\n } else {\n console.log(JSON.stringify(payload, null, 2));\n }\n return;\n }\n\n if (options.format === \"stream-json\") {\n if (Array.isArray(payload)) {\n for (const entry of payload) {\n console.log(JSON.stringify(entry));\n }\n return;\n }\n }\n\n console.log(JSON.stringify(payload));\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseNumberFlag } from \"../../utils/parse\";\n\ntype LaunchArgs = {\n profile?: string;\n headless?: boolean;\n startUrl?: string;\n chromePath?: string;\n flags: string[];\n persistProfile?: boolean;\n noExtension?: boolean;\n extensionOnly?: boolean;\n waitForExtension?: boolean;\n waitTimeoutMs?: number;\n extensionLegacy?: boolean;\n};\n\nfunction parseLaunchArgs(rawArgs: string[]): LaunchArgs {\n const parsed: LaunchArgs = { flags: [] };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--headless\") {\n parsed.headless = true;\n continue;\n }\n if (arg === \"--profile\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --profile\");\n parsed.profile = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--profile=\")) {\n parsed.profile = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--start-url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --start-url\");\n parsed.startUrl = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--start-url=\")) {\n parsed.startUrl = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--chrome-path\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --chrome-path\");\n parsed.chromePath = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--chrome-path=\")) {\n parsed.chromePath = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--persist-profile\") {\n parsed.persistProfile = true;\n continue;\n }\n if (arg === \"--no-extension\") {\n parsed.noExtension = true;\n continue;\n }\n if (arg === \"--extension-only\") {\n parsed.extensionOnly = true;\n continue;\n }\n if (arg === \"--extension-legacy\") {\n parsed.extensionLegacy = true;\n continue;\n }\n if (arg === \"--wait-for-extension\") {\n parsed.waitForExtension = true;\n continue;\n }\n if (arg === \"--wait-timeout-ms\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --wait-timeout-ms\");\n parsed.waitTimeoutMs = parseNumberFlag(value, \"--wait-timeout-ms\", { min: 1 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--wait-timeout-ms=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --wait-timeout-ms\");\n parsed.waitTimeoutMs = parseNumberFlag(value, \"--wait-timeout-ms\", { min: 1 });\n continue;\n }\n if (arg === \"--flag\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --flag\");\n parsed.flags.push(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--flag=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --flag\");\n parsed.flags.push(value);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionLaunch(args: ParsedArgs) {\n const launchArgs = parseLaunchArgs(args.rawArgs);\n try {\n const result = await callDaemon(\"session.launch\", launchArgs) as { sessionId: string };\n return {\n success: true,\n message: `Session launched: ${result.sessionId}`,\n data: result\n };\n } catch (error) {\n if (args.noInteractive) {\n throw error;\n }\n const message = error instanceof Error ? error.message : \"\";\n const lower = message.toLowerCase();\n const isExtensionFailure = message.includes(\"Extension not connected\")\n || message.includes(\"Extension relay connection failed\")\n || lower.includes(\"unauthorized\");\n if (!isExtensionFailure) {\n throw error;\n }\n\n const retry = await promptYesNo(\n lower.includes(\"unauthorized\")\n ? \"Relay token mismatch detected. Open the extension popup and click Connect to refresh pairing, then retry now?\"\n : \"Extension not connected. Open the extension popup and click Connect, then retry now?\",\n false\n );\n if (retry) {\n try {\n const result = await callDaemon(\"session.launch\", { ...launchArgs, waitForExtension: true }) as { sessionId: string };\n return {\n success: true,\n message: `Session launched: ${result.sessionId}`,\n data: result\n };\n } catch (retryError) {\n error = retryError;\n }\n }\n\n const proceedManaged = await promptYesNo(\"Proceed with a managed session (headed)?\", false);\n if (proceedManaged) {\n const useHeadless = await promptYesNo(\"Run headless instead?\", false);\n const result = await callDaemon(\"session.launch\", {\n ...launchArgs,\n noExtension: true,\n headless: useHeadless ? true : false\n }) as { sessionId: string };\n return {\n success: true,\n message: `Session launched: ${result.sessionId}`,\n data: result\n };\n }\n\n const proceedCdp = await promptYesNo(\"Proceed with CDPConnect (requires Chrome --remote-debugging-port=9222)?\", false);\n if (proceedCdp) {\n const result = await callDaemon(\"session.connect\", {}) as { sessionId: string };\n return {\n success: true,\n message: `Session connected: ${result.sessionId}`,\n data: result\n };\n }\n\n throw error;\n }\n}\n\nfunction promptYesNo(question: string, defaultYes: boolean): Promise<boolean> {\n if (!process.stdin.isTTY) {\n return Promise.resolve(false);\n }\n\n const suffix = defaultYes ? \" [Y/n] \" : \" [y/N] \";\n return new Promise((resolve) => {\n process.stdout.write(`${question}${suffix}`);\n process.stdin.setEncoding(\"utf8\");\n process.stdin.once(\"data\", (data) => {\n const input = data.toString().trim().toLowerCase();\n if (!input) {\n resolve(defaultYes);\n return;\n }\n resolve(input === \"y\" || input === \"yes\");\n });\n });\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseNumberFlag } from \"../../utils/parse\";\n\ntype ConnectArgs = {\n wsEndpoint?: string;\n host?: string;\n port?: number;\n extensionLegacy?: boolean;\n};\n\nfunction parseConnectArgs(rawArgs: string[]): ConnectArgs {\n const parsed: ConnectArgs = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--ws-endpoint\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ws-endpoint\");\n parsed.wsEndpoint = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ws-endpoint=\")) {\n parsed.wsEndpoint = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--host\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --host\");\n parsed.host = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--host=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --host\");\n parsed.host = value;\n continue;\n }\n if (arg === \"--cdp-port\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --cdp-port\");\n parsed.port = parseNumberFlag(value, \"--cdp-port\", { min: 1, max: 65535 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--cdp-port=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --cdp-port\");\n parsed.port = parseNumberFlag(value, \"--cdp-port\", { min: 1, max: 65535 });\n continue;\n }\n if (arg === \"--extension-legacy\") {\n parsed.extensionLegacy = true;\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionConnect(args: ParsedArgs) {\n const connectArgs = parseConnectArgs(args.rawArgs);\n const result = await callDaemon(\"session.connect\", connectArgs) as { sessionId: string };\n return {\n success: true,\n message: `Session connected: ${result.sessionId}`,\n data: result\n };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDisconnectArgs(rawArgs: string[]): { sessionId?: string; closeBrowser?: boolean } {\n const parsed: { sessionId?: string; closeBrowser?: boolean } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--close-browser\") {\n parsed.closeBrowser = true;\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionDisconnect(args: ParsedArgs) {\n const { sessionId, closeBrowser } = parseDisconnectArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n await callDaemon(\"session.disconnect\", { sessionId, closeBrowser }, { timeoutMs: 20000 });\n return { success: true, message: `Session disconnected: ${sessionId}` };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseStatusArgs(rawArgs: string[]): { sessionId?: string } {\n const parsed: { sessionId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionStatus(args: ParsedArgs) {\n const { sessionId } = parseStatusArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n const result = await callDaemon(\"session.status\", { sessionId });\n return { success: true, message: `Session status: ${sessionId}`, data: result };\n}\n","import type { ParsedArgs } from \"../args\";\nimport { createUsageError, EXIT_DISCONNECTED } from \"../errors\";\nimport { fetchDaemonStatusFromMetadata } from \"../daemon-status\";\nimport { runSessionStatus } from \"./session/status\";\nimport { getNativeStatusSnapshot } from \"./native\";\n\ntype StatusArgs = {\n sessionId?: string;\n daemon: boolean;\n};\n\nconst parseStatusArgs = (rawArgs: string[]): StatusArgs => {\n const parsed: StatusArgs = { daemon: false };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--daemon\") {\n parsed.daemon = true;\n continue;\n }\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n};\n\nexport async function runStatus(args: ParsedArgs) {\n const { sessionId, daemon } = parseStatusArgs(args.rawArgs);\n if (sessionId && daemon) {\n throw createUsageError(\"Use --session-id or --daemon, not both.\");\n }\n\n if (sessionId) {\n return runSessionStatus(args);\n }\n\n if (!daemon && args.transport === \"native\") {\n const nativeStatus = getNativeStatusSnapshot();\n if (!nativeStatus.installed) {\n return {\n success: false,\n message: \"Native host not installed.\",\n data: nativeStatus,\n exitCode: EXIT_DISCONNECTED\n };\n }\n return {\n success: true,\n message: nativeStatus.extensionId\n ? `Native host installed for extension ${nativeStatus.extensionId}.`\n : \"Native host installed.\",\n data: nativeStatus\n };\n }\n\n const daemonStatus = await fetchDaemonStatusFromMetadata();\n if (!daemonStatus) {\n throw createUsageError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n\n const nativeStatus = getNativeStatusSnapshot();\n\n const baseMessage = [\n `Daemon OK (pid=${daemonStatus.pid})`,\n `Relay: port=${daemonStatus.relay.port ?? \"n/a\"} ext=${daemonStatus.relay.extensionConnected ? \"on\" : \"off\"} ` +\n `handshake=${daemonStatus.relay.extensionHandshakeComplete ? \"on\" : \"off\"} ` +\n `cdp=${daemonStatus.relay.cdpConnected ? \"on\" : \"off\"} ` +\n `annotate=${daemonStatus.relay.annotationConnected ? \"on\" : \"off\"} ` +\n `ops=${daemonStatus.relay.opsConnected ? \"on\" : \"off\"} ` +\n `pairing=${daemonStatus.relay.pairingRequired ? \"on\" : \"off\"} ` +\n `health=${daemonStatus.relay.health?.reason ?? \"n/a\"}`,\n `Native: ${nativeStatus.installed ? \"installed\" : \"not installed\"}${nativeStatus.extensionId ? ` (${nativeStatus.extensionId})` : \"\"}`,\n daemonStatus.relay.lastHandshakeError\n ? `Relay last handshake error: ${daemonStatus.relay.lastHandshakeError.code} (${daemonStatus.relay.lastHandshakeError.message})`\n : \"Relay last handshake error: none\",\n \"Legend: ext=extension websocket, handshake=extension handshake, cdp=active /cdp client, annotate=annotation channel, ops=ops clients, pairing=token required, health=relay status\"\n ].join(\"\\n\");\n\n const message = daemon || args.outputFormat !== \"text\"\n ? baseMessage\n : [\n \"Warning: `status` defaults to daemon status. Use --daemon explicitly or --session-id for session status.\",\n baseMessage\n ].join(\"\\n\");\n\n return {\n success: true,\n message,\n data: { ...daemonStatus, native: nativeStatus }\n };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseNumberFlag } from \"../../utils/parse\";\n\nfunction parseGotoArgs(rawArgs: string[]): { sessionId?: string; url?: string; waitUntil?: string; timeoutMs?: number } {\n const parsed: { sessionId?: string; url?: string; waitUntil?: string; timeoutMs?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --url\");\n parsed.url = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--url=\")) {\n parsed.url = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--wait-until\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --wait-until\");\n parsed.waitUntil = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--wait-until=\")) {\n parsed.waitUntil = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--timeout-ms\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --timeout-ms\");\n parsed.timeoutMs = parseNumberFlag(value, \"--timeout-ms\", { min: 1 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --timeout-ms\");\n parsed.timeoutMs = parseNumberFlag(value, \"--timeout-ms\", { min: 1 });\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runGoto(args: ParsedArgs) {\n const { sessionId, url, waitUntil, timeoutMs } = parseGotoArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!url) throw createUsageError(\"Missing --url\");\n const result = await callDaemon(\"nav.goto\", { sessionId, url, waitUntil, timeoutMs });\n return { success: true, message: `Navigated: ${url}`, data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseNumberFlag } from \"../../utils/parse\";\n\nfunction parseWaitArgs(rawArgs: string[]): { sessionId?: string; ref?: string; state?: string; until?: string; timeoutMs?: number } {\n const parsed: { sessionId?: string; ref?: string; state?: string; until?: string; timeoutMs?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--state\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --state\");\n parsed.state = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--state=\")) {\n parsed.state = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--until\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --until\");\n parsed.until = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--until=\")) {\n parsed.until = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--timeout-ms\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --timeout-ms\");\n parsed.timeoutMs = parseNumberFlag(value, \"--timeout-ms\", { min: 1 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --timeout-ms\");\n parsed.timeoutMs = parseNumberFlag(value, \"--timeout-ms\", { min: 1 });\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runWait(args: ParsedArgs) {\n const { sessionId, ref, state, until, timeoutMs } = parseWaitArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"nav.wait\", { sessionId, ref, state, until, timeoutMs });\n return { success: true, message: \"Wait complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseSnapshotArgs(rawArgs: string[]): { sessionId?: string; mode?: string; maxChars?: number; cursor?: string } {\n const parsed: { sessionId?: string; mode?: string; maxChars?: number; cursor?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--mode\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --mode\");\n parsed.mode = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--mode=\")) {\n parsed.mode = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--max-chars\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --max-chars\");\n parsed.maxChars = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--max-chars=\")) {\n parsed.maxChars = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n if (arg === \"--cursor\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --cursor\");\n parsed.cursor = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--cursor=\")) {\n parsed.cursor = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSnapshot(args: ParsedArgs) {\n const { sessionId, mode, maxChars, cursor } = parseSnapshotArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"nav.snapshot\", { sessionId, mode, maxChars, cursor });\n return { success: true, message: \"Snapshot captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../args\";\nimport { createUsageError } from \"../errors\";\nimport { parseNumberFlag } from \"../utils/parse\";\nimport { DaemonClient } from \"../daemon-client\";\nimport { buildAnnotateResult } from \"../../annotate/output\";\nimport type { AnnotationResponse, AnnotationTransport } from \"../../relay/protocol\";\n\ntype AnnotateArgs = {\n sessionId?: string;\n url?: string;\n screenshotMode?: \"visible\" | \"full\" | \"none\";\n debug?: boolean;\n context?: string;\n timeoutMs?: number;\n transport?: AnnotationTransport;\n targetId?: string;\n tabId?: number;\n};\n\nconst requireValue = (value: string | undefined, flag: string): string => {\n if (!value) throw createUsageError(`Missing value for ${flag}`);\n return value;\n};\n\nconst requireScreenshotMode = (value: string): \"visible\" | \"full\" | \"none\" => {\n if (value === \"visible\" || value === \"full\" || value === \"none\") {\n return value;\n }\n throw createUsageError(`Invalid --screenshot-mode: ${value}`);\n};\n\nconst requireTransport = (value: string): AnnotationTransport => {\n if (value === \"auto\" || value === \"direct\" || value === \"relay\") {\n return value;\n }\n throw createUsageError(`Invalid --transport: ${value}`);\n};\n\nexport const parseAnnotateArgs = (rawArgs: string[]): AnnotateArgs => {\n const parsed: AnnotateArgs = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = requireValue(rawArgs[i + 1], \"--session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--session-id\");\n parsed.sessionId = value;\n continue;\n }\n if (arg === \"--url\") {\n const value = requireValue(rawArgs[i + 1], \"--url\");\n parsed.url = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--url=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--url\");\n parsed.url = value;\n continue;\n }\n if (arg === \"--screenshot-mode\") {\n const value = requireValue(rawArgs[i + 1], \"--screenshot-mode\");\n parsed.screenshotMode = requireScreenshotMode(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--screenshot-mode=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--screenshot-mode\");\n parsed.screenshotMode = requireScreenshotMode(value);\n continue;\n }\n if (arg === \"--transport\") {\n const value = requireValue(rawArgs[i + 1], \"--transport\");\n parsed.transport = requireTransport(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--transport=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--transport\");\n parsed.transport = requireTransport(value);\n continue;\n }\n if (arg === \"--target-id\") {\n const value = requireValue(rawArgs[i + 1], \"--target-id\");\n parsed.targetId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--target-id=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--target-id\");\n parsed.targetId = value;\n continue;\n }\n if (arg === \"--tab-id\") {\n const value = requireValue(rawArgs[i + 1], \"--tab-id\");\n parsed.tabId = parseNumberFlag(value, \"--tab-id\", { min: 1 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--tab-id=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--tab-id\");\n parsed.tabId = parseNumberFlag(value, \"--tab-id\", { min: 1 });\n continue;\n }\n if (arg === \"--debug\") {\n parsed.debug = true;\n continue;\n }\n if (arg === \"--context\") {\n const value = requireValue(rawArgs[i + 1], \"--context\");\n parsed.context = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--context=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--context\");\n parsed.context = value;\n continue;\n }\n if (arg === \"--timeout-ms\") {\n const value = requireValue(rawArgs[i + 1], \"--timeout-ms\");\n parsed.timeoutMs = parseNumberFlag(value, \"--timeout-ms\", { min: 1 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--timeout-ms\");\n parsed.timeoutMs = parseNumberFlag(value, \"--timeout-ms\", { min: 1 });\n continue;\n }\n }\n return parsed;\n};\n\nexport async function runAnnotate(args: ParsedArgs) {\n const { sessionId, url, screenshotMode, debug, context, timeoutMs, transport, targetId, tabId } = parseAnnotateArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n\n const client = new DaemonClient({ autoRenew: true });\n const callTimeoutMs = typeof timeoutMs === \"number\" ? timeoutMs + 10_000 : undefined;\n\n try {\n const response = await client.call<AnnotationResponse>(\"annotate\", {\n sessionId,\n transport,\n targetId,\n tabId,\n url,\n screenshotMode,\n debug,\n context,\n timeoutMs\n }, { timeoutMs: callTimeoutMs });\n\n if (response.status !== \"ok\" || !response.payload) {\n const message = response.error?.message ?? \"Annotation failed.\";\n throw new Error(message);\n }\n\n const { message, details, screenshots } = await buildAnnotateResult(response.payload);\n return { success: true, message, data: { details, screenshots } };\n } finally {\n await client.releaseBinding().catch(() => {});\n }\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseClickArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runClick(args: ParsedArgs) {\n const { sessionId, ref } = parseClickArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.click\", { sessionId, ref });\n return { success: true, message: \"Click complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseHoverArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runHover(args: ParsedArgs) {\n const { sessionId, ref } = parseHoverArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.hover\", { sessionId, ref });\n return { success: true, message: \"Hover complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parsePressArgs(rawArgs: string[]): { sessionId?: string; key?: string; ref?: string } {\n const parsed: { sessionId?: string; key?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--key\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --key\");\n parsed.key = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--key=\")) {\n parsed.key = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runPress(args: ParsedArgs) {\n const { sessionId, key, ref } = parsePressArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!key) throw createUsageError(\"Missing --key\");\n const result = await callDaemon(\"interact.press\", { sessionId, key, ref });\n return { success: true, message: \"Key press complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseCheckArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runCheck(args: ParsedArgs) {\n const { sessionId, ref } = parseCheckArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.check\", { sessionId, ref });\n return { success: true, message: \"Check complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseUncheckArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runUncheck(args: ParsedArgs) {\n const { sessionId, ref } = parseUncheckArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.uncheck\", { sessionId, ref });\n return { success: true, message: \"Uncheck complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseTypeArgs(rawArgs: string[]): { sessionId?: string; ref?: string; text?: string; clear?: boolean; submit?: boolean } {\n const parsed: { sessionId?: string; ref?: string; text?: string; clear?: boolean; submit?: boolean } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--text\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --text\");\n parsed.text = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--text=\")) {\n parsed.text = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--clear\") {\n parsed.clear = true;\n continue;\n }\n if (arg === \"--submit\") {\n parsed.submit = true;\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runType(args: ParsedArgs) {\n const { sessionId, ref, text, clear, submit } = parseTypeArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n if (!text) throw createUsageError(\"Missing --text\");\n const result = await callDaemon(\"interact.type\", { sessionId, ref, text, clear, submit });\n return { success: true, message: \"Type complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseSelectArgs(rawArgs: string[]): { sessionId?: string; ref?: string; values?: string[] } {\n const parsed: { sessionId?: string; ref?: string; values?: string[] } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--values\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --values\");\n parsed.values = value.split(\",\").map((entry) => entry.trim()).filter(Boolean);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--values=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --values\");\n parsed.values = value.split(\",\").map((entry) => entry.trim()).filter(Boolean);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSelect(args: ParsedArgs) {\n const { sessionId, ref, values } = parseSelectArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n if (!values || values.length === 0) throw createUsageError(\"Missing --values\");\n const result = await callDaemon(\"interact.select\", { sessionId, ref, values });\n return { success: true, message: \"Select complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseScrollArgs(rawArgs: string[]): { sessionId?: string; ref?: string; dy?: number } {\n const parsed: { sessionId?: string; ref?: string; dy?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--dy\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --dy\");\n parsed.dy = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--dy=\")) {\n parsed.dy = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runScroll(args: ParsedArgs) {\n const { sessionId, ref, dy } = parseScrollArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (typeof dy !== \"number\" || Number.isNaN(dy)) throw createUsageError(\"Missing --dy\");\n const result = await callDaemon(\"interact.scroll\", { sessionId, ref, dy });\n return { success: true, message: \"Scroll complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseScrollIntoViewArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runScrollIntoView(args: ParsedArgs) {\n const { sessionId, ref } = parseScrollIntoViewArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.scrollIntoView\", { sessionId, ref });\n return { success: true, message: \"Scroll into view complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseTargetsListArgs(rawArgs: string[]): { sessionId?: string; includeUrls?: boolean } {\n const parsed: { sessionId?: string; includeUrls?: boolean } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--include-urls\") {\n parsed.includeUrls = true;\n }\n }\n return parsed;\n}\n\nexport async function runTargetsList(args: ParsedArgs) {\n const { sessionId, includeUrls } = parseTargetsListArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"targets.list\", { sessionId, includeUrls });\n return { success: true, message: `Targets listed for session: ${sessionId}`, data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseTargetUseArgs(rawArgs: string[]): { sessionId?: string; targetId?: string } {\n const parsed: { sessionId?: string; targetId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--target-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --target-id\");\n parsed.targetId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--target-id=\")) {\n parsed.targetId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runTargetUse(args: ParsedArgs) {\n const { sessionId, targetId } = parseTargetUseArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!targetId) throw createUsageError(\"Missing --target-id\");\n const result = await callDaemon(\"targets.use\", { sessionId, targetId });\n return { success: true, message: `Target selected: ${targetId}`, data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseTargetNewArgs(rawArgs: string[]): { sessionId?: string; url?: string } {\n const parsed: { sessionId?: string; url?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --url\");\n parsed.url = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--url=\")) {\n parsed.url = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runTargetNew(args: ParsedArgs) {\n const { sessionId, url } = parseTargetNewArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"targets.new\", { sessionId, url });\n return { success: true, message: \"Target created.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseTargetCloseArgs(rawArgs: string[]): { sessionId?: string; targetId?: string } {\n const parsed: { sessionId?: string; targetId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--target-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --target-id\");\n parsed.targetId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--target-id=\")) {\n parsed.targetId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runTargetClose(args: ParsedArgs) {\n const { sessionId, targetId } = parseTargetCloseArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!targetId) throw createUsageError(\"Missing --target-id\");\n await callDaemon(\"targets.close\", { sessionId, targetId });\n return { success: true, message: `Target closed: ${targetId}` };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parsePageOpenArgs(rawArgs: string[]): { sessionId?: string; name?: string; url?: string } {\n const parsed: { sessionId?: string; name?: string; url?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--name\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --name\");\n parsed.name = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--name=\")) {\n parsed.name = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --url\");\n parsed.url = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--url=\")) {\n parsed.url = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runPageOpen(args: ParsedArgs) {\n const { sessionId, name, url } = parsePageOpenArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!name) throw createUsageError(\"Missing --name\");\n const result = await callDaemon(\"page.open\", { sessionId, name, url });\n return { success: true, message: `Page ready: ${name}`, data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parsePagesListArgs(rawArgs: string[]): { sessionId?: string } {\n const parsed: { sessionId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runPagesList(args: ParsedArgs) {\n const { sessionId } = parsePagesListArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"page.list\", { sessionId });\n return { success: true, message: `Pages listed for session: ${sessionId}`, data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parsePageCloseArgs(rawArgs: string[]): { sessionId?: string; name?: string } {\n const parsed: { sessionId?: string; name?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--name\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --name\");\n parsed.name = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--name=\")) {\n parsed.name = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runPageClose(args: ParsedArgs) {\n const { sessionId, name } = parsePageCloseArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!name) throw createUsageError(\"Missing --name\");\n await callDaemon(\"page.close\", { sessionId, name });\n return { success: true, message: `Page closed: ${name}` };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDomHtmlArgs(rawArgs: string[]): { sessionId?: string; ref?: string; maxChars?: number } {\n const parsed: { sessionId?: string; ref?: string; maxChars?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--max-chars\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --max-chars\");\n parsed.maxChars = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--max-chars=\")) {\n parsed.maxChars = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runDomHtml(args: ParsedArgs) {\n const { sessionId, ref, maxChars } = parseDomHtmlArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.getHtml\", { sessionId, ref, maxChars });\n return { success: true, message: \"DOM HTML captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDomTextArgs(rawArgs: string[]): { sessionId?: string; ref?: string; maxChars?: number } {\n const parsed: { sessionId?: string; ref?: string; maxChars?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--max-chars\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --max-chars\");\n parsed.maxChars = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--max-chars=\")) {\n parsed.maxChars = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runDomText(args: ParsedArgs) {\n const { sessionId, ref, maxChars } = parseDomTextArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.getText\", { sessionId, ref, maxChars });\n return { success: true, message: \"DOM text captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDomAttrArgs(rawArgs: string[]): { sessionId?: string; ref?: string; attr?: string } {\n const parsed: { sessionId?: string; ref?: string; attr?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--attr\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --attr\");\n parsed.attr = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--attr=\")) {\n parsed.attr = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runDomAttr(args: ParsedArgs) {\n const { sessionId, ref, attr } = parseDomAttrArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n if (!attr) throw createUsageError(\"Missing --attr\");\n const result = await callDaemon(\"dom.getAttr\", { sessionId, ref, name: attr });\n return { success: true, message: \"DOM attribute captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDomValueArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runDomValue(args: ParsedArgs) {\n const { sessionId, ref } = parseDomValueArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.getValue\", { sessionId, ref });\n return { success: true, message: \"DOM value captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDomVisibleArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runDomVisible(args: ParsedArgs) {\n const { sessionId, ref } = parseDomVisibleArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.isVisible\", { sessionId, ref });\n return { success: true, message: \"Visibility checked.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDomEnabledArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runDomEnabled(args: ParsedArgs) {\n const { sessionId, ref } = parseDomEnabledArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.isEnabled\", { sessionId, ref });\n return { success: true, message: \"Enabled state checked.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDomCheckedArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runDomChecked(args: ParsedArgs) {\n const { sessionId, ref } = parseDomCheckedArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.isChecked\", { sessionId, ref });\n return { success: true, message: \"Checked state reported.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseClonePageArgs(rawArgs: string[]): { sessionId?: string } {\n const parsed: { sessionId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runClonePage(args: ParsedArgs) {\n const { sessionId } = parseClonePageArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"export.clonePage\", { sessionId });\n return { success: true, message: \"Page cloned.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseCloneComponentArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runCloneComponent(args: ParsedArgs) {\n const { sessionId, ref } = parseCloneComponentArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"export.cloneComponent\", { sessionId, ref });\n return { success: true, message: \"Component cloned.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parsePerfArgs(rawArgs: string[]): { sessionId?: string } {\n const parsed: { sessionId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runPerf(args: ParsedArgs) {\n const { sessionId } = parsePerfArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"devtools.perf\", { sessionId });\n return { success: true, message: \"Performance metrics captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseScreenshotArgs(rawArgs: string[]): { sessionId?: string; path?: string } {\n const parsed: { sessionId?: string; path?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--path\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --path\");\n parsed.path = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--path=\")) {\n parsed.path = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runScreenshot(args: ParsedArgs) {\n const { sessionId, path } = parseScreenshotArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"page.screenshot\", { sessionId, path });\n return { success: true, message: \"Screenshot captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseConsolePollArgs(rawArgs: string[]): { sessionId?: string; sinceSeq?: number; max?: number } {\n const parsed: { sessionId?: string; sinceSeq?: number; max?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--since-seq\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --since-seq\");\n parsed.sinceSeq = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--since-seq=\")) {\n parsed.sinceSeq = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n if (arg === \"--max\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --max\");\n parsed.max = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--max=\")) {\n parsed.max = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runConsolePoll(args: ParsedArgs) {\n const { sessionId, sinceSeq, max } = parseConsolePollArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"devtools.consolePoll\", { sessionId, sinceSeq, max });\n return { success: true, message: \"Console events polled.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseNetworkPollArgs(rawArgs: string[]): { sessionId?: string; sinceSeq?: number; max?: number } {\n const parsed: { sessionId?: string; sinceSeq?: number; max?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--since-seq\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --since-seq\");\n parsed.sinceSeq = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--since-seq=\")) {\n parsed.sinceSeq = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n if (arg === \"--max\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --max\");\n parsed.max = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--max=\")) {\n parsed.max = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runNetworkPoll(args: ParsedArgs) {\n const { sessionId, sinceSeq, max } = parseNetworkPollArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"devtools.networkPoll\", { sessionId, sinceSeq, max });\n return { success: true, message: \"Network events polled.\", data: result };\n}\n","#!/usr/bin/env node\n\nimport { parseArgs, getHelpText, detectOutputFormat } from \"./args\";\nimport type { OutputFormat } from \"./args\";\nimport { registerCommand, getCommand } from \"./commands/registry\";\nimport type { CommandResult } from \"./commands/types\";\nimport { installGlobal } from \"./installers/global\";\nimport { installLocal } from \"./installers/local\";\nimport { installSkills } from \"./installers/skills\";\nimport { runUpdate } from \"./commands/update\";\nimport { runUninstall, findInstalledConfigs } from \"./commands/uninstall\";\nimport { runServe } from \"./commands/serve\";\nimport { runDaemonCommand } from \"./commands/daemon\";\nimport { runNativeCommand } from \"./commands/native\";\nimport { getAutostartStatus, installAutostart } from \"./daemon-autostart\";\nimport { runScriptCommand } from \"./commands/run\";\nimport { runSessionLaunch } from \"./commands/session/launch\";\nimport { runSessionConnect } from \"./commands/session/connect\";\nimport { runSessionDisconnect } from \"./commands/session/disconnect\";\nimport { runStatus } from \"./commands/status\";\nimport { runGoto } from \"./commands/nav/goto\";\nimport { runWait } from \"./commands/nav/wait\";\nimport { runSnapshot } from \"./commands/nav/snapshot\";\nimport { runAnnotate } from \"./commands/annotate\";\nimport { runClick } from \"./commands/interact/click\";\nimport { runHover } from \"./commands/interact/hover\";\nimport { runPress } from \"./commands/interact/press\";\nimport { runCheck } from \"./commands/interact/check\";\nimport { runUncheck } from \"./commands/interact/uncheck\";\nimport { runType } from \"./commands/interact/type\";\nimport { runSelect } from \"./commands/interact/select\";\nimport { runScroll } from \"./commands/interact/scroll\";\nimport { runScrollIntoView } from \"./commands/interact/scroll-into-view\";\nimport { runTargetsList } from \"./commands/targets/list\";\nimport { runTargetUse } from \"./commands/targets/use\";\nimport { runTargetNew } from \"./commands/targets/new\";\nimport { runTargetClose } from \"./commands/targets/close\";\nimport { runPageOpen } from \"./commands/pages/open\";\nimport { runPagesList } from \"./commands/pages/list\";\nimport { runPageClose } from \"./commands/pages/close\";\nimport { runDomHtml } from \"./commands/dom/html\";\nimport { runDomText } from \"./commands/dom/text\";\nimport { runDomAttr } from \"./commands/dom/attr\";\nimport { runDomValue } from \"./commands/dom/value\";\nimport { runDomVisible } from \"./commands/dom/visible\";\nimport { runDomEnabled } from \"./commands/dom/enabled\";\nimport { runDomChecked } from \"./commands/dom/checked\";\nimport { runClonePage } from \"./commands/export/clone-page\";\nimport { runCloneComponent } from \"./commands/export/clone-component\";\nimport { runPerf } from \"./commands/devtools/perf\";\nimport { runScreenshot } from \"./commands/devtools/screenshot\";\nimport { runConsolePoll } from \"./commands/devtools/console-poll\";\nimport { runNetworkPoll } from \"./commands/devtools/network-poll\";\nimport { extractExtension } from \"../extension-extractor\";\nimport { writeOutput } from \"./output\";\nimport type { InstallMode } from \"./args\";\nimport { formatErrorPayload, resolveExitCode, toCliError, EXIT_EXECUTION, EXIT_USAGE } from \"./errors\";\nimport type { CliError } from \"./errors\";\n\nconst VERSION = \"0.1.0\";\n\nasync function promptInstallMode(): Promise<InstallMode> {\n if (!process.stdin.isTTY) {\n console.log(\"Non-interactive mode detected. Using global install.\");\n return \"global\";\n }\n\n return new Promise((resolve) => {\n console.log(\"\\nWhere would you like to install opendevbrowser?\\n\");\n console.log(\" 1. Global (~/.config/opencode/opencode.json)\");\n console.log(\" 2. Local (./opencode.json in this project)\\n\");\n\n process.stdout.write(\"Enter choice [1]: \");\n\n process.stdin.setEncoding(\"utf8\");\n let resolved = false;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n process.stdin.once(\"data\", (data) => {\n cleanup();\n if (resolved) return;\n resolved = true;\n const input = data.toString().trim();\n if (input === \"2\") {\n resolve(\"local\");\n } else {\n resolve(\"global\");\n }\n });\n\n process.stdin.once(\"close\", () => {\n cleanup();\n if (resolved) return;\n resolved = true;\n resolve(\"global\");\n });\n\n timeoutId = setTimeout(() => {\n timeoutId = null;\n if (resolved) return;\n resolved = true;\n console.log(\"\\nTimeout - using global install.\");\n resolve(\"global\");\n }, 30000);\n });\n}\n\nasync function promptUninstallMode(): Promise<InstallMode | null> {\n const installed = findInstalledConfigs();\n\n if (!installed.global && !installed.local) {\n console.log(\"opendevbrowser is not installed in any config.\");\n return null;\n }\n\n if (installed.global && !installed.local) {\n return \"global\";\n }\n\n if (!installed.global && installed.local) {\n return \"local\";\n }\n\n if (!process.stdin.isTTY) {\n console.log(\"Plugin found in both global and local configs. Use --global or --local flag.\");\n return null;\n }\n\n return new Promise((resolve) => {\n console.log(\"\\nopendevbrowser is installed in multiple locations:\\n\");\n console.log(\" 1. Global (~/.config/opencode/opencode.json)\");\n console.log(\" 2. Local (./opencode.json)\");\n console.log(\" 3. Cancel\\n\");\n\n process.stdout.write(\"Which to uninstall? [3]: \");\n\n process.stdin.setEncoding(\"utf8\");\n process.stdin.once(\"data\", (data) => {\n const input = data.toString().trim();\n if (input === \"1\") {\n resolve(\"global\");\n } else if (input === \"2\") {\n resolve(\"local\");\n } else {\n resolve(null);\n }\n });\n\n process.stdin.once(\"close\", () => {\n resolve(null);\n });\n });\n}\n\nfunction emitFatalError(error: CliError, outputFormat: OutputFormat): void {\n if (outputFormat === \"text\") {\n console.error(`Error: ${error.message}`);\n if (error.exitCode === EXIT_USAGE) {\n console.error(\"\\nFor help: npx opendevbrowser --help\");\n }\n return;\n }\n\n writeOutput(formatErrorPayload(error), { format: outputFormat });\n}\n\nasync function main(): Promise<void> {\n let outputFormat: OutputFormat | null = null;\n let parseSucceeded = false;\n try {\n const args = parseArgs(process.argv);\n parseSucceeded = true;\n outputFormat = args.outputFormat;\n const outputOptions = { format: args.outputFormat, quiet: args.quiet };\n\n const emitResult = (result: CommandResult, payload?: Record<string, unknown>) => {\n const suppressOutput = Boolean(\n result.data\n && typeof result.data === \"object\"\n && \"suppressOutput\" in result.data\n && (result.data as { suppressOutput?: boolean }).suppressOutput\n );\n if (suppressOutput) {\n return;\n }\n if (args.outputFormat === \"text\") {\n if (result.message) {\n writeOutput(result.message, outputOptions);\n }\n } else {\n const exitCode = resolveExitCode(result);\n writeOutput({\n success: result.success,\n message: result.message,\n ...(result.success || !result.message ? {} : { error: result.message }),\n ...(result.success || exitCode === null ? {} : { exitCode }),\n ...payload\n }, outputOptions);\n }\n };\n\n registerCommand({\n name: \"help\",\n description: \"Show help\",\n run: () => ({ success: true, message: getHelpText() })\n });\n\n registerCommand({\n name: \"version\",\n description: \"Show version\",\n run: () => ({ success: true, message: `opendevbrowser v${VERSION}` })\n });\n\n registerCommand({\n name: \"update\",\n description: \"Clear cached plugin to trigger reinstall\",\n run: () => {\n const result = runUpdate();\n return { success: result.success, message: result.message };\n }\n });\n\n registerCommand({\n name: \"uninstall\",\n description: \"Remove plugin from config\",\n run: async () => {\n let mode = args.mode;\n if (!mode && !args.noPrompt) {\n mode = await promptUninstallMode() ?? undefined;\n if (!mode) {\n return { success: true, message: \"Uninstall cancelled.\" };\n }\n }\n if (!mode) {\n return { success: false, message: \"Error: Please specify --global or --local for uninstall.\", exitCode: EXIT_USAGE };\n }\n const result = runUninstall(mode);\n return { success: result.success, message: result.message };\n }\n });\n\n registerCommand({\n name: \"install\",\n description: \"Install the plugin\",\n run: async () => {\n const log = (...values: unknown[]) => {\n if (args.quiet) return;\n console.log(...values);\n };\n const warn = (...values: unknown[]) => {\n if (args.quiet) return;\n console.warn(...values);\n };\n\n let mode = args.mode;\n if (!mode) {\n mode = await promptInstallMode();\n }\n\n const result = mode === \"global\"\n ? installGlobal(args.withConfig)\n : installLocal(args.withConfig);\n\n const maybeInstallAutostart = () => {\n const status = getAutostartStatus();\n if (!status.supported) {\n return { status, installed: false, message: `Autostart not supported on ${status.platform}.` };\n }\n if (status.installed) {\n return { status, installed: true, message: \"Autostart already installed.\" };\n }\n try {\n const result = installAutostart();\n return { status: result, installed: result.installed, message: `Autostart installed (${result.platform}).` };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { status, installed: false, message };\n }\n };\n\n if (args.outputFormat !== \"text\") {\n const payload: Record<string, unknown> = {\n alreadyInstalled: result.alreadyInstalled\n };\n\n if (result.success && args.skillsMode !== \"none\") {\n const skillsResult = installSkills(args.skillsMode);\n payload.skills = skillsResult;\n }\n\n if (args.fullInstall && result.success) {\n try {\n const extensionPath = extractExtension();\n payload.extensionPath = extensionPath;\n } catch (error) {\n payload.extensionError = error instanceof Error ? error.message : String(error);\n }\n }\n\n if (result.success && !result.alreadyInstalled) {\n const autostart = maybeInstallAutostart();\n payload.autostart = autostart.status;\n if (!autostart.installed) {\n payload.autostartError = autostart.message;\n }\n }\n\n return { success: result.success, message: result.message, data: payload };\n }\n\n log(result.message);\n\n if (args.skillsMode === \"none\") {\n log(\"Skill installation skipped (--no-skills).\");\n } else if (result.success) {\n const skillsResult = installSkills(args.skillsMode);\n if (skillsResult.success) {\n log(skillsResult.message);\n } else {\n warn(skillsResult.message);\n }\n } else {\n warn(\"Skill installation skipped because plugin install failed.\");\n }\n\n if (args.fullInstall && result.success) {\n try {\n const extensionPath = extractExtension();\n if (extensionPath) {\n log(`Extension assets extracted to ${extensionPath}`);\n } else {\n warn(\"Extension assets not found; skipping extraction.\");\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n warn(`Extension pre-extraction failed: ${message}`);\n }\n }\n\n if (result.success && !result.alreadyInstalled) {\n const autostart = maybeInstallAutostart();\n if (autostart.installed) {\n log(autostart.message);\n } else {\n warn(`Autostart install skipped: ${autostart.message}`);\n }\n }\n\n if (result.success && !result.alreadyInstalled) {\n log(\"\\nNext steps:\");\n log(\" 1. Start or restart OpenCode\");\n log(\" 2. Use opendevbrowser_status to verify the plugin is loaded\");\n log(\"\\nFor help: npx opendevbrowser --help\");\n }\n\n return { success: result.success, message: result.message };\n }\n });\n\n registerCommand({\n name: \"serve\",\n description: \"Start or stop the local daemon\",\n run: async () => runServe(args)\n });\n\n registerCommand({\n name: \"daemon\",\n description: \"Install/uninstall/status daemon auto-start\",\n run: async () => runDaemonCommand(args)\n });\n\n registerCommand({\n name: \"native\",\n description: \"Install/uninstall/status native messaging host\",\n run: async () => runNativeCommand(args)\n });\n\n registerCommand({\n name: \"run\",\n description: \"Execute a JSON script in a single process\",\n run: async () => runScriptCommand(args)\n });\n\n registerCommand({\n name: \"launch\",\n description: \"Launch a managed browser session via daemon\",\n run: async () => runSessionLaunch(args)\n });\n\n registerCommand({\n name: \"connect\",\n description: \"Connect to an existing browser via daemon\",\n run: async () => runSessionConnect(args)\n });\n\n registerCommand({\n name: \"disconnect\",\n description: \"Disconnect a daemon session\",\n run: async () => runSessionDisconnect(args)\n });\n\n registerCommand({\n name: \"status\",\n description: \"Get daemon or session status\",\n run: async () => runStatus(args)\n });\n\n registerCommand({\n name: \"goto\",\n description: \"Navigate current session to a URL\",\n run: async () => runGoto(args)\n });\n\n registerCommand({\n name: \"wait\",\n description: \"Wait for load or a ref to appear\",\n run: async () => runWait(args)\n });\n\n registerCommand({\n name: \"snapshot\",\n description: \"Capture a snapshot of the active page\",\n run: async () => runSnapshot(args)\n });\n\n registerCommand({\n name: \"annotate\",\n description: \"Request interactive annotations (extension relay)\",\n run: async () => runAnnotate(args)\n });\n\n registerCommand({\n name: \"click\",\n description: \"Click an element by ref\",\n run: async () => runClick(args)\n });\n\n registerCommand({\n name: \"hover\",\n description: \"Hover an element by ref\",\n run: async () => runHover(args)\n });\n\n registerCommand({\n name: \"press\",\n description: \"Press a keyboard key\",\n run: async () => runPress(args)\n });\n\n registerCommand({\n name: \"check\",\n description: \"Check a checkbox by ref\",\n run: async () => runCheck(args)\n });\n\n registerCommand({\n name: \"uncheck\",\n description: \"Uncheck a checkbox by ref\",\n run: async () => runUncheck(args)\n });\n\n registerCommand({\n name: \"type\",\n description: \"Type into an element by ref\",\n run: async () => runType(args)\n });\n\n registerCommand({\n name: \"select\",\n description: \"Select values in a select by ref\",\n run: async () => runSelect(args)\n });\n\n registerCommand({\n name: \"scroll\",\n description: \"Scroll the page or element by ref\",\n run: async () => runScroll(args)\n });\n\n registerCommand({\n name: \"scroll-into-view\",\n description: \"Scroll an element into view by ref\",\n run: async () => runScrollIntoView(args)\n });\n\n registerCommand({\n name: \"targets-list\",\n description: \"List page targets\",\n run: async () => runTargetsList(args)\n });\n\n registerCommand({\n name: \"target-use\",\n description: \"Focus a target by id\",\n run: async () => runTargetUse(args)\n });\n\n registerCommand({\n name: \"target-new\",\n description: \"Open a new target\",\n run: async () => runTargetNew(args)\n });\n\n registerCommand({\n name: \"target-close\",\n description: \"Close a target by id\",\n run: async () => runTargetClose(args)\n });\n\n registerCommand({\n name: \"page\",\n description: \"Open or focus a named page\",\n run: async () => runPageOpen(args)\n });\n\n registerCommand({\n name: \"pages\",\n description: \"List named pages\",\n run: async () => runPagesList(args)\n });\n\n registerCommand({\n name: \"page-close\",\n description: \"Close a named page\",\n run: async () => runPageClose(args)\n });\n\n registerCommand({\n name: \"dom-html\",\n description: \"Capture HTML for a ref\",\n run: async () => runDomHtml(args)\n });\n\n registerCommand({\n name: \"dom-text\",\n description: \"Capture text for a ref\",\n run: async () => runDomText(args)\n });\n\n registerCommand({\n name: \"dom-attr\",\n description: \"Capture attribute value for a ref\",\n run: async () => runDomAttr(args)\n });\n\n registerCommand({\n name: \"dom-value\",\n description: \"Capture input value for a ref\",\n run: async () => runDomValue(args)\n });\n\n registerCommand({\n name: \"dom-visible\",\n description: \"Check visibility for a ref\",\n run: async () => runDomVisible(args)\n });\n\n registerCommand({\n name: \"dom-enabled\",\n description: \"Check enabled state for a ref\",\n run: async () => runDomEnabled(args)\n });\n\n registerCommand({\n name: \"dom-checked\",\n description: \"Check checked state for a ref\",\n run: async () => runDomChecked(args)\n });\n\n registerCommand({\n name: \"clone-page\",\n description: \"Clone the active page to React\",\n run: async () => runClonePage(args)\n });\n\n registerCommand({\n name: \"clone-component\",\n description: \"Clone a component by ref\",\n run: async () => runCloneComponent(args)\n });\n\n registerCommand({\n name: \"perf\",\n description: \"Capture performance metrics\",\n run: async () => runPerf(args)\n });\n\n registerCommand({\n name: \"screenshot\",\n description: \"Capture a screenshot\",\n run: async () => runScreenshot(args)\n });\n\n registerCommand({\n name: \"console-poll\",\n description: \"Poll console events\",\n run: async () => runConsolePoll(args)\n });\n\n registerCommand({\n name: \"network-poll\",\n description: \"Poll network events\",\n run: async () => runNetworkPoll(args)\n });\n const command = getCommand(args.command);\n if (!command) {\n throw new Error(`Unknown command: ${args.command}`);\n }\n\n const result = await command.run(args);\n emitResult(result, result.data ? { data: result.data } : undefined);\n const exitCode = resolveExitCode(result);\n if (exitCode === null) {\n return;\n }\n process.exit(exitCode);\n } catch (error) {\n const format = outputFormat ?? detectOutputFormat(process.argv);\n const cliError = toCliError(error, parseSucceeded ? EXIT_EXECUTION : EXIT_USAGE);\n emitFatalError(cliError, format);\n process.exit(cliError.exitCode);\n }\n}\n\nmain().catch((error: unknown) => {\n const cliError = toCliError(error, EXIT_EXECUTION);\n emitFatalError(cliError, detectOutputFormat(process.argv));\n process.exit(cliError.exitCode);\n});\n"],"mappings":"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","names":["mode","noPrompt","fs","edits","fs","path","os","fs","fs","path","fs","path","os","fs","path","os","PLUGIN_NAME","fs","path","os","getPluginConfigPath","fs","path","homedir","fileURLToPath","fileURLToPath","homedir","message","message","execFileSync","existsSync","mkdirSync","unlinkSync","writeFileSync","homedir","dirname","join","resolve","fileURLToPath","readFileSync","resolve","readFileSync","resolve","parseStatusArgs","nativeStatus","message","path","resolve","result","exitCode"]}
|