opendevbrowser 0.0.21 → 0.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +13 -3
  2. package/dist/{chunk-4KVXCXV3.js → chunk-2MG7BRPF.js} +521 -84
  3. package/dist/{chunk-4KVXCXV3.js.map → chunk-2MG7BRPF.js.map} +1 -1
  4. package/dist/chunk-3ILXPKSJ.js +86 -0
  5. package/dist/chunk-3ILXPKSJ.js.map +1 -0
  6. package/dist/{chunk-ZE2E7ZGH.js → chunk-K2TEHJCV.js} +240 -33
  7. package/dist/chunk-K2TEHJCV.js.map +1 -0
  8. package/dist/chunk-QVWOPIZJ.js +612 -0
  9. package/dist/chunk-QVWOPIZJ.js.map +1 -0
  10. package/dist/{chunk-3VA6XR25.js → chunk-STGGGVYT.js} +23 -100
  11. package/dist/chunk-STGGGVYT.js.map +1 -0
  12. package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
  13. package/dist/cli/commands/uninstall.d.ts +1 -0
  14. package/dist/cli/commands/uninstall.d.ts.map +1 -1
  15. package/dist/cli/daemon-commands.d.ts.map +1 -1
  16. package/dist/cli/help.d.ts.map +1 -1
  17. package/dist/cli/index.js +298 -618
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/cli/installers/postinstall-skill-sync.d.ts +15 -0
  20. package/dist/cli/installers/postinstall-skill-sync.d.ts.map +1 -0
  21. package/dist/cli/installers/postinstall-skill-sync.js +48 -0
  22. package/dist/cli/installers/postinstall-skill-sync.js.map +1 -0
  23. package/dist/cli/installers/skills.d.ts +9 -14
  24. package/dist/cli/installers/skills.d.ts.map +1 -1
  25. package/dist/cli/skill-lifecycle.d.ts +26 -0
  26. package/dist/cli/skill-lifecycle.d.ts.map +1 -0
  27. package/dist/cli/update-skill-modes.d.ts +3 -0
  28. package/dist/cli/update-skill-modes.d.ts.map +1 -0
  29. package/dist/cli/utils/workflow-message.d.ts +1 -0
  30. package/dist/cli/utils/workflow-message.d.ts.map +1 -1
  31. package/dist/index.js +25 -9
  32. package/dist/index.js.map +1 -1
  33. package/dist/opendevbrowser.js +25 -9
  34. package/dist/opendevbrowser.js.map +1 -1
  35. package/dist/providers/social/platform.d.ts.map +1 -1
  36. package/dist/providers/social/search-quality.d.ts.map +1 -1
  37. package/dist/providers/social/youtube.d.ts.map +1 -1
  38. package/dist/providers/workflow-handoff.d.ts +27 -3
  39. package/dist/providers/workflow-handoff.d.ts.map +1 -1
  40. package/dist/providers/workflows.d.ts +1 -0
  41. package/dist/providers/workflows.d.ts.map +1 -1
  42. package/dist/{providers-ZIVHHH4F.js → providers-6YVHKTOJ.js} +2 -2
  43. package/dist/public-surface/generated-manifest.d.ts +162 -4
  44. package/dist/public-surface/generated-manifest.d.ts.map +1 -1
  45. package/dist/public-surface/source.d.ts +12 -6
  46. package/dist/public-surface/source.d.ts.map +1 -1
  47. package/dist/skills/skill-loader.js +2 -1
  48. package/dist/tools/macro_resolve.d.ts.map +1 -1
  49. package/extension/manifest.json +1 -1
  50. package/package.json +6 -4
  51. package/scripts/postinstall-sync-skills.mjs +33 -0
  52. package/dist/chunk-3VA6XR25.js.map +0 -1
  53. package/dist/chunk-ZE2E7ZGH.js.map +0 -1
  54. /package/dist/{providers-ZIVHHH4F.js.map → providers-6YVHKTOJ.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/args.ts","../../src/cli/help.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/commands/serve.ts","../../src/cli/utils/parse.ts","../../src/cli/commands/native.ts","../../src/cli/daemon-autostart.ts","../../src/cli/commands/daemon.ts","../../src/cli/commands/artifacts.ts","../../src/cli/install-autostart-reconciliation.ts","../../src/cli/install-autostart-output.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/utils/workflow-message.ts","../../src/cli/commands/session/inspector-shared.ts","../../src/cli/commands/session/inspector.ts","../../src/cli/transport-timeouts.ts","../../src/cli/commands/challenge-automation-mode.ts","../../src/cli/commands/nav/review-shared.ts","../../src/cli/commands/session/inspector-audit.ts","../../src/cli/commands/session/inspector-plan.ts","../../src/cli/commands/session/status.ts","../../src/cli/commands/status.ts","../../src/cli/commands/status-capabilities.ts","../../src/cli/commands/nav/goto.ts","../../src/cli/commands/nav/wait.ts","../../src/cli/commands/nav/snapshot.ts","../../src/cli/commands/nav/review.ts","../../src/cli/commands/nav/review-desktop.ts","../../src/cli/commands/annotate.ts","../../src/cli/commands/canvas.ts","../../src/cli/commands/rpc.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/interact/upload.ts","../../src/cli/commands/interact/pointer-shared.ts","../../src/cli/commands/interact/pointer-move.ts","../../src/cli/commands/interact/pointer-down.ts","../../src/cli/commands/interact/pointer-up.ts","../../src/cli/commands/interact/pointer-drag.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/screencast-start.ts","../../src/cli/commands/devtools/screencast-stop.ts","../../src/cli/commands/devtools/dialog.ts","../../src/cli/commands/devtools/console-poll.ts","../../src/cli/commands/devtools/network-poll.ts","../../src/cli/commands/devtools/debug-trace-snapshot.ts","../../src/cli/commands/desktop/shared.ts","../../src/cli/commands/desktop/status.ts","../../src/cli/commands/desktop/windows.ts","../../src/cli/commands/desktop/active-window.ts","../../src/cli/commands/desktop/capture-desktop.ts","../../src/cli/commands/desktop/capture-window.ts","../../src/cli/commands/desktop/accessibility-snapshot.ts","../../src/cli/commands/session/cookie-import.ts","../../src/cli/commands/session/cookie-list.ts","../../src/cli/commands/macro-resolve.ts","../../src/cli/commands/research.ts","../../src/cli/commands/shopping.ts","../../src/cli/commands/product-video.ts","../../src/cli/commands/inspiredesign.ts","../../package.json","../../src/cli/index.ts"],"sourcesContent":["import { createUsageError } from \"./errors\";\nimport {\n CLI_COMMANDS,\n VALID_EQUALS_FLAGS,\n VALID_FLAGS\n} from \"../public-surface/generated-manifest\";\nimport type { PublicSurfaceCliCommandName } from \"../public-surface/source\";\n\nconst CLI_COMMAND_SET = new Set<string>(CLI_COMMANDS);\n\nexport { CLI_COMMANDS, VALID_EQUALS_FLAGS, VALID_FLAGS };\n\nexport type CliCommand = PublicSurfaceCliCommandName;\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\nconst VALID_FLAG_SET = new Set<string>(VALID_FLAGS);\nconst VALID_EQUALS_FLAG_SET = new Set<string>(VALID_EQUALS_FLAGS);\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 (CLI_COMMAND_SET.has(candidate)) {\n commandOverride = candidate as CliCommand;\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 for (const arg of args) {\n if (arg.startsWith(\"--\") && !VALID_FLAG_SET.has(arg)) {\n if (arg.includes(\"=\")) {\n const baseFlag = arg.split(\"=\", 2)[0] ?? \"\";\n if (VALID_EQUALS_FLAG_SET.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 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 onboardingMetadata from \"./onboarding-metadata.json\";\nimport {\n INSPIREDESIGN_HANDOFF_COMMANDS,\n INSPIREDESIGN_HANDOFF_GUIDANCE\n} from \"../inspiredesign/handoff\";\nimport type { CliCommand } from \"./args\";\nimport { CLI_COMMANDS, VALID_FLAGS } from \"./args\";\nimport {\n CLI_COMMAND_HELP_DETAILS,\n PUBLIC_CLI_COMMAND_GROUPS,\n TOOL_SURFACE_ENTRIES\n} from \"../public-surface/generated-manifest\";\n\ntype HelpFlag = (typeof VALID_FLAGS)[number];\n\ninterface CommandGroup {\n title: string;\n summary: string;\n commands: readonly CliCommand[];\n}\n\nexport type CommandHelpDetail = typeof CLI_COMMAND_HELP_DETAILS[CliCommand];\n\ninterface FlagEntry {\n flag: HelpFlag;\n alias?: string;\n description: string;\n example?: string;\n}\n\ninterface FlagGroup {\n title: string;\n summary: string;\n flags: readonly FlagEntry[];\n}\n\ninterface ReferenceEntry {\n label: string;\n description: string;\n}\n\ninterface DetailRow {\n label: string;\n value: string;\n}\n\ninterface FormattableRow {\n label: string;\n description: string;\n details?: readonly DetailRow[];\n}\n\nconst LABEL_WIDTH = 42;\nconst DETAIL_LABEL_WIDTH = 9;\nconst COMMAND_SET = new Set<string>(CLI_COMMANDS);\nconst FLAG_SET = new Set<string>(VALID_FLAGS);\nconst TOOL_COUNT = TOOL_SURFACE_ENTRIES.length;\nconst CLI_EQUIVALENT_SET = new Set(\n TOOL_SURFACE_ENTRIES.flatMap((entry) => (entry.cliEquivalent ? [entry.cliEquivalent] : []))\n);\n\nconst formatFlags = (flags: readonly HelpFlag[]): string => (flags.length > 0 ? flags.join(\", \") : \"none\");\n\nexport const getCliOnlyCommands = (): CliCommand[] => (\n CLI_COMMANDS.filter((command) => !CLI_EQUIVALENT_SET.has(command))\n);\n\nexport const getToolOnlyHelperNames = (): string[] => (\n TOOL_SURFACE_ENTRIES\n .filter((entry) => !entry.cliEquivalent)\n .map((entry) => entry.name)\n);\n\nexport const HELP_COMMAND_GROUPS: readonly CommandGroup[] = PUBLIC_CLI_COMMAND_GROUPS.map((group) => ({\n title: group.title,\n summary: group.summary,\n commands: group.commands.map((command) => command.name) as CliCommand[]\n}));\n\nexport const COMMAND_HELP_DETAILS: Record<CliCommand, CommandHelpDetail> = CLI_COMMAND_HELP_DETAILS as Record<CliCommand, CommandHelpDetail>;\n\nexport const HELP_FLAG_GROUPS: readonly FlagGroup[] = [\n {\n title: \"Install / Global Flags\",\n summary: \"Control install scope, prompting, and bundled skill setup.\",\n flags: [\n { flag: \"--global\", alias: \"-g\", description: \"Install into ~/.config/opencode/opencode.json.\", example: \"npx opendevbrowser --global --with-config\" },\n { flag: \"--local\", alias: \"-l\", description: \"Install into ./opencode.json for this project.\", example: \"npx opendevbrowser --local --skills-local\" },\n { flag: \"--update\", alias: \"-u\", description: \"Alias for the update command.\" },\n { flag: \"--uninstall\", description: \"Alias for the uninstall command.\" },\n { flag: \"--with-config\", description: \"Also create opendevbrowser.jsonc defaults.\", example: \"npx opendevbrowser --global --with-config\" },\n { flag: \"--full\", alias: \"-f\", description: \"Install config and pre-extract extension assets.\", example: \"npx opendevbrowser --full\" },\n { flag: \"--no-prompt\", description: \"Run non-interactively using defaults.\" },\n { flag: \"--no-interactive\", description: \"Alias of --no-prompt.\" },\n { flag: \"--quiet\", description: \"Suppress non-error text output.\" },\n { flag: \"--skills-global\", description: \"Install bundled skills into global agent directories.\" },\n { flag: \"--skills-local\", description: \"Install bundled skills into local project agent directories.\" },\n { flag: \"--no-skills\", description: \"Skip bundled skill installation.\" }\n ]\n },\n {\n title: \"Help / Output Flags\",\n summary: \"Inspect help or version and control output transport.\",\n flags: [\n { flag: \"--help\", alias: \"-h\", description: \"Show CLI help output.\", example: \"npx opendevbrowser --help\" },\n { flag: \"--version\", alias: \"-v\", description: \"Show CLI version.\", example: \"npx opendevbrowser --version\" },\n { flag: \"--output-format\", description: \"Output mode: text, json, or stream-json.\", example: \"opendevbrowser status --daemon --output-format json\" },\n { flag: \"--transport\", description: \"Transport selector for transport-aware commands. `status` uses relay/native; `annotate` uses auto/direct/relay.\", example: \"opendevbrowser status --session-id s1 --transport native\" }\n ]\n },\n {\n title: \"Daemon / Session / Launch Flags\",\n summary: \"Control daemon binding, browser connect, and launch behavior. If ext=on but handshake=off, reopen the extension popup and click Connect again to re-establish a clean daemon-extension handshake.\",\n flags: [\n { flag: \"--port\", description: \"Daemon or relay port override.\", example: \"opendevbrowser serve --port 8788\" },\n { flag: \"--token\", description: \"Relay or daemon auth token override.\", example: \"opendevbrowser serve --token local-dev-token\" },\n { flag: \"--stop\", description: \"Stop a running daemon.\", example: \"opendevbrowser serve --stop\" },\n { flag: \"--daemon\", description: \"Target daemon status mode where supported.\", example: \"opendevbrowser status --daemon --output-format json\" },\n { flag: \"--script\", description: \"Path to a run-script JSON file.\", example: \"opendevbrowser run --script ./workflow.json\" },\n { flag: \"--session-id\", description: \"Target an existing browser or daemon session.\", example: \"opendevbrowser snapshot --session-id s1\" },\n { flag: \"--close-browser\", description: \"Close the managed browser on disconnect.\" },\n { flag: \"--ws-endpoint\", description: \"Connect using an explicit CDP WebSocket endpoint.\", example: \"opendevbrowser connect --ws-endpoint ws://127.0.0.1:9222/devtools/browser/...\" },\n { flag: \"--host\", description: \"CDP host for host/port connect mode.\", example: \"opendevbrowser connect --host 127.0.0.1 --cdp-port 9222\" },\n { flag: \"--cdp-port\", description: \"CDP port for host/port connect mode.\" },\n { flag: \"--headless\", description: \"Launch a managed browser in headless mode.\", example: \"opendevbrowser launch --no-extension --headless\" },\n { flag: \"--profile\", description: \"Use a named browser profile directory.\" },\n { flag: \"--persist-profile\", description: \"Keep the generated profile directory after exit. `run` uses a temporary profile by default unless this flag is enabled.\" },\n { flag: \"--chrome-path\", description: \"Use a specific Chrome, Chromium, or CfT binary.\" },\n { flag: \"--start-url\", description: \"Open this URL immediately after launch or connect.\" },\n { flag: \"--flag\", description: \"Pass one or more extra Chrome CLI flags.\" },\n { flag: \"--no-extension\", description: \"Force managed mode without extension relay.\" },\n { flag: \"--extension-only\", description: \"Fail unless the extension relay websocket is connected and the daemon-extension handshake is complete.\" },\n { flag: \"--extension-legacy\", description: \"Use the legacy /cdp relay mode instead of /ops.\" },\n { flag: \"--wait-for-extension\", description: \"Wait for a clean daemon-extension handshake before returning.\" },\n { flag: \"--wait-timeout-ms\", description: \"Handshake wait timeout in milliseconds.\" }\n ]\n },\n {\n title: \"Navigation / Interaction / Diagnostics Flags\",\n summary: \"Command-specific flags for page actions, reads, and diagnostics.\",\n flags: [\n { flag: \"--url\", description: \"Target URL for navigation, connect, or workflow commands; repeat for multi-reference inspiredesign runs.\", example: \"opendevbrowser goto --session-id s1 --url https://example.com\" },\n { flag: \"--wait-until\", description: \"Navigation wait strategy such as load or domcontentloaded.\" },\n { flag: \"--timeout-ms\", description: \"Operation timeout in milliseconds.\", example: \"opendevbrowser canvas --timeout-ms 120000 --command canvas.session.open ...\" },\n { flag: \"--ref\", description: \"Snapshot ref id for element-targeted commands.\", example: \"opendevbrowser click --session-id s1 --ref r12\" },\n { flag: \"--state\", description: \"Wait state selector for wait-style commands.\" },\n { flag: \"--until\", description: \"Wait condition selector for wait-style commands.\" },\n { flag: \"--mode\", description: \"Mode selector for commands that accept variants.\" },\n { flag: \"--max-chars\", description: \"Maximum text characters to return for DOM reads.\" },\n { flag: \"--cursor\", description: \"Cursor token for paginated list commands.\" },\n { flag: \"--text\", description: \"Text payload for type and related commands.\" },\n { flag: \"--clear\", description: \"Clear the existing input value before typing.\" },\n { flag: \"--submit\", description: \"Submit the form or input after typing.\" },\n { flag: \"--values\", description: \"CSV values for select commands.\" },\n { flag: \"--files\", description: \"CSV file paths for upload commands.\" },\n { flag: \"--dy\", description: \"Vertical scroll delta for scroll commands.\" },\n { flag: \"--key\", description: \"Keyboard key for the press command.\" },\n { flag: \"--attr\", description: \"DOM attribute name for dom-attr.\" },\n { flag: \"--x\", description: \"Viewport x coordinate for pointer commands.\" },\n { flag: \"--y\", description: \"Viewport y coordinate for pointer commands.\" },\n { flag: \"--from-x\", description: \"Pointer drag start x coordinate.\" },\n { flag: \"--from-y\", description: \"Pointer drag start y coordinate.\" },\n { flag: \"--to-x\", description: \"Pointer drag end x coordinate.\" },\n { flag: \"--to-y\", description: \"Pointer drag end y coordinate.\" },\n { flag: \"--steps\", description: \"Interpolation step count for pointer move or drag commands.\" },\n { flag: \"--button\", description: \"Pointer button selector for pointer down or up.\" },\n { flag: \"--click-count\", description: \"Associated click count for pointer down or up.\" },\n { flag: \"--name\", description: \"Named page identifier for page commands.\" },\n { flag: \"--target-id\", description: \"Browser target id for target commands.\", example: \"opendevbrowser target-use --session-id s1 --target-id page-2\" },\n { flag: \"--window-id\", description: \"Desktop window id for direct window capture commands.\" },\n { flag: \"--tab-id\", description: \"Browser tab id override for extension and annotation commands.\" },\n { flag: \"--include-urls\", description: \"Include page URLs in list output where supported.\" },\n { flag: \"--path\", description: \"Filesystem path for command output or artifacts.\", example: \"opendevbrowser screenshot --session-id s1 --path ./shot.png\" },\n { flag: \"--screencast-id\", description: \"Recorded screencast id returned by screencast-start for the same session.\" },\n { flag: \"--reason\", description: \"Audit reason for desktop observation commands.\" },\n { flag: \"--full-page\", description: \"Capture the full scrollable page instead of the current viewport.\" },\n { flag: \"--action\", description: \"Dialog action: status, accept, or dismiss.\" },\n { flag: \"--prompt-text\", description: \"Prompt text to submit when accepting a prompt dialog.\" },\n { flag: \"--since-seq\", description: \"Poll from a sequence id across diagnostics streams.\" },\n { flag: \"--max\", description: \"Maximum number of records or items to return.\" },\n { flag: \"--interval-ms\", description: \"Frame capture interval for screencast recording.\" },\n { flag: \"--max-frames\", description: \"Maximum screencast frame count before auto-stop.\" },\n { flag: \"--since-console-seq\", description: \"Console sequence cursor for debug-trace snapshots.\" },\n { flag: \"--since-network-seq\", description: \"Network sequence cursor for debug-trace snapshots.\" },\n { flag: \"--since-exception-seq\", description: \"Exception sequence cursor for debug-trace snapshots.\" },\n { flag: \"--request-id\", description: \"Attach or lookup a request id for correlated output.\" },\n { flag: \"--cookies\", description: \"Inline cookie payload for cookie-import.\" },\n { flag: \"--cookies-file\", description: \"File path containing cookies for cookie-import.\" },\n { flag: \"--strict\", description: \"Fail cookie import on invalid entries.\" },\n { flag: \"--screenshot-mode\", description: \"Annotation screenshot mode: visible, full, or none.\" },\n { flag: \"--debug\", description: \"Enable debug-level annotation capture extras.\" },\n { flag: \"--context\", description: \"Free-form annotation context for reviewers or agents.\" },\n { flag: \"--stored\", description: \"Return the last stored annotation payload instead of starting a new capture.\" }\n ]\n },\n {\n title: \"Macro / Provider / Power Flags\",\n summary: \"Workflow filters, provider selectors, and unsafe RPC or /canvas options.\",\n flags: [\n { flag: \"--expression\", description: \"Macro expression to resolve or execute.\", example: \"opendevbrowser macro-resolve --expression '@web.search(\\\"openai\\\")'\" },\n { flag: \"--default-provider\", description: \"Provider fallback for shorthand macro expressions.\" },\n { flag: \"--include-catalog\", description: \"Include macro catalog metadata in the response.\" },\n { flag: \"--command\", description: \"Canvas command name for the canvas CLI command.\", example: \"opendevbrowser canvas --command canvas.session.open --params '{...}'\" },\n { flag: \"--execute\", description: \"Execute a resolved macro action after planning.\" },\n { flag: \"--params\", description: \"Inline JSON params for canvas or rpc commands.\" },\n { flag: \"--params-file\", description: \"Path to a JSON params file for canvas or rpc commands.\", example: \"opendevbrowser canvas --command canvas.plan.set --params-file ./plan.json\" },\n { flag: \"--unsafe-internal\", description: \"Required safety gate for the rpc command.\" },\n { flag: \"--topic\", description: \"Research topic input.\" },\n { flag: \"--days\", description: \"Lookback window in days for research commands.\" },\n { flag: \"--from\", description: \"Start date boundary for research commands.\" },\n { flag: \"--to\", description: \"End date boundary for research commands.\" },\n { flag: \"--source-selection\", description: \"Research source-family selector. Use auto for generic topical research; add shopping only for deliberate commercial comparison.\" },\n { flag: \"--sources\", description: \"Explicit source selectors within a source family. Use shopping only when commercial intent is explicit.\" },\n { flag: \"--include-engagement\", description: \"Include engagement metrics in research output.\" },\n { flag: \"--limit-per-source\", description: \"Per-source result cap for research runs.\" },\n { flag: \"--query\", description: \"Shopping query input.\" },\n { flag: \"--providers\", description: \"Comma-separated provider ids for shopping or artifact commands.\" },\n { flag: \"--budget\", description: \"Budget filter for shopping workflows.\" },\n { flag: \"--region\", description: \"Region or country hint for provider selection. Treat it as advisory unless output metadata reports `region_authoritative=true`.\" },\n { flag: \"--sort\", description: \"Sort mode for shopping results.\" },\n { flag: \"--brief\", description: \"Inspiredesign brief describing the target design direction.\" },\n { flag: \"--capture-mode\", description: \"Inspiredesign capture mode: off (default) or deep.\" },\n { flag: \"--include-prototype-guidance\", description: \"Include inspiredesign prototype guidance in workflow output.\" },\n { flag: \"--product-url\", description: \"Target product URL for product-video workflows.\" },\n { flag: \"--product-name\", description: \"Product name override for product-video workflows.\" },\n { flag: \"--provider-hint\", description: \"Provider hint override for product workflows.\" },\n { flag: \"--include-screenshots\", description: \"Include screenshots in product presentation output, or prefer screenshots when fetching stored annotations.\" },\n { flag: \"--include-all-images\", description: \"Include all discovered product images.\" },\n { flag: \"--include-copy\", description: \"Include product marketing copy metadata.\" },\n { flag: \"--use-cookies\", description: \"Enable or disable provider cookie injection for workflow runs; a bare flag means true.\", example: \"opendevbrowser shopping run --query 'usb hub' --use-cookies\" },\n { flag: \"--browser-mode\", description: \"Shopping browser-recovery preference: auto, extension, or managed. Use managed for deterministic reruns and extension only when relay-backed auth/session state is required.\", example: \"opendevbrowser shopping run --query 'wireless ergonomic mouse' --providers shopping/bestbuy,shopping/ebay --browser-mode managed\" },\n { flag: \"--challenge-automation-mode\", description: \"Per-run challenge automation mode for workflow runs and macro-resolve execute: off, browser, or browser_with_helper. Precedence is run > session > config, and the helper remains browser-scoped only.\", example: \"opendevbrowser macro-resolve --expression '@community.search(\\\"openai\\\")' --execute --challenge-automation-mode browser_with_helper\" },\n { flag: \"--cookie-policy-override\", description: \"Per-run workflow cookie policy override: off, auto, or required.\", example: \"opendevbrowser research run --topic 'agent workflows' --cookie-policy-override required\" },\n { flag: \"--cookie-policy\", description: \"Alias of --cookie-policy-override.\" },\n { flag: \"--output-dir\", description: \"Directory where generated artifacts are written, including screencast replay output.\" },\n { flag: \"--ttl-hours\", description: \"Artifact cache time-to-live in hours.\" },\n { flag: \"--expired-only\", description: \"List only expired artifacts in artifacts commands.\" }\n ]\n }\n];\n\nexport const HELP_TOOL_ENTRIES = TOOL_SURFACE_ENTRIES;\n\nexport const HELP_CAPABILITY_ENTRIES: readonly FormattableRow[] = [\n {\n label: \"screencast / browser replay\",\n description: \"Use the public browser replay lane when you need temporal browser evidence before or after a fragile flow.\",\n details: [\n { label: \"cli:\", value: \"screencast-start, screencast-stop\" },\n { label: \"example:\", value: \"npx opendevbrowser screencast-start --session-id <id> --output-dir ./artifacts/replay\" }\n ]\n },\n {\n label: \"desktop observation\",\n description: \"Use the public read-only desktop observation plane for sibling desktop evidence on macOS; availability, window inventory, and accessibility probes use the local swift command, while screenshots use macOS screencapture outside extension relay.\",\n details: [\n {\n label: \"cli:\",\n value: \"desktop-status, desktop-windows, desktop-active-window, desktop-capture-desktop, desktop-capture-window, desktop-accessibility-snapshot\"\n },\n { label: \"example:\", value: \"npx opendevbrowser desktop-status --output-format json\" }\n ]\n },\n {\n label: \"computer use / browser-scoped computer use\",\n description: \"Control the bounded browser-scoped computer-use challenge lane with --challenge-automation-mode; the optional helper is not a desktop agent.\",\n details: [\n { label: \"flag:\", value: \"--challenge-automation-mode off|browser|browser_with_helper\" },\n { label: \"works:\", value: \"research run, shopping run, product-video run, inspiredesign run, macro-resolve --execute\" },\n { label: \"entry:\", value: onboardingMetadata.quickStartCommands.computerUseEntry },\n { label: \"proof:\", value: \"review, session-inspector, workflow fallback metadata\" }\n ]\n }\n];\n\nexport const HELP_ONBOARDING_ENTRIES: readonly FormattableRow[] = [\n {\n label: \"prompting_guide\",\n description: \"Load local best-practice guidance before low-level browser commands.\",\n details: [{ label: \"tool:\", value: onboardingMetadata.quickStartCommands.promptingGuide }]\n },\n {\n label: \"skill_load\",\n description: `Load ${onboardingMetadata.skillName} ${onboardingMetadata.skillTopic} directly when you want the canonical quick-start section.`,\n details: [{ label: \"tool:\", value: onboardingMetadata.quickStartCommands.skillLoad }]\n },\n {\n label: \"validated_lanes\",\n description: `Load ${onboardingMetadata.skillName} ${onboardingMetadata.validatedSkillTopic} when you need the current proven transcript, research, and shopping runbook.`,\n details: [{ label: \"tool:\", value: onboardingMetadata.quickStartCommands.validatedLanes }]\n },\n {\n label: \"skill_list\",\n description: \"Inspect bundled and discovered skill packs when you need a different local lane.\",\n details: [{ label: \"tool:\", value: onboardingMetadata.quickStartCommands.skillList }]\n },\n {\n label: \"research_reliable\",\n description: \"Generic topical research is currently safest with `--source-selection auto`; add shopping only when the task is explicitly commercial.\",\n details: [{ label: \"cli:\", value: onboardingMetadata.quickStartCommands.validatedResearch }]\n },\n {\n label: \"shopping_reliable\",\n description: \"Start deal hunting with explicit providers in managed mode and only trust regional comparisons when the result reports `region_authoritative=true`.\",\n details: [{ label: \"cli:\", value: onboardingMetadata.quickStartCommands.validatedShopping }]\n },\n {\n label: \"inspiredesign_followthrough\",\n description: \"After inspiredesign finishes, continue in Canvas with the emitted request template and load the canvas-contract design-agent lane before patching.\",\n details: [\n { label: \"quick:\", value: INSPIREDESIGN_HANDOFF_COMMANDS.loadBestPractices },\n { label: \"design:\", value: INSPIREDESIGN_HANDOFF_COMMANDS.loadDesignAgent },\n { label: \"prep:\", value: INSPIREDESIGN_HANDOFF_GUIDANCE.prepareCanvasPlanRequest },\n { label: \"run:\", value: INSPIREDESIGN_HANDOFF_COMMANDS.continueInCanvas }\n ]\n },\n {\n label: \"computer_use_entry\",\n description: \"Enter browser-scoped computer use from a workflow run, not from a separate desktop command family.\",\n details: [{ label: \"cli:\", value: onboardingMetadata.quickStartCommands.computerUseEntry }]\n },\n {\n label: \"happy_path\",\n description: \"After guidance, verify a minimal managed happy path before widening into multi-step automation.\",\n details: [{ label: \"cli:\", value: onboardingMetadata.quickStartCommands.happyPath }]\n },\n {\n label: \"surface_split\",\n description: \"Use the existing public-surface split when a workflow or helper only exists on one side of the CLI or tool surface.\",\n details: [\n { label: \"cli-only:\", value: getCliOnlyCommands().join(\", \") },\n { label: \"tool-only:\", value: getToolOnlyHelperNames().join(\", \") }\n ]\n },\n {\n label: \"docs\",\n description: \"Use the first-run checklist and canonical skill runbook for proof and deeper operating details.\",\n details: [{\n label: \"paths:\",\n value: `${onboardingMetadata.referencePaths.onboardingDoc}, ${onboardingMetadata.referencePaths.skillDoc}`\n }]\n }\n];\n\nexport const HELP_REFERENCE_ENTRIES: readonly ReferenceEntry[] = [\n { label: \"src/cli/onboarding-metadata.json\", description: \"Canonical first-contact onboarding metadata shared by help, nudges, and proof lanes.\" },\n { label: \"src/inspiredesign/handoff.ts\", description: \"Shared inspiredesign follow-through commands, artifact names, and Canvas continuation guidance.\" },\n { label: \"src/public-surface/source.ts\", description: \"Authoritative command, usage, flag, and tool surface metadata.\" },\n { label: \"src/public-surface/generated-manifest.ts\", description: \"Checked-in generated public-surface snapshot consumed by help and parity tests.\" },\n { label: \"src/public-surface/generated-manifest.json\", description: \"Checked-in generated public-surface snapshot consumed by inventory scripts.\" },\n { label: \"src/cli/args.ts\", description: \"CLI argument parsing backed by the public-surface source.\" },\n { label: \"src/cli/help.ts\", description: \"Human-facing CLI formatting layered on the public-surface source, including the first-contact Find It Fast lookup block.\" },\n { label: \"src/tools/index.ts\", description: \"Code-level tool registry.\" },\n { label: \"docs/CLI.md\", description: \"Detailed CLI guide and release-gate runbooks.\" },\n { label: onboardingMetadata.referencePaths.onboardingDoc, description: \"First-run checklist for help-led onboarding and happy-path proof.\" },\n { label: onboardingMetadata.referencePaths.skillDoc, description: \"Canonical bundled best-practices runbook and quick-start guidance.\" },\n { label: \"docs/WORKFLOW_SURFACE_MAP.md\", description: \"Code-derived workflow and validation inventory, including CLI-only and tool-only surface splits.\" },\n { label: \"docs/SURFACE_REFERENCE.md\", description: \"Canonical CLI, tool, and relay channel inventory.\" },\n { label: \"opendevbrowser --help\", description: \"Primary full help invocation for quick discovery.\" },\n { label: \"opendevbrowser help\", description: \"Alias that prints the same full help inventory.\" }\n];\n\nfunction formatRows(rows: readonly FormattableRow[]): string {\n return rows\n .map((row) => {\n const lines = [` ${row.label.padEnd(LABEL_WIDTH)} ${row.description}`];\n for (const detail of row.details ?? []) {\n lines.push(` ${detail.label.padEnd(DETAIL_LABEL_WIDTH)} ${detail.value}`);\n }\n return lines.join(\"\\n\");\n })\n .join(\"\\n\");\n}\n\nfunction assertCommandCoverage(): void {\n const seen = new Set<string>();\n\n for (const group of HELP_COMMAND_GROUPS) {\n for (const command of group.commands) {\n const detail = COMMAND_HELP_DETAILS[command];\n if (!COMMAND_SET.has(command)) {\n throw new Error(`Help references unknown CLI command: ${command}`);\n }\n if (seen.has(command)) {\n throw new Error(`Help command appears multiple times: ${command}`);\n }\n if (!detail || !detail.description.trim() || !detail.usage.trim()) {\n throw new Error(`Missing command help metadata: ${command}`);\n }\n for (const flag of detail.flags) {\n if (!FLAG_SET.has(flag)) {\n throw new Error(`Command help metadata references unknown flag ${flag} for ${command}`);\n }\n }\n seen.add(command);\n }\n }\n\n if (seen.size !== CLI_COMMANDS.length) {\n const missing = CLI_COMMANDS.filter((command) => !seen.has(command));\n throw new Error(`Help command coverage mismatch; missing: ${missing.join(\", \")}`);\n }\n}\n\nfunction assertFlagCoverage(): void {\n const seen = new Set<string>();\n\n for (const group of HELP_FLAG_GROUPS) {\n for (const entry of group.flags) {\n if (!FLAG_SET.has(entry.flag)) {\n throw new Error(`Help references unknown CLI flag: ${entry.flag}`);\n }\n if (seen.has(entry.flag)) {\n throw new Error(`Help flag appears multiple times: ${entry.flag}`);\n }\n seen.add(entry.flag);\n }\n }\n\n if (seen.size !== VALID_FLAGS.length) {\n const missing = VALID_FLAGS.filter((flag) => !seen.has(flag));\n throw new Error(`Help flag coverage mismatch; missing: ${missing.join(\", \")}`);\n }\n}\n\nfunction assertToolCoverage(): void {\n const seen = new Set<string>();\n\n for (const entry of HELP_TOOL_ENTRIES) {\n if (!entry.name.startsWith(\"opendevbrowser_\")) {\n throw new Error(`Invalid tool name in help inventory: ${entry.name}`);\n }\n if (!entry.description.trim()) {\n throw new Error(`Help tool is missing a description: ${entry.name}`);\n }\n if (seen.has(entry.name)) {\n throw new Error(`Help tool appears multiple times: ${entry.name}`);\n }\n if (entry.cliEquivalent && !COMMAND_SET.has(entry.cliEquivalent)) {\n throw new Error(`Tool metadata references unknown CLI command: ${entry.cliEquivalent}`);\n }\n seen.add(entry.name);\n }\n\n if (HELP_TOOL_ENTRIES.length !== TOOL_COUNT) {\n throw new Error(`Help tool inventory must list ${TOOL_COUNT} tools; got ${HELP_TOOL_ENTRIES.length}`);\n }\n}\n\nfunction formatCommandGroups(): string {\n return HELP_COMMAND_GROUPS\n .map((group) => {\n const rows: FormattableRow[] = group.commands.map((command) => {\n const detail = COMMAND_HELP_DETAILS[command];\n return {\n label: command,\n description: detail.description,\n details: [\n { label: \"usage:\", value: detail.usage },\n { label: \"flags:\", value: formatFlags(detail.flags) }\n ]\n };\n });\n return `${group.title}: ${group.summary}\\n${formatRows(rows)}`;\n })\n .join(\"\\n\\n\");\n}\n\nfunction formatFlagGroups(): string {\n return HELP_FLAG_GROUPS\n .map((group) => {\n const rows: FormattableRow[] = group.flags.map((entry) => ({\n label: entry.alias ? `${entry.flag} (${entry.alias})` : entry.flag,\n description: entry.description,\n details: entry.example ? [{ label: \"example:\", value: entry.example }] : []\n }));\n return `${group.title}: ${group.summary}\\n${formatRows(rows)}`;\n })\n .join(\"\\n\\n\");\n}\n\nfunction formatToolEntries(): string {\n return formatRows(HELP_TOOL_ENTRIES.map((entry) => ({\n label: entry.name,\n description: entry.description,\n details: entry.cliEquivalent\n ? [{ label: \"cli:\", value: entry.cliEquivalent }]\n : [{ label: \"scope:\", value: \"tool-only\" }]\n })));\n}\n\nfunction formatOnboardingEntries(): string {\n return formatRows(HELP_ONBOARDING_ENTRIES);\n}\n\nfunction formatCapabilityEntries(): string {\n return formatRows(HELP_CAPABILITY_ENTRIES);\n}\n\nfunction formatReferenceEntries(): string {\n return formatRows(HELP_REFERENCE_ENTRIES.map((entry) => ({\n label: entry.label,\n description: entry.description\n })));\n}\n\nexport function getHelpText(): string {\n assertCommandCoverage();\n assertFlagCoverage();\n assertToolCoverage();\n\n return [\n \"OpenDevBrowser CLI\",\n \"\",\n \"Usage:\",\n \" npx opendevbrowser <command> [options]\",\n \"\",\n \"Find It Fast:\",\n \" Use these exact lookup terms when you need replay, desktop evidence, or browser-scoped computer use.\",\n formatCapabilityEntries(),\n \"\",\n `${onboardingMetadata.sectionTitle}:`,\n ` ${onboardingMetadata.sectionSummary}`,\n formatOnboardingEntries(),\n \"\",\n `Command Inventory (all ${CLI_COMMANDS.length} commands):`,\n formatCommandGroups(),\n \"\",\n \"Flag Inventory (all supported flags):\",\n formatFlagGroups(),\n \"\",\n `Tool Inventory (all ${TOOL_COUNT} opendevbrowser_* tools):`,\n formatToolEntries(),\n \"\",\n \"Reference Pointers:\",\n formatReferenceEntries()\n ].join(\"\\n\");\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\": [\"quick start\", \"getting started\", \"launch\", \"connect\", \"setup\"],\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 crypto from \"crypto\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { ensureDir } from \"../utils/config\";\nimport { getBundledSkillsDir, getGlobalSkillTargets, getLocalSkillTargets, type SkillTarget } from \"../utils/skills\";\nimport { listBundledSkillDirectories } from \"../../skills/bundled-skill-directories\";\n\nexport type SkillInstallMode = \"global\" | \"local\";\n\ntype SyncOutcome = \"installed\" | \"refreshed\" | \"unchanged\";\ntype LegacyAliasName = \"research\" | \"shopping\";\nexport type LegacyAliasPreservationReason = \"contains_skill_md\" | \"non_empty\" | \"unknown_layout\";\n\nexport interface PreservedLegacyAlias {\n targetDir: string;\n name: LegacyAliasName;\n reason: LegacyAliasPreservationReason;\n}\n\nexport interface SkillTargetSyncResult {\n agents: string[];\n targetDir: string;\n installed: string[];\n refreshed: string[];\n unchanged: string[];\n removedLegacyAliases: string[];\n preservedLegacyAliases: PreservedLegacyAlias[];\n success: boolean;\n error?: string;\n}\n\nexport interface SkillSyncResult {\n success: boolean;\n message: string;\n mode: SkillInstallMode;\n targets: SkillTargetSyncResult[];\n installed: string[];\n refreshed: string[];\n unchanged: string[];\n removedLegacyAliases: string[];\n preservedLegacyAliases: PreservedLegacyAlias[];\n}\n\nexport interface SkillTargetRemovalResult {\n agents: string[];\n targetDir: string;\n removed: string[];\n missing: string[];\n removedLegacyAliases: string[];\n preservedLegacyAliases: PreservedLegacyAlias[];\n success: boolean;\n error?: string;\n}\n\nexport interface SkillRemovalResult {\n success: boolean;\n message: string;\n mode: SkillInstallMode;\n targets: SkillTargetRemovalResult[];\n removed: string[];\n missing: string[];\n removedLegacyAliases: string[];\n preservedLegacyAliases: PreservedLegacyAlias[];\n}\n\ntype LegacyAliasCleanupResult = {\n removed: string[];\n preserved: PreservedLegacyAlias[];\n};\n\nconst LEGACY_ALIAS_DIRS = [\n { name: \"research\", canonical: \"opendevbrowser-research\" },\n { name: \"shopping\", canonical: \"opendevbrowser-shopping\" }\n] as const;\n\nfunction getTargets(mode: SkillInstallMode): SkillTarget[] {\n return mode === \"global\" ? getGlobalSkillTargets() : getLocalSkillTargets();\n}\n\nfunction getCanonicalBundledSkillNames(): string[] {\n return listBundledSkillDirectories().map((entry) => entry.name);\n}\n\nfunction hasCanonicalBundledSkillInTarget(targetDir: string, packNames: readonly string[]): boolean {\n return packNames.some((packName) => fs.existsSync(path.join(targetDir, packName)));\n}\n\nfunction formatSummary(parts: string[], totalTargets: number, failures: number): string {\n const summary = parts.length > 0 ? parts.join(\", \") : \"no lifecycle changes\";\n const failureSummary = failures > 0 ? `, ${failures} failed` : \"\";\n return `${summary} across ${totalTargets} targets${failureSummary}`;\n}\n\nfunction hashDirectoryTree(dirPath: string): string {\n const hash = crypto.createHash(\"sha256\");\n\n const visit = (currentPath: string, relativePath: string): void => {\n const entries = fs.readdirSync(currentPath, { withFileTypes: true })\n .sort((left, right) => left.name.localeCompare(right.name));\n\n for (const entry of entries) {\n const absolutePath = path.join(currentPath, entry.name);\n const entryRelativePath = relativePath\n ? path.posix.join(relativePath, entry.name)\n : entry.name;\n\n if (entry.isDirectory()) {\n hash.update(`D:${entryRelativePath}\\0`);\n visit(absolutePath, entryRelativePath);\n continue;\n }\n\n if (entry.isFile()) {\n hash.update(`F:${entryRelativePath}\\0`);\n hash.update(fs.readFileSync(absolutePath));\n hash.update(\"\\0\");\n continue;\n }\n\n if (entry.isSymbolicLink()) {\n hash.update(`L:${entryRelativePath}\\0${fs.readlinkSync(absolutePath)}\\0`);\n }\n }\n };\n\n visit(dirPath, \"\");\n return hash.digest(\"hex\");\n}\n\nfunction syncSkillDirectory(sourcePath: string, targetPath: string, sourceFingerprint: string): SyncOutcome {\n if (!fs.existsSync(targetPath)) {\n fs.cpSync(sourcePath, targetPath, { recursive: true });\n return \"installed\";\n }\n\n const targetFingerprint = hashDirectoryTree(targetPath);\n if (targetFingerprint === sourceFingerprint) {\n return \"unchanged\";\n }\n\n const parentDir = path.dirname(targetPath);\n const targetName = path.basename(targetPath);\n const stagingRoot = fs.mkdtempSync(path.join(parentDir, `.${targetName}-sync-`));\n const stagedPath = path.join(stagingRoot, targetName);\n const backupPath = path.join(stagingRoot, `${targetName}-backup`);\n\n try {\n fs.cpSync(sourcePath, stagedPath, { recursive: true });\n fs.renameSync(targetPath, backupPath);\n try {\n fs.renameSync(stagedPath, targetPath);\n } catch (error) {\n if (fs.existsSync(backupPath) && !fs.existsSync(targetPath)) {\n fs.renameSync(backupPath, targetPath);\n }\n throw error;\n }\n fs.rmSync(backupPath, { recursive: true, force: true });\n return \"refreshed\";\n } finally {\n if (fs.existsSync(stagedPath)) {\n fs.rmSync(stagedPath, { recursive: true, force: true });\n }\n if (fs.existsSync(backupPath)) {\n fs.rmSync(backupPath, { recursive: true, force: true });\n }\n fs.rmSync(stagingRoot, { recursive: true, force: true });\n }\n}\n\nfunction cleanupLegacyAlias(targetDir: string, aliasName: LegacyAliasName): LegacyAliasCleanupResult {\n const aliasPath = path.join(targetDir, aliasName);\n\n if (!fs.existsSync(aliasPath)) {\n return { removed: [], preserved: [] };\n }\n\n let stats: fs.Stats;\n try {\n stats = fs.statSync(aliasPath);\n } catch {\n return {\n removed: [],\n preserved: [{ targetDir, name: aliasName, reason: \"unknown_layout\" }]\n };\n }\n\n if (!stats.isDirectory()) {\n return {\n removed: [],\n preserved: [{ targetDir, name: aliasName, reason: \"unknown_layout\" }]\n };\n }\n\n if (fs.existsSync(path.join(aliasPath, \"SKILL.md\"))) {\n return {\n removed: [],\n preserved: [{ targetDir, name: aliasName, reason: \"contains_skill_md\" }]\n };\n }\n\n const entries = fs.readdirSync(aliasPath);\n if (entries.length === 0) {\n fs.rmSync(aliasPath, { recursive: true, force: true });\n return { removed: [aliasName], preserved: [] };\n }\n\n return {\n removed: [],\n preserved: [{ targetDir, name: aliasName, reason: \"non_empty\" }]\n };\n}\n\nfunction cleanupLegacyAliases(targetDir: string): LegacyAliasCleanupResult {\n const removed: string[] = [];\n const preserved: PreservedLegacyAlias[] = [];\n\n for (const alias of LEGACY_ALIAS_DIRS) {\n const result = cleanupLegacyAlias(targetDir, alias.name);\n removed.push(...result.removed);\n preserved.push(...result.preserved);\n }\n\n return { removed, preserved };\n}\n\nfunction buildSyncMessage(mode: SkillInstallMode, result: SkillSyncResult): string {\n return `Skills ${mode} sync: ${formatSummary(\n [\n result.installed.length > 0 ? `${result.installed.length} installed` : \"\",\n result.refreshed.length > 0 ? `${result.refreshed.length} refreshed` : \"\",\n result.unchanged.length > 0 ? `${result.unchanged.length} unchanged` : \"\",\n result.removedLegacyAliases.length > 0 ? `${result.removedLegacyAliases.length} legacy aliases removed` : \"\",\n result.preservedLegacyAliases.length > 0 ? `${result.preservedLegacyAliases.length} legacy aliases preserved` : \"\"\n ].filter(Boolean),\n result.targets.length,\n result.targets.filter((entry) => !entry.success).length\n )}`;\n}\n\nfunction buildRemovalMessage(mode: SkillInstallMode, result: SkillRemovalResult): string {\n return `Skills ${mode} removal: ${formatSummary(\n [\n result.removed.length > 0 ? `${result.removed.length} removed` : \"\",\n result.missing.length > 0 ? `${result.missing.length} already absent` : \"\",\n result.removedLegacyAliases.length > 0 ? `${result.removedLegacyAliases.length} legacy aliases removed` : \"\",\n result.preservedLegacyAliases.length > 0 ? `${result.preservedLegacyAliases.length} legacy aliases preserved` : \"\"\n ].filter(Boolean),\n result.targets.length,\n result.targets.filter((entry) => !entry.success).length\n )}`;\n}\n\nexport function syncBundledSkills(mode: SkillInstallMode): SkillSyncResult {\n const targets = getTargets(mode);\n const targetResults: SkillTargetSyncResult[] = [];\n\n try {\n const sourceDir = getBundledSkillsDir();\n const packNames = getCanonicalBundledSkillNames();\n const bundledFingerprints = new Map<string, string>();\n\n for (const packName of packNames) {\n const sourcePath = path.join(sourceDir, packName);\n if (!fs.existsSync(sourcePath)) {\n throw new Error(`Bundled skill directory missing: ${packName}`);\n }\n bundledFingerprints.set(packName, hashDirectoryTree(sourcePath));\n }\n\n for (const target of targets) {\n const installed: string[] = [];\n const refreshed: string[] = [];\n const unchanged: string[] = [];\n const removedLegacyAliases: string[] = [];\n const preservedLegacyAliases: PreservedLegacyAlias[] = [];\n\n try {\n ensureDir(target.dir);\n\n for (const packName of packNames) {\n const sourcePath = path.join(sourceDir, packName);\n const targetPath = path.join(target.dir, packName);\n const sourceFingerprint = bundledFingerprints.get(packName);\n if (!sourceFingerprint) {\n throw new Error(`Bundled fingerprint missing: ${packName}`);\n }\n\n const outcome = syncSkillDirectory(sourcePath, targetPath, sourceFingerprint);\n if (outcome === \"installed\") {\n installed.push(packName);\n } else if (outcome === \"refreshed\") {\n refreshed.push(packName);\n } else {\n unchanged.push(packName);\n }\n }\n\n const legacyCleanup = cleanupLegacyAliases(target.dir);\n removedLegacyAliases.push(...legacyCleanup.removed);\n preservedLegacyAliases.push(...legacyCleanup.preserved);\n\n targetResults.push({\n agents: target.agents,\n targetDir: target.dir,\n installed,\n refreshed,\n unchanged,\n removedLegacyAliases,\n preservedLegacyAliases,\n success: true\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n targetResults.push({\n agents: target.agents,\n targetDir: target.dir,\n installed,\n refreshed,\n unchanged,\n removedLegacyAliases,\n preservedLegacyAliases,\n success: false,\n error: message\n });\n }\n }\n\n const result: SkillSyncResult = {\n success: targetResults.every((entry) => entry.success),\n message: \"\",\n mode,\n targets: targetResults,\n installed: targetResults.flatMap((entry) => entry.installed),\n refreshed: targetResults.flatMap((entry) => entry.refreshed),\n unchanged: targetResults.flatMap((entry) => entry.unchanged),\n removedLegacyAliases: targetResults.flatMap((entry) => entry.removedLegacyAliases),\n preservedLegacyAliases: targetResults.flatMap((entry) => entry.preservedLegacyAliases)\n };\n result.message = buildSyncMessage(mode, result);\n return result;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const result: SkillSyncResult = {\n success: false,\n message: \"\",\n mode,\n targets: targetResults,\n installed: targetResults.flatMap((entry) => entry.installed),\n refreshed: targetResults.flatMap((entry) => entry.refreshed),\n unchanged: targetResults.flatMap((entry) => entry.unchanged),\n removedLegacyAliases: targetResults.flatMap((entry) => entry.removedLegacyAliases),\n preservedLegacyAliases: targetResults.flatMap((entry) => entry.preservedLegacyAliases)\n };\n result.message = `Failed to sync skills (${mode}): ${message}`;\n return result;\n }\n}\n\nexport function removeBundledSkills(mode: SkillInstallMode): SkillRemovalResult {\n const targets = getTargets(mode);\n const packNames = getCanonicalBundledSkillNames();\n const targetResults: SkillTargetRemovalResult[] = [];\n\n for (const target of targets) {\n const removed: string[] = [];\n const missing: string[] = [];\n const removedLegacyAliases: string[] = [];\n const preservedLegacyAliases: PreservedLegacyAlias[] = [];\n\n try {\n for (const packName of packNames) {\n const targetPath = path.join(target.dir, packName);\n if (fs.existsSync(targetPath)) {\n fs.rmSync(targetPath, { recursive: true, force: true });\n removed.push(packName);\n } else {\n missing.push(packName);\n }\n }\n\n const legacyCleanup = cleanupLegacyAliases(target.dir);\n removedLegacyAliases.push(...legacyCleanup.removed);\n preservedLegacyAliases.push(...legacyCleanup.preserved);\n\n targetResults.push({\n agents: target.agents,\n targetDir: target.dir,\n removed,\n missing,\n removedLegacyAliases,\n preservedLegacyAliases,\n success: true\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n targetResults.push({\n agents: target.agents,\n targetDir: target.dir,\n removed,\n missing,\n removedLegacyAliases,\n preservedLegacyAliases,\n success: false,\n error: message\n });\n }\n }\n\n const result: SkillRemovalResult = {\n success: targetResults.every((entry) => entry.success),\n message: \"\",\n mode,\n targets: targetResults,\n removed: targetResults.flatMap((entry) => entry.removed),\n missing: targetResults.flatMap((entry) => entry.missing),\n removedLegacyAliases: targetResults.flatMap((entry) => entry.removedLegacyAliases),\n preservedLegacyAliases: targetResults.flatMap((entry) => entry.preservedLegacyAliases)\n };\n result.message = buildRemovalMessage(mode, result);\n return result;\n}\n\nexport function hasBundledSkillArtifacts(mode: SkillInstallMode): boolean {\n const packNames = getCanonicalBundledSkillNames();\n const targets = getTargets(mode);\n\n return targets.some((target) => hasCanonicalBundledSkillInTarget(target.dir, packNames));\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nexport { getBundledSkillsDir } from \"../../utils/package-assets\";\n\nconst SKILL_DIR_NAME = \"skill\";\nconst SKILLS_DIR_NAME = \"skills\";\n\nexport type SkillTargetAgent = \"opencode\" | \"codex\" | \"claudecode\" | \"ampcli\";\n\nexport interface SkillTarget {\n agents: SkillTargetAgent[];\n dir: string;\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\nfunction getCodexHomeDir(): string {\n return process.env.CODEX_HOME\n || path.join(os.homedir(), \".codex\");\n}\n\nfunction getClaudeCodeHomeDir(): string {\n return process.env.CLAUDECODE_HOME\n || path.join(os.homedir(), \".claude\");\n}\n\nfunction getAmpHomeDir(): string {\n return process.env.AMP_CLI_HOME\n || path.join(os.homedir(), \".amp\");\n}\n\nfunction dedupeTargets(targets: Array<{ agent: SkillTargetAgent; dir: string }>): SkillTarget[] {\n const deduped = new Map<string, SkillTarget>();\n\n for (const target of targets) {\n const key = path.resolve(target.dir);\n const existing = deduped.get(key);\n if (existing) {\n if (!existing.agents.includes(target.agent)) {\n existing.agents.push(target.agent);\n }\n continue;\n }\n deduped.set(key, { agents: [target.agent], dir: target.dir });\n }\n\n return Array.from(deduped.values());\n}\n\nexport function getGlobalSkillTargets(): SkillTarget[] {\n const claudeSkillsDir = path.join(getClaudeCodeHomeDir(), SKILLS_DIR_NAME);\n const ampSkillsDir = path.join(getAmpHomeDir(), SKILLS_DIR_NAME);\n\n return dedupeTargets([\n { agent: \"opencode\", dir: getGlobalSkillDir() },\n { agent: \"codex\", dir: path.join(getCodexHomeDir(), SKILLS_DIR_NAME) },\n { agent: \"claudecode\", dir: claudeSkillsDir },\n { agent: \"ampcli\", dir: ampSkillsDir }\n ]);\n}\n\nexport function getLocalSkillTargets(): SkillTarget[] {\n const localClaudeSkillsDir = path.join(process.cwd(), \".claude\", SKILLS_DIR_NAME);\n const localAmpSkillsDir = path.join(process.cwd(), \".amp\", SKILLS_DIR_NAME);\n\n return dedupeTargets([\n { agent: \"opencode\", dir: getLocalSkillDir() },\n { agent: \"codex\", dir: path.join(process.cwd(), \".codex\", SKILLS_DIR_NAME) },\n { agent: \"claudecode\", dir: localClaudeSkillsDir },\n { agent: \"ampcli\", dir: localAmpSkillsDir }\n ]);\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 { spawnSync } from \"node:child_process\";\nimport type { ParsedArgs } from \"../args\";\nimport {\n getCurrentDaemonFingerprint,\n readDaemonMetadata,\n startDaemon\n} 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\";\nimport type { DaemonStatusPayload } from \"../daemon-status\";\nimport { fetchDaemonStatus } from \"../daemon-status\";\n\ntype ServeArgs = {\n port?: number;\n token?: string;\n stop: boolean;\n};\n\ntype DaemonHandle = {\n stop: () => Promise<void>;\n};\n\ntype ServeProcessSnapshot = {\n pid: number;\n uid: number | null;\n command: string;\n};\n\nlet daemonHandle: DaemonHandle | null = null;\nconst PS_MAX_BUFFER = 8 * 1024 * 1024;\nconst SERVE_COMMAND_PATTERN = /(?:^|\\s)(?:\\S*[\\\\/])?(?:opendevbrowser|dist[\\\\/]+cli[\\\\/]+index\\.js)(?=\\s|$).*?\\bserve\\b/;\nconst SERVE_STOP_PATTERN = /(?:^|\\s)--stop(?:\\s|$)/;\nconst CURRENT_UID = typeof process.getuid === \"function\" ? process.getuid() : null;\nconst CURRENT_EXECUTABLE = process.execPath;\n\nfunction resolveTokenCandidates(\n requestedToken: string | undefined,\n metadataToken: string | undefined,\n configToken: string | undefined\n): string[] {\n return Array.from(new Set([requestedToken, metadataToken, configToken].filter((token): token is string => (\n typeof token === \"string\" && token.trim().length > 0\n ))));\n}\n\nasync function resolveExistingDaemon(\n port: number,\n tokens: string[]\n): Promise<{ token: string; status: DaemonStatusPayload } | null> {\n for (const token of tokens) {\n const status = await fetchDaemonStatus(port, token);\n if (status?.ok) {\n return { token, status };\n }\n }\n return null;\n}\n\nfunction isPositivePid(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value > 0;\n}\n\nfunction rememberStalePid(staleDaemonPids: Set<number>, pid: unknown): void {\n if (isPositivePid(pid)) {\n staleDaemonPids.add(pid);\n }\n}\n\nasync function stopDaemonOnPort(port: number, token: string): Promise<boolean> {\n try {\n const response = await fetchWithTimeout(`http://127.0.0.1:${port}/stop`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${token}` }\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n\nasync function stopStaleDaemon(\n port: number,\n daemon: { token: string; status: DaemonStatusPayload },\n staleDaemonPids: Set<number>\n): Promise<void> {\n rememberStalePid(staleDaemonPids, daemon.status.pid);\n const stopped = await stopDaemonOnPort(port, daemon.token);\n if (!stopped && isPositivePid(daemon.status.pid)) {\n terminateProcess(daemon.status.pid);\n }\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 = 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\nfunction parseServeProcessSnapshot(line: string): ServeProcessSnapshot | null {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n return null;\n }\n const match = trimmed.match(/^(\\d+)(?:\\s+(\\d+))?\\s+(.*)$/);\n if (!match) {\n return null;\n }\n const pid = Number.parseInt(match[1] ?? \"\", 10);\n if (!Number.isInteger(pid) || pid <= 0) {\n return null;\n }\n const rawUid = match[2];\n const parsedUid = typeof rawUid === \"string\" && rawUid.length > 0\n ? Number.parseInt(rawUid, 10)\n : null;\n const command = (match[3] ?? \"\").trim();\n if (command.length === 0) {\n return null;\n }\n return {\n pid,\n uid: typeof parsedUid === \"number\" && Number.isInteger(parsedUid) && parsedUid >= 0 ? parsedUid : null,\n command\n };\n}\n\nfunction listServeProcessSnapshots(): ServeProcessSnapshot[] {\n const result = spawnSync(\"ps\", [\"-axww\", \"-o\", \"pid=,uid=,command=\"], {\n encoding: \"utf-8\",\n maxBuffer: PS_MAX_BUFFER\n });\n if ((result.status ?? 1) !== 0) {\n return [];\n }\n return String(result.stdout ?? \"\")\n .split(\"\\n\")\n .map((line) => parseServeProcessSnapshot(line))\n .filter((snapshot): snapshot is ServeProcessSnapshot => snapshot !== null);\n}\n\nfunction isCurrentExecutableServeProcess(snapshot: ServeProcessSnapshot): boolean {\n if (CURRENT_UID === null || snapshot.uid === null || snapshot.uid !== CURRENT_UID) {\n return false;\n }\n if (!snapshot.command.includes(CURRENT_EXECUTABLE)) {\n return false;\n }\n if (!SERVE_COMMAND_PATTERN.test(snapshot.command)) {\n return false;\n }\n return !SERVE_STOP_PATTERN.test(snapshot.command);\n}\n\nfunction terminateProcess(pid: number): boolean {\n if (!Number.isInteger(pid) || pid <= 0 || pid === process.pid || pid === process.ppid) {\n return false;\n }\n try {\n process.kill(pid, \"SIGTERM\");\n } catch {\n return false;\n }\n try {\n process.kill(pid, \"SIGKILL\");\n } catch {\n // process may have exited after SIGTERM\n }\n return true;\n}\n\nfunction cleanupCompetingServeProcesses(keepPid?: number): number[] {\n const candidates = listServeProcessSnapshots().filter((snapshot) => {\n if (!isCurrentExecutableServeProcess(snapshot)) {\n return false;\n }\n if (snapshot.pid === process.pid || snapshot.pid === process.ppid) {\n return false;\n }\n if (Number.isInteger(keepPid) && snapshot.pid === keepPid) {\n return false;\n }\n return true;\n });\n if (candidates.length === 0) {\n return [];\n }\n\n const clearedPids: number[] = [];\n for (const snapshot of candidates) {\n if (terminateProcess(snapshot.pid)) {\n clearedPids.push(snapshot.pid);\n }\n }\n\n return clearedPids;\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 const requestedPort = serveArgs.port ?? config.daemonPort;\n const metadata = readDaemonMetadata();\n const metadataToken = metadata?.port === requestedPort ? metadata.token : undefined;\n const tokenCandidates = resolveTokenCandidates(serveArgs.token, metadataToken, config.daemonToken);\n const currentFingerprint = getCurrentDaemonFingerprint();\n\n const existingDaemon = await resolveExistingDaemon(requestedPort, tokenCandidates);\n const staleDaemonPids = new Set(cleanupCompetingServeProcesses(existingDaemon?.status.pid));\n const staleCleared = () => staleDaemonPids.size;\n let replacedStaleFingerprint = false;\n\n if (existingDaemon) {\n const fingerprintMatches = existingDaemon.status.fingerprint === currentFingerprint;\n if (fingerprintMatches) {\n const relayPort = existingDaemon.status.relay.port ?? config.relayPort;\n const clearedCount = staleCleared();\n const staleNote = clearedCount > 0 ? `\\nCleared ${clearedCount} stale daemon process${clearedCount === 1 ? \"\" : \"es\"}.` : \"\";\n return {\n success: true,\n message: `Daemon already running on 127.0.0.1:${requestedPort} (pid=${existingDaemon.status.pid}, relay ${relayPort}).${staleNote}`,\n data: {\n port: requestedPort,\n pid: existingDaemon.status.pid,\n relayPort,\n alreadyRunning: true,\n staleDaemonsCleared: clearedCount,\n relay: existingDaemon.status.relay\n },\n exitCode: null\n };\n }\n await stopStaleDaemon(requestedPort, existingDaemon, staleDaemonPids);\n replacedStaleFingerprint = true;\n }\n\n let nativeStatus = getNativeStatusSnapshot();\n let nativeMessage: string | null = null;\n if (!nativeStatus.installed || nativeStatus.mismatch) {\n const discovered = discoverExtensionId();\n const extensionId = nativeStatus.expectedExtensionId ?? config.nativeExtensionId ?? discovered.extensionId ?? null;\n const usedDiscovery = nativeStatus.expectedExtensionSource !== \"config\" && Boolean(extensionId);\n const previousExtensionId = nativeStatus.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 = nativeStatus.mismatch && previousExtensionId\n ? `Native host reinstalled for extension ${extensionId} (replacing stale ${previousExtensionId}).${suffix}`\n : `${installResult.message ?? \"Native host installed.\"}${suffix}`;\n nativeStatus = getNativeStatusSnapshot();\n } else {\n nativeMessage = nativeStatus.mismatch\n ? `Native host reinstall skipped: ${installResult.message ?? \"unknown error\"}`\n : `Native host install skipped: ${installResult.message ?? \"unknown error\"}`;\n }\n } else if (nativeStatus.mismatch && previousExtensionId) {\n nativeMessage = `Native host targets stale extension ${previousExtensionId}, but no current extension id could be resolved for reinstall.`;\n } else {\n nativeMessage = \"Native host not installed. Set nativeExtensionId in opendevbrowser.jsonc to auto-install.\";\n }\n }\n\n let handle: Awaited<ReturnType<typeof startDaemon>> | null = null;\n let startError: unknown = null;\n for (let attempt = 0; attempt < 2; attempt += 1) {\n try {\n handle = await startDaemon({\n port: serveArgs.port,\n token: serveArgs.token,\n config\n });\n startError = null;\n break;\n } catch (error) {\n startError = error;\n const message = error instanceof Error ? error.message : String(error);\n if (!message.includes(\"EADDRINUSE\") && !message.includes(\"in use\")) {\n break;\n }\n const runningDaemon = await resolveExistingDaemon(requestedPort, tokenCandidates);\n if (runningDaemon) {\n const fingerprintMatches = runningDaemon.status.fingerprint === currentFingerprint;\n if (fingerprintMatches) {\n const relayPort = runningDaemon.status.relay.port ?? config.relayPort;\n const clearedCount = staleCleared();\n const staleNote = clearedCount > 0 ? `\\nCleared ${clearedCount} stale daemon process${clearedCount === 1 ? \"\" : \"es\"}.` : \"\";\n return {\n success: true,\n message: `Daemon already running on 127.0.0.1:${requestedPort} (pid=${runningDaemon.status.pid}, relay ${relayPort}).${staleNote}`,\n data: {\n port: requestedPort,\n pid: runningDaemon.status.pid,\n relayPort,\n alreadyRunning: true,\n staleDaemonsCleared: clearedCount,\n relay: runningDaemon.status.relay\n },\n exitCode: null\n };\n }\n await stopStaleDaemon(requestedPort, runningDaemon, staleDaemonPids);\n replacedStaleFingerprint = true;\n if (attempt === 0) {\n continue;\n }\n }\n if (attempt === 0) {\n let clearedNewPid = false;\n for (const pid of cleanupCompetingServeProcesses()) {\n const previousSize = staleDaemonPids.size;\n staleDaemonPids.add(pid);\n if (staleDaemonPids.size > previousSize) {\n clearedNewPid = true;\n }\n }\n if (clearedNewPid) {\n continue;\n }\n }\n break;\n }\n }\n\n if (!handle) {\n const message = startError instanceof Error ? startError.message : String(startError);\n if (message.includes(\"EADDRINUSE\") || message.includes(\"in use\")) {\n return {\n success: false,\n message: `Daemon port ${requestedPort} is already in use by another process. If this is an existing daemon, run \\`opendevbrowser status --daemon\\` or \\`opendevbrowser serve --stop\\`.`,\n exitCode: EXIT_EXECUTION\n };\n }\n return {\n success: false,\n message: `Failed to start daemon: ${message}`,\n exitCode: EXIT_EXECUTION\n };\n }\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 clearedCount = staleCleared();\n const staleNote = clearedCount > 0 ? `\\nCleared ${clearedCount} stale daemon process${clearedCount === 1 ? \"\" : \"es\"}.` : \"\";\n const fingerprintNote = replacedStaleFingerprint ? \"\\nReplaced stale daemon fingerprint.\" : \"\";\n const message = nativeMessage\n ? `${baseMessage}\\n${nativeMessage}${fingerprintNote}${staleNote}`\n : `${baseMessage}${fingerprintNote}${staleNote}`;\n\n return {\n success: true,\n message,\n data: { port: state.port, pid: state.pid, relayPort: state.relayPort, native: nativeStatus, staleDaemonsCleared: clearedCount },\n exitCode: null\n };\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\nexport function parseBooleanFlag(value: string, flag: string): boolean {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\") {\n return false;\n }\n throw createUsageError(`Invalid ${flag}: ${value}`);\n}\n\nexport function parseOptionalStringFlag(rawArgs: string[], flag: string): string | undefined {\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === flag) {\n const value = rawArgs[i + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n }\n if (arg?.startsWith(`${flag}=`)) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n }\n }\n return undefined;\n}\n\nexport function parseStringArrayFlag(rawArgs: string[], flag: string): string[] | undefined {\n const value = parseOptionalStringFlag(rawArgs, flag);\n if (typeof value !== \"string\") {\n return undefined;\n }\n const items = value.split(\",\").map((item) => item.trim()).filter((item) => item.length > 0);\n if (items.length === 0) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return items;\n}\n\nexport function parseRepeatedStringFlag(rawArgs: string[], flag: string): string[] | undefined {\n const values: string[] = [];\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n if (arg === flag) {\n const value = rawArgs[index + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n values.push(value);\n index += 1;\n continue;\n }\n if (arg?.startsWith(`${flag}=`)) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n values.push(value);\n }\n }\n return values.length > 0 ? values : undefined;\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { execFileSync } from \"child_process\";\nimport { fileURLToPath } from \"url\";\nimport type { ParsedArgs } from \"../args\";\nimport { loadGlobalConfig } from \"../../config\";\nimport { createUsageError, EXIT_DISCONNECTED, EXIT_EXECUTION } from \"../errors\";\nimport { getExtensionPath } from \"../../extension-extractor\";\nimport {\n getChromeUserDataRoots,\n getProfileDirs,\n readProfilePreferences\n} from \"../../cache/chrome-user-data\";\n\ntype NativeSubcommand = \"install\" | \"uninstall\" | \"status\";\n\nexport type NativeStatus = {\n installed: boolean;\n manifestPath: string | null;\n wrapperPath: string | null;\n hostScriptPath: string;\n extensionId: string | null;\n registryPath: string | null;\n discoveredExtensionId: string | null;\n discoveredMatchedBy: ExtensionIdMatchReason | null;\n expectedExtensionId: string | null;\n expectedExtensionSource: \"config\" | ExtensionIdMatchReason | null;\n mismatch: boolean;\n};\n\ntype NativeStatusAssessment = {\n success: boolean;\n message: string;\n summary: string;\n exitCode: number | 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 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 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 = { id: match.id, matchedBy: \"name\" };\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\nconst resolveExpectedExtension = (): {\n discoveredExtensionId: string | null;\n discoveredMatchedBy: ExtensionIdMatchReason | null;\n expectedExtensionId: string | null;\n expectedExtensionSource: \"config\" | ExtensionIdMatchReason | null;\n} => {\n let configuredExtensionId: string | null = null;\n try {\n configuredExtensionId = normalizeExtensionId(loadGlobalConfig().nativeExtensionId);\n } catch {\n configuredExtensionId = null;\n }\n\n const discovered = discoverExtensionId();\n const discoveredExtensionId = discovered.extensionId ?? null;\n const discoveredMatchedBy = discovered.matchedBy ?? null;\n if (discoveredExtensionId) {\n return {\n discoveredExtensionId,\n discoveredMatchedBy,\n expectedExtensionId: discoveredExtensionId,\n expectedExtensionSource: discoveredMatchedBy\n };\n }\n if (configuredExtensionId) {\n return {\n discoveredExtensionId,\n discoveredMatchedBy,\n expectedExtensionId: configuredExtensionId,\n expectedExtensionSource: \"config\"\n };\n }\n return {\n discoveredExtensionId,\n discoveredMatchedBy,\n expectedExtensionId: null,\n expectedExtensionSource: null\n };\n};\n\nexport const getNativeStatusSnapshot = (): NativeStatus => {\n const expectation = resolveExpectedExtension();\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 const mismatch = Boolean(\n installed\n && extensionIdValue\n && expectation.expectedExtensionId\n && extensionIdValue !== expectation.expectedExtensionId\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 discoveredExtensionId: expectation.discoveredExtensionId,\n discoveredMatchedBy: expectation.discoveredMatchedBy,\n expectedExtensionId: expectation.expectedExtensionId,\n expectedExtensionSource: expectation.expectedExtensionSource,\n mismatch\n };\n};\n\nexport function assessNativeStatus(data: NativeStatus): NativeStatusAssessment {\n if (!data.installed) {\n return {\n success: false,\n message: \"Native host not installed.\",\n summary: \"not installed\",\n exitCode: EXIT_DISCONNECTED\n };\n }\n\n if (data.mismatch && data.extensionId && data.expectedExtensionId) {\n return {\n success: false,\n message: `Native host targets ${data.extensionId}, but the current extension is ${data.expectedExtensionId}. Reinstall with \\`opendevbrowser native install ${data.expectedExtensionId}\\` or rerun \\`opendevbrowser serve\\`.`,\n summary: `mismatch (${data.extensionId} != ${data.expectedExtensionId})`,\n exitCode: EXIT_DISCONNECTED\n };\n }\n\n return {\n success: true,\n message: data.extensionId\n ? `Native host installed for extension ${data.extensionId}.`\n : \"Native host installed (extension id missing).\",\n summary: `installed${data.extensionId ? ` (${data.extensionId})` : \"\"}`,\n exitCode: null\n };\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 const assessment = assessNativeStatus(data);\n return {\n success: assessment.success,\n message: assessment.message,\n data,\n exitCode: assessment.exitCode\n };\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 resolveExpectedExtension,\n assessNativeStatus\n};\n","import { execFileSync } from \"child_process\";\nimport { existsSync, mkdirSync, unlinkSync, writeFileSync } from \"fs\";\nimport { homedir, tmpdir } from \"os\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"path\";\nimport { fileURLToPath } from \"url\";\n\nconst MAC_LABEL = \"com.opendevbrowser.daemon\";\nconst WIN_TASK_NAME = \"OpenDevBrowser Daemon\";\nexport const STABLE_DAEMON_INSTALL_GUIDANCE =\n \"Run opendevbrowser daemon install from a stable install location (for example, a global npm install or a persistent local package install).\";\n\nexport type CliEntrypoint = {\n nodePath: string;\n cliPath: string;\n args: string[];\n command: string;\n source: \"argv1\" | \"module\";\n isTransient: boolean;\n};\n\nexport type AutostartHealth = \"unsupported\" | \"missing\" | \"healthy\" | \"needs_repair\" | \"malformed\";\n\nexport type AutostartReason =\n | \"missing_plist\"\n | \"missing_program_arguments\"\n | \"malformed_plist\"\n | \"missing_node_path\"\n | \"missing_cli_path\"\n | \"transient_cli_path\"\n | \"entrypoint_mismatch\"\n | \"unsupported_platform\";\n\nexport type AutostartStatus = {\n platform: NodeJS.Platform;\n supported: boolean;\n installed: boolean;\n health: AutostartHealth;\n needsRepair: boolean;\n location?: string;\n taskName?: string;\n command?: string;\n expectedCommand?: string;\n label?: string;\n reason?: AutostartReason;\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 transientEntrypointRoots?: string[];\n};\n\ntype ResolvedAutostartDeps = Required<Omit<AutostartDeps, \"transientEntrypointRoots\">>\n & Pick<AutostartDeps, \"transientEntrypointRoots\">;\n\ntype MacLaunchAgentParseResult =\n | { ok: true; command: string; programArguments: string[] }\n | { ok: false; reason: \"missing_program_arguments\" | \"malformed_plist\" };\n\ntype WindowsTaskActionParseResult =\n | { ok: true; command: string; programArguments: string[] }\n | { ok: false };\n\nconst defaultDeps = (): ResolvedAutostartDeps => ({\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 transientEntrypointRoots: undefined\n});\n\nconst NPX_CACHE_SEGMENT_PATTERN = /[\\\\/]_npx(?:[\\\\/]|$)/;\n\nconst formatCommand = (programArguments: string[]): string => {\n return programArguments.map((value) => `\"${value}\"`).join(\" \");\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\nconst normalizeComparisonPath = (value: string, platform: NodeJS.Platform): string => {\n const resolvedPath = resolve(value);\n return platform === \"win32\" ? resolvedPath.toLowerCase() : resolvedPath;\n};\n\nconst isPathInsideRoot = (candidate: string, root: string, platform: NodeJS.Platform): boolean => {\n const normalizedCandidate = normalizeComparisonPath(candidate, platform);\n const normalizedRoot = normalizeComparisonPath(root, platform);\n const relation = relative(normalizedRoot, normalizedCandidate);\n return relation === \"\" || (!relation.startsWith(\"..\") && !isAbsolute(relation));\n};\n\nconst getTransientEntrypointRoots = (deps: ResolvedAutostartDeps): string[] => {\n const configuredRoots = deps.transientEntrypointRoots;\n if (configuredRoots && configuredRoots.length > 0) {\n return [...new Set(configuredRoots.map((root) => normalizeComparisonPath(root, deps.platform)))];\n }\n\n const roots = [tmpdir()];\n if (deps.platform === \"darwin\") {\n roots.push(\"/tmp\", \"/private/tmp\");\n }\n return [...new Set(roots.map((root) => normalizeComparisonPath(root, deps.platform)))];\n};\n\nconst isTransientCliPath = (cliPath: string, deps: ResolvedAutostartDeps): boolean => {\n const normalizedCliPath = normalizeComparisonPath(cliPath, deps.platform);\n return getTransientEntrypointRoots(deps).some((root) => isPathInsideRoot(cliPath, root, deps.platform))\n || NPX_CACHE_SEGMENT_PATTERN.test(normalizedCliPath);\n};\n\nconst TRANSIENT_AUTOSTART_INSTALL_ERROR_PREFIX = \"Cannot install daemon autostart from transient CLI path\";\n\nexport const isTransientAutostartInstallError = (error: unknown): boolean => {\n const message = error instanceof Error ? error.message : String(error);\n return message.startsWith(TRANSIENT_AUTOSTART_INSTALL_ERROR_PREFIX);\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 let source: CliEntrypoint[\"source\"] = \"module\";\n\n if (resolved.argv1) {\n const candidate = resolve(resolved.argv1);\n if (exists(candidate)) {\n cliPath = candidate;\n source = \"argv1\";\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 = formatCommand([nodePath, ...args]);\n const isTransient = isTransientCliPath(cliPath, resolved);\n\n return { nodePath, cliPath, args, command, source, isTransient };\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 = formatCommand([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 createAutostartStatus = (status: AutostartStatus): AutostartStatus => status;\n\nconst createMacAutostartStatus = (\n entrypoint: CliEntrypoint,\n location: string,\n overrides: Partial<AutostartStatus>\n): AutostartStatus => {\n return createAutostartStatus({\n platform: \"darwin\",\n supported: true,\n installed: false,\n health: \"missing\",\n needsRepair: false,\n location,\n label: MAC_LABEL,\n expectedCommand: entrypoint.isTransient ? undefined : entrypoint.command,\n ...overrides\n });\n};\n\nconst createWindowsAutostartStatus = (\n entrypoint: CliEntrypoint,\n overrides: Partial<AutostartStatus>\n): AutostartStatus => {\n return createAutostartStatus({\n platform: \"win32\",\n supported: true,\n installed: false,\n health: \"missing\",\n needsRepair: false,\n taskName: WIN_TASK_NAME,\n expectedCommand: entrypoint.isTransient ? undefined : entrypoint.command,\n ...overrides\n });\n};\n\nconst classifyPersistedProgramArguments = (\n programArguments: string[],\n deps: ResolvedAutostartDeps\n): { health: \"healthy\" | \"needs_repair\"; reason?: AutostartReason } => {\n const actualNodePath = programArguments[0];\n const actualCliPath = programArguments[1];\n\n if (!actualNodePath || !deps.existsSync(actualNodePath)) {\n return { health: \"needs_repair\", reason: \"missing_node_path\" };\n }\n\n if (!actualCliPath || !deps.existsSync(actualCliPath)) {\n return { health: \"needs_repair\", reason: \"missing_cli_path\" };\n }\n\n if (isTransientCliPath(actualCliPath, deps)) {\n return { health: \"needs_repair\", reason: \"transient_cli_path\" };\n }\n\n if (programArguments.length !== 3 || programArguments[2] !== \"serve\") {\n return { health: \"needs_repair\", reason: \"entrypoint_mismatch\" };\n }\n\n return { health: \"healthy\" };\n};\n\nconst hasMatchingProgramArgument = (\n programArguments: string[],\n expectedValue: string,\n deps: ResolvedAutostartDeps,\n isPath = false\n): boolean => {\n const normalizedExpected = isPath ? normalizeComparisonPath(expectedValue, deps.platform) : expectedValue;\n return programArguments.some((value) => {\n const normalizedValue = isPath ? normalizeComparisonPath(value, deps.platform) : value;\n return normalizedValue === normalizedExpected;\n });\n};\n\nconst classifyExpectedProgramArguments = (\n expectedArgs: string[],\n actualArgs: string[],\n deps: ResolvedAutostartDeps\n): AutostartReason | undefined => {\n if (!hasMatchingProgramArgument([actualArgs[0] ?? \"\"], expectedArgs[0] ?? \"\", deps, true)) {\n return hasMatchingProgramArgument(actualArgs, expectedArgs[0] ?? \"\", deps, true)\n ? \"entrypoint_mismatch\"\n : \"missing_node_path\";\n }\n\n if (!hasMatchingProgramArgument([actualArgs[1] ?? \"\"], expectedArgs[1] ?? \"\", deps, true)) {\n return hasMatchingProgramArgument(actualArgs, expectedArgs[1] ?? \"\", deps, true)\n ? \"entrypoint_mismatch\"\n : \"missing_cli_path\";\n }\n\n if (\n actualArgs.length !== expectedArgs.length\n || !actualArgs.every((value, index) => {\n const expectedValue = expectedArgs[index] ?? \"\";\n return index < 2\n ? normalizeComparisonPath(value, deps.platform) === normalizeComparisonPath(expectedValue, deps.platform)\n : value === expectedValue;\n })\n ) {\n return \"entrypoint_mismatch\";\n }\n\n return undefined;\n};\n\nconst readMacLaunchAgentProgramArguments = (\n plistPath: string,\n deps: ResolvedAutostartDeps\n): MacLaunchAgentParseResult => {\n try {\n const text = deps.execFileSync(\"plutil\", [\"-convert\", \"json\", \"-o\", \"-\", plistPath], { encoding: \"utf-8\" }) as string;\n const parsed = JSON.parse(text) as { ProgramArguments?: unknown };\n const programArguments = parsed?.ProgramArguments;\n if (\n !Array.isArray(programArguments)\n || programArguments.length < 2\n || programArguments.some((value) => typeof value !== \"string\")\n ) {\n return { ok: false, reason: \"missing_program_arguments\" };\n }\n const commandArgs = programArguments as string[];\n return {\n ok: true,\n command: formatCommand(commandArgs),\n programArguments: commandArgs\n };\n } catch {\n return { ok: false, reason: \"malformed_plist\" };\n }\n};\n\nconst classifyMacAutostartStatus = (\n entrypoint: CliEntrypoint,\n location: string,\n deps: ResolvedAutostartDeps\n): AutostartStatus => {\n if (!deps.existsSync(location)) {\n return createMacAutostartStatus(entrypoint, location, {\n installed: false,\n health: \"missing\",\n needsRepair: false,\n reason: \"missing_plist\"\n });\n }\n\n const parsed = readMacLaunchAgentProgramArguments(location, deps);\n if (!parsed.ok) {\n return createMacAutostartStatus(entrypoint, location, {\n installed: true,\n health: \"malformed\",\n needsRepair: true,\n reason: parsed.reason\n });\n }\n\n const expectedNodePath = entrypoint.nodePath;\n const expectedCliPath = entrypoint.cliPath;\n const expectedArgs = [expectedNodePath, ...entrypoint.args];\n const actualArgs = parsed.programArguments;\n const actualStatus = classifyPersistedProgramArguments(actualArgs, deps);\n\n if (actualStatus.health !== \"healthy\") {\n return createMacAutostartStatus(entrypoint, location, {\n installed: true,\n health: \"needs_repair\",\n needsRepair: true,\n command: parsed.command,\n reason: actualStatus.reason\n });\n }\n\n if (entrypoint.isTransient) {\n return createMacAutostartStatus(entrypoint, location, {\n installed: true,\n health: \"healthy\",\n needsRepair: false,\n command: parsed.command\n });\n }\n\n const mismatchReason = classifyExpectedProgramArguments(expectedArgs, actualArgs, deps);\n if (mismatchReason) {\n return createMacAutostartStatus(entrypoint, location, {\n installed: true,\n health: \"needs_repair\",\n needsRepair: true,\n command: parsed.command,\n reason: mismatchReason\n });\n }\n\n return createMacAutostartStatus(entrypoint, location, {\n installed: true,\n health: \"healthy\",\n needsRepair: false,\n command: parsed.command\n });\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 assertPersistentEntrypoint = (entrypoint: CliEntrypoint): void => {\n if (!entrypoint.isTransient) {\n return;\n }\n\n throw new Error(\n `${TRANSIENT_AUTOSTART_INSTALL_ERROR_PREFIX} \"${entrypoint.cliPath}\". `\n + `${STABLE_DAEMON_INSTALL_GUIDANCE} Do not use a temporary npx cache or onboarding workspace.`\n );\n};\n\nconst installMacAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n const entrypoint = resolveCliEntrypoint(resolved);\n assertPersistentEntrypoint(entrypoint);\n const home = resolved.homedir();\n const plistPath = getLaunchAgentPath(home);\n const stdoutPath = join(home, \"Library\", \"Logs\", \"opendevbrowser-daemon.log\");\n const stderrPath = join(home, \"Library\", \"Logs\", \"opendevbrowser-daemon.err.log\");\n const logsDir = dirname(stdoutPath);\n resolved.mkdirSync(dirname(plistPath), { recursive: true });\n resolved.mkdirSync(logsDir, { recursive: true });\n resolved.writeFileSync(\n plistPath,\n buildLaunchAgentPlist(entrypoint, { stdoutPath, stderrPath }),\n { encoding: \"utf-8\" }\n );\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 createMacAutostartStatus(entrypoint, plistPath, {\n installed: true,\n health: \"healthy\",\n needsRepair: false,\n command: entrypoint.command\n });\n};\n\nconst uninstallMacAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n const entrypoint = resolveCliEntrypoint(resolved);\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 createMacAutostartStatus(entrypoint, plistPath, {\n installed: false,\n health: \"missing\",\n needsRepair: false,\n reason: \"missing_plist\"\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 decodeXmlText = (value: string): string => {\n return value\n .replace(/&quot;/g, \"\\\"\")\n .replace(/&apos;/g, \"'\")\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&amp;/g, \"&\");\n};\n\nconst readXmlTag = (xml: string, tagName: string): string | undefined => {\n const match = xml.match(new RegExp(`<${tagName}>([\\\\s\\\\S]*?)</${tagName}>`, \"i\"));\n return match?.[1] ? decodeXmlText(match[1]) : undefined;\n};\n\nconst splitCommandLine = (value: string): string[] => {\n const args: string[] = [];\n let current = \"\";\n let inQuotes = false;\n let backslashes = 0;\n\n for (const char of value) {\n if (char === \"\\\\\") {\n backslashes += 1;\n continue;\n }\n\n if (char === \"\\\"\") {\n if (backslashes > 0) {\n current += \"\\\\\".repeat(Math.floor(backslashes / 2));\n if (backslashes % 2 === 1) {\n current += \"\\\"\";\n backslashes = 0;\n continue;\n }\n }\n backslashes = 0;\n inQuotes = !inQuotes;\n continue;\n }\n\n if (backslashes > 0) {\n current += \"\\\\\".repeat(backslashes);\n backslashes = 0;\n }\n\n if (!inQuotes && /\\s/.test(char)) {\n if (current.length > 0) {\n args.push(current);\n current = \"\";\n }\n continue;\n }\n\n current += char;\n }\n\n if (backslashes > 0) {\n current += \"\\\\\".repeat(backslashes);\n }\n\n if (current.length > 0) {\n args.push(current);\n }\n\n return args;\n};\n\nconst readWindowsTaskAction = (\n taskName: string,\n deps: ResolvedAutostartDeps\n): WindowsTaskActionParseResult => {\n try {\n const xml = deps.execFileSync(\"schtasks\", [\"/Query\", \"/TN\", taskName, \"/XML\"], { encoding: \"utf-8\" }) as string;\n const command = readXmlTag(xml, \"Command\");\n const argumentsValue = readXmlTag(xml, \"Arguments\");\n\n if (!command) {\n return { ok: false };\n }\n\n const programArguments = argumentsValue !== undefined\n ? [command, ...splitCommandLine(argumentsValue)]\n : splitCommandLine(command);\n\n if (programArguments.length === 0) {\n return { ok: false };\n }\n\n return {\n ok: true,\n command: formatCommand(programArguments),\n programArguments\n };\n } catch {\n return { ok: false };\n }\n};\n\nconst classifyWindowsAutostartStatus = (\n entrypoint: CliEntrypoint,\n deps: ResolvedAutostartDeps\n): AutostartStatus => {\n const installed = isWindowsTaskInstalled(deps);\n if (!installed) {\n return createWindowsAutostartStatus(entrypoint, {\n installed: false,\n health: \"missing\",\n needsRepair: false\n });\n }\n\n const parsed = readWindowsTaskAction(WIN_TASK_NAME, deps);\n if (!parsed.ok) {\n return createWindowsAutostartStatus(entrypoint, {\n installed: true,\n health: \"needs_repair\",\n needsRepair: true,\n reason: \"entrypoint_mismatch\"\n });\n }\n\n const expectedArgs = [entrypoint.nodePath, ...entrypoint.args];\n const actualStatus = classifyPersistedProgramArguments(parsed.programArguments, deps);\n\n if (actualStatus.health !== \"healthy\") {\n return createWindowsAutostartStatus(entrypoint, {\n installed: true,\n health: \"needs_repair\",\n needsRepair: true,\n command: parsed.command,\n reason: actualStatus.reason\n });\n }\n\n if (entrypoint.isTransient) {\n return createWindowsAutostartStatus(entrypoint, {\n installed: true,\n health: \"healthy\",\n needsRepair: false,\n command: parsed.command\n });\n }\n\n const mismatchReason = classifyExpectedProgramArguments(expectedArgs, parsed.programArguments, deps);\n if (mismatchReason) {\n return createWindowsAutostartStatus(entrypoint, {\n installed: true,\n health: \"needs_repair\",\n needsRepair: true,\n command: parsed.command,\n reason: mismatchReason\n });\n }\n\n return createWindowsAutostartStatus(entrypoint, {\n installed: true,\n health: \"healthy\",\n needsRepair: false,\n command: parsed.command\n });\n};\n\nconst installWindowsAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n const entrypoint = resolveCliEntrypoint(resolved);\n assertPersistentEntrypoint(entrypoint);\n const { args } = buildWindowsTaskArgs(entrypoint, WIN_TASK_NAME);\n runCommand(resolved.execFileSync, \"schtasks\", args);\n return createWindowsAutostartStatus(entrypoint, {\n installed: true,\n health: \"healthy\",\n needsRepair: false,\n command: entrypoint.command\n });\n};\n\nconst uninstallWindowsAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n const entrypoint = resolveCliEntrypoint(resolved);\n runCommand(resolved.execFileSync, \"schtasks\", [\"/Delete\", \"/TN\", WIN_TASK_NAME, \"/F\"], true);\n return createWindowsAutostartStatus(entrypoint, {\n installed: false,\n health: \"missing\",\n needsRepair: false\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 entrypoint = resolveCliEntrypoint(resolved);\n const location = getLaunchAgentPath(resolved.homedir());\n return classifyMacAutostartStatus(entrypoint, location, resolved);\n }\n\n if (platform === \"win32\") {\n const entrypoint = resolveCliEntrypoint(resolved);\n return classifyWindowsAutostartStatus(entrypoint, resolved);\n }\n\n return createAutostartStatus({\n platform,\n supported: false,\n installed: false,\n health: \"unsupported\",\n needsRepair: false,\n reason: \"unsupported_platform\"\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 createAutostartStatus({\n platform,\n supported: false,\n installed: false,\n health: \"unsupported\",\n needsRepair: false,\n reason: \"unsupported_platform\"\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 createAutostartStatus({\n platform,\n supported: false,\n installed: false,\n health: \"unsupported\",\n needsRepair: false,\n reason: \"unsupported_platform\"\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 {\n getAutostartStatus,\n installAutostart,\n isTransientAutostartInstallError,\n STABLE_DAEMON_INSTALL_GUIDANCE,\n uninstallAutostart\n} from \"../daemon-autostart\";\n\ntype DaemonSubcommand = \"install\" | \"uninstall\" | \"status\";\n\ntype DaemonResult = {\n installed: boolean;\n running: boolean;\n autostart?: ReturnType<typeof getAutostartStatus>;\n status?: Awaited<ReturnType<typeof fetchDaemonStatusFromMetadata>>;\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 formatReason = (reason?: ReturnType<typeof getAutostartStatus>[\"reason\"]): string => {\n return reason ? reason.replace(/_/g, \" \") : \"unknown reason\";\n};\n\nconst buildStableAutostartGuidance = (action: \"install\" | \"repair\"): string => {\n return `${STABLE_DAEMON_INSTALL_GUIDANCE.replace(/\\.$/, \"\")} to ${action} it.`;\n};\n\nconst describeAutostartLocation = (autostart: ReturnType<typeof getAutostartStatus>): string => {\n if (autostart.location) {\n return ` at ${autostart.location}`;\n }\n if (autostart.taskName) {\n return ` (${autostart.taskName})`;\n }\n return \"\";\n};\n\nconst buildStatusMessage = (autostart: ReturnType<typeof getAutostartStatus>, running: boolean): string => {\n const runningText = running ? \"running\" : \"not running\";\n\n if (!autostart.supported) {\n return `Daemon autostart is not supported on ${autostart.platform}. Daemon is ${runningText}.`;\n }\n\n const location = describeAutostartLocation(autostart);\n\n if (autostart.health === \"healthy\") {\n return `Autostart is installed and healthy${location}. Daemon is ${runningText}.`;\n }\n\n if (autostart.health === \"missing\") {\n return `Autostart is not installed${location}. ${buildStableAutostartGuidance(\"install\")} Daemon is ${runningText}.`;\n }\n\n if (autostart.health === \"needs_repair\") {\n return `Autostart is installed${location} but needs repair (${formatReason(autostart.reason)}). ${buildStableAutostartGuidance(\"repair\")} Daemon is ${runningText}.`;\n }\n\n if (autostart.health === \"malformed\") {\n return `Autostart exists${location} but is malformed (${formatReason(autostart.reason)}). ${buildStableAutostartGuidance(\"repair\")} Daemon is ${runningText}.`;\n }\n\n return `Daemon autostart is not supported on ${autostart.platform}. Daemon is ${runningText}.`;\n};\n\nexport async function runDaemonCommand(args: ParsedArgs) {\n const { subcommand } = parseDaemonArgs(args.rawArgs);\n\n if (subcommand === \"install\") {\n let result;\n try {\n result = installAutostart();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: isTransientAutostartInstallError(error)\n ? message\n : `Daemon autostart install failed: ${message}`,\n exitCode: EXIT_EXECUTION\n };\n }\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 { join, resolve } from \"path\";\nimport { tmpdir } from \"os\";\nimport type { ParsedArgs } from \"../args\";\nimport { createUsageError } from \"../errors\";\nimport { cleanupExpiredArtifacts } from \"../../providers/artifacts\";\n\ntype ArtifactsSubcommand = \"cleanup\";\n\ninterface CleanupArgs {\n subcommand: ArtifactsSubcommand;\n expiredOnly: boolean;\n outputDir?: string;\n}\n\nconst PASSTHROUGH_BOOLEAN_FLAGS = new Set([\n \"--with-config\",\n \"--no-prompt\",\n \"--no-interactive\",\n \"--quiet\",\n \"--skills-global\",\n \"--skills-local\",\n \"--no-skills\",\n \"--full\"\n]);\n\nconst PASSTHROUGH_VALUE_FLAGS = new Set([\n \"--output-format\",\n \"--transport\"\n]);\n\nconst usageError = (): never => {\n throw createUsageError(\"Usage: opendevbrowser artifacts cleanup --expired-only [--output-dir <path>]\");\n};\n\nconst requireValue = (rawArgs: string[], index: number, flag: string): string => {\n const value = rawArgs[index + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst consumePassthroughFlag = (rawArgs: string[], index: number): number | null => {\n const arg = rawArgs[index];\n if (!arg) {\n return null;\n }\n\n if (PASSTHROUGH_BOOLEAN_FLAGS.has(arg)) {\n return index;\n }\n\n if (PASSTHROUGH_VALUE_FLAGS.has(arg)) {\n requireValue(rawArgs, index, arg);\n return index + 1;\n }\n\n const equalsFlag = arg.split(\"=\", 2)[0];\n if (equalsFlag && PASSTHROUGH_VALUE_FLAGS.has(equalsFlag)) {\n return index;\n }\n\n return null;\n};\n\nconst parseArtifactsArgs = (rawArgs: string[]): CleanupArgs => {\n const [candidate, ...rest] = rawArgs;\n if (candidate !== \"cleanup\") {\n usageError();\n }\n const subcommand: ArtifactsSubcommand = \"cleanup\";\n\n let expiredOnly = false;\n let outputDir: string | undefined;\n\n for (let index = 0; index < rest.length; index += 1) {\n const arg = rest[index];\n if (arg === \"--expired-only\") {\n expiredOnly = true;\n continue;\n }\n\n if (arg === \"--output-dir\") {\n outputDir = requireValue(rest, index, \"--output-dir\");\n index += 1;\n continue;\n }\n\n if (arg?.startsWith(\"--output-dir=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) {\n throw createUsageError(\"Missing value for --output-dir\");\n }\n outputDir = value;\n continue;\n }\n\n const passthroughIndex = consumePassthroughFlag(rest, index);\n if (passthroughIndex !== null) {\n index = passthroughIndex;\n continue;\n }\n\n throw createUsageError(`Unknown artifacts flag: ${arg}`);\n }\n\n if (!expiredOnly) {\n usageError();\n }\n\n return {\n subcommand,\n expiredOnly,\n outputDir\n };\n};\n\nexport async function runArtifactsCommand(args: ParsedArgs) {\n const parsed = parseArtifactsArgs(args.rawArgs);\n const rootDir = parsed.outputDir ? resolve(parsed.outputDir) : join(tmpdir(), \"opendevbrowser\");\n const cleaned = await cleanupExpiredArtifacts(rootDir);\n\n return {\n success: true,\n message: `Artifact cleanup completed. Removed ${cleaned.removed.length} expired run(s).`,\n data: {\n rootDir,\n expiredOnly: parsed.expiredOnly,\n removed: cleaned.removed,\n skipped: cleaned.skipped,\n removedCount: cleaned.removed.length,\n skippedCount: cleaned.skipped.length\n }\n };\n}\n\nexport const __test__ = {\n parseArtifactsArgs\n};\n","import { getAutostartStatus, installAutostart } from \"./daemon-autostart\";\nimport type { AutostartInstallResult, AutostartStatus } from \"./daemon-autostart\";\n\nexport const INSTALL_AUTOSTART_SKIP_ENV_VAR = \"OPDEVBROWSER_SKIP_INSTALL_AUTOSTART_RECONCILIATION\";\n\nexport type InstallResultLike = {\n success: boolean;\n alreadyInstalled: boolean;\n};\n\nexport type AutostartAction =\n | \"unsupported\"\n | \"already_healthy\"\n | \"installed\"\n | \"repaired\"\n | \"repair_failed\";\n\nexport type InstallAutostartReconciliationResult = {\n attempted: boolean;\n autostart?: AutostartStatus;\n autostartAction?: AutostartAction;\n autostartError?: string;\n};\n\nexport type InstallAutostartReconciliationDeps = {\n getAutostartStatus?: () => AutostartStatus;\n installAutostart?: () => AutostartInstallResult;\n};\n\nexport type InstallAutostartReconciliationOptions = {\n env?: NodeJS.ProcessEnv;\n};\n\nconst defaultDeps = (): Required<InstallAutostartReconciliationDeps> => ({\n getAutostartStatus,\n installAutostart\n});\n\nexport function shouldSkipInstallAutostartReconciliation(env: NodeJS.ProcessEnv = process.env): boolean {\n const raw = env[INSTALL_AUTOSTART_SKIP_ENV_VAR];\n if (raw === undefined) {\n return false;\n }\n const normalized = raw.trim().toLowerCase();\n return normalized === \"1\" || normalized === \"true\" || normalized === \"yes\";\n}\n\nexport function reconcileInstallAutostart(\n installResult: InstallResultLike,\n deps: InstallAutostartReconciliationDeps = {},\n options: InstallAutostartReconciliationOptions = {}\n): InstallAutostartReconciliationResult {\n if (!installResult.success || shouldSkipInstallAutostartReconciliation(options.env)) {\n return { attempted: false };\n }\n\n const resolved = { ...defaultDeps(), ...deps };\n const status = resolved.getAutostartStatus();\n\n if (!status.supported) {\n return {\n attempted: false,\n autostart: status,\n autostartAction: \"unsupported\"\n };\n }\n\n if (status.health === \"healthy\") {\n return {\n attempted: false,\n autostart: status,\n autostartAction: \"already_healthy\"\n };\n }\n\n if (status.health !== \"missing\" && status.health !== \"needs_repair\" && status.health !== \"malformed\") {\n return {\n attempted: false,\n autostart: status\n };\n }\n\n try {\n const autostart = resolved.installAutostart();\n return {\n attempted: true,\n autostart,\n autostartAction: status.health === \"missing\" ? \"installed\" : \"repaired\"\n };\n } catch (error) {\n let autostart = status;\n try {\n autostart = resolved.getAutostartStatus();\n } catch {\n autostart = status;\n }\n\n return {\n attempted: true,\n autostart,\n autostartAction: \"repair_failed\",\n autostartError: error instanceof Error ? error.message : String(error)\n };\n }\n}\n","import {\n isTransientAutostartInstallError,\n STABLE_DAEMON_INSTALL_GUIDANCE\n} from \"./daemon-autostart\";\nimport type { InstallAutostartReconciliationResult } from \"./install-autostart-reconciliation\";\n\nexport function createInstallAutostartOutputPayload(\n result?: InstallAutostartReconciliationResult\n): Record<string, unknown> {\n if (!result) {\n return {};\n }\n\n return {\n autostart: result.autostart,\n autostartAction: result.autostartAction,\n ...(result.autostartAction === \"repair_failed\" && result.autostartError\n ? { autostartError: result.autostartError }\n : {})\n };\n}\n\nexport function formatAutostartReconciliationMessage(\n result: InstallAutostartReconciliationResult\n): string | null {\n switch (result.autostartAction) {\n case \"unsupported\":\n return result.autostart\n ? `Autostart not supported on ${result.autostart.platform}.`\n : \"Autostart not supported on this platform.\";\n case \"already_healthy\":\n return \"Autostart already healthy.\";\n case \"installed\":\n return result.autostart\n ? `Autostart installed (${result.autostart.platform}).`\n : \"Autostart installed.\";\n case \"repaired\":\n return result.autostart\n ? `Autostart repaired (${result.autostart.platform}).`\n : \"Autostart repaired.\";\n case \"repair_failed\":\n if (result.autostartError && isTransientAutostartInstallError(result.autostartError)) {\n return `Plugin install succeeded but autostart repair was skipped because the current CLI path is transient: ${result.autostartError}`;\n }\n return `Plugin install succeeded but autostart repair failed: ${result.autostartError ?? \"unknown error\"}. Run opendevbrowser daemon install to repair it.`;\n default:\n return null;\n }\n}\n\nexport { STABLE_DAEMON_INSTALL_GUIDANCE };\n","import { readFileSync } from \"fs\";\nimport { createOpenDevBrowserCore } from \"../../core\";\nimport type { ParsedArgs } from \"../args\";\nimport { parseBooleanFlag } from \"../utils/parse\";\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 const value = rawArgs[i + 1];\n if (value && !value.startsWith(\"--\")) {\n parsed.persistProfile = parseBooleanFlag(value, \"--persist-profile\");\n i += 1;\n } else {\n parsed.persistProfile = true;\n }\n continue;\n }\n if (arg?.startsWith(\"--persist-profile=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --persist-profile\");\n parsed.persistProfile = parseBooleanFlag(value, \"--persist-profile\");\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 ?? false\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\nexport const __test__ = { parseRunArgs };\n","import type { OutputFormat } from \"./args\";\n\nexport type OutputOptions = {\n format: OutputFormat;\n quiet?: boolean;\n};\n\ntype ExitProcessLike = Pick<typeof process, \"exit\" | \"exitCode\" | \"stdout\" | \"stderr\">;\n\nconst normalizeExitCode = (code: number | null | undefined): number => {\n return Number.isInteger(code) ? Number(code) : 0;\n};\n\nconst flushStream = (\n stream: ExitProcessLike[\"stdout\"] | ExitProcessLike[\"stderr\"] | undefined | null\n): Promise<void> => {\n return new Promise((resolve) => {\n if (!stream || typeof stream.write !== \"function\") {\n resolve();\n return;\n }\n try {\n stream.write(\"\", () => resolve());\n } catch {\n resolve();\n }\n });\n};\n\nexport async function flushOutputAndExit(\n code: number | null | undefined,\n proc: ExitProcessLike = process,\n timeoutMs = 250\n): Promise<void> {\n const finalCode = normalizeExitCode(code);\n proc.exitCode = finalCode;\n\n await new Promise<void>((resolve) => {\n let settled = false;\n const finish = () => {\n if (settled) return;\n settled = true;\n resolve();\n };\n const timer = setTimeout(finish, Math.max(0, timeoutMs));\n timer.unref?.();\n void Promise.allSettled([flushStream(proc.stdout), flushStream(proc.stderr)]).finally(() => {\n clearTimeout(timer);\n finish();\n });\n });\n\n proc.exit(finalCode);\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 { parseBooleanFlag, 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\nconst MIN_LAUNCH_CALL_TIMEOUT_MS = 30_000;\nconst MANAGED_HEADED_LAUNCH_CALL_TIMEOUT_MS = 60_000;\nconst LAUNCH_CALL_TIMEOUT_BUFFER_MS = 5_000;\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 const value = rawArgs[i + 1];\n if (value && !value.startsWith(\"--\")) {\n parsed.persistProfile = parseBooleanFlag(value, \"--persist-profile\");\n i += 1;\n } else {\n parsed.persistProfile = true;\n }\n continue;\n }\n if (arg?.startsWith(\"--persist-profile=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --persist-profile\");\n parsed.persistProfile = parseBooleanFlag(value, \"--persist-profile\");\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\nfunction deriveLaunchCallTimeoutMs(launchArgs: LaunchArgs): number {\n const waitHintMs = typeof launchArgs.waitTimeoutMs === \"number\"\n ? launchArgs.waitTimeoutMs + LAUNCH_CALL_TIMEOUT_BUFFER_MS\n : 0;\n const managedHeadedHintMs = launchArgs.noExtension && launchArgs.headless !== true\n ? MANAGED_HEADED_LAUNCH_CALL_TIMEOUT_MS\n : 0;\n return Math.max(MIN_LAUNCH_CALL_TIMEOUT_MS, waitHintMs, managedHeadedHintMs);\n}\n\nexport const __test__ = { parseLaunchArgs, deriveLaunchCallTimeoutMs };\n\nexport async function runSessionLaunch(args: ParsedArgs) {\n const launchArgs = parseLaunchArgs(args.rawArgs);\n const launchCallTimeoutMs = deriveLaunchCallTimeoutMs(launchArgs);\n try {\n const result = await callDaemon(\"session.launch\", launchArgs, { timeoutMs: launchCallTimeoutMs }) 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 retryArgs = { ...launchArgs, waitForExtension: true };\n const result = await callDaemon(\"session.launch\", retryArgs, { timeoutMs: deriveLaunchCallTimeoutMs(retryArgs) }) 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 managedArgs = {\n ...launchArgs,\n noExtension: true,\n headless: useHeadless ? true : false\n };\n const result = await callDaemon(\"session.launch\", managedArgs, { timeoutMs: deriveLaunchCallTimeoutMs(managedArgs) }) 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 startUrl?: string;\n headless?: boolean;\n extensionLegacy?: boolean;\n};\n\nconst DEFAULT_CONNECT_TIMEOUT_MS = 30_000;\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 === \"--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 === \"--extension-legacy\") {\n parsed.extensionLegacy = true;\n continue;\n }\n if (arg === \"--headless\") {\n parsed.headless = 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, {\n timeoutMs: DEFAULT_CONNECT_TIMEOUT_MS\n }) 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 const timeoutMs = closeBrowser ? 120_000 : 20_000;\n await callDaemon(\"session.disconnect\", { sessionId, closeBrowser }, { timeoutMs });\n return { success: true, message: `Session disconnected: ${sessionId}` };\n}\n","import { summarizePrimaryProviderIssue } from \"../../providers/constraint\";\n\ntype FailureShape = {\n provider?: string;\n error?: {\n reasonCode?: unknown;\n code?: unknown;\n message?: unknown;\n details?: Record<string, unknown>;\n };\n};\n\nconst asRecord = (value: unknown): Record<string, unknown> | null => (\n value && typeof value === \"object\" && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null\n);\n\nconst readNonEmptyString = (value: unknown): string | null => (\n typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null\n);\n\nconst readMeta = (data: unknown): Record<string, unknown> | null => {\n return asRecord(asRecord(data)?.meta);\n};\n\nconst readPrimaryConstraint = (data: unknown): Record<string, unknown> | null => {\n const meta = readMeta(data);\n if (!meta) return null;\n return asRecord(meta.primaryConstraint);\n};\n\nconst readPrimarySummary = (data: unknown): string | null => {\n const meta = readMeta(data);\n return readNonEmptyString(meta?.primaryConstraintSummary);\n};\n\nconst readPrimaryNextStep = (data: unknown): string | null => {\n const constraint = readPrimaryConstraint(data);\n if (!constraint) return null;\n const guidance = asRecord(constraint.guidance);\n if (!guidance) return null;\n const commands = guidance.recommendedNextCommands;\n if (!Array.isArray(commands)) return null;\n const nextStep = commands.find((entry): entry is string => typeof entry === \"string\" && entry.trim().length > 0);\n return nextStep?.trim() ?? null;\n};\n\nconst readFailures = (data: unknown): FailureShape[] => {\n const meta = readMeta(data);\n if (!meta) return [];\n const failures = meta.failures;\n return Array.isArray(failures)\n ? failures.filter((entry): entry is FailureShape => Boolean(entry) && typeof entry === \"object\")\n : [];\n};\n\nconst readFollowthroughSummary = (data: unknown): string | null => {\n const record = asRecord(data);\n return readNonEmptyString(record?.followthroughSummary)\n ?? readNonEmptyString(readMeta(data)?.followthroughSummary);\n};\n\nconst readSuggestedSteps = (data: unknown): readonly Record<string, unknown>[] => {\n const steps = asRecord(data)?.suggestedSteps;\n return Array.isArray(steps)\n ? steps.flatMap((step) => {\n const record = asRecord(step);\n return record ? [record] : [];\n })\n : [];\n};\n\nexport const buildNextStepMessage = (message: string, nextStep: string | null): string => {\n return nextStep ? `${message} Next step: ${nextStep}` : message;\n};\n\nexport const readSuggestedNextAction = (data: unknown): string | null => {\n const record = asRecord(data);\n if (!record) return null;\n return readNonEmptyString(record.suggestedNextAction)\n ?? readNonEmptyString(asRecord(record.sessionInspector)?.suggestedNextAction);\n};\n\nexport const readSuggestedStepReason = (data: unknown): string | null => {\n let current = asRecord(data);\n\n while (current) {\n const [firstStep] = readSuggestedSteps(current);\n if (firstStep) {\n return readNonEmptyString(firstStep.reason);\n }\n current = asRecord(current.challengePlan);\n }\n\n return null;\n};\n\nexport const buildWorkflowCompletionMessage = (workflowLabel: string, data: unknown): string => {\n const explicitSummary = readPrimarySummary(data);\n if (explicitSummary) {\n return buildNextStepMessage(\n `${workflowLabel} completed with provider follow-up required: ${explicitSummary}`,\n readPrimaryNextStep(data)\n );\n }\n const inferred = summarizePrimaryProviderIssue(readFailures(data));\n if (inferred) {\n return buildNextStepMessage(\n `${workflowLabel} completed with provider follow-up required: ${inferred.summary}`,\n inferred.guidance?.recommendedNextCommands[0] ?? null\n );\n }\n const followthroughSummary = readFollowthroughSummary(data);\n if (followthroughSummary) {\n return buildNextStepMessage(\n `${workflowLabel} completed. ${followthroughSummary}`,\n readSuggestedNextAction(data) ?? readSuggestedStepReason(data)\n );\n }\n return `${workflowLabel} completed.`;\n};\n","import { createUsageError } from \"../../errors\";\nimport { parseNumberFlag } from \"../../utils/parse\";\n\nexport type SessionInspectorArgs = {\n sessionId?: string;\n includeUrls?: boolean;\n sinceConsoleSeq?: number;\n sinceNetworkSeq?: number;\n sinceExceptionSeq?: number;\n max?: number;\n requestId?: string;\n};\n\nexport function parseSessionInspectorArgs(rawArgs: string[]): SessionInspectorArgs {\n const parsed: SessionInspectorArgs = {};\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n if (arg === \"--include-urls\") {\n parsed.includeUrls = true;\n continue;\n }\n if (arg === \"--session-id\" || arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = readStringFlag(rawArgs, index, \"--session-id\");\n index += stepForValue(arg);\n continue;\n }\n if (arg === \"--since-console-seq\" || arg?.startsWith(\"--since-console-seq=\")) {\n parsed.sinceConsoleSeq = readNumberFlag(rawArgs, index, \"--since-console-seq\", { min: 0 });\n index += stepForValue(arg);\n continue;\n }\n if (arg === \"--since-network-seq\" || arg?.startsWith(\"--since-network-seq=\")) {\n parsed.sinceNetworkSeq = readNumberFlag(rawArgs, index, \"--since-network-seq\", { min: 0 });\n index += stepForValue(arg);\n continue;\n }\n if (arg === \"--since-exception-seq\" || arg?.startsWith(\"--since-exception-seq=\")) {\n parsed.sinceExceptionSeq = readNumberFlag(rawArgs, index, \"--since-exception-seq\", { min: 0 });\n index += stepForValue(arg);\n continue;\n }\n if (arg === \"--max\" || arg?.startsWith(\"--max=\")) {\n parsed.max = readNumberFlag(rawArgs, index, \"--max\", { min: 1 });\n index += stepForValue(arg);\n continue;\n }\n if (arg === \"--request-id\" || arg?.startsWith(\"--request-id=\")) {\n parsed.requestId = readStringFlag(rawArgs, index, \"--request-id\");\n index += stepForValue(arg);\n }\n }\n\n return parsed;\n}\n\nfunction stepForValue(flag: string): number {\n return flag.includes(\"=\") ? 0 : 1;\n}\n\nfunction readNumberFlag(\n rawArgs: string[],\n index: number,\n flag: string,\n options: { min?: number }\n): number {\n return parseNumberFlag(readStringFlag(rawArgs, index, flag), flag, options);\n}\n\nfunction readStringFlag(rawArgs: string[], index: number, flag: string): string {\n const arg = rawArgs[index];\n const value = arg?.includes(\"=\")\n ? arg.split(\"=\", 2)[1]\n : rawArgs[index + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { buildNextStepMessage, readSuggestedNextAction } from \"../../utils/workflow-message\";\nimport { parseSessionInspectorArgs } from \"./inspector-shared\";\n\nexport async function runSessionInspector(args: ParsedArgs) {\n const parsed = parseSessionInspectorArgs(args.rawArgs);\n if (!parsed.sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const result = await callDaemon(\"session.inspect\", {\n sessionId: parsed.sessionId,\n ...(typeof parsed.includeUrls === \"boolean\" ? { includeUrls: parsed.includeUrls } : {}),\n sinceConsoleSeq: parsed.sinceConsoleSeq,\n sinceNetworkSeq: parsed.sinceNetworkSeq,\n sinceExceptionSeq: parsed.sinceExceptionSeq,\n max: parsed.max,\n requestId: parsed.requestId\n });\n\n return {\n success: true,\n message: buildNextStepMessage(\n \"Session inspector snapshot captured.\",\n readSuggestedNextAction(result)\n ),\n data: result\n };\n}\n\nexport const __test__ = {\n parseSessionInspectorArgs\n};\n","export const DEFAULT_CLICK_TRANSPORT_TIMEOUT_MS = 60_000;\nexport const DEFAULT_DIALOG_TRANSPORT_TIMEOUT_MS = 30_000;\nexport const DEFAULT_TARGET_CREATION_TRANSPORT_TIMEOUT_MS = 30_000;\nexport const DEFAULT_SNAPSHOT_TRANSPORT_TIMEOUT_MS = 30_000;\nexport const DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS = 30_000;\nexport const DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS = 30_000;\nexport const DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS = 120_000;\n","import { createUsageError } from \"../errors\";\nimport { parseOptionalStringFlag } from \"../utils/parse\";\nimport { isChallengeAutomationMode, type ChallengeAutomationMode } from \"../../challenges/types\";\n\nexport function parseOptionalChallengeAutomationMode(\n rawArgs: string[]\n): ChallengeAutomationMode | undefined {\n const value = parseOptionalStringFlag(rawArgs, \"--challenge-automation-mode\");\n if (typeof value === \"undefined\") {\n return undefined;\n }\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n return value;\n}\n","import { parseOptionalStringFlag, parseNumberFlag } from \"../../utils/parse\";\n\ntype NumberOptions = {\n min?: number;\n max?: number;\n integer?: boolean;\n};\n\nfunction parseOptionalNumberFlag(\n rawArgs: string[],\n flag: string,\n options?: NumberOptions\n): number | undefined {\n const value = parseOptionalStringFlag(rawArgs, flag);\n return typeof value === \"string\"\n ? parseNumberFlag(value, flag, options)\n : undefined;\n}\n\nexport type ReviewCommandArgs = {\n sessionId?: string;\n targetId?: string;\n reason?: string;\n maxChars?: number;\n cursor?: string;\n timeoutMs?: number;\n};\n\nexport function parseReviewCommandArgs(rawArgs: string[]): ReviewCommandArgs {\n return {\n sessionId: parseOptionalStringFlag(rawArgs, \"--session-id\"),\n targetId: parseOptionalStringFlag(rawArgs, \"--target-id\"),\n reason: parseOptionalStringFlag(rawArgs, \"--reason\"),\n maxChars: parseOptionalNumberFlag(rawArgs, \"--max-chars\", { min: 1 }),\n cursor: parseOptionalStringFlag(rawArgs, \"--cursor\"),\n timeoutMs: parseOptionalNumberFlag(rawArgs, \"--timeout-ms\", { min: 1 })\n };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseOptionalStringFlag, parseNumberFlag } from \"../../utils/parse\";\nimport {\n buildNextStepMessage,\n readSuggestedNextAction,\n readSuggestedStepReason\n} from \"../../utils/workflow-message\";\nimport { parseOptionalChallengeAutomationMode } from \"../challenge-automation-mode\";\nimport { parseReviewCommandArgs } from \"../nav/review-shared\";\nimport { parseSessionInspectorArgs } from \"./inspector-shared\";\n\nfunction parseOptionalTimeoutMs(rawArgs: string[]): number | undefined {\n const value = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n return typeof value === \"string\"\n ? parseNumberFlag(value, \"--timeout-ms\", { min: 1 })\n : undefined;\n}\n\nexport async function runSessionInspectorAudit(args: ParsedArgs) {\n const reviewArgs = parseReviewCommandArgs(args.rawArgs);\n const inspectorArgs = parseSessionInspectorArgs(args.rawArgs);\n const challengeAutomationMode = parseOptionalChallengeAutomationMode(args.rawArgs);\n const timeoutMs = parseOptionalTimeoutMs(args.rawArgs);\n const sessionId = reviewArgs.sessionId ?? inspectorArgs.sessionId;\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n const result = await callDaemon(\"session.inspectAudit\", {\n sessionId,\n ...(typeof reviewArgs.targetId === \"string\" ? { targetId: reviewArgs.targetId } : {}),\n ...(typeof reviewArgs.reason === \"string\" ? { reason: reviewArgs.reason } : {}),\n ...(typeof reviewArgs.maxChars === \"number\" ? { maxChars: reviewArgs.maxChars } : {}),\n ...(typeof reviewArgs.cursor === \"string\" ? { cursor: reviewArgs.cursor } : {}),\n ...(typeof inspectorArgs.includeUrls === \"boolean\" ? { includeUrls: inspectorArgs.includeUrls } : {}),\n ...(typeof inspectorArgs.sinceConsoleSeq === \"number\" ? { sinceConsoleSeq: inspectorArgs.sinceConsoleSeq } : {}),\n ...(typeof inspectorArgs.sinceNetworkSeq === \"number\" ? { sinceNetworkSeq: inspectorArgs.sinceNetworkSeq } : {}),\n ...(typeof inspectorArgs.sinceExceptionSeq === \"number\" ? { sinceExceptionSeq: inspectorArgs.sinceExceptionSeq } : {}),\n ...(typeof inspectorArgs.max === \"number\" ? { max: inspectorArgs.max } : {}),\n ...(typeof inspectorArgs.requestId === \"string\" ? { requestId: inspectorArgs.requestId } : {}),\n ...(challengeAutomationMode ? { challengeAutomationMode } : {})\n }, {\n timeoutMs: timeoutMs ?? DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS\n });\n\n const nextStep = readSuggestedNextAction(result)\n ?? readSuggestedStepReason(result);\n\n return {\n success: true,\n message: buildNextStepMessage(\"Correlated audit bundle captured.\", nextStep),\n data: result\n };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseOptionalStringFlag, parseNumberFlag } from \"../../utils/parse\";\nimport { buildNextStepMessage, readSuggestedStepReason } from \"../../utils/workflow-message\";\nimport { parseOptionalChallengeAutomationMode } from \"../challenge-automation-mode\";\n\nfunction parseOptionalTimeoutMs(rawArgs: string[]): number | undefined {\n const value = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n return typeof value === \"string\"\n ? parseNumberFlag(value, \"--timeout-ms\", { min: 1 })\n : undefined;\n}\n\nexport async function runSessionInspectorPlan(args: ParsedArgs) {\n const sessionId = parseOptionalStringFlag(args.rawArgs, \"--session-id\");\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n const challengeAutomationMode = parseOptionalChallengeAutomationMode(args.rawArgs);\n const timeoutMs = parseOptionalTimeoutMs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n const result = await callDaemon(\"session.inspectPlan\", {\n sessionId,\n ...(typeof targetId === \"string\" ? { targetId } : {}),\n ...(challengeAutomationMode ? { challengeAutomationMode } : {})\n }, {\n timeoutMs: timeoutMs ?? DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS\n });\n return {\n success: true,\n message: buildNextStepMessage(\n \"Challenge inspect plan captured.\",\n readSuggestedStepReason(result)\n ),\n data: result\n };\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 } from \"../errors\";\nimport { fetchDaemonStatusFromMetadata } from \"../daemon-status\";\nimport { runSessionStatus } from \"./session/status\";\nimport { assessNativeStatus, getNativeStatusSnapshot } from \"./native\";\n\ntype StatusArgs = {\n sessionId?: string;\n daemon: boolean;\n};\n\nconst DAEMON_STATUS_READ_OPTIONS = {\n timeoutMs: 5_000,\n retryAttempts: 5,\n retryDelayMs: 250\n} as const;\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 const assessment = assessNativeStatus(nativeStatus);\n return {\n success: assessment.success,\n message: assessment.message,\n data: nativeStatus,\n exitCode: assessment.exitCode ?? undefined\n };\n }\n\n const daemonStatus = await fetchDaemonStatusFromMetadata(undefined, DAEMON_STATUS_READ_OPTIONS);\n if (!daemonStatus) {\n throw createUsageError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n\n const nativeStatus = getNativeStatusSnapshot();\n const nativeAssessment = assessNativeStatus(nativeStatus);\n\n const baseLines = [\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 `canvas=${daemonStatus.relay.canvasConnected ? \"on\" : \"off\"} ` +\n `pairing=${daemonStatus.relay.pairingRequired ? \"on\" : \"off\"} ` +\n `health=${daemonStatus.relay.health?.reason ?? \"n/a\"}`,\n `Native: ${nativeAssessment.summary}`,\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, canvas=canvas clients, pairing=token required, health=relay status\"\n ];\n if (!nativeAssessment.success) {\n baseLines.splice(3, 0, `Native detail: ${nativeAssessment.message}`);\n }\n const baseMessage = baseLines.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 { DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS } from \"../transport-timeouts\";\nimport { parseOptionalStringFlag, parseNumberFlag } from \"../utils/parse\";\nimport { parseOptionalChallengeAutomationMode } from \"./challenge-automation-mode\";\n\nfunction parseOptionalTimeoutMs(rawArgs: string[]): number | undefined {\n const value = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n return typeof value === \"string\"\n ? parseNumberFlag(value, \"--timeout-ms\", { min: 1 })\n : undefined;\n}\n\nexport async function runStatusCapabilities(args: ParsedArgs) {\n const sessionId = parseOptionalStringFlag(args.rawArgs, \"--session-id\");\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n const challengeAutomationMode = parseOptionalChallengeAutomationMode(args.rawArgs);\n const timeoutMs = parseOptionalTimeoutMs(args.rawArgs);\n const result = await callDaemon(\"status.capabilities\", {\n ...(typeof sessionId === \"string\" ? { sessionId } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {}),\n ...(challengeAutomationMode ? { challengeAutomationMode } : {})\n }, {\n timeoutMs: timeoutMs ?? DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS\n });\n return {\n success: true,\n message: \"Capability discovery captured.\",\n data: result\n };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseNumberFlag, parseOptionalStringFlag } 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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!url) throw createUsageError(\"Missing --url\");\n const result = await callDaemon(\"nav.goto\", {\n sessionId,\n url,\n waitUntil,\n timeoutMs,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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, parseOptionalStringFlag } 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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"nav.wait\", {\n sessionId,\n ref,\n state,\n until,\n timeoutMs,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Wait complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_SNAPSHOT_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\n\nfunction parseSnapshotArgs(rawArgs: string[]): { sessionId?: string; mode?: string; maxChars?: number; cursor?: string; timeoutMs?: number } {\n const parsed: { sessionId?: string; mode?: string; maxChars?: number; cursor?: 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 === \"--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 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 }\n }\n return parsed;\n}\n\nexport async function runSnapshot(args: ParsedArgs) {\n const { sessionId, mode, maxChars, cursor, timeoutMs } = parseSnapshotArgs(args.rawArgs);\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const payload = {\n sessionId,\n mode,\n maxChars,\n cursor,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n };\n const result = await callDaemon(\"nav.snapshot\", payload, {\n timeoutMs: timeoutMs ?? DEFAULT_SNAPSHOT_TRANSPORT_TIMEOUT_MS\n });\n return { success: true, message: \"Snapshot captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseReviewCommandArgs } from \"./review-shared\";\n\nexport async function runReview(args: ParsedArgs) {\n const { sessionId, targetId, maxChars, cursor, timeoutMs } = parseReviewCommandArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const payload = {\n sessionId,\n maxChars,\n cursor,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n };\n const result = await callDaemon(\"nav.review\", payload, {\n timeoutMs: timeoutMs ?? DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS\n });\n return { success: true, message: \"Review captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseReviewCommandArgs } from \"./review-shared\";\n\nexport async function runReviewDesktop(args: ParsedArgs) {\n const { sessionId, targetId, reason, maxChars, cursor, timeoutMs } = parseReviewCommandArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n const result = await callDaemon(\"nav.reviewDesktop\", {\n sessionId,\n ...(typeof targetId === \"string\" ? { targetId } : {}),\n ...(typeof reason === \"string\" ? { reason } : {}),\n ...(typeof maxChars === \"number\" ? { maxChars } : {}),\n ...(typeof cursor === \"string\" ? { cursor } : {})\n }, {\n timeoutMs: timeoutMs ?? DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS\n });\n return {\n success: true,\n message: \"Desktop-assisted review captured.\",\n data: result\n };\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 stored?: boolean;\n includeScreenshots?: boolean;\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 === \"--stored\") {\n parsed.stored = true;\n continue;\n }\n if (arg === \"--include-screenshots\") {\n parsed.includeScreenshots = true;\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 {\n sessionId,\n stored,\n includeScreenshots,\n url,\n screenshotMode,\n debug,\n context,\n timeoutMs,\n transport,\n targetId,\n tabId\n } = 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 stored,\n includeScreenshots,\n transport,\n targetId,\n tabId,\n url,\n screenshotMode,\n debug,\n context,\n timeoutMs\n }, { timeoutMs: callTimeoutMs });\n\n if (response.status === \"cancelled\") {\n return {\n success: true,\n message: response.error?.message ?? \"Annotation cancelled.\",\n data: { cancelled: true }\n };\n }\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 { readFileSync } from \"fs\";\nimport type { ParsedArgs } from \"../args\";\nimport { DaemonClient } from \"../daemon-client\";\nimport { createUsageError } from \"../errors\";\nimport { writeOutput } from \"../output\";\nimport { parseNumberFlag } from \"../utils/parse\";\n\ntype CanvasArgs = {\n command?: string;\n params?: string;\n paramsFile?: string;\n timeoutMs?: number;\n};\n\nconst DEFAULT_FEEDBACK_STREAM_TIMEOUT_MS = 30000;\n\ntype FeedbackItem = Record<string, unknown>;\n\ntype FeedbackSubscribeResult = {\n subscriptionId: string | null;\n initialItems: FeedbackItem[];\n cursor: string | null;\n heartbeatMs: number;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst asString = (value: unknown): string | null => {\n return typeof value === \"string\" && value.length > 0 ? value : null;\n};\n\nconst asNumber = (value: unknown): number | null => {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n};\n\nconst asRecordArray = (value: unknown): FeedbackItem[] => {\n return Array.isArray(value) ? value.filter(isRecord) : [];\n};\n\nconst toFeedbackSubscribeResult = (value: unknown): FeedbackSubscribeResult => {\n if (!isRecord(value)) {\n return {\n subscriptionId: null,\n initialItems: [],\n cursor: null,\n heartbeatMs: 15000\n };\n }\n return {\n subscriptionId: asString(value.subscriptionId),\n initialItems: asRecordArray(value.initialItems),\n cursor: asString(value.cursor),\n heartbeatMs: Math.max(asNumber(value.heartbeatMs) ?? 15000, 1000)\n };\n};\n\nasync function streamFeedbackViaSubscription(\n client: DaemonClient,\n args: ParsedArgs,\n canvasArgs: CanvasArgs,\n params: Record<string, unknown>,\n initial: Record<string, unknown>\n): Promise<void> {\n const outputOptions = { format: args.outputFormat, quiet: args.quiet };\n writeOutput({\n success: true,\n message: `Canvas executed: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n result: initial\n }\n }, outputOptions);\n\n const initialResult = toFeedbackSubscribeResult(initial);\n const subscriptionId = initialResult.subscriptionId;\n const heartbeatMs = initialResult.heartbeatMs;\n const streamTimeoutMs = canvasArgs.timeoutMs ?? DEFAULT_FEEDBACK_STREAM_TIMEOUT_MS;\n const deadline = Date.now() + streamTimeoutMs;\n let cursor = initialResult.cursor;\n\n for (const item of initialResult.initialItems) {\n const itemCursor = asString(item.cursor);\n if (itemCursor) {\n cursor = itemCursor;\n }\n writeOutput({\n success: true,\n message: `Canvas feedback: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n streamEvent: {\n eventType: \"feedback.item\",\n item\n }\n }\n }, outputOptions);\n }\n\n while (subscriptionId && Date.now() < deadline) {\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) {\n break;\n }\n const nextEvent = await client.call(\n \"canvas.execute\",\n {\n command: \"canvas.feedback.next\",\n params: {\n ...params,\n subscriptionId,\n timeoutMs: Math.min(heartbeatMs, remainingMs)\n }\n },\n { timeoutMs: remainingMs }\n );\n if (isRecord(nextEvent)) {\n if (nextEvent.eventType === \"feedback.item\" && isRecord(nextEvent.item)) {\n const itemCursor = asString(nextEvent.item.cursor);\n if (itemCursor) {\n cursor = itemCursor;\n }\n } else if (typeof nextEvent.cursor === \"string\") {\n cursor = nextEvent.cursor;\n }\n }\n writeOutput({\n success: true,\n message: `Canvas feedback: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n streamEvent: nextEvent\n }\n }, outputOptions);\n if (isRecord(nextEvent) && nextEvent.eventType === \"feedback.complete\") {\n break;\n }\n }\n\n if (Date.now() >= deadline) {\n writeOutput({\n success: true,\n message: `Canvas feedback: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n streamEvent: {\n eventType: \"feedback.complete\",\n cursor: cursor ?? null,\n reason: \"timeout\"\n }\n }\n }, outputOptions);\n }\n\n if (subscriptionId) {\n await client.call(\n \"canvas.execute\",\n {\n command: \"canvas.feedback.unsubscribe\",\n params: {\n ...params,\n subscriptionId\n }\n }\n ).catch(() => {});\n }\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 parseJsonObject = (raw: string, source: string): Record<string, unknown> => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON\";\n throw createUsageError(`Invalid JSON from ${source}: ${message}`);\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw createUsageError(`Invalid JSON from ${source}: expected object`);\n }\n return parsed as Record<string, unknown>;\n};\n\nexport const parseCanvasArgs = (rawArgs: string[]): CanvasArgs => {\n const parsed: CanvasArgs = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--command\") {\n parsed.command = requireValue(rawArgs[i + 1], \"--command\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--command=\")) {\n parsed.command = requireValue(arg.split(\"=\", 2)[1], \"--command\");\n continue;\n }\n if (arg === \"--params\") {\n parsed.params = requireValue(rawArgs[i + 1], \"--params\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--params=\")) {\n parsed.params = requireValue(arg.split(\"=\", 2)[1], \"--params\");\n continue;\n }\n if (arg === \"--params-file\") {\n parsed.paramsFile = requireValue(rawArgs[i + 1], \"--params-file\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--params-file=\")) {\n parsed.paramsFile = requireValue(arg.split(\"=\", 2)[1], \"--params-file\");\n continue;\n }\n if (arg === \"--timeout-ms\") {\n parsed.timeoutMs = parseNumberFlag(requireValue(rawArgs[i + 1], \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = parseNumberFlag(requireValue(arg.split(\"=\", 2)[1], \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n }\n }\n return parsed;\n};\n\nconst resolveCanvasParams = (canvasArgs: CanvasArgs): Record<string, unknown> => {\n const hasParams = typeof canvasArgs.params === \"string\";\n const hasParamsFile = typeof canvasArgs.paramsFile === \"string\";\n if (Number(hasParams) + Number(hasParamsFile) > 1) {\n throw createUsageError(\"Provide only one params source: --params or --params-file.\");\n }\n if (hasParams) {\n return parseJsonObject(canvasArgs.params ?? \"\", \"--params\");\n }\n if (hasParamsFile) {\n let raw = \"\";\n try {\n raw = readFileSync(canvasArgs.paramsFile ?? \"\", \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file\";\n throw createUsageError(`Invalid --params-file: ${message}`);\n }\n if (!raw.trim()) {\n throw createUsageError(\"Invalid JSON from --params-file: empty input\");\n }\n return parseJsonObject(raw, \"--params-file\");\n }\n return {};\n};\n\nconst attachRepoRoot = (params: Record<string, unknown>): Record<string, unknown> => {\n if (typeof params.repoRoot === \"string\" && params.repoRoot.trim().length > 0) {\n return params;\n }\n return {\n ...params,\n repoRoot: process.cwd()\n };\n};\n\nexport async function runCanvas(args: ParsedArgs) {\n const canvasArgs = parseCanvasArgs(args.rawArgs);\n if (!canvasArgs.command) {\n throw createUsageError(\"Usage: opendevbrowser canvas --command <canvas.command> [--params <json> | --params-file <path>]\");\n }\n if (!canvasArgs.command.startsWith(\"canvas.\")) {\n throw createUsageError(\"Canvas command names must start with 'canvas.'.\");\n }\n\n const client = new DaemonClient({ autoRenew: true });\n try {\n const params = attachRepoRoot(resolveCanvasParams(canvasArgs));\n const result = await client.call<unknown>(\n \"canvas.execute\",\n {\n command: canvasArgs.command,\n params\n },\n { timeoutMs: canvasArgs.timeoutMs }\n );\n if (\n canvasArgs.command === \"canvas.feedback.subscribe\"\n && args.outputFormat === \"stream-json\"\n && isRecord(result)\n ) {\n await streamFeedbackViaSubscription(client, args, canvasArgs, params, result);\n return {\n success: true,\n message: `Canvas executed: ${canvasArgs.command}`,\n data: {\n suppressOutput: true\n }\n };\n }\n if (args.outputFormat === \"text\") {\n const output = typeof result === \"string\" ? result : JSON.stringify(result, null, 2);\n return { success: true, message: output };\n }\n return {\n success: true,\n message: `Canvas executed: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n result\n }\n };\n } finally {\n await client.releaseBinding().catch(() => {});\n }\n}\n\nexport const __test__ = {\n parseCanvasArgs,\n parseJsonObject,\n resolveCanvasParams,\n attachRepoRoot,\n toFeedbackSubscribeResult\n};\n","import { readFileSync } from \"fs\";\nimport type { ParsedArgs } from \"../args\";\nimport { DaemonClient } from \"../daemon-client\";\nimport { createUsageError } from \"../errors\";\nimport { parseNumberFlag } from \"../utils/parse\";\n\ntype RpcArgs = {\n name?: string;\n params?: string;\n paramsFile?: string;\n timeoutMs?: number;\n unsafeInternal?: boolean;\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 parseJsonObject = (raw: string, source: string): Record<string, unknown> => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON\";\n throw createUsageError(`Invalid JSON from ${source}: ${message}`);\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw createUsageError(`Invalid JSON from ${source}: expected object`);\n }\n return parsed as Record<string, unknown>;\n};\n\nexport const parseRpcArgs = (rawArgs: string[]): RpcArgs => {\n const parsed: RpcArgs = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--unsafe-internal\") {\n parsed.unsafeInternal = true;\n continue;\n }\n if (arg === \"--name\") {\n parsed.name = requireValue(rawArgs[i + 1], \"--name\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--name=\")) {\n parsed.name = requireValue(arg.split(\"=\", 2)[1], \"--name\");\n continue;\n }\n if (arg === \"--params\") {\n parsed.params = requireValue(rawArgs[i + 1], \"--params\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--params=\")) {\n parsed.params = requireValue(arg.split(\"=\", 2)[1], \"--params\");\n continue;\n }\n if (arg === \"--params-file\") {\n parsed.paramsFile = requireValue(rawArgs[i + 1], \"--params-file\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--params-file=\")) {\n parsed.paramsFile = requireValue(arg.split(\"=\", 2)[1], \"--params-file\");\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\nconst resolveRpcParams = (rpcArgs: RpcArgs): Record<string, unknown> => {\n const hasParamsArg = typeof rpcArgs.params === \"string\";\n const hasParamsFile = typeof rpcArgs.paramsFile === \"string\";\n const inputCount = Number(hasParamsArg) + Number(hasParamsFile);\n\n if (inputCount > 1) {\n throw createUsageError(\"Provide only one params source: --params or --params-file.\");\n }\n if (hasParamsArg) {\n return parseJsonObject(rpcArgs.params ?? \"\", \"--params\");\n }\n if (hasParamsFile) {\n let raw = \"\";\n try {\n raw = readFileSync(rpcArgs.paramsFile ?? \"\", \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file\";\n throw createUsageError(`Invalid --params-file: ${message}`);\n }\n if (!raw.trim()) {\n throw createUsageError(\"Invalid JSON from --params-file: empty input\");\n }\n return parseJsonObject(raw, \"--params-file\");\n }\n return {};\n};\n\nexport async function runRpc(args: ParsedArgs) {\n const rpcArgs = parseRpcArgs(args.rawArgs);\n if (!rpcArgs.unsafeInternal) {\n throw createUsageError(\n \"Missing --unsafe-internal. rpc is a power-user command that executes internal daemon commands and can mutate session state.\"\n );\n }\n if (!rpcArgs.name) {\n throw createUsageError(\"Missing --name\");\n }\n\n const params = resolveRpcParams(rpcArgs);\n const client = new DaemonClient({ autoRenew: true });\n try {\n const result = await client.call<unknown>(rpcArgs.name, params, { timeoutMs: rpcArgs.timeoutMs });\n if (args.outputFormat === \"text\") {\n const output = typeof result === \"string\" ? result : JSON.stringify(result, null, 2);\n return { success: true, message: output };\n }\n return {\n success: true,\n message: `RPC executed: ${rpcArgs.name}`,\n data: {\n name: rpcArgs.name,\n result\n }\n };\n } finally {\n await client.releaseBinding().catch(() => {});\n }\n}\n\nexport const __test__ = {\n parseJsonObject,\n parseRpcArgs,\n resolveRpcParams\n};\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_CLICK_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\n\ntype ClickArgs = {\n sessionId?: string;\n ref?: string;\n timeoutMs?: number;\n};\n\nfunction parseClickArgs(rawArgs: string[]): ClickArgs {\n const timeoutValue = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n const parsed: ClickArgs = {\n timeoutMs: typeof timeoutValue === \"string\"\n ? parseNumberFlag(timeoutValue, \"--timeout-ms\", { min: 1 })\n : undefined\n };\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, timeoutMs } = parseClickArgs(args.rawArgs);\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const params = {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n };\n const result = await callDaemon(\"interact.click\", params, {\n timeoutMs: timeoutMs ?? DEFAULT_CLICK_TRANSPORT_TIMEOUT_MS\n });\n return { success: true, message: \"Click complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.hover\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Hover complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!key) throw createUsageError(\"Missing --key\");\n const result = await callDaemon(\"interact.press\", {\n sessionId,\n key,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.check\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Check complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.uncheck\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Uncheck complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\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\", {\n sessionId,\n ref,\n text,\n clear,\n submit,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Type complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\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\", {\n sessionId,\n ref,\n values,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Select complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\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\", {\n sessionId,\n ref,\n dy,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Scroll complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.scrollIntoView\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { parseOptionalStringFlag, parseStringArrayFlag } from \"../../utils/parse\";\n\ntype UploadArgs = {\n sessionId?: string;\n targetId?: string;\n ref?: string;\n files?: string[];\n};\n\nfunction parseUploadArgs(rawArgs: string[]): UploadArgs {\n return {\n sessionId: parseOptionalStringFlag(rawArgs, \"--session-id\"),\n targetId: parseOptionalStringFlag(rawArgs, \"--target-id\"),\n ref: parseOptionalStringFlag(rawArgs, \"--ref\"),\n files: parseStringArrayFlag(rawArgs, \"--files\")\n };\n}\n\nexport async function runUpload(args: ParsedArgs) {\n const { sessionId, targetId, ref, files } = parseUploadArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n if (!files) throw createUsageError(\"Missing --files\");\n const result = await callDaemon(\"interact.upload\", {\n sessionId,\n ref,\n files,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Upload complete.\", data: result };\n}\n\nexport const __test__ = {\n parseUploadArgs\n};\n","import { createUsageError } from \"../../errors\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\n\nexport type PointerButton = \"left\" | \"middle\" | \"right\";\n\nconst POINTER_BUTTONS = new Set<PointerButton>([\"left\", \"middle\", \"right\"]);\n\nfunction requireFlagValue(rawArgs: string[], flag: string): string {\n const value = parseOptionalStringFlag(rawArgs, flag);\n if (!value) {\n throw createUsageError(`Missing ${flag}`);\n }\n return value;\n}\n\nexport function requirePointerCoordinate(rawArgs: string[], flag: string): number {\n return parseNumberFlag(requireFlagValue(rawArgs, flag), flag, { integer: false });\n}\n\nexport function parsePointerSteps(rawArgs: string[]): number | undefined {\n const value = parseOptionalStringFlag(rawArgs, \"--steps\");\n return value ? parseNumberFlag(value, \"--steps\", { min: 1 }) : undefined;\n}\n\nexport function parsePointerClickCount(rawArgs: string[]): number | undefined {\n const value = parseOptionalStringFlag(rawArgs, \"--click-count\");\n return value ? parseNumberFlag(value, \"--click-count\", { min: 1 }) : undefined;\n}\n\nexport function parsePointerButton(rawArgs: string[]): PointerButton | undefined {\n const value = parseOptionalStringFlag(rawArgs, \"--button\");\n if (!value) {\n return undefined;\n }\n if (!POINTER_BUTTONS.has(value as PointerButton)) {\n throw createUsageError(`Invalid --button: ${value}`);\n }\n return value as PointerButton;\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\nimport { parsePointerSteps, requirePointerCoordinate } from \"./pointer-shared\";\n\nexport async function runPointerMove(args: ParsedArgs) {\n const sessionId = parseOptionalStringFlag(args.rawArgs, \"--session-id\");\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n const x = requirePointerCoordinate(args.rawArgs, \"--x\");\n const y = requirePointerCoordinate(args.rawArgs, \"--y\");\n const steps = parsePointerSteps(args.rawArgs);\n\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const result = await callDaemon(\"pointer.move\", {\n sessionId,\n x,\n y,\n ...(typeof steps === \"number\" ? { steps } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Pointer move complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\nimport {\n parsePointerButton,\n parsePointerClickCount,\n requirePointerCoordinate\n} from \"./pointer-shared\";\n\nexport async function runPointerDown(args: ParsedArgs) {\n const sessionId = parseOptionalStringFlag(args.rawArgs, \"--session-id\");\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n const x = requirePointerCoordinate(args.rawArgs, \"--x\");\n const y = requirePointerCoordinate(args.rawArgs, \"--y\");\n const button = parsePointerButton(args.rawArgs);\n const clickCount = parsePointerClickCount(args.rawArgs);\n\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const result = await callDaemon(\"pointer.down\", {\n sessionId,\n x,\n y,\n ...(typeof button === \"string\" ? { button } : {}),\n ...(typeof clickCount === \"number\" ? { clickCount } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Pointer down complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\nimport {\n parsePointerButton,\n parsePointerClickCount,\n requirePointerCoordinate\n} from \"./pointer-shared\";\n\nexport async function runPointerUp(args: ParsedArgs) {\n const sessionId = parseOptionalStringFlag(args.rawArgs, \"--session-id\");\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n const x = requirePointerCoordinate(args.rawArgs, \"--x\");\n const y = requirePointerCoordinate(args.rawArgs, \"--y\");\n const button = parsePointerButton(args.rawArgs);\n const clickCount = parsePointerClickCount(args.rawArgs);\n\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const result = await callDaemon(\"pointer.up\", {\n sessionId,\n x,\n y,\n ...(typeof button === \"string\" ? { button } : {}),\n ...(typeof clickCount === \"number\" ? { clickCount } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Pointer up complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\nimport { parsePointerSteps, requirePointerCoordinate } from \"./pointer-shared\";\n\nexport async function runPointerDrag(args: ParsedArgs) {\n const sessionId = parseOptionalStringFlag(args.rawArgs, \"--session-id\");\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n const fromX = requirePointerCoordinate(args.rawArgs, \"--from-x\");\n const fromY = requirePointerCoordinate(args.rawArgs, \"--from-y\");\n const toX = requirePointerCoordinate(args.rawArgs, \"--to-x\");\n const toY = requirePointerCoordinate(args.rawArgs, \"--to-y\");\n const steps = parsePointerSteps(args.rawArgs);\n\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const result = await callDaemon(\"pointer.drag\", {\n sessionId,\n from: { x: fromX, y: fromY },\n to: { x: toX, y: toY },\n ...(typeof steps === \"number\" ? { steps } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Pointer drag 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\";\nimport { DEFAULT_TARGET_CREATION_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\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(\n \"targets.new\",\n { sessionId, url },\n { timeoutMs: DEFAULT_TARGET_CREATION_TRANSPORT_TIMEOUT_MS }\n );\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\";\nimport { DEFAULT_TARGET_CREATION_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\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(\n \"page.open\",\n { sessionId, name, url },\n { timeoutMs: DEFAULT_TARGET_CREATION_TRANSPORT_TIMEOUT_MS }\n );\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\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.getHtml\", {\n sessionId,\n ref,\n maxChars,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.getText\", {\n sessionId,\n ref,\n maxChars,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\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\", {\n sessionId,\n ref,\n name: attr,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.getValue\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.isVisible\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Visibility checked.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.isEnabled\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.isChecked\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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; 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 runClonePage(args: ParsedArgs) {\n const { sessionId, targetId } = parseClonePageArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"export.clonePage\", {\n sessionId,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Page cloned.\", data: result };\n}\n\nexport const __test__ = {\n parseClonePageArgs\n};\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseCloneComponentArgs(rawArgs: string[]): { sessionId?: string; ref?: string; targetId?: string } {\n const parsed: { sessionId?: string; ref?: 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 === \"--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 === \"--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 runCloneComponent(args: ParsedArgs) {\n const { sessionId, ref, targetId } = 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\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Component cloned.\", data: result };\n}\n\nexport const __test__ = {\n parseCloneComponentArgs\n};\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"devtools.perf\", {\n sessionId,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\n\ntype ScreenshotArgs = {\n sessionId?: string;\n targetId?: string;\n path?: string;\n ref?: string;\n fullPage?: boolean;\n timeoutMs?: number;\n};\n\nfunction parseScreenshotArgs(rawArgs: string[]): ScreenshotArgs {\n const timeoutValue = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n const parsed: ScreenshotArgs = {\n sessionId: parseOptionalStringFlag(rawArgs, \"--session-id\"),\n targetId: parseOptionalStringFlag(rawArgs, \"--target-id\"),\n path: parseOptionalStringFlag(rawArgs, \"--path\"),\n ref: parseOptionalStringFlag(rawArgs, \"--ref\"),\n fullPage: rawArgs.includes(\"--full-page\"),\n timeoutMs: typeof timeoutValue === \"string\"\n ? parseNumberFlag(timeoutValue, \"--timeout-ms\", { min: 1 })\n : undefined\n };\n if (parsed.ref && parsed.fullPage) {\n throw createUsageError(\"Choose either --ref or --full-page.\");\n }\n return parsed;\n}\n\nexport async function runScreenshot(args: ParsedArgs) {\n const { sessionId, targetId, path, ref, fullPage, timeoutMs } = parseScreenshotArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const params = {\n sessionId,\n ...(typeof path === \"string\" ? { path } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {}),\n ...(typeof ref === \"string\" ? { ref } : {}),\n ...(fullPage === true ? { fullPage: true } : {})\n };\n const result = await callDaemon(\"page.screenshot\", params, {\n timeoutMs: timeoutMs ?? DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS\n });\n return { success: true, message: \"Screenshot captured.\", data: result };\n}\n\nexport const __test__ = {\n parseScreenshotArgs\n};\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\n\ntype ScreencastStartArgs = {\n sessionId?: string;\n targetId?: string;\n outputDir?: string;\n intervalMs?: number;\n maxFrames?: number;\n timeoutMs?: number;\n};\n\nfunction parseScreencastStartArgs(rawArgs: string[]): ScreencastStartArgs {\n const intervalValue = parseOptionalStringFlag(rawArgs, \"--interval-ms\");\n const maxFramesValue = parseOptionalStringFlag(rawArgs, \"--max-frames\");\n const timeoutValue = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n return {\n sessionId: parseOptionalStringFlag(rawArgs, \"--session-id\"),\n targetId: parseOptionalStringFlag(rawArgs, \"--target-id\"),\n outputDir: parseOptionalStringFlag(rawArgs, \"--output-dir\"),\n intervalMs: typeof intervalValue === \"string\"\n ? parseNumberFlag(intervalValue, \"--interval-ms\", { min: 250 })\n : undefined,\n maxFrames: typeof maxFramesValue === \"string\"\n ? parseNumberFlag(maxFramesValue, \"--max-frames\", { min: 1 })\n : undefined,\n timeoutMs: typeof timeoutValue === \"string\"\n ? parseNumberFlag(timeoutValue, \"--timeout-ms\", { min: 1 })\n : undefined\n };\n}\n\nexport async function runScreencastStart(args: ParsedArgs) {\n const { sessionId, targetId, outputDir, intervalMs, maxFrames, timeoutMs } = parseScreencastStartArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n const result = await callDaemon(\"page.screencast.start\", {\n sessionId,\n ...(typeof targetId === \"string\" ? { targetId } : {}),\n ...(typeof outputDir === \"string\" ? { outputDir } : {}),\n ...(typeof intervalMs === \"number\" ? { intervalMs } : {}),\n ...(typeof maxFrames === \"number\" ? { maxFrames } : {})\n }, {\n timeoutMs: timeoutMs ?? DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS\n });\n return { success: true, message: \"Screencast started.\", data: result };\n}\n\nexport const __test__ = {\n parseScreencastStartArgs\n};\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\n\ntype ScreencastStopArgs = {\n sessionId?: string;\n screencastId?: string;\n timeoutMs?: number;\n};\n\nfunction parseScreencastStopArgs(rawArgs: string[]): ScreencastStopArgs {\n const timeoutValue = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n return {\n sessionId: parseOptionalStringFlag(rawArgs, \"--session-id\"),\n screencastId: parseOptionalStringFlag(rawArgs, \"--screencast-id\"),\n timeoutMs: typeof timeoutValue === \"string\"\n ? parseNumberFlag(timeoutValue, \"--timeout-ms\", { min: 1 })\n : undefined\n };\n}\n\nexport async function runScreencastStop(args: ParsedArgs) {\n const { sessionId, screencastId, timeoutMs } = parseScreencastStopArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n if (!screencastId) {\n throw createUsageError(\"Missing --screencast-id\");\n }\n const result = await callDaemon(\"page.screencast.stop\", { sessionId, screencastId }, {\n timeoutMs: timeoutMs ?? DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS\n });\n return { success: true, message: \"Screencast stopped.\", data: result };\n}\n\nexport const __test__ = {\n parseScreencastStopArgs\n};\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_DIALOG_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseOptionalStringFlag, parseNumberFlag } from \"../../utils/parse\";\n\ntype DialogArgs = {\n sessionId?: string;\n targetId?: string;\n action: \"status\" | \"accept\" | \"dismiss\";\n promptText?: string;\n timeoutMs?: number;\n};\n\nfunction parseDialogAction(value: string | undefined): \"status\" | \"accept\" | \"dismiss\" {\n if (!value) {\n return \"status\";\n }\n if (value === \"status\" || value === \"accept\" || value === \"dismiss\") {\n return value;\n }\n throw createUsageError(`Invalid --action: ${value}`);\n}\n\nfunction parseDialogArgs(rawArgs: string[]): DialogArgs {\n const timeoutValue = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n const parsed: DialogArgs = {\n sessionId: parseOptionalStringFlag(rawArgs, \"--session-id\"),\n targetId: parseOptionalStringFlag(rawArgs, \"--target-id\"),\n action: parseDialogAction(parseOptionalStringFlag(rawArgs, \"--action\")),\n promptText: parseOptionalStringFlag(rawArgs, \"--prompt-text\"),\n timeoutMs: typeof timeoutValue === \"string\"\n ? parseNumberFlag(timeoutValue, \"--timeout-ms\", { min: 1 })\n : undefined\n };\n if (parsed.promptText && parsed.action !== \"accept\") {\n throw createUsageError(\"--prompt-text is only valid with --action accept\");\n }\n return parsed;\n}\n\nexport async function runDialog(args: ParsedArgs) {\n const { sessionId, targetId, action, promptText, timeoutMs } = parseDialogArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const params = {\n sessionId,\n action,\n ...(typeof targetId === \"string\" ? { targetId } : {}),\n ...(typeof promptText === \"string\" ? { promptText } : {})\n };\n const result = await callDaemon(\"page.dialog\", params, {\n timeoutMs: timeoutMs ?? DEFAULT_DIALOG_TRANSPORT_TIMEOUT_MS\n });\n return { success: true, message: \"Dialog request complete.\", data: result };\n}\n\nexport const __test__ = {\n parseDialogArgs\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","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseNumberFlag } from \"../../utils/parse\";\n\ntype DebugTraceSnapshotArgs = {\n sessionId?: string;\n sinceConsoleSeq?: number;\n sinceNetworkSeq?: number;\n sinceExceptionSeq?: number;\n max?: number;\n requestId?: string;\n};\n\nfunction parseDebugTraceSnapshotArgs(rawArgs: string[]): DebugTraceSnapshotArgs {\n const parsed: DebugTraceSnapshotArgs = {};\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--session-id\") {\n const value = rawArgs[index + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--since-console-seq\") {\n const value = rawArgs[index + 1];\n if (!value) throw createUsageError(\"Missing value for --since-console-seq\");\n parsed.sinceConsoleSeq = parseNumberFlag(value, \"--since-console-seq\", { min: 0 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--since-console-seq=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --since-console-seq\");\n parsed.sinceConsoleSeq = parseNumberFlag(value, \"--since-console-seq\", { min: 0 });\n continue;\n }\n\n if (arg === \"--since-network-seq\") {\n const value = rawArgs[index + 1];\n if (!value) throw createUsageError(\"Missing value for --since-network-seq\");\n parsed.sinceNetworkSeq = parseNumberFlag(value, \"--since-network-seq\", { min: 0 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--since-network-seq=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --since-network-seq\");\n parsed.sinceNetworkSeq = parseNumberFlag(value, \"--since-network-seq\", { min: 0 });\n continue;\n }\n\n if (arg === \"--since-exception-seq\") {\n const value = rawArgs[index + 1];\n if (!value) throw createUsageError(\"Missing value for --since-exception-seq\");\n parsed.sinceExceptionSeq = parseNumberFlag(value, \"--since-exception-seq\", { min: 0 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--since-exception-seq=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --since-exception-seq\");\n parsed.sinceExceptionSeq = parseNumberFlag(value, \"--since-exception-seq\", { min: 0 });\n continue;\n }\n\n if (arg === \"--max\") {\n const value = rawArgs[index + 1];\n if (!value) throw createUsageError(\"Missing value for --max\");\n parsed.max = parseNumberFlag(value, \"--max\", { min: 1 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--max=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --max\");\n parsed.max = parseNumberFlag(value, \"--max\", { min: 1 });\n continue;\n }\n\n if (arg === \"--request-id\") {\n const value = rawArgs[index + 1];\n if (!value) throw createUsageError(\"Missing value for --request-id\");\n parsed.requestId = value;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--request-id=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --request-id\");\n parsed.requestId = value;\n continue;\n }\n }\n\n return parsed;\n}\n\nexport async function runDebugTraceSnapshot(args: ParsedArgs) {\n const parsed = parseDebugTraceSnapshotArgs(args.rawArgs);\n if (!parsed.sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const result = await callDaemon(\"devtools.debugTraceSnapshot\", {\n sessionId: parsed.sessionId,\n sinceConsoleSeq: parsed.sinceConsoleSeq,\n sinceNetworkSeq: parsed.sinceNetworkSeq,\n sinceExceptionSeq: parsed.sinceExceptionSeq,\n max: parsed.max,\n requestId: parsed.requestId\n });\n\n return {\n success: true,\n message: \"Debug trace snapshot captured.\",\n data: result\n };\n}\n\nexport const __test__ = {\n parseDebugTraceSnapshotArgs\n};\n","import { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\nimport type { CommandResult } from \"../types\";\n\ntype DesktopTimeoutArgs = {\n timeoutMs?: number;\n};\n\nexport type DesktopReasonArgs = DesktopTimeoutArgs & {\n reason?: string;\n};\n\nexport type DesktopWindowReasonArgs = DesktopReasonArgs & {\n windowId?: string;\n};\n\nexport function parseDesktopTimeoutArgs(rawArgs: string[]): DesktopTimeoutArgs {\n const timeoutValue = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n return {\n timeoutMs: typeof timeoutValue === \"string\"\n ? parseNumberFlag(timeoutValue, \"--timeout-ms\", { min: 1 })\n : undefined\n };\n}\n\nexport function parseDesktopReasonArgs(rawArgs: string[]): DesktopReasonArgs {\n return {\n ...parseDesktopTimeoutArgs(rawArgs),\n reason: parseOptionalStringFlag(rawArgs, \"--reason\")\n };\n}\n\nexport function parseDesktopWindowReasonArgs(rawArgs: string[]): DesktopWindowReasonArgs {\n return {\n ...parseDesktopReasonArgs(rawArgs),\n windowId: parseOptionalStringFlag(rawArgs, \"--window-id\")\n };\n}\n\nexport function requireDesktopReason(reason?: string): string {\n if (!reason) {\n throw createUsageError(\"Missing --reason\");\n }\n return reason;\n}\n\nexport function requireDesktopWindowId(windowId?: string): string {\n if (!windowId) {\n throw createUsageError(\"Missing --window-id\");\n }\n return windowId;\n}\n\nexport async function callDesktopCommand(\n name: string,\n params: Record<string, unknown>,\n timeoutMs?: number\n): Promise<unknown> {\n return callDaemon(name, params, {\n timeoutMs: timeoutMs ?? DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS\n });\n}\n\nexport function desktopCommandResult(message: string, data: unknown): CommandResult {\n return { success: true, message, data };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDesktopCommand, desktopCommandResult, parseDesktopTimeoutArgs } from \"./shared\";\n\nexport async function runDesktopStatus(args: ParsedArgs) {\n const { timeoutMs } = parseDesktopTimeoutArgs(args.rawArgs);\n const result = await callDesktopCommand(\"desktop.status\", {}, timeoutMs);\n return desktopCommandResult(\"Desktop status captured.\", result);\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDesktopCommand, desktopCommandResult, parseDesktopReasonArgs } from \"./shared\";\n\nexport async function runDesktopWindows(args: ParsedArgs) {\n const { reason, timeoutMs } = parseDesktopReasonArgs(args.rawArgs);\n const result = await callDesktopCommand(\"desktop.windows.list\", {\n ...(typeof reason === \"string\" ? { reason } : {})\n }, timeoutMs);\n return desktopCommandResult(\"Desktop windows listed.\", result);\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDesktopCommand, desktopCommandResult, parseDesktopReasonArgs } from \"./shared\";\n\nexport async function runDesktopActiveWindow(args: ParsedArgs) {\n const { reason, timeoutMs } = parseDesktopReasonArgs(args.rawArgs);\n const result = await callDesktopCommand(\"desktop.window.active\", {\n ...(typeof reason === \"string\" ? { reason } : {})\n }, timeoutMs);\n return desktopCommandResult(\"Active desktop window captured.\", result);\n}\n","import type { ParsedArgs } from \"../../args\";\nimport {\n callDesktopCommand,\n desktopCommandResult,\n parseDesktopReasonArgs,\n requireDesktopReason\n} from \"./shared\";\n\nexport async function runDesktopCaptureDesktop(args: ParsedArgs) {\n const { reason, timeoutMs } = parseDesktopReasonArgs(args.rawArgs);\n const result = await callDesktopCommand(\"desktop.capture.desktop\", {\n reason: requireDesktopReason(reason)\n }, timeoutMs);\n return desktopCommandResult(\"Desktop captured.\", result);\n}\n","import type { ParsedArgs } from \"../../args\";\nimport {\n callDesktopCommand,\n desktopCommandResult,\n parseDesktopWindowReasonArgs,\n requireDesktopReason,\n requireDesktopWindowId\n} from \"./shared\";\n\nexport async function runDesktopCaptureWindow(args: ParsedArgs) {\n const { windowId, reason, timeoutMs } = parseDesktopWindowReasonArgs(args.rawArgs);\n const result = await callDesktopCommand(\"desktop.capture.window\", {\n windowId: requireDesktopWindowId(windowId),\n reason: requireDesktopReason(reason)\n }, timeoutMs);\n return desktopCommandResult(\"Desktop window captured.\", result);\n}\n","import type { ParsedArgs } from \"../../args\";\nimport {\n callDesktopCommand,\n desktopCommandResult,\n parseDesktopWindowReasonArgs,\n requireDesktopReason\n} from \"./shared\";\n\nexport async function runDesktopAccessibilitySnapshot(args: ParsedArgs) {\n const { windowId, reason, timeoutMs } = parseDesktopWindowReasonArgs(args.rawArgs);\n const result = await callDesktopCommand(\"desktop.accessibility.snapshot\", {\n reason: requireDesktopReason(reason),\n ...(typeof windowId === \"string\" ? { windowId } : {})\n }, timeoutMs);\n return desktopCommandResult(\"Desktop accessibility snapshot captured.\", result);\n}\n","import { readFileSync } from \"fs\";\nimport type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\ntype CookieImportArgs = {\n sessionId?: string;\n cookies?: string;\n cookiesFile?: string;\n strict?: boolean;\n requestId?: string;\n};\n\ntype CookieRecord = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n expires?: number;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n};\n\nconst requireValue = (value: string | undefined, flag: string): string => {\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst parseStrictValue = (value: string, flag: string): boolean => {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\") return true;\n if (normalized === \"false\") return false;\n throw createUsageError(`Invalid ${flag}: ${value}`);\n};\n\nconst parseCookieImportArgs = (rawArgs: string[]): CookieImportArgs => {\n const parsed: CookieImportArgs = {};\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--session-id\") {\n parsed.sessionId = requireValue(rawArgs[index + 1], \"--session-id\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = requireValue(arg.split(\"=\", 2)[1], \"--session-id\");\n continue;\n }\n\n if (arg === \"--cookies\") {\n parsed.cookies = requireValue(rawArgs[index + 1], \"--cookies\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--cookies=\")) {\n parsed.cookies = requireValue(arg.split(\"=\", 2)[1], \"--cookies\");\n continue;\n }\n\n if (arg === \"--cookies-file\") {\n parsed.cookiesFile = requireValue(rawArgs[index + 1], \"--cookies-file\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--cookies-file=\")) {\n parsed.cookiesFile = requireValue(arg.split(\"=\", 2)[1], \"--cookies-file\");\n continue;\n }\n\n if (arg === \"--strict\") {\n parsed.strict = true;\n continue;\n }\n if (arg?.startsWith(\"--strict=\")) {\n parsed.strict = parseStrictValue(requireValue(arg.split(\"=\", 2)[1], \"--strict\"), \"--strict\");\n continue;\n }\n\n if (arg === \"--request-id\") {\n parsed.requestId = requireValue(rawArgs[index + 1], \"--request-id\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--request-id=\")) {\n parsed.requestId = requireValue(arg.split(\"=\", 2)[1], \"--request-id\");\n continue;\n }\n }\n\n return parsed;\n};\n\nconst parseCookiesJson = (raw: string, source: string): CookieRecord[] => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON\";\n throw createUsageError(`Invalid JSON from ${source}: ${message}`);\n }\n\n if (!Array.isArray(parsed)) {\n throw createUsageError(`Invalid JSON from ${source}: expected array`);\n }\n\n const cookies: CookieRecord[] = [];\n for (const entry of parsed) {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n throw createUsageError(`Invalid JSON from ${source}: expected cookie object entries`);\n }\n const cookie = entry as Record<string, unknown>;\n if (typeof cookie.name !== \"string\" || typeof cookie.value !== \"string\") {\n throw createUsageError(`Invalid JSON from ${source}: each cookie requires string name and value`);\n }\n if (typeof cookie.sameSite !== \"undefined\" && cookie.sameSite !== \"Strict\" && cookie.sameSite !== \"Lax\" && cookie.sameSite !== \"None\") {\n throw createUsageError(`Invalid JSON from ${source}: sameSite must be Strict, Lax, or None`);\n }\n\n cookies.push({\n name: cookie.name,\n value: cookie.value,\n ...(typeof cookie.url === \"string\" ? { url: cookie.url } : {}),\n ...(typeof cookie.domain === \"string\" ? { domain: cookie.domain } : {}),\n ...(typeof cookie.path === \"string\" ? { path: cookie.path } : {}),\n ...(typeof cookie.expires === \"number\" ? { expires: cookie.expires } : {}),\n ...(typeof cookie.httpOnly === \"boolean\" ? { httpOnly: cookie.httpOnly } : {}),\n ...(typeof cookie.secure === \"boolean\" ? { secure: cookie.secure } : {}),\n ...(cookie.sameSite ? { sameSite: cookie.sameSite as \"Strict\" | \"Lax\" | \"None\" } : {})\n });\n }\n\n return cookies;\n};\n\nconst resolveCookies = (parsed: CookieImportArgs): CookieRecord[] => {\n const hasInline = typeof parsed.cookies === \"string\";\n const hasFile = typeof parsed.cookiesFile === \"string\";\n\n if (!hasInline && !hasFile) {\n throw createUsageError(\"Missing --cookies or --cookies-file\");\n }\n if (hasInline && hasFile) {\n throw createUsageError(\"Provide only one cookies source: --cookies or --cookies-file.\");\n }\n\n if (hasInline) {\n return parseCookiesJson(parsed.cookies ?? \"\", \"--cookies\");\n }\n\n let raw = \"\";\n try {\n raw = readFileSync(parsed.cookiesFile ?? \"\", \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file\";\n throw createUsageError(`Invalid --cookies-file: ${message}`);\n }\n\n if (!raw.trim()) {\n throw createUsageError(\"Invalid JSON from --cookies-file: empty input\");\n }\n\n return parseCookiesJson(raw, \"--cookies-file\");\n};\n\nexport async function runCookieImport(args: ParsedArgs) {\n const parsed = parseCookieImportArgs(args.rawArgs);\n if (!parsed.sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const cookies = resolveCookies(parsed);\n const result = await callDaemon(\"session.cookieImport\", {\n sessionId: parsed.sessionId,\n cookies,\n strict: parsed.strict ?? true,\n requestId: parsed.requestId\n });\n\n const imported = typeof (result as { imported?: unknown }).imported === \"number\"\n ? (result as { imported: number }).imported\n : cookies.length;\n\n return {\n success: true,\n message: `Cookies imported: ${imported}`,\n data: result\n };\n}\n\nexport const __test__ = {\n parseCookieImportArgs,\n parseCookiesJson,\n resolveCookies\n};\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\ntype CookieListArgs = {\n sessionId?: string;\n urls: string[];\n requestId?: string;\n};\n\nconst requireValue = (value: string | undefined, flag: string): string => {\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst normalizeCookieUrls = (values: string[]): string[] => {\n const normalized: string[] = [];\n const seen = new Set<string>();\n\n for (const value of values) {\n const trimmed = value.trim();\n if (!trimmed) {\n continue;\n }\n\n let parsedUrl: URL;\n try {\n parsedUrl = new URL(trimmed);\n } catch {\n throw createUsageError(`Invalid --url value: ${trimmed}`);\n }\n if (parsedUrl.protocol !== \"http:\" && parsedUrl.protocol !== \"https:\") {\n throw createUsageError(`Invalid --url protocol: ${trimmed}`);\n }\n\n const normalizedUrl = parsedUrl.toString();\n if (seen.has(normalizedUrl)) {\n continue;\n }\n seen.add(normalizedUrl);\n normalized.push(normalizedUrl);\n }\n\n return normalized;\n};\n\nconst parseCookieListArgs = (rawArgs: string[]): CookieListArgs => {\n const parsed: CookieListArgs = { urls: [] };\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--session-id\") {\n parsed.sessionId = requireValue(rawArgs[index + 1], \"--session-id\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = requireValue(arg.split(\"=\", 2)[1], \"--session-id\");\n continue;\n }\n\n if (arg === \"--url\") {\n const rawValue = requireValue(rawArgs[index + 1], \"--url\");\n parsed.urls.push(...rawValue.split(\",\"));\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--url=\")) {\n parsed.urls.push(...requireValue(arg.split(\"=\", 2)[1], \"--url\").split(\",\"));\n continue;\n }\n\n if (arg === \"--request-id\") {\n parsed.requestId = requireValue(rawArgs[index + 1], \"--request-id\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--request-id=\")) {\n parsed.requestId = requireValue(arg.split(\"=\", 2)[1], \"--request-id\");\n continue;\n }\n }\n\n parsed.urls = normalizeCookieUrls(parsed.urls);\n return parsed;\n};\n\nexport async function runCookieList(args: ParsedArgs) {\n const parsed = parseCookieListArgs(args.rawArgs);\n if (!parsed.sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const result = await callDaemon(\"session.cookieList\", {\n sessionId: parsed.sessionId,\n ...(parsed.urls.length > 0 ? { urls: parsed.urls } : {}),\n requestId: parsed.requestId\n });\n\n const count = typeof (result as { count?: unknown }).count === \"number\"\n ? (result as { count: number }).count\n : Array.isArray((result as { cookies?: unknown[] }).cookies)\n ? (result as { cookies: unknown[] }).cookies.length\n : 0;\n\n return {\n success: true,\n message: `Cookies listed: ${count}`,\n data: result\n };\n}\n\nexport const __test__ = {\n parseCookieListArgs,\n normalizeCookieUrls\n};\n","import type { ParsedArgs } from \"../args\";\nimport { callDaemon } from \"../client\";\nimport { createUsageError } from \"../errors\";\nimport { DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS } from \"../transport-timeouts\";\nimport { parseNumberFlag } from \"../utils/parse\";\nimport { isChallengeAutomationMode, type ChallengeAutomationMode } from \"../../challenges/types\";\n\ntype MacroResolveArgs = {\n expression?: string;\n defaultProvider?: string;\n includeCatalog?: boolean;\n execute?: boolean;\n timeoutMs?: number;\n challengeAutomationMode?: ChallengeAutomationMode;\n};\n\nconst MACRO_TRANSPORT_TIMEOUT_BUFFER_MS = 60_000;\n\nconst deriveMacroTransportTimeoutMs = (timeoutMs: number): number => {\n return Math.max(\n DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS,\n timeoutMs + MACRO_TRANSPORT_TIMEOUT_BUFFER_MS\n );\n};\n\nconst requireValue = (value: string | undefined, flag: string): string => {\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst asRecord = (value: unknown): Record<string, unknown> | null => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n};\n\nconst hasExecutionBlocker = (result: unknown): boolean => {\n const execution = asRecord(asRecord(result)?.execution);\n const meta = asRecord(execution?.meta);\n return asRecord(meta?.blocker) !== null;\n};\n\nconst buildMacroResolveMessage = (execute: boolean, result: unknown): string => {\n if (!execute) {\n return \"Macro resolved.\";\n }\n if (hasExecutionBlocker(result)) {\n return \"Macro resolved, but execution is blocked and needs follow-up.\";\n }\n return \"Macro resolved and executed.\";\n};\n\nconst parseMacroResolveArgs = (rawArgs: string[]): MacroResolveArgs => {\n const parsed: MacroResolveArgs = {};\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--expression\") {\n parsed.expression = requireValue(rawArgs[index + 1], \"--expression\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--expression=\")) {\n parsed.expression = requireValue(arg.split(\"=\", 2)[1], \"--expression\");\n continue;\n }\n\n if (arg === \"--default-provider\") {\n parsed.defaultProvider = requireValue(rawArgs[index + 1], \"--default-provider\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--default-provider=\")) {\n parsed.defaultProvider = requireValue(arg.split(\"=\", 2)[1], \"--default-provider\");\n continue;\n }\n\n if (arg === \"--include-catalog\") {\n parsed.includeCatalog = true;\n continue;\n }\n\n if (arg === \"--execute\") {\n parsed.execute = true;\n continue;\n }\n\n if (arg === \"--timeout-ms\") {\n const value = requireValue(rawArgs[index + 1], \"--timeout-ms\");\n parsed.timeoutMs = parseNumberFlag(value, \"--timeout-ms\", { min: 1 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = parseNumberFlag(requireValue(arg.split(\"=\", 2)[1], \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n continue;\n }\n\n if (arg === \"--challenge-automation-mode\") {\n const value = requireValue(rawArgs[index + 1], \"--challenge-automation-mode\");\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--challenge-automation-mode=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--challenge-automation-mode\");\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n continue;\n }\n }\n\n return parsed;\n};\n\nexport async function runMacroResolve(args: ParsedArgs) {\n const parsed = parseMacroResolveArgs(args.rawArgs);\n if (!parsed.expression) {\n throw createUsageError(\"Missing --expression\");\n }\n\n const params = {\n expression: parsed.expression,\n defaultProvider: parsed.defaultProvider,\n includeCatalog: parsed.includeCatalog ?? false,\n execute: parsed.execute ?? false,\n ...(typeof parsed.timeoutMs === \"number\" ? { timeoutMs: parsed.timeoutMs } : {}),\n ...(parsed.challengeAutomationMode ? { challengeAutomationMode: parsed.challengeAutomationMode } : {})\n };\n const result = typeof parsed.timeoutMs === \"number\"\n ? await callDaemon(\"macro.resolve\", params, {\n timeoutMs: deriveMacroTransportTimeoutMs(parsed.timeoutMs)\n })\n : await callDaemon(\"macro.resolve\", params);\n\n return {\n success: true,\n message: buildMacroResolveMessage(parsed.execute ?? false, result),\n data: result\n };\n}\n\nexport const __test__ = {\n parseMacroResolveArgs\n};\n","import type { ParsedArgs } from \"../args\";\nimport { callDaemon } from \"../client\";\nimport { createUsageError } from \"../errors\";\nimport { parseNumberFlag } from \"../utils/parse\";\nimport { buildWorkflowCompletionMessage } from \"../utils/workflow-message\";\nimport { DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS } from \"../transport-timeouts\";\nimport { isChallengeAutomationMode, type ChallengeAutomationMode } from \"../../challenges/types\";\n\ntype ResearchCommandArgs = {\n topic?: string;\n days?: number;\n from?: string;\n to?: string;\n sourceSelection?: \"auto\" | \"web\" | \"community\" | \"social\" | \"shopping\" | \"all\";\n sources?: Array<\"web\" | \"community\" | \"social\" | \"shopping\">;\n mode?: \"compact\" | \"json\" | \"md\" | \"context\" | \"path\";\n includeEngagement?: boolean;\n limitPerSource?: number;\n timeoutMs?: number;\n outputDir?: string;\n ttlHours?: number;\n useCookies?: boolean;\n challengeAutomationMode?: ChallengeAutomationMode;\n cookiePolicyOverride?: \"off\" | \"auto\" | \"required\";\n};\n\nconst SOURCE_VALUES = new Set([\"web\", \"community\", \"social\", \"shopping\"]);\nconst SOURCE_SELECTION_VALUES = new Set([\"auto\", \"web\", \"community\", \"social\", \"shopping\", \"all\"]);\nconst MODE_VALUES = new Set([\"compact\", \"json\", \"md\", \"context\", \"path\"]);\nconst COOKIE_POLICY_VALUES = new Set([\"off\", \"auto\", \"required\"]);\nconst requireValue = (rawArgs: string[], index: number, flag: string): string => {\n const value = rawArgs[index + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst parseBoolean = (value: string, flag: string): boolean => {\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n throw createUsageError(`Invalid ${flag}: ${value}`);\n};\n\nconst parseSources = (raw: string): Array<\"web\" | \"community\" | \"social\" | \"shopping\"> => {\n const parsed = raw\n .split(\",\")\n .map((entry) => entry.trim().toLowerCase())\n .filter(Boolean);\n\n if (parsed.length === 0) {\n throw createUsageError(\"--sources requires at least one source\");\n }\n\n const deduped = [...new Set(parsed)];\n for (const source of deduped) {\n if (!SOURCE_VALUES.has(source)) {\n throw createUsageError(`Invalid --sources value: ${source}`);\n }\n }\n return deduped as Array<\"web\" | \"community\" | \"social\" | \"shopping\">;\n};\n\nconst parseResearchRunArgs = (rawArgs: string[]): ResearchCommandArgs => {\n const parsed: ResearchCommandArgs = {};\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--topic\") {\n parsed.topic = requireValue(rawArgs, index, \"--topic\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--topic=\")) {\n parsed.topic = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--days\") {\n parsed.days = parseNumberFlag(requireValue(rawArgs, index, \"--days\"), \"--days\", { min: 1, max: 365 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--days=\")) {\n parsed.days = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--days\", { min: 1, max: 365 });\n continue;\n }\n\n if (arg === \"--from\") {\n parsed.from = requireValue(rawArgs, index, \"--from\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--from=\")) {\n parsed.from = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--to\") {\n parsed.to = requireValue(rawArgs, index, \"--to\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--to=\")) {\n parsed.to = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--source-selection\") {\n const value = requireValue(rawArgs, index, \"--source-selection\").toLowerCase();\n if (!SOURCE_SELECTION_VALUES.has(value)) {\n throw createUsageError(`Invalid --source-selection: ${value}`);\n }\n parsed.sourceSelection = value as ResearchCommandArgs[\"sourceSelection\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--source-selection=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!SOURCE_SELECTION_VALUES.has(value)) {\n throw createUsageError(`Invalid --source-selection: ${value}`);\n }\n parsed.sourceSelection = value as ResearchCommandArgs[\"sourceSelection\"];\n continue;\n }\n\n if (arg === \"--sources\") {\n parsed.sources = parseSources(requireValue(rawArgs, index, \"--sources\"));\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--sources=\")) {\n parsed.sources = parseSources(arg.split(\"=\", 2)[1] ?? \"\");\n continue;\n }\n\n if (arg === \"--mode\") {\n const value = requireValue(rawArgs, index, \"--mode\").toLowerCase();\n if (!MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --mode: ${value}`);\n }\n parsed.mode = value as ResearchCommandArgs[\"mode\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--mode=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --mode: ${value}`);\n }\n parsed.mode = value as ResearchCommandArgs[\"mode\"];\n continue;\n }\n\n if (arg === \"--include-engagement\") {\n parsed.includeEngagement = true;\n continue;\n }\n\n if (arg === \"--limit-per-source\") {\n parsed.limitPerSource = parseNumberFlag(requireValue(rawArgs, index, \"--limit-per-source\"), \"--limit-per-source\", { min: 1, max: 100 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--limit-per-source=\")) {\n parsed.limitPerSource = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--limit-per-source\", { min: 1, max: 100 });\n continue;\n }\n\n if (arg === \"--timeout-ms\") {\n parsed.timeoutMs = parseNumberFlag(requireValue(rawArgs, index, \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--timeout-ms\", { min: 1 });\n continue;\n }\n\n if (arg === \"--output-dir\") {\n parsed.outputDir = requireValue(rawArgs, index, \"--output-dir\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--output-dir=\")) {\n parsed.outputDir = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--ttl-hours\") {\n parsed.ttlHours = parseNumberFlag(requireValue(rawArgs, index, \"--ttl-hours\"), \"--ttl-hours\", { min: 1, max: 168 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--ttl-hours=\")) {\n parsed.ttlHours = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--ttl-hours\", { min: 1, max: 168 });\n continue;\n }\n\n if (arg === \"--use-cookies\") {\n parsed.useCookies = true;\n continue;\n }\n if (arg?.startsWith(\"--use-cookies=\")) {\n parsed.useCookies = parseBoolean(arg.split(\"=\", 2)[1] ?? \"\", \"--use-cookies\");\n continue;\n }\n\n if (arg === \"--challenge-automation-mode\") {\n const value = requireValue(rawArgs, index, \"--challenge-automation-mode\");\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--challenge-automation-mode=\")) {\n const value = arg.split(\"=\", 2)[1] ?? \"\";\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n continue;\n }\n\n if (arg === \"--cookie-policy-override\" || arg === \"--cookie-policy\") {\n const value = requireValue(rawArgs, index, arg).toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid ${arg}: ${value}`);\n }\n parsed.cookiePolicyOverride = value as ResearchCommandArgs[\"cookiePolicyOverride\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--cookie-policy-override=\") || arg?.startsWith(\"--cookie-policy=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid --cookie-policy-override: ${value}`);\n }\n parsed.cookiePolicyOverride = value as ResearchCommandArgs[\"cookiePolicyOverride\"];\n continue;\n }\n }\n\n return parsed;\n};\n\nexport async function runResearchCommand(args: ParsedArgs) {\n const [subcommand, ...rest] = args.rawArgs;\n if (subcommand !== \"run\") {\n throw createUsageError(\"Usage: opendevbrowser research run --topic <value> [options]\");\n }\n\n const parsed = parseResearchRunArgs(rest);\n if (!parsed.topic?.trim()) {\n throw createUsageError(\"Missing --topic\");\n }\n\n const payload = {\n topic: parsed.topic,\n days: parsed.days,\n from: parsed.from,\n to: parsed.to,\n sourceSelection: parsed.sourceSelection,\n sources: parsed.sources,\n mode: parsed.mode ?? \"compact\",\n includeEngagement: parsed.includeEngagement ?? false,\n limitPerSource: parsed.limitPerSource,\n timeoutMs: parsed.timeoutMs ?? DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS,\n outputDir: parsed.outputDir,\n ttlHours: parsed.ttlHours,\n useCookies: parsed.useCookies,\n challengeAutomationMode: parsed.challengeAutomationMode,\n cookiePolicyOverride: parsed.cookiePolicyOverride\n };\n\n const data = await callDaemon(\"research.run\", payload);\n\n return {\n success: true,\n message: buildWorkflowCompletionMessage(\"Research workflow\", data),\n data\n };\n}\n\nexport const __test__ = {\n parseResearchRunArgs,\n parseSources\n};\n","import type { ParsedArgs } from \"../args\";\nimport { callDaemon } from \"../client\";\nimport { createUsageError } from \"../errors\";\nimport { parseNumberFlag } from \"../utils/parse\";\nimport { buildWorkflowCompletionMessage } from \"../utils/workflow-message\";\nimport { DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS } from \"../transport-timeouts\";\nimport { isChallengeAutomationMode, type ChallengeAutomationMode } from \"../../challenges/types\";\nimport type { WorkflowBrowserMode } from \"../../providers/types\";\n\ntype ShoppingCommandArgs = {\n query?: string;\n providers?: string[];\n budget?: number;\n region?: string;\n browserMode?: WorkflowBrowserMode;\n sort?: \"best_deal\" | \"lowest_price\" | \"highest_rating\" | \"fastest_shipping\";\n mode?: \"compact\" | \"json\" | \"md\" | \"context\" | \"path\";\n timeoutMs?: number;\n outputDir?: string;\n ttlHours?: number;\n useCookies?: boolean;\n challengeAutomationMode?: ChallengeAutomationMode;\n cookiePolicyOverride?: \"off\" | \"auto\" | \"required\";\n};\n\nconst SORT_VALUES = new Set([\"best_deal\", \"lowest_price\", \"highest_rating\", \"fastest_shipping\"]);\nconst MODE_VALUES = new Set([\"compact\", \"json\", \"md\", \"context\", \"path\"]);\nconst COOKIE_POLICY_VALUES = new Set([\"off\", \"auto\", \"required\"]);\nconst BROWSER_MODE_VALUES = new Set([\"auto\", \"extension\", \"managed\"]);\nconst SHOPPING_TRANSPORT_TIMEOUT_BUFFER_MS = 60_000;\n\nconst deriveShoppingTransportTimeoutMs = (timeoutMs: number): number => {\n return Math.max(\n DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS,\n timeoutMs + SHOPPING_TRANSPORT_TIMEOUT_BUFFER_MS\n );\n};\n\nconst requireValue = (rawArgs: string[], index: number, flag: string): string => {\n const value = rawArgs[index + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst parseBoolean = (value: string, flag: string): boolean => {\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n throw createUsageError(`Invalid ${flag}: ${value}`);\n};\n\nconst parseProviders = (raw: string): string[] => {\n const providers = raw\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean);\n if (providers.length === 0) {\n throw createUsageError(\"--providers requires at least one provider\");\n }\n return [...new Set(providers)];\n};\n\nconst parseShoppingRunArgs = (rawArgs: string[]): ShoppingCommandArgs => {\n const parsed: ShoppingCommandArgs = {};\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--query\") {\n parsed.query = requireValue(rawArgs, index, \"--query\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--query=\")) {\n parsed.query = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--providers\") {\n parsed.providers = parseProviders(requireValue(rawArgs, index, \"--providers\"));\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--providers=\")) {\n parsed.providers = parseProviders(arg.split(\"=\", 2)[1] ?? \"\");\n continue;\n }\n\n if (arg === \"--budget\") {\n parsed.budget = parseNumberFlag(requireValue(rawArgs, index, \"--budget\"), \"--budget\", { min: 1, integer: false });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--budget=\")) {\n parsed.budget = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--budget\", { min: 1, integer: false });\n continue;\n }\n\n if (arg === \"--region\") {\n parsed.region = requireValue(rawArgs, index, \"--region\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--region=\")) {\n parsed.region = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--browser-mode\") {\n const value = requireValue(rawArgs, index, \"--browser-mode\").toLowerCase();\n if (!BROWSER_MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --browser-mode: ${value}`);\n }\n parsed.browserMode = value as WorkflowBrowserMode;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--browser-mode=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!BROWSER_MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --browser-mode: ${value}`);\n }\n parsed.browserMode = value as WorkflowBrowserMode;\n continue;\n }\n\n if (arg === \"--sort\") {\n const value = requireValue(rawArgs, index, \"--sort\").toLowerCase();\n if (!SORT_VALUES.has(value)) {\n throw createUsageError(`Invalid --sort: ${value}`);\n }\n parsed.sort = value as ShoppingCommandArgs[\"sort\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--sort=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!SORT_VALUES.has(value)) {\n throw createUsageError(`Invalid --sort: ${value}`);\n }\n parsed.sort = value as ShoppingCommandArgs[\"sort\"];\n continue;\n }\n\n if (arg === \"--mode\") {\n const value = requireValue(rawArgs, index, \"--mode\").toLowerCase();\n if (!MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --mode: ${value}`);\n }\n parsed.mode = value as ShoppingCommandArgs[\"mode\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--mode=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --mode: ${value}`);\n }\n parsed.mode = value as ShoppingCommandArgs[\"mode\"];\n continue;\n }\n\n if (arg === \"--timeout-ms\") {\n parsed.timeoutMs = parseNumberFlag(requireValue(rawArgs, index, \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--timeout-ms\", { min: 1 });\n continue;\n }\n\n if (arg === \"--output-dir\") {\n parsed.outputDir = requireValue(rawArgs, index, \"--output-dir\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--output-dir=\")) {\n parsed.outputDir = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--ttl-hours\") {\n parsed.ttlHours = parseNumberFlag(requireValue(rawArgs, index, \"--ttl-hours\"), \"--ttl-hours\", { min: 1, max: 168 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--ttl-hours=\")) {\n parsed.ttlHours = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--ttl-hours\", { min: 1, max: 168 });\n continue;\n }\n\n if (arg === \"--use-cookies\") {\n parsed.useCookies = true;\n continue;\n }\n if (arg?.startsWith(\"--use-cookies=\")) {\n parsed.useCookies = parseBoolean(arg.split(\"=\", 2)[1] ?? \"\", \"--use-cookies\");\n continue;\n }\n\n if (arg === \"--challenge-automation-mode\") {\n const value = requireValue(rawArgs, index, \"--challenge-automation-mode\");\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--challenge-automation-mode=\")) {\n const value = arg.split(\"=\", 2)[1] ?? \"\";\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n continue;\n }\n\n if (arg === \"--cookie-policy-override\" || arg === \"--cookie-policy\") {\n const value = requireValue(rawArgs, index, arg).toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid ${arg}: ${value}`);\n }\n parsed.cookiePolicyOverride = value as ShoppingCommandArgs[\"cookiePolicyOverride\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--cookie-policy-override=\") || arg?.startsWith(\"--cookie-policy=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid --cookie-policy-override: ${value}`);\n }\n parsed.cookiePolicyOverride = value as ShoppingCommandArgs[\"cookiePolicyOverride\"];\n continue;\n }\n }\n\n return parsed;\n};\n\nexport async function runShoppingCommand(args: ParsedArgs) {\n const [subcommand, ...rest] = args.rawArgs;\n if (subcommand !== \"run\") {\n throw createUsageError(\"Usage: opendevbrowser shopping run --query <value> [options]\");\n }\n\n const parsed = parseShoppingRunArgs(rest);\n if (!parsed.query?.trim()) {\n throw createUsageError(\"Missing --query\");\n }\n\n const payload = {\n query: parsed.query,\n providers: parsed.providers,\n budget: parsed.budget,\n region: parsed.region,\n browserMode: parsed.browserMode,\n sort: parsed.sort,\n mode: parsed.mode ?? \"compact\",\n timeoutMs: parsed.timeoutMs ?? DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS,\n outputDir: parsed.outputDir,\n ttlHours: parsed.ttlHours,\n useCookies: parsed.useCookies,\n challengeAutomationMode: parsed.challengeAutomationMode,\n cookiePolicyOverride: parsed.cookiePolicyOverride\n };\n\n const data = await callDaemon(\"shopping.run\", payload, {\n timeoutMs: deriveShoppingTransportTimeoutMs(payload.timeoutMs)\n });\n\n return {\n success: true,\n message: buildWorkflowCompletionMessage(\"Shopping workflow\", data),\n data\n };\n}\n\nexport const __test__ = {\n parseShoppingRunArgs,\n parseProviders,\n deriveShoppingTransportTimeoutMs\n};\n","import type { ParsedArgs } from \"../args\";\nimport { callDaemon } from \"../client\";\nimport { createUsageError } from \"../errors\";\nimport { parseNumberFlag } from \"../utils/parse\";\nimport { buildWorkflowCompletionMessage } from \"../utils/workflow-message\";\nimport { DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS } from \"../transport-timeouts\";\nimport { isChallengeAutomationMode, type ChallengeAutomationMode } from \"../../challenges/types\";\n\ntype ProductVideoCommandArgs = {\n productUrl?: string;\n productName?: string;\n providerHint?: string;\n includeScreenshots?: boolean;\n includeAllImages?: boolean;\n includeCopy?: boolean;\n outputDir?: string;\n ttlHours?: number;\n timeoutMs?: number;\n useCookies?: boolean;\n challengeAutomationMode?: ChallengeAutomationMode;\n cookiePolicyOverride?: \"off\" | \"auto\" | \"required\";\n};\n\nconst requireValue = (rawArgs: string[], index: number, flag: string): string => {\n const value = rawArgs[index + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst parseBoolean = (value: string, flag: string): boolean => {\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n throw createUsageError(`Invalid ${flag}: ${value}`);\n};\n\nconst COOKIE_POLICY_VALUES = new Set([\"off\", \"auto\", \"required\"]);\nconst parseProductVideoArgs = (rawArgs: string[]): ProductVideoCommandArgs => {\n const parsed: ProductVideoCommandArgs = {};\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--product-url\") {\n parsed.productUrl = requireValue(rawArgs, index, \"--product-url\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--product-url=\")) {\n parsed.productUrl = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--product-name\") {\n parsed.productName = requireValue(rawArgs, index, \"--product-name\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--product-name=\")) {\n parsed.productName = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--provider-hint\") {\n parsed.providerHint = requireValue(rawArgs, index, \"--provider-hint\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--provider-hint=\")) {\n parsed.providerHint = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--include-screenshots\") {\n parsed.includeScreenshots = true;\n continue;\n }\n if (arg?.startsWith(\"--include-screenshots=\")) {\n parsed.includeScreenshots = parseBoolean(arg.split(\"=\", 2)[1] ?? \"\", \"--include-screenshots\");\n continue;\n }\n\n if (arg === \"--include-all-images\") {\n parsed.includeAllImages = true;\n continue;\n }\n if (arg?.startsWith(\"--include-all-images=\")) {\n parsed.includeAllImages = parseBoolean(arg.split(\"=\", 2)[1] ?? \"\", \"--include-all-images\");\n continue;\n }\n\n if (arg === \"--include-copy\") {\n parsed.includeCopy = true;\n continue;\n }\n if (arg?.startsWith(\"--include-copy=\")) {\n parsed.includeCopy = parseBoolean(arg.split(\"=\", 2)[1] ?? \"\", \"--include-copy\");\n continue;\n }\n\n if (arg === \"--output-dir\") {\n parsed.outputDir = requireValue(rawArgs, index, \"--output-dir\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--output-dir=\")) {\n parsed.outputDir = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--ttl-hours\") {\n parsed.ttlHours = parseNumberFlag(requireValue(rawArgs, index, \"--ttl-hours\"), \"--ttl-hours\", { min: 1, max: 168 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--ttl-hours=\")) {\n parsed.ttlHours = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--ttl-hours\", { min: 1, max: 168 });\n continue;\n }\n\n if (arg === \"--timeout-ms\") {\n parsed.timeoutMs = parseNumberFlag(requireValue(rawArgs, index, \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--timeout-ms\", { min: 1 });\n continue;\n }\n\n if (arg === \"--use-cookies\") {\n parsed.useCookies = true;\n continue;\n }\n if (arg?.startsWith(\"--use-cookies=\")) {\n parsed.useCookies = parseBoolean(arg.split(\"=\", 2)[1] ?? \"\", \"--use-cookies\");\n continue;\n }\n\n if (arg === \"--challenge-automation-mode\") {\n const value = requireValue(rawArgs, index, \"--challenge-automation-mode\");\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--challenge-automation-mode=\")) {\n const value = arg.split(\"=\", 2)[1] ?? \"\";\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n continue;\n }\n\n if (arg === \"--cookie-policy-override\" || arg === \"--cookie-policy\") {\n const value = requireValue(rawArgs, index, arg).toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid ${arg}: ${value}`);\n }\n parsed.cookiePolicyOverride = value as ProductVideoCommandArgs[\"cookiePolicyOverride\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--cookie-policy-override=\") || arg?.startsWith(\"--cookie-policy=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid --cookie-policy-override: ${value}`);\n }\n parsed.cookiePolicyOverride = value as ProductVideoCommandArgs[\"cookiePolicyOverride\"];\n continue;\n }\n }\n\n return parsed;\n};\n\nexport async function runProductVideoCommand(args: ParsedArgs) {\n const [subcommand, ...rest] = args.rawArgs;\n if (subcommand !== \"run\") {\n throw createUsageError(\"Usage: opendevbrowser product-video run --product-url <url> | --product-name <name>\");\n }\n\n const parsed = parseProductVideoArgs(rest);\n if (!parsed.productUrl && !parsed.productName) {\n throw createUsageError(\"Missing --product-url or --product-name\");\n }\n\n const timeoutMs = parsed.timeoutMs ?? DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS;\n const data = await callDaemon(\"product.video.run\", {\n product_url: parsed.productUrl,\n product_name: parsed.productName,\n provider_hint: parsed.providerHint,\n include_screenshots: parsed.includeScreenshots,\n include_all_images: parsed.includeAllImages,\n include_copy: parsed.includeCopy,\n output_dir: parsed.outputDir,\n ttl_hours: parsed.ttlHours,\n timeoutMs,\n useCookies: parsed.useCookies,\n challengeAutomationMode: parsed.challengeAutomationMode,\n cookiePolicyOverride: parsed.cookiePolicyOverride\n });\n\n return {\n success: true,\n message: buildWorkflowCompletionMessage(\"Product video asset workflow\", data),\n data\n };\n}\n\nexport const __test__ = {\n parseProductVideoArgs,\n parseBoolean\n};\n","import type { ParsedArgs } from \"../args\";\nimport { callDaemon } from \"../client\";\nimport { createUsageError } from \"../errors\";\nimport { DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS } from \"../transport-timeouts\";\nimport {\n parseBooleanFlag,\n parseNumberFlag,\n parseOptionalStringFlag,\n parseRepeatedStringFlag\n} from \"../utils/parse\";\nimport { buildWorkflowCompletionMessage } from \"../utils/workflow-message\";\nimport { isChallengeAutomationMode, type ChallengeAutomationMode } from \"../../challenges/types\";\n\ntype InspiredesignCommandArgs = {\n brief?: string;\n urls?: string[];\n captureMode?: \"off\" | \"deep\";\n includePrototypeGuidance?: boolean;\n mode?: \"compact\" | \"json\" | \"md\" | \"context\" | \"path\";\n timeoutMs?: number;\n outputDir?: string;\n ttlHours?: number;\n useCookies?: boolean;\n challengeAutomationMode?: ChallengeAutomationMode;\n cookiePolicyOverride?: \"off\" | \"auto\" | \"required\";\n};\n\nconst MODE_VALUES = new Set([\"compact\", \"json\", \"md\", \"context\", \"path\"]);\nconst CAPTURE_MODE_VALUES = new Set([\"off\", \"deep\"]);\nconst COOKIE_POLICY_VALUES = new Set([\"off\", \"auto\", \"required\"]);\n\nconst requireValue = (rawArgs: string[], index: number, flag: string): string => {\n const value = rawArgs[index + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst parseInspiredesignRunArgs = (rawArgs: string[]): InspiredesignCommandArgs => {\n const parsed: InspiredesignCommandArgs = {\n brief: parseOptionalStringFlag(rawArgs, \"--brief\"),\n urls: parseRepeatedStringFlag(rawArgs, \"--url\")\n };\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--brief\" || arg === \"--url\") {\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--brief=\") || arg?.startsWith(\"--url=\")) {\n continue;\n }\n\n if (arg === \"--capture-mode\") {\n const value = requireValue(rawArgs, index, \"--capture-mode\").toLowerCase();\n if (!CAPTURE_MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --capture-mode: ${value}`);\n }\n parsed.captureMode = value as InspiredesignCommandArgs[\"captureMode\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--capture-mode=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!CAPTURE_MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --capture-mode: ${value}`);\n }\n parsed.captureMode = value as InspiredesignCommandArgs[\"captureMode\"];\n continue;\n }\n\n if (arg === \"--include-prototype-guidance\") {\n parsed.includePrototypeGuidance = true;\n continue;\n }\n if (arg?.startsWith(\"--include-prototype-guidance=\")) {\n parsed.includePrototypeGuidance = parseBooleanFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--include-prototype-guidance\");\n continue;\n }\n\n if (arg === \"--mode\") {\n const value = requireValue(rawArgs, index, \"--mode\").toLowerCase();\n if (!MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --mode: ${value}`);\n }\n parsed.mode = value as InspiredesignCommandArgs[\"mode\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--mode=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --mode: ${value}`);\n }\n parsed.mode = value as InspiredesignCommandArgs[\"mode\"];\n continue;\n }\n\n if (arg === \"--timeout-ms\") {\n parsed.timeoutMs = parseNumberFlag(requireValue(rawArgs, index, \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--timeout-ms\", { min: 1 });\n continue;\n }\n\n if (arg === \"--output-dir\") {\n parsed.outputDir = requireValue(rawArgs, index, \"--output-dir\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--output-dir=\")) {\n parsed.outputDir = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--ttl-hours\") {\n parsed.ttlHours = parseNumberFlag(requireValue(rawArgs, index, \"--ttl-hours\"), \"--ttl-hours\", { min: 1, max: 168 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--ttl-hours=\")) {\n parsed.ttlHours = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--ttl-hours\", { min: 1, max: 168 });\n continue;\n }\n\n if (arg === \"--use-cookies\") {\n parsed.useCookies = true;\n continue;\n }\n if (arg?.startsWith(\"--use-cookies=\")) {\n parsed.useCookies = parseBooleanFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--use-cookies\");\n continue;\n }\n\n if (arg === \"--challenge-automation-mode\") {\n const value = requireValue(rawArgs, index, \"--challenge-automation-mode\");\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--challenge-automation-mode=\")) {\n const value = arg.split(\"=\", 2)[1] ?? \"\";\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n continue;\n }\n\n if (arg === \"--cookie-policy-override\" || arg === \"--cookie-policy\") {\n const value = requireValue(rawArgs, index, arg).toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid ${arg}: ${value}`);\n }\n parsed.cookiePolicyOverride = value as InspiredesignCommandArgs[\"cookiePolicyOverride\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--cookie-policy-override=\") || arg?.startsWith(\"--cookie-policy=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid --cookie-policy-override: ${value}`);\n }\n parsed.cookiePolicyOverride = value as InspiredesignCommandArgs[\"cookiePolicyOverride\"];\n }\n }\n\n return parsed;\n};\n\nexport async function runInspiredesignCommand(args: ParsedArgs) {\n const [subcommand, ...rest] = args.rawArgs;\n if (subcommand !== \"run\") {\n throw createUsageError(\"Usage: opendevbrowser inspiredesign run --brief <value> [--url <url>] [options]\");\n }\n\n const parsed = parseInspiredesignRunArgs(rest);\n if (!parsed.brief?.trim()) {\n throw createUsageError(\"Missing --brief\");\n }\n\n const data = await callDaemon(\"inspiredesign.run\", {\n brief: parsed.brief,\n urls: parsed.urls,\n captureMode: parsed.captureMode ?? \"off\",\n includePrototypeGuidance: parsed.includePrototypeGuidance,\n mode: parsed.mode ?? \"compact\",\n timeoutMs: parsed.timeoutMs ?? DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS,\n outputDir: parsed.outputDir,\n ttlHours: parsed.ttlHours,\n useCookies: parsed.useCookies,\n challengeAutomationMode: parsed.challengeAutomationMode,\n cookiePolicyOverride: parsed.cookiePolicyOverride\n });\n\n return {\n success: true,\n message: buildWorkflowCompletionMessage(\"Inspiredesign workflow\", data),\n data\n };\n}\n\nexport const __test__ = {\n parseInspiredesignRunArgs\n};\n","{\n \"name\": \"opendevbrowser\",\n \"version\": \"0.0.21\",\n \"description\": \"Browser automation runtime with snapshot-refs-actions, browser replay screencasts, public read-only desktop observation, and browser-scoped computer-use orchestration\",\n \"type\": \"module\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"opendevbrowser\": \"dist/cli/index.js\"\n },\n \"files\": [\n \"dist\",\n \"skills\",\n \"scripts/native\",\n \"extension/canvas.html\",\n \"extension/manifest.json\",\n \"extension/popup.html\",\n \"extension/dist\",\n \"extension/icons\"\n ],\n \"keywords\": [\n \"opencode\",\n \"plugin\",\n \"browser\",\n \"automation\",\n \"cdp\",\n \"playwright\",\n \"testing\",\n \"web-scraping\",\n \"chrome\",\n \"annotation\",\n \"design-canvas\",\n \"screencast\",\n \"desktop-observation\",\n \"browser-replay\",\n \"computer-use\",\n \"challenge-automation\"\n ],\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/freshtechbro/opendevbrowser.git\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"scripts\": {\n \"build\": \"node scripts/run-package-tool.mjs tsup src/index.ts src/cli/index.ts src/skills/skill-loader.ts --format esm --clean --sourcemap && node scripts/run-package-tool.mjs tsc --emitDeclarationOnly --declaration --declarationMap -p tsconfig.json && node scripts/postbuild-dist.mjs\",\n \"dev\": \"tsup src/index.ts src/cli/index.ts src/skills/skill-loader.ts --format esm --dts --watch\",\n \"lint\": \"node scripts/run-package-tool.mjs eslint \\\"src/**/*.ts\\\" \\\"tests/**/*.ts\\\"\",\n \"typecheck\": \"node scripts/run-package-tool.mjs tsc --noEmit -p tsconfig.json\",\n \"test\": \"node scripts/run-vitest-coverage.mjs\",\n \"test:release-gate\": \"node scripts/release-gate-test-groups.mjs\",\n \"test:release-gate:g1\": \"node scripts/release-gate-test-groups.mjs --group 1\",\n \"test:release-gate:g2\": \"node scripts/release-gate-test-groups.mjs --group 2\",\n \"test:release-gate:g3\": \"node scripts/release-gate-test-groups.mjs --group 3\",\n \"test:release-gate:g4\": \"node scripts/release-gate-test-groups.mjs --group 4\",\n \"test:release-gate:g5\": \"node scripts/release-gate-test-groups.mjs --group 5\",\n \"extension:sync\": \"node scripts/sync-extension-version.mjs\",\n \"extension:build\": \"npm run extension:sync && node scripts/run-package-tool.mjs tsc -p extension/tsconfig.json && node scripts/copy-extension-assets.mjs\",\n \"extension:pack\": \"cd extension && zip -r ../opendevbrowser-extension.zip manifest.json popup.html canvas.html dist/ icons/\",\n \"extension:store\": \"node scripts/chrome-store-publish.mjs\",\n \"version:check\": \"node scripts/verify-versions.mjs\",\n \"prepack\": \"npm run version:check && npm run build && npm run extension:build\"\n },\n \"dependencies\": {\n \"@opencode-ai/plugin\": \"^1.2.25\",\n \"@puppeteer/browsers\": \"^2.13.0\",\n \"async-mutex\": \"^0.5.0\",\n \"jsonc-parser\": \"^3.2.0\",\n \"parse5\": \"^8.0.0\",\n \"playwright-core\": \"^1.58.2\",\n \"typescript\": \"^5.9.3\",\n \"ws\": \"^8.19.0\",\n \"yjs\": \"^13.6.29\",\n \"zod\": \"^3.25.76\"\n },\n \"devDependencies\": {\n \"@types/chrome\": \"^0.1.37\",\n \"@types/node\": \"^20.19.35\",\n \"@types/ws\": \"^8.18.1\",\n \"@typescript-eslint/eslint-plugin\": \"^8.56.1\",\n \"@typescript-eslint/parser\": \"^8.56.1\",\n \"@vitest/coverage-v8\": \"^4.0.18\",\n \"eslint\": \"^9.39.3\",\n \"happy-dom\": \"^20.7.0\",\n \"tsup\": \"^8.5.1\",\n \"vitest\": \"^4.0.18\"\n }\n}\n","#!/usr/bin/env node\n\nimport { parseArgs, detectOutputFormat } from \"./args\";\nimport type { InstallMode, OutputFormat, ParsedArgs } from \"./args\";\nimport { getHelpText } from \"./help\";\nimport onboardingMetadata from \"./onboarding-metadata.json\";\nimport { registerCommand, getCommand } from \"./commands/registry\";\nimport type { CommandResult } from \"./commands/types\";\nimport { installGlobal } from \"./installers/global\";\nimport { installLocal } from \"./installers/local\";\nimport {\n hasBundledSkillArtifacts,\n removeBundledSkills,\n syncBundledSkills\n} 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 { runArtifactsCommand } from \"./commands/artifacts\";\nimport { reconcileInstallAutostart } from \"./install-autostart-reconciliation\";\nimport type { InstallAutostartReconciliationResult } from \"./install-autostart-reconciliation\";\nimport {\n createInstallAutostartOutputPayload,\n formatAutostartReconciliationMessage\n} from \"./install-autostart-output\";\nimport { runScriptCommand } from \"./commands/run\";\nimport { runSessionLaunch } from \"./commands/session/launch\";\nimport { runSessionConnect } from \"./commands/session/connect\";\nimport { runSessionDisconnect } from \"./commands/session/disconnect\";\nimport { runSessionInspector } from \"./commands/session/inspector\";\nimport { runSessionInspectorAudit } from \"./commands/session/inspector-audit\";\nimport { runSessionInspectorPlan } from \"./commands/session/inspector-plan\";\nimport { runStatus } from \"./commands/status\";\nimport { runStatusCapabilities } from \"./commands/status-capabilities\";\nimport { runGoto } from \"./commands/nav/goto\";\nimport { runWait } from \"./commands/nav/wait\";\nimport { runSnapshot } from \"./commands/nav/snapshot\";\nimport { runReview } from \"./commands/nav/review\";\nimport { runReviewDesktop } from \"./commands/nav/review-desktop\";\nimport { runAnnotate } from \"./commands/annotate\";\nimport { runCanvas } from \"./commands/canvas\";\nimport { runRpc } from \"./commands/rpc\";\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 { runUpload } from \"./commands/interact/upload\";\nimport { runPointerMove } from \"./commands/interact/pointer-move\";\nimport { runPointerDown } from \"./commands/interact/pointer-down\";\nimport { runPointerUp } from \"./commands/interact/pointer-up\";\nimport { runPointerDrag } from \"./commands/interact/pointer-drag\";\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 { runScreencastStart } from \"./commands/devtools/screencast-start\";\nimport { runScreencastStop } from \"./commands/devtools/screencast-stop\";\nimport { runDialog } from \"./commands/devtools/dialog\";\nimport { runConsolePoll } from \"./commands/devtools/console-poll\";\nimport { runNetworkPoll } from \"./commands/devtools/network-poll\";\nimport { runDebugTraceSnapshot } from \"./commands/devtools/debug-trace-snapshot\";\nimport { runDesktopStatus } from \"./commands/desktop/status\";\nimport { runDesktopWindows } from \"./commands/desktop/windows\";\nimport { runDesktopActiveWindow } from \"./commands/desktop/active-window\";\nimport { runDesktopCaptureDesktop } from \"./commands/desktop/capture-desktop\";\nimport { runDesktopCaptureWindow } from \"./commands/desktop/capture-window\";\nimport { runDesktopAccessibilitySnapshot } from \"./commands/desktop/accessibility-snapshot\";\nimport { runCookieImport } from \"./commands/session/cookie-import\";\nimport { runCookieList } from \"./commands/session/cookie-list\";\nimport { runMacroResolve } from \"./commands/macro-resolve\";\nimport { runResearchCommand } from \"./commands/research\";\nimport { runShoppingCommand } from \"./commands/shopping\";\nimport { runProductVideoCommand } from \"./commands/product-video\";\nimport { runInspiredesignCommand } from \"./commands/inspiredesign\";\nimport { extractExtension } from \"../extension-extractor\";\nimport { setDefaultLogSink, stderrSink } from \"../core/logging\";\nimport { flushOutputAndExit, writeOutput } from \"./output\";\nimport { formatErrorPayload, resolveExitCode, toCliError, EXIT_EXECUTION, EXIT_USAGE } from \"./errors\";\nimport type { CliError } from \"./errors\";\nimport packageJson from \"../../package.json\";\n\nconst VERSION = typeof packageJson.version === \"string\" ? packageJson.version : \"0.0.0\";\n\nfunction resolveUpdateSkillModes(args: ParsedArgs): InstallMode[] {\n if (args.rawArgs.includes(\"--no-skills\")) {\n return [];\n }\n if (args.rawArgs.includes(\"--skills-global\")) {\n return [\"global\"];\n }\n if (args.rawArgs.includes(\"--skills-local\")) {\n return [\"local\"];\n }\n if (args.mode) {\n return [args.mode];\n }\n\n const installed = findInstalledConfigs();\n const modes: InstallMode[] = [];\n\n if (installed.global || hasBundledSkillArtifacts(\"global\")) {\n modes.push(\"global\");\n }\n if (installed.local || hasBundledSkillArtifacts(\"local\")) {\n modes.push(\"local\");\n }\n\n return modes;\n}\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 setDefaultLogSink(stderrSink);\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 and refresh managed skill packs\",\n run: () => {\n const result = runUpdate();\n const skillModes = result.success ? resolveUpdateSkillModes(args) : [];\n const skillResults = result.success ? skillModes.map((mode) => syncBundledSkills(mode)) : [];\n const skillMessage = args.rawArgs.includes(\"--no-skills\")\n ? \"Managed skill refresh skipped (--no-skills).\"\n : skillResults.length > 0\n ? skillResults.map((entry) => entry.message).join(\"\\n\")\n : result.success\n ? \"No managed skill packs required refresh.\"\n : \"\";\n\n const message = [result.message, skillMessage].filter(Boolean).join(\"\\n\");\n return {\n success: result.success && skillResults.every((entry) => entry.success),\n message,\n data: {\n cacheCleared: result.cleared,\n skillModes,\n skills: skillResults\n }\n };\n }\n });\n\n registerCommand({\n name: \"uninstall\",\n description: \"Remove plugin from config and clean managed skill packs\",\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 const skipSkills = args.rawArgs.includes(\"--no-skills\");\n const skillsResult = result.success && !skipSkills ? removeBundledSkills(mode) : undefined;\n const skillMessage = skipSkills\n ? \"Managed skill cleanup skipped (--no-skills).\"\n : skillsResult?.message ?? \"\";\n\n return {\n success: result.success && (skillsResult?.success ?? true),\n message: [result.message, skillMessage].filter(Boolean).join(\"\\n\"),\n data: {\n config: result,\n skills: skillsResult\n }\n };\n }\n });\n\n registerCommand({\n name: \"install\",\n description: \"Install the plugin and sync bundled skill packs\",\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 const autostart = result.success ? reconcileInstallAutostart(result) : undefined;\n const skillsResult = result.success && args.skillsMode !== \"none\"\n ? syncBundledSkills(args.skillsMode)\n : undefined;\n const installSuccess = result.success && (skillsResult?.success ?? true);\n\n if (args.outputFormat !== \"text\") {\n const payload: Record<string, unknown> = {\n alreadyInstalled: result.alreadyInstalled\n };\n\n if (skillsResult) {\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 (autostart) {\n Object.assign(payload, createInstallAutostartOutputPayload(autostart));\n }\n\n return { success: installSuccess, 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 (skillsResult) {\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 (autostart) {\n const autostartMessage = formatAutostartReconciliationMessage(autostart);\n if (autostartMessage) {\n if (autostart.autostartAction === \"repair_failed\") {\n warn(autostartMessage);\n } else {\n log(autostartMessage);\n }\n }\n }\n\n if (installSuccess && !result.alreadyInstalled) {\n log(\"\\nNext steps:\");\n log(\" 1. Start or restart OpenCode\");\n log(` 2. Read npx opendevbrowser --help and start with ${onboardingMetadata.quickStartCommands.promptingGuide}`);\n log(` 3. Or load ${onboardingMetadata.skillName} ${onboardingMetadata.skillTopic} directly via ${onboardingMetadata.quickStartCommands.skillLoad}`);\n log(\" 4. Use opendevbrowser_status to verify the plugin is loaded\");\n }\n\n return { success: installSuccess, 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: \"status-capabilities\",\n description: \"Inspect runtime capability discovery for the host and an optional session\",\n run: async () => runStatusCapabilities(args)\n });\n\n registerCommand({\n name: \"session-inspector\",\n description: \"Capture a session-first diagnostic summary with relay health and trace proof\",\n run: async () => runSessionInspector(args)\n });\n\n registerCommand({\n name: \"session-inspector-plan\",\n description: \"Inspect browser-scoped computer-use policy and safe suggested steps\",\n run: async () => runSessionInspectorPlan(args)\n });\n\n registerCommand({\n name: \"session-inspector-audit\",\n description: \"Capture a correlated audit bundle across desktop evidence, browser review, and policy state\",\n run: async () => runSessionInspectorAudit(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: \"review\",\n description: \"Capture a first-class review payload for the active page\",\n run: async () => runReview(args)\n });\n\n registerCommand({\n name: \"review-desktop\",\n description: \"Capture desktop-assisted browser review with read-only desktop evidence\",\n run: async () => runReviewDesktop(args)\n });\n\n registerCommand({\n name: \"annotate\",\n description: \"Request interactive annotations via direct or relay transport\",\n run: async () => runAnnotate(args)\n });\n\n registerCommand({\n name: \"canvas\",\n description: \"Execute a design-canvas command\",\n run: async () => runCanvas(args)\n });\n\n registerCommand({\n name: \"rpc\",\n description: \"Execute an internal daemon RPC command (power-user)\",\n run: async () => runRpc(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: \"upload\",\n description: \"Upload files to a file input or chooser by ref\",\n run: async () => runUpload(args)\n });\n\n registerCommand({\n name: \"pointer-move\",\n description: \"Move the pointer to viewport coordinates\",\n run: async () => runPointerMove(args)\n });\n\n registerCommand({\n name: \"pointer-down\",\n description: \"Press a mouse button at viewport coordinates\",\n run: async () => runPointerDown(args)\n });\n\n registerCommand({\n name: \"pointer-up\",\n description: \"Release a mouse button at viewport coordinates\",\n run: async () => runPointerUp(args)\n });\n\n registerCommand({\n name: \"pointer-drag\",\n description: \"Drag the pointer between two viewport coordinates\",\n run: async () => runPointerDrag(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: \"screencast-start\",\n description: \"Start a browser replay screencast capture\",\n run: async () => runScreencastStart(args)\n });\n\n registerCommand({\n name: \"screencast-stop\",\n description: \"Stop a browser replay screencast capture\",\n run: async () => runScreencastStop(args)\n });\n\n registerCommand({\n name: \"dialog\",\n description: \"Inspect or handle a JavaScript dialog\",\n run: async () => runDialog(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\n registerCommand({\n name: \"debug-trace-snapshot\",\n description: \"Capture page + console + network + exception diagnostics\",\n run: async () => runDebugTraceSnapshot(args)\n });\n\n registerCommand({\n name: \"desktop-status\",\n description: \"Inspect public read-only desktop observation availability\",\n run: async () => runDesktopStatus(args)\n });\n\n registerCommand({\n name: \"desktop-windows\",\n description: \"List windows exposed by the public read-only desktop observation plane\",\n run: async () => runDesktopWindows(args)\n });\n\n registerCommand({\n name: \"desktop-active-window\",\n description: \"Inspect the active window through the public read-only desktop observation plane\",\n run: async () => runDesktopActiveWindow(args)\n });\n\n registerCommand({\n name: \"desktop-capture-desktop\",\n description: \"Capture the current desktop surface through the public read-only desktop observation plane\",\n run: async () => runDesktopCaptureDesktop(args)\n });\n\n registerCommand({\n name: \"desktop-capture-window\",\n description: \"Capture a specific window through the public read-only desktop observation plane\",\n run: async () => runDesktopCaptureWindow(args)\n });\n\n registerCommand({\n name: \"desktop-accessibility-snapshot\",\n description: \"Capture desktop accessibility state through the public read-only desktop observation plane\",\n run: async () => runDesktopAccessibilitySnapshot(args)\n });\n\n registerCommand({\n name: \"cookie-import\",\n description: \"Import validated cookies into a session\",\n run: async () => runCookieImport(args)\n });\n\n registerCommand({\n name: \"cookie-list\",\n description: \"List cookies for a session (optionally filtered by URL)\",\n run: async () => runCookieList(args)\n });\n\n registerCommand({\n name: \"macro-resolve\",\n description: \"Resolve or execute a macro expression via provider actions\",\n run: async () => runMacroResolve(args)\n });\n\n registerCommand({\n name: \"research\",\n description: \"Run research workflows\",\n run: async () => runResearchCommand(args)\n });\n\n registerCommand({\n name: \"shopping\",\n description: \"Run shopping workflows\",\n run: async () => runShoppingCommand(args)\n });\n\n registerCommand({\n name: \"product-video\",\n description: \"Run product presentation asset workflows\",\n run: async () => runProductVideoCommand(args)\n });\n\n registerCommand({\n name: \"inspiredesign\",\n description: \"Run inspiredesign workflows\",\n run: async () => runInspiredesignCommand(args)\n });\n\n registerCommand({\n name: \"artifacts\",\n description: \"Manage workflow artifact lifecycle\",\n run: async () => runArtifactsCommand(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 await flushOutputAndExit(exitCode);\n return;\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 await flushOutputAndExit(cliError.exitCode);\n return;\n }\n}\n\nmain().catch(async (error: unknown) => {\n const cliError = toCliError(error, EXIT_EXECUTION);\n emitFatalError(cliError, detectOutputFormat(process.argv));\n await flushOutputAndExit(cliError.exitCode);\n});\n"],"mappings":"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","names":["mode","noPrompt","fs","edits","fs","path","os","fs","fs","path","path","os","fs","path","os","PLUGIN_NAME","fs","path","os","getPluginConfigPath","fs","path","metadata","message","clearedCount","staleNote","execFileSync","existsSync","mkdirSync","unlinkSync","writeFileSync","homedir","dirname","join","resolve","fileURLToPath","message","join","resolve","tmpdir","resolve","join","tmpdir","defaultDeps","readFileSync","resolve","resolve","readFileSync","resolve","parseOptionalTimeoutMs","parseStatusArgs","nativeStatus","parseOptionalTimeoutMs","requireValue","message","readFileSync","requireValue","readFileSync","readFileSync","requireValue","parseJsonObject","readFileSync","path","readFileSync","requireValue","readFileSync","requireValue","requireValue","asRecord","requireValue","MODE_VALUES","COOKIE_POLICY_VALUES","requireValue","parseBoolean","requireValue","parseBoolean","COOKIE_POLICY_VALUES","MODE_VALUES","COOKIE_POLICY_VALUES","requireValue","resolve","result","exitCode"]}
1
+ {"version":3,"sources":["../../src/cli/args.ts","../../src/cli/help.ts","../../src/cli/commands/registry.ts","../../src/cli/installers/global.ts","../../src/cli/templates/config.ts","../../src/cli/installers/local.ts","../../src/cli/commands/update.ts","../../src/cli/commands/uninstall.ts","../../src/cli/commands/serve.ts","../../src/cli/utils/parse.ts","../../src/cli/commands/native.ts","../../src/cli/daemon-autostart.ts","../../src/cli/commands/daemon.ts","../../src/cli/commands/artifacts.ts","../../src/cli/install-autostart-reconciliation.ts","../../src/cli/install-autostart-output.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/utils/workflow-message.ts","../../src/cli/commands/session/inspector-shared.ts","../../src/cli/commands/session/inspector.ts","../../src/cli/transport-timeouts.ts","../../src/cli/commands/challenge-automation-mode.ts","../../src/cli/commands/nav/review-shared.ts","../../src/cli/commands/session/inspector-audit.ts","../../src/cli/commands/session/inspector-plan.ts","../../src/cli/commands/session/status.ts","../../src/cli/commands/status.ts","../../src/cli/commands/status-capabilities.ts","../../src/cli/commands/nav/goto.ts","../../src/cli/commands/nav/wait.ts","../../src/cli/commands/nav/snapshot.ts","../../src/cli/commands/nav/review.ts","../../src/cli/commands/nav/review-desktop.ts","../../src/cli/commands/annotate.ts","../../src/cli/commands/canvas.ts","../../src/cli/commands/rpc.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/interact/upload.ts","../../src/cli/commands/interact/pointer-shared.ts","../../src/cli/commands/interact/pointer-move.ts","../../src/cli/commands/interact/pointer-down.ts","../../src/cli/commands/interact/pointer-up.ts","../../src/cli/commands/interact/pointer-drag.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/screencast-start.ts","../../src/cli/commands/devtools/screencast-stop.ts","../../src/cli/commands/devtools/dialog.ts","../../src/cli/commands/devtools/console-poll.ts","../../src/cli/commands/devtools/network-poll.ts","../../src/cli/commands/devtools/debug-trace-snapshot.ts","../../src/cli/commands/desktop/shared.ts","../../src/cli/commands/desktop/status.ts","../../src/cli/commands/desktop/windows.ts","../../src/cli/commands/desktop/active-window.ts","../../src/cli/commands/desktop/capture-desktop.ts","../../src/cli/commands/desktop/capture-window.ts","../../src/cli/commands/desktop/accessibility-snapshot.ts","../../src/cli/commands/session/cookie-import.ts","../../src/cli/commands/session/cookie-list.ts","../../src/cli/commands/macro-resolve.ts","../../src/cli/commands/research.ts","../../src/cli/commands/shopping.ts","../../src/cli/commands/product-video.ts","../../src/cli/commands/inspiredesign.ts","../../package.json","../../src/cli/update-skill-modes.ts","../../src/cli/skill-lifecycle.ts","../../src/cli/index.ts"],"sourcesContent":["import { createUsageError } from \"./errors\";\nimport {\n CLI_COMMANDS,\n VALID_EQUALS_FLAGS,\n VALID_FLAGS\n} from \"../public-surface/generated-manifest\";\nimport type { PublicSurfaceCliCommandName } from \"../public-surface/source\";\n\nconst CLI_COMMAND_SET = new Set<string>(CLI_COMMANDS);\n\nexport { CLI_COMMANDS, VALID_EQUALS_FLAGS, VALID_FLAGS };\n\nexport type CliCommand = PublicSurfaceCliCommandName;\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\nconst VALID_FLAG_SET = new Set<string>(VALID_FLAGS);\nconst VALID_EQUALS_FLAG_SET = new Set<string>(VALID_EQUALS_FLAGS);\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 (CLI_COMMAND_SET.has(candidate)) {\n commandOverride = candidate as CliCommand;\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 for (const arg of args) {\n if (arg.startsWith(\"--\") && !VALID_FLAG_SET.has(arg)) {\n if (arg.includes(\"=\")) {\n const baseFlag = arg.split(\"=\", 2)[0] ?? \"\";\n if (VALID_EQUALS_FLAG_SET.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 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 onboardingMetadata from \"./onboarding-metadata.json\";\nimport {\n INSPIREDESIGN_HANDOFF_COMMANDS,\n INSPIREDESIGN_HANDOFF_GUIDANCE\n} from \"../inspiredesign/handoff\";\nimport type { CliCommand } from \"./args\";\nimport { CLI_COMMANDS, VALID_FLAGS } from \"./args\";\nimport {\n CLI_COMMAND_HELP_DETAILS,\n PUBLIC_CLI_COMMAND_GROUPS,\n TOOL_SURFACE_ENTRIES\n} from \"../public-surface/generated-manifest\";\n\ntype HelpFlag = (typeof VALID_FLAGS)[number];\n\ninterface CommandGroup {\n title: string;\n summary: string;\n commands: readonly CliCommand[];\n}\n\nexport type CommandHelpDetail = typeof CLI_COMMAND_HELP_DETAILS[CliCommand];\n\ninterface FlagEntry {\n flag: HelpFlag;\n alias?: string;\n description: string;\n example?: string;\n}\n\ninterface FlagGroup {\n title: string;\n summary: string;\n flags: readonly FlagEntry[];\n}\n\ninterface ReferenceEntry {\n label: string;\n description: string;\n}\n\ninterface DetailRow {\n label: string;\n value: string;\n}\n\ninterface FormattableRow {\n label: string;\n description: string;\n details?: readonly DetailRow[];\n}\n\nconst LABEL_WIDTH = 42;\nconst DETAIL_LABEL_WIDTH = 9;\nconst COMMAND_SET = new Set<string>(CLI_COMMANDS);\nconst FLAG_SET = new Set<string>(VALID_FLAGS);\nconst TOOL_COUNT = TOOL_SURFACE_ENTRIES.length;\nconst CLI_EQUIVALENT_SET = new Set(\n TOOL_SURFACE_ENTRIES.flatMap((entry) => (entry.cliEquivalent ? [entry.cliEquivalent] : []))\n);\n\nconst formatFlags = (flags: readonly HelpFlag[]): string => (flags.length > 0 ? flags.join(\", \") : \"none\");\n\nexport const getCliOnlyCommands = (): CliCommand[] => (\n CLI_COMMANDS.filter((command) => !CLI_EQUIVALENT_SET.has(command))\n);\n\nexport const getToolOnlyHelperNames = (): string[] => (\n TOOL_SURFACE_ENTRIES\n .filter((entry) => !entry.cliEquivalent)\n .map((entry) => entry.name)\n);\n\nexport const HELP_COMMAND_GROUPS: readonly CommandGroup[] = PUBLIC_CLI_COMMAND_GROUPS.map((group) => ({\n title: group.title,\n summary: group.summary,\n commands: group.commands.map((command) => command.name) as CliCommand[]\n}));\n\nexport const COMMAND_HELP_DETAILS: Record<CliCommand, CommandHelpDetail> = CLI_COMMAND_HELP_DETAILS as Record<CliCommand, CommandHelpDetail>;\n\nexport const HELP_FLAG_GROUPS: readonly FlagGroup[] = [\n {\n title: \"Install / Global Flags\",\n summary: \"Control install scope, prompting, and bundled skill setup.\",\n flags: [\n { flag: \"--global\", alias: \"-g\", description: \"Install into ~/.config/opencode/opencode.json.\", example: \"npx opendevbrowser --global --with-config\" },\n { flag: \"--local\", alias: \"-l\", description: \"Install into ./opencode.json for this project.\", example: \"npx opendevbrowser --local --skills-local\" },\n { flag: \"--update\", alias: \"-u\", description: \"Alias for the update command.\" },\n { flag: \"--uninstall\", description: \"Alias for the uninstall command.\" },\n { flag: \"--with-config\", description: \"Also create opendevbrowser.jsonc defaults.\", example: \"npx opendevbrowser --global --with-config\" },\n { flag: \"--full\", alias: \"-f\", description: \"Install config and pre-extract extension assets.\", example: \"npx opendevbrowser --full\" },\n { flag: \"--no-prompt\", description: \"Run non-interactively using defaults.\" },\n { flag: \"--no-interactive\", description: \"Alias of --no-prompt.\" },\n { flag: \"--quiet\", description: \"Suppress non-error text output.\" },\n { flag: \"--skills-global\", description: \"Install bundled skills into global agent directories.\" },\n { flag: \"--skills-local\", description: \"Install bundled skills into local project agent directories.\" },\n { flag: \"--no-skills\", description: \"Skip bundled skill installation.\" }\n ]\n },\n {\n title: \"Help / Output Flags\",\n summary: \"Inspect help or version and control output transport.\",\n flags: [\n { flag: \"--help\", alias: \"-h\", description: \"Show CLI help output.\", example: \"npx opendevbrowser --help\" },\n { flag: \"--version\", alias: \"-v\", description: \"Show CLI version.\", example: \"npx opendevbrowser --version\" },\n { flag: \"--output-format\", description: \"Output mode: text, json, or stream-json.\", example: \"opendevbrowser status --daemon --output-format json\" },\n { flag: \"--transport\", description: \"Transport selector for transport-aware commands. `status` uses relay/native; `annotate` uses auto/direct/relay.\", example: \"opendevbrowser status --session-id s1 --transport native\" }\n ]\n },\n {\n title: \"Daemon / Session / Launch Flags\",\n summary: \"Control daemon binding, browser connect, and launch behavior. If ext=on but handshake=off, reopen the extension popup and click Connect again to re-establish a clean daemon-extension handshake.\",\n flags: [\n { flag: \"--port\", description: \"Daemon or relay port override.\", example: \"opendevbrowser serve --port 8788\" },\n { flag: \"--token\", description: \"Relay or daemon auth token override.\", example: \"opendevbrowser serve --token local-dev-token\" },\n { flag: \"--stop\", description: \"Stop a running daemon.\", example: \"opendevbrowser serve --stop\" },\n { flag: \"--daemon\", description: \"Target daemon status mode where supported.\", example: \"opendevbrowser status --daemon --output-format json\" },\n { flag: \"--script\", description: \"Path to a run-script JSON file.\", example: \"opendevbrowser run --script ./workflow.json\" },\n { flag: \"--session-id\", description: \"Target an existing browser or daemon session.\", example: \"opendevbrowser snapshot --session-id s1\" },\n { flag: \"--close-browser\", description: \"Close the managed browser on disconnect.\" },\n { flag: \"--ws-endpoint\", description: \"Connect using an explicit CDP WebSocket endpoint.\", example: \"opendevbrowser connect --ws-endpoint ws://127.0.0.1:9222/devtools/browser/...\" },\n { flag: \"--host\", description: \"CDP host for host/port connect mode.\", example: \"opendevbrowser connect --host 127.0.0.1 --cdp-port 9222\" },\n { flag: \"--cdp-port\", description: \"CDP port for host/port connect mode.\" },\n { flag: \"--headless\", description: \"Launch a managed browser in headless mode.\", example: \"opendevbrowser launch --no-extension --headless\" },\n { flag: \"--profile\", description: \"Use a named browser profile directory.\" },\n { flag: \"--persist-profile\", description: \"Keep the generated profile directory after exit. `run` uses a temporary profile by default unless this flag is enabled.\" },\n { flag: \"--chrome-path\", description: \"Use a specific Chrome, Chromium, or CfT binary.\" },\n { flag: \"--start-url\", description: \"Open this URL immediately after launch or connect.\" },\n { flag: \"--flag\", description: \"Pass one or more extra Chrome CLI flags.\" },\n { flag: \"--no-extension\", description: \"Force managed mode without extension relay.\" },\n { flag: \"--extension-only\", description: \"Fail unless the extension relay websocket is connected and the daemon-extension handshake is complete.\" },\n { flag: \"--extension-legacy\", description: \"Use the legacy /cdp relay mode instead of /ops.\" },\n { flag: \"--wait-for-extension\", description: \"Wait for a clean daemon-extension handshake before returning.\" },\n { flag: \"--wait-timeout-ms\", description: \"Handshake wait timeout in milliseconds.\" }\n ]\n },\n {\n title: \"Navigation / Interaction / Diagnostics Flags\",\n summary: \"Command-specific flags for page actions, reads, and diagnostics.\",\n flags: [\n { flag: \"--url\", description: \"Target URL for navigation, connect, or workflow commands; repeat for multi-reference inspiredesign runs.\", example: \"opendevbrowser goto --session-id s1 --url https://example.com\" },\n { flag: \"--wait-until\", description: \"Navigation wait strategy such as load or domcontentloaded.\" },\n { flag: \"--timeout-ms\", description: \"Operation timeout in milliseconds.\", example: \"opendevbrowser canvas --timeout-ms 120000 --command canvas.session.open ...\" },\n { flag: \"--ref\", description: \"Snapshot ref id for element-targeted commands.\", example: \"opendevbrowser click --session-id s1 --ref r12\" },\n { flag: \"--state\", description: \"Wait state selector for wait-style commands.\" },\n { flag: \"--until\", description: \"Wait condition selector for wait-style commands.\" },\n { flag: \"--mode\", description: \"Mode selector for commands that accept variants.\" },\n { flag: \"--max-chars\", description: \"Maximum text characters to return for DOM reads.\" },\n { flag: \"--cursor\", description: \"Cursor token for paginated list commands.\" },\n { flag: \"--text\", description: \"Text payload for type and related commands.\" },\n { flag: \"--clear\", description: \"Clear the existing input value before typing.\" },\n { flag: \"--submit\", description: \"Submit the form or input after typing.\" },\n { flag: \"--values\", description: \"CSV values for select commands.\" },\n { flag: \"--files\", description: \"CSV file paths for upload commands.\" },\n { flag: \"--dy\", description: \"Vertical scroll delta for scroll commands.\" },\n { flag: \"--key\", description: \"Keyboard key for the press command.\" },\n { flag: \"--attr\", description: \"DOM attribute name for dom-attr.\" },\n { flag: \"--x\", description: \"Viewport x coordinate for pointer commands.\" },\n { flag: \"--y\", description: \"Viewport y coordinate for pointer commands.\" },\n { flag: \"--from-x\", description: \"Pointer drag start x coordinate.\" },\n { flag: \"--from-y\", description: \"Pointer drag start y coordinate.\" },\n { flag: \"--to-x\", description: \"Pointer drag end x coordinate.\" },\n { flag: \"--to-y\", description: \"Pointer drag end y coordinate.\" },\n { flag: \"--steps\", description: \"Interpolation step count for pointer move or drag commands.\" },\n { flag: \"--button\", description: \"Pointer button selector for pointer down or up.\" },\n { flag: \"--click-count\", description: \"Associated click count for pointer down or up.\" },\n { flag: \"--name\", description: \"Named page identifier for page commands.\" },\n { flag: \"--target-id\", description: \"Browser target id for target commands.\", example: \"opendevbrowser target-use --session-id s1 --target-id page-2\" },\n { flag: \"--window-id\", description: \"Desktop window id for direct window capture commands.\" },\n { flag: \"--tab-id\", description: \"Browser tab id override for extension and annotation commands.\" },\n { flag: \"--include-urls\", description: \"Include page URLs in list output where supported.\" },\n { flag: \"--path\", description: \"Filesystem path for command output or artifacts.\", example: \"opendevbrowser screenshot --session-id s1 --path ./shot.png\" },\n { flag: \"--screencast-id\", description: \"Recorded screencast id returned by screencast-start for the same session.\" },\n { flag: \"--reason\", description: \"Audit reason for desktop observation commands.\" },\n { flag: \"--full-page\", description: \"Capture the full scrollable page instead of the current viewport.\" },\n { flag: \"--action\", description: \"Dialog action: status, accept, or dismiss.\" },\n { flag: \"--prompt-text\", description: \"Prompt text to submit when accepting a prompt dialog.\" },\n { flag: \"--since-seq\", description: \"Poll from a sequence id across diagnostics streams.\" },\n { flag: \"--max\", description: \"Maximum number of records or items to return.\" },\n { flag: \"--interval-ms\", description: \"Frame capture interval for screencast recording.\" },\n { flag: \"--max-frames\", description: \"Maximum screencast frame count before auto-stop.\" },\n { flag: \"--since-console-seq\", description: \"Console sequence cursor for debug-trace snapshots.\" },\n { flag: \"--since-network-seq\", description: \"Network sequence cursor for debug-trace snapshots.\" },\n { flag: \"--since-exception-seq\", description: \"Exception sequence cursor for debug-trace snapshots.\" },\n { flag: \"--request-id\", description: \"Attach or lookup a request id for correlated output.\" },\n { flag: \"--cookies\", description: \"Inline cookie payload for cookie-import.\" },\n { flag: \"--cookies-file\", description: \"File path containing cookies for cookie-import.\" },\n { flag: \"--strict\", description: \"Fail cookie import on invalid entries.\" },\n { flag: \"--screenshot-mode\", description: \"Annotation screenshot mode: visible, full, or none.\" },\n { flag: \"--debug\", description: \"Enable debug-level annotation capture extras.\" },\n { flag: \"--context\", description: \"Free-form annotation context for reviewers or agents.\" },\n { flag: \"--stored\", description: \"Return the last stored annotation payload instead of starting a new capture.\" }\n ]\n },\n {\n title: \"Macro / Provider / Power Flags\",\n summary: \"Workflow filters, provider selectors, and unsafe RPC or /canvas options.\",\n flags: [\n { flag: \"--expression\", description: \"Macro expression to resolve or execute.\", example: \"opendevbrowser macro-resolve --expression '@web.search(\\\"openai\\\")'\" },\n { flag: \"--default-provider\", description: \"Provider fallback for shorthand macro expressions.\" },\n { flag: \"--include-catalog\", description: \"Include macro catalog metadata in the response.\" },\n { flag: \"--command\", description: \"Canvas command name for the canvas CLI command.\", example: \"opendevbrowser canvas --command canvas.session.open --params '{...}'\" },\n { flag: \"--execute\", description: \"Execute a resolved macro action after planning.\" },\n { flag: \"--params\", description: \"Inline JSON params for canvas or rpc commands.\" },\n { flag: \"--params-file\", description: \"Path to a JSON params file for canvas or rpc commands.\", example: \"opendevbrowser canvas --command canvas.plan.set --params-file ./plan.json\" },\n { flag: \"--unsafe-internal\", description: \"Required safety gate for the rpc command.\" },\n { flag: \"--topic\", description: \"Research topic input.\" },\n { flag: \"--days\", description: \"Lookback window in days for research commands.\" },\n { flag: \"--from\", description: \"Start date boundary for research commands.\" },\n { flag: \"--to\", description: \"End date boundary for research commands.\" },\n { flag: \"--source-selection\", description: \"Research source-family selector. Use auto for generic topical research; add shopping only for deliberate commercial comparison.\" },\n { flag: \"--sources\", description: \"Explicit source selectors within a source family. Use shopping only when commercial intent is explicit.\" },\n { flag: \"--include-engagement\", description: \"Include engagement metrics in research output.\" },\n { flag: \"--limit-per-source\", description: \"Per-source result cap for research runs.\" },\n { flag: \"--query\", description: \"Shopping query input.\" },\n { flag: \"--providers\", description: \"Comma-separated provider ids for shopping or artifact commands.\" },\n { flag: \"--budget\", description: \"Budget filter for shopping workflows.\" },\n { flag: \"--region\", description: \"Region or country hint for provider selection. Treat it as advisory unless output metadata reports `region_authoritative=true`.\" },\n { flag: \"--sort\", description: \"Sort mode for shopping results.\" },\n { flag: \"--brief\", description: \"Inspiredesign brief describing the target design direction.\" },\n { flag: \"--capture-mode\", description: \"Inspiredesign capture mode: off (default) or deep.\" },\n { flag: \"--include-prototype-guidance\", description: \"Include inspiredesign prototype guidance in workflow output.\" },\n { flag: \"--product-url\", description: \"Target product URL for product-video workflows.\" },\n { flag: \"--product-name\", description: \"Product name override for product-video workflows.\" },\n { flag: \"--provider-hint\", description: \"Provider hint override for product workflows.\" },\n { flag: \"--include-screenshots\", description: \"Include screenshots in product presentation output, or prefer screenshots when fetching stored annotations.\" },\n { flag: \"--include-all-images\", description: \"Include all discovered product images.\" },\n { flag: \"--include-copy\", description: \"Include product marketing copy metadata.\" },\n { flag: \"--use-cookies\", description: \"Enable or disable provider cookie injection for workflow runs; a bare flag means true.\", example: \"opendevbrowser shopping run --query 'usb hub' --use-cookies\" },\n { flag: \"--browser-mode\", description: \"Shopping browser-recovery preference: auto, extension, or managed. Use managed for deterministic reruns and extension only when relay-backed auth/session state is required.\", example: \"opendevbrowser shopping run --query 'wireless ergonomic mouse' --providers shopping/bestbuy,shopping/ebay --browser-mode managed\" },\n { flag: \"--challenge-automation-mode\", description: \"Per-run challenge automation mode for workflow runs and macro-resolve execute: off, browser, or browser_with_helper. Precedence is run > session > config, and the helper remains browser-scoped only.\", example: \"opendevbrowser macro-resolve --expression '@community.search(\\\"openai\\\")' --execute --challenge-automation-mode browser_with_helper\" },\n { flag: \"--cookie-policy-override\", description: \"Per-run workflow cookie policy override: off, auto, or required.\", example: \"opendevbrowser research run --topic 'agent workflows' --cookie-policy-override required\" },\n { flag: \"--cookie-policy\", description: \"Alias of --cookie-policy-override.\" },\n { flag: \"--output-dir\", description: \"Directory where generated artifacts are written, including screencast replay output.\" },\n { flag: \"--ttl-hours\", description: \"Artifact cache time-to-live in hours.\" },\n { flag: \"--expired-only\", description: \"List only expired artifacts in artifacts commands.\" }\n ]\n }\n];\n\nexport const HELP_TOOL_ENTRIES = TOOL_SURFACE_ENTRIES;\n\nexport const HELP_CAPABILITY_ENTRIES: readonly FormattableRow[] = [\n {\n label: \"screencast / browser replay\",\n description: \"Use the public browser replay lane when you need temporal browser evidence before or after a fragile flow.\",\n details: [\n { label: \"cli:\", value: \"screencast-start, screencast-stop\" },\n { label: \"example:\", value: \"npx opendevbrowser screencast-start --session-id <id> --output-dir ./artifacts/replay\" }\n ]\n },\n {\n label: \"desktop observation\",\n description: \"Use the public read-only desktop observation plane for sibling desktop evidence on macOS; availability, window inventory, and accessibility probes use the local swift command, while screenshots use macOS screencapture outside extension relay.\",\n details: [\n {\n label: \"cli:\",\n value: \"desktop-status, desktop-windows, desktop-active-window, desktop-capture-desktop, desktop-capture-window, desktop-accessibility-snapshot\"\n },\n { label: \"example:\", value: \"npx opendevbrowser desktop-status --output-format json\" }\n ]\n },\n {\n label: \"computer use / browser-scoped computer use\",\n description: \"Control the bounded browser-scoped computer-use challenge lane with --challenge-automation-mode; the optional helper is not a desktop agent.\",\n details: [\n { label: \"flag:\", value: \"--challenge-automation-mode off|browser|browser_with_helper\" },\n { label: \"works:\", value: \"research run, shopping run, product-video run, inspiredesign run, macro-resolve --execute\" },\n { label: \"entry:\", value: onboardingMetadata.quickStartCommands.computerUseEntry },\n { label: \"proof:\", value: \"review, session-inspector, workflow fallback metadata\" }\n ]\n }\n];\n\nexport const HELP_ONBOARDING_ENTRIES: readonly FormattableRow[] = [\n {\n label: \"prompting_guide\",\n description: \"Load local best-practice guidance before low-level browser commands.\",\n details: [{ label: \"tool:\", value: onboardingMetadata.quickStartCommands.promptingGuide }]\n },\n {\n label: \"skill_load\",\n description: `Load ${onboardingMetadata.skillName} ${onboardingMetadata.skillTopic} directly when you want the canonical quick-start section.`,\n details: [{ label: \"tool:\", value: onboardingMetadata.quickStartCommands.skillLoad }]\n },\n {\n label: \"validated_lanes\",\n description: `Load ${onboardingMetadata.skillName} ${onboardingMetadata.validatedSkillTopic} when you need the current proven transcript, research, and shopping runbook.`,\n details: [{ label: \"tool:\", value: onboardingMetadata.quickStartCommands.validatedLanes }]\n },\n {\n label: \"skill_list\",\n description: \"Inspect bundled and discovered skill packs when you need a different local lane.\",\n details: [{ label: \"tool:\", value: onboardingMetadata.quickStartCommands.skillList }]\n },\n {\n label: \"research_reliable\",\n description: \"Generic topical research is currently safest with `--source-selection auto`; add shopping only when the task is explicitly commercial.\",\n details: [{ label: \"cli:\", value: onboardingMetadata.quickStartCommands.validatedResearch }]\n },\n {\n label: \"shopping_reliable\",\n description: \"Start deal hunting with explicit providers in managed mode and only trust regional comparisons when the result reports `region_authoritative=true`.\",\n details: [{ label: \"cli:\", value: onboardingMetadata.quickStartCommands.validatedShopping }]\n },\n {\n label: \"inspiredesign_followthrough\",\n description: \"After inspiredesign finishes, continue in Canvas with the emitted request template and load the canvas-contract design-agent lane before patching.\",\n details: [\n { label: \"quick:\", value: INSPIREDESIGN_HANDOFF_COMMANDS.loadBestPractices },\n { label: \"design:\", value: INSPIREDESIGN_HANDOFF_COMMANDS.loadDesignAgent },\n { label: \"prep:\", value: INSPIREDESIGN_HANDOFF_GUIDANCE.prepareCanvasPlanRequest },\n { label: \"run:\", value: INSPIREDESIGN_HANDOFF_COMMANDS.continueInCanvas }\n ]\n },\n {\n label: \"computer_use_entry\",\n description: \"Enter browser-scoped computer use from a workflow run, not from a separate desktop command family.\",\n details: [{ label: \"cli:\", value: onboardingMetadata.quickStartCommands.computerUseEntry }]\n },\n {\n label: \"happy_path\",\n description: \"After guidance, verify a minimal managed happy path before widening into multi-step automation.\",\n details: [{ label: \"cli:\", value: onboardingMetadata.quickStartCommands.happyPath }]\n },\n {\n label: \"surface_split\",\n description: \"Use the existing public-surface split when a workflow or helper only exists on one side of the CLI or tool surface.\",\n details: [\n { label: \"cli-only:\", value: getCliOnlyCommands().join(\", \") },\n { label: \"tool-only:\", value: getToolOnlyHelperNames().join(\", \") }\n ]\n },\n {\n label: \"docs\",\n description: \"Use the first-run checklist and canonical skill runbook for proof and deeper operating details.\",\n details: [{\n label: \"paths:\",\n value: `${onboardingMetadata.referencePaths.onboardingDoc}, ${onboardingMetadata.referencePaths.skillDoc}`\n }]\n }\n];\n\nexport const HELP_REFERENCE_ENTRIES: readonly ReferenceEntry[] = [\n { label: \"src/cli/onboarding-metadata.json\", description: \"Canonical first-contact onboarding metadata shared by help, nudges, and proof lanes.\" },\n { label: \"src/inspiredesign/handoff.ts\", description: \"Shared inspiredesign follow-through commands, artifact names, and Canvas continuation guidance.\" },\n { label: \"src/public-surface/source.ts\", description: \"Authoritative command, usage, flag, and tool surface metadata.\" },\n { label: \"src/public-surface/generated-manifest.ts\", description: \"Checked-in generated public-surface snapshot consumed by help and parity tests.\" },\n { label: \"src/public-surface/generated-manifest.json\", description: \"Checked-in generated public-surface snapshot consumed by inventory scripts.\" },\n { label: \"src/cli/args.ts\", description: \"CLI argument parsing backed by the public-surface source.\" },\n { label: \"src/cli/help.ts\", description: \"Human-facing CLI formatting layered on the public-surface source, including the first-contact Find It Fast lookup block.\" },\n { label: \"src/tools/index.ts\", description: \"Code-level tool registry.\" },\n { label: \"docs/CLI.md\", description: \"Detailed CLI guide and release-gate runbooks.\" },\n { label: onboardingMetadata.referencePaths.onboardingDoc, description: \"First-run checklist for help-led onboarding and happy-path proof.\" },\n { label: onboardingMetadata.referencePaths.skillDoc, description: \"Canonical bundled best-practices runbook and quick-start guidance.\" },\n { label: \"docs/WORKFLOW_SURFACE_MAP.md\", description: \"Code-derived workflow and validation inventory, including CLI-only and tool-only surface splits.\" },\n { label: \"docs/SURFACE_REFERENCE.md\", description: \"Canonical CLI, tool, and relay channel inventory.\" },\n { label: \"opendevbrowser --help\", description: \"Primary full help invocation for quick discovery.\" },\n { label: \"opendevbrowser help\", description: \"Alias that prints the same full help inventory.\" }\n];\n\nfunction formatRows(rows: readonly FormattableRow[]): string {\n return rows\n .map((row) => {\n const lines = [` ${row.label.padEnd(LABEL_WIDTH)} ${row.description}`];\n for (const detail of row.details ?? []) {\n lines.push(` ${detail.label.padEnd(DETAIL_LABEL_WIDTH)} ${detail.value}`);\n }\n return lines.join(\"\\n\");\n })\n .join(\"\\n\");\n}\n\nfunction assertCommandCoverage(): void {\n const seen = new Set<string>();\n\n for (const group of HELP_COMMAND_GROUPS) {\n for (const command of group.commands) {\n const detail = COMMAND_HELP_DETAILS[command];\n if (!COMMAND_SET.has(command)) {\n throw new Error(`Help references unknown CLI command: ${command}`);\n }\n if (seen.has(command)) {\n throw new Error(`Help command appears multiple times: ${command}`);\n }\n if (!detail || !detail.description.trim() || !detail.usage.trim()) {\n throw new Error(`Missing command help metadata: ${command}`);\n }\n if (detail.examples.length === 0) {\n throw new Error(`Missing command example metadata: ${command}`);\n }\n for (const flag of detail.flags) {\n if (!FLAG_SET.has(flag)) {\n throw new Error(`Command help metadata references unknown flag ${flag} for ${command}`);\n }\n }\n seen.add(command);\n }\n }\n\n if (seen.size !== CLI_COMMANDS.length) {\n const missing = CLI_COMMANDS.filter((command) => !seen.has(command));\n throw new Error(`Help command coverage mismatch; missing: ${missing.join(\", \")}`);\n }\n}\n\nfunction assertFlagCoverage(): void {\n const seen = new Set<string>();\n\n for (const group of HELP_FLAG_GROUPS) {\n for (const entry of group.flags) {\n if (!FLAG_SET.has(entry.flag)) {\n throw new Error(`Help references unknown CLI flag: ${entry.flag}`);\n }\n if (seen.has(entry.flag)) {\n throw new Error(`Help flag appears multiple times: ${entry.flag}`);\n }\n seen.add(entry.flag);\n }\n }\n\n if (seen.size !== VALID_FLAGS.length) {\n const missing = VALID_FLAGS.filter((flag) => !seen.has(flag));\n throw new Error(`Help flag coverage mismatch; missing: ${missing.join(\", \")}`);\n }\n}\n\nfunction assertToolCoverage(): void {\n const seen = new Set<string>();\n\n for (const entry of HELP_TOOL_ENTRIES) {\n if (!entry.name.startsWith(\"opendevbrowser_\")) {\n throw new Error(`Invalid tool name in help inventory: ${entry.name}`);\n }\n if (!entry.description.trim()) {\n throw new Error(`Help tool is missing a description: ${entry.name}`);\n }\n if (!entry.example?.trim()) {\n throw new Error(`Help tool is missing an example: ${entry.name}`);\n }\n if (seen.has(entry.name)) {\n throw new Error(`Help tool appears multiple times: ${entry.name}`);\n }\n if (entry.cliEquivalent && !COMMAND_SET.has(entry.cliEquivalent)) {\n throw new Error(`Tool metadata references unknown CLI command: ${entry.cliEquivalent}`);\n }\n seen.add(entry.name);\n }\n\n if (HELP_TOOL_ENTRIES.length !== TOOL_COUNT) {\n throw new Error(`Help tool inventory must list ${TOOL_COUNT} tools; got ${HELP_TOOL_ENTRIES.length}`);\n }\n}\n\nfunction formatCommandGroups(): string {\n return HELP_COMMAND_GROUPS\n .map((group) => {\n const rows: FormattableRow[] = group.commands.map((command) => {\n const detail = COMMAND_HELP_DETAILS[command];\n return {\n label: command,\n description: detail.description,\n details: [\n { label: \"usage:\", value: detail.usage },\n { label: \"flags:\", value: formatFlags(detail.flags) },\n ...detail.examples.map((example) => ({ label: \"example:\", value: example })),\n ...detail.notes.map((note) => ({ label: \"note:\", value: note }))\n ]\n };\n });\n return `${group.title}: ${group.summary}\\n${formatRows(rows)}`;\n })\n .join(\"\\n\\n\");\n}\n\nfunction formatFlagGroups(): string {\n return HELP_FLAG_GROUPS\n .map((group) => {\n const rows: FormattableRow[] = group.flags.map((entry) => ({\n label: entry.alias ? `${entry.flag} (${entry.alias})` : entry.flag,\n description: entry.description,\n details: entry.example ? [{ label: \"example:\", value: entry.example }] : []\n }));\n return `${group.title}: ${group.summary}\\n${formatRows(rows)}`;\n })\n .join(\"\\n\\n\");\n}\n\nfunction formatToolEntries(): string {\n return formatRows(HELP_TOOL_ENTRIES.map((entry) => ({\n label: entry.name,\n description: entry.description,\n details: [\n ...(entry.cliEquivalent\n ? [{ label: \"cli:\", value: entry.cliEquivalent }]\n : [{ label: \"scope:\", value: \"tool-only\" }]),\n ...(entry.example ? [{ label: \"example:\", value: entry.example }] : []),\n ...((entry.notes ?? []).map((note) => ({ label: \"note:\", value: note })))\n ]\n })));\n}\n\nfunction formatOnboardingEntries(): string {\n return formatRows(HELP_ONBOARDING_ENTRIES);\n}\n\nfunction formatCapabilityEntries(): string {\n return formatRows(HELP_CAPABILITY_ENTRIES);\n}\n\nfunction formatReferenceEntries(): string {\n return formatRows(HELP_REFERENCE_ENTRIES.map((entry) => ({\n label: entry.label,\n description: entry.description\n })));\n}\n\nexport function getHelpText(): string {\n assertCommandCoverage();\n assertFlagCoverage();\n assertToolCoverage();\n\n return [\n \"OpenDevBrowser CLI\",\n \"\",\n \"Usage:\",\n \" npx opendevbrowser <command> [options]\",\n \"\",\n \"Find It Fast:\",\n \" Use these exact lookup terms when you need replay, desktop evidence, or browser-scoped computer use.\",\n formatCapabilityEntries(),\n \"\",\n `${onboardingMetadata.sectionTitle}:`,\n ` ${onboardingMetadata.sectionSummary}`,\n formatOnboardingEntries(),\n \"\",\n `Command Inventory (all ${CLI_COMMANDS.length} commands):`,\n formatCommandGroups(),\n \"\",\n \"Flag Inventory (all supported flags):\",\n formatFlagGroups(),\n \"\",\n `Tool Inventory (all ${TOOL_COUNT} opendevbrowser_* tools):`,\n formatToolEntries(),\n \"\",\n \"Reference Pointers:\",\n formatReferenceEntries()\n ].join(\"\\n\");\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 { 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\": [\"quick start\", \"getting started\", \"launch\", \"connect\", \"setup\"],\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 * 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\";\nimport { hasBundledSkillArtifacts, hasManagedBundledSkillInstall } from \"../installers/skills\";\n\nexport interface UninstallResult {\n success: boolean;\n message: string;\n configPath?: string;\n removed: boolean;\n configFileDeleted: boolean;\n}\n\nexport function hasInstalledConfig(mode: InstallMode): boolean {\n const configPath = mode === \"global\" ? getGlobalConfigPath() : getLocalConfigPath();\n\n try {\n const { config } = readConfig(configPath);\n return hasPlugin(config);\n } catch {\n return false;\n }\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: `No plugin config found 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 return {\n global: hasInstalledConfig(\"global\")\n || hasManagedBundledSkillInstall(\"global\")\n || hasBundledSkillArtifacts(\"global\"),\n local: hasInstalledConfig(\"local\")\n || hasManagedBundledSkillInstall(\"local\")\n || hasBundledSkillArtifacts(\"local\")\n };\n}\n","import { spawnSync } from \"node:child_process\";\nimport type { ParsedArgs } from \"../args\";\nimport {\n getCurrentDaemonFingerprint,\n readDaemonMetadata,\n startDaemon\n} 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\";\nimport type { DaemonStatusPayload } from \"../daemon-status\";\nimport { fetchDaemonStatus } from \"../daemon-status\";\n\ntype ServeArgs = {\n port?: number;\n token?: string;\n stop: boolean;\n};\n\ntype DaemonHandle = {\n stop: () => Promise<void>;\n};\n\ntype ServeProcessSnapshot = {\n pid: number;\n uid: number | null;\n command: string;\n};\n\nlet daemonHandle: DaemonHandle | null = null;\nconst PS_MAX_BUFFER = 8 * 1024 * 1024;\nconst SERVE_COMMAND_PATTERN = /(?:^|\\s)(?:\\S*[\\\\/])?(?:opendevbrowser|dist[\\\\/]+cli[\\\\/]+index\\.js)(?=\\s|$).*?\\bserve\\b/;\nconst SERVE_STOP_PATTERN = /(?:^|\\s)--stop(?:\\s|$)/;\nconst CURRENT_UID = typeof process.getuid === \"function\" ? process.getuid() : null;\nconst CURRENT_EXECUTABLE = process.execPath;\n\nfunction resolveTokenCandidates(\n requestedToken: string | undefined,\n metadataToken: string | undefined,\n configToken: string | undefined\n): string[] {\n return Array.from(new Set([requestedToken, metadataToken, configToken].filter((token): token is string => (\n typeof token === \"string\" && token.trim().length > 0\n ))));\n}\n\nasync function resolveExistingDaemon(\n port: number,\n tokens: string[]\n): Promise<{ token: string; status: DaemonStatusPayload } | null> {\n for (const token of tokens) {\n const status = await fetchDaemonStatus(port, token);\n if (status?.ok) {\n return { token, status };\n }\n }\n return null;\n}\n\nfunction isPositivePid(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value > 0;\n}\n\nfunction rememberStalePid(staleDaemonPids: Set<number>, pid: unknown): void {\n if (isPositivePid(pid)) {\n staleDaemonPids.add(pid);\n }\n}\n\nasync function stopDaemonOnPort(port: number, token: string): Promise<boolean> {\n try {\n const response = await fetchWithTimeout(`http://127.0.0.1:${port}/stop`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${token}` }\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n\nasync function stopStaleDaemon(\n port: number,\n daemon: { token: string; status: DaemonStatusPayload },\n staleDaemonPids: Set<number>\n): Promise<void> {\n rememberStalePid(staleDaemonPids, daemon.status.pid);\n const stopped = await stopDaemonOnPort(port, daemon.token);\n if (!stopped && isPositivePid(daemon.status.pid)) {\n terminateProcess(daemon.status.pid);\n }\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 = 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\nfunction parseServeProcessSnapshot(line: string): ServeProcessSnapshot | null {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n return null;\n }\n const match = trimmed.match(/^(\\d+)(?:\\s+(\\d+))?\\s+(.*)$/);\n if (!match) {\n return null;\n }\n const pid = Number.parseInt(match[1] ?? \"\", 10);\n if (!Number.isInteger(pid) || pid <= 0) {\n return null;\n }\n const rawUid = match[2];\n const parsedUid = typeof rawUid === \"string\" && rawUid.length > 0\n ? Number.parseInt(rawUid, 10)\n : null;\n const command = (match[3] ?? \"\").trim();\n if (command.length === 0) {\n return null;\n }\n return {\n pid,\n uid: typeof parsedUid === \"number\" && Number.isInteger(parsedUid) && parsedUid >= 0 ? parsedUid : null,\n command\n };\n}\n\nfunction listServeProcessSnapshots(): ServeProcessSnapshot[] {\n const result = spawnSync(\"ps\", [\"-axww\", \"-o\", \"pid=,uid=,command=\"], {\n encoding: \"utf-8\",\n maxBuffer: PS_MAX_BUFFER\n });\n if ((result.status ?? 1) !== 0) {\n return [];\n }\n return String(result.stdout ?? \"\")\n .split(\"\\n\")\n .map((line) => parseServeProcessSnapshot(line))\n .filter((snapshot): snapshot is ServeProcessSnapshot => snapshot !== null);\n}\n\nfunction isCurrentExecutableServeProcess(snapshot: ServeProcessSnapshot): boolean {\n if (CURRENT_UID === null || snapshot.uid === null || snapshot.uid !== CURRENT_UID) {\n return false;\n }\n if (!snapshot.command.includes(CURRENT_EXECUTABLE)) {\n return false;\n }\n if (!SERVE_COMMAND_PATTERN.test(snapshot.command)) {\n return false;\n }\n return !SERVE_STOP_PATTERN.test(snapshot.command);\n}\n\nfunction terminateProcess(pid: number): boolean {\n if (!Number.isInteger(pid) || pid <= 0 || pid === process.pid || pid === process.ppid) {\n return false;\n }\n try {\n process.kill(pid, \"SIGTERM\");\n } catch {\n return false;\n }\n try {\n process.kill(pid, \"SIGKILL\");\n } catch {\n // process may have exited after SIGTERM\n }\n return true;\n}\n\nfunction cleanupCompetingServeProcesses(keepPid?: number): number[] {\n const candidates = listServeProcessSnapshots().filter((snapshot) => {\n if (!isCurrentExecutableServeProcess(snapshot)) {\n return false;\n }\n if (snapshot.pid === process.pid || snapshot.pid === process.ppid) {\n return false;\n }\n if (Number.isInteger(keepPid) && snapshot.pid === keepPid) {\n return false;\n }\n return true;\n });\n if (candidates.length === 0) {\n return [];\n }\n\n const clearedPids: number[] = [];\n for (const snapshot of candidates) {\n if (terminateProcess(snapshot.pid)) {\n clearedPids.push(snapshot.pid);\n }\n }\n\n return clearedPids;\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 const requestedPort = serveArgs.port ?? config.daemonPort;\n const metadata = readDaemonMetadata();\n const metadataToken = metadata?.port === requestedPort ? metadata.token : undefined;\n const tokenCandidates = resolveTokenCandidates(serveArgs.token, metadataToken, config.daemonToken);\n const currentFingerprint = getCurrentDaemonFingerprint();\n\n const existingDaemon = await resolveExistingDaemon(requestedPort, tokenCandidates);\n const staleDaemonPids = new Set(cleanupCompetingServeProcesses(existingDaemon?.status.pid));\n const staleCleared = () => staleDaemonPids.size;\n let replacedStaleFingerprint = false;\n\n if (existingDaemon) {\n const fingerprintMatches = existingDaemon.status.fingerprint === currentFingerprint;\n if (fingerprintMatches) {\n const relayPort = existingDaemon.status.relay.port ?? config.relayPort;\n const clearedCount = staleCleared();\n const staleNote = clearedCount > 0 ? `\\nCleared ${clearedCount} stale daemon process${clearedCount === 1 ? \"\" : \"es\"}.` : \"\";\n return {\n success: true,\n message: `Daemon already running on 127.0.0.1:${requestedPort} (pid=${existingDaemon.status.pid}, relay ${relayPort}).${staleNote}`,\n data: {\n port: requestedPort,\n pid: existingDaemon.status.pid,\n relayPort,\n alreadyRunning: true,\n staleDaemonsCleared: clearedCount,\n relay: existingDaemon.status.relay\n },\n exitCode: null\n };\n }\n await stopStaleDaemon(requestedPort, existingDaemon, staleDaemonPids);\n replacedStaleFingerprint = true;\n }\n\n let nativeStatus = getNativeStatusSnapshot();\n let nativeMessage: string | null = null;\n if (!nativeStatus.installed || nativeStatus.mismatch) {\n const discovered = discoverExtensionId();\n const extensionId = nativeStatus.expectedExtensionId ?? config.nativeExtensionId ?? discovered.extensionId ?? null;\n const usedDiscovery = nativeStatus.expectedExtensionSource !== \"config\" && Boolean(extensionId);\n const previousExtensionId = nativeStatus.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 = nativeStatus.mismatch && previousExtensionId\n ? `Native host reinstalled for extension ${extensionId} (replacing stale ${previousExtensionId}).${suffix}`\n : `${installResult.message ?? \"Native host installed.\"}${suffix}`;\n nativeStatus = getNativeStatusSnapshot();\n } else {\n nativeMessage = nativeStatus.mismatch\n ? `Native host reinstall skipped: ${installResult.message ?? \"unknown error\"}`\n : `Native host install skipped: ${installResult.message ?? \"unknown error\"}`;\n }\n } else if (nativeStatus.mismatch && previousExtensionId) {\n nativeMessage = `Native host targets stale extension ${previousExtensionId}, but no current extension id could be resolved for reinstall.`;\n } else {\n nativeMessage = \"Native host not installed. Set nativeExtensionId in opendevbrowser.jsonc to auto-install.\";\n }\n }\n\n let handle: Awaited<ReturnType<typeof startDaemon>> | null = null;\n let startError: unknown = null;\n for (let attempt = 0; attempt < 2; attempt += 1) {\n try {\n handle = await startDaemon({\n port: serveArgs.port,\n token: serveArgs.token,\n config\n });\n startError = null;\n break;\n } catch (error) {\n startError = error;\n const message = error instanceof Error ? error.message : String(error);\n if (!message.includes(\"EADDRINUSE\") && !message.includes(\"in use\")) {\n break;\n }\n const runningDaemon = await resolveExistingDaemon(requestedPort, tokenCandidates);\n if (runningDaemon) {\n const fingerprintMatches = runningDaemon.status.fingerprint === currentFingerprint;\n if (fingerprintMatches) {\n const relayPort = runningDaemon.status.relay.port ?? config.relayPort;\n const clearedCount = staleCleared();\n const staleNote = clearedCount > 0 ? `\\nCleared ${clearedCount} stale daemon process${clearedCount === 1 ? \"\" : \"es\"}.` : \"\";\n return {\n success: true,\n message: `Daemon already running on 127.0.0.1:${requestedPort} (pid=${runningDaemon.status.pid}, relay ${relayPort}).${staleNote}`,\n data: {\n port: requestedPort,\n pid: runningDaemon.status.pid,\n relayPort,\n alreadyRunning: true,\n staleDaemonsCleared: clearedCount,\n relay: runningDaemon.status.relay\n },\n exitCode: null\n };\n }\n await stopStaleDaemon(requestedPort, runningDaemon, staleDaemonPids);\n replacedStaleFingerprint = true;\n if (attempt === 0) {\n continue;\n }\n }\n if (attempt === 0) {\n let clearedNewPid = false;\n for (const pid of cleanupCompetingServeProcesses()) {\n const previousSize = staleDaemonPids.size;\n staleDaemonPids.add(pid);\n if (staleDaemonPids.size > previousSize) {\n clearedNewPid = true;\n }\n }\n if (clearedNewPid) {\n continue;\n }\n }\n break;\n }\n }\n\n if (!handle) {\n const message = startError instanceof Error ? startError.message : String(startError);\n if (message.includes(\"EADDRINUSE\") || message.includes(\"in use\")) {\n return {\n success: false,\n message: `Daemon port ${requestedPort} is already in use by another process. If this is an existing daemon, run \\`opendevbrowser status --daemon\\` or \\`opendevbrowser serve --stop\\`.`,\n exitCode: EXIT_EXECUTION\n };\n }\n return {\n success: false,\n message: `Failed to start daemon: ${message}`,\n exitCode: EXIT_EXECUTION\n };\n }\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 clearedCount = staleCleared();\n const staleNote = clearedCount > 0 ? `\\nCleared ${clearedCount} stale daemon process${clearedCount === 1 ? \"\" : \"es\"}.` : \"\";\n const fingerprintNote = replacedStaleFingerprint ? \"\\nReplaced stale daemon fingerprint.\" : \"\";\n const message = nativeMessage\n ? `${baseMessage}\\n${nativeMessage}${fingerprintNote}${staleNote}`\n : `${baseMessage}${fingerprintNote}${staleNote}`;\n\n return {\n success: true,\n message,\n data: { port: state.port, pid: state.pid, relayPort: state.relayPort, native: nativeStatus, staleDaemonsCleared: clearedCount },\n exitCode: null\n };\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\nexport function parseBooleanFlag(value: string, flag: string): boolean {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\") {\n return false;\n }\n throw createUsageError(`Invalid ${flag}: ${value}`);\n}\n\nexport function parseOptionalStringFlag(rawArgs: string[], flag: string): string | undefined {\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === flag) {\n const value = rawArgs[i + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n }\n if (arg?.startsWith(`${flag}=`)) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n }\n }\n return undefined;\n}\n\nexport function parseStringArrayFlag(rawArgs: string[], flag: string): string[] | undefined {\n const value = parseOptionalStringFlag(rawArgs, flag);\n if (typeof value !== \"string\") {\n return undefined;\n }\n const items = value.split(\",\").map((item) => item.trim()).filter((item) => item.length > 0);\n if (items.length === 0) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return items;\n}\n\nexport function parseRepeatedStringFlag(rawArgs: string[], flag: string): string[] | undefined {\n const values: string[] = [];\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n if (arg === flag) {\n const value = rawArgs[index + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n values.push(value);\n index += 1;\n continue;\n }\n if (arg?.startsWith(`${flag}=`)) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n values.push(value);\n }\n }\n return values.length > 0 ? values : undefined;\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { execFileSync } from \"child_process\";\nimport { fileURLToPath } from \"url\";\nimport type { ParsedArgs } from \"../args\";\nimport { loadGlobalConfig } from \"../../config\";\nimport { createUsageError, EXIT_DISCONNECTED, EXIT_EXECUTION } from \"../errors\";\nimport { getExtensionPath } from \"../../extension-extractor\";\nimport {\n getChromeUserDataRoots,\n getProfileDirs,\n readProfilePreferences\n} from \"../../cache/chrome-user-data\";\n\ntype NativeSubcommand = \"install\" | \"uninstall\" | \"status\";\n\nexport type NativeStatus = {\n installed: boolean;\n manifestPath: string | null;\n wrapperPath: string | null;\n hostScriptPath: string;\n extensionId: string | null;\n registryPath: string | null;\n discoveredExtensionId: string | null;\n discoveredMatchedBy: ExtensionIdMatchReason | null;\n expectedExtensionId: string | null;\n expectedExtensionSource: \"config\" | ExtensionIdMatchReason | null;\n mismatch: boolean;\n};\n\ntype NativeStatusAssessment = {\n success: boolean;\n message: string;\n summary: string;\n exitCode: number | 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 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 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 = { id: match.id, matchedBy: \"name\" };\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\nconst resolveExpectedExtension = (): {\n discoveredExtensionId: string | null;\n discoveredMatchedBy: ExtensionIdMatchReason | null;\n expectedExtensionId: string | null;\n expectedExtensionSource: \"config\" | ExtensionIdMatchReason | null;\n} => {\n let configuredExtensionId: string | null = null;\n try {\n configuredExtensionId = normalizeExtensionId(loadGlobalConfig().nativeExtensionId);\n } catch {\n configuredExtensionId = null;\n }\n\n const discovered = discoverExtensionId();\n const discoveredExtensionId = discovered.extensionId ?? null;\n const discoveredMatchedBy = discovered.matchedBy ?? null;\n if (discoveredExtensionId) {\n return {\n discoveredExtensionId,\n discoveredMatchedBy,\n expectedExtensionId: discoveredExtensionId,\n expectedExtensionSource: discoveredMatchedBy\n };\n }\n if (configuredExtensionId) {\n return {\n discoveredExtensionId,\n discoveredMatchedBy,\n expectedExtensionId: configuredExtensionId,\n expectedExtensionSource: \"config\"\n };\n }\n return {\n discoveredExtensionId,\n discoveredMatchedBy,\n expectedExtensionId: null,\n expectedExtensionSource: null\n };\n};\n\nexport const getNativeStatusSnapshot = (): NativeStatus => {\n const expectation = resolveExpectedExtension();\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 const mismatch = Boolean(\n installed\n && extensionIdValue\n && expectation.expectedExtensionId\n && extensionIdValue !== expectation.expectedExtensionId\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 discoveredExtensionId: expectation.discoveredExtensionId,\n discoveredMatchedBy: expectation.discoveredMatchedBy,\n expectedExtensionId: expectation.expectedExtensionId,\n expectedExtensionSource: expectation.expectedExtensionSource,\n mismatch\n };\n};\n\nexport function assessNativeStatus(data: NativeStatus): NativeStatusAssessment {\n if (!data.installed) {\n return {\n success: false,\n message: \"Native host not installed.\",\n summary: \"not installed\",\n exitCode: EXIT_DISCONNECTED\n };\n }\n\n if (data.mismatch && data.extensionId && data.expectedExtensionId) {\n return {\n success: false,\n message: `Native host targets ${data.extensionId}, but the current extension is ${data.expectedExtensionId}. Reinstall with \\`opendevbrowser native install ${data.expectedExtensionId}\\` or rerun \\`opendevbrowser serve\\`.`,\n summary: `mismatch (${data.extensionId} != ${data.expectedExtensionId})`,\n exitCode: EXIT_DISCONNECTED\n };\n }\n\n return {\n success: true,\n message: data.extensionId\n ? `Native host installed for extension ${data.extensionId}.`\n : \"Native host installed (extension id missing).\",\n summary: `installed${data.extensionId ? ` (${data.extensionId})` : \"\"}`,\n exitCode: null\n };\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 const assessment = assessNativeStatus(data);\n return {\n success: assessment.success,\n message: assessment.message,\n data,\n exitCode: assessment.exitCode\n };\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 resolveExpectedExtension,\n assessNativeStatus\n};\n","import { execFileSync } from \"child_process\";\nimport { existsSync, mkdirSync, unlinkSync, writeFileSync } from \"fs\";\nimport { homedir, tmpdir } from \"os\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"path\";\nimport { fileURLToPath } from \"url\";\n\nconst MAC_LABEL = \"com.opendevbrowser.daemon\";\nconst WIN_TASK_NAME = \"OpenDevBrowser Daemon\";\nexport const STABLE_DAEMON_INSTALL_GUIDANCE =\n \"Run opendevbrowser daemon install from a stable install location (for example, a global npm install or a persistent local package install).\";\n\nexport type CliEntrypoint = {\n nodePath: string;\n cliPath: string;\n args: string[];\n command: string;\n source: \"argv1\" | \"module\";\n isTransient: boolean;\n};\n\nexport type AutostartHealth = \"unsupported\" | \"missing\" | \"healthy\" | \"needs_repair\" | \"malformed\";\n\nexport type AutostartReason =\n | \"missing_plist\"\n | \"missing_program_arguments\"\n | \"malformed_plist\"\n | \"missing_node_path\"\n | \"missing_cli_path\"\n | \"transient_cli_path\"\n | \"entrypoint_mismatch\"\n | \"unsupported_platform\";\n\nexport type AutostartStatus = {\n platform: NodeJS.Platform;\n supported: boolean;\n installed: boolean;\n health: AutostartHealth;\n needsRepair: boolean;\n location?: string;\n taskName?: string;\n command?: string;\n expectedCommand?: string;\n label?: string;\n reason?: AutostartReason;\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 transientEntrypointRoots?: string[];\n};\n\ntype ResolvedAutostartDeps = Required<Omit<AutostartDeps, \"transientEntrypointRoots\">>\n & Pick<AutostartDeps, \"transientEntrypointRoots\">;\n\ntype MacLaunchAgentParseResult =\n | { ok: true; command: string; programArguments: string[] }\n | { ok: false; reason: \"missing_program_arguments\" | \"malformed_plist\" };\n\ntype WindowsTaskActionParseResult =\n | { ok: true; command: string; programArguments: string[] }\n | { ok: false };\n\nconst defaultDeps = (): ResolvedAutostartDeps => ({\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 transientEntrypointRoots: undefined\n});\n\nconst NPX_CACHE_SEGMENT_PATTERN = /[\\\\/]_npx(?:[\\\\/]|$)/;\n\nconst formatCommand = (programArguments: string[]): string => {\n return programArguments.map((value) => `\"${value}\"`).join(\" \");\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\nconst normalizeComparisonPath = (value: string, platform: NodeJS.Platform): string => {\n const resolvedPath = resolve(value);\n return platform === \"win32\" ? resolvedPath.toLowerCase() : resolvedPath;\n};\n\nconst isPathInsideRoot = (candidate: string, root: string, platform: NodeJS.Platform): boolean => {\n const normalizedCandidate = normalizeComparisonPath(candidate, platform);\n const normalizedRoot = normalizeComparisonPath(root, platform);\n const relation = relative(normalizedRoot, normalizedCandidate);\n return relation === \"\" || (!relation.startsWith(\"..\") && !isAbsolute(relation));\n};\n\nconst getTransientEntrypointRoots = (deps: ResolvedAutostartDeps): string[] => {\n const configuredRoots = deps.transientEntrypointRoots;\n if (configuredRoots && configuredRoots.length > 0) {\n return [...new Set(configuredRoots.map((root) => normalizeComparisonPath(root, deps.platform)))];\n }\n\n const roots = [tmpdir()];\n if (deps.platform === \"darwin\") {\n roots.push(\"/tmp\", \"/private/tmp\");\n }\n return [...new Set(roots.map((root) => normalizeComparisonPath(root, deps.platform)))];\n};\n\nconst isTransientCliPath = (cliPath: string, deps: ResolvedAutostartDeps): boolean => {\n const normalizedCliPath = normalizeComparisonPath(cliPath, deps.platform);\n return getTransientEntrypointRoots(deps).some((root) => isPathInsideRoot(cliPath, root, deps.platform))\n || NPX_CACHE_SEGMENT_PATTERN.test(normalizedCliPath);\n};\n\nconst TRANSIENT_AUTOSTART_INSTALL_ERROR_PREFIX = \"Cannot install daemon autostart from transient CLI path\";\n\nexport const isTransientAutostartInstallError = (error: unknown): boolean => {\n const message = error instanceof Error ? error.message : String(error);\n return message.startsWith(TRANSIENT_AUTOSTART_INSTALL_ERROR_PREFIX);\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 let source: CliEntrypoint[\"source\"] = \"module\";\n\n if (resolved.argv1) {\n const candidate = resolve(resolved.argv1);\n if (exists(candidate)) {\n cliPath = candidate;\n source = \"argv1\";\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 = formatCommand([nodePath, ...args]);\n const isTransient = isTransientCliPath(cliPath, resolved);\n\n return { nodePath, cliPath, args, command, source, isTransient };\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 = formatCommand([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 createAutostartStatus = (status: AutostartStatus): AutostartStatus => status;\n\nconst createMacAutostartStatus = (\n entrypoint: CliEntrypoint,\n location: string,\n overrides: Partial<AutostartStatus>\n): AutostartStatus => {\n return createAutostartStatus({\n platform: \"darwin\",\n supported: true,\n installed: false,\n health: \"missing\",\n needsRepair: false,\n location,\n label: MAC_LABEL,\n expectedCommand: entrypoint.isTransient ? undefined : entrypoint.command,\n ...overrides\n });\n};\n\nconst createWindowsAutostartStatus = (\n entrypoint: CliEntrypoint,\n overrides: Partial<AutostartStatus>\n): AutostartStatus => {\n return createAutostartStatus({\n platform: \"win32\",\n supported: true,\n installed: false,\n health: \"missing\",\n needsRepair: false,\n taskName: WIN_TASK_NAME,\n expectedCommand: entrypoint.isTransient ? undefined : entrypoint.command,\n ...overrides\n });\n};\n\nconst classifyPersistedProgramArguments = (\n programArguments: string[],\n deps: ResolvedAutostartDeps\n): { health: \"healthy\" | \"needs_repair\"; reason?: AutostartReason } => {\n const actualNodePath = programArguments[0];\n const actualCliPath = programArguments[1];\n\n if (!actualNodePath || !deps.existsSync(actualNodePath)) {\n return { health: \"needs_repair\", reason: \"missing_node_path\" };\n }\n\n if (!actualCliPath || !deps.existsSync(actualCliPath)) {\n return { health: \"needs_repair\", reason: \"missing_cli_path\" };\n }\n\n if (isTransientCliPath(actualCliPath, deps)) {\n return { health: \"needs_repair\", reason: \"transient_cli_path\" };\n }\n\n if (programArguments.length !== 3 || programArguments[2] !== \"serve\") {\n return { health: \"needs_repair\", reason: \"entrypoint_mismatch\" };\n }\n\n return { health: \"healthy\" };\n};\n\nconst hasMatchingProgramArgument = (\n programArguments: string[],\n expectedValue: string,\n deps: ResolvedAutostartDeps,\n isPath = false\n): boolean => {\n const normalizedExpected = isPath ? normalizeComparisonPath(expectedValue, deps.platform) : expectedValue;\n return programArguments.some((value) => {\n const normalizedValue = isPath ? normalizeComparisonPath(value, deps.platform) : value;\n return normalizedValue === normalizedExpected;\n });\n};\n\nconst classifyExpectedProgramArguments = (\n expectedArgs: string[],\n actualArgs: string[],\n deps: ResolvedAutostartDeps\n): AutostartReason | undefined => {\n if (!hasMatchingProgramArgument([actualArgs[0] ?? \"\"], expectedArgs[0] ?? \"\", deps, true)) {\n return hasMatchingProgramArgument(actualArgs, expectedArgs[0] ?? \"\", deps, true)\n ? \"entrypoint_mismatch\"\n : \"missing_node_path\";\n }\n\n if (!hasMatchingProgramArgument([actualArgs[1] ?? \"\"], expectedArgs[1] ?? \"\", deps, true)) {\n return hasMatchingProgramArgument(actualArgs, expectedArgs[1] ?? \"\", deps, true)\n ? \"entrypoint_mismatch\"\n : \"missing_cli_path\";\n }\n\n if (\n actualArgs.length !== expectedArgs.length\n || !actualArgs.every((value, index) => {\n const expectedValue = expectedArgs[index] ?? \"\";\n return index < 2\n ? normalizeComparisonPath(value, deps.platform) === normalizeComparisonPath(expectedValue, deps.platform)\n : value === expectedValue;\n })\n ) {\n return \"entrypoint_mismatch\";\n }\n\n return undefined;\n};\n\nconst readMacLaunchAgentProgramArguments = (\n plistPath: string,\n deps: ResolvedAutostartDeps\n): MacLaunchAgentParseResult => {\n try {\n const text = deps.execFileSync(\"plutil\", [\"-convert\", \"json\", \"-o\", \"-\", plistPath], { encoding: \"utf-8\" }) as string;\n const parsed = JSON.parse(text) as { ProgramArguments?: unknown };\n const programArguments = parsed?.ProgramArguments;\n if (\n !Array.isArray(programArguments)\n || programArguments.length < 2\n || programArguments.some((value) => typeof value !== \"string\")\n ) {\n return { ok: false, reason: \"missing_program_arguments\" };\n }\n const commandArgs = programArguments as string[];\n return {\n ok: true,\n command: formatCommand(commandArgs),\n programArguments: commandArgs\n };\n } catch {\n return { ok: false, reason: \"malformed_plist\" };\n }\n};\n\nconst classifyMacAutostartStatus = (\n entrypoint: CliEntrypoint,\n location: string,\n deps: ResolvedAutostartDeps\n): AutostartStatus => {\n if (!deps.existsSync(location)) {\n return createMacAutostartStatus(entrypoint, location, {\n installed: false,\n health: \"missing\",\n needsRepair: false,\n reason: \"missing_plist\"\n });\n }\n\n const parsed = readMacLaunchAgentProgramArguments(location, deps);\n if (!parsed.ok) {\n return createMacAutostartStatus(entrypoint, location, {\n installed: true,\n health: \"malformed\",\n needsRepair: true,\n reason: parsed.reason\n });\n }\n\n const expectedNodePath = entrypoint.nodePath;\n const expectedCliPath = entrypoint.cliPath;\n const expectedArgs = [expectedNodePath, ...entrypoint.args];\n const actualArgs = parsed.programArguments;\n const actualStatus = classifyPersistedProgramArguments(actualArgs, deps);\n\n if (actualStatus.health !== \"healthy\") {\n return createMacAutostartStatus(entrypoint, location, {\n installed: true,\n health: \"needs_repair\",\n needsRepair: true,\n command: parsed.command,\n reason: actualStatus.reason\n });\n }\n\n if (entrypoint.isTransient) {\n return createMacAutostartStatus(entrypoint, location, {\n installed: true,\n health: \"healthy\",\n needsRepair: false,\n command: parsed.command\n });\n }\n\n const mismatchReason = classifyExpectedProgramArguments(expectedArgs, actualArgs, deps);\n if (mismatchReason) {\n return createMacAutostartStatus(entrypoint, location, {\n installed: true,\n health: \"needs_repair\",\n needsRepair: true,\n command: parsed.command,\n reason: mismatchReason\n });\n }\n\n return createMacAutostartStatus(entrypoint, location, {\n installed: true,\n health: \"healthy\",\n needsRepair: false,\n command: parsed.command\n });\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 assertPersistentEntrypoint = (entrypoint: CliEntrypoint): void => {\n if (!entrypoint.isTransient) {\n return;\n }\n\n throw new Error(\n `${TRANSIENT_AUTOSTART_INSTALL_ERROR_PREFIX} \"${entrypoint.cliPath}\". `\n + `${STABLE_DAEMON_INSTALL_GUIDANCE} Do not use a temporary npx cache or onboarding workspace.`\n );\n};\n\nconst installMacAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n const entrypoint = resolveCliEntrypoint(resolved);\n assertPersistentEntrypoint(entrypoint);\n const home = resolved.homedir();\n const plistPath = getLaunchAgentPath(home);\n const stdoutPath = join(home, \"Library\", \"Logs\", \"opendevbrowser-daemon.log\");\n const stderrPath = join(home, \"Library\", \"Logs\", \"opendevbrowser-daemon.err.log\");\n const logsDir = dirname(stdoutPath);\n resolved.mkdirSync(dirname(plistPath), { recursive: true });\n resolved.mkdirSync(logsDir, { recursive: true });\n resolved.writeFileSync(\n plistPath,\n buildLaunchAgentPlist(entrypoint, { stdoutPath, stderrPath }),\n { encoding: \"utf-8\" }\n );\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 createMacAutostartStatus(entrypoint, plistPath, {\n installed: true,\n health: \"healthy\",\n needsRepair: false,\n command: entrypoint.command\n });\n};\n\nconst uninstallMacAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n const entrypoint = resolveCliEntrypoint(resolved);\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 createMacAutostartStatus(entrypoint, plistPath, {\n installed: false,\n health: \"missing\",\n needsRepair: false,\n reason: \"missing_plist\"\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 decodeXmlText = (value: string): string => {\n return value\n .replace(/&quot;/g, \"\\\"\")\n .replace(/&apos;/g, \"'\")\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&amp;/g, \"&\");\n};\n\nconst readXmlTag = (xml: string, tagName: string): string | undefined => {\n const match = xml.match(new RegExp(`<${tagName}>([\\\\s\\\\S]*?)</${tagName}>`, \"i\"));\n return match?.[1] ? decodeXmlText(match[1]) : undefined;\n};\n\nconst splitCommandLine = (value: string): string[] => {\n const args: string[] = [];\n let current = \"\";\n let inQuotes = false;\n let backslashes = 0;\n\n for (const char of value) {\n if (char === \"\\\\\") {\n backslashes += 1;\n continue;\n }\n\n if (char === \"\\\"\") {\n if (backslashes > 0) {\n current += \"\\\\\".repeat(Math.floor(backslashes / 2));\n if (backslashes % 2 === 1) {\n current += \"\\\"\";\n backslashes = 0;\n continue;\n }\n }\n backslashes = 0;\n inQuotes = !inQuotes;\n continue;\n }\n\n if (backslashes > 0) {\n current += \"\\\\\".repeat(backslashes);\n backslashes = 0;\n }\n\n if (!inQuotes && /\\s/.test(char)) {\n if (current.length > 0) {\n args.push(current);\n current = \"\";\n }\n continue;\n }\n\n current += char;\n }\n\n if (backslashes > 0) {\n current += \"\\\\\".repeat(backslashes);\n }\n\n if (current.length > 0) {\n args.push(current);\n }\n\n return args;\n};\n\nconst readWindowsTaskAction = (\n taskName: string,\n deps: ResolvedAutostartDeps\n): WindowsTaskActionParseResult => {\n try {\n const xml = deps.execFileSync(\"schtasks\", [\"/Query\", \"/TN\", taskName, \"/XML\"], { encoding: \"utf-8\" }) as string;\n const command = readXmlTag(xml, \"Command\");\n const argumentsValue = readXmlTag(xml, \"Arguments\");\n\n if (!command) {\n return { ok: false };\n }\n\n const programArguments = argumentsValue !== undefined\n ? [command, ...splitCommandLine(argumentsValue)]\n : splitCommandLine(command);\n\n if (programArguments.length === 0) {\n return { ok: false };\n }\n\n return {\n ok: true,\n command: formatCommand(programArguments),\n programArguments\n };\n } catch {\n return { ok: false };\n }\n};\n\nconst classifyWindowsAutostartStatus = (\n entrypoint: CliEntrypoint,\n deps: ResolvedAutostartDeps\n): AutostartStatus => {\n const installed = isWindowsTaskInstalled(deps);\n if (!installed) {\n return createWindowsAutostartStatus(entrypoint, {\n installed: false,\n health: \"missing\",\n needsRepair: false\n });\n }\n\n const parsed = readWindowsTaskAction(WIN_TASK_NAME, deps);\n if (!parsed.ok) {\n return createWindowsAutostartStatus(entrypoint, {\n installed: true,\n health: \"needs_repair\",\n needsRepair: true,\n reason: \"entrypoint_mismatch\"\n });\n }\n\n const expectedArgs = [entrypoint.nodePath, ...entrypoint.args];\n const actualStatus = classifyPersistedProgramArguments(parsed.programArguments, deps);\n\n if (actualStatus.health !== \"healthy\") {\n return createWindowsAutostartStatus(entrypoint, {\n installed: true,\n health: \"needs_repair\",\n needsRepair: true,\n command: parsed.command,\n reason: actualStatus.reason\n });\n }\n\n if (entrypoint.isTransient) {\n return createWindowsAutostartStatus(entrypoint, {\n installed: true,\n health: \"healthy\",\n needsRepair: false,\n command: parsed.command\n });\n }\n\n const mismatchReason = classifyExpectedProgramArguments(expectedArgs, parsed.programArguments, deps);\n if (mismatchReason) {\n return createWindowsAutostartStatus(entrypoint, {\n installed: true,\n health: \"needs_repair\",\n needsRepair: true,\n command: parsed.command,\n reason: mismatchReason\n });\n }\n\n return createWindowsAutostartStatus(entrypoint, {\n installed: true,\n health: \"healthy\",\n needsRepair: false,\n command: parsed.command\n });\n};\n\nconst installWindowsAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n const entrypoint = resolveCliEntrypoint(resolved);\n assertPersistentEntrypoint(entrypoint);\n const { args } = buildWindowsTaskArgs(entrypoint, WIN_TASK_NAME);\n runCommand(resolved.execFileSync, \"schtasks\", args);\n return createWindowsAutostartStatus(entrypoint, {\n installed: true,\n health: \"healthy\",\n needsRepair: false,\n command: entrypoint.command\n });\n};\n\nconst uninstallWindowsAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n const entrypoint = resolveCliEntrypoint(resolved);\n runCommand(resolved.execFileSync, \"schtasks\", [\"/Delete\", \"/TN\", WIN_TASK_NAME, \"/F\"], true);\n return createWindowsAutostartStatus(entrypoint, {\n installed: false,\n health: \"missing\",\n needsRepair: false\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 entrypoint = resolveCliEntrypoint(resolved);\n const location = getLaunchAgentPath(resolved.homedir());\n return classifyMacAutostartStatus(entrypoint, location, resolved);\n }\n\n if (platform === \"win32\") {\n const entrypoint = resolveCliEntrypoint(resolved);\n return classifyWindowsAutostartStatus(entrypoint, resolved);\n }\n\n return createAutostartStatus({\n platform,\n supported: false,\n installed: false,\n health: \"unsupported\",\n needsRepair: false,\n reason: \"unsupported_platform\"\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 createAutostartStatus({\n platform,\n supported: false,\n installed: false,\n health: \"unsupported\",\n needsRepair: false,\n reason: \"unsupported_platform\"\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 createAutostartStatus({\n platform,\n supported: false,\n installed: false,\n health: \"unsupported\",\n needsRepair: false,\n reason: \"unsupported_platform\"\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 {\n getAutostartStatus,\n installAutostart,\n isTransientAutostartInstallError,\n STABLE_DAEMON_INSTALL_GUIDANCE,\n uninstallAutostart\n} from \"../daemon-autostart\";\n\ntype DaemonSubcommand = \"install\" | \"uninstall\" | \"status\";\n\ntype DaemonResult = {\n installed: boolean;\n running: boolean;\n autostart?: ReturnType<typeof getAutostartStatus>;\n status?: Awaited<ReturnType<typeof fetchDaemonStatusFromMetadata>>;\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 formatReason = (reason?: ReturnType<typeof getAutostartStatus>[\"reason\"]): string => {\n return reason ? reason.replace(/_/g, \" \") : \"unknown reason\";\n};\n\nconst buildStableAutostartGuidance = (action: \"install\" | \"repair\"): string => {\n return `${STABLE_DAEMON_INSTALL_GUIDANCE.replace(/\\.$/, \"\")} to ${action} it.`;\n};\n\nconst describeAutostartLocation = (autostart: ReturnType<typeof getAutostartStatus>): string => {\n if (autostart.location) {\n return ` at ${autostart.location}`;\n }\n if (autostart.taskName) {\n return ` (${autostart.taskName})`;\n }\n return \"\";\n};\n\nconst buildStatusMessage = (autostart: ReturnType<typeof getAutostartStatus>, running: boolean): string => {\n const runningText = running ? \"running\" : \"not running\";\n\n if (!autostart.supported) {\n return `Daemon autostart is not supported on ${autostart.platform}. Daemon is ${runningText}.`;\n }\n\n const location = describeAutostartLocation(autostart);\n\n if (autostart.health === \"healthy\") {\n return `Autostart is installed and healthy${location}. Daemon is ${runningText}.`;\n }\n\n if (autostart.health === \"missing\") {\n return `Autostart is not installed${location}. ${buildStableAutostartGuidance(\"install\")} Daemon is ${runningText}.`;\n }\n\n if (autostart.health === \"needs_repair\") {\n return `Autostart is installed${location} but needs repair (${formatReason(autostart.reason)}). ${buildStableAutostartGuidance(\"repair\")} Daemon is ${runningText}.`;\n }\n\n if (autostart.health === \"malformed\") {\n return `Autostart exists${location} but is malformed (${formatReason(autostart.reason)}). ${buildStableAutostartGuidance(\"repair\")} Daemon is ${runningText}.`;\n }\n\n return `Daemon autostart is not supported on ${autostart.platform}. Daemon is ${runningText}.`;\n};\n\nexport async function runDaemonCommand(args: ParsedArgs) {\n const { subcommand } = parseDaemonArgs(args.rawArgs);\n\n if (subcommand === \"install\") {\n let result;\n try {\n result = installAutostart();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: isTransientAutostartInstallError(error)\n ? message\n : `Daemon autostart install failed: ${message}`,\n exitCode: EXIT_EXECUTION\n };\n }\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 { join, resolve } from \"path\";\nimport { tmpdir } from \"os\";\nimport type { ParsedArgs } from \"../args\";\nimport { createUsageError } from \"../errors\";\nimport { cleanupExpiredArtifacts } from \"../../providers/artifacts\";\n\ntype ArtifactsSubcommand = \"cleanup\";\n\ninterface CleanupArgs {\n subcommand: ArtifactsSubcommand;\n expiredOnly: boolean;\n outputDir?: string;\n}\n\nconst PASSTHROUGH_BOOLEAN_FLAGS = new Set([\n \"--with-config\",\n \"--no-prompt\",\n \"--no-interactive\",\n \"--quiet\",\n \"--skills-global\",\n \"--skills-local\",\n \"--no-skills\",\n \"--full\"\n]);\n\nconst PASSTHROUGH_VALUE_FLAGS = new Set([\n \"--output-format\",\n \"--transport\"\n]);\n\nconst usageError = (): never => {\n throw createUsageError(\"Usage: opendevbrowser artifacts cleanup --expired-only [--output-dir <path>]\");\n};\n\nconst requireValue = (rawArgs: string[], index: number, flag: string): string => {\n const value = rawArgs[index + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst consumePassthroughFlag = (rawArgs: string[], index: number): number | null => {\n const arg = rawArgs[index];\n if (!arg) {\n return null;\n }\n\n if (PASSTHROUGH_BOOLEAN_FLAGS.has(arg)) {\n return index;\n }\n\n if (PASSTHROUGH_VALUE_FLAGS.has(arg)) {\n requireValue(rawArgs, index, arg);\n return index + 1;\n }\n\n const equalsFlag = arg.split(\"=\", 2)[0];\n if (equalsFlag && PASSTHROUGH_VALUE_FLAGS.has(equalsFlag)) {\n return index;\n }\n\n return null;\n};\n\nconst parseArtifactsArgs = (rawArgs: string[]): CleanupArgs => {\n const [candidate, ...rest] = rawArgs;\n if (candidate !== \"cleanup\") {\n usageError();\n }\n const subcommand: ArtifactsSubcommand = \"cleanup\";\n\n let expiredOnly = false;\n let outputDir: string | undefined;\n\n for (let index = 0; index < rest.length; index += 1) {\n const arg = rest[index];\n if (arg === \"--expired-only\") {\n expiredOnly = true;\n continue;\n }\n\n if (arg === \"--output-dir\") {\n outputDir = requireValue(rest, index, \"--output-dir\");\n index += 1;\n continue;\n }\n\n if (arg?.startsWith(\"--output-dir=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) {\n throw createUsageError(\"Missing value for --output-dir\");\n }\n outputDir = value;\n continue;\n }\n\n const passthroughIndex = consumePassthroughFlag(rest, index);\n if (passthroughIndex !== null) {\n index = passthroughIndex;\n continue;\n }\n\n throw createUsageError(`Unknown artifacts flag: ${arg}`);\n }\n\n if (!expiredOnly) {\n usageError();\n }\n\n return {\n subcommand,\n expiredOnly,\n outputDir\n };\n};\n\nexport async function runArtifactsCommand(args: ParsedArgs) {\n const parsed = parseArtifactsArgs(args.rawArgs);\n const rootDir = parsed.outputDir ? resolve(parsed.outputDir) : join(tmpdir(), \"opendevbrowser\");\n const cleaned = await cleanupExpiredArtifacts(rootDir);\n\n return {\n success: true,\n message: `Artifact cleanup completed. Removed ${cleaned.removed.length} expired run(s).`,\n data: {\n rootDir,\n expiredOnly: parsed.expiredOnly,\n removed: cleaned.removed,\n skipped: cleaned.skipped,\n removedCount: cleaned.removed.length,\n skippedCount: cleaned.skipped.length\n }\n };\n}\n\nexport const __test__ = {\n parseArtifactsArgs\n};\n","import { getAutostartStatus, installAutostart } from \"./daemon-autostart\";\nimport type { AutostartInstallResult, AutostartStatus } from \"./daemon-autostart\";\n\nexport const INSTALL_AUTOSTART_SKIP_ENV_VAR = \"OPDEVBROWSER_SKIP_INSTALL_AUTOSTART_RECONCILIATION\";\n\nexport type InstallResultLike = {\n success: boolean;\n alreadyInstalled: boolean;\n};\n\nexport type AutostartAction =\n | \"unsupported\"\n | \"already_healthy\"\n | \"installed\"\n | \"repaired\"\n | \"repair_failed\";\n\nexport type InstallAutostartReconciliationResult = {\n attempted: boolean;\n autostart?: AutostartStatus;\n autostartAction?: AutostartAction;\n autostartError?: string;\n};\n\nexport type InstallAutostartReconciliationDeps = {\n getAutostartStatus?: () => AutostartStatus;\n installAutostart?: () => AutostartInstallResult;\n};\n\nexport type InstallAutostartReconciliationOptions = {\n env?: NodeJS.ProcessEnv;\n};\n\nconst defaultDeps = (): Required<InstallAutostartReconciliationDeps> => ({\n getAutostartStatus,\n installAutostart\n});\n\nexport function shouldSkipInstallAutostartReconciliation(env: NodeJS.ProcessEnv = process.env): boolean {\n const raw = env[INSTALL_AUTOSTART_SKIP_ENV_VAR];\n if (raw === undefined) {\n return false;\n }\n const normalized = raw.trim().toLowerCase();\n return normalized === \"1\" || normalized === \"true\" || normalized === \"yes\";\n}\n\nexport function reconcileInstallAutostart(\n installResult: InstallResultLike,\n deps: InstallAutostartReconciliationDeps = {},\n options: InstallAutostartReconciliationOptions = {}\n): InstallAutostartReconciliationResult {\n if (!installResult.success || shouldSkipInstallAutostartReconciliation(options.env)) {\n return { attempted: false };\n }\n\n const resolved = { ...defaultDeps(), ...deps };\n const status = resolved.getAutostartStatus();\n\n if (!status.supported) {\n return {\n attempted: false,\n autostart: status,\n autostartAction: \"unsupported\"\n };\n }\n\n if (status.health === \"healthy\") {\n return {\n attempted: false,\n autostart: status,\n autostartAction: \"already_healthy\"\n };\n }\n\n if (status.health !== \"missing\" && status.health !== \"needs_repair\" && status.health !== \"malformed\") {\n return {\n attempted: false,\n autostart: status\n };\n }\n\n try {\n const autostart = resolved.installAutostart();\n return {\n attempted: true,\n autostart,\n autostartAction: status.health === \"missing\" ? \"installed\" : \"repaired\"\n };\n } catch (error) {\n let autostart = status;\n try {\n autostart = resolved.getAutostartStatus();\n } catch {\n autostart = status;\n }\n\n return {\n attempted: true,\n autostart,\n autostartAction: \"repair_failed\",\n autostartError: error instanceof Error ? error.message : String(error)\n };\n }\n}\n","import {\n isTransientAutostartInstallError,\n STABLE_DAEMON_INSTALL_GUIDANCE\n} from \"./daemon-autostart\";\nimport type { InstallAutostartReconciliationResult } from \"./install-autostart-reconciliation\";\n\nexport function createInstallAutostartOutputPayload(\n result?: InstallAutostartReconciliationResult\n): Record<string, unknown> {\n if (!result) {\n return {};\n }\n\n return {\n autostart: result.autostart,\n autostartAction: result.autostartAction,\n ...(result.autostartAction === \"repair_failed\" && result.autostartError\n ? { autostartError: result.autostartError }\n : {})\n };\n}\n\nexport function formatAutostartReconciliationMessage(\n result: InstallAutostartReconciliationResult\n): string | null {\n switch (result.autostartAction) {\n case \"unsupported\":\n return result.autostart\n ? `Autostart not supported on ${result.autostart.platform}.`\n : \"Autostart not supported on this platform.\";\n case \"already_healthy\":\n return \"Autostart already healthy.\";\n case \"installed\":\n return result.autostart\n ? `Autostart installed (${result.autostart.platform}).`\n : \"Autostart installed.\";\n case \"repaired\":\n return result.autostart\n ? `Autostart repaired (${result.autostart.platform}).`\n : \"Autostart repaired.\";\n case \"repair_failed\":\n if (result.autostartError && isTransientAutostartInstallError(result.autostartError)) {\n return `Plugin install succeeded but autostart repair was skipped because the current CLI path is transient: ${result.autostartError}`;\n }\n return `Plugin install succeeded but autostart repair failed: ${result.autostartError ?? \"unknown error\"}. Run opendevbrowser daemon install to repair it.`;\n default:\n return null;\n }\n}\n\nexport { STABLE_DAEMON_INSTALL_GUIDANCE };\n","import { readFileSync } from \"fs\";\nimport { createOpenDevBrowserCore } from \"../../core\";\nimport type { ParsedArgs } from \"../args\";\nimport { parseBooleanFlag } from \"../utils/parse\";\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 const value = rawArgs[i + 1];\n if (value && !value.startsWith(\"--\")) {\n parsed.persistProfile = parseBooleanFlag(value, \"--persist-profile\");\n i += 1;\n } else {\n parsed.persistProfile = true;\n }\n continue;\n }\n if (arg?.startsWith(\"--persist-profile=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --persist-profile\");\n parsed.persistProfile = parseBooleanFlag(value, \"--persist-profile\");\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 ?? false\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\nexport const __test__ = { parseRunArgs };\n","import type { OutputFormat } from \"./args\";\n\nexport type OutputOptions = {\n format: OutputFormat;\n quiet?: boolean;\n};\n\ntype ExitProcessLike = Pick<typeof process, \"exit\" | \"exitCode\" | \"stdout\" | \"stderr\">;\n\nconst normalizeExitCode = (code: number | null | undefined): number => {\n return Number.isInteger(code) ? Number(code) : 0;\n};\n\nconst flushStream = (\n stream: ExitProcessLike[\"stdout\"] | ExitProcessLike[\"stderr\"] | undefined | null\n): Promise<void> => {\n return new Promise((resolve) => {\n if (!stream || typeof stream.write !== \"function\") {\n resolve();\n return;\n }\n try {\n stream.write(\"\", () => resolve());\n } catch {\n resolve();\n }\n });\n};\n\nexport async function flushOutputAndExit(\n code: number | null | undefined,\n proc: ExitProcessLike = process,\n timeoutMs = 250\n): Promise<void> {\n const finalCode = normalizeExitCode(code);\n proc.exitCode = finalCode;\n\n await new Promise<void>((resolve) => {\n let settled = false;\n const finish = () => {\n if (settled) return;\n settled = true;\n resolve();\n };\n const timer = setTimeout(finish, Math.max(0, timeoutMs));\n timer.unref?.();\n void Promise.allSettled([flushStream(proc.stdout), flushStream(proc.stderr)]).finally(() => {\n clearTimeout(timer);\n finish();\n });\n });\n\n proc.exit(finalCode);\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 { parseBooleanFlag, 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\nconst MIN_LAUNCH_CALL_TIMEOUT_MS = 30_000;\nconst MANAGED_HEADED_LAUNCH_CALL_TIMEOUT_MS = 60_000;\nconst LAUNCH_CALL_TIMEOUT_BUFFER_MS = 5_000;\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 const value = rawArgs[i + 1];\n if (value && !value.startsWith(\"--\")) {\n parsed.persistProfile = parseBooleanFlag(value, \"--persist-profile\");\n i += 1;\n } else {\n parsed.persistProfile = true;\n }\n continue;\n }\n if (arg?.startsWith(\"--persist-profile=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --persist-profile\");\n parsed.persistProfile = parseBooleanFlag(value, \"--persist-profile\");\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\nfunction deriveLaunchCallTimeoutMs(launchArgs: LaunchArgs): number {\n const waitHintMs = typeof launchArgs.waitTimeoutMs === \"number\"\n ? launchArgs.waitTimeoutMs + LAUNCH_CALL_TIMEOUT_BUFFER_MS\n : 0;\n const managedHeadedHintMs = launchArgs.noExtension && launchArgs.headless !== true\n ? MANAGED_HEADED_LAUNCH_CALL_TIMEOUT_MS\n : 0;\n return Math.max(MIN_LAUNCH_CALL_TIMEOUT_MS, waitHintMs, managedHeadedHintMs);\n}\n\nexport const __test__ = { parseLaunchArgs, deriveLaunchCallTimeoutMs };\n\nexport async function runSessionLaunch(args: ParsedArgs) {\n const launchArgs = parseLaunchArgs(args.rawArgs);\n const launchCallTimeoutMs = deriveLaunchCallTimeoutMs(launchArgs);\n try {\n const result = await callDaemon(\"session.launch\", launchArgs, { timeoutMs: launchCallTimeoutMs }) 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 retryArgs = { ...launchArgs, waitForExtension: true };\n const result = await callDaemon(\"session.launch\", retryArgs, { timeoutMs: deriveLaunchCallTimeoutMs(retryArgs) }) 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 managedArgs = {\n ...launchArgs,\n noExtension: true,\n headless: useHeadless ? true : false\n };\n const result = await callDaemon(\"session.launch\", managedArgs, { timeoutMs: deriveLaunchCallTimeoutMs(managedArgs) }) 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 startUrl?: string;\n headless?: boolean;\n extensionLegacy?: boolean;\n};\n\nconst DEFAULT_CONNECT_TIMEOUT_MS = 30_000;\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 === \"--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 === \"--extension-legacy\") {\n parsed.extensionLegacy = true;\n continue;\n }\n if (arg === \"--headless\") {\n parsed.headless = 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, {\n timeoutMs: DEFAULT_CONNECT_TIMEOUT_MS\n }) 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 const timeoutMs = closeBrowser ? 120_000 : 20_000;\n await callDaemon(\"session.disconnect\", { sessionId, closeBrowser }, { timeoutMs });\n return { success: true, message: `Session disconnected: ${sessionId}` };\n}\n","import { summarizePrimaryProviderIssue } from \"../../providers/constraint\";\n\ntype FailureShape = {\n provider?: string;\n error?: {\n reasonCode?: unknown;\n code?: unknown;\n message?: unknown;\n details?: Record<string, unknown>;\n };\n};\n\nconst asRecord = (value: unknown): Record<string, unknown> | null => (\n value && typeof value === \"object\" && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null\n);\n\nconst readNonEmptyString = (value: unknown): string | null => (\n typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null\n);\n\nconst UNRESOLVED_COMMAND_PLACEHOLDER_RE = /<[^>\\n]+>/;\n\nconst readRunnableStepCommand = (step: Record<string, unknown>): string | null => {\n const command = readNonEmptyString(step.command);\n if (!command) return null;\n return UNRESOLVED_COMMAND_PLACEHOLDER_RE.test(command) ? null : command;\n};\n\nconst readMeta = (data: unknown): Record<string, unknown> | null => {\n return asRecord(asRecord(data)?.meta);\n};\n\nconst readPrimaryConstraint = (data: unknown): Record<string, unknown> | null => {\n const meta = readMeta(data);\n if (!meta) return null;\n return asRecord(meta.primaryConstraint);\n};\n\nconst readPrimarySummary = (data: unknown): string | null => {\n const meta = readMeta(data);\n return readNonEmptyString(meta?.primaryConstraintSummary);\n};\n\nconst readPrimaryNextStep = (data: unknown): string | null => {\n const constraint = readPrimaryConstraint(data);\n if (!constraint) return null;\n const guidance = asRecord(constraint.guidance);\n if (!guidance) return null;\n const commands = guidance.recommendedNextCommands;\n if (!Array.isArray(commands)) return null;\n const nextStep = commands.find((entry): entry is string => typeof entry === \"string\" && entry.trim().length > 0);\n return nextStep?.trim() ?? null;\n};\n\nconst readFailures = (data: unknown): FailureShape[] => {\n const meta = readMeta(data);\n if (!meta) return [];\n const failures = meta.failures;\n return Array.isArray(failures)\n ? failures.filter((entry): entry is FailureShape => Boolean(entry) && typeof entry === \"object\")\n : [];\n};\n\nconst readFollowthroughSummary = (data: unknown): string | null => {\n const record = asRecord(data);\n return readNonEmptyString(record?.followthroughSummary)\n ?? readNonEmptyString(readMeta(data)?.followthroughSummary);\n};\n\nconst readSuggestedSteps = (data: unknown): readonly Record<string, unknown>[] => {\n const steps = asRecord(data)?.suggestedSteps;\n return Array.isArray(steps)\n ? steps.flatMap((step) => {\n const record = asRecord(step);\n return record ? [record] : [];\n })\n : [];\n};\n\nexport const buildNextStepMessage = (message: string, nextStep: string | null): string => {\n return nextStep ? `${message} Next step: ${nextStep}` : message;\n};\n\nexport const readSuggestedNextAction = (data: unknown): string | null => {\n const record = asRecord(data);\n if (!record) return null;\n return readNonEmptyString(record.suggestedNextAction)\n ?? readNonEmptyString(asRecord(record.sessionInspector)?.suggestedNextAction);\n};\n\nexport const readSuggestedStepCommand = (data: unknown): string | null => {\n let current = asRecord(data);\n\n while (current) {\n const command = readSuggestedSteps(current)\n .map(readRunnableStepCommand)\n .find((step): step is string => Boolean(step));\n if (command) {\n return command;\n }\n current = asRecord(current.challengePlan);\n }\n\n return null;\n};\n\nexport const readSuggestedStepReason = (data: unknown): string | null => {\n let current = asRecord(data);\n\n while (current) {\n const [firstStep] = readSuggestedSteps(current);\n if (firstStep) {\n return readNonEmptyString(firstStep.reason);\n }\n current = asRecord(current.challengePlan);\n }\n\n return null;\n};\n\nexport const buildWorkflowCompletionMessage = (workflowLabel: string, data: unknown): string => {\n const explicitSummary = readPrimarySummary(data);\n if (explicitSummary) {\n return buildNextStepMessage(\n `${workflowLabel} completed with provider follow-up required: ${explicitSummary}`,\n readPrimaryNextStep(data)\n );\n }\n const inferred = summarizePrimaryProviderIssue(readFailures(data));\n if (inferred) {\n return buildNextStepMessage(\n `${workflowLabel} completed with provider follow-up required: ${inferred.summary}`,\n inferred.guidance?.recommendedNextCommands[0] ?? null\n );\n }\n const followthroughSummary = readFollowthroughSummary(data);\n if (followthroughSummary) {\n return buildNextStepMessage(\n `${workflowLabel} completed. ${followthroughSummary}`,\n readSuggestedNextAction(data) ?? readSuggestedStepCommand(data) ?? readSuggestedStepReason(data)\n );\n }\n return `${workflowLabel} completed.`;\n};\n","import { createUsageError } from \"../../errors\";\nimport { parseNumberFlag } from \"../../utils/parse\";\n\nexport type SessionInspectorArgs = {\n sessionId?: string;\n includeUrls?: boolean;\n sinceConsoleSeq?: number;\n sinceNetworkSeq?: number;\n sinceExceptionSeq?: number;\n max?: number;\n requestId?: string;\n};\n\nexport function parseSessionInspectorArgs(rawArgs: string[]): SessionInspectorArgs {\n const parsed: SessionInspectorArgs = {};\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n if (arg === \"--include-urls\") {\n parsed.includeUrls = true;\n continue;\n }\n if (arg === \"--session-id\" || arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = readStringFlag(rawArgs, index, \"--session-id\");\n index += stepForValue(arg);\n continue;\n }\n if (arg === \"--since-console-seq\" || arg?.startsWith(\"--since-console-seq=\")) {\n parsed.sinceConsoleSeq = readNumberFlag(rawArgs, index, \"--since-console-seq\", { min: 0 });\n index += stepForValue(arg);\n continue;\n }\n if (arg === \"--since-network-seq\" || arg?.startsWith(\"--since-network-seq=\")) {\n parsed.sinceNetworkSeq = readNumberFlag(rawArgs, index, \"--since-network-seq\", { min: 0 });\n index += stepForValue(arg);\n continue;\n }\n if (arg === \"--since-exception-seq\" || arg?.startsWith(\"--since-exception-seq=\")) {\n parsed.sinceExceptionSeq = readNumberFlag(rawArgs, index, \"--since-exception-seq\", { min: 0 });\n index += stepForValue(arg);\n continue;\n }\n if (arg === \"--max\" || arg?.startsWith(\"--max=\")) {\n parsed.max = readNumberFlag(rawArgs, index, \"--max\", { min: 1 });\n index += stepForValue(arg);\n continue;\n }\n if (arg === \"--request-id\" || arg?.startsWith(\"--request-id=\")) {\n parsed.requestId = readStringFlag(rawArgs, index, \"--request-id\");\n index += stepForValue(arg);\n }\n }\n\n return parsed;\n}\n\nfunction stepForValue(flag: string): number {\n return flag.includes(\"=\") ? 0 : 1;\n}\n\nfunction readNumberFlag(\n rawArgs: string[],\n index: number,\n flag: string,\n options: { min?: number }\n): number {\n return parseNumberFlag(readStringFlag(rawArgs, index, flag), flag, options);\n}\n\nfunction readStringFlag(rawArgs: string[], index: number, flag: string): string {\n const arg = rawArgs[index];\n const value = arg?.includes(\"=\")\n ? arg.split(\"=\", 2)[1]\n : rawArgs[index + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { buildNextStepMessage, readSuggestedNextAction } from \"../../utils/workflow-message\";\nimport { parseSessionInspectorArgs } from \"./inspector-shared\";\n\nexport async function runSessionInspector(args: ParsedArgs) {\n const parsed = parseSessionInspectorArgs(args.rawArgs);\n if (!parsed.sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const result = await callDaemon(\"session.inspect\", {\n sessionId: parsed.sessionId,\n ...(typeof parsed.includeUrls === \"boolean\" ? { includeUrls: parsed.includeUrls } : {}),\n sinceConsoleSeq: parsed.sinceConsoleSeq,\n sinceNetworkSeq: parsed.sinceNetworkSeq,\n sinceExceptionSeq: parsed.sinceExceptionSeq,\n max: parsed.max,\n requestId: parsed.requestId\n });\n\n return {\n success: true,\n message: buildNextStepMessage(\n \"Session inspector snapshot captured.\",\n readSuggestedNextAction(result)\n ),\n data: result\n };\n}\n\nexport const __test__ = {\n parseSessionInspectorArgs\n};\n","export const DEFAULT_CLICK_TRANSPORT_TIMEOUT_MS = 60_000;\nexport const DEFAULT_DIALOG_TRANSPORT_TIMEOUT_MS = 30_000;\nexport const DEFAULT_TARGET_CREATION_TRANSPORT_TIMEOUT_MS = 30_000;\nexport const DEFAULT_SNAPSHOT_TRANSPORT_TIMEOUT_MS = 30_000;\nexport const DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS = 30_000;\nexport const DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS = 30_000;\nexport const DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS = 120_000;\n","import { createUsageError } from \"../errors\";\nimport { parseOptionalStringFlag } from \"../utils/parse\";\nimport { isChallengeAutomationMode, type ChallengeAutomationMode } from \"../../challenges/types\";\n\nexport function parseOptionalChallengeAutomationMode(\n rawArgs: string[]\n): ChallengeAutomationMode | undefined {\n const value = parseOptionalStringFlag(rawArgs, \"--challenge-automation-mode\");\n if (typeof value === \"undefined\") {\n return undefined;\n }\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n return value;\n}\n","import { parseOptionalStringFlag, parseNumberFlag } from \"../../utils/parse\";\n\ntype NumberOptions = {\n min?: number;\n max?: number;\n integer?: boolean;\n};\n\nfunction parseOptionalNumberFlag(\n rawArgs: string[],\n flag: string,\n options?: NumberOptions\n): number | undefined {\n const value = parseOptionalStringFlag(rawArgs, flag);\n return typeof value === \"string\"\n ? parseNumberFlag(value, flag, options)\n : undefined;\n}\n\nexport type ReviewCommandArgs = {\n sessionId?: string;\n targetId?: string;\n reason?: string;\n maxChars?: number;\n cursor?: string;\n timeoutMs?: number;\n};\n\nexport function parseReviewCommandArgs(rawArgs: string[]): ReviewCommandArgs {\n return {\n sessionId: parseOptionalStringFlag(rawArgs, \"--session-id\"),\n targetId: parseOptionalStringFlag(rawArgs, \"--target-id\"),\n reason: parseOptionalStringFlag(rawArgs, \"--reason\"),\n maxChars: parseOptionalNumberFlag(rawArgs, \"--max-chars\", { min: 1 }),\n cursor: parseOptionalStringFlag(rawArgs, \"--cursor\"),\n timeoutMs: parseOptionalNumberFlag(rawArgs, \"--timeout-ms\", { min: 1 })\n };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseOptionalStringFlag, parseNumberFlag } from \"../../utils/parse\";\nimport {\n buildNextStepMessage,\n readSuggestedNextAction,\n readSuggestedStepReason\n} from \"../../utils/workflow-message\";\nimport { parseOptionalChallengeAutomationMode } from \"../challenge-automation-mode\";\nimport { parseReviewCommandArgs } from \"../nav/review-shared\";\nimport { parseSessionInspectorArgs } from \"./inspector-shared\";\n\nfunction parseOptionalTimeoutMs(rawArgs: string[]): number | undefined {\n const value = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n return typeof value === \"string\"\n ? parseNumberFlag(value, \"--timeout-ms\", { min: 1 })\n : undefined;\n}\n\nexport async function runSessionInspectorAudit(args: ParsedArgs) {\n const reviewArgs = parseReviewCommandArgs(args.rawArgs);\n const inspectorArgs = parseSessionInspectorArgs(args.rawArgs);\n const challengeAutomationMode = parseOptionalChallengeAutomationMode(args.rawArgs);\n const timeoutMs = parseOptionalTimeoutMs(args.rawArgs);\n const sessionId = reviewArgs.sessionId ?? inspectorArgs.sessionId;\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n const result = await callDaemon(\"session.inspectAudit\", {\n sessionId,\n ...(typeof reviewArgs.targetId === \"string\" ? { targetId: reviewArgs.targetId } : {}),\n ...(typeof reviewArgs.reason === \"string\" ? { reason: reviewArgs.reason } : {}),\n ...(typeof reviewArgs.maxChars === \"number\" ? { maxChars: reviewArgs.maxChars } : {}),\n ...(typeof reviewArgs.cursor === \"string\" ? { cursor: reviewArgs.cursor } : {}),\n ...(typeof inspectorArgs.includeUrls === \"boolean\" ? { includeUrls: inspectorArgs.includeUrls } : {}),\n ...(typeof inspectorArgs.sinceConsoleSeq === \"number\" ? { sinceConsoleSeq: inspectorArgs.sinceConsoleSeq } : {}),\n ...(typeof inspectorArgs.sinceNetworkSeq === \"number\" ? { sinceNetworkSeq: inspectorArgs.sinceNetworkSeq } : {}),\n ...(typeof inspectorArgs.sinceExceptionSeq === \"number\" ? { sinceExceptionSeq: inspectorArgs.sinceExceptionSeq } : {}),\n ...(typeof inspectorArgs.max === \"number\" ? { max: inspectorArgs.max } : {}),\n ...(typeof inspectorArgs.requestId === \"string\" ? { requestId: inspectorArgs.requestId } : {}),\n ...(challengeAutomationMode ? { challengeAutomationMode } : {})\n }, {\n timeoutMs: timeoutMs ?? DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS\n });\n\n const nextStep = readSuggestedNextAction(result)\n ?? readSuggestedStepReason(result);\n\n return {\n success: true,\n message: buildNextStepMessage(\"Correlated audit bundle captured.\", nextStep),\n data: result\n };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseOptionalStringFlag, parseNumberFlag } from \"../../utils/parse\";\nimport { buildNextStepMessage, readSuggestedStepReason } from \"../../utils/workflow-message\";\nimport { parseOptionalChallengeAutomationMode } from \"../challenge-automation-mode\";\n\nfunction parseOptionalTimeoutMs(rawArgs: string[]): number | undefined {\n const value = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n return typeof value === \"string\"\n ? parseNumberFlag(value, \"--timeout-ms\", { min: 1 })\n : undefined;\n}\n\nexport async function runSessionInspectorPlan(args: ParsedArgs) {\n const sessionId = parseOptionalStringFlag(args.rawArgs, \"--session-id\");\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n const challengeAutomationMode = parseOptionalChallengeAutomationMode(args.rawArgs);\n const timeoutMs = parseOptionalTimeoutMs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n const result = await callDaemon(\"session.inspectPlan\", {\n sessionId,\n ...(typeof targetId === \"string\" ? { targetId } : {}),\n ...(challengeAutomationMode ? { challengeAutomationMode } : {})\n }, {\n timeoutMs: timeoutMs ?? DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS\n });\n return {\n success: true,\n message: buildNextStepMessage(\n \"Challenge inspect plan captured.\",\n readSuggestedStepReason(result)\n ),\n data: result\n };\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 } from \"../errors\";\nimport { fetchDaemonStatusFromMetadata } from \"../daemon-status\";\nimport { runSessionStatus } from \"./session/status\";\nimport { assessNativeStatus, getNativeStatusSnapshot } from \"./native\";\n\ntype StatusArgs = {\n sessionId?: string;\n daemon: boolean;\n};\n\nconst DAEMON_STATUS_READ_OPTIONS = {\n timeoutMs: 5_000,\n retryAttempts: 5,\n retryDelayMs: 250\n} as const;\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 const assessment = assessNativeStatus(nativeStatus);\n return {\n success: assessment.success,\n message: assessment.message,\n data: nativeStatus,\n exitCode: assessment.exitCode ?? undefined\n };\n }\n\n const daemonStatus = await fetchDaemonStatusFromMetadata(undefined, DAEMON_STATUS_READ_OPTIONS);\n if (!daemonStatus) {\n throw createUsageError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n\n const nativeStatus = getNativeStatusSnapshot();\n const nativeAssessment = assessNativeStatus(nativeStatus);\n\n const baseLines = [\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 `canvas=${daemonStatus.relay.canvasConnected ? \"on\" : \"off\"} ` +\n `pairing=${daemonStatus.relay.pairingRequired ? \"on\" : \"off\"} ` +\n `health=${daemonStatus.relay.health?.reason ?? \"n/a\"}`,\n `Native: ${nativeAssessment.summary}`,\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, canvas=canvas clients, pairing=token required, health=relay status\"\n ];\n if (!nativeAssessment.success) {\n baseLines.splice(3, 0, `Native detail: ${nativeAssessment.message}`);\n }\n const baseMessage = baseLines.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 { DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS } from \"../transport-timeouts\";\nimport { parseOptionalStringFlag, parseNumberFlag } from \"../utils/parse\";\nimport { parseOptionalChallengeAutomationMode } from \"./challenge-automation-mode\";\n\nfunction parseOptionalTimeoutMs(rawArgs: string[]): number | undefined {\n const value = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n return typeof value === \"string\"\n ? parseNumberFlag(value, \"--timeout-ms\", { min: 1 })\n : undefined;\n}\n\nexport async function runStatusCapabilities(args: ParsedArgs) {\n const sessionId = parseOptionalStringFlag(args.rawArgs, \"--session-id\");\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n const challengeAutomationMode = parseOptionalChallengeAutomationMode(args.rawArgs);\n const timeoutMs = parseOptionalTimeoutMs(args.rawArgs);\n const result = await callDaemon(\"status.capabilities\", {\n ...(typeof sessionId === \"string\" ? { sessionId } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {}),\n ...(challengeAutomationMode ? { challengeAutomationMode } : {})\n }, {\n timeoutMs: timeoutMs ?? DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS\n });\n return {\n success: true,\n message: \"Capability discovery captured.\",\n data: result\n };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseNumberFlag, parseOptionalStringFlag } 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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!url) throw createUsageError(\"Missing --url\");\n const result = await callDaemon(\"nav.goto\", {\n sessionId,\n url,\n waitUntil,\n timeoutMs,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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, parseOptionalStringFlag } 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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"nav.wait\", {\n sessionId,\n ref,\n state,\n until,\n timeoutMs,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Wait complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_SNAPSHOT_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\n\nfunction parseSnapshotArgs(rawArgs: string[]): { sessionId?: string; mode?: string; maxChars?: number; cursor?: string; timeoutMs?: number } {\n const parsed: { sessionId?: string; mode?: string; maxChars?: number; cursor?: 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 === \"--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 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 }\n }\n return parsed;\n}\n\nexport async function runSnapshot(args: ParsedArgs) {\n const { sessionId, mode, maxChars, cursor, timeoutMs } = parseSnapshotArgs(args.rawArgs);\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const payload = {\n sessionId,\n mode,\n maxChars,\n cursor,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n };\n const result = await callDaemon(\"nav.snapshot\", payload, {\n timeoutMs: timeoutMs ?? DEFAULT_SNAPSHOT_TRANSPORT_TIMEOUT_MS\n });\n return { success: true, message: \"Snapshot captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseReviewCommandArgs } from \"./review-shared\";\n\nexport async function runReview(args: ParsedArgs) {\n const { sessionId, targetId, maxChars, cursor, timeoutMs } = parseReviewCommandArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const payload = {\n sessionId,\n maxChars,\n cursor,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n };\n const result = await callDaemon(\"nav.review\", payload, {\n timeoutMs: timeoutMs ?? DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS\n });\n return { success: true, message: \"Review captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseReviewCommandArgs } from \"./review-shared\";\n\nexport async function runReviewDesktop(args: ParsedArgs) {\n const { sessionId, targetId, reason, maxChars, cursor, timeoutMs } = parseReviewCommandArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n const result = await callDaemon(\"nav.reviewDesktop\", {\n sessionId,\n ...(typeof targetId === \"string\" ? { targetId } : {}),\n ...(typeof reason === \"string\" ? { reason } : {}),\n ...(typeof maxChars === \"number\" ? { maxChars } : {}),\n ...(typeof cursor === \"string\" ? { cursor } : {})\n }, {\n timeoutMs: timeoutMs ?? DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS\n });\n return {\n success: true,\n message: \"Desktop-assisted review captured.\",\n data: result\n };\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 stored?: boolean;\n includeScreenshots?: boolean;\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 === \"--stored\") {\n parsed.stored = true;\n continue;\n }\n if (arg === \"--include-screenshots\") {\n parsed.includeScreenshots = true;\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 {\n sessionId,\n stored,\n includeScreenshots,\n url,\n screenshotMode,\n debug,\n context,\n timeoutMs,\n transport,\n targetId,\n tabId\n } = 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 stored,\n includeScreenshots,\n transport,\n targetId,\n tabId,\n url,\n screenshotMode,\n debug,\n context,\n timeoutMs\n }, { timeoutMs: callTimeoutMs });\n\n if (response.status === \"cancelled\") {\n return {\n success: true,\n message: response.error?.message ?? \"Annotation cancelled.\",\n data: { cancelled: true }\n };\n }\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 { readFileSync } from \"fs\";\nimport type { ParsedArgs } from \"../args\";\nimport { DaemonClient } from \"../daemon-client\";\nimport { createUsageError } from \"../errors\";\nimport { writeOutput } from \"../output\";\nimport { parseNumberFlag } from \"../utils/parse\";\n\ntype CanvasArgs = {\n command?: string;\n params?: string;\n paramsFile?: string;\n timeoutMs?: number;\n};\n\nconst DEFAULT_FEEDBACK_STREAM_TIMEOUT_MS = 30000;\n\ntype FeedbackItem = Record<string, unknown>;\n\ntype FeedbackSubscribeResult = {\n subscriptionId: string | null;\n initialItems: FeedbackItem[];\n cursor: string | null;\n heartbeatMs: number;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst asString = (value: unknown): string | null => {\n return typeof value === \"string\" && value.length > 0 ? value : null;\n};\n\nconst asNumber = (value: unknown): number | null => {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n};\n\nconst asRecordArray = (value: unknown): FeedbackItem[] => {\n return Array.isArray(value) ? value.filter(isRecord) : [];\n};\n\nconst toFeedbackSubscribeResult = (value: unknown): FeedbackSubscribeResult => {\n if (!isRecord(value)) {\n return {\n subscriptionId: null,\n initialItems: [],\n cursor: null,\n heartbeatMs: 15000\n };\n }\n return {\n subscriptionId: asString(value.subscriptionId),\n initialItems: asRecordArray(value.initialItems),\n cursor: asString(value.cursor),\n heartbeatMs: Math.max(asNumber(value.heartbeatMs) ?? 15000, 1000)\n };\n};\n\nasync function streamFeedbackViaSubscription(\n client: DaemonClient,\n args: ParsedArgs,\n canvasArgs: CanvasArgs,\n params: Record<string, unknown>,\n initial: Record<string, unknown>\n): Promise<void> {\n const outputOptions = { format: args.outputFormat, quiet: args.quiet };\n writeOutput({\n success: true,\n message: `Canvas executed: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n result: initial\n }\n }, outputOptions);\n\n const initialResult = toFeedbackSubscribeResult(initial);\n const subscriptionId = initialResult.subscriptionId;\n const heartbeatMs = initialResult.heartbeatMs;\n const streamTimeoutMs = canvasArgs.timeoutMs ?? DEFAULT_FEEDBACK_STREAM_TIMEOUT_MS;\n const deadline = Date.now() + streamTimeoutMs;\n let cursor = initialResult.cursor;\n\n for (const item of initialResult.initialItems) {\n const itemCursor = asString(item.cursor);\n if (itemCursor) {\n cursor = itemCursor;\n }\n writeOutput({\n success: true,\n message: `Canvas feedback: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n streamEvent: {\n eventType: \"feedback.item\",\n item\n }\n }\n }, outputOptions);\n }\n\n while (subscriptionId && Date.now() < deadline) {\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) {\n break;\n }\n const nextEvent = await client.call(\n \"canvas.execute\",\n {\n command: \"canvas.feedback.next\",\n params: {\n ...params,\n subscriptionId,\n timeoutMs: Math.min(heartbeatMs, remainingMs)\n }\n },\n { timeoutMs: remainingMs }\n );\n if (isRecord(nextEvent)) {\n if (nextEvent.eventType === \"feedback.item\" && isRecord(nextEvent.item)) {\n const itemCursor = asString(nextEvent.item.cursor);\n if (itemCursor) {\n cursor = itemCursor;\n }\n } else if (typeof nextEvent.cursor === \"string\") {\n cursor = nextEvent.cursor;\n }\n }\n writeOutput({\n success: true,\n message: `Canvas feedback: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n streamEvent: nextEvent\n }\n }, outputOptions);\n if (isRecord(nextEvent) && nextEvent.eventType === \"feedback.complete\") {\n break;\n }\n }\n\n if (Date.now() >= deadline) {\n writeOutput({\n success: true,\n message: `Canvas feedback: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n streamEvent: {\n eventType: \"feedback.complete\",\n cursor: cursor ?? null,\n reason: \"timeout\"\n }\n }\n }, outputOptions);\n }\n\n if (subscriptionId) {\n await client.call(\n \"canvas.execute\",\n {\n command: \"canvas.feedback.unsubscribe\",\n params: {\n ...params,\n subscriptionId\n }\n }\n ).catch(() => {});\n }\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 parseJsonObject = (raw: string, source: string): Record<string, unknown> => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON\";\n throw createUsageError(`Invalid JSON from ${source}: ${message}`);\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw createUsageError(`Invalid JSON from ${source}: expected object`);\n }\n return parsed as Record<string, unknown>;\n};\n\nexport const parseCanvasArgs = (rawArgs: string[]): CanvasArgs => {\n const parsed: CanvasArgs = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--command\") {\n parsed.command = requireValue(rawArgs[i + 1], \"--command\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--command=\")) {\n parsed.command = requireValue(arg.split(\"=\", 2)[1], \"--command\");\n continue;\n }\n if (arg === \"--params\") {\n parsed.params = requireValue(rawArgs[i + 1], \"--params\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--params=\")) {\n parsed.params = requireValue(arg.split(\"=\", 2)[1], \"--params\");\n continue;\n }\n if (arg === \"--params-file\") {\n parsed.paramsFile = requireValue(rawArgs[i + 1], \"--params-file\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--params-file=\")) {\n parsed.paramsFile = requireValue(arg.split(\"=\", 2)[1], \"--params-file\");\n continue;\n }\n if (arg === \"--timeout-ms\") {\n parsed.timeoutMs = parseNumberFlag(requireValue(rawArgs[i + 1], \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = parseNumberFlag(requireValue(arg.split(\"=\", 2)[1], \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n }\n }\n return parsed;\n};\n\nconst resolveCanvasParams = (canvasArgs: CanvasArgs): Record<string, unknown> => {\n const hasParams = typeof canvasArgs.params === \"string\";\n const hasParamsFile = typeof canvasArgs.paramsFile === \"string\";\n if (Number(hasParams) + Number(hasParamsFile) > 1) {\n throw createUsageError(\"Provide only one params source: --params or --params-file.\");\n }\n if (hasParams) {\n return parseJsonObject(canvasArgs.params ?? \"\", \"--params\");\n }\n if (hasParamsFile) {\n let raw = \"\";\n try {\n raw = readFileSync(canvasArgs.paramsFile ?? \"\", \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file\";\n throw createUsageError(`Invalid --params-file: ${message}`);\n }\n if (!raw.trim()) {\n throw createUsageError(\"Invalid JSON from --params-file: empty input\");\n }\n return parseJsonObject(raw, \"--params-file\");\n }\n return {};\n};\n\nconst attachRepoRoot = (params: Record<string, unknown>): Record<string, unknown> => {\n if (typeof params.repoRoot === \"string\" && params.repoRoot.trim().length > 0) {\n return params;\n }\n return {\n ...params,\n repoRoot: process.cwd()\n };\n};\n\nexport async function runCanvas(args: ParsedArgs) {\n const canvasArgs = parseCanvasArgs(args.rawArgs);\n if (!canvasArgs.command) {\n throw createUsageError(\"Usage: opendevbrowser canvas --command <canvas.command> [--params <json> | --params-file <path>]\");\n }\n if (!canvasArgs.command.startsWith(\"canvas.\")) {\n throw createUsageError(\"Canvas command names must start with 'canvas.'.\");\n }\n\n const client = new DaemonClient({ autoRenew: true });\n try {\n const params = attachRepoRoot(resolveCanvasParams(canvasArgs));\n const result = await client.call<unknown>(\n \"canvas.execute\",\n {\n command: canvasArgs.command,\n params\n },\n { timeoutMs: canvasArgs.timeoutMs }\n );\n if (\n canvasArgs.command === \"canvas.feedback.subscribe\"\n && args.outputFormat === \"stream-json\"\n && isRecord(result)\n ) {\n await streamFeedbackViaSubscription(client, args, canvasArgs, params, result);\n return {\n success: true,\n message: `Canvas executed: ${canvasArgs.command}`,\n data: {\n suppressOutput: true\n }\n };\n }\n if (args.outputFormat === \"text\") {\n const output = typeof result === \"string\" ? result : JSON.stringify(result, null, 2);\n return { success: true, message: output };\n }\n return {\n success: true,\n message: `Canvas executed: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n result\n }\n };\n } finally {\n await client.releaseBinding().catch(() => {});\n }\n}\n\nexport const __test__ = {\n parseCanvasArgs,\n parseJsonObject,\n resolveCanvasParams,\n attachRepoRoot,\n toFeedbackSubscribeResult\n};\n","import { readFileSync } from \"fs\";\nimport type { ParsedArgs } from \"../args\";\nimport { DaemonClient } from \"../daemon-client\";\nimport { createUsageError } from \"../errors\";\nimport { parseNumberFlag } from \"../utils/parse\";\n\ntype RpcArgs = {\n name?: string;\n params?: string;\n paramsFile?: string;\n timeoutMs?: number;\n unsafeInternal?: boolean;\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 parseJsonObject = (raw: string, source: string): Record<string, unknown> => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON\";\n throw createUsageError(`Invalid JSON from ${source}: ${message}`);\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw createUsageError(`Invalid JSON from ${source}: expected object`);\n }\n return parsed as Record<string, unknown>;\n};\n\nexport const parseRpcArgs = (rawArgs: string[]): RpcArgs => {\n const parsed: RpcArgs = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--unsafe-internal\") {\n parsed.unsafeInternal = true;\n continue;\n }\n if (arg === \"--name\") {\n parsed.name = requireValue(rawArgs[i + 1], \"--name\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--name=\")) {\n parsed.name = requireValue(arg.split(\"=\", 2)[1], \"--name\");\n continue;\n }\n if (arg === \"--params\") {\n parsed.params = requireValue(rawArgs[i + 1], \"--params\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--params=\")) {\n parsed.params = requireValue(arg.split(\"=\", 2)[1], \"--params\");\n continue;\n }\n if (arg === \"--params-file\") {\n parsed.paramsFile = requireValue(rawArgs[i + 1], \"--params-file\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--params-file=\")) {\n parsed.paramsFile = requireValue(arg.split(\"=\", 2)[1], \"--params-file\");\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\nconst resolveRpcParams = (rpcArgs: RpcArgs): Record<string, unknown> => {\n const hasParamsArg = typeof rpcArgs.params === \"string\";\n const hasParamsFile = typeof rpcArgs.paramsFile === \"string\";\n const inputCount = Number(hasParamsArg) + Number(hasParamsFile);\n\n if (inputCount > 1) {\n throw createUsageError(\"Provide only one params source: --params or --params-file.\");\n }\n if (hasParamsArg) {\n return parseJsonObject(rpcArgs.params ?? \"\", \"--params\");\n }\n if (hasParamsFile) {\n let raw = \"\";\n try {\n raw = readFileSync(rpcArgs.paramsFile ?? \"\", \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file\";\n throw createUsageError(`Invalid --params-file: ${message}`);\n }\n if (!raw.trim()) {\n throw createUsageError(\"Invalid JSON from --params-file: empty input\");\n }\n return parseJsonObject(raw, \"--params-file\");\n }\n return {};\n};\n\nexport async function runRpc(args: ParsedArgs) {\n const rpcArgs = parseRpcArgs(args.rawArgs);\n if (!rpcArgs.unsafeInternal) {\n throw createUsageError(\n \"Missing --unsafe-internal. rpc is a power-user command that executes internal daemon commands and can mutate session state.\"\n );\n }\n if (!rpcArgs.name) {\n throw createUsageError(\"Missing --name\");\n }\n\n const params = resolveRpcParams(rpcArgs);\n const client = new DaemonClient({ autoRenew: true });\n try {\n const result = await client.call<unknown>(rpcArgs.name, params, { timeoutMs: rpcArgs.timeoutMs });\n if (args.outputFormat === \"text\") {\n const output = typeof result === \"string\" ? result : JSON.stringify(result, null, 2);\n return { success: true, message: output };\n }\n return {\n success: true,\n message: `RPC executed: ${rpcArgs.name}`,\n data: {\n name: rpcArgs.name,\n result\n }\n };\n } finally {\n await client.releaseBinding().catch(() => {});\n }\n}\n\nexport const __test__ = {\n parseJsonObject,\n parseRpcArgs,\n resolveRpcParams\n};\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_CLICK_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\n\ntype ClickArgs = {\n sessionId?: string;\n ref?: string;\n timeoutMs?: number;\n};\n\nfunction parseClickArgs(rawArgs: string[]): ClickArgs {\n const timeoutValue = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n const parsed: ClickArgs = {\n timeoutMs: typeof timeoutValue === \"string\"\n ? parseNumberFlag(timeoutValue, \"--timeout-ms\", { min: 1 })\n : undefined\n };\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, timeoutMs } = parseClickArgs(args.rawArgs);\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const params = {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n };\n const result = await callDaemon(\"interact.click\", params, {\n timeoutMs: timeoutMs ?? DEFAULT_CLICK_TRANSPORT_TIMEOUT_MS\n });\n return { success: true, message: \"Click complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.hover\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Hover complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!key) throw createUsageError(\"Missing --key\");\n const result = await callDaemon(\"interact.press\", {\n sessionId,\n key,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.check\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Check complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.uncheck\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Uncheck complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\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\", {\n sessionId,\n ref,\n text,\n clear,\n submit,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Type complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\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\", {\n sessionId,\n ref,\n values,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Select complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\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\", {\n sessionId,\n ref,\n dy,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Scroll complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.scrollIntoView\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { parseOptionalStringFlag, parseStringArrayFlag } from \"../../utils/parse\";\n\ntype UploadArgs = {\n sessionId?: string;\n targetId?: string;\n ref?: string;\n files?: string[];\n};\n\nfunction parseUploadArgs(rawArgs: string[]): UploadArgs {\n return {\n sessionId: parseOptionalStringFlag(rawArgs, \"--session-id\"),\n targetId: parseOptionalStringFlag(rawArgs, \"--target-id\"),\n ref: parseOptionalStringFlag(rawArgs, \"--ref\"),\n files: parseStringArrayFlag(rawArgs, \"--files\")\n };\n}\n\nexport async function runUpload(args: ParsedArgs) {\n const { sessionId, targetId, ref, files } = parseUploadArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n if (!files) throw createUsageError(\"Missing --files\");\n const result = await callDaemon(\"interact.upload\", {\n sessionId,\n ref,\n files,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Upload complete.\", data: result };\n}\n\nexport const __test__ = {\n parseUploadArgs\n};\n","import { createUsageError } from \"../../errors\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\n\nexport type PointerButton = \"left\" | \"middle\" | \"right\";\n\nconst POINTER_BUTTONS = new Set<PointerButton>([\"left\", \"middle\", \"right\"]);\n\nfunction requireFlagValue(rawArgs: string[], flag: string): string {\n const value = parseOptionalStringFlag(rawArgs, flag);\n if (!value) {\n throw createUsageError(`Missing ${flag}`);\n }\n return value;\n}\n\nexport function requirePointerCoordinate(rawArgs: string[], flag: string): number {\n return parseNumberFlag(requireFlagValue(rawArgs, flag), flag, { integer: false });\n}\n\nexport function parsePointerSteps(rawArgs: string[]): number | undefined {\n const value = parseOptionalStringFlag(rawArgs, \"--steps\");\n return value ? parseNumberFlag(value, \"--steps\", { min: 1 }) : undefined;\n}\n\nexport function parsePointerClickCount(rawArgs: string[]): number | undefined {\n const value = parseOptionalStringFlag(rawArgs, \"--click-count\");\n return value ? parseNumberFlag(value, \"--click-count\", { min: 1 }) : undefined;\n}\n\nexport function parsePointerButton(rawArgs: string[]): PointerButton | undefined {\n const value = parseOptionalStringFlag(rawArgs, \"--button\");\n if (!value) {\n return undefined;\n }\n if (!POINTER_BUTTONS.has(value as PointerButton)) {\n throw createUsageError(`Invalid --button: ${value}`);\n }\n return value as PointerButton;\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\nimport { parsePointerSteps, requirePointerCoordinate } from \"./pointer-shared\";\n\nexport async function runPointerMove(args: ParsedArgs) {\n const sessionId = parseOptionalStringFlag(args.rawArgs, \"--session-id\");\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n const x = requirePointerCoordinate(args.rawArgs, \"--x\");\n const y = requirePointerCoordinate(args.rawArgs, \"--y\");\n const steps = parsePointerSteps(args.rawArgs);\n\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const result = await callDaemon(\"pointer.move\", {\n sessionId,\n x,\n y,\n ...(typeof steps === \"number\" ? { steps } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Pointer move complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\nimport {\n parsePointerButton,\n parsePointerClickCount,\n requirePointerCoordinate\n} from \"./pointer-shared\";\n\nexport async function runPointerDown(args: ParsedArgs) {\n const sessionId = parseOptionalStringFlag(args.rawArgs, \"--session-id\");\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n const x = requirePointerCoordinate(args.rawArgs, \"--x\");\n const y = requirePointerCoordinate(args.rawArgs, \"--y\");\n const button = parsePointerButton(args.rawArgs);\n const clickCount = parsePointerClickCount(args.rawArgs);\n\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const result = await callDaemon(\"pointer.down\", {\n sessionId,\n x,\n y,\n ...(typeof button === \"string\" ? { button } : {}),\n ...(typeof clickCount === \"number\" ? { clickCount } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Pointer down complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\nimport {\n parsePointerButton,\n parsePointerClickCount,\n requirePointerCoordinate\n} from \"./pointer-shared\";\n\nexport async function runPointerUp(args: ParsedArgs) {\n const sessionId = parseOptionalStringFlag(args.rawArgs, \"--session-id\");\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n const x = requirePointerCoordinate(args.rawArgs, \"--x\");\n const y = requirePointerCoordinate(args.rawArgs, \"--y\");\n const button = parsePointerButton(args.rawArgs);\n const clickCount = parsePointerClickCount(args.rawArgs);\n\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const result = await callDaemon(\"pointer.up\", {\n sessionId,\n x,\n y,\n ...(typeof button === \"string\" ? { button } : {}),\n ...(typeof clickCount === \"number\" ? { clickCount } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Pointer up complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\nimport { parsePointerSteps, requirePointerCoordinate } from \"./pointer-shared\";\n\nexport async function runPointerDrag(args: ParsedArgs) {\n const sessionId = parseOptionalStringFlag(args.rawArgs, \"--session-id\");\n const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n const fromX = requirePointerCoordinate(args.rawArgs, \"--from-x\");\n const fromY = requirePointerCoordinate(args.rawArgs, \"--from-y\");\n const toX = requirePointerCoordinate(args.rawArgs, \"--to-x\");\n const toY = requirePointerCoordinate(args.rawArgs, \"--to-y\");\n const steps = parsePointerSteps(args.rawArgs);\n\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const result = await callDaemon(\"pointer.drag\", {\n sessionId,\n from: { x: fromX, y: fromY },\n to: { x: toX, y: toY },\n ...(typeof steps === \"number\" ? { steps } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Pointer drag 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\";\nimport { DEFAULT_TARGET_CREATION_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\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(\n \"targets.new\",\n { sessionId, url },\n { timeoutMs: DEFAULT_TARGET_CREATION_TRANSPORT_TIMEOUT_MS }\n );\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\";\nimport { DEFAULT_TARGET_CREATION_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\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(\n \"page.open\",\n { sessionId, name, url },\n { timeoutMs: DEFAULT_TARGET_CREATION_TRANSPORT_TIMEOUT_MS }\n );\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\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.getHtml\", {\n sessionId,\n ref,\n maxChars,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.getText\", {\n sessionId,\n ref,\n maxChars,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\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\", {\n sessionId,\n ref,\n name: attr,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.getValue\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.isVisible\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Visibility checked.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.isEnabled\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.isChecked\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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; 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 runClonePage(args: ParsedArgs) {\n const { sessionId, targetId } = parseClonePageArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"export.clonePage\", {\n sessionId,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Page cloned.\", data: result };\n}\n\nexport const __test__ = {\n parseClonePageArgs\n};\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseCloneComponentArgs(rawArgs: string[]): { sessionId?: string; ref?: string; targetId?: string } {\n const parsed: { sessionId?: string; ref?: 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 === \"--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 === \"--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 runCloneComponent(args: ParsedArgs) {\n const { sessionId, ref, targetId } = 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\", {\n sessionId,\n ref,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\n return { success: true, message: \"Component cloned.\", data: result };\n}\n\nexport const __test__ = {\n parseCloneComponentArgs\n};\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseOptionalStringFlag } from \"../../utils/parse\";\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 const targetId = parseOptionalStringFlag(args.rawArgs, \"--target-id\");\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"devtools.perf\", {\n sessionId,\n ...(typeof targetId === \"string\" ? { targetId } : {})\n });\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\";\nimport { DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\n\ntype ScreenshotArgs = {\n sessionId?: string;\n targetId?: string;\n path?: string;\n ref?: string;\n fullPage?: boolean;\n timeoutMs?: number;\n};\n\nfunction parseScreenshotArgs(rawArgs: string[]): ScreenshotArgs {\n const timeoutValue = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n const parsed: ScreenshotArgs = {\n sessionId: parseOptionalStringFlag(rawArgs, \"--session-id\"),\n targetId: parseOptionalStringFlag(rawArgs, \"--target-id\"),\n path: parseOptionalStringFlag(rawArgs, \"--path\"),\n ref: parseOptionalStringFlag(rawArgs, \"--ref\"),\n fullPage: rawArgs.includes(\"--full-page\"),\n timeoutMs: typeof timeoutValue === \"string\"\n ? parseNumberFlag(timeoutValue, \"--timeout-ms\", { min: 1 })\n : undefined\n };\n if (parsed.ref && parsed.fullPage) {\n throw createUsageError(\"Choose either --ref or --full-page.\");\n }\n return parsed;\n}\n\nexport async function runScreenshot(args: ParsedArgs) {\n const { sessionId, targetId, path, ref, fullPage, timeoutMs } = parseScreenshotArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const params = {\n sessionId,\n ...(typeof path === \"string\" ? { path } : {}),\n ...(typeof targetId === \"string\" ? { targetId } : {}),\n ...(typeof ref === \"string\" ? { ref } : {}),\n ...(fullPage === true ? { fullPage: true } : {})\n };\n const result = await callDaemon(\"page.screenshot\", params, {\n timeoutMs: timeoutMs ?? DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS\n });\n return { success: true, message: \"Screenshot captured.\", data: result };\n}\n\nexport const __test__ = {\n parseScreenshotArgs\n};\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\n\ntype ScreencastStartArgs = {\n sessionId?: string;\n targetId?: string;\n outputDir?: string;\n intervalMs?: number;\n maxFrames?: number;\n timeoutMs?: number;\n};\n\nfunction parseScreencastStartArgs(rawArgs: string[]): ScreencastStartArgs {\n const intervalValue = parseOptionalStringFlag(rawArgs, \"--interval-ms\");\n const maxFramesValue = parseOptionalStringFlag(rawArgs, \"--max-frames\");\n const timeoutValue = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n return {\n sessionId: parseOptionalStringFlag(rawArgs, \"--session-id\"),\n targetId: parseOptionalStringFlag(rawArgs, \"--target-id\"),\n outputDir: parseOptionalStringFlag(rawArgs, \"--output-dir\"),\n intervalMs: typeof intervalValue === \"string\"\n ? parseNumberFlag(intervalValue, \"--interval-ms\", { min: 250 })\n : undefined,\n maxFrames: typeof maxFramesValue === \"string\"\n ? parseNumberFlag(maxFramesValue, \"--max-frames\", { min: 1 })\n : undefined,\n timeoutMs: typeof timeoutValue === \"string\"\n ? parseNumberFlag(timeoutValue, \"--timeout-ms\", { min: 1 })\n : undefined\n };\n}\n\nexport async function runScreencastStart(args: ParsedArgs) {\n const { sessionId, targetId, outputDir, intervalMs, maxFrames, timeoutMs } = parseScreencastStartArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n const result = await callDaemon(\"page.screencast.start\", {\n sessionId,\n ...(typeof targetId === \"string\" ? { targetId } : {}),\n ...(typeof outputDir === \"string\" ? { outputDir } : {}),\n ...(typeof intervalMs === \"number\" ? { intervalMs } : {}),\n ...(typeof maxFrames === \"number\" ? { maxFrames } : {})\n }, {\n timeoutMs: timeoutMs ?? DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS\n });\n return { success: true, message: \"Screencast started.\", data: result };\n}\n\nexport const __test__ = {\n parseScreencastStartArgs\n};\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\n\ntype ScreencastStopArgs = {\n sessionId?: string;\n screencastId?: string;\n timeoutMs?: number;\n};\n\nfunction parseScreencastStopArgs(rawArgs: string[]): ScreencastStopArgs {\n const timeoutValue = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n return {\n sessionId: parseOptionalStringFlag(rawArgs, \"--session-id\"),\n screencastId: parseOptionalStringFlag(rawArgs, \"--screencast-id\"),\n timeoutMs: typeof timeoutValue === \"string\"\n ? parseNumberFlag(timeoutValue, \"--timeout-ms\", { min: 1 })\n : undefined\n };\n}\n\nexport async function runScreencastStop(args: ParsedArgs) {\n const { sessionId, screencastId, timeoutMs } = parseScreencastStopArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n if (!screencastId) {\n throw createUsageError(\"Missing --screencast-id\");\n }\n const result = await callDaemon(\"page.screencast.stop\", { sessionId, screencastId }, {\n timeoutMs: timeoutMs ?? DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS\n });\n return { success: true, message: \"Screencast stopped.\", data: result };\n}\n\nexport const __test__ = {\n parseScreencastStopArgs\n};\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_DIALOG_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseOptionalStringFlag, parseNumberFlag } from \"../../utils/parse\";\n\ntype DialogArgs = {\n sessionId?: string;\n targetId?: string;\n action: \"status\" | \"accept\" | \"dismiss\";\n promptText?: string;\n timeoutMs?: number;\n};\n\nfunction parseDialogAction(value: string | undefined): \"status\" | \"accept\" | \"dismiss\" {\n if (!value) {\n return \"status\";\n }\n if (value === \"status\" || value === \"accept\" || value === \"dismiss\") {\n return value;\n }\n throw createUsageError(`Invalid --action: ${value}`);\n}\n\nfunction parseDialogArgs(rawArgs: string[]): DialogArgs {\n const timeoutValue = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n const parsed: DialogArgs = {\n sessionId: parseOptionalStringFlag(rawArgs, \"--session-id\"),\n targetId: parseOptionalStringFlag(rawArgs, \"--target-id\"),\n action: parseDialogAction(parseOptionalStringFlag(rawArgs, \"--action\")),\n promptText: parseOptionalStringFlag(rawArgs, \"--prompt-text\"),\n timeoutMs: typeof timeoutValue === \"string\"\n ? parseNumberFlag(timeoutValue, \"--timeout-ms\", { min: 1 })\n : undefined\n };\n if (parsed.promptText && parsed.action !== \"accept\") {\n throw createUsageError(\"--prompt-text is only valid with --action accept\");\n }\n return parsed;\n}\n\nexport async function runDialog(args: ParsedArgs) {\n const { sessionId, targetId, action, promptText, timeoutMs } = parseDialogArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const params = {\n sessionId,\n action,\n ...(typeof targetId === \"string\" ? { targetId } : {}),\n ...(typeof promptText === \"string\" ? { promptText } : {})\n };\n const result = await callDaemon(\"page.dialog\", params, {\n timeoutMs: timeoutMs ?? DEFAULT_DIALOG_TRANSPORT_TIMEOUT_MS\n });\n return { success: true, message: \"Dialog request complete.\", data: result };\n}\n\nexport const __test__ = {\n parseDialogArgs\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","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseNumberFlag } from \"../../utils/parse\";\n\ntype DebugTraceSnapshotArgs = {\n sessionId?: string;\n sinceConsoleSeq?: number;\n sinceNetworkSeq?: number;\n sinceExceptionSeq?: number;\n max?: number;\n requestId?: string;\n};\n\nfunction parseDebugTraceSnapshotArgs(rawArgs: string[]): DebugTraceSnapshotArgs {\n const parsed: DebugTraceSnapshotArgs = {};\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--session-id\") {\n const value = rawArgs[index + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--since-console-seq\") {\n const value = rawArgs[index + 1];\n if (!value) throw createUsageError(\"Missing value for --since-console-seq\");\n parsed.sinceConsoleSeq = parseNumberFlag(value, \"--since-console-seq\", { min: 0 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--since-console-seq=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --since-console-seq\");\n parsed.sinceConsoleSeq = parseNumberFlag(value, \"--since-console-seq\", { min: 0 });\n continue;\n }\n\n if (arg === \"--since-network-seq\") {\n const value = rawArgs[index + 1];\n if (!value) throw createUsageError(\"Missing value for --since-network-seq\");\n parsed.sinceNetworkSeq = parseNumberFlag(value, \"--since-network-seq\", { min: 0 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--since-network-seq=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --since-network-seq\");\n parsed.sinceNetworkSeq = parseNumberFlag(value, \"--since-network-seq\", { min: 0 });\n continue;\n }\n\n if (arg === \"--since-exception-seq\") {\n const value = rawArgs[index + 1];\n if (!value) throw createUsageError(\"Missing value for --since-exception-seq\");\n parsed.sinceExceptionSeq = parseNumberFlag(value, \"--since-exception-seq\", { min: 0 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--since-exception-seq=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --since-exception-seq\");\n parsed.sinceExceptionSeq = parseNumberFlag(value, \"--since-exception-seq\", { min: 0 });\n continue;\n }\n\n if (arg === \"--max\") {\n const value = rawArgs[index + 1];\n if (!value) throw createUsageError(\"Missing value for --max\");\n parsed.max = parseNumberFlag(value, \"--max\", { min: 1 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--max=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --max\");\n parsed.max = parseNumberFlag(value, \"--max\", { min: 1 });\n continue;\n }\n\n if (arg === \"--request-id\") {\n const value = rawArgs[index + 1];\n if (!value) throw createUsageError(\"Missing value for --request-id\");\n parsed.requestId = value;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--request-id=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --request-id\");\n parsed.requestId = value;\n continue;\n }\n }\n\n return parsed;\n}\n\nexport async function runDebugTraceSnapshot(args: ParsedArgs) {\n const parsed = parseDebugTraceSnapshotArgs(args.rawArgs);\n if (!parsed.sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const result = await callDaemon(\"devtools.debugTraceSnapshot\", {\n sessionId: parsed.sessionId,\n sinceConsoleSeq: parsed.sinceConsoleSeq,\n sinceNetworkSeq: parsed.sinceNetworkSeq,\n sinceExceptionSeq: parsed.sinceExceptionSeq,\n max: parsed.max,\n requestId: parsed.requestId\n });\n\n return {\n success: true,\n message: \"Debug trace snapshot captured.\",\n data: result\n };\n}\n\nexport const __test__ = {\n parseDebugTraceSnapshotArgs\n};\n","import { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\nimport type { CommandResult } from \"../types\";\n\ntype DesktopTimeoutArgs = {\n timeoutMs?: number;\n};\n\nexport type DesktopReasonArgs = DesktopTimeoutArgs & {\n reason?: string;\n};\n\nexport type DesktopWindowReasonArgs = DesktopReasonArgs & {\n windowId?: string;\n};\n\nexport function parseDesktopTimeoutArgs(rawArgs: string[]): DesktopTimeoutArgs {\n const timeoutValue = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n return {\n timeoutMs: typeof timeoutValue === \"string\"\n ? parseNumberFlag(timeoutValue, \"--timeout-ms\", { min: 1 })\n : undefined\n };\n}\n\nexport function parseDesktopReasonArgs(rawArgs: string[]): DesktopReasonArgs {\n return {\n ...parseDesktopTimeoutArgs(rawArgs),\n reason: parseOptionalStringFlag(rawArgs, \"--reason\")\n };\n}\n\nexport function parseDesktopWindowReasonArgs(rawArgs: string[]): DesktopWindowReasonArgs {\n return {\n ...parseDesktopReasonArgs(rawArgs),\n windowId: parseOptionalStringFlag(rawArgs, \"--window-id\")\n };\n}\n\nexport function requireDesktopReason(reason?: string): string {\n if (!reason) {\n throw createUsageError(\"Missing --reason\");\n }\n return reason;\n}\n\nexport function requireDesktopWindowId(windowId?: string): string {\n if (!windowId) {\n throw createUsageError(\"Missing --window-id\");\n }\n return windowId;\n}\n\nexport async function callDesktopCommand(\n name: string,\n params: Record<string, unknown>,\n timeoutMs?: number\n): Promise<unknown> {\n return callDaemon(name, params, {\n timeoutMs: timeoutMs ?? DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS\n });\n}\n\nexport function desktopCommandResult(message: string, data: unknown): CommandResult {\n return { success: true, message, data };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDesktopCommand, desktopCommandResult, parseDesktopTimeoutArgs } from \"./shared\";\n\nexport async function runDesktopStatus(args: ParsedArgs) {\n const { timeoutMs } = parseDesktopTimeoutArgs(args.rawArgs);\n const result = await callDesktopCommand(\"desktop.status\", {}, timeoutMs);\n return desktopCommandResult(\"Desktop status captured.\", result);\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDesktopCommand, desktopCommandResult, parseDesktopReasonArgs } from \"./shared\";\n\nexport async function runDesktopWindows(args: ParsedArgs) {\n const { reason, timeoutMs } = parseDesktopReasonArgs(args.rawArgs);\n const result = await callDesktopCommand(\"desktop.windows.list\", {\n ...(typeof reason === \"string\" ? { reason } : {})\n }, timeoutMs);\n return desktopCommandResult(\"Desktop windows listed.\", result);\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDesktopCommand, desktopCommandResult, parseDesktopReasonArgs } from \"./shared\";\n\nexport async function runDesktopActiveWindow(args: ParsedArgs) {\n const { reason, timeoutMs } = parseDesktopReasonArgs(args.rawArgs);\n const result = await callDesktopCommand(\"desktop.window.active\", {\n ...(typeof reason === \"string\" ? { reason } : {})\n }, timeoutMs);\n return desktopCommandResult(\"Active desktop window captured.\", result);\n}\n","import type { ParsedArgs } from \"../../args\";\nimport {\n callDesktopCommand,\n desktopCommandResult,\n parseDesktopReasonArgs,\n requireDesktopReason\n} from \"./shared\";\n\nexport async function runDesktopCaptureDesktop(args: ParsedArgs) {\n const { reason, timeoutMs } = parseDesktopReasonArgs(args.rawArgs);\n const result = await callDesktopCommand(\"desktop.capture.desktop\", {\n reason: requireDesktopReason(reason)\n }, timeoutMs);\n return desktopCommandResult(\"Desktop captured.\", result);\n}\n","import type { ParsedArgs } from \"../../args\";\nimport {\n callDesktopCommand,\n desktopCommandResult,\n parseDesktopWindowReasonArgs,\n requireDesktopReason,\n requireDesktopWindowId\n} from \"./shared\";\n\nexport async function runDesktopCaptureWindow(args: ParsedArgs) {\n const { windowId, reason, timeoutMs } = parseDesktopWindowReasonArgs(args.rawArgs);\n const result = await callDesktopCommand(\"desktop.capture.window\", {\n windowId: requireDesktopWindowId(windowId),\n reason: requireDesktopReason(reason)\n }, timeoutMs);\n return desktopCommandResult(\"Desktop window captured.\", result);\n}\n","import type { ParsedArgs } from \"../../args\";\nimport {\n callDesktopCommand,\n desktopCommandResult,\n parseDesktopWindowReasonArgs,\n requireDesktopReason\n} from \"./shared\";\n\nexport async function runDesktopAccessibilitySnapshot(args: ParsedArgs) {\n const { windowId, reason, timeoutMs } = parseDesktopWindowReasonArgs(args.rawArgs);\n const result = await callDesktopCommand(\"desktop.accessibility.snapshot\", {\n reason: requireDesktopReason(reason),\n ...(typeof windowId === \"string\" ? { windowId } : {})\n }, timeoutMs);\n return desktopCommandResult(\"Desktop accessibility snapshot captured.\", result);\n}\n","import { readFileSync } from \"fs\";\nimport type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\ntype CookieImportArgs = {\n sessionId?: string;\n cookies?: string;\n cookiesFile?: string;\n strict?: boolean;\n requestId?: string;\n};\n\ntype CookieRecord = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n expires?: number;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n};\n\nconst requireValue = (value: string | undefined, flag: string): string => {\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst parseStrictValue = (value: string, flag: string): boolean => {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\") return true;\n if (normalized === \"false\") return false;\n throw createUsageError(`Invalid ${flag}: ${value}`);\n};\n\nconst parseCookieImportArgs = (rawArgs: string[]): CookieImportArgs => {\n const parsed: CookieImportArgs = {};\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--session-id\") {\n parsed.sessionId = requireValue(rawArgs[index + 1], \"--session-id\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = requireValue(arg.split(\"=\", 2)[1], \"--session-id\");\n continue;\n }\n\n if (arg === \"--cookies\") {\n parsed.cookies = requireValue(rawArgs[index + 1], \"--cookies\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--cookies=\")) {\n parsed.cookies = requireValue(arg.split(\"=\", 2)[1], \"--cookies\");\n continue;\n }\n\n if (arg === \"--cookies-file\") {\n parsed.cookiesFile = requireValue(rawArgs[index + 1], \"--cookies-file\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--cookies-file=\")) {\n parsed.cookiesFile = requireValue(arg.split(\"=\", 2)[1], \"--cookies-file\");\n continue;\n }\n\n if (arg === \"--strict\") {\n parsed.strict = true;\n continue;\n }\n if (arg?.startsWith(\"--strict=\")) {\n parsed.strict = parseStrictValue(requireValue(arg.split(\"=\", 2)[1], \"--strict\"), \"--strict\");\n continue;\n }\n\n if (arg === \"--request-id\") {\n parsed.requestId = requireValue(rawArgs[index + 1], \"--request-id\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--request-id=\")) {\n parsed.requestId = requireValue(arg.split(\"=\", 2)[1], \"--request-id\");\n continue;\n }\n }\n\n return parsed;\n};\n\nconst parseCookiesJson = (raw: string, source: string): CookieRecord[] => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON\";\n throw createUsageError(`Invalid JSON from ${source}: ${message}`);\n }\n\n if (!Array.isArray(parsed)) {\n throw createUsageError(`Invalid JSON from ${source}: expected array`);\n }\n\n const cookies: CookieRecord[] = [];\n for (const entry of parsed) {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n throw createUsageError(`Invalid JSON from ${source}: expected cookie object entries`);\n }\n const cookie = entry as Record<string, unknown>;\n if (typeof cookie.name !== \"string\" || typeof cookie.value !== \"string\") {\n throw createUsageError(`Invalid JSON from ${source}: each cookie requires string name and value`);\n }\n if (typeof cookie.sameSite !== \"undefined\" && cookie.sameSite !== \"Strict\" && cookie.sameSite !== \"Lax\" && cookie.sameSite !== \"None\") {\n throw createUsageError(`Invalid JSON from ${source}: sameSite must be Strict, Lax, or None`);\n }\n\n cookies.push({\n name: cookie.name,\n value: cookie.value,\n ...(typeof cookie.url === \"string\" ? { url: cookie.url } : {}),\n ...(typeof cookie.domain === \"string\" ? { domain: cookie.domain } : {}),\n ...(typeof cookie.path === \"string\" ? { path: cookie.path } : {}),\n ...(typeof cookie.expires === \"number\" ? { expires: cookie.expires } : {}),\n ...(typeof cookie.httpOnly === \"boolean\" ? { httpOnly: cookie.httpOnly } : {}),\n ...(typeof cookie.secure === \"boolean\" ? { secure: cookie.secure } : {}),\n ...(cookie.sameSite ? { sameSite: cookie.sameSite as \"Strict\" | \"Lax\" | \"None\" } : {})\n });\n }\n\n return cookies;\n};\n\nconst resolveCookies = (parsed: CookieImportArgs): CookieRecord[] => {\n const hasInline = typeof parsed.cookies === \"string\";\n const hasFile = typeof parsed.cookiesFile === \"string\";\n\n if (!hasInline && !hasFile) {\n throw createUsageError(\"Missing --cookies or --cookies-file\");\n }\n if (hasInline && hasFile) {\n throw createUsageError(\"Provide only one cookies source: --cookies or --cookies-file.\");\n }\n\n if (hasInline) {\n return parseCookiesJson(parsed.cookies ?? \"\", \"--cookies\");\n }\n\n let raw = \"\";\n try {\n raw = readFileSync(parsed.cookiesFile ?? \"\", \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file\";\n throw createUsageError(`Invalid --cookies-file: ${message}`);\n }\n\n if (!raw.trim()) {\n throw createUsageError(\"Invalid JSON from --cookies-file: empty input\");\n }\n\n return parseCookiesJson(raw, \"--cookies-file\");\n};\n\nexport async function runCookieImport(args: ParsedArgs) {\n const parsed = parseCookieImportArgs(args.rawArgs);\n if (!parsed.sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const cookies = resolveCookies(parsed);\n const result = await callDaemon(\"session.cookieImport\", {\n sessionId: parsed.sessionId,\n cookies,\n strict: parsed.strict ?? true,\n requestId: parsed.requestId\n });\n\n const imported = typeof (result as { imported?: unknown }).imported === \"number\"\n ? (result as { imported: number }).imported\n : cookies.length;\n\n return {\n success: true,\n message: `Cookies imported: ${imported}`,\n data: result\n };\n}\n\nexport const __test__ = {\n parseCookieImportArgs,\n parseCookiesJson,\n resolveCookies\n};\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\ntype CookieListArgs = {\n sessionId?: string;\n urls: string[];\n requestId?: string;\n};\n\nconst requireValue = (value: string | undefined, flag: string): string => {\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst normalizeCookieUrls = (values: string[]): string[] => {\n const normalized: string[] = [];\n const seen = new Set<string>();\n\n for (const value of values) {\n const trimmed = value.trim();\n if (!trimmed) {\n continue;\n }\n\n let parsedUrl: URL;\n try {\n parsedUrl = new URL(trimmed);\n } catch {\n throw createUsageError(`Invalid --url value: ${trimmed}`);\n }\n if (parsedUrl.protocol !== \"http:\" && parsedUrl.protocol !== \"https:\") {\n throw createUsageError(`Invalid --url protocol: ${trimmed}`);\n }\n\n const normalizedUrl = parsedUrl.toString();\n if (seen.has(normalizedUrl)) {\n continue;\n }\n seen.add(normalizedUrl);\n normalized.push(normalizedUrl);\n }\n\n return normalized;\n};\n\nconst parseCookieListArgs = (rawArgs: string[]): CookieListArgs => {\n const parsed: CookieListArgs = { urls: [] };\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--session-id\") {\n parsed.sessionId = requireValue(rawArgs[index + 1], \"--session-id\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = requireValue(arg.split(\"=\", 2)[1], \"--session-id\");\n continue;\n }\n\n if (arg === \"--url\") {\n const rawValue = requireValue(rawArgs[index + 1], \"--url\");\n parsed.urls.push(...rawValue.split(\",\"));\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--url=\")) {\n parsed.urls.push(...requireValue(arg.split(\"=\", 2)[1], \"--url\").split(\",\"));\n continue;\n }\n\n if (arg === \"--request-id\") {\n parsed.requestId = requireValue(rawArgs[index + 1], \"--request-id\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--request-id=\")) {\n parsed.requestId = requireValue(arg.split(\"=\", 2)[1], \"--request-id\");\n continue;\n }\n }\n\n parsed.urls = normalizeCookieUrls(parsed.urls);\n return parsed;\n};\n\nexport async function runCookieList(args: ParsedArgs) {\n const parsed = parseCookieListArgs(args.rawArgs);\n if (!parsed.sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n\n const result = await callDaemon(\"session.cookieList\", {\n sessionId: parsed.sessionId,\n ...(parsed.urls.length > 0 ? { urls: parsed.urls } : {}),\n requestId: parsed.requestId\n });\n\n const count = typeof (result as { count?: unknown }).count === \"number\"\n ? (result as { count: number }).count\n : Array.isArray((result as { cookies?: unknown[] }).cookies)\n ? (result as { cookies: unknown[] }).cookies.length\n : 0;\n\n return {\n success: true,\n message: `Cookies listed: ${count}`,\n data: result\n };\n}\n\nexport const __test__ = {\n parseCookieListArgs,\n normalizeCookieUrls\n};\n","import type { ParsedArgs } from \"../args\";\nimport { callDaemon } from \"../client\";\nimport { createUsageError } from \"../errors\";\nimport { DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS } from \"../transport-timeouts\";\nimport { parseNumberFlag } from \"../utils/parse\";\nimport { isChallengeAutomationMode, type ChallengeAutomationMode } from \"../../challenges/types\";\n\ntype MacroResolveArgs = {\n expression?: string;\n defaultProvider?: string;\n includeCatalog?: boolean;\n execute?: boolean;\n timeoutMs?: number;\n challengeAutomationMode?: ChallengeAutomationMode;\n};\n\nconst MACRO_TRANSPORT_TIMEOUT_BUFFER_MS = 60_000;\n\nconst deriveMacroTransportTimeoutMs = (timeoutMs: number): number => {\n return Math.max(\n DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS,\n timeoutMs + MACRO_TRANSPORT_TIMEOUT_BUFFER_MS\n );\n};\n\nconst requireValue = (value: string | undefined, flag: string): string => {\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst asRecord = (value: unknown): Record<string, unknown> | null => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n};\n\nconst readNonEmptyString = (value: unknown): string | null => (\n typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null\n);\n\nconst hasExecutionBlocker = (result: unknown): boolean => {\n const execution = asRecord(asRecord(result)?.execution);\n const meta = asRecord(execution?.meta);\n return asRecord(meta?.blocker) !== null;\n};\n\nconst readMacroResolveSummary = (result: unknown): string | null => (\n readNonEmptyString(asRecord(result)?.followthroughSummary)\n);\n\nconst readMacroResolveNextStep = (result: unknown): string | null => {\n const record = asRecord(result);\n const explicit = readNonEmptyString(record?.suggestedNextAction);\n if (explicit) {\n return explicit;\n }\n const [firstStep] = Array.isArray(record?.suggestedSteps)\n ? record.suggestedSteps.filter((step): step is Record<string, unknown> => Boolean(step) && typeof step === \"object\")\n : [];\n return readNonEmptyString(firstStep?.command) ?? readNonEmptyString(firstStep?.reason);\n};\n\nconst buildMacroResolveMessage = (execute: boolean, result: unknown): string => {\n const summary = readMacroResolveSummary(result);\n const nextStep = readMacroResolveNextStep(result);\n if (summary) {\n return nextStep ? `${summary} Next step: ${nextStep}` : summary;\n }\n if (!execute) {\n return \"Macro resolved.\";\n }\n if (hasExecutionBlocker(result)) {\n return \"Macro resolved, but execution is blocked and needs follow-up.\";\n }\n return \"Macro resolved and executed.\";\n};\n\nconst parseMacroResolveArgs = (rawArgs: string[]): MacroResolveArgs => {\n const parsed: MacroResolveArgs = {};\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--expression\") {\n parsed.expression = requireValue(rawArgs[index + 1], \"--expression\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--expression=\")) {\n parsed.expression = requireValue(arg.split(\"=\", 2)[1], \"--expression\");\n continue;\n }\n\n if (arg === \"--default-provider\") {\n parsed.defaultProvider = requireValue(rawArgs[index + 1], \"--default-provider\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--default-provider=\")) {\n parsed.defaultProvider = requireValue(arg.split(\"=\", 2)[1], \"--default-provider\");\n continue;\n }\n\n if (arg === \"--include-catalog\") {\n parsed.includeCatalog = true;\n continue;\n }\n\n if (arg === \"--execute\") {\n parsed.execute = true;\n continue;\n }\n\n if (arg === \"--timeout-ms\") {\n const value = requireValue(rawArgs[index + 1], \"--timeout-ms\");\n parsed.timeoutMs = parseNumberFlag(value, \"--timeout-ms\", { min: 1 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = parseNumberFlag(requireValue(arg.split(\"=\", 2)[1], \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n continue;\n }\n\n if (arg === \"--challenge-automation-mode\") {\n const value = requireValue(rawArgs[index + 1], \"--challenge-automation-mode\");\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--challenge-automation-mode=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--challenge-automation-mode\");\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n continue;\n }\n }\n\n return parsed;\n};\n\nexport async function runMacroResolve(args: ParsedArgs) {\n const parsed = parseMacroResolveArgs(args.rawArgs);\n if (!parsed.expression) {\n throw createUsageError(\"Missing --expression\");\n }\n\n const params = {\n expression: parsed.expression,\n defaultProvider: parsed.defaultProvider,\n includeCatalog: parsed.includeCatalog ?? false,\n execute: parsed.execute ?? false,\n ...(typeof parsed.timeoutMs === \"number\" ? { timeoutMs: parsed.timeoutMs } : {}),\n ...(parsed.challengeAutomationMode ? { challengeAutomationMode: parsed.challengeAutomationMode } : {})\n };\n const result = typeof parsed.timeoutMs === \"number\"\n ? await callDaemon(\"macro.resolve\", params, {\n timeoutMs: deriveMacroTransportTimeoutMs(parsed.timeoutMs)\n })\n : await callDaemon(\"macro.resolve\", params);\n\n return {\n success: true,\n message: buildMacroResolveMessage(parsed.execute ?? false, result),\n data: result\n };\n}\n\nexport const __test__ = {\n parseMacroResolveArgs\n};\n","import type { ParsedArgs } from \"../args\";\nimport { callDaemon } from \"../client\";\nimport { createUsageError } from \"../errors\";\nimport { parseNumberFlag } from \"../utils/parse\";\nimport { buildWorkflowCompletionMessage } from \"../utils/workflow-message\";\nimport { DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS } from \"../transport-timeouts\";\nimport { isChallengeAutomationMode, type ChallengeAutomationMode } from \"../../challenges/types\";\n\ntype ResearchCommandArgs = {\n topic?: string;\n days?: number;\n from?: string;\n to?: string;\n sourceSelection?: \"auto\" | \"web\" | \"community\" | \"social\" | \"shopping\" | \"all\";\n sources?: Array<\"web\" | \"community\" | \"social\" | \"shopping\">;\n mode?: \"compact\" | \"json\" | \"md\" | \"context\" | \"path\";\n includeEngagement?: boolean;\n limitPerSource?: number;\n timeoutMs?: number;\n outputDir?: string;\n ttlHours?: number;\n useCookies?: boolean;\n challengeAutomationMode?: ChallengeAutomationMode;\n cookiePolicyOverride?: \"off\" | \"auto\" | \"required\";\n};\n\nconst SOURCE_VALUES = new Set([\"web\", \"community\", \"social\", \"shopping\"]);\nconst SOURCE_SELECTION_VALUES = new Set([\"auto\", \"web\", \"community\", \"social\", \"shopping\", \"all\"]);\nconst MODE_VALUES = new Set([\"compact\", \"json\", \"md\", \"context\", \"path\"]);\nconst COOKIE_POLICY_VALUES = new Set([\"off\", \"auto\", \"required\"]);\nconst requireValue = (rawArgs: string[], index: number, flag: string): string => {\n const value = rawArgs[index + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst parseBoolean = (value: string, flag: string): boolean => {\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n throw createUsageError(`Invalid ${flag}: ${value}`);\n};\n\nconst parseSources = (raw: string): Array<\"web\" | \"community\" | \"social\" | \"shopping\"> => {\n const parsed = raw\n .split(\",\")\n .map((entry) => entry.trim().toLowerCase())\n .filter(Boolean);\n\n if (parsed.length === 0) {\n throw createUsageError(\"--sources requires at least one source\");\n }\n\n const deduped = [...new Set(parsed)];\n for (const source of deduped) {\n if (!SOURCE_VALUES.has(source)) {\n throw createUsageError(`Invalid --sources value: ${source}`);\n }\n }\n return deduped as Array<\"web\" | \"community\" | \"social\" | \"shopping\">;\n};\n\nconst parseResearchRunArgs = (rawArgs: string[]): ResearchCommandArgs => {\n const parsed: ResearchCommandArgs = {};\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--topic\") {\n parsed.topic = requireValue(rawArgs, index, \"--topic\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--topic=\")) {\n parsed.topic = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--days\") {\n parsed.days = parseNumberFlag(requireValue(rawArgs, index, \"--days\"), \"--days\", { min: 1, max: 365 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--days=\")) {\n parsed.days = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--days\", { min: 1, max: 365 });\n continue;\n }\n\n if (arg === \"--from\") {\n parsed.from = requireValue(rawArgs, index, \"--from\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--from=\")) {\n parsed.from = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--to\") {\n parsed.to = requireValue(rawArgs, index, \"--to\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--to=\")) {\n parsed.to = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--source-selection\") {\n const value = requireValue(rawArgs, index, \"--source-selection\").toLowerCase();\n if (!SOURCE_SELECTION_VALUES.has(value)) {\n throw createUsageError(`Invalid --source-selection: ${value}`);\n }\n parsed.sourceSelection = value as ResearchCommandArgs[\"sourceSelection\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--source-selection=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!SOURCE_SELECTION_VALUES.has(value)) {\n throw createUsageError(`Invalid --source-selection: ${value}`);\n }\n parsed.sourceSelection = value as ResearchCommandArgs[\"sourceSelection\"];\n continue;\n }\n\n if (arg === \"--sources\") {\n parsed.sources = parseSources(requireValue(rawArgs, index, \"--sources\"));\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--sources=\")) {\n parsed.sources = parseSources(arg.split(\"=\", 2)[1] ?? \"\");\n continue;\n }\n\n if (arg === \"--mode\") {\n const value = requireValue(rawArgs, index, \"--mode\").toLowerCase();\n if (!MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --mode: ${value}`);\n }\n parsed.mode = value as ResearchCommandArgs[\"mode\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--mode=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --mode: ${value}`);\n }\n parsed.mode = value as ResearchCommandArgs[\"mode\"];\n continue;\n }\n\n if (arg === \"--include-engagement\") {\n parsed.includeEngagement = true;\n continue;\n }\n\n if (arg === \"--limit-per-source\") {\n parsed.limitPerSource = parseNumberFlag(requireValue(rawArgs, index, \"--limit-per-source\"), \"--limit-per-source\", { min: 1, max: 100 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--limit-per-source=\")) {\n parsed.limitPerSource = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--limit-per-source\", { min: 1, max: 100 });\n continue;\n }\n\n if (arg === \"--timeout-ms\") {\n parsed.timeoutMs = parseNumberFlag(requireValue(rawArgs, index, \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--timeout-ms\", { min: 1 });\n continue;\n }\n\n if (arg === \"--output-dir\") {\n parsed.outputDir = requireValue(rawArgs, index, \"--output-dir\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--output-dir=\")) {\n parsed.outputDir = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--ttl-hours\") {\n parsed.ttlHours = parseNumberFlag(requireValue(rawArgs, index, \"--ttl-hours\"), \"--ttl-hours\", { min: 1, max: 168 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--ttl-hours=\")) {\n parsed.ttlHours = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--ttl-hours\", { min: 1, max: 168 });\n continue;\n }\n\n if (arg === \"--use-cookies\") {\n parsed.useCookies = true;\n continue;\n }\n if (arg?.startsWith(\"--use-cookies=\")) {\n parsed.useCookies = parseBoolean(arg.split(\"=\", 2)[1] ?? \"\", \"--use-cookies\");\n continue;\n }\n\n if (arg === \"--challenge-automation-mode\") {\n const value = requireValue(rawArgs, index, \"--challenge-automation-mode\");\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--challenge-automation-mode=\")) {\n const value = arg.split(\"=\", 2)[1] ?? \"\";\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n continue;\n }\n\n if (arg === \"--cookie-policy-override\" || arg === \"--cookie-policy\") {\n const value = requireValue(rawArgs, index, arg).toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid ${arg}: ${value}`);\n }\n parsed.cookiePolicyOverride = value as ResearchCommandArgs[\"cookiePolicyOverride\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--cookie-policy-override=\") || arg?.startsWith(\"--cookie-policy=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid --cookie-policy-override: ${value}`);\n }\n parsed.cookiePolicyOverride = value as ResearchCommandArgs[\"cookiePolicyOverride\"];\n continue;\n }\n }\n\n return parsed;\n};\n\nexport async function runResearchCommand(args: ParsedArgs) {\n const [subcommand, ...rest] = args.rawArgs;\n if (subcommand !== \"run\") {\n throw createUsageError(\"Usage: opendevbrowser research run --topic <value> [options]\");\n }\n\n const parsed = parseResearchRunArgs(rest);\n if (!parsed.topic?.trim()) {\n throw createUsageError(\"Missing --topic\");\n }\n\n const payload = {\n topic: parsed.topic,\n days: parsed.days,\n from: parsed.from,\n to: parsed.to,\n sourceSelection: parsed.sourceSelection,\n sources: parsed.sources,\n mode: parsed.mode ?? \"compact\",\n includeEngagement: parsed.includeEngagement ?? false,\n limitPerSource: parsed.limitPerSource,\n timeoutMs: parsed.timeoutMs ?? DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS,\n outputDir: parsed.outputDir,\n ttlHours: parsed.ttlHours,\n useCookies: parsed.useCookies,\n challengeAutomationMode: parsed.challengeAutomationMode,\n cookiePolicyOverride: parsed.cookiePolicyOverride\n };\n\n const data = await callDaemon(\"research.run\", payload);\n\n return {\n success: true,\n message: buildWorkflowCompletionMessage(\"Research workflow\", data),\n data\n };\n}\n\nexport const __test__ = {\n parseResearchRunArgs,\n parseSources\n};\n","import type { ParsedArgs } from \"../args\";\nimport { callDaemon } from \"../client\";\nimport { createUsageError } from \"../errors\";\nimport { parseNumberFlag } from \"../utils/parse\";\nimport { buildWorkflowCompletionMessage } from \"../utils/workflow-message\";\nimport { DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS } from \"../transport-timeouts\";\nimport { isChallengeAutomationMode, type ChallengeAutomationMode } from \"../../challenges/types\";\nimport type { WorkflowBrowserMode } from \"../../providers/types\";\n\ntype ShoppingCommandArgs = {\n query?: string;\n providers?: string[];\n budget?: number;\n region?: string;\n browserMode?: WorkflowBrowserMode;\n sort?: \"best_deal\" | \"lowest_price\" | \"highest_rating\" | \"fastest_shipping\";\n mode?: \"compact\" | \"json\" | \"md\" | \"context\" | \"path\";\n timeoutMs?: number;\n outputDir?: string;\n ttlHours?: number;\n useCookies?: boolean;\n challengeAutomationMode?: ChallengeAutomationMode;\n cookiePolicyOverride?: \"off\" | \"auto\" | \"required\";\n};\n\nconst SORT_VALUES = new Set([\"best_deal\", \"lowest_price\", \"highest_rating\", \"fastest_shipping\"]);\nconst MODE_VALUES = new Set([\"compact\", \"json\", \"md\", \"context\", \"path\"]);\nconst COOKIE_POLICY_VALUES = new Set([\"off\", \"auto\", \"required\"]);\nconst BROWSER_MODE_VALUES = new Set([\"auto\", \"extension\", \"managed\"]);\nconst SHOPPING_TRANSPORT_TIMEOUT_BUFFER_MS = 60_000;\n\nconst deriveShoppingTransportTimeoutMs = (timeoutMs: number): number => {\n return Math.max(\n DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS,\n timeoutMs + SHOPPING_TRANSPORT_TIMEOUT_BUFFER_MS\n );\n};\n\nconst requireValue = (rawArgs: string[], index: number, flag: string): string => {\n const value = rawArgs[index + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst parseBoolean = (value: string, flag: string): boolean => {\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n throw createUsageError(`Invalid ${flag}: ${value}`);\n};\n\nconst parseProviders = (raw: string): string[] => {\n const providers = raw\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean);\n if (providers.length === 0) {\n throw createUsageError(\"--providers requires at least one provider\");\n }\n return [...new Set(providers)];\n};\n\nconst parseShoppingRunArgs = (rawArgs: string[]): ShoppingCommandArgs => {\n const parsed: ShoppingCommandArgs = {};\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--query\") {\n parsed.query = requireValue(rawArgs, index, \"--query\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--query=\")) {\n parsed.query = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--providers\") {\n parsed.providers = parseProviders(requireValue(rawArgs, index, \"--providers\"));\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--providers=\")) {\n parsed.providers = parseProviders(arg.split(\"=\", 2)[1] ?? \"\");\n continue;\n }\n\n if (arg === \"--budget\") {\n parsed.budget = parseNumberFlag(requireValue(rawArgs, index, \"--budget\"), \"--budget\", { min: 1, integer: false });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--budget=\")) {\n parsed.budget = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--budget\", { min: 1, integer: false });\n continue;\n }\n\n if (arg === \"--region\") {\n parsed.region = requireValue(rawArgs, index, \"--region\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--region=\")) {\n parsed.region = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--browser-mode\") {\n const value = requireValue(rawArgs, index, \"--browser-mode\").toLowerCase();\n if (!BROWSER_MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --browser-mode: ${value}`);\n }\n parsed.browserMode = value as WorkflowBrowserMode;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--browser-mode=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!BROWSER_MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --browser-mode: ${value}`);\n }\n parsed.browserMode = value as WorkflowBrowserMode;\n continue;\n }\n\n if (arg === \"--sort\") {\n const value = requireValue(rawArgs, index, \"--sort\").toLowerCase();\n if (!SORT_VALUES.has(value)) {\n throw createUsageError(`Invalid --sort: ${value}`);\n }\n parsed.sort = value as ShoppingCommandArgs[\"sort\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--sort=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!SORT_VALUES.has(value)) {\n throw createUsageError(`Invalid --sort: ${value}`);\n }\n parsed.sort = value as ShoppingCommandArgs[\"sort\"];\n continue;\n }\n\n if (arg === \"--mode\") {\n const value = requireValue(rawArgs, index, \"--mode\").toLowerCase();\n if (!MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --mode: ${value}`);\n }\n parsed.mode = value as ShoppingCommandArgs[\"mode\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--mode=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --mode: ${value}`);\n }\n parsed.mode = value as ShoppingCommandArgs[\"mode\"];\n continue;\n }\n\n if (arg === \"--timeout-ms\") {\n parsed.timeoutMs = parseNumberFlag(requireValue(rawArgs, index, \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--timeout-ms\", { min: 1 });\n continue;\n }\n\n if (arg === \"--output-dir\") {\n parsed.outputDir = requireValue(rawArgs, index, \"--output-dir\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--output-dir=\")) {\n parsed.outputDir = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--ttl-hours\") {\n parsed.ttlHours = parseNumberFlag(requireValue(rawArgs, index, \"--ttl-hours\"), \"--ttl-hours\", { min: 1, max: 168 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--ttl-hours=\")) {\n parsed.ttlHours = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--ttl-hours\", { min: 1, max: 168 });\n continue;\n }\n\n if (arg === \"--use-cookies\") {\n parsed.useCookies = true;\n continue;\n }\n if (arg?.startsWith(\"--use-cookies=\")) {\n parsed.useCookies = parseBoolean(arg.split(\"=\", 2)[1] ?? \"\", \"--use-cookies\");\n continue;\n }\n\n if (arg === \"--challenge-automation-mode\") {\n const value = requireValue(rawArgs, index, \"--challenge-automation-mode\");\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--challenge-automation-mode=\")) {\n const value = arg.split(\"=\", 2)[1] ?? \"\";\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n continue;\n }\n\n if (arg === \"--cookie-policy-override\" || arg === \"--cookie-policy\") {\n const value = requireValue(rawArgs, index, arg).toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid ${arg}: ${value}`);\n }\n parsed.cookiePolicyOverride = value as ShoppingCommandArgs[\"cookiePolicyOverride\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--cookie-policy-override=\") || arg?.startsWith(\"--cookie-policy=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid --cookie-policy-override: ${value}`);\n }\n parsed.cookiePolicyOverride = value as ShoppingCommandArgs[\"cookiePolicyOverride\"];\n continue;\n }\n }\n\n return parsed;\n};\n\nexport async function runShoppingCommand(args: ParsedArgs) {\n const [subcommand, ...rest] = args.rawArgs;\n if (subcommand !== \"run\") {\n throw createUsageError(\"Usage: opendevbrowser shopping run --query <value> [options]\");\n }\n\n const parsed = parseShoppingRunArgs(rest);\n if (!parsed.query?.trim()) {\n throw createUsageError(\"Missing --query\");\n }\n\n const payload = {\n query: parsed.query,\n providers: parsed.providers,\n budget: parsed.budget,\n region: parsed.region,\n browserMode: parsed.browserMode,\n sort: parsed.sort,\n mode: parsed.mode ?? \"compact\",\n timeoutMs: parsed.timeoutMs ?? DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS,\n outputDir: parsed.outputDir,\n ttlHours: parsed.ttlHours,\n useCookies: parsed.useCookies,\n challengeAutomationMode: parsed.challengeAutomationMode,\n cookiePolicyOverride: parsed.cookiePolicyOverride\n };\n\n const data = await callDaemon(\"shopping.run\", payload, {\n timeoutMs: deriveShoppingTransportTimeoutMs(payload.timeoutMs)\n });\n\n return {\n success: true,\n message: buildWorkflowCompletionMessage(\"Shopping workflow\", data),\n data\n };\n}\n\nexport const __test__ = {\n parseShoppingRunArgs,\n parseProviders,\n deriveShoppingTransportTimeoutMs\n};\n","import type { ParsedArgs } from \"../args\";\nimport { callDaemon } from \"../client\";\nimport { createUsageError } from \"../errors\";\nimport { parseNumberFlag } from \"../utils/parse\";\nimport { buildWorkflowCompletionMessage } from \"../utils/workflow-message\";\nimport { DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS } from \"../transport-timeouts\";\nimport { isChallengeAutomationMode, type ChallengeAutomationMode } from \"../../challenges/types\";\n\ntype ProductVideoCommandArgs = {\n productUrl?: string;\n productName?: string;\n providerHint?: string;\n includeScreenshots?: boolean;\n includeAllImages?: boolean;\n includeCopy?: boolean;\n outputDir?: string;\n ttlHours?: number;\n timeoutMs?: number;\n useCookies?: boolean;\n challengeAutomationMode?: ChallengeAutomationMode;\n cookiePolicyOverride?: \"off\" | \"auto\" | \"required\";\n};\n\nconst requireValue = (rawArgs: string[], index: number, flag: string): string => {\n const value = rawArgs[index + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst parseBoolean = (value: string, flag: string): boolean => {\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n throw createUsageError(`Invalid ${flag}: ${value}`);\n};\n\nconst COOKIE_POLICY_VALUES = new Set([\"off\", \"auto\", \"required\"]);\nconst parseProductVideoArgs = (rawArgs: string[]): ProductVideoCommandArgs => {\n const parsed: ProductVideoCommandArgs = {};\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--product-url\") {\n parsed.productUrl = requireValue(rawArgs, index, \"--product-url\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--product-url=\")) {\n parsed.productUrl = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--product-name\") {\n parsed.productName = requireValue(rawArgs, index, \"--product-name\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--product-name=\")) {\n parsed.productName = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--provider-hint\") {\n parsed.providerHint = requireValue(rawArgs, index, \"--provider-hint\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--provider-hint=\")) {\n parsed.providerHint = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--include-screenshots\") {\n parsed.includeScreenshots = true;\n continue;\n }\n if (arg?.startsWith(\"--include-screenshots=\")) {\n parsed.includeScreenshots = parseBoolean(arg.split(\"=\", 2)[1] ?? \"\", \"--include-screenshots\");\n continue;\n }\n\n if (arg === \"--include-all-images\") {\n parsed.includeAllImages = true;\n continue;\n }\n if (arg?.startsWith(\"--include-all-images=\")) {\n parsed.includeAllImages = parseBoolean(arg.split(\"=\", 2)[1] ?? \"\", \"--include-all-images\");\n continue;\n }\n\n if (arg === \"--include-copy\") {\n parsed.includeCopy = true;\n continue;\n }\n if (arg?.startsWith(\"--include-copy=\")) {\n parsed.includeCopy = parseBoolean(arg.split(\"=\", 2)[1] ?? \"\", \"--include-copy\");\n continue;\n }\n\n if (arg === \"--output-dir\") {\n parsed.outputDir = requireValue(rawArgs, index, \"--output-dir\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--output-dir=\")) {\n parsed.outputDir = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--ttl-hours\") {\n parsed.ttlHours = parseNumberFlag(requireValue(rawArgs, index, \"--ttl-hours\"), \"--ttl-hours\", { min: 1, max: 168 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--ttl-hours=\")) {\n parsed.ttlHours = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--ttl-hours\", { min: 1, max: 168 });\n continue;\n }\n\n if (arg === \"--timeout-ms\") {\n parsed.timeoutMs = parseNumberFlag(requireValue(rawArgs, index, \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--timeout-ms\", { min: 1 });\n continue;\n }\n\n if (arg === \"--use-cookies\") {\n parsed.useCookies = true;\n continue;\n }\n if (arg?.startsWith(\"--use-cookies=\")) {\n parsed.useCookies = parseBoolean(arg.split(\"=\", 2)[1] ?? \"\", \"--use-cookies\");\n continue;\n }\n\n if (arg === \"--challenge-automation-mode\") {\n const value = requireValue(rawArgs, index, \"--challenge-automation-mode\");\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--challenge-automation-mode=\")) {\n const value = arg.split(\"=\", 2)[1] ?? \"\";\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n continue;\n }\n\n if (arg === \"--cookie-policy-override\" || arg === \"--cookie-policy\") {\n const value = requireValue(rawArgs, index, arg).toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid ${arg}: ${value}`);\n }\n parsed.cookiePolicyOverride = value as ProductVideoCommandArgs[\"cookiePolicyOverride\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--cookie-policy-override=\") || arg?.startsWith(\"--cookie-policy=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid --cookie-policy-override: ${value}`);\n }\n parsed.cookiePolicyOverride = value as ProductVideoCommandArgs[\"cookiePolicyOverride\"];\n continue;\n }\n }\n\n return parsed;\n};\n\nexport async function runProductVideoCommand(args: ParsedArgs) {\n const [subcommand, ...rest] = args.rawArgs;\n if (subcommand !== \"run\") {\n throw createUsageError(\"Usage: opendevbrowser product-video run --product-url <url> | --product-name <name>\");\n }\n\n const parsed = parseProductVideoArgs(rest);\n if (!parsed.productUrl && !parsed.productName) {\n throw createUsageError(\"Missing --product-url or --product-name\");\n }\n\n const timeoutMs = parsed.timeoutMs ?? DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS;\n const data = await callDaemon(\"product.video.run\", {\n product_url: parsed.productUrl,\n product_name: parsed.productName,\n provider_hint: parsed.providerHint,\n include_screenshots: parsed.includeScreenshots,\n include_all_images: parsed.includeAllImages,\n include_copy: parsed.includeCopy,\n output_dir: parsed.outputDir,\n ttl_hours: parsed.ttlHours,\n timeoutMs,\n useCookies: parsed.useCookies,\n challengeAutomationMode: parsed.challengeAutomationMode,\n cookiePolicyOverride: parsed.cookiePolicyOverride\n });\n\n return {\n success: true,\n message: buildWorkflowCompletionMessage(\"Product video asset workflow\", data),\n data\n };\n}\n\nexport const __test__ = {\n parseProductVideoArgs,\n parseBoolean\n};\n","import type { ParsedArgs } from \"../args\";\nimport { callDaemon } from \"../client\";\nimport { createUsageError } from \"../errors\";\nimport { DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS } from \"../transport-timeouts\";\nimport {\n parseBooleanFlag,\n parseNumberFlag,\n parseOptionalStringFlag,\n parseRepeatedStringFlag\n} from \"../utils/parse\";\nimport { buildWorkflowCompletionMessage } from \"../utils/workflow-message\";\nimport { isChallengeAutomationMode, type ChallengeAutomationMode } from \"../../challenges/types\";\n\ntype InspiredesignCommandArgs = {\n brief?: string;\n urls?: string[];\n captureMode?: \"off\" | \"deep\";\n includePrototypeGuidance?: boolean;\n mode?: \"compact\" | \"json\" | \"md\" | \"context\" | \"path\";\n timeoutMs?: number;\n outputDir?: string;\n ttlHours?: number;\n useCookies?: boolean;\n challengeAutomationMode?: ChallengeAutomationMode;\n cookiePolicyOverride?: \"off\" | \"auto\" | \"required\";\n};\n\nconst MODE_VALUES = new Set([\"compact\", \"json\", \"md\", \"context\", \"path\"]);\nconst CAPTURE_MODE_VALUES = new Set([\"off\", \"deep\"]);\nconst COOKIE_POLICY_VALUES = new Set([\"off\", \"auto\", \"required\"]);\n\nconst requireValue = (rawArgs: string[], index: number, flag: string): string => {\n const value = rawArgs[index + 1];\n if (!value) {\n throw createUsageError(`Missing value for ${flag}`);\n }\n return value;\n};\n\nconst parseInspiredesignRunArgs = (rawArgs: string[]): InspiredesignCommandArgs => {\n const parsed: InspiredesignCommandArgs = {\n brief: parseOptionalStringFlag(rawArgs, \"--brief\"),\n urls: parseRepeatedStringFlag(rawArgs, \"--url\")\n };\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const arg = rawArgs[index];\n\n if (arg === \"--brief\" || arg === \"--url\") {\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--brief=\") || arg?.startsWith(\"--url=\")) {\n continue;\n }\n\n if (arg === \"--capture-mode\") {\n const value = requireValue(rawArgs, index, \"--capture-mode\").toLowerCase();\n if (!CAPTURE_MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --capture-mode: ${value}`);\n }\n parsed.captureMode = value as InspiredesignCommandArgs[\"captureMode\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--capture-mode=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!CAPTURE_MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --capture-mode: ${value}`);\n }\n parsed.captureMode = value as InspiredesignCommandArgs[\"captureMode\"];\n continue;\n }\n\n if (arg === \"--include-prototype-guidance\") {\n parsed.includePrototypeGuidance = true;\n continue;\n }\n if (arg?.startsWith(\"--include-prototype-guidance=\")) {\n parsed.includePrototypeGuidance = parseBooleanFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--include-prototype-guidance\");\n continue;\n }\n\n if (arg === \"--mode\") {\n const value = requireValue(rawArgs, index, \"--mode\").toLowerCase();\n if (!MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --mode: ${value}`);\n }\n parsed.mode = value as InspiredesignCommandArgs[\"mode\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--mode=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!MODE_VALUES.has(value)) {\n throw createUsageError(`Invalid --mode: ${value}`);\n }\n parsed.mode = value as InspiredesignCommandArgs[\"mode\"];\n continue;\n }\n\n if (arg === \"--timeout-ms\") {\n parsed.timeoutMs = parseNumberFlag(requireValue(rawArgs, index, \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--timeout-ms\", { min: 1 });\n continue;\n }\n\n if (arg === \"--output-dir\") {\n parsed.outputDir = requireValue(rawArgs, index, \"--output-dir\");\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--output-dir=\")) {\n parsed.outputDir = arg.split(\"=\", 2)[1];\n continue;\n }\n\n if (arg === \"--ttl-hours\") {\n parsed.ttlHours = parseNumberFlag(requireValue(rawArgs, index, \"--ttl-hours\"), \"--ttl-hours\", { min: 1, max: 168 });\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--ttl-hours=\")) {\n parsed.ttlHours = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--ttl-hours\", { min: 1, max: 168 });\n continue;\n }\n\n if (arg === \"--use-cookies\") {\n parsed.useCookies = true;\n continue;\n }\n if (arg?.startsWith(\"--use-cookies=\")) {\n parsed.useCookies = parseBooleanFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--use-cookies\");\n continue;\n }\n\n if (arg === \"--challenge-automation-mode\") {\n const value = requireValue(rawArgs, index, \"--challenge-automation-mode\");\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--challenge-automation-mode=\")) {\n const value = arg.split(\"=\", 2)[1] ?? \"\";\n if (!isChallengeAutomationMode(value)) {\n throw createUsageError(`Invalid --challenge-automation-mode: ${value}`);\n }\n parsed.challengeAutomationMode = value;\n continue;\n }\n\n if (arg === \"--cookie-policy-override\" || arg === \"--cookie-policy\") {\n const value = requireValue(rawArgs, index, arg).toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid ${arg}: ${value}`);\n }\n parsed.cookiePolicyOverride = value as InspiredesignCommandArgs[\"cookiePolicyOverride\"];\n index += 1;\n continue;\n }\n if (arg?.startsWith(\"--cookie-policy-override=\") || arg?.startsWith(\"--cookie-policy=\")) {\n const value = (arg.split(\"=\", 2)[1] ?? \"\").toLowerCase();\n if (!COOKIE_POLICY_VALUES.has(value)) {\n throw createUsageError(`Invalid --cookie-policy-override: ${value}`);\n }\n parsed.cookiePolicyOverride = value as InspiredesignCommandArgs[\"cookiePolicyOverride\"];\n }\n }\n\n return parsed;\n};\n\nexport async function runInspiredesignCommand(args: ParsedArgs) {\n const [subcommand, ...rest] = args.rawArgs;\n if (subcommand !== \"run\") {\n throw createUsageError(\"Usage: opendevbrowser inspiredesign run --brief <value> [--url <url>] [options]\");\n }\n\n const parsed = parseInspiredesignRunArgs(rest);\n if (!parsed.brief?.trim()) {\n throw createUsageError(\"Missing --brief\");\n }\n\n const data = await callDaemon(\"inspiredesign.run\", {\n brief: parsed.brief,\n urls: parsed.urls,\n captureMode: parsed.captureMode ?? \"off\",\n includePrototypeGuidance: parsed.includePrototypeGuidance,\n mode: parsed.mode ?? \"compact\",\n timeoutMs: parsed.timeoutMs ?? DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS,\n outputDir: parsed.outputDir,\n ttlHours: parsed.ttlHours,\n useCookies: parsed.useCookies,\n challengeAutomationMode: parsed.challengeAutomationMode,\n cookiePolicyOverride: parsed.cookiePolicyOverride\n });\n\n return {\n success: true,\n message: buildWorkflowCompletionMessage(\"Inspiredesign workflow\", data),\n data\n };\n}\n\nexport const __test__ = {\n parseInspiredesignRunArgs\n};\n","{\n \"name\": \"opendevbrowser\",\n \"version\": \"0.0.23\",\n \"description\": \"Browser automation runtime with snapshot-refs-actions, browser replay screencasts, public read-only desktop observation, and browser-scoped computer-use orchestration\",\n \"type\": \"module\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"opendevbrowser\": \"dist/cli/index.js\"\n },\n \"files\": [\n \"dist\",\n \"skills\",\n \"scripts/postinstall-sync-skills.mjs\",\n \"scripts/native\",\n \"extension/canvas.html\",\n \"extension/manifest.json\",\n \"extension/popup.html\",\n \"extension/dist\",\n \"extension/icons\"\n ],\n \"keywords\": [\n \"opencode\",\n \"plugin\",\n \"browser\",\n \"automation\",\n \"cdp\",\n \"playwright\",\n \"testing\",\n \"web-scraping\",\n \"chrome\",\n \"annotation\",\n \"design-canvas\",\n \"screencast\",\n \"desktop-observation\",\n \"browser-replay\",\n \"computer-use\",\n \"challenge-automation\"\n ],\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/freshtechbro/opendevbrowser.git\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"scripts\": {\n \"build\": \"node scripts/run-package-tool.mjs tsup src/index.ts src/cli/index.ts src/cli/installers/postinstall-skill-sync.ts src/skills/skill-loader.ts --format esm --clean --sourcemap && node scripts/run-package-tool.mjs tsc --emitDeclarationOnly --declaration --declarationMap -p tsconfig.json && node scripts/postbuild-dist.mjs\",\n \"dev\": \"tsup src/index.ts src/cli/index.ts src/cli/installers/postinstall-skill-sync.ts src/skills/skill-loader.ts --format esm --dts --watch\",\n \"lint\": \"node scripts/run-package-tool.mjs eslint \\\"src/**/*.ts\\\" \\\"tests/**/*.ts\\\"\",\n \"typecheck\": \"node scripts/run-package-tool.mjs tsc --noEmit -p tsconfig.json\",\n \"test\": \"node scripts/run-vitest-coverage.mjs\",\n \"test:release-gate\": \"node scripts/release-gate-test-groups.mjs\",\n \"test:release-gate:g1\": \"node scripts/release-gate-test-groups.mjs --group 1\",\n \"test:release-gate:g2\": \"node scripts/release-gate-test-groups.mjs --group 2\",\n \"test:release-gate:g3\": \"node scripts/release-gate-test-groups.mjs --group 3\",\n \"test:release-gate:g4\": \"node scripts/release-gate-test-groups.mjs --group 4\",\n \"test:release-gate:g5\": \"node scripts/release-gate-test-groups.mjs --group 5\",\n \"extension:sync\": \"node scripts/sync-extension-version.mjs\",\n \"extension:build\": \"npm run extension:sync && node scripts/run-package-tool.mjs tsc -p extension/tsconfig.json && node scripts/copy-extension-assets.mjs\",\n \"extension:pack\": \"cd extension && zip -r ../opendevbrowser-extension.zip manifest.json popup.html canvas.html dist/ icons/\",\n \"extension:store\": \"node scripts/chrome-store-publish.mjs\",\n \"version:check\": \"node scripts/verify-versions.mjs\",\n \"prepack\": \"npm run version:check && npm run build && npm run extension:build\",\n \"postinstall\": \"node scripts/postinstall-sync-skills.mjs\"\n },\n \"dependencies\": {\n \"@opencode-ai/plugin\": \"^1.2.25\",\n \"@puppeteer/browsers\": \"^2.13.0\",\n \"async-mutex\": \"^0.5.0\",\n \"jsonc-parser\": \"^3.2.0\",\n \"parse5\": \"^8.0.0\",\n \"playwright-core\": \"^1.58.2\",\n \"typescript\": \"^5.9.3\",\n \"ws\": \"^8.19.0\",\n \"yjs\": \"^13.6.29\",\n \"zod\": \"^3.25.76\"\n },\n \"devDependencies\": {\n \"@types/chrome\": \"^0.1.37\",\n \"@types/node\": \"^20.19.35\",\n \"@types/ws\": \"^8.18.1\",\n \"@typescript-eslint/eslint-plugin\": \"^8.56.1\",\n \"@typescript-eslint/parser\": \"^8.56.1\",\n \"@vitest/coverage-v8\": \"^4.0.18\",\n \"eslint\": \"^9.39.3\",\n \"happy-dom\": \"^20.7.0\",\n \"tsup\": \"^8.5.1\",\n \"vitest\": \"^4.0.18\"\n }\n}\n","import type { InstallMode, ParsedArgs } from \"./args\";\nimport { hasBundledSkillArtifacts, hasManagedBundledSkillInstall } from \"./installers/skills\";\n\nfunction shouldRefreshManagedSkills(mode: InstallMode): boolean {\n return hasManagedBundledSkillInstall(mode) || hasBundledSkillArtifacts(mode);\n}\n\nexport function resolveUpdateSkillModes(args: ParsedArgs): InstallMode[] {\n if (args.rawArgs.includes(\"--no-skills\")) {\n return [];\n }\n if (args.rawArgs.includes(\"--skills-global\")) {\n return [\"global\"];\n }\n if (args.rawArgs.includes(\"--skills-local\")) {\n return [\"local\"];\n }\n if (args.mode) {\n return [args.mode];\n }\n\n const modes: InstallMode[] = [];\n if (shouldRefreshManagedSkills(\"global\")) {\n modes.push(\"global\");\n }\n if (shouldRefreshManagedSkills(\"local\")) {\n modes.push(\"local\");\n }\n return modes;\n}\n","import type { InstallMode, ParsedArgs } from \"./args\";\nimport type { UninstallResult } from \"./commands/uninstall\";\nimport type { UpdateResult } from \"./commands/update\";\nimport type { CommandResult } from \"./commands/types\";\nimport {\n createNoOpSkillRemovalResult,\n type SkillInstallMode,\n type SkillRemovalResult,\n type SkillSyncResult\n} from \"./installers/skills\";\nimport type { SkillTarget } from \"./utils/skills\";\n\ntype SkillTargetOptions = {\n includeLegacyArtifacts: boolean;\n};\n\ntype UpdateSkillDeps = {\n resolveUpdateSkillModes(args: ParsedArgs): InstallMode[];\n hasInstalledConfig(mode: InstallMode): boolean;\n hasBundledSkillArtifacts(mode: SkillInstallMode): boolean;\n getBundledSkillTargets(mode: SkillInstallMode): SkillTarget[];\n getBundledSkillLifecycleTargets(mode: SkillInstallMode, options: SkillTargetOptions): SkillTarget[];\n syncBundledSkillsForTargets(mode: SkillInstallMode, targets: readonly SkillTarget[]): SkillSyncResult;\n};\n\ntype UninstallSkillDeps = {\n hasBundledSkillArtifacts(mode: SkillInstallMode): boolean;\n getBundledSkillLifecycleTargets(mode: SkillInstallMode, options: SkillTargetOptions): SkillTarget[];\n removeBundledSkillsForTargets(mode: SkillInstallMode, targets: readonly SkillTarget[]): SkillRemovalResult;\n};\n\nfunction shouldSkipSkills(args: ParsedArgs): boolean {\n return args.rawArgs.includes(\"--no-skills\");\n}\n\nfunction getUpdateTargets(\n args: ParsedArgs,\n mode: SkillInstallMode,\n deps: UpdateSkillDeps\n): SkillTarget[] {\n if (deps.hasInstalledConfig(mode)) {\n return deps.getBundledSkillTargets(mode);\n }\n return deps.getBundledSkillLifecycleTargets(mode, {\n includeLegacyArtifacts: deps.hasBundledSkillArtifacts(mode)\n });\n}\n\nfunction collectUpdateSkillResults(\n args: ParsedArgs,\n deps: UpdateSkillDeps,\n modes: readonly InstallMode[]\n): SkillSyncResult[] {\n return modes.flatMap((mode) => {\n const targets = getUpdateTargets(args, mode, deps);\n return targets.length > 0 ? [deps.syncBundledSkillsForTargets(mode, targets)] : [];\n });\n}\n\nfunction getResolvedUpdateSkillModes(args: ParsedArgs, result: UpdateResult, deps: UpdateSkillDeps): InstallMode[] {\n return result.success ? deps.resolveUpdateSkillModes(args) : [];\n}\n\nfunction buildUpdateSkillMessage(\n args: ParsedArgs,\n result: UpdateResult,\n skillResults: readonly SkillSyncResult[]\n): string {\n if (!result.success) {\n return \"\";\n }\n if (shouldSkipSkills(args)) {\n return \"Managed skill refresh skipped (--no-skills).\";\n }\n if (skillResults.length === 0) {\n return \"No managed skill packs required refresh.\";\n }\n return skillResults.map((entry) => entry.message).join(\"\\n\");\n}\n\nexport function buildUpdateCommandResult(\n args: ParsedArgs,\n result: UpdateResult,\n deps: UpdateSkillDeps\n): CommandResult {\n const skillModes = getResolvedUpdateSkillModes(args, result, deps);\n const skillResults = result.success && !shouldSkipSkills(args)\n ? collectUpdateSkillResults(args, deps, skillModes)\n : [];\n const message = [result.message, buildUpdateSkillMessage(args, result, skillResults)].filter(Boolean).join(\"\\n\");\n\n return {\n success: result.success && skillResults.every((entry) => entry.success),\n message,\n data: {\n cacheCleared: result.cleared,\n skillModes,\n skills: skillResults\n }\n };\n}\n\nfunction buildUninstallSkillMessage(\n args: ParsedArgs,\n result: UninstallResult,\n skillsResult: SkillRemovalResult | undefined\n): string {\n if (!result.success) {\n return \"\";\n }\n if (shouldSkipSkills(args)) {\n return \"Managed skill cleanup skipped (--no-skills).\";\n }\n return skillsResult?.message ?? \"No managed skill packs required cleanup.\";\n}\n\nfunction getUninstallTargets(\n args: ParsedArgs,\n mode: InstallMode,\n result: UninstallResult,\n deps: UninstallSkillDeps\n): SkillTarget[] {\n if (!result.success || shouldSkipSkills(args)) {\n return [];\n }\n return deps.getBundledSkillLifecycleTargets(mode, {\n includeLegacyArtifacts: result.removed || deps.hasBundledSkillArtifacts(mode)\n });\n}\n\nexport function buildUninstallCommandResult(\n args: ParsedArgs,\n mode: InstallMode,\n result: UninstallResult,\n deps: UninstallSkillDeps\n): CommandResult {\n const targets = getUninstallTargets(args, mode, result, deps);\n const skillsResult = result.success && !shouldSkipSkills(args)\n ? (targets.length > 0\n ? deps.removeBundledSkillsForTargets(mode, targets)\n : createNoOpSkillRemovalResult(mode))\n : undefined;\n const skillMessage = buildUninstallSkillMessage(args, result, skillsResult);\n\n return {\n success: result.success && (skillsResult?.success ?? true),\n message: [result.message, skillMessage].filter(Boolean).join(\"\\n\"),\n data: {\n config: result,\n skills: skillsResult\n }\n };\n}\n","#!/usr/bin/env node\n\nimport { parseArgs, detectOutputFormat } from \"./args\";\nimport type { InstallMode, OutputFormat, ParsedArgs } from \"./args\";\nimport { getHelpText } from \"./help\";\nimport onboardingMetadata from \"./onboarding-metadata.json\";\nimport { registerCommand, getCommand } from \"./commands/registry\";\nimport type { CommandResult } from \"./commands/types\";\nimport { installGlobal } from \"./installers/global\";\nimport { installLocal } from \"./installers/local\";\nimport {\n getBundledSkillTargets,\n getBundledSkillLifecycleTargets,\n hasBundledSkillArtifacts,\n removeBundledSkillsForTargets,\n syncBundledSkills,\n syncBundledSkillsForTargets\n} from \"./installers/skills\";\nimport { runUpdate } from \"./commands/update\";\nimport { runUninstall, findInstalledConfigs, hasInstalledConfig } from \"./commands/uninstall\";\nimport { runServe } from \"./commands/serve\";\nimport { runDaemonCommand } from \"./commands/daemon\";\nimport { runNativeCommand } from \"./commands/native\";\nimport { runArtifactsCommand } from \"./commands/artifacts\";\nimport { reconcileInstallAutostart } from \"./install-autostart-reconciliation\";\nimport type { InstallAutostartReconciliationResult } from \"./install-autostart-reconciliation\";\nimport {\n createInstallAutostartOutputPayload,\n formatAutostartReconciliationMessage\n} from \"./install-autostart-output\";\nimport { runScriptCommand } from \"./commands/run\";\nimport { runSessionLaunch } from \"./commands/session/launch\";\nimport { runSessionConnect } from \"./commands/session/connect\";\nimport { runSessionDisconnect } from \"./commands/session/disconnect\";\nimport { runSessionInspector } from \"./commands/session/inspector\";\nimport { runSessionInspectorAudit } from \"./commands/session/inspector-audit\";\nimport { runSessionInspectorPlan } from \"./commands/session/inspector-plan\";\nimport { runStatus } from \"./commands/status\";\nimport { runStatusCapabilities } from \"./commands/status-capabilities\";\nimport { runGoto } from \"./commands/nav/goto\";\nimport { runWait } from \"./commands/nav/wait\";\nimport { runSnapshot } from \"./commands/nav/snapshot\";\nimport { runReview } from \"./commands/nav/review\";\nimport { runReviewDesktop } from \"./commands/nav/review-desktop\";\nimport { runAnnotate } from \"./commands/annotate\";\nimport { runCanvas } from \"./commands/canvas\";\nimport { runRpc } from \"./commands/rpc\";\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 { runUpload } from \"./commands/interact/upload\";\nimport { runPointerMove } from \"./commands/interact/pointer-move\";\nimport { runPointerDown } from \"./commands/interact/pointer-down\";\nimport { runPointerUp } from \"./commands/interact/pointer-up\";\nimport { runPointerDrag } from \"./commands/interact/pointer-drag\";\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 { runScreencastStart } from \"./commands/devtools/screencast-start\";\nimport { runScreencastStop } from \"./commands/devtools/screencast-stop\";\nimport { runDialog } from \"./commands/devtools/dialog\";\nimport { runConsolePoll } from \"./commands/devtools/console-poll\";\nimport { runNetworkPoll } from \"./commands/devtools/network-poll\";\nimport { runDebugTraceSnapshot } from \"./commands/devtools/debug-trace-snapshot\";\nimport { runDesktopStatus } from \"./commands/desktop/status\";\nimport { runDesktopWindows } from \"./commands/desktop/windows\";\nimport { runDesktopActiveWindow } from \"./commands/desktop/active-window\";\nimport { runDesktopCaptureDesktop } from \"./commands/desktop/capture-desktop\";\nimport { runDesktopCaptureWindow } from \"./commands/desktop/capture-window\";\nimport { runDesktopAccessibilitySnapshot } from \"./commands/desktop/accessibility-snapshot\";\nimport { runCookieImport } from \"./commands/session/cookie-import\";\nimport { runCookieList } from \"./commands/session/cookie-list\";\nimport { runMacroResolve } from \"./commands/macro-resolve\";\nimport { runResearchCommand } from \"./commands/research\";\nimport { runShoppingCommand } from \"./commands/shopping\";\nimport { runProductVideoCommand } from \"./commands/product-video\";\nimport { runInspiredesignCommand } from \"./commands/inspiredesign\";\nimport { extractExtension } from \"../extension-extractor\";\nimport { setDefaultLogSink, stderrSink } from \"../core/logging\";\nimport { flushOutputAndExit, writeOutput } from \"./output\";\nimport { formatErrorPayload, resolveExitCode, toCliError, EXIT_EXECUTION, EXIT_USAGE } from \"./errors\";\nimport type { CliError } from \"./errors\";\nimport packageJson from \"../../package.json\";\nimport { resolveUpdateSkillModes } from \"./update-skill-modes\";\nimport { buildUninstallCommandResult, buildUpdateCommandResult } from \"./skill-lifecycle\";\n\nconst VERSION = typeof packageJson.version === \"string\" ? packageJson.version : \"0.0.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 setDefaultLogSink(stderrSink);\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 and refresh managed skill packs\",\n run: () => buildUpdateCommandResult(args, runUpdate(), {\n resolveUpdateSkillModes,\n hasInstalledConfig,\n hasBundledSkillArtifacts,\n getBundledSkillTargets,\n getBundledSkillLifecycleTargets,\n syncBundledSkillsForTargets\n })\n });\n\n registerCommand({\n name: \"uninstall\",\n description: \"Remove plugin from config and clean managed skill packs\",\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 return buildUninstallCommandResult(args, mode, runUninstall(mode), {\n hasBundledSkillArtifacts,\n getBundledSkillLifecycleTargets,\n removeBundledSkillsForTargets\n });\n }\n });\n\n registerCommand({\n name: \"install\",\n description: \"Install the plugin and sync bundled skill packs\",\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 const autostart = result.success ? reconcileInstallAutostart(result) : undefined;\n const skillsResult = result.success && args.skillsMode !== \"none\"\n ? syncBundledSkills(args.skillsMode)\n : undefined;\n const installSuccess = result.success && (skillsResult?.success ?? true);\n\n if (args.outputFormat !== \"text\") {\n const payload: Record<string, unknown> = {\n alreadyInstalled: result.alreadyInstalled\n };\n\n if (skillsResult) {\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 (autostart) {\n Object.assign(payload, createInstallAutostartOutputPayload(autostart));\n }\n\n return { success: installSuccess, 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 (skillsResult) {\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 (autostart) {\n const autostartMessage = formatAutostartReconciliationMessage(autostart);\n if (autostartMessage) {\n if (autostart.autostartAction === \"repair_failed\") {\n warn(autostartMessage);\n } else {\n log(autostartMessage);\n }\n }\n }\n\n if (installSuccess && !result.alreadyInstalled) {\n log(\"\\nNext steps:\");\n log(\" 1. Start or restart OpenCode\");\n log(` 2. Read npx opendevbrowser --help and start with ${onboardingMetadata.quickStartCommands.promptingGuide}`);\n log(` 3. Or load ${onboardingMetadata.skillName} ${onboardingMetadata.skillTopic} directly via ${onboardingMetadata.quickStartCommands.skillLoad}`);\n log(\" 4. Use opendevbrowser_status to verify the plugin is loaded\");\n }\n\n return { success: installSuccess, 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: \"status-capabilities\",\n description: \"Inspect runtime capability discovery for the host and an optional session\",\n run: async () => runStatusCapabilities(args)\n });\n\n registerCommand({\n name: \"session-inspector\",\n description: \"Capture a session-first diagnostic summary with relay health and trace proof\",\n run: async () => runSessionInspector(args)\n });\n\n registerCommand({\n name: \"session-inspector-plan\",\n description: \"Inspect browser-scoped computer-use policy and safe suggested steps\",\n run: async () => runSessionInspectorPlan(args)\n });\n\n registerCommand({\n name: \"session-inspector-audit\",\n description: \"Capture a correlated audit bundle across desktop evidence, browser review, and policy state\",\n run: async () => runSessionInspectorAudit(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: \"review\",\n description: \"Capture a first-class review payload for the active page\",\n run: async () => runReview(args)\n });\n\n registerCommand({\n name: \"review-desktop\",\n description: \"Capture desktop-assisted browser review with read-only desktop evidence\",\n run: async () => runReviewDesktop(args)\n });\n\n registerCommand({\n name: \"annotate\",\n description: \"Request interactive annotations via direct or relay transport\",\n run: async () => runAnnotate(args)\n });\n\n registerCommand({\n name: \"canvas\",\n description: \"Execute a design-canvas command\",\n run: async () => runCanvas(args)\n });\n\n registerCommand({\n name: \"rpc\",\n description: \"Execute an internal daemon RPC command (power-user)\",\n run: async () => runRpc(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: \"upload\",\n description: \"Upload files to a file input or chooser by ref\",\n run: async () => runUpload(args)\n });\n\n registerCommand({\n name: \"pointer-move\",\n description: \"Move the pointer to viewport coordinates\",\n run: async () => runPointerMove(args)\n });\n\n registerCommand({\n name: \"pointer-down\",\n description: \"Press a mouse button at viewport coordinates\",\n run: async () => runPointerDown(args)\n });\n\n registerCommand({\n name: \"pointer-up\",\n description: \"Release a mouse button at viewport coordinates\",\n run: async () => runPointerUp(args)\n });\n\n registerCommand({\n name: \"pointer-drag\",\n description: \"Drag the pointer between two viewport coordinates\",\n run: async () => runPointerDrag(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: \"screencast-start\",\n description: \"Start a browser replay screencast capture\",\n run: async () => runScreencastStart(args)\n });\n\n registerCommand({\n name: \"screencast-stop\",\n description: \"Stop a browser replay screencast capture\",\n run: async () => runScreencastStop(args)\n });\n\n registerCommand({\n name: \"dialog\",\n description: \"Inspect or handle a JavaScript dialog\",\n run: async () => runDialog(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\n registerCommand({\n name: \"debug-trace-snapshot\",\n description: \"Capture page + console + network + exception diagnostics\",\n run: async () => runDebugTraceSnapshot(args)\n });\n\n registerCommand({\n name: \"desktop-status\",\n description: \"Inspect public read-only desktop observation availability\",\n run: async () => runDesktopStatus(args)\n });\n\n registerCommand({\n name: \"desktop-windows\",\n description: \"List windows exposed by the public read-only desktop observation plane\",\n run: async () => runDesktopWindows(args)\n });\n\n registerCommand({\n name: \"desktop-active-window\",\n description: \"Inspect the active window through the public read-only desktop observation plane\",\n run: async () => runDesktopActiveWindow(args)\n });\n\n registerCommand({\n name: \"desktop-capture-desktop\",\n description: \"Capture the current desktop surface through the public read-only desktop observation plane\",\n run: async () => runDesktopCaptureDesktop(args)\n });\n\n registerCommand({\n name: \"desktop-capture-window\",\n description: \"Capture a specific window through the public read-only desktop observation plane\",\n run: async () => runDesktopCaptureWindow(args)\n });\n\n registerCommand({\n name: \"desktop-accessibility-snapshot\",\n description: \"Capture desktop accessibility state through the public read-only desktop observation plane\",\n run: async () => runDesktopAccessibilitySnapshot(args)\n });\n\n registerCommand({\n name: \"cookie-import\",\n description: \"Import validated cookies into a session\",\n run: async () => runCookieImport(args)\n });\n\n registerCommand({\n name: \"cookie-list\",\n description: \"List cookies for a session (optionally filtered by URL)\",\n run: async () => runCookieList(args)\n });\n\n registerCommand({\n name: \"macro-resolve\",\n description: \"Resolve or execute a macro expression via provider actions\",\n run: async () => runMacroResolve(args)\n });\n\n registerCommand({\n name: \"research\",\n description: \"Run research workflows\",\n run: async () => runResearchCommand(args)\n });\n\n registerCommand({\n name: \"shopping\",\n description: \"Run shopping workflows\",\n run: async () => runShoppingCommand(args)\n });\n\n registerCommand({\n name: \"product-video\",\n description: \"Run product presentation asset workflows\",\n run: async () => runProductVideoCommand(args)\n });\n\n registerCommand({\n name: \"inspiredesign\",\n description: \"Run inspiredesign workflows\",\n run: async () => runInspiredesignCommand(args)\n });\n\n registerCommand({\n name: \"artifacts\",\n description: \"Manage workflow artifact lifecycle\",\n run: async () => runArtifactsCommand(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 await flushOutputAndExit(exitCode);\n return;\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 await flushOutputAndExit(cliError.exitCode);\n return;\n }\n}\n\nmain().catch(async (error: unknown) => {\n const cliError = toCliError(error, EXIT_EXECUTION);\n emitFatalError(cliError, detectOutputFormat(process.argv));\n await flushOutputAndExit(cliError.exitCode);\n});\n"],"mappings":"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","names":["mode","noPrompt","fs","fs","fs","path","os","fs","path","os","getPluginConfigPath","fs","path","metadata","message","clearedCount","staleNote","execFileSync","existsSync","mkdirSync","unlinkSync","writeFileSync","homedir","dirname","join","resolve","fileURLToPath","message","join","resolve","tmpdir","resolve","join","tmpdir","defaultDeps","readFileSync","resolve","resolve","readFileSync","resolve","parseOptionalTimeoutMs","parseStatusArgs","nativeStatus","parseOptionalTimeoutMs","requireValue","message","readFileSync","requireValue","readFileSync","readFileSync","requireValue","parseJsonObject","readFileSync","path","readFileSync","requireValue","readFileSync","requireValue","requireValue","asRecord","readNonEmptyString","requireValue","MODE_VALUES","COOKIE_POLICY_VALUES","requireValue","parseBoolean","requireValue","parseBoolean","COOKIE_POLICY_VALUES","MODE_VALUES","COOKIE_POLICY_VALUES","requireValue","resolve","result","exitCode"]}