opendevbrowser 0.0.12 → 0.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +425 -42
- package/dist/annotate/direct-annotator.d.ts +22 -0
- package/dist/annotate/direct-annotator.d.ts.map +1 -0
- package/dist/annotate/output.d.ts +10 -0
- package/dist/annotate/output.d.ts.map +1 -0
- package/dist/browser/annotation-manager.d.ts +30 -0
- package/dist/browser/annotation-manager.d.ts.map +1 -0
- package/dist/browser/browser-manager.d.ts +397 -0
- package/dist/browser/browser-manager.d.ts.map +1 -0
- package/dist/browser/fingerprint/adapters.d.ts +26 -0
- package/dist/browser/fingerprint/adapters.d.ts.map +1 -0
- package/dist/browser/fingerprint/canary.d.ts +25 -0
- package/dist/browser/fingerprint/canary.d.ts.map +1 -0
- package/dist/browser/fingerprint/profiles.d.ts +16 -0
- package/dist/browser/fingerprint/profiles.d.ts.map +1 -0
- package/dist/browser/fingerprint/tier1-coherence.d.ts +36 -0
- package/dist/browser/fingerprint/tier1-coherence.d.ts.map +1 -0
- package/dist/browser/fingerprint/tier2-runtime.d.ts +40 -0
- package/dist/browser/fingerprint/tier2-runtime.d.ts.map +1 -0
- package/dist/browser/fingerprint/tier3-adaptive.d.ts +30 -0
- package/dist/browser/fingerprint/tier3-adaptive.d.ts.map +1 -0
- package/dist/browser/manager-types.d.ts +3 -0
- package/dist/browser/manager-types.d.ts.map +1 -0
- package/dist/browser/ops-browser-manager.d.ts +131 -0
- package/dist/browser/ops-browser-manager.d.ts.map +1 -0
- package/dist/browser/ops-client.d.ts +56 -0
- package/dist/browser/ops-client.d.ts.map +1 -0
- package/dist/browser/parallelism-governor.d.ts +31 -0
- package/dist/browser/parallelism-governor.d.ts.map +1 -0
- package/dist/browser/script-runner.d.ts +23 -0
- package/dist/browser/script-runner.d.ts.map +1 -0
- package/dist/browser/session-store.d.ts +63 -0
- package/dist/browser/session-store.d.ts.map +1 -0
- package/dist/browser/target-manager.d.ts +36 -0
- package/dist/browser/target-manager.d.ts.map +1 -0
- package/dist/cache/chrome-locator.d.ts +2 -0
- package/dist/cache/chrome-locator.d.ts.map +1 -0
- package/dist/cache/downloader.d.ts +6 -0
- package/dist/cache/downloader.d.ts.map +1 -0
- package/dist/cache/paths.d.ts +9 -0
- package/dist/cache/paths.d.ts.map +1 -0
- package/dist/chunk-7W3SPXIB.js +166 -0
- package/dist/chunk-7W3SPXIB.js.map +1 -0
- package/dist/chunk-ST7CO5FA.js +18668 -0
- package/dist/chunk-ST7CO5FA.js.map +1 -0
- package/dist/cli/args.d.ts +25 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/client.d.ts +2 -0
- package/dist/cli/client.d.ts.map +1 -0
- package/dist/cli/commands/annotate.d.ts +27 -0
- package/dist/cli/commands/annotate.d.ts.map +1 -0
- package/dist/cli/commands/artifacts.d.ts +24 -0
- package/dist/cli/commands/artifacts.d.ts.map +1 -0
- package/dist/cli/commands/daemon.d.ts +35 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/devtools/console-poll.d.ts +7 -0
- package/dist/cli/commands/devtools/console-poll.d.ts.map +1 -0
- package/dist/cli/commands/devtools/debug-trace-snapshot.d.ts +20 -0
- package/dist/cli/commands/devtools/debug-trace-snapshot.d.ts.map +1 -0
- package/dist/cli/commands/devtools/network-poll.d.ts +7 -0
- package/dist/cli/commands/devtools/network-poll.d.ts.map +1 -0
- package/dist/cli/commands/devtools/perf.d.ts +7 -0
- package/dist/cli/commands/devtools/perf.d.ts.map +1 -0
- package/dist/cli/commands/devtools/screenshot.d.ts +17 -0
- package/dist/cli/commands/devtools/screenshot.d.ts.map +1 -0
- package/dist/cli/commands/dom/attr.d.ts +7 -0
- package/dist/cli/commands/dom/attr.d.ts.map +1 -0
- package/dist/cli/commands/dom/checked.d.ts +7 -0
- package/dist/cli/commands/dom/checked.d.ts.map +1 -0
- package/dist/cli/commands/dom/enabled.d.ts +7 -0
- package/dist/cli/commands/dom/enabled.d.ts.map +1 -0
- package/dist/cli/commands/dom/html.d.ts +7 -0
- package/dist/cli/commands/dom/html.d.ts.map +1 -0
- package/dist/cli/commands/dom/text.d.ts +7 -0
- package/dist/cli/commands/dom/text.d.ts.map +1 -0
- package/dist/cli/commands/dom/value.d.ts +7 -0
- package/dist/cli/commands/dom/value.d.ts.map +1 -0
- package/dist/cli/commands/dom/visible.d.ts +7 -0
- package/dist/cli/commands/dom/visible.d.ts.map +1 -0
- package/dist/cli/commands/export/clone-component.d.ts +7 -0
- package/dist/cli/commands/export/clone-component.d.ts.map +1 -0
- package/dist/cli/commands/export/clone-page.d.ts +7 -0
- package/dist/cli/commands/export/clone-page.d.ts.map +1 -0
- package/dist/cli/commands/interact/check.d.ts +7 -0
- package/dist/cli/commands/interact/check.d.ts.map +1 -0
- package/dist/cli/commands/interact/click.d.ts +7 -0
- package/dist/cli/commands/interact/click.d.ts.map +1 -0
- package/dist/cli/commands/interact/hover.d.ts +7 -0
- package/dist/cli/commands/interact/hover.d.ts.map +1 -0
- package/dist/cli/commands/interact/press.d.ts +7 -0
- package/dist/cli/commands/interact/press.d.ts.map +1 -0
- package/dist/cli/commands/interact/scroll-into-view.d.ts +7 -0
- package/dist/cli/commands/interact/scroll-into-view.d.ts.map +1 -0
- package/dist/cli/commands/interact/scroll.d.ts +7 -0
- package/dist/cli/commands/interact/scroll.d.ts.map +1 -0
- package/dist/cli/commands/interact/select.d.ts +7 -0
- package/dist/cli/commands/interact/select.d.ts.map +1 -0
- package/dist/cli/commands/interact/type.d.ts +7 -0
- package/dist/cli/commands/interact/type.d.ts.map +1 -0
- package/dist/cli/commands/interact/uncheck.d.ts +7 -0
- package/dist/cli/commands/interact/uncheck.d.ts.map +1 -0
- package/dist/cli/commands/macro-resolve.d.ts +18 -0
- package/dist/cli/commands/macro-resolve.d.ts.map +1 -0
- package/dist/cli/commands/native.d.ts +82 -0
- package/dist/cli/commands/native.d.ts.map +1 -0
- package/dist/cli/commands/nav/goto.d.ts +7 -0
- package/dist/cli/commands/nav/goto.d.ts.map +1 -0
- package/dist/cli/commands/nav/snapshot.d.ts +7 -0
- package/dist/cli/commands/nav/snapshot.d.ts.map +1 -0
- package/dist/cli/commands/nav/wait.d.ts +7 -0
- package/dist/cli/commands/nav/wait.d.ts.map +1 -0
- package/dist/cli/commands/pages/close.d.ts +6 -0
- package/dist/cli/commands/pages/close.d.ts.map +1 -0
- package/dist/cli/commands/pages/list.d.ts +7 -0
- package/dist/cli/commands/pages/list.d.ts.map +1 -0
- package/dist/cli/commands/pages/open.d.ts +7 -0
- package/dist/cli/commands/pages/open.d.ts.map +1 -0
- package/dist/cli/commands/product-video.d.ts +25 -0
- package/dist/cli/commands/product-video.d.ts.map +1 -0
- package/dist/cli/commands/registry.d.ts +5 -0
- package/dist/cli/commands/registry.d.ts.map +1 -0
- package/dist/cli/commands/research.d.ts +27 -0
- package/dist/cli/commands/research.d.ts.map +1 -0
- package/dist/cli/commands/rpc.d.ts +28 -0
- package/dist/cli/commands/rpc.d.ts.map +1 -0
- package/dist/cli/commands/run.d.ts +17 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/serve.d.ts +59 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/session/connect.d.ts +9 -0
- package/dist/cli/commands/session/connect.d.ts.map +1 -0
- package/dist/cli/commands/session/cookie-import.d.ts +31 -0
- package/dist/cli/commands/session/cookie-import.d.ts.map +1 -0
- package/dist/cli/commands/session/cookie-list.d.ts +17 -0
- package/dist/cli/commands/session/cookie-list.d.ts.map +1 -0
- package/dist/cli/commands/session/disconnect.d.ts +6 -0
- package/dist/cli/commands/session/disconnect.d.ts.map +1 -0
- package/dist/cli/commands/session/launch.d.ts +29 -0
- package/dist/cli/commands/session/launch.d.ts.map +1 -0
- package/dist/cli/commands/session/status.d.ts +7 -0
- package/dist/cli/commands/session/status.d.ts.map +1 -0
- package/dist/cli/commands/shopping.d.ts +25 -0
- package/dist/cli/commands/shopping.d.ts.map +1 -0
- package/dist/cli/commands/status.d.ts +19 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/targets/close.d.ts +6 -0
- package/dist/cli/commands/targets/close.d.ts.map +1 -0
- package/dist/cli/commands/targets/list.d.ts +7 -0
- package/dist/cli/commands/targets/list.d.ts.map +1 -0
- package/dist/cli/commands/targets/new.d.ts +7 -0
- package/dist/cli/commands/targets/new.d.ts.map +1 -0
- package/dist/cli/commands/targets/use.d.ts +7 -0
- package/dist/cli/commands/targets/use.d.ts.map +1 -0
- package/dist/cli/commands/types.d.ts +13 -0
- package/dist/cli/commands/types.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.d.ts +14 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/update.d.ts +7 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/daemon-autostart.d.ts +46 -0
- package/dist/cli/daemon-autostart.d.ts.map +1 -0
- package/dist/cli/daemon-client.d.ts +33 -0
- package/dist/cli/daemon-client.d.ts.map +1 -0
- package/dist/cli/daemon-commands.d.ts +7 -0
- package/dist/cli/daemon-commands.d.ts.map +1 -0
- package/dist/cli/daemon-state.d.ts +56 -0
- package/dist/cli/daemon-state.d.ts.map +1 -0
- package/dist/cli/daemon-status.d.ts +19 -0
- package/dist/cli/daemon-status.d.ts.map +1 -0
- package/dist/cli/daemon.d.ts +29 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/errors.d.ts +20 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/help.d.ts +28 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +4604 -769
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/installers/global.d.ts +9 -0
- package/dist/cli/installers/global.d.ts.map +1 -0
- package/dist/cli/installers/local.d.ts +9 -0
- package/dist/cli/installers/local.d.ts.map +1 -0
- package/dist/cli/installers/skills.d.ts +19 -0
- package/dist/cli/installers/skills.d.ts.map +1 -0
- package/dist/cli/output.d.ts +7 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/remote-manager.d.ts +96 -0
- package/dist/cli/remote-manager.d.ts.map +1 -0
- package/dist/cli/remote-relay.d.ts +17 -0
- package/dist/cli/remote-relay.d.ts.map +1 -0
- package/dist/cli/templates/config.d.ts +7 -0
- package/dist/cli/templates/config.d.ts.map +1 -0
- package/dist/cli/utils/config.d.ts +20 -0
- package/dist/cli/utils/config.d.ts.map +1 -0
- package/dist/cli/utils/http.d.ts +5 -0
- package/dist/cli/utils/http.d.ts.map +1 -0
- package/dist/cli/utils/parse.d.ts +8 -0
- package/dist/cli/utils/parse.d.ts.map +1 -0
- package/dist/cli/utils/skills.d.ts +12 -0
- package/dist/cli/utils/skills.d.ts.map +1 -0
- package/dist/config.d.ts +208 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/core/bootstrap.d.ts +3 -0
- package/dist/core/bootstrap.d.ts.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/logging.d.ts +34 -0
- package/dist/core/logging.d.ts.map +1 -0
- package/dist/core/types.d.ts +34 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/devtools/console-tracker.d.ts +44 -0
- package/dist/devtools/console-tracker.d.ts.map +1 -0
- package/dist/devtools/exception-tracker.d.ts +42 -0
- package/dist/devtools/exception-tracker.d.ts.map +1 -0
- package/dist/devtools/network-tracker.d.ts +34 -0
- package/dist/devtools/network-tracker.d.ts.map +1 -0
- package/dist/export/css-extract.d.ts +5 -0
- package/dist/export/css-extract.d.ts.map +1 -0
- package/dist/export/dom-capture.d.ts +15 -0
- package/dist/export/dom-capture.d.ts.map +1 -0
- package/dist/export/react-emitter.d.ts +11 -0
- package/dist/export/react-emitter.d.ts.map +1 -0
- package/dist/extension-extractor.d.ts +3 -0
- package/dist/extension-extractor.d.ts.map +1 -0
- package/dist/index.d.ts +3 -4
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1905 -262
- package/dist/index.js.map +1 -1
- package/dist/macros/execute.d.ts +44 -0
- package/dist/macros/execute.d.ts.map +1 -0
- package/dist/macros/index.d.ts +9 -0
- package/dist/macros/index.d.ts.map +1 -0
- package/dist/macros/packs/core.d.ts +3 -0
- package/dist/macros/packs/core.d.ts.map +1 -0
- package/dist/macros/registry.d.ts +48 -0
- package/dist/macros/registry.d.ts.map +1 -0
- package/dist/macros-NUBRM44Y.js +399 -0
- package/dist/macros-NUBRM44Y.js.map +1 -0
- package/dist/opendevbrowser.d.ts +3 -4
- package/dist/opendevbrowser.d.ts.map +1 -0
- package/dist/opendevbrowser.js +1905 -262
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/providers/adaptive-concurrency.d.ts +42 -0
- package/dist/providers/adaptive-concurrency.d.ts.map +1 -0
- package/dist/providers/artifacts.d.ts +34 -0
- package/dist/providers/artifacts.d.ts.map +1 -0
- package/dist/providers/blocker.d.ts +47 -0
- package/dist/providers/blocker.d.ts.map +1 -0
- package/dist/providers/community/index.d.ts +44 -0
- package/dist/providers/community/index.d.ts.map +1 -0
- package/dist/providers/enrichment.d.ts +33 -0
- package/dist/providers/enrichment.d.ts.map +1 -0
- package/dist/providers/errors.d.ts +41 -0
- package/dist/providers/errors.d.ts.map +1 -0
- package/dist/providers/index.d.ts +121 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/normalize.d.ts +39 -0
- package/dist/providers/normalize.d.ts.map +1 -0
- package/dist/providers/policy.d.ts +5 -0
- package/dist/providers/policy.d.ts.map +1 -0
- package/dist/providers/registry.d.ts +22 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/renderer.d.ts +49 -0
- package/dist/providers/renderer.d.ts.map +1 -0
- package/dist/providers/runtime-factory.d.ts +20 -0
- package/dist/providers/runtime-factory.d.ts.map +1 -0
- package/dist/providers/safety/prompt-guard.d.ts +34 -0
- package/dist/providers/safety/prompt-guard.d.ts.map +1 -0
- package/dist/providers/shared/anti-bot-policy.d.ts +51 -0
- package/dist/providers/shared/anti-bot-policy.d.ts.map +1 -0
- package/dist/providers/shared/post-policy.d.ts +31 -0
- package/dist/providers/shared/post-policy.d.ts.map +1 -0
- package/dist/providers/shared/request-headers.d.ts +5 -0
- package/dist/providers/shared/request-headers.d.ts.map +1 -0
- package/dist/providers/shared/traversal-url.d.ts +2 -0
- package/dist/providers/shared/traversal-url.d.ts.map +1 -0
- package/dist/providers/shopping/index.d.ts +63 -0
- package/dist/providers/shopping/index.d.ts.map +1 -0
- package/dist/providers/social/bluesky.d.ts +3 -0
- package/dist/providers/social/bluesky.d.ts.map +1 -0
- package/dist/providers/social/facebook.d.ts +3 -0
- package/dist/providers/social/facebook.d.ts.map +1 -0
- package/dist/providers/social/index.d.ts +31 -0
- package/dist/providers/social/index.d.ts.map +1 -0
- package/dist/providers/social/instagram.d.ts +3 -0
- package/dist/providers/social/instagram.d.ts.map +1 -0
- package/dist/providers/social/linkedin.d.ts +3 -0
- package/dist/providers/social/linkedin.d.ts.map +1 -0
- package/dist/providers/social/platform.d.ts +40 -0
- package/dist/providers/social/platform.d.ts.map +1 -0
- package/dist/providers/social/reddit.d.ts +3 -0
- package/dist/providers/social/reddit.d.ts.map +1 -0
- package/dist/providers/social/threads.d.ts +3 -0
- package/dist/providers/social/threads.d.ts.map +1 -0
- package/dist/providers/social/tiktok.d.ts +3 -0
- package/dist/providers/social/tiktok.d.ts.map +1 -0
- package/dist/providers/social/x.d.ts +3 -0
- package/dist/providers/social/x.d.ts.map +1 -0
- package/dist/providers/social/youtube-resolver.d.ts +78 -0
- package/dist/providers/social/youtube-resolver.d.ts.map +1 -0
- package/dist/providers/social/youtube.d.ts +34 -0
- package/dist/providers/social/youtube.d.ts.map +1 -0
- package/dist/providers/tier-router.d.ts +30 -0
- package/dist/providers/tier-router.d.ts.map +1 -0
- package/dist/providers/timebox.d.ts +20 -0
- package/dist/providers/timebox.d.ts.map +1 -0
- package/dist/providers/types.d.ts +344 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/web/crawl-worker.d.ts +36 -0
- package/dist/providers/web/crawl-worker.d.ts.map +1 -0
- package/dist/providers/web/crawler.d.ts +101 -0
- package/dist/providers/web/crawler.d.ts.map +1 -0
- package/dist/providers/web/extract.d.ts +11 -0
- package/dist/providers/web/extract.d.ts.map +1 -0
- package/dist/providers/web/index.d.ts +24 -0
- package/dist/providers/web/index.d.ts.map +1 -0
- package/dist/providers/web/policy.d.ts +14 -0
- package/dist/providers/web/policy.d.ts.map +1 -0
- package/dist/providers/workflows.d.ts +67 -0
- package/dist/providers/workflows.d.ts.map +1 -0
- package/dist/relay/protocol.d.ts +317 -0
- package/dist/relay/protocol.d.ts.map +1 -0
- package/dist/relay/relay-endpoints.d.ts +16 -0
- package/dist/relay/relay-endpoints.d.ts.map +1 -0
- package/dist/relay/relay-server.d.ts +111 -0
- package/dist/relay/relay-server.d.ts.map +1 -0
- package/dist/relay/relay-types.d.ts +9 -0
- package/dist/relay/relay-types.d.ts.map +1 -0
- package/dist/skills/continuity-nudge.d.ts +12 -0
- package/dist/skills/continuity-nudge.d.ts.map +1 -0
- package/dist/skills/skill-loader.d.ts +20 -0
- package/dist/skills/skill-loader.d.ts.map +1 -0
- package/dist/skills/skill-nudge.d.ts +18 -0
- package/dist/skills/skill-nudge.d.ts.map +1 -0
- package/dist/skills/types.d.ts +12 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/snapshot/ops-snapshot.d.ts +16 -0
- package/dist/snapshot/ops-snapshot.d.ts.map +1 -0
- package/dist/snapshot/refs.d.ts +23 -0
- package/dist/snapshot/refs.d.ts.map +1 -0
- package/dist/snapshot/snapshotter.d.ts +27 -0
- package/dist/snapshot/snapshotter.d.ts.map +1 -0
- package/dist/tools/annotate.d.ts +4 -0
- package/dist/tools/annotate.d.ts.map +1 -0
- package/dist/tools/check.d.ts +4 -0
- package/dist/tools/check.d.ts.map +1 -0
- package/dist/tools/click.d.ts +4 -0
- package/dist/tools/click.d.ts.map +1 -0
- package/dist/tools/clone_component.d.ts +4 -0
- package/dist/tools/clone_component.d.ts.map +1 -0
- package/dist/tools/clone_page.d.ts +4 -0
- package/dist/tools/clone_page.d.ts.map +1 -0
- package/dist/tools/close.d.ts +4 -0
- package/dist/tools/close.d.ts.map +1 -0
- package/dist/tools/connect.d.ts +4 -0
- package/dist/tools/connect.d.ts.map +1 -0
- package/dist/tools/console_poll.d.ts +4 -0
- package/dist/tools/console_poll.d.ts.map +1 -0
- package/dist/tools/cookie_import.d.ts +25 -0
- package/dist/tools/cookie_import.d.ts.map +1 -0
- package/dist/tools/cookie_list.d.ts +9 -0
- package/dist/tools/cookie_list.d.ts.map +1 -0
- package/dist/tools/debug_trace_snapshot.d.ts +4 -0
- package/dist/tools/debug_trace_snapshot.d.ts.map +1 -0
- package/dist/tools/deps.d.ts +26 -0
- package/dist/tools/deps.d.ts.map +1 -0
- package/dist/tools/disconnect.d.ts +4 -0
- package/dist/tools/disconnect.d.ts.map +1 -0
- package/dist/tools/dom_get_html.d.ts +4 -0
- package/dist/tools/dom_get_html.d.ts.map +1 -0
- package/dist/tools/dom_get_text.d.ts +4 -0
- package/dist/tools/dom_get_text.d.ts.map +1 -0
- package/dist/tools/get_attr.d.ts +4 -0
- package/dist/tools/get_attr.d.ts.map +1 -0
- package/dist/tools/get_value.d.ts +4 -0
- package/dist/tools/get_value.d.ts.map +1 -0
- package/dist/tools/goto.d.ts +4 -0
- package/dist/tools/goto.d.ts.map +1 -0
- package/dist/tools/hover.d.ts +4 -0
- package/dist/tools/hover.d.ts.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/is_checked.d.ts +4 -0
- package/dist/tools/is_checked.d.ts.map +1 -0
- package/dist/tools/is_enabled.d.ts +4 -0
- package/dist/tools/is_enabled.d.ts.map +1 -0
- package/dist/tools/is_visible.d.ts +4 -0
- package/dist/tools/is_visible.d.ts.map +1 -0
- package/dist/tools/launch.d.ts +4 -0
- package/dist/tools/launch.d.ts.map +1 -0
- package/dist/tools/list.d.ts +4 -0
- package/dist/tools/list.d.ts.map +1 -0
- package/dist/tools/macro_resolve.d.ts +25 -0
- package/dist/tools/macro_resolve.d.ts.map +1 -0
- package/dist/tools/network_poll.d.ts +4 -0
- package/dist/tools/network_poll.d.ts.map +1 -0
- package/dist/tools/page.d.ts +4 -0
- package/dist/tools/page.d.ts.map +1 -0
- package/dist/tools/perf.d.ts +4 -0
- package/dist/tools/perf.d.ts.map +1 -0
- package/dist/tools/press.d.ts +4 -0
- package/dist/tools/press.d.ts.map +1 -0
- package/dist/tools/product_video_run.d.ts +4 -0
- package/dist/tools/product_video_run.d.ts.map +1 -0
- package/dist/tools/prompting_guide.d.ts +4 -0
- package/dist/tools/prompting_guide.d.ts.map +1 -0
- package/dist/tools/research_run.d.ts +4 -0
- package/dist/tools/research_run.d.ts.map +1 -0
- package/dist/tools/response.d.ts +16 -0
- package/dist/tools/response.d.ts.map +1 -0
- package/dist/tools/run.d.ts +4 -0
- package/dist/tools/run.d.ts.map +1 -0
- package/dist/tools/screenshot.d.ts +4 -0
- package/dist/tools/screenshot.d.ts.map +1 -0
- package/dist/tools/scroll.d.ts +4 -0
- package/dist/tools/scroll.d.ts.map +1 -0
- package/dist/tools/scroll_into_view.d.ts +4 -0
- package/dist/tools/scroll_into_view.d.ts.map +1 -0
- package/dist/tools/select.d.ts +4 -0
- package/dist/tools/select.d.ts.map +1 -0
- package/dist/tools/shopping_run.d.ts +4 -0
- package/dist/tools/shopping_run.d.ts.map +1 -0
- package/dist/tools/skill_list.d.ts +4 -0
- package/dist/tools/skill_list.d.ts.map +1 -0
- package/dist/tools/skill_load.d.ts +4 -0
- package/dist/tools/skill_load.d.ts.map +1 -0
- package/dist/tools/snapshot.d.ts +4 -0
- package/dist/tools/snapshot.d.ts.map +1 -0
- package/dist/tools/status.d.ts +4 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/target_close.d.ts +4 -0
- package/dist/tools/target_close.d.ts.map +1 -0
- package/dist/tools/target_new.d.ts +4 -0
- package/dist/tools/target_new.d.ts.map +1 -0
- package/dist/tools/target_use.d.ts +4 -0
- package/dist/tools/target_use.d.ts.map +1 -0
- package/dist/tools/targets_list.d.ts +4 -0
- package/dist/tools/targets_list.d.ts.map +1 -0
- package/dist/tools/type.d.ts +4 -0
- package/dist/tools/type.d.ts.map +1 -0
- package/dist/tools/uncheck.d.ts +4 -0
- package/dist/tools/uncheck.d.ts.map +1 -0
- package/dist/tools/wait.d.ts +4 -0
- package/dist/tools/wait.d.ts.map +1 -0
- package/dist/tools/workflow-runtime.d.ts +4 -0
- package/dist/tools/workflow-runtime.d.ts.map +1 -0
- package/dist/utils/crypto.d.ts +2 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/endpoint-validation.d.ts +2 -0
- package/dist/utils/endpoint-validation.d.ts.map +1 -0
- package/dist/utils/fs.d.ts +5 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/hub-enabled.d.ts +3 -0
- package/dist/utils/hub-enabled.d.ts.map +1 -0
- package/extension/dist/annotate-content.css +237 -0
- package/extension/dist/annotate-content.js +934 -0
- package/extension/dist/background.js +1203 -35
- package/extension/dist/logging.js +50 -0
- package/extension/dist/ops/dom-bridge.js +355 -0
- package/extension/dist/ops/ops-runtime.js +1751 -0
- package/extension/dist/ops/ops-session-store.js +203 -0
- package/extension/dist/ops/parallelism-governor.js +117 -0
- package/extension/dist/ops/redaction.js +52 -0
- package/extension/dist/ops/snapshot-builder.js +4 -0
- package/extension/dist/ops/snapshot-shared.js +236 -0
- package/extension/dist/popup.js +370 -25
- package/extension/dist/relay-settings.js +1 -0
- package/extension/dist/services/CDPRouter.js +567 -104
- package/extension/dist/services/ConnectionManager.js +469 -60
- package/extension/dist/services/NativePortManager.js +182 -0
- package/extension/dist/services/RelayClient.js +227 -26
- package/extension/dist/services/TabManager.js +81 -0
- package/extension/dist/services/TargetSessionMap.js +146 -0
- package/extension/dist/services/cdp-router-commands.js +203 -0
- package/extension/dist/services/url-restrictions.js +41 -0
- package/extension/dist/types.js +3 -1
- package/extension/icons/icon128.png +0 -0
- package/extension/icons/icon16.png +0 -0
- package/extension/icons/icon32.png +0 -0
- package/extension/icons/icon48.png +0 -0
- package/extension/manifest.json +17 -3
- package/extension/popup.html +144 -0
- package/package.json +26 -17
- package/scripts/native/host.cjs +230 -0
- package/scripts/native/install.ps1 +73 -0
- package/scripts/native/install.sh +66 -0
- package/scripts/native/uninstall.ps1 +25 -0
- package/scripts/native/uninstall.sh +26 -0
- package/skills/AGENTS.md +47 -66
- package/skills/opendevbrowser-best-practices/SKILL.md +196 -49
- package/skills/opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md +44 -0
- package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +95 -0
- package/skills/opendevbrowser-best-practices/artifacts/debug-trace-playbook.md +36 -0
- package/skills/opendevbrowser-best-practices/artifacts/fingerprint-tiers.md +36 -0
- package/skills/opendevbrowser-best-practices/artifacts/macro-workflows.md +43 -0
- package/skills/opendevbrowser-best-practices/artifacts/parity-gates.md +36 -0
- package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +89 -0
- package/skills/opendevbrowser-best-practices/assets/templates/cdp-forward-envelope.json +11 -0
- package/skills/opendevbrowser-best-practices/assets/templates/mode-flag-matrix.json +56 -0
- package/skills/opendevbrowser-best-practices/assets/templates/ops-request-envelope.json +9 -0
- package/skills/opendevbrowser-best-practices/assets/templates/robustness-checklist.json +79 -0
- package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +24 -0
- package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +144 -0
- package/skills/opendevbrowser-best-practices/scripts/run-robustness-audit.sh +83 -0
- package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +93 -0
- package/skills/opendevbrowser-continuity-ledger/SKILL.md +67 -23
- package/skills/opendevbrowser-data-extraction/SKILL.md +126 -0
- package/skills/opendevbrowser-data-extraction/artifacts/extraction-workflows.md +31 -0
- package/skills/opendevbrowser-data-extraction/assets/templates/compliance-checklist.md +7 -0
- package/skills/opendevbrowser-data-extraction/assets/templates/extraction-schema.json +17 -0
- package/skills/opendevbrowser-data-extraction/assets/templates/pagination-state.json +11 -0
- package/skills/opendevbrowser-data-extraction/assets/templates/quality-gates.json +10 -0
- package/skills/opendevbrowser-data-extraction/examples/sample-schema.json +19 -0
- package/skills/opendevbrowser-data-extraction/scripts/run-extraction-workflow.sh +83 -0
- package/skills/opendevbrowser-data-extraction/scripts/validate-skill-assets.sh +49 -0
- package/skills/opendevbrowser-form-testing/SKILL.md +143 -0
- package/skills/opendevbrowser-form-testing/artifacts/form-workflows.md +37 -0
- package/skills/opendevbrowser-form-testing/assets/templates/a11y-assertions.md +7 -0
- package/skills/opendevbrowser-form-testing/assets/templates/challenge-decision-tree.json +16 -0
- package/skills/opendevbrowser-form-testing/assets/templates/multi-step-state.json +11 -0
- package/skills/opendevbrowser-form-testing/assets/templates/validation-matrix.json +24 -0
- package/skills/opendevbrowser-form-testing/examples/sample-validation-matrix.json +29 -0
- package/skills/opendevbrowser-form-testing/scripts/run-form-workflow.sh +82 -0
- package/skills/opendevbrowser-form-testing/scripts/validate-skill-assets.sh +49 -0
- package/skills/opendevbrowser-login-automation/SKILL.md +159 -0
- package/skills/opendevbrowser-login-automation/artifacts/login-workflows.md +39 -0
- package/skills/opendevbrowser-login-automation/assets/templates/auth-signals.json +21 -0
- package/skills/opendevbrowser-login-automation/assets/templates/challenge-checkpoint.md +10 -0
- package/skills/opendevbrowser-login-automation/assets/templates/login-scenario-matrix.json +26 -0
- package/skills/opendevbrowser-login-automation/examples/sample-auth-signals.json +14 -0
- package/skills/opendevbrowser-login-automation/scripts/record-auth-signals.sh +18 -0
- package/skills/opendevbrowser-login-automation/scripts/run-login-workflow.sh +99 -0
- package/skills/opendevbrowser-login-automation/scripts/validate-skill-assets.sh +50 -0
- package/skills/opendevbrowser-product-presentation-asset/SKILL.md +98 -0
- package/skills/opendevbrowser-product-presentation-asset/artifacts/asset-pack-assembly.md +23 -0
- package/skills/opendevbrowser-product-presentation-asset/artifacts/ugc-creative-guide.md +21 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/claims-evidence-map.md +5 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/copy.md +5 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/features.md +4 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/manifest.schema.json +14 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/shot-list.md +7 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/ugc-concepts.md +17 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/user-actions.md +7 -0
- package/skills/opendevbrowser-product-presentation-asset/assets/templates/video-assembly.md +18 -0
- package/skills/opendevbrowser-product-presentation-asset/examples/sample-input.json +6 -0
- package/skills/opendevbrowser-product-presentation-asset/examples/sample-manifest.json +18 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/capture-screenshots.sh +9 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/collect-product.sh +14 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/download-images.sh +9 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh +96 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/validate-skill-assets.sh +56 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/write-manifest.sh +43 -0
- package/skills/opendevbrowser-research/SKILL.md +73 -0
- package/skills/opendevbrowser-research/artifacts/research-workflows.md +29 -0
- package/skills/opendevbrowser-research/assets/templates/compact.md +7 -0
- package/skills/opendevbrowser-research/assets/templates/context.json +18 -0
- package/skills/opendevbrowser-research/assets/templates/report.md +9 -0
- package/skills/opendevbrowser-research/examples/sample-input.json +6 -0
- package/skills/opendevbrowser-research/examples/sample-output.md +4 -0
- package/skills/opendevbrowser-research/scripts/render-output.sh +12 -0
- package/skills/opendevbrowser-research/scripts/run-research.sh +23 -0
- package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +48 -0
- package/skills/opendevbrowser-research/scripts/write-artifacts.sh +29 -0
- package/skills/opendevbrowser-shopping/SKILL.md +118 -0
- package/skills/opendevbrowser-shopping/artifacts/deal-hunting-workflows.md +37 -0
- package/skills/opendevbrowser-shopping/assets/templates/deal-thresholds.json +8 -0
- package/skills/opendevbrowser-shopping/assets/templates/deals-context.json +9 -0
- package/skills/opendevbrowser-shopping/assets/templates/deals-table.md +4 -0
- package/skills/opendevbrowser-shopping/assets/templates/market-analysis.json +30 -0
- package/skills/opendevbrowser-shopping/examples/sample-deals.md +4 -0
- package/skills/opendevbrowser-shopping/examples/sample-query.json +5 -0
- package/skills/opendevbrowser-shopping/scripts/analyze-market.sh +307 -0
- package/skills/opendevbrowser-shopping/scripts/normalize-offers.sh +28 -0
- package/skills/opendevbrowser-shopping/scripts/render-deals.sh +13 -0
- package/skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh +32 -0
- package/skills/opendevbrowser-shopping/scripts/run-shopping.sh +19 -0
- package/skills/opendevbrowser-shopping/scripts/validate-skill-assets.sh +53 -0
- package/dist/chunk-WTFSMBVH.js +0 -2815
- package/dist/chunk-WTFSMBVH.js.map +0 -1
- package/extension/dist/popup.jsx +0 -150
- package/skills/data-extraction/SKILL.md +0 -136
- package/skills/form-testing/SKILL.md +0 -113
- package/skills/login-automation/SKILL.md +0 -98
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/errors.ts","../../src/cli/args.ts","../../src/cli/commands/registry.ts","../../src/cli/installers/global.ts","../../src/cli/utils/config.ts","../../src/utils/fs.ts","../../src/cli/templates/config.ts","../../src/cli/installers/local.ts","../../src/cli/installers/skills.ts","../../src/cli/utils/skills.ts","../../src/cli/commands/update.ts","../../src/cli/commands/uninstall.ts","../../src/cli/daemon.ts","../../src/cli/daemon-commands.ts","../../src/cli/commands/serve.ts","../../src/cli/commands/run.ts","../../src/cli/output.ts","../../src/cli/client.ts","../../src/cli/commands/session/launch.ts","../../src/cli/commands/session/connect.ts","../../src/cli/commands/session/disconnect.ts","../../src/cli/commands/session/status.ts","../../src/cli/commands/nav/goto.ts","../../src/cli/commands/nav/wait.ts","../../src/cli/commands/nav/snapshot.ts","../../src/cli/commands/interact/click.ts","../../src/cli/commands/interact/type.ts","../../src/cli/commands/interact/select.ts","../../src/cli/commands/interact/scroll.ts","../../src/cli/index.ts"],"sourcesContent":["import type { CommandResult } from \"./commands/types\";\n\nexport const EXIT_SUCCESS = 0;\nexport const EXIT_USAGE = 1;\nexport const EXIT_EXECUTION = 2;\nexport const EXIT_DISCONNECTED = 10;\n\nexport class CliError extends Error {\n exitCode: number;\n\n constructor(message: string, exitCode: number) {\n super(message);\n this.exitCode = exitCode;\n }\n}\n\nexport function createUsageError(message: string): CliError {\n return new CliError(message, EXIT_USAGE);\n}\n\nexport function createDisconnectedError(message: string): CliError {\n return new CliError(message, EXIT_DISCONNECTED);\n}\n\nexport function toCliError(error: unknown, fallbackExitCode = EXIT_EXECUTION): CliError {\n if (error instanceof CliError) {\n return error;\n }\n const message = error instanceof Error ? error.message : String(error);\n return new CliError(message, fallbackExitCode);\n}\n\nexport type ErrorPayload = {\n success: false;\n error: string;\n exitCode: number;\n};\n\nexport function formatErrorPayload(error: CliError): ErrorPayload {\n return {\n success: false,\n error: error.message,\n exitCode: error.exitCode\n };\n}\n\nexport function resolveExitCode(result: CommandResult): number | null {\n if (result.exitCode === null) {\n return null;\n }\n if (typeof result.exitCode === \"number\") {\n return result.exitCode;\n }\n return result.success ? EXIT_SUCCESS : EXIT_EXECUTION;\n}\n","import { createUsageError } from \"./errors\";\n\nexport type CliCommand = \"install\" | \"update\" | \"uninstall\" | \"help\" | \"version\" | \"serve\" | \"run\"\n | \"launch\" | \"connect\" | \"disconnect\" | \"status\"\n | \"goto\" | \"wait\" | \"snapshot\"\n | \"click\" | \"type\" | \"select\" | \"scroll\";\nexport type InstallMode = \"global\" | \"local\";\nexport type SkillsMode = \"global\" | \"local\" | \"none\";\nexport type OutputFormat = \"text\" | \"json\" | \"stream-json\";\n\nexport interface ParsedArgs {\n command: CliCommand;\n mode?: InstallMode;\n withConfig: boolean;\n noPrompt: boolean;\n noInteractive: boolean;\n quiet: boolean;\n outputFormat: OutputFormat;\n skillsMode: SkillsMode;\n fullInstall: boolean;\n rawArgs: string[];\n}\n\nconst SHORT_FLAGS: Record<string, string> = {\n \"-g\": \"--global\",\n \"-l\": \"--local\",\n \"-u\": \"--update\",\n \"-h\": \"--help\",\n \"-v\": \"--version\",\n \"-f\": \"--full\"\n};\n\nfunction expandShortFlags(args: string[]): string[] {\n return args.map((arg) => SHORT_FLAGS[arg] ?? arg);\n}\n\nfunction parseSkillsMode(args: string[]): SkillsMode {\n if (args.includes(\"--no-skills\")) {\n return \"none\";\n }\n if (args.includes(\"--skills-local\")) {\n return \"local\";\n }\n if (args.includes(\"--skills-global\")) {\n return \"global\";\n }\n return \"global\";\n}\n\nfunction parseOutputFormat(args: string[]): OutputFormat {\n const outputFlag = args.find((arg) => arg.startsWith(\"--output-format\"));\n if (!outputFlag) {\n return \"text\";\n }\n\n let value: string | undefined;\n if (outputFlag.includes(\"=\")) {\n value = outputFlag.split(\"=\", 2)[1];\n } else {\n const index = args.indexOf(outputFlag);\n value = index >= 0 ? args[index + 1] : undefined;\n }\n\n if (value === \"text\" || value === \"json\" || value === \"stream-json\") {\n return value;\n }\n\n throw createUsageError(`Invalid --output-format: ${value ?? \"missing\"}`);\n}\n\nexport function parseArgs(argv: string[]): ParsedArgs {\n let args = expandShortFlags(argv.slice(2));\n let commandOverride: CliCommand | null = null;\n\n if (args[0] && !args[0].startsWith(\"-\")) {\n const candidate = args[0];\n if (candidate === \"install\" || candidate === \"update\" || candidate === \"uninstall\" || candidate === \"help\" || candidate === \"version\" || candidate === \"serve\" || candidate === \"run\"\n || candidate === \"launch\" || candidate === \"connect\" || candidate === \"disconnect\" || candidate === \"status\"\n || candidate === \"goto\" || candidate === \"wait\" || candidate === \"snapshot\"\n || candidate === \"click\" || candidate === \"type\" || candidate === \"select\" || candidate === \"scroll\") {\n commandOverride = candidate;\n args = args.slice(1);\n } else {\n throw createUsageError(`Unknown command: ${candidate}`);\n }\n }\n const skillsMode = parseSkillsMode(args);\n const fullInstall = args.includes(\"--full\");\n const outputFormat = parseOutputFormat(args);\n\n if (commandOverride === \"help\" || args.includes(\"--help\") || args.includes(\"-h\")) {\n return {\n command: \"help\",\n withConfig: false,\n noPrompt: false,\n noInteractive: false,\n quiet: false,\n outputFormat,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n if (commandOverride === \"version\" || args.includes(\"--version\") || args.includes(\"-v\")) {\n return {\n command: \"version\",\n withConfig: false,\n noPrompt: false,\n noInteractive: false,\n quiet: false,\n outputFormat,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n if (commandOverride === \"update\" || args.includes(\"--update\")) {\n const mode = args.includes(\"--global\") ? \"global\" : args.includes(\"--local\") ? \"local\" : undefined;\n return {\n command: \"update\",\n mode,\n withConfig: false,\n noPrompt: false,\n noInteractive: false,\n quiet: false,\n outputFormat,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n if (commandOverride === \"uninstall\" || args.includes(\"--uninstall\")) {\n const mode = args.includes(\"--global\") ? \"global\" : args.includes(\"--local\") ? \"local\" : undefined;\n const noPrompt = args.includes(\"--no-prompt\") || args.includes(\"--no-interactive\");\n return {\n command: \"uninstall\",\n mode,\n withConfig: false,\n noPrompt,\n noInteractive: noPrompt,\n quiet: args.includes(\"--quiet\"),\n outputFormat,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n const withConfig = args.includes(\"--with-config\") || fullInstall;\n const noPrompt = args.includes(\"--no-prompt\") || args.includes(\"--no-interactive\");\n const noInteractive = args.includes(\"--no-interactive\") || noPrompt;\n const quiet = args.includes(\"--quiet\");\n\n let mode: InstallMode | undefined;\n if (args.includes(\"--global\")) {\n mode = \"global\";\n } else if (args.includes(\"--local\")) {\n mode = \"local\";\n } else if (noPrompt) {\n mode = \"global\";\n }\n\n const validFlags = new Set([\n \"--global\", \"--local\", \"--update\", \"--uninstall\",\n \"--help\", \"--version\", \"--with-config\", \"--no-prompt\",\n \"--no-interactive\", \"--quiet\", \"--output-format\",\n \"--full\",\n \"--port\", \"--token\", \"--stop\",\n \"--script\", \"--headless\", \"--profile\", \"--persist-profile\", \"--chrome-path\", \"--start-url\", \"--flag\",\n \"--session-id\", \"--close-browser\", \"--ws-endpoint\", \"--host\", \"--cdp-port\",\n \"--url\", \"--wait-until\", \"--timeout-ms\", \"--ref\", \"--state\", \"--until\", \"--mode\", \"--max-chars\", \"--cursor\",\n \"--text\", \"--clear\", \"--submit\", \"--values\", \"--dy\",\n \"--no-extension\", \"--extension-only\", \"--wait-for-extension\", \"--wait-timeout-ms\",\n \"--skills-global\", \"--skills-local\", \"--no-skills\"\n ]);\n \n for (const arg of args) {\n if (arg.startsWith(\"--\") && !validFlags.has(arg)) {\n throw createUsageError(`Unknown flag: ${arg}`);\n }\n if (arg.startsWith(\"-\") && !arg.startsWith(\"--\") && !SHORT_FLAGS[arg]) {\n throw createUsageError(`Unknown flag: ${arg}`);\n }\n }\n\n return {\n command: commandOverride ?? \"install\",\n mode,\n withConfig,\n noPrompt,\n noInteractive,\n quiet,\n outputFormat,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n}\n\nexport function getHelpText(): string {\n return `\nOpenDevBrowser CLI - Install and manage the OpenDevBrowser plugin\n\nUSAGE:\n npx opendevbrowser [command] [options]\n\nCOMMANDS:\n install Install the plugin (default if no command specified)\n update Clear cached plugin to trigger reinstall\n uninstall Remove plugin from config\n serve Start or stop the local daemon\n run Execute a JSON script in a single process\n launch Launch a managed browser session via daemon\n connect Connect to an existing browser via daemon\n disconnect Disconnect a daemon session\n status Get daemon session status\n goto Navigate current session to a URL\n wait Wait for load or a ref to appear\n snapshot Capture a snapshot of the active page\n click Click an element by ref\n type Type into an element by ref\n select Select values in a select by ref\n scroll Scroll the page or element by ref\n help Show this help message\n version Show version\n\nALIASES:\n --update, -u Same as update\n --uninstall Same as uninstall\n --help, -h Same as help\n --version, -v Same as version\n\nINSTALL OPTIONS:\n --global, -g Install to ~/.config/opencode/opencode.json\n --local, -l Install to ./opencode.json (project-local)\n --with-config Also create opendevbrowser.jsonc with defaults\n --full, -f Create config and pre-extract extension assets\n --no-prompt Skip prompts, use defaults (global install)\n --no-interactive Alias of --no-prompt\n --quiet Suppress non-error output\n --output-format Output format: text (default), json, stream-json\n --skills-global Install bundled skills to ~/.config/opencode/skill (default)\n --skills-local Install bundled skills to ./.opencode/skill\n --no-skills Skip installing bundled skills\n\nEXAMPLES:\n npx opendevbrowser # Interactive install\n npx opendevbrowser --global # Global install\n npx opendevbrowser --local # Project install\n npx opendevbrowser --full # Install + config + extension assets\n npx opendevbrowser -g --with-config # Global + config file\n npx opendevbrowser --skills-local # Install skills locally\n npx opendevbrowser --no-skills # Skip skill installation\n npx opendevbrowser --update # Update plugin\n npx opendevbrowser --uninstall --global # Remove from global config\n`.trim();\n}\n\nexport function detectOutputFormat(argv: string[]): OutputFormat {\n const args = expandShortFlags(argv.slice(2));\n try {\n return parseOutputFormat(args);\n } catch {\n return \"text\";\n }\n}\n\nexport function detectQuiet(argv: string[]): boolean {\n const args = expandShortFlags(argv.slice(2));\n return args.includes(\"--quiet\");\n}\n","import type { CommandDefinition } from \"./types\";\n\nconst registry = new Map<string, CommandDefinition>();\n\nexport function registerCommand(definition: CommandDefinition): void {\n registry.set(definition.name, definition);\n}\n\nexport function getCommand(name: string): CommandDefinition | undefined {\n return registry.get(name);\n}\n\nexport function listCommands(): CommandDefinition[] {\n return Array.from(registry.values());\n}\n","import * as fs from \"fs\";\nimport {\n getGlobalConfigPath,\n readConfig,\n hasPlugin,\n ensureDir,\n updateConfigContent\n} from \"../utils/config\";\nimport { createPluginConfig } from \"../templates/config\";\n\nexport interface InstallResult {\n success: boolean;\n message: string;\n configPath: string;\n created: boolean;\n alreadyInstalled: boolean;\n}\n\nexport function installGlobal(withConfig: boolean = false): InstallResult {\n const configPath = getGlobalConfigPath();\n\n try {\n const { content, config } = readConfig(configPath);\n\n if (hasPlugin(config)) {\n return {\n success: true,\n message: `opendevbrowser is already installed in ${configPath}`,\n configPath,\n created: false,\n alreadyInstalled: true\n };\n }\n\n const newContent = updateConfigContent(content, \"opendevbrowser\");\n\n ensureDir(configPath.replace(/[/\\\\][^/\\\\]+$/, \"\"));\n fs.writeFileSync(configPath, newContent, \"utf-8\");\n\n if (withConfig) {\n createPluginConfig(\"global\");\n }\n\n return {\n success: true,\n message: `Added opendevbrowser to ${configPath}`,\n configPath,\n created: content.trim() === \"\",\n alreadyInstalled: false\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to install globally: ${message}`,\n configPath,\n created: false,\n alreadyInstalled: false\n };\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport { parse as parseJsonc, modify, applyEdits } from \"jsonc-parser\";\nimport { writeFileAtomic } from \"../../utils/fs\";\n\nconst PLUGIN_NAME = \"opendevbrowser\";\nconst SCHEMA_URL = \"https://opencode.ai/config.json\";\n\nexport interface OpenCodeConfig {\n $schema?: string;\n plugin?: string[];\n [key: string]: unknown;\n}\n\nexport function getGlobalConfigPath(): string {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, \"opencode.json\");\n}\n\nexport function getLocalConfigPath(): string {\n return path.join(process.cwd(), \"opencode.json\");\n}\n\nexport function ensureDir(dirPath: string): void {\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true });\n }\n}\n\nexport function readConfig(configPath: string): { content: string; config: OpenCodeConfig } {\n if (!fs.existsSync(configPath)) {\n return { content: \"\", config: {} };\n }\n\n const content = fs.readFileSync(configPath, \"utf-8\");\n const errors: Array<{ error: number; offset: number; length: number }> = [];\n const parsed = parseJsonc(content, errors, { allowTrailingComma: true });\n\n if (errors.length > 0) {\n const firstError = errors[0];\n throw new Error(`Invalid JSONC at ${configPath}: parse error at offset ${firstError?.offset ?? 0}`);\n }\n\n return { content, config: (parsed ?? {}) as OpenCodeConfig };\n}\n\nexport function writeConfig(configPath: string, config: OpenCodeConfig): void {\n ensureDir(path.dirname(configPath));\n const content = JSON.stringify(config, null, 2) + \"\\n\";\n writeFileAtomic(configPath, content);\n}\n\nexport function addPlugin(config: OpenCodeConfig, pluginName: string = PLUGIN_NAME): OpenCodeConfig {\n const result = { ...config };\n\n if (!result.$schema) {\n result.$schema = SCHEMA_URL;\n }\n\n if (!result.plugin) {\n result.plugin = [pluginName];\n } else if (!result.plugin.includes(pluginName)) {\n result.plugin = [...result.plugin, pluginName];\n }\n\n return result;\n}\n\nexport function removePlugin(config: OpenCodeConfig, pluginName: string = PLUGIN_NAME): OpenCodeConfig {\n const result = { ...config };\n\n if (result.plugin) {\n result.plugin = result.plugin.filter((p) => p !== pluginName);\n if (result.plugin.length === 0) {\n delete result.plugin;\n }\n }\n\n return result;\n}\n\nexport function hasPlugin(config: OpenCodeConfig, pluginName: string = PLUGIN_NAME): boolean {\n return config.plugin?.includes(pluginName) ?? false;\n}\n\nexport function createConfigWithPlugin(pluginName: string = PLUGIN_NAME): OpenCodeConfig {\n return {\n $schema: SCHEMA_URL,\n plugin: [pluginName]\n };\n}\n\nexport function updateConfigContent(content: string, pluginName: string = PLUGIN_NAME): string {\n if (!content.trim()) {\n return JSON.stringify(createConfigWithPlugin(pluginName), null, 2) + \"\\n\";\n }\n\n const parsed = parseJsonc(content, [], { allowTrailingComma: true }) as OpenCodeConfig ?? {};\n\n if (parsed.plugin?.includes(pluginName)) {\n return content;\n }\n\n let result = content;\n\n if (!parsed.$schema) {\n const edits = modify(result, [\"$schema\"], SCHEMA_URL, { formattingOptions: { tabSize: 2, insertSpaces: true } });\n result = applyEdits(result, edits);\n }\n\n const newPlugins = parsed.plugin ? [...parsed.plugin, pluginName] : [pluginName];\n const edits = modify(result, [\"plugin\"], newPlugins, { formattingOptions: { tabSize: 2, insertSpaces: true } });\n result = applyEdits(result, edits);\n\n return result;\n}\n\nexport function removePluginFromContent(content: string, pluginName: string = PLUGIN_NAME): string {\n if (!content.trim()) {\n return content;\n }\n\n const parsed = parseJsonc(content, [], { allowTrailingComma: true }) as OpenCodeConfig ?? {};\n\n if (!parsed.plugin?.includes(pluginName)) {\n return content;\n }\n\n const newPlugins = parsed.plugin.filter((p) => p !== pluginName);\n const edits = modify(content, [\"plugin\"], newPlugins.length > 0 ? newPlugins : undefined, {\n formattingOptions: { tabSize: 2, insertSpaces: true }\n });\n\n return applyEdits(content, edits);\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as crypto from \"crypto\";\n\nexport function writeFileAtomic(\n filePath: string,\n content: string,\n options: { encoding?: BufferEncoding; mode?: number } = {}\n): void {\n const { encoding = \"utf-8\", mode } = options;\n const dir = path.dirname(filePath);\n const hash = crypto.randomBytes(8).toString(\"hex\");\n const tempPath = path.join(dir, `.${path.basename(filePath)}.${process.pid}.${hash}.tmp`);\n\n try {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n const writeOptions: fs.WriteFileOptions = { encoding };\n if (mode !== undefined) {\n writeOptions.mode = mode;\n }\n fs.writeFileSync(tempPath, content, writeOptions);\n fs.renameSync(tempPath, filePath);\n } catch (error) {\n try {\n if (fs.existsSync(tempPath)) {\n fs.unlinkSync(tempPath);\n }\n } catch {\n /* best-effort cleanup */\n }\n throw error;\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport { generateSecureToken } from \"../../utils/crypto\";\nimport { writeFileAtomic } from \"../../utils/fs\";\n\nfunction buildConfigTemplate(token: string): string {\n return `{\n // OpenDevBrowser Plugin Configuration\n // See: https://github.com/anthropics/opendevbrowser#configuration\n\n \"headless\": false,\n \"profile\": \"default\",\n \"persistProfile\": true,\n\n \"snapshot\": {\n \"maxChars\": 16000,\n \"maxNodes\": 1000\n },\n\n \"export\": {\n \"maxNodes\": 1000,\n \"inlineStyles\": true\n },\n\n \"devtools\": {\n \"showFullUrls\": false,\n \"showFullConsole\": false\n },\n\n \"security\": {\n \"allowRawCDP\": false,\n \"allowNonLocalCdp\": false,\n \"allowUnsafeExport\": false\n },\n\n \"skillPaths\": [],\n \"skills\": {\n \"nudge\": {\n \"enabled\": true,\n \"keywords\": [\"login\", \"form\", \"extract\"],\n \"maxAgeMs\": 60000\n }\n },\n\n \"continuity\": {\n \"enabled\": true,\n \"filePath\": \"opendevbrowser_continuity.md\",\n \"nudge\": {\n \"enabled\": true,\n \"keywords\": [\n \"plan\",\n \"multi-step\",\n \"multi step\",\n \"long-running\",\n \"long running\",\n \"refactor\",\n \"migration\",\n \"rollout\",\n \"release\",\n \"upgrade\",\n \"investigate\",\n \"follow-up\",\n \"continue\"\n ],\n \"maxAgeMs\": 60000\n }\n },\n\n \"relayPort\": 8787,\n \"relayToken\": \"${token}\",\n\n \"flags\": [],\n\n \"checkForUpdates\": false\n}\n`;\n}\n\nexport function getPluginConfigPath(mode: \"global\" | \"local\"): string {\n if (mode === \"global\") {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, \"opendevbrowser.jsonc\");\n }\n return path.join(process.cwd(), \"opendevbrowser.jsonc\");\n}\n\nexport function createPluginConfig(mode: \"global\" | \"local\"): { created: boolean; path: string } {\n const configPath = getPluginConfigPath(mode);\n\n if (fs.existsSync(configPath)) {\n return { created: false, path: configPath };\n }\n\n const dir = path.dirname(configPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n const token = generateSecureToken();\n writeFileAtomic(configPath, buildConfigTemplate(token));\n return { created: true, path: configPath };\n}\n\nexport function getConfigTemplate(): string {\n return buildConfigTemplate(generateSecureToken());\n}\n","import * as fs from \"fs\";\nimport {\n getLocalConfigPath,\n readConfig,\n hasPlugin,\n updateConfigContent\n} from \"../utils/config\";\nimport { createPluginConfig } from \"../templates/config\";\n\nexport interface InstallResult {\n success: boolean;\n message: string;\n configPath: string;\n created: boolean;\n alreadyInstalled: boolean;\n}\n\nexport function installLocal(withConfig: boolean = false): InstallResult {\n const configPath = getLocalConfigPath();\n\n try {\n const { content, config } = readConfig(configPath);\n\n if (hasPlugin(config)) {\n return {\n success: true,\n message: `opendevbrowser is already installed in ${configPath}`,\n configPath,\n created: false,\n alreadyInstalled: true\n };\n }\n\n const newContent = updateConfigContent(content, \"opendevbrowser\");\n\n fs.writeFileSync(configPath, newContent, \"utf-8\");\n\n if (withConfig) {\n createPluginConfig(\"local\");\n }\n\n return {\n success: true,\n message: `Added opendevbrowser to ${configPath}`,\n configPath,\n created: content.trim() === \"\",\n alreadyInstalled: false\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to install locally: ${message}`,\n configPath,\n created: false,\n alreadyInstalled: false\n };\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { ensureDir } from \"../utils/config\";\nimport { getBundledSkillsDir, getGlobalSkillDir, getLocalSkillDir } from \"../utils/skills\";\n\nexport type SkillInstallMode = \"global\" | \"local\";\n\nexport interface SkillInstallResult {\n success: boolean;\n message: string;\n targetDir: string;\n installed: string[];\n skipped: string[];\n}\n\nexport function installSkills(mode: SkillInstallMode): SkillInstallResult {\n const targetDir = mode === \"global\" ? getGlobalSkillDir() : getLocalSkillDir();\n const installed: string[] = [];\n const skipped: string[] = [];\n\n try {\n const sourceDir = getBundledSkillsDir();\n const entries = fs.readdirSync(sourceDir, { withFileTypes: true });\n\n ensureDir(targetDir);\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const skillName = entry.name;\n const sourcePath = path.join(sourceDir, skillName);\n const targetPath = path.join(targetDir, skillName);\n\n if (fs.existsSync(targetPath)) {\n skipped.push(skillName);\n continue;\n }\n\n fs.cpSync(sourcePath, targetPath, { recursive: true });\n installed.push(skillName);\n }\n\n const summary = `Skills ${mode} install: ${installed.length} installed${skipped.length ? `, ${skipped.length} skipped` : \"\"} (${targetDir})`;\n return {\n success: true,\n message: summary,\n targetDir,\n installed,\n skipped\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to install skills (${mode}): ${message}`,\n targetDir,\n installed,\n skipped\n };\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport { fileURLToPath } from \"url\";\n\nconst PACKAGE_NAME = \"opendevbrowser\";\nconst SKILL_DIR_NAME = \"skill\";\n\nlet cachedPackageRoot: string | null = null;\n\nfunction findPackageRoot(startDir: string): string {\n let current = startDir;\n\n while (true) {\n const pkgPath = path.join(current, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n try {\n const parsed = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\")) as { name?: string };\n if (parsed.name === PACKAGE_NAME) {\n return current;\n }\n } catch {\n void 0;\n }\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n\n throw new Error(\"Unable to locate opendevbrowser package root for skill installation.\");\n}\n\nexport function getPackageRoot(): string {\n if (cachedPackageRoot) return cachedPackageRoot;\n const moduleDir = path.dirname(fileURLToPath(import.meta.url));\n cachedPackageRoot = findPackageRoot(moduleDir);\n return cachedPackageRoot;\n}\n\nexport function getBundledSkillsDir(): string {\n const skillsDir = path.join(getPackageRoot(), \"skills\");\n if (!fs.existsSync(skillsDir)) {\n throw new Error(`Bundled skills directory not found at ${skillsDir}`);\n }\n return skillsDir;\n}\n\nexport function getGlobalSkillDir(): string {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, SKILL_DIR_NAME);\n}\n\nexport function getLocalSkillDir(): string {\n return path.join(process.cwd(), \".opencode\", SKILL_DIR_NAME);\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\n\nconst PLUGIN_NAME = \"opendevbrowser\";\n\nexport interface UpdateResult {\n success: boolean;\n message: string;\n cleared: boolean;\n}\n\nfunction getCacheDir(): string {\n return process.env.OPENCODE_CACHE_DIR\n || path.join(os.homedir(), \".cache\", \"opencode\");\n}\n\nfunction rmdir(dirPath: string): void {\n const cacheDir = getCacheDir();\n const resolvedCache = path.resolve(cacheDir);\n const resolvedPath = path.resolve(dirPath);\n\n if (!resolvedPath.startsWith(resolvedCache + path.sep) || resolvedPath === resolvedCache) {\n throw new Error(`Security: refusing to delete path outside cache directory: ${dirPath}`);\n }\n\n if (fs.existsSync(dirPath)) {\n fs.rmSync(dirPath, { recursive: true, force: true });\n }\n}\n\nexport function runUpdate(): UpdateResult {\n const cacheDir = getCacheDir();\n const nodeModulesDir = path.join(cacheDir, \"node_modules\");\n const pluginCacheDir = path.join(nodeModulesDir, PLUGIN_NAME);\n\n try {\n if (!fs.existsSync(pluginCacheDir)) {\n if (fs.existsSync(nodeModulesDir)) {\n rmdir(nodeModulesDir);\n return {\n success: true,\n message: \"Cleared OpenCode plugin cache. The latest version will be installed on next run.\",\n cleared: true\n };\n }\n\n return {\n success: true,\n message: \"No cached plugin found. OpenCode will install the latest version on next run.\",\n cleared: false\n };\n }\n\n rmdir(pluginCacheDir);\n\n return {\n success: true,\n message: \"Cache cleared. OpenCode will install the latest version on next run.\",\n cleared: true\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to clear cache: ${message}`,\n cleared: false\n };\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport {\n getGlobalConfigPath,\n getLocalConfigPath,\n readConfig,\n hasPlugin,\n removePluginFromContent\n} from \"../utils/config\";\nimport type { InstallMode } from \"../args\";\n\nexport interface UninstallResult {\n success: boolean;\n message: string;\n configPath?: string;\n removed: boolean;\n configFileDeleted: boolean;\n}\n\nfunction getPluginConfigPath(mode: InstallMode): string {\n if (mode === \"global\") {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, \"opendevbrowser.jsonc\");\n }\n return path.join(process.cwd(), \"opendevbrowser.jsonc\");\n}\n\nfunction removePluginConfigFile(mode: InstallMode): boolean {\n const configPath = getPluginConfigPath(mode);\n if (fs.existsSync(configPath)) {\n fs.unlinkSync(configPath);\n return true;\n }\n return false;\n}\n\nexport function runUninstall(\n mode: InstallMode,\n deleteConfigFile: boolean = false\n): UninstallResult {\n const configPath = mode === \"global\" ? getGlobalConfigPath() : getLocalConfigPath();\n\n try {\n const { content, config } = readConfig(configPath);\n\n if (!hasPlugin(config)) {\n return {\n success: true,\n message: `opendevbrowser is not installed in ${configPath}`,\n configPath,\n removed: false,\n configFileDeleted: false\n };\n }\n\n const newContent = removePluginFromContent(content, \"opendevbrowser\");\n\n fs.writeFileSync(configPath, newContent, \"utf-8\");\n\n let configFileDeleted = false;\n if (deleteConfigFile) {\n configFileDeleted = removePluginConfigFile(mode);\n }\n\n return {\n success: true,\n message: `Removed opendevbrowser from ${configPath}`,\n configPath,\n removed: true,\n configFileDeleted\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to uninstall: ${message}`,\n configPath,\n removed: false,\n configFileDeleted: false\n };\n }\n}\n\nexport function findInstalledConfigs(): { global: boolean; local: boolean } {\n let global = false;\n let local = false;\n\n try {\n const { config: globalConfig } = readConfig(getGlobalConfigPath());\n global = hasPlugin(globalConfig);\n } catch {\n void 0;\n }\n\n try {\n const { config: localConfig } = readConfig(getLocalConfigPath());\n local = hasPlugin(localConfig);\n } catch {\n void 0;\n }\n\n return { global, local };\n}\n","import { createServer, type IncomingMessage, type ServerResponse } from \"http\";\nimport { timingSafeEqual } from \"crypto\";\nimport { mkdirSync, readFileSync, writeFileSync, unlinkSync, existsSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nimport { generateSecureToken } from \"../utils/crypto\";\nimport { createOpenDevBrowserCore } from \"../core\";\nimport { loadGlobalConfig, type OpenDevBrowserConfig } from \"../config\";\nimport { handleDaemonCommand } from \"./daemon-commands\";\n\nconst DEFAULT_DAEMON_PORT = 8788;\n\nexport type DaemonState = {\n port: number;\n token: string;\n pid: number;\n relayPort: number;\n startedAt: string;\n};\n\ntype DaemonOptions = {\n port?: number;\n token?: string;\n config?: OpenDevBrowserConfig;\n directory?: string;\n worktree?: string | null;\n};\n\nfunction getCacheRoot(): string {\n const base = process.env.OPENCODE_CACHE_DIR\n ?? process.env.XDG_CACHE_HOME\n ?? join(homedir(), \".cache\");\n return join(base, \"opendevbrowser\");\n}\n\nexport function getDaemonMetadataPath(): string {\n return join(getCacheRoot(), \"daemon.json\");\n}\n\nexport function readDaemonMetadata(): DaemonState | null {\n const metadataPath = getDaemonMetadataPath();\n if (!existsSync(metadataPath)) {\n return null;\n }\n try {\n const content = readFileSync(metadataPath, \"utf-8\");\n return JSON.parse(content) as DaemonState;\n } catch {\n return null;\n }\n}\n\nexport function writeDaemonMetadata(state: DaemonState): void {\n const metadataPath = getDaemonMetadataPath();\n mkdirSync(join(getCacheRoot()), { recursive: true });\n writeFileSync(metadataPath, JSON.stringify(state, null, 2), { encoding: \"utf-8\", mode: 0o600 });\n}\n\nexport function clearDaemonMetadata(): void {\n const metadataPath = getDaemonMetadataPath();\n try {\n unlinkSync(metadataPath);\n } catch {\n void 0;\n }\n}\n\nfunction isAuthorized(request: IncomingMessage, token: string): boolean {\n const header = request.headers.authorization ?? \"\";\n if (!header.startsWith(\"Bearer \")) {\n return false;\n }\n const received = header.slice(\"Bearer \".length).trim();\n const expectedBuf = Buffer.from(token, \"utf-8\");\n const receivedBuf = Buffer.from(received, \"utf-8\");\n\n if (expectedBuf.length !== receivedBuf.length) {\n timingSafeEqual(expectedBuf, expectedBuf);\n return false;\n }\n return timingSafeEqual(expectedBuf, receivedBuf);\n}\n\nfunction sendJson(response: ServerResponse, status: number, payload: unknown): void {\n response.writeHead(status, {\n \"Content-Type\": \"application/json\",\n \"Cache-Control\": \"no-store\"\n });\n response.end(JSON.stringify(payload));\n}\n\nexport async function startDaemon(options: DaemonOptions = {}): Promise<{ state: DaemonState; stop: () => Promise<void> }> {\n const config = options.config ?? loadGlobalConfig();\n const port = options.port ?? DEFAULT_DAEMON_PORT;\n const token = options.token ?? generateSecureToken();\n const core = createOpenDevBrowserCore({\n directory: options.directory ?? process.cwd(),\n worktree: options.worktree ?? null,\n config\n });\n\n await core.ensureRelay(config.relayPort);\n\n const server = createServer(async (request, response) => {\n if (!isAuthorized(request, token)) {\n sendJson(response, 401, { error: \"Unauthorized\" });\n return;\n }\n\n const url = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n\n if (request.method === \"GET\" && url.pathname === \"/status\") {\n sendJson(response, 200, {\n ok: true,\n pid: process.pid,\n relay: core.relay.status()\n });\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/stop\") {\n sendJson(response, 200, { ok: true });\n await stop();\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/command\") {\n try {\n const body = await readJson(request);\n const data = await handleDaemonCommand(core, body);\n sendJson(response, 200, { ok: true, data });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendJson(response, 400, { ok: false, error: message });\n }\n return;\n }\n\n sendJson(response, 404, { error: \"Not found\" });\n });\n\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(port, \"127.0.0.1\", () => resolve());\n });\n\n const state: DaemonState = {\n port,\n token,\n pid: process.pid,\n relayPort: config.relayPort,\n startedAt: new Date().toISOString()\n };\n writeDaemonMetadata(state);\n\n const stop = async () => {\n clearDaemonMetadata();\n core.cleanup();\n await new Promise<void>((resolve) => {\n server.close(() => resolve());\n });\n };\n\n process.on(\"SIGINT\", () => {\n stop().catch(() => {});\n });\n process.on(\"SIGTERM\", () => {\n stop().catch(() => {});\n });\n\n return { state, stop };\n}\n\nfunction readJson(request: IncomingMessage): Promise<Record<string, unknown>> {\n return new Promise((resolve, reject) => {\n let data = \"\";\n request.setEncoding(\"utf8\");\n request.on(\"data\", (chunk) => {\n data += chunk;\n });\n request.on(\"end\", () => {\n try {\n const parsed = JSON.parse(data || \"{}\");\n if (!parsed || typeof parsed !== \"object\") {\n reject(new Error(\"Invalid JSON body\"));\n return;\n }\n resolve(parsed as Record<string, unknown>);\n } catch (error) {\n reject(error);\n }\n });\n request.on(\"error\", reject);\n });\n}\n","import type { OpenDevBrowserCore } from \"../core\";\n\nexport type DaemonCommandRequest = {\n name: string;\n params?: Record<string, unknown>;\n};\n\nexport async function handleDaemonCommand(core: OpenDevBrowserCore, request: DaemonCommandRequest): Promise<unknown> {\n const params = request.params ?? {};\n\n switch (request.name) {\n case \"session.launch\":\n return launchWithRelay(core, params);\n case \"session.connect\":\n return core.manager.connect({\n wsEndpoint: optionalString(params.wsEndpoint),\n host: optionalString(params.host),\n port: optionalNumber(params.port)\n });\n case \"session.disconnect\":\n await core.manager.disconnect(requireString(params.sessionId, \"sessionId\"), optionalBoolean(params.closeBrowser) ?? false);\n return { ok: true };\n case \"session.status\":\n return core.manager.status(requireString(params.sessionId, \"sessionId\"));\n case \"nav.goto\":\n return core.manager.goto(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.url, \"url\"),\n requireWaitUntil(params.waitUntil),\n optionalNumber(params.timeoutMs) ?? 30000\n );\n case \"nav.wait\":\n if (typeof params.ref === \"string\") {\n return core.manager.waitForRef(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n requireState(params.state),\n optionalNumber(params.timeoutMs) ?? 30000\n );\n }\n return core.manager.waitForLoad(\n requireString(params.sessionId, \"sessionId\"),\n requireWaitUntil(params.until),\n optionalNumber(params.timeoutMs) ?? 30000\n );\n case \"nav.snapshot\":\n return core.manager.snapshot(\n requireString(params.sessionId, \"sessionId\"),\n requireSnapshotMode(params.mode),\n optionalNumber(params.maxChars) ?? 16000,\n optionalString(params.cursor)\n );\n case \"interact.click\":\n return core.manager.click(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\")\n );\n case \"interact.type\":\n return core.manager.type(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n requireString(params.text, \"text\"),\n optionalBoolean(params.clear) ?? false,\n optionalBoolean(params.submit) ?? false\n );\n case \"interact.select\":\n return core.manager.select(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n requireStringArray(params.values, \"values\")\n );\n case \"interact.scroll\":\n return core.manager.scroll(\n requireString(params.sessionId, \"sessionId\"),\n optionalNumber(params.dy) ?? 0,\n optionalString(params.ref)\n );\n default:\n throw new Error(`Unknown daemon command: ${request.name}`);\n }\n}\n\nasync function launchWithRelay(core: OpenDevBrowserCore, params: Record<string, unknown>) {\n let relayStatus = core.relay.status();\n const relayUrl = core.relay.getCdpUrl();\n const noExtension = optionalBoolean(params.noExtension) ?? false;\n const extensionOnly = optionalBoolean(params.extensionOnly) ?? false;\n const waitForExtension = optionalBoolean(params.waitForExtension) ?? false;\n const waitTimeoutMs = optionalNumber(params.waitTimeoutMs) ?? 30000;\n\n if (waitForExtension) {\n const connected = await waitForRelay(core.relay, waitTimeoutMs);\n if (connected) {\n relayStatus = core.relay.status();\n }\n }\n\n const useRelay = Boolean(!noExtension && relayStatus.extensionConnected && relayUrl);\n let relayWarning: string | null = null;\n\n if (extensionOnly && !useRelay) {\n throw new Error(\"Extension not connected; use --no-extension to launch a new browser.\");\n }\n\n if (useRelay && relayUrl) {\n try {\n const result = await core.manager.connectRelay(relayUrl);\n return { ...result, warnings: result.warnings ?? [] };\n } catch (error) {\n if (extensionOnly) {\n throw error instanceof Error ? error : new Error(\"Extension relay connection failed.\");\n }\n relayWarning = \"Relay connection failed; falling back to managed Chrome.\";\n }\n }\n\n if (relayUrl && !noExtension) {\n relayWarning ??= \"Extension not connected; launching managed Chrome instead.\";\n }\n\n const result = await core.manager.launch({\n profile: optionalString(params.profile),\n headless: optionalBoolean(params.headless),\n startUrl: optionalString(params.startUrl),\n chromePath: optionalString(params.chromePath),\n flags: optionalStringArray(params.flags),\n persistProfile: optionalBoolean(params.persistProfile)\n });\n\n const warnings = [\n ...(result.warnings ?? []),\n ...(relayWarning ? [relayWarning] : [])\n ];\n return { ...result, warnings };\n}\n\nfunction requireString(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !value.trim()) {\n throw new Error(`Missing ${label}`);\n }\n return value;\n}\n\nfunction requireStringArray(value: unknown, label: string): string[] {\n if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n throw new Error(`Invalid ${label}`);\n }\n return value as string[];\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction optionalStringArray(value: unknown): string[] | undefined {\n return Array.isArray(value) && value.every((item) => typeof item === \"string\")\n ? value as string[]\n : undefined;\n}\n\nfunction optionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction optionalBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction requireWaitUntil(value: unknown): \"domcontentloaded\" | \"load\" | \"networkidle\" {\n if (value === \"domcontentloaded\" || value === \"load\" || value === \"networkidle\") {\n return value;\n }\n return \"load\";\n}\n\nfunction requireSnapshotMode(value: unknown): \"outline\" | \"actionables\" {\n if (value === \"actionables\") return \"actionables\";\n return \"outline\";\n}\n\nfunction requireState(value: unknown): \"attached\" | \"visible\" | \"hidden\" {\n if (value === \"visible\" || value === \"hidden\") return value;\n return \"attached\";\n}\n\nasync function waitForRelay(relay: { status: () => { extensionConnected: boolean } }, timeoutMs: number): Promise<boolean> {\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n if (relay.status().extensionConnected) {\n return true;\n }\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n return false;\n}\n","import type { ParsedArgs } from \"../args\";\nimport { startDaemon, readDaemonMetadata } from \"../daemon\";\nimport { createUsageError, EXIT_DISCONNECTED, EXIT_EXECUTION } from \"../errors\";\n\ntype ServeArgs = {\n port?: number;\n token?: string;\n stop: boolean;\n};\n\nfunction parseServeArgs(rawArgs: string[]): ServeArgs {\n const parsed: ServeArgs = { stop: false };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--stop\") {\n parsed.stop = true;\n continue;\n }\n if (arg === \"--port\") {\n const value = rawArgs[i + 1];\n if (!value) {\n throw createUsageError(\"Missing value for --port\");\n }\n parsed.port = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--port=\")) {\n parsed.port = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n if (arg === \"--token\") {\n const value = rawArgs[i + 1];\n if (!value) {\n throw createUsageError(\"Missing value for --token\");\n }\n parsed.token = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--token=\")) {\n parsed.token = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runServe(args: ParsedArgs) {\n const serveArgs = parseServeArgs(args.rawArgs);\n\n if (serveArgs.stop) {\n const metadata = readDaemonMetadata();\n if (!metadata) {\n return { success: false, message: \"Daemon not running.\", exitCode: EXIT_DISCONNECTED };\n }\n\n try {\n const response = await fetch(`http://127.0.0.1:${metadata.port}/stop`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${metadata.token}` }\n });\n if (!response.ok) {\n throw new Error(`Stop failed (${response.status})`);\n }\n return { success: true, message: \"Daemon stopped.\" };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, message: `Failed to stop daemon: ${message}`, exitCode: EXIT_EXECUTION };\n }\n }\n\n const { state } = await startDaemon({\n port: serveArgs.port,\n token: serveArgs.token\n });\n\n return {\n success: true,\n message: `Daemon running on 127.0.0.1:${state.port}`,\n data: { port: state.port, pid: state.pid, relayPort: state.relayPort },\n exitCode: null\n };\n}\n","import { readFileSync } from \"fs\";\nimport { createOpenDevBrowserCore } from \"../../core\";\nimport type { ParsedArgs } from \"../args\";\nimport { writeOutput } from \"../output\";\nimport { createUsageError, EXIT_USAGE } from \"../errors\";\n\ntype RunArgs = {\n scriptPath?: string;\n headless?: boolean;\n profile?: string;\n persistProfile?: boolean;\n chromePath?: string;\n startUrl?: string;\n flags: string[];\n};\n\nfunction parseRunArgs(rawArgs: string[]): RunArgs {\n const parsed: RunArgs = { flags: [] };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--script\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --script\");\n parsed.scriptPath = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--script=\")) {\n parsed.scriptPath = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--headless\") {\n parsed.headless = true;\n continue;\n }\n if (arg === \"--profile\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --profile\");\n parsed.profile = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--profile=\")) {\n parsed.profile = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--persist-profile\") {\n parsed.persistProfile = true;\n continue;\n }\n if (arg === \"--chrome-path\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --chrome-path\");\n parsed.chromePath = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--chrome-path=\")) {\n parsed.chromePath = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--start-url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --start-url\");\n parsed.startUrl = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--start-url=\")) {\n parsed.startUrl = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--flag\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --flag\");\n parsed.flags.push(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--flag=\")) {\n parsed.flags.push(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nfunction readScriptFromStdin(): Promise<string> {\n return new Promise((resolve, reject) => {\n let data = \"\";\n process.stdin.setEncoding(\"utf8\");\n process.stdin.on(\"data\", (chunk) => {\n data += chunk;\n });\n process.stdin.on(\"end\", () => resolve(data));\n process.stdin.on(\"error\", reject);\n });\n}\n\nexport async function runScriptCommand(args: ParsedArgs) {\n const runArgs = parseRunArgs(args.rawArgs);\n const outputOptions = { format: args.outputFormat, quiet: args.quiet };\n\n let scriptRaw = \"\";\n if (runArgs.scriptPath) {\n scriptRaw = readFileSync(runArgs.scriptPath, \"utf-8\");\n } else if (!process.stdin.isTTY) {\n scriptRaw = await readScriptFromStdin();\n } else {\n throw createUsageError(\"Provide --script <path> or pipe JSON to stdin.\");\n }\n\n let steps: Array<{ action: string; args?: Record<string, unknown> }> = [];\n try {\n const parsed = JSON.parse(scriptRaw);\n if (Array.isArray(parsed)) {\n steps = parsed;\n } else if (parsed && typeof parsed === \"object\" && Array.isArray(parsed.steps)) {\n steps = parsed.steps;\n } else {\n throw new Error(\"Script must be a JSON array or an object with steps.\");\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON script.\";\n writeOutput({ success: false, error: message, exitCode: EXIT_USAGE }, outputOptions);\n return { success: false, message, exitCode: EXIT_USAGE, data: { suppressOutput: true } };\n }\n\n const core = createOpenDevBrowserCore({ directory: process.cwd() });\n const launchResult = await core.manager.launch({\n profile: runArgs.profile,\n headless: runArgs.headless,\n startUrl: runArgs.startUrl,\n chromePath: runArgs.chromePath,\n flags: runArgs.flags.length ? runArgs.flags : undefined,\n persistProfile: runArgs.persistProfile\n });\n\n try {\n const result = await core.runner.run(launchResult.sessionId, steps, true);\n writeOutput({\n success: true,\n sessionId: launchResult.sessionId,\n warnings: launchResult.warnings.length ? launchResult.warnings : undefined,\n ...result\n }, outputOptions);\n return { success: true, data: { suppressOutput: true } };\n } finally {\n await core.manager.disconnect(launchResult.sessionId, true);\n core.cleanup();\n }\n}\n","import type { OutputFormat } from \"./args\";\n\nexport type OutputOptions = {\n format: OutputFormat;\n quiet?: boolean;\n};\n\nexport function writeOutput(payload: unknown, options: OutputOptions): void {\n if (options.quiet) {\n return;\n }\n\n if (options.format === \"text\") {\n if (typeof payload === \"string\") {\n console.log(payload);\n } else {\n console.log(JSON.stringify(payload, null, 2));\n }\n return;\n }\n\n if (options.format === \"stream-json\") {\n if (Array.isArray(payload)) {\n for (const entry of payload) {\n console.log(JSON.stringify(entry));\n }\n return;\n }\n }\n\n console.log(JSON.stringify(payload));\n}\n","import { readDaemonMetadata } from \"./daemon\";\nimport { CliError, createDisconnectedError, EXIT_EXECUTION } from \"./errors\";\n\nexport async function callDaemon(command: string, params?: Record<string, unknown>): Promise<unknown> {\n const metadata = readDaemonMetadata();\n if (!metadata) {\n throw createDisconnectedError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n\n let response: Response;\n try {\n response = await fetch(`http://127.0.0.1:${metadata.port}/command`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${metadata.token}`\n },\n body: JSON.stringify({ name: command, params: params ?? {} })\n });\n } catch {\n throw createDisconnectedError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n\n if (!response.ok) {\n const message = await response.text();\n throw new CliError(`Daemon error: ${message || response.status}`, EXIT_EXECUTION);\n }\n\n const payload = await response.json() as { ok?: boolean; data?: unknown; error?: string };\n if (!payload.ok) {\n throw new CliError(payload.error || \"Daemon command failed.\", EXIT_EXECUTION);\n }\n return payload.data;\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\ntype LaunchArgs = {\n profile?: string;\n headless?: boolean;\n startUrl?: string;\n chromePath?: string;\n flags: string[];\n persistProfile?: boolean;\n noExtension?: boolean;\n extensionOnly?: boolean;\n waitForExtension?: boolean;\n waitTimeoutMs?: number;\n};\n\nfunction parseLaunchArgs(rawArgs: string[]): LaunchArgs {\n const parsed: LaunchArgs = { flags: [] };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--headless\") {\n parsed.headless = true;\n continue;\n }\n if (arg === \"--profile\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --profile\");\n parsed.profile = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--profile=\")) {\n parsed.profile = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--start-url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --start-url\");\n parsed.startUrl = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--start-url=\")) {\n parsed.startUrl = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--chrome-path\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --chrome-path\");\n parsed.chromePath = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--chrome-path=\")) {\n parsed.chromePath = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--persist-profile\") {\n parsed.persistProfile = true;\n continue;\n }\n if (arg === \"--no-extension\") {\n parsed.noExtension = true;\n continue;\n }\n if (arg === \"--extension-only\") {\n parsed.extensionOnly = true;\n continue;\n }\n if (arg === \"--wait-for-extension\") {\n parsed.waitForExtension = true;\n continue;\n }\n if (arg === \"--wait-timeout-ms\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --wait-timeout-ms\");\n parsed.waitTimeoutMs = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--wait-timeout-ms=\")) {\n parsed.waitTimeoutMs = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n if (arg === \"--flag\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --flag\");\n parsed.flags.push(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--flag=\")) {\n parsed.flags.push(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionLaunch(args: ParsedArgs) {\n const launchArgs = parseLaunchArgs(args.rawArgs);\n const result = await callDaemon(\"session.launch\", launchArgs) as { sessionId: string };\n return {\n success: true,\n message: `Session launched: ${result.sessionId}`,\n data: result\n };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\ntype ConnectArgs = {\n wsEndpoint?: string;\n host?: string;\n port?: number;\n};\n\nfunction parseConnectArgs(rawArgs: string[]): ConnectArgs {\n const parsed: ConnectArgs = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--ws-endpoint\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ws-endpoint\");\n parsed.wsEndpoint = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ws-endpoint=\")) {\n parsed.wsEndpoint = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--host\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --host\");\n parsed.host = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--host=\")) {\n parsed.host = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--cdp-port\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --cdp-port\");\n parsed.port = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--cdp-port=\")) {\n parsed.port = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionConnect(args: ParsedArgs) {\n const connectArgs = parseConnectArgs(args.rawArgs);\n const result = await callDaemon(\"session.connect\", connectArgs) as { sessionId: string };\n return {\n success: true,\n message: `Session connected: ${result.sessionId}`,\n data: result\n };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDisconnectArgs(rawArgs: string[]): { sessionId?: string; closeBrowser?: boolean } {\n const parsed: { sessionId?: string; closeBrowser?: boolean } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--close-browser\") {\n parsed.closeBrowser = true;\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionDisconnect(args: ParsedArgs) {\n const { sessionId, closeBrowser } = parseDisconnectArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n await callDaemon(\"session.disconnect\", { sessionId, closeBrowser });\n return { success: true, message: `Session disconnected: ${sessionId}` };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseStatusArgs(rawArgs: string[]): { sessionId?: string } {\n const parsed: { sessionId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionStatus(args: ParsedArgs) {\n const { sessionId } = parseStatusArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n const result = await callDaemon(\"session.status\", { sessionId });\n return { success: true, message: `Session status: ${sessionId}`, data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseGotoArgs(rawArgs: string[]): { sessionId?: string; url?: string; waitUntil?: string; timeoutMs?: number } {\n const parsed: { sessionId?: string; url?: string; waitUntil?: string; timeoutMs?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --url\");\n parsed.url = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--url=\")) {\n parsed.url = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--wait-until\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --wait-until\");\n parsed.waitUntil = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--wait-until=\")) {\n parsed.waitUntil = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--timeout-ms\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --timeout-ms\");\n parsed.timeoutMs = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runGoto(args: ParsedArgs) {\n const { sessionId, url, waitUntil, timeoutMs } = parseGotoArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!url) throw createUsageError(\"Missing --url\");\n const result = await callDaemon(\"nav.goto\", { sessionId, url, waitUntil, timeoutMs });\n return { success: true, message: `Navigated: ${url}`, data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseWaitArgs(rawArgs: string[]): { sessionId?: string; ref?: string; state?: string; until?: string; timeoutMs?: number } {\n const parsed: { sessionId?: string; ref?: string; state?: string; until?: string; timeoutMs?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--state\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --state\");\n parsed.state = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--state=\")) {\n parsed.state = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--until\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --until\");\n parsed.until = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--until=\")) {\n parsed.until = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--timeout-ms\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --timeout-ms\");\n parsed.timeoutMs = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runWait(args: ParsedArgs) {\n const { sessionId, ref, state, until, timeoutMs } = parseWaitArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"nav.wait\", { sessionId, ref, state, until, timeoutMs });\n return { success: true, message: \"Wait complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseSnapshotArgs(rawArgs: string[]): { sessionId?: string; mode?: string; maxChars?: number; cursor?: string } {\n const parsed: { sessionId?: string; mode?: string; maxChars?: number; cursor?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--mode\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --mode\");\n parsed.mode = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--mode=\")) {\n parsed.mode = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--max-chars\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --max-chars\");\n parsed.maxChars = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--max-chars=\")) {\n parsed.maxChars = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n if (arg === \"--cursor\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --cursor\");\n parsed.cursor = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--cursor=\")) {\n parsed.cursor = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSnapshot(args: ParsedArgs) {\n const { sessionId, mode, maxChars, cursor } = parseSnapshotArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"nav.snapshot\", { sessionId, mode, maxChars, cursor });\n return { success: true, message: \"Snapshot captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseClickArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runClick(args: ParsedArgs) {\n const { sessionId, ref } = parseClickArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.click\", { sessionId, ref });\n return { success: true, message: \"Click complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseTypeArgs(rawArgs: string[]): { sessionId?: string; ref?: string; text?: string; clear?: boolean; submit?: boolean } {\n const parsed: { sessionId?: string; ref?: string; text?: string; clear?: boolean; submit?: boolean } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--text\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --text\");\n parsed.text = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--text=\")) {\n parsed.text = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--clear\") {\n parsed.clear = true;\n continue;\n }\n if (arg === \"--submit\") {\n parsed.submit = true;\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runType(args: ParsedArgs) {\n const { sessionId, ref, text, clear, submit } = parseTypeArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n if (!text) throw createUsageError(\"Missing --text\");\n const result = await callDaemon(\"interact.type\", { sessionId, ref, text, clear, submit });\n return { success: true, message: \"Type complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseSelectArgs(rawArgs: string[]): { sessionId?: string; ref?: string; values?: string[] } {\n const parsed: { sessionId?: string; ref?: string; values?: string[] } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--values\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --values\");\n parsed.values = value.split(\",\").map((entry) => entry.trim()).filter(Boolean);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--values=\")) {\n parsed.values = arg.split(\"=\", 2)[1].split(\",\").map((entry) => entry.trim()).filter(Boolean);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSelect(args: ParsedArgs) {\n const { sessionId, ref, values } = parseSelectArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n if (!values || values.length === 0) throw createUsageError(\"Missing --values\");\n const result = await callDaemon(\"interact.select\", { sessionId, ref, values });\n return { success: true, message: \"Select complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseScrollArgs(rawArgs: string[]): { sessionId?: string; ref?: string; dy?: number } {\n const parsed: { sessionId?: string; ref?: string; dy?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--dy\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --dy\");\n parsed.dy = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--dy=\")) {\n parsed.dy = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runScroll(args: ParsedArgs) {\n const { sessionId, ref, dy } = parseScrollArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (typeof dy !== \"number\" || Number.isNaN(dy)) throw createUsageError(\"Missing --dy\");\n const result = await callDaemon(\"interact.scroll\", { sessionId, ref, dy });\n return { success: true, message: \"Scroll complete.\", data: result };\n}\n","#!/usr/bin/env node\n\nimport { parseArgs, getHelpText, detectOutputFormat } from \"./args\";\nimport type { OutputFormat } from \"./args\";\nimport { registerCommand, getCommand } from \"./commands/registry\";\nimport type { CommandResult } from \"./commands/types\";\nimport { installGlobal } from \"./installers/global\";\nimport { installLocal } from \"./installers/local\";\nimport { installSkills } from \"./installers/skills\";\nimport { runUpdate } from \"./commands/update\";\nimport { runUninstall, findInstalledConfigs } from \"./commands/uninstall\";\nimport { runServe } from \"./commands/serve\";\nimport { runScriptCommand } from \"./commands/run\";\nimport { runSessionLaunch } from \"./commands/session/launch\";\nimport { runSessionConnect } from \"./commands/session/connect\";\nimport { runSessionDisconnect } from \"./commands/session/disconnect\";\nimport { runSessionStatus } from \"./commands/session/status\";\nimport { runGoto } from \"./commands/nav/goto\";\nimport { runWait } from \"./commands/nav/wait\";\nimport { runSnapshot } from \"./commands/nav/snapshot\";\nimport { runClick } from \"./commands/interact/click\";\nimport { runType } from \"./commands/interact/type\";\nimport { runSelect } from \"./commands/interact/select\";\nimport { runScroll } from \"./commands/interact/scroll\";\nimport { extractExtension } from \"../extension-extractor\";\nimport { writeOutput } from \"./output\";\nimport type { InstallMode } from \"./args\";\nimport { formatErrorPayload, resolveExitCode, toCliError, EXIT_EXECUTION, EXIT_USAGE } from \"./errors\";\nimport type { CliError } from \"./errors\";\n\nconst VERSION = \"0.1.0\";\n\nasync function promptInstallMode(): Promise<InstallMode> {\n if (!process.stdin.isTTY) {\n console.log(\"Non-interactive mode detected. Using global install.\");\n return \"global\";\n }\n\n return new Promise((resolve) => {\n console.log(\"\\nWhere would you like to install opendevbrowser?\\n\");\n console.log(\" 1. Global (~/.config/opencode/opencode.json)\");\n console.log(\" 2. Local (./opencode.json in this project)\\n\");\n\n process.stdout.write(\"Enter choice [1]: \");\n\n process.stdin.setEncoding(\"utf8\");\n let resolved = false;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n process.stdin.once(\"data\", (data) => {\n cleanup();\n if (resolved) return;\n resolved = true;\n const input = data.toString().trim();\n if (input === \"2\") {\n resolve(\"local\");\n } else {\n resolve(\"global\");\n }\n });\n\n process.stdin.once(\"close\", () => {\n cleanup();\n if (resolved) return;\n resolved = true;\n resolve(\"global\");\n });\n\n timeoutId = setTimeout(() => {\n timeoutId = null;\n if (resolved) return;\n resolved = true;\n console.log(\"\\nTimeout - using global install.\");\n resolve(\"global\");\n }, 30000);\n });\n}\n\nasync function promptUninstallMode(): Promise<InstallMode | null> {\n const installed = findInstalledConfigs();\n\n if (!installed.global && !installed.local) {\n console.log(\"opendevbrowser is not installed in any config.\");\n return null;\n }\n\n if (installed.global && !installed.local) {\n return \"global\";\n }\n\n if (!installed.global && installed.local) {\n return \"local\";\n }\n\n if (!process.stdin.isTTY) {\n console.log(\"Plugin found in both global and local configs. Use --global or --local flag.\");\n return null;\n }\n\n return new Promise((resolve) => {\n console.log(\"\\nopendevbrowser is installed in multiple locations:\\n\");\n console.log(\" 1. Global (~/.config/opencode/opencode.json)\");\n console.log(\" 2. Local (./opencode.json)\");\n console.log(\" 3. Cancel\\n\");\n\n process.stdout.write(\"Which to uninstall? [3]: \");\n\n process.stdin.setEncoding(\"utf8\");\n process.stdin.once(\"data\", (data) => {\n const input = data.toString().trim();\n if (input === \"1\") {\n resolve(\"global\");\n } else if (input === \"2\") {\n resolve(\"local\");\n } else {\n resolve(null);\n }\n });\n\n process.stdin.once(\"close\", () => {\n resolve(null);\n });\n });\n}\n\nfunction emitFatalError(error: CliError, outputFormat: OutputFormat): void {\n if (outputFormat === \"text\") {\n console.error(`Error: ${error.message}`);\n if (error.exitCode === EXIT_USAGE) {\n console.error(\"\\nFor help: npx opendevbrowser --help\");\n }\n return;\n }\n\n writeOutput(formatErrorPayload(error), { format: outputFormat });\n}\n\nasync function main(): Promise<void> {\n let outputFormat: OutputFormat | null = null;\n let parseSucceeded = false;\n try {\n const args = parseArgs(process.argv);\n parseSucceeded = true;\n outputFormat = args.outputFormat;\n const outputOptions = { format: args.outputFormat, quiet: args.quiet };\n\n const emitResult = (result: CommandResult, payload?: Record<string, unknown>) => {\n const suppressOutput = Boolean(\n result.data\n && typeof result.data === \"object\"\n && \"suppressOutput\" in result.data\n && (result.data as { suppressOutput?: boolean }).suppressOutput\n );\n if (suppressOutput) {\n return;\n }\n if (args.outputFormat === \"text\") {\n if (result.message) {\n writeOutput(result.message, outputOptions);\n }\n } else {\n const exitCode = resolveExitCode(result);\n writeOutput({\n success: result.success,\n message: result.message,\n ...(result.success || !result.message ? {} : { error: result.message }),\n ...(result.success || exitCode === null ? {} : { exitCode }),\n ...payload\n }, outputOptions);\n }\n };\n\n registerCommand({\n name: \"help\",\n description: \"Show help\",\n run: () => ({ success: true, message: getHelpText() })\n });\n\n registerCommand({\n name: \"version\",\n description: \"Show version\",\n run: () => ({ success: true, message: `opendevbrowser v${VERSION}` })\n });\n\n registerCommand({\n name: \"update\",\n description: \"Clear cached plugin to trigger reinstall\",\n run: () => {\n const result = runUpdate();\n return { success: result.success, message: result.message };\n }\n });\n\n registerCommand({\n name: \"uninstall\",\n description: \"Remove plugin from config\",\n run: async () => {\n let mode = args.mode;\n if (!mode && !args.noPrompt) {\n mode = await promptUninstallMode() ?? undefined;\n if (!mode) {\n return { success: true, message: \"Uninstall cancelled.\" };\n }\n }\n if (!mode) {\n return { success: false, message: \"Error: Please specify --global or --local for uninstall.\", exitCode: EXIT_USAGE };\n }\n const result = runUninstall(mode);\n return { success: result.success, message: result.message };\n }\n });\n\n registerCommand({\n name: \"install\",\n description: \"Install the plugin\",\n run: async () => {\n const log = (...values: unknown[]) => {\n if (args.quiet) return;\n console.log(...values);\n };\n const warn = (...values: unknown[]) => {\n if (args.quiet) return;\n console.warn(...values);\n };\n\n let mode = args.mode;\n if (!mode) {\n mode = await promptInstallMode();\n }\n\n const result = mode === \"global\"\n ? installGlobal(args.withConfig)\n : installLocal(args.withConfig);\n\n if (args.outputFormat !== \"text\") {\n const payload: Record<string, unknown> = {\n alreadyInstalled: result.alreadyInstalled\n };\n\n if (result.success && args.skillsMode !== \"none\") {\n const skillsResult = installSkills(args.skillsMode);\n payload.skills = skillsResult;\n }\n\n if (args.fullInstall && result.success) {\n try {\n const extensionPath = extractExtension();\n payload.extensionPath = extensionPath;\n } catch (error) {\n payload.extensionError = error instanceof Error ? error.message : String(error);\n }\n }\n\n return { success: result.success, message: result.message, data: payload };\n }\n\n log(result.message);\n\n if (args.skillsMode === \"none\") {\n log(\"Skill installation skipped (--no-skills).\");\n } else if (result.success) {\n const skillsResult = installSkills(args.skillsMode);\n if (skillsResult.success) {\n log(skillsResult.message);\n } else {\n warn(skillsResult.message);\n }\n } else {\n warn(\"Skill installation skipped because plugin install failed.\");\n }\n\n if (args.fullInstall && result.success) {\n try {\n const extensionPath = extractExtension();\n if (extensionPath) {\n log(`Extension assets extracted to ${extensionPath}`);\n } else {\n warn(\"Extension assets not found; skipping extraction.\");\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n warn(`Extension pre-extraction failed: ${message}`);\n }\n }\n\n if (result.success && !result.alreadyInstalled) {\n log(\"\\nNext steps:\");\n log(\" 1. Start or restart OpenCode\");\n log(\" 2. Use opendevbrowser_status to verify the plugin is loaded\");\n log(\"\\nFor help: npx opendevbrowser --help\");\n }\n\n return { success: result.success, message: result.message };\n }\n });\n\n registerCommand({\n name: \"serve\",\n description: \"Start or stop the local daemon\",\n run: async () => runServe(args)\n });\n\n registerCommand({\n name: \"run\",\n description: \"Execute a JSON script in a single process\",\n run: async () => runScriptCommand(args)\n });\n\n registerCommand({\n name: \"launch\",\n description: \"Launch a managed browser session via daemon\",\n run: async () => runSessionLaunch(args)\n });\n\n registerCommand({\n name: \"connect\",\n description: \"Connect to an existing browser via daemon\",\n run: async () => runSessionConnect(args)\n });\n\n registerCommand({\n name: \"disconnect\",\n description: \"Disconnect a daemon session\",\n run: async () => runSessionDisconnect(args)\n });\n\n registerCommand({\n name: \"status\",\n description: \"Get daemon session status\",\n run: async () => runSessionStatus(args)\n });\n\n registerCommand({\n name: \"goto\",\n description: \"Navigate current session to a URL\",\n run: async () => runGoto(args)\n });\n\n registerCommand({\n name: \"wait\",\n description: \"Wait for load or a ref to appear\",\n run: async () => runWait(args)\n });\n\n registerCommand({\n name: \"snapshot\",\n description: \"Capture a snapshot of the active page\",\n run: async () => runSnapshot(args)\n });\n\n registerCommand({\n name: \"click\",\n description: \"Click an element by ref\",\n run: async () => runClick(args)\n });\n\n registerCommand({\n name: \"type\",\n description: \"Type into an element by ref\",\n run: async () => runType(args)\n });\n\n registerCommand({\n name: \"select\",\n description: \"Select values in a select by ref\",\n run: async () => runSelect(args)\n });\n\n registerCommand({\n name: \"scroll\",\n description: \"Scroll the page or element by ref\",\n run: async () => runScroll(args)\n });\n const command = getCommand(args.command);\n if (!command) {\n throw new Error(`Unknown command: ${args.command}`);\n }\n\n const result = await command.run(args);\n emitResult(result, result.data ? { data: result.data } : undefined);\n const exitCode = resolveExitCode(result);\n if (exitCode === null) {\n return;\n }\n process.exit(exitCode);\n } catch (error) {\n const format = outputFormat ?? detectOutputFormat(process.argv);\n const cliError = toCliError(error, parseSucceeded ? EXIT_EXECUTION : EXIT_USAGE);\n emitFatalError(cliError, format);\n process.exit(cliError.exitCode);\n }\n}\n\nmain().catch((error: unknown) => {\n const cliError = toCliError(error, EXIT_EXECUTION);\n emitFatalError(cliError, detectOutputFormat(process.argv));\n process.exit(cliError.exitCode);\n});\n"],"mappings":"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","names":["mode","noPrompt","fs","fs","path","edits","fs","path","os","fs","fs","path","fs","path","os","fs","path","os","PLUGIN_NAME","fs","path","os","getPluginConfigPath","mkdirSync","readFileSync","writeFileSync","unlinkSync","existsSync","homedir","join","result","resolve","join","homedir","existsSync","readFileSync","mkdirSync","writeFileSync","unlinkSync","resolve","readFileSync","resolve","readFileSync","resolve","result","exitCode"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/args.ts","../../src/cli/commands/registry.ts","../../src/cli/help.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/commands/run.ts","../../src/cli/output.ts","../../src/cli/commands/session/launch.ts","../../src/cli/commands/session/connect.ts","../../src/cli/commands/session/disconnect.ts","../../src/cli/commands/session/status.ts","../../src/cli/commands/status.ts","../../src/cli/commands/nav/goto.ts","../../src/cli/commands/nav/wait.ts","../../src/cli/commands/nav/snapshot.ts","../../src/cli/commands/annotate.ts","../../src/cli/commands/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/targets/list.ts","../../src/cli/commands/targets/use.ts","../../src/cli/commands/targets/new.ts","../../src/cli/commands/targets/close.ts","../../src/cli/commands/pages/open.ts","../../src/cli/commands/pages/list.ts","../../src/cli/commands/pages/close.ts","../../src/cli/commands/dom/html.ts","../../src/cli/commands/dom/text.ts","../../src/cli/commands/dom/attr.ts","../../src/cli/commands/dom/value.ts","../../src/cli/commands/dom/visible.ts","../../src/cli/commands/dom/enabled.ts","../../src/cli/commands/dom/checked.ts","../../src/cli/commands/export/clone-page.ts","../../src/cli/commands/export/clone-component.ts","../../src/cli/commands/devtools/perf.ts","../../src/cli/commands/devtools/screenshot.ts","../../src/cli/commands/devtools/console-poll.ts","../../src/cli/commands/devtools/network-poll.ts","../../src/cli/commands/devtools/debug-trace-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","../../package.json","../../src/cli/index.ts"],"sourcesContent":["import { createUsageError } from \"./errors\";\n\nexport const CLI_COMMANDS = [\n \"install\", \"update\", \"uninstall\", \"help\", \"version\", \"serve\", \"daemon\", \"native\", \"run\",\n \"launch\", \"connect\", \"disconnect\", \"status\",\n \"research\", \"shopping\", \"product-video\", \"artifacts\",\n \"goto\", \"wait\", \"snapshot\",\n \"click\", \"hover\", \"press\", \"check\", \"uncheck\", \"type\", \"select\", \"scroll\", \"scroll-into-view\",\n \"targets-list\", \"target-use\", \"target-new\", \"target-close\",\n \"page\", \"pages\", \"page-close\",\n \"dom-html\", \"dom-text\", \"dom-attr\", \"dom-value\", \"dom-visible\", \"dom-enabled\", \"dom-checked\",\n \"clone-page\", \"clone-component\",\n \"perf\", \"screenshot\", \"console-poll\", \"network-poll\", \"debug-trace-snapshot\",\n \"cookie-import\", \"cookie-list\", \"macro-resolve\",\n \"annotate\", \"rpc\"\n] as const;\n\nconst CLI_COMMAND_SET = new Set<string>(CLI_COMMANDS);\n\nexport type CliCommand = (typeof CLI_COMMANDS)[number];\nexport type InstallMode = \"global\" | \"local\";\nexport type SkillsMode = \"global\" | \"local\" | \"none\";\nexport type OutputFormat = \"text\" | \"json\" | \"stream-json\";\nexport type TransportMode = \"relay\" | \"native\";\n\nexport interface ParsedArgs {\n command: CliCommand;\n mode?: InstallMode;\n withConfig: boolean;\n noPrompt: boolean;\n noInteractive: boolean;\n quiet: boolean;\n outputFormat: OutputFormat;\n transport: TransportMode;\n skillsMode: SkillsMode;\n fullInstall: boolean;\n rawArgs: string[];\n}\n\nconst SHORT_FLAGS: Record<string, string> = {\n \"-g\": \"--global\",\n \"-l\": \"--local\",\n \"-u\": \"--update\",\n \"-h\": \"--help\",\n \"-v\": \"--version\",\n \"-f\": \"--full\"\n};\n\nfunction expandShortFlags(args: string[]): string[] {\n return args.map((arg) => SHORT_FLAGS[arg] ?? arg);\n}\n\nfunction parseSkillsMode(args: string[]): SkillsMode {\n const hasLocal = args.includes(\"--skills-local\");\n const hasGlobal = args.includes(\"--skills-global\");\n if (hasLocal && hasGlobal) {\n throw createUsageError(\"Choose either --skills-local or --skills-global.\");\n }\n if (args.includes(\"--no-skills\")) {\n return \"none\";\n }\n if (hasLocal) {\n return \"local\";\n }\n if (hasGlobal) {\n return \"global\";\n }\n return \"global\";\n}\n\nfunction parseOutputFormat(args: string[]): OutputFormat {\n const outputFlag = args.find((arg) => arg.startsWith(\"--output-format\"));\n if (!outputFlag) {\n return \"text\";\n }\n\n let value: string | undefined;\n if (outputFlag.includes(\"=\")) {\n value = outputFlag.split(\"=\", 2)[1];\n } else {\n const index = args.indexOf(outputFlag);\n value = index >= 0 ? args[index + 1] : undefined;\n }\n\n if (value === \"text\" || value === \"json\" || value === \"stream-json\") {\n return value;\n }\n\n throw createUsageError(`Invalid --output-format: ${value ?? \"missing\"}`);\n}\n\nfunction parseTransport(args: string[]): TransportMode {\n const transportFlag = args.find((arg) => arg.startsWith(\"--transport\"));\n if (!transportFlag) {\n return \"relay\";\n }\n\n let value: string | undefined;\n if (transportFlag.includes(\"=\")) {\n value = transportFlag.split(\"=\", 2)[1];\n } else {\n const index = args.indexOf(transportFlag);\n value = index >= 0 ? args[index + 1] : undefined;\n }\n\n if (value === \"relay\" || value === \"native\") {\n return value;\n }\n\n throw createUsageError(`Invalid --transport: ${value ?? \"missing\"}`);\n}\n\nexport const VALID_FLAGS = [\n \"--global\", \"--local\", \"--update\", \"--uninstall\",\n \"--help\", \"--version\", \"--with-config\", \"--no-prompt\",\n \"--no-interactive\", \"--quiet\", \"--output-format\",\n \"--full\",\n \"--port\", \"--token\", \"--stop\",\n \"--script\", \"--headless\", \"--profile\", \"--persist-profile\", \"--chrome-path\", \"--start-url\", \"--flag\",\n \"--session-id\", \"--close-browser\", \"--ws-endpoint\", \"--host\", \"--cdp-port\",\n \"--url\", \"--wait-until\", \"--timeout-ms\", \"--ref\", \"--state\", \"--until\", \"--mode\", \"--max-chars\", \"--cursor\",\n \"--text\", \"--clear\", \"--submit\", \"--values\", \"--dy\", \"--key\", \"--attr\",\n \"--name\", \"--target-id\", \"--tab-id\", \"--include-urls\", \"--path\", \"--since-seq\", \"--max\",\n \"--since-console-seq\", \"--since-network-seq\", \"--since-exception-seq\", \"--request-id\",\n \"--cookies\", \"--cookies-file\", \"--strict\",\n \"--expression\", \"--default-provider\", \"--include-catalog\",\n \"--execute\",\n \"--params\", \"--params-file\", \"--unsafe-internal\",\n \"--daemon\",\n \"--transport\",\n \"--no-extension\", \"--extension-only\", \"--extension-legacy\", \"--wait-for-extension\", \"--wait-timeout-ms\",\n \"--skills-global\", \"--skills-local\", \"--no-skills\",\n \"--screenshot-mode\", \"--debug\", \"--context\",\n \"--topic\", \"--days\", \"--from\", \"--to\", \"--source-selection\", \"--sources\", \"--include-engagement\", \"--limit-per-source\",\n \"--query\", \"--providers\", \"--budget\", \"--region\", \"--sort\",\n \"--product-url\", \"--product-name\", \"--provider-hint\", \"--include-screenshots\", \"--include-all-images\", \"--include-copy\",\n \"--output-dir\", \"--ttl-hours\", \"--expired-only\"\n] as const;\n\nconst VALID_FLAG_SET = new Set<string>(VALID_FLAGS);\n\nexport const VALID_EQUALS_FLAGS = [\n \"--output-format\",\n \"--transport\",\n \"--session-id\",\n \"--url\",\n \"--screenshot-mode\",\n \"--context\",\n \"--timeout-ms\",\n \"--since-seq\",\n \"--since-console-seq\",\n \"--since-network-seq\",\n \"--since-exception-seq\",\n \"--max\",\n \"--target-id\",\n \"--tab-id\",\n \"--name\",\n \"--cookies\",\n \"--cookies-file\",\n \"--persist-profile\",\n \"--expression\",\n \"--default-provider\",\n \"--request-id\",\n \"--strict\",\n \"--params\",\n \"--params-file\",\n \"--topic\",\n \"--days\",\n \"--from\",\n \"--to\",\n \"--source-selection\",\n \"--sources\",\n \"--mode\",\n \"--limit-per-source\",\n \"--query\",\n \"--providers\",\n \"--budget\",\n \"--region\",\n \"--sort\",\n \"--product-url\",\n \"--product-name\",\n \"--provider-hint\",\n \"--include-screenshots\",\n \"--include-all-images\",\n \"--include-copy\",\n \"--output-dir\",\n \"--ttl-hours\"\n] as const;\n\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 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 type { CliCommand } from \"./args\";\nimport { CLI_COMMANDS, VALID_FLAGS } from \"./args\";\nimport { listCommands } from \"./commands/registry\";\n\ntype HelpFlag = (typeof VALID_FLAGS)[number];\n\ninterface CommandGroup {\n title: string;\n summary: string;\n commands: readonly CliCommand[];\n}\n\ninterface FlagEntry {\n flag: HelpFlag;\n alias?: string;\n description: string;\n}\n\ninterface FlagGroup {\n title: string;\n summary: string;\n flags: readonly FlagEntry[];\n}\n\ninterface ToolEntry {\n name: string;\n description: string;\n}\n\ninterface ReferenceEntry {\n label: string;\n description: string;\n}\n\nconst LABEL_WIDTH = 42;\nconst EXPECTED_TOOL_COUNT = 48;\nconst COMMAND_SET = new Set<string>(CLI_COMMANDS);\nconst FLAG_SET = new Set<string>(VALID_FLAGS);\n\nexport const HELP_COMMAND_GROUPS: readonly CommandGroup[] = [\n {\n title: \"Install & Lifecycle\",\n summary: \"Install, remove, and inspect CLI basics.\",\n commands: [\"install\", \"update\", \"uninstall\", \"help\", \"version\"]\n },\n {\n title: \"Daemon & Runtime\",\n summary: \"Run daemon services and single-process scripts.\",\n commands: [\"serve\", \"daemon\", \"native\", \"run\"]\n },\n {\n title: \"Session Lifecycle\",\n summary: \"Launch/connect sessions and manage browser state.\",\n commands: [\"launch\", \"connect\", \"disconnect\", \"status\", \"cookie-import\", \"cookie-list\"]\n },\n {\n title: \"Provider Workflows\",\n summary: \"Run research/shopping/media workflows and macro plans.\",\n commands: [\"research\", \"shopping\", \"product-video\", \"artifacts\", \"macro-resolve\"]\n },\n {\n title: \"Navigation\",\n summary: \"Move through pages and capture fresh refs.\",\n commands: [\"goto\", \"wait\", \"snapshot\"]\n },\n {\n title: \"Interaction\",\n summary: \"Perform ref-based interactions in the active page.\",\n commands: [\"click\", \"hover\", \"press\", \"check\", \"uncheck\", \"type\", \"select\", \"scroll\", \"scroll-into-view\"]\n },\n {\n title: \"Targets & Pages\",\n summary: \"Manage tabs/targets and named pages.\",\n commands: [\"targets-list\", \"target-use\", \"target-new\", \"target-close\", \"page\", \"pages\", \"page-close\"]\n },\n {\n title: \"DOM & Export\",\n summary: \"Read DOM state and export page/component code.\",\n commands: [\"dom-html\", \"dom-text\", \"dom-attr\", \"dom-value\", \"dom-visible\", \"dom-enabled\", \"dom-checked\", \"clone-page\", \"clone-component\"]\n },\n {\n title: \"Diagnostics & Annotation\",\n summary: \"Collect runtime diagnostics and annotation payloads.\",\n commands: [\"perf\", \"screenshot\", \"console-poll\", \"network-poll\", \"debug-trace-snapshot\", \"annotate\"]\n },\n {\n title: \"Power\",\n summary: \"Unsafe internal command passthrough.\",\n commands: [\"rpc\"]\n }\n];\n\nexport const HELP_FLAG_GROUPS: readonly FlagGroup[] = [\n {\n title: \"Install/Global Flags\",\n summary: \"Control installation scope and setup behavior.\",\n flags: [\n { flag: \"--global\", alias: \"-g\", description: \"Install into ~/.config/opencode/opencode.json.\" },\n { flag: \"--local\", alias: \"-l\", description: \"Install into ./opencode.json for this project.\" },\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.\" },\n { flag: \"--full\", alias: \"-f\", description: \"Install config and pre-extract extension assets.\" },\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/version and control output transport.\",\n flags: [\n { flag: \"--help\", alias: \"-h\", description: \"Show CLI help output.\" },\n { flag: \"--version\", alias: \"-v\", description: \"Show CLI version.\" },\n { flag: \"--output-format\", description: \"Output mode: text, json, stream-json.\" },\n { flag: \"--transport\", description: \"Annotation transport: relay (default) or native.\" }\n ]\n },\n {\n title: \"Daemon/Session/Launch Flags\",\n summary: \"Control daemon binding, connect, and launch behavior.\",\n flags: [\n { flag: \"--port\", description: \"Daemon or relay port override.\" },\n { flag: \"--token\", description: \"Relay/daemon auth token override.\" },\n { flag: \"--stop\", description: \"Stop a running daemon.\" },\n { flag: \"--daemon\", description: \"Target daemon status mode where supported.\" },\n { flag: \"--script\", description: \"Path to a run-script JSON file.\" },\n { flag: \"--session-id\", description: \"Target an existing daemon session.\" },\n { flag: \"--close-browser\", description: \"Close managed browser on disconnect.\" },\n { flag: \"--ws-endpoint\", description: \"Connect using explicit CDP WebSocket endpoint.\" },\n { flag: \"--host\", description: \"CDP host for host/port connect mode.\" },\n { flag: \"--cdp-port\", description: \"CDP port for host/port connect mode.\" },\n { flag: \"--headless\", description: \"Launch managed browser in headless mode.\" },\n { flag: \"--profile\", description: \"Use a named browser profile directory.\" },\n { flag: \"--persist-profile\", description: \"Keep generated profile directory after exit.\" },\n { flag: \"--chrome-path\", description: \"Use a specific Chrome/Chromium binary.\" },\n { flag: \"--start-url\", description: \"Open this URL immediately after launch.\" },\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 extension relay is connected.\" },\n { flag: \"--extension-legacy\", description: \"Use legacy /cdp relay mode instead of /ops.\" },\n { flag: \"--wait-for-extension\", description: \"Wait for 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 and diagnostics.\",\n flags: [\n { flag: \"--url\", description: \"Target URL for navigation, connect, or workflow commands.\" },\n { flag: \"--wait-until\", description: \"Navigation wait strategy (load, domcontentloaded, etc.).\" },\n { flag: \"--timeout-ms\", description: \"Operation timeout in milliseconds (for example goto, wait, screenshot, annotate, rpc, and macro-resolve).\" },\n { flag: \"--ref\", description: \"Snapshot ref id for element-targeted commands.\" },\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 existing input value before typing.\" },\n { flag: \"--submit\", description: \"Submit form/input after typing.\" },\n { flag: \"--values\", description: \"CSV values for select commands.\" },\n { flag: \"--dy\", description: \"Vertical scroll delta for scroll commands.\" },\n { flag: \"--key\", description: \"Keyboard key for press command.\" },\n { flag: \"--attr\", description: \"DOM attribute name for dom-attr command.\" },\n { flag: \"--name\", description: \"Named page identifier for page commands.\" },\n { flag: \"--target-id\", description: \"Browser target id for target commands.\" },\n { flag: \"--tab-id\", description: \"Browser tab id override for extension/annotation commands.\" },\n { flag: \"--include-urls\", description: \"Include page URLs in list output where supported.\" },\n { flag: \"--path\", description: \"Filesystem path for command output/artifacts.\" },\n { flag: \"--since-seq\", description: \"Poll from sequence id across diagnostics streams.\" },\n { flag: \"--max\", description: \"Maximum number of records/items to return.\" },\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/lookup request id for correlateable output.\" },\n { flag: \"--cookies\", description: \"Inline cookie payload for cookie-import command.\" },\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: crop, full, or none.\" },\n { flag: \"--debug\", description: \"Enable debug-level annotation capture extras.\" },\n { flag: \"--context\", description: \"Free-form annotation context for reviewers/agents.\" }\n ]\n },\n {\n title: \"Macro/Provider/Power Flags\",\n summary: \"Workflow filters, provider selectors, and unsafe RPC options.\",\n flags: [\n { flag: \"--expression\", description: \"Macro expression to resolve/execute.\" },\n { flag: \"--default-provider\", description: \"Provider fallback for shorthand macro expressions.\" },\n { flag: \"--include-catalog\", description: \"Include macro catalog metadata in response.\" },\n { flag: \"--execute\", description: \"Execute resolved macro action after planning (pair with --timeout-ms on slow runs).\" },\n { flag: \"--params\", description: \"Inline JSON params for rpc command.\" },\n { flag: \"--params-file\", description: \"Path to JSON params file for rpc command.\" },\n { flag: \"--unsafe-internal\", description: \"Required safety gate for 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.\" },\n { flag: \"--sources\", description: \"Explicit source selectors within a source family.\" },\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/artifacts.\" },\n { flag: \"--budget\", description: \"Budget filter for shopping workflows.\" },\n { flag: \"--region\", description: \"Region/country hint for provider selection.\" },\n { flag: \"--sort\", description: \"Sort mode for shopping results.\" },\n { flag: \"--product-url\", description: \"Target product URL for product-video/artifacts workflows.\" },\n { flag: \"--product-name\", description: \"Product name override for media workflows.\" },\n { flag: \"--provider-hint\", description: \"Provider hint override for product workflows.\" },\n { flag: \"--include-screenshots\", description: \"Include screenshots in product presentation output.\" },\n { flag: \"--include-all-images\", description: \"Include all discovered product images.\" },\n { flag: \"--include-copy\", description: \"Include product marketing copy metadata.\" },\n { flag: \"--output-dir\", description: \"Directory where generated artifacts are written.\" },\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: readonly ToolEntry[] = [\n { name: \"opendevbrowser_launch\", description: \"Launch a managed browser session.\" },\n { name: \"opendevbrowser_connect\", description: \"Connect to an existing browser session.\" },\n { name: \"opendevbrowser_disconnect\", description: \"Disconnect a managed or connected session.\" },\n { name: \"opendevbrowser_status\", description: \"Inspect session and relay status.\" },\n { name: \"opendevbrowser_targets_list\", description: \"List available page targets/tabs.\" },\n { name: \"opendevbrowser_target_use\", description: \"Switch active target by id.\" },\n { name: \"opendevbrowser_target_new\", description: \"Create a new target/tab.\" },\n { name: \"opendevbrowser_target_close\", description: \"Close target/tab by id.\" },\n { name: \"opendevbrowser_page\", description: \"Open or focus a named page.\" },\n { name: \"opendevbrowser_list\", description: \"List named pages in the session.\" },\n { name: \"opendevbrowser_close\", description: \"Close a named page.\" },\n { name: \"opendevbrowser_goto\", description: \"Navigate to a URL.\" },\n { name: \"opendevbrowser_wait\", description: \"Wait for load/ref/state conditions.\" },\n { name: \"opendevbrowser_snapshot\", description: \"Capture AX-tree refs for actions.\" },\n { name: \"opendevbrowser_click\", description: \"Click an element by ref.\" },\n { name: \"opendevbrowser_hover\", description: \"Hover an element by ref.\" },\n { name: \"opendevbrowser_press\", description: \"Send a keyboard key.\" },\n { name: \"opendevbrowser_check\", description: \"Check checkbox/radio by ref.\" },\n { name: \"opendevbrowser_uncheck\", description: \"Uncheck checkbox/radio by ref.\" },\n { name: \"opendevbrowser_type\", description: \"Type text into an input by ref.\" },\n { name: \"opendevbrowser_select\", description: \"Set select values by ref.\" },\n { name: \"opendevbrowser_scroll\", description: \"Scroll page or element.\" },\n { name: \"opendevbrowser_scroll_into_view\", description: \"Scroll target element into view.\" },\n { name: \"opendevbrowser_dom_get_html\", description: \"Get HTML for page or ref.\" },\n { name: \"opendevbrowser_dom_get_text\", description: \"Get text for page or ref.\" },\n { name: \"opendevbrowser_get_attr\", description: \"Read a DOM attribute by ref.\" },\n { name: \"opendevbrowser_get_value\", description: \"Read form/control value by ref.\" },\n { name: \"opendevbrowser_is_visible\", description: \"Check ref visibility.\" },\n { name: \"opendevbrowser_is_enabled\", description: \"Check ref enabled state.\" },\n { name: \"opendevbrowser_is_checked\", description: \"Check ref checked state.\" },\n { name: \"opendevbrowser_run\", description: \"Execute multi-action automation scripts.\" },\n { name: \"opendevbrowser_prompting_guide\", description: \"Return best-practice prompting guidance.\" },\n { name: \"opendevbrowser_console_poll\", description: \"Poll redacted console events.\" },\n { name: \"opendevbrowser_network_poll\", description: \"Poll redacted network events.\" },\n { name: \"opendevbrowser_debug_trace_snapshot\", description: \"Capture page + console + network diagnostics.\" },\n { name: \"opendevbrowser_cookie_import\", description: \"Import validated cookies into session.\" },\n { name: \"opendevbrowser_cookie_list\", description: \"List cookies in session with optional URL filters.\" },\n { name: \"opendevbrowser_macro_resolve\", description: \"Resolve/execute provider macro expressions.\" },\n { name: \"opendevbrowser_research_run\", description: \"Run research workflow directly.\" },\n { name: \"opendevbrowser_shopping_run\", description: \"Run shopping workflow directly.\" },\n { name: \"opendevbrowser_product_video_run\", description: \"Run product-video asset workflow directly.\" },\n { name: \"opendevbrowser_clone_page\", description: \"Export active page into React code.\" },\n { name: \"opendevbrowser_clone_component\", description: \"Export component by ref into React code.\" },\n { name: \"opendevbrowser_perf\", description: \"Collect browser performance metrics.\" },\n { name: \"opendevbrowser_screenshot\", description: \"Capture page screenshot.\" },\n { name: \"opendevbrowser_annotate\", description: \"Capture interactive annotations.\" },\n { name: \"opendevbrowser_skill_list\", description: \"List available skill packs.\" },\n { name: \"opendevbrowser_skill_load\", description: \"Load a specific skill pack.\" }\n];\n\nconst HELP_REFERENCE_ENTRIES: readonly ReferenceEntry[] = [\n { label: \"docs/CLI.md\", description: \"Full command docs, flag matrix, and examples.\" },\n { label: \"docs/SURFACE_REFERENCE.md\", description: \"Canonical CLI/tool/channel inventory matrix.\" },\n { label: \"src/tools/index.ts\", description: \"Code-level tool registry (source of truth).\" },\n { label: \"opendevbrowser --help\", description: \"Always safe first command for quick discovery.\" }\n];\n\nfunction formatRows(rows: readonly { label: string; description: string }[]): string {\n return rows\n .map((row) => ` ${row.label.padEnd(LABEL_WIDTH)} ${row.description}`)\n .join(\"\\n\");\n}\n\nfunction getCommandDescriptions(): Map<string, string> {\n const descriptions = new Map<string, string>();\n for (const definition of listCommands()) {\n descriptions.set(definition.name, definition.description);\n }\n return descriptions;\n}\n\nfunction assertCommandCoverage(commandDescriptions: Map<string, string>): void {\n const seen = new Set<string>();\n\n for (const group of HELP_COMMAND_GROUPS) {\n for (const command of group.commands) {\n if (!COMMAND_SET.has(command)) {\n throw new Error(`Help references unknown CLI command: ${command}`);\n }\n if (!commandDescriptions.has(command)) {\n throw new Error(`Help references unregistered CLI command: ${command}`);\n }\n if (seen.has(command)) {\n throw new Error(`Help command appears multiple times: ${command}`);\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 if (HELP_TOOL_ENTRIES.length !== EXPECTED_TOOL_COUNT) {\n throw new Error(`Help tool inventory must list ${EXPECTED_TOOL_COUNT} tools; got ${HELP_TOOL_ENTRIES.length}`);\n }\n\n const seen = new Set<string>();\n for (const entry of HELP_TOOL_ENTRIES) {\n if (seen.has(entry.name)) {\n throw new Error(`Help tool appears multiple times: ${entry.name}`);\n }\n if (!entry.name.startsWith(\"opendevbrowser_\")) {\n throw new Error(`Invalid tool name in help inventory: ${entry.name}`);\n }\n seen.add(entry.name);\n }\n}\n\nfunction formatCommandGroups(commandDescriptions: Map<string, string>): string {\n return HELP_COMMAND_GROUPS\n .map((group) => {\n const rows = group.commands.map((command) => ({\n label: command,\n description: commandDescriptions.get(command) ?? \"Missing command description.\"\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 = group.flags.map((entry) => ({\n label: entry.alias ? `${entry.flag} (${entry.alias})` : entry.flag,\n description: entry.description\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 })));\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 const commandDescriptions = getCommandDescriptions();\n assertCommandCoverage(commandDescriptions);\n assertFlagCoverage();\n assertToolCoverage();\n\n return [\n \"OpenDevBrowser CLI\",\n \"\",\n \"Usage:\",\n \" npx opendevbrowser <command> [options]\",\n \"\",\n `Command Inventory (all ${CLI_COMMANDS.length} commands):`,\n formatCommandGroups(commandDescriptions),\n \"\",\n \"Flag Inventory (all supported flags):\",\n formatFlagGroups(),\n \"\",\n `Tool Inventory (all ${EXPECTED_TOOL_COUNT} opendevbrowser_* tools):`,\n formatToolEntries(),\n \"\",\n \"Reference Pointers:\",\n formatReferenceEntries()\n ].join(\"\\n\");\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 fs from \"fs\";\nimport * as path from \"path\";\nimport { ensureDir } from \"../utils/config\";\nimport { getBundledSkillsDir, getGlobalSkillTargets, getLocalSkillTargets } from \"../utils/skills\";\n\nexport type SkillInstallMode = \"global\" | \"local\";\n\nexport interface SkillTargetInstallResult {\n agents: string[];\n targetDir: string;\n installed: string[];\n skipped: string[];\n success: boolean;\n error?: string;\n}\n\nexport interface SkillInstallResult {\n success: boolean;\n message: string;\n mode: SkillInstallMode;\n targets: SkillTargetInstallResult[];\n installed: string[];\n skipped: string[];\n}\n\nexport function installSkills(mode: SkillInstallMode): SkillInstallResult {\n const targets = mode === \"global\" ? getGlobalSkillTargets() : getLocalSkillTargets();\n const targetResults: SkillTargetInstallResult[] = [];\n\n try {\n const sourceDir = getBundledSkillsDir();\n const entries = fs.readdirSync(sourceDir, { withFileTypes: true });\n\n for (const target of targets) {\n const installed: string[] = [];\n const skipped: string[] = [];\n\n try {\n ensureDir(target.dir);\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const skillName = entry.name;\n const sourcePath = path.join(sourceDir, skillName);\n const targetPath = path.join(target.dir, skillName);\n\n if (fs.existsSync(targetPath)) {\n skipped.push(skillName);\n continue;\n }\n\n fs.cpSync(sourcePath, targetPath, { recursive: true });\n installed.push(skillName);\n }\n\n targetResults.push({\n agents: target.agents,\n targetDir: target.dir,\n installed,\n skipped,\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 skipped,\n success: false,\n error: message\n });\n }\n }\n\n const installed = targetResults.flatMap((result) => result.installed);\n const skipped = targetResults.flatMap((result) => result.skipped);\n const failures = targetResults.filter((result) => !result.success);\n const failedSummary = failures.length > 0\n ? `, ${failures.length} failed`\n : \"\";\n const summary = `Skills ${mode} install: ${installed.length} installed${skipped.length ? `, ${skipped.length} skipped` : \"\"}${failedSummary} across ${targetResults.length} targets`;\n\n return {\n success: failures.length === 0,\n message: summary,\n mode,\n targets: targetResults,\n installed,\n skipped\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Failed to install skills (${mode}): ${message}`,\n mode,\n targets: targetResults,\n installed: targetResults.flatMap((result) => result.installed),\n skipped: targetResults.flatMap((result) => result.skipped)\n };\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport { fileURLToPath } from \"url\";\n\nconst PACKAGE_NAME = \"opendevbrowser\";\nconst SKILL_DIR_NAME = \"skill\";\nconst SKILLS_DIR_NAME = \"skills\";\n\nlet cachedPackageRoot: string | null = null;\n\nexport type SkillTargetAgent = \"opencode\" | \"codex\" | \"claudecode\" | \"ampcli\" | \"claude\" | \"amp\";\n\nexport interface SkillTarget {\n agents: SkillTargetAgent[];\n dir: string;\n}\n\nfunction findPackageRoot(startDir: string): string {\n let current = startDir;\n\n while (true) {\n const pkgPath = path.join(current, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n try {\n const parsed = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\")) as { name?: string };\n if (parsed.name === PACKAGE_NAME) {\n return current;\n }\n } catch {\n void 0;\n }\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n\n throw new Error(\"Unable to locate opendevbrowser package root for skill installation.\");\n}\n\nexport function getPackageRoot(): string {\n if (cachedPackageRoot) return cachedPackageRoot;\n const moduleDir = path.dirname(fileURLToPath(import.meta.url));\n cachedPackageRoot = findPackageRoot(moduleDir);\n return cachedPackageRoot;\n}\n\nexport function getBundledSkillsDir(): string {\n const skillsDir = path.join(getPackageRoot(), \"skills\");\n if (!fs.existsSync(skillsDir)) {\n throw new Error(`Bundled skills directory not found at ${skillsDir}`);\n }\n return skillsDir;\n}\n\nexport function getGlobalSkillDir(): string {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, SKILL_DIR_NAME);\n}\n\nexport function getLocalSkillDir(): string {\n return path.join(process.cwd(), \".opencode\", SKILL_DIR_NAME);\n}\n\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 || process.env.CLAUDE_HOME\n || path.join(os.homedir(), \".claude\");\n}\n\nfunction getAmpHomeDir(): string {\n return process.env.AMPCLI_HOME\n || process.env.AMP_CLI_HOME\n || process.env.AMP_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: \"claude\", dir: claudeSkillsDir },\n { agent: \"ampcli\", dir: ampSkillsDir },\n { agent: \"amp\", 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: \"claude\", dir: localClaudeSkillsDir },\n { agent: \"ampcli\", dir: localAmpSkillsDir },\n { agent: \"amp\", 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 { startDaemon, readDaemonMetadata } from \"../daemon\";\nimport { loadGlobalConfig } from \"../../config\";\nimport { createUsageError, EXIT_DISCONNECTED, EXIT_EXECUTION } from \"../errors\";\nimport { parseNumberFlag } from \"../utils/parse\";\nimport { fetchWithTimeout } from \"../utils/http\";\nimport { discoverExtensionId, getNativeStatusSnapshot, installNativeHost } from \"./native\";\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\nlet daemonHandle: DaemonHandle | null = null;\nconst PS_MAX_BUFFER = 8 * 1024 * 1024;\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 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 listServeProcessPids(): number[] {\n const result = spawnSync(\"ps\", [\"-ax\", \"-o\", \"pid=,command=\"], {\n encoding: \"utf-8\",\n maxBuffer: PS_MAX_BUFFER\n });\n if ((result.status ?? 1) !== 0) {\n return [];\n }\n const servePattern = /\\b(opendevbrowser|dist\\/cli\\/index\\.js)\\b.*\\bserve\\b/;\n const lines = String(result.stdout ?? \"\").split(/\\r?\\n/);\n const pids = new Set<number>();\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n const match = trimmed.match(/^(\\d+)\\s+(.+)$/);\n if (!match) continue;\n const pidText = match[1];\n if (!pidText) continue;\n const pid = Number.parseInt(pidText, 10);\n const command = match[2] ?? \"\";\n if (!Number.isInteger(pid) || pid <= 0) continue;\n if (pid === process.pid || pid === process.ppid) continue;\n if (!servePattern.test(command)) continue;\n pids.add(pid);\n }\n return [...pids];\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 cleanupStaleServeProcesses(keepPid?: number): number {\n const candidates = listServeProcessPids();\n let cleaned = 0;\n for (const pid of candidates) {\n if (Number.isInteger(keepPid) && pid === keepPid) continue;\n if (terminateProcess(pid)) {\n cleaned += 1;\n }\n }\n return cleaned;\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\n const existingDaemon = await resolveExistingDaemon(requestedPort, tokenCandidates);\n const staleCleared = cleanupStaleServeProcesses(existingDaemon?.status.pid);\n if (existingDaemon) {\n const relayPort = existingDaemon.status.relay.port ?? config.relayPort;\n const staleNote = staleCleared > 0 ? ` Cleared ${staleCleared} stale daemon process${staleCleared === 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: staleCleared,\n relay: existingDaemon.status.relay\n },\n exitCode: null\n };\n }\n\n let nativeStatus = getNativeStatusSnapshot();\n let nativeMessage: string | null = null;\n if (!nativeStatus.installed) {\n const discovered = discoverExtensionId();\n const extensionId = config.nativeExtensionId ?? discovered.extensionId ?? null;\n const usedDiscovery = !config.nativeExtensionId && Boolean(discovered.extensionId);\n if (extensionId) {\n const installResult = installNativeHost(extensionId);\n if (installResult.success) {\n const suffix = usedDiscovery && discovered.matchedBy ? ` (auto-detected by ${discovered.matchedBy})` : \"\";\n nativeMessage = `${installResult.message ?? \"Native host installed.\"}${suffix}`;\n nativeStatus = getNativeStatusSnapshot();\n } else {\n nativeMessage = `Native host install skipped: ${installResult.message ?? \"unknown error\"}`;\n }\n } else {\n nativeMessage = \"Native host not installed. Set nativeExtensionId in opendevbrowser.jsonc to auto-install.\";\n }\n }\n\n let handle: Awaited<ReturnType<typeof startDaemon>>;\n try {\n handle = await startDaemon({\n port: serveArgs.port,\n token: serveArgs.token,\n config\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.includes(\"EADDRINUSE\") || message.includes(\"in use\")) {\n const runningDaemon = await resolveExistingDaemon(requestedPort, tokenCandidates);\n if (runningDaemon) {\n const relayPort = runningDaemon.status.relay.port ?? config.relayPort;\n return {\n success: true,\n message: `Daemon already running on 127.0.0.1:${requestedPort} (pid=${runningDaemon.status.pid}, relay ${relayPort}).`,\n data: {\n port: requestedPort,\n pid: runningDaemon.status.pid,\n relayPort,\n alreadyRunning: true,\n relay: runningDaemon.status.relay\n },\n exitCode: null\n };\n }\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 staleNote = staleCleared > 0 ? `\\nCleared ${staleCleared} stale daemon process${staleCleared === 1 ? \"\" : \"es\"}.` : \"\";\n const message = nativeMessage ? `${baseMessage}\\n${nativeMessage}${staleNote}` : `${baseMessage}${staleNote}`;\n\n return {\n success: true,\n message,\n data: { port: state.port, pid: state.pid, relayPort: state.relayPort, native: nativeStatus, staleDaemonsCleared: staleCleared },\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\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { homedir } from \"os\";\nimport { execFileSync } from \"child_process\";\nimport { fileURLToPath } from \"url\";\nimport type { ParsedArgs } from \"../args\";\nimport { createUsageError, EXIT_DISCONNECTED, EXIT_EXECUTION } from \"../errors\";\nimport { getExtensionPath } from \"../../extension-extractor\";\n\ntype NativeSubcommand = \"install\" | \"uninstall\" | \"status\";\n\ntype NativeStatus = {\n installed: boolean;\n manifestPath: string | null;\n wrapperPath: string | null;\n hostScriptPath: string;\n extensionId: string | null;\n registryPath: string | null;\n};\n\nconst EXTENSION_ID_RE = /^[a-p]{32}$/;\nconst EXTENSION_NAME = \"OpenDevBrowser Relay\";\nconst ANNOTATION_COMMAND_NAME = \"toggle-annotation\";\ntype ExtensionIdMatchReason = \"path\" | \"name\" | \"command\";\n\nconst normalizeExtensionId = (value: string | undefined): string | null => {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n return EXTENSION_ID_RE.test(trimmed) ? trimmed : null;\n};\n\nconst requireExtensionId = (value: string | undefined): string => {\n if (!value) {\n throw createUsageError(\"Missing extension ID. Usage: opendevbrowser native install <extension-id>\");\n }\n const normalized = normalizeExtensionId(value);\n if (!normalized) {\n throw createUsageError(\"Invalid extension ID format. Expected 32 characters (a-p).\");\n }\n return normalized;\n};\n\nconst parseNativeArgs = (rawArgs: string[]): { subcommand: NativeSubcommand; extensionId?: string } => {\n const subcommand = rawArgs[0];\n if (subcommand !== \"install\" && subcommand !== \"uninstall\" && subcommand !== \"status\") {\n throw createUsageError(\"Usage: opendevbrowser native <install|uninstall|status> [extension-id]\");\n }\n if (subcommand === \"install\") {\n const extensionId = requireExtensionId(rawArgs[1]);\n return { subcommand, extensionId };\n }\n return { subcommand };\n};\n\nconst getManifestDir = (): string => {\n if (process.platform === \"darwin\") {\n return path.join(process.env.HOME || \"\", \"Library\", \"Application Support\", \"Google\", \"Chrome\", \"NativeMessagingHosts\");\n }\n if (process.platform === \"linux\") {\n return path.join(process.env.HOME || \"\", \".config\", \"google-chrome\", \"NativeMessagingHosts\");\n }\n if (process.platform === \"win32\") {\n const base = process.env.LOCALAPPDATA\n || (process.env.USERPROFILE ? path.join(process.env.USERPROFILE, \"AppData\", \"Local\") : \"\");\n if (!base) {\n throw createUsageError(\"LOCALAPPDATA is not set. Unable to locate NativeMessagingHosts directory.\");\n }\n return path.join(base, \"Google\", \"Chrome\", \"User Data\", \"NativeMessagingHosts\");\n }\n throw createUsageError(`Native messaging is not supported on ${process.platform}.`);\n};\n\nconst getScriptsDir = (): string => {\n const __filename = fileURLToPath(import.meta.url);\n const startDir = path.dirname(__filename);\n const rootsToScan = [startDir, process.cwd()];\n\n for (const root of rootsToScan) {\n let current = path.resolve(root);\n while (true) {\n const scriptsDir = path.join(current, \"scripts\", \"native\");\n const packageJsonPath = path.join(current, \"package.json\");\n if (fs.existsSync(scriptsDir) && fs.existsSync(packageJsonPath)) {\n return scriptsDir;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n }\n\n throw createUsageError(\"Unable to locate scripts/native directory.\");\n};\n\nconst getHostScriptPath = (): string => {\n return path.join(getScriptsDir(), \"host.cjs\");\n};\n\nconst getManifestPath = (): string => {\n return path.join(getManifestDir(), \"com.opendevbrowser.native.json\");\n};\n\nconst getWrapperPath = (): string => {\n const wrapperName = process.platform === \"win32\"\n ? \"com.opendevbrowser.native.cmd\"\n : \"com.opendevbrowser.native.sh\";\n return path.join(getManifestDir(), wrapperName);\n};\n\nconst readManifest = (manifestPath: string): { extensionId: string | null } => {\n try {\n const raw = fs.readFileSync(manifestPath, \"utf8\");\n const data = JSON.parse(raw) as { allowed_origins?: string[] };\n const origins = Array.isArray(data.allowed_origins) ? data.allowed_origins : [];\n const match = origins.find((origin) => origin.startsWith(\"chrome-extension://\"));\n if (!match) return { extensionId: null };\n const id = match.replace(\"chrome-extension://\", \"\").replace(\"/\", \"\");\n return { extensionId: EXTENSION_ID_RE.test(id) ? id : null };\n } catch {\n return { extensionId: null };\n }\n};\n\nconst runScript = (script: string, args: string[]): void => {\n if (process.platform === \"win32\") {\n execFileSync(\"powershell\", [\"-NoProfile\", \"-ExecutionPolicy\", \"Bypass\", \"-File\", script, ...args], { stdio: \"pipe\" });\n return;\n }\n execFileSync(\"bash\", [script, ...args], { stdio: \"pipe\" });\n};\n\nconst readRegistryPath = (): string | null => {\n if (process.platform !== \"win32\") return null;\n const key = \"HKCU\\\\Software\\\\Google\\\\Chrome\\\\NativeMessagingHosts\\\\com.opendevbrowser.native\";\n try {\n const output = execFileSync(\"reg\", [\"query\", key, \"/ve\"], { encoding: \"utf8\" });\n const lines = output.split(/\\r?\\n/);\n for (const line of lines) {\n if (line.includes(\"REG_SZ\")) {\n const parts = line.trim().split(/\\s{2,}/);\n return parts[parts.length - 1] || null;\n }\n }\n return null;\n } catch {\n return null;\n }\n};\n\nconst normalizePath = (value: string): string => {\n try {\n return fs.realpathSync(value);\n } catch {\n return path.resolve(value);\n }\n};\n\nconst getChromeUserDataRoots = (): string[] => {\n if (process.platform === \"darwin\") {\n return [\n path.join(homedir(), \"Library\", \"Application Support\", \"Google\", \"Chrome\"),\n path.join(homedir(), \"Library\", \"Application Support\", \"Chromium\"),\n path.join(homedir(), \"Library\", \"Application Support\", \"BraveSoftware\", \"Brave-Browser\")\n ];\n }\n if (process.platform === \"linux\") {\n return [\n path.join(homedir(), \".config\", \"google-chrome\"),\n path.join(homedir(), \".config\", \"chromium\"),\n path.join(homedir(), \".config\", \"BraveSoftware\", \"Brave-Browser\")\n ];\n }\n if (process.platform === \"win32\") {\n const base = process.env.LOCALAPPDATA\n || (process.env.USERPROFILE ? path.join(process.env.USERPROFILE, \"AppData\", \"Local\") : \"\");\n if (!base) return [];\n return [\n path.join(base, \"Google\", \"Chrome\", \"User Data\"),\n path.join(base, \"Chromium\", \"User Data\"),\n path.join(base, \"BraveSoftware\", \"Brave-Browser\", \"User Data\")\n ];\n }\n return [];\n};\n\nconst PROFILE_PREFERENCES_FILES = [\"Preferences\", \"Secure Preferences\"] as const;\n\nconst getProfileDirs = (root: string): string[] => {\n try {\n const entries = fs.readdirSync(root, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory() && (entry.name === \"Default\" || entry.name.startsWith(\"Profile \")))\n .map((entry) => path.join(root, entry.name))\n .filter((dir) => PROFILE_PREFERENCES_FILES.some((filename) => fs.existsSync(path.join(dir, filename))));\n } catch {\n return [];\n }\n};\n\nconst readProfilePreferences = (profileDir: string): Record<string, unknown>[] => {\n const records: Record<string, unknown>[] = [];\n for (const filename of PROFILE_PREFERENCES_FILES) {\n try {\n const raw = fs.readFileSync(path.join(profileDir, filename), \"utf8\");\n records.push(JSON.parse(raw) as Record<string, unknown>);\n } catch {\n // Missing or invalid preference files are ignored; other sources may still be valid.\n }\n }\n return records;\n};\n\nconst findExtensionIdInCommands = (preferences: Record<string, unknown>): string | null => {\n const extensionCommands = preferences.extensions as Record<string, unknown> | undefined;\n const commandMaps: Array<Record<string, unknown> | undefined> = [\n extensionCommands?.commands as Record<string, unknown> | undefined,\n ((preferences.account_values as Record<string, unknown> | undefined)?.extensions as Record<string, unknown> | undefined)\n ?.commands as Record<string, unknown> | undefined\n ];\n\n for (const commandMap of commandMaps) {\n if (!commandMap) {\n continue;\n }\n for (const value of Object.values(commandMap)) {\n if (typeof value !== \"object\" || value === null) {\n continue;\n }\n const entry = value as Record<string, unknown>;\n const commandName = typeof entry.command_name === \"string\" ? entry.command_name : null;\n const extensionId = typeof entry.extension === \"string\" ? entry.extension : null;\n if (commandName === ANNOTATION_COMMAND_NAME && extensionId && EXTENSION_ID_RE.test(extensionId)) {\n return extensionId;\n }\n }\n }\n\n return null;\n};\n\nconst findExtensionIdInPreferences = (\n preferences: Record<string, unknown>,\n extensionPath: string | null\n): { id: string; matchedBy: \"path\" | \"name\" } | null => {\n const extensions = preferences.extensions as Record<string, unknown> | undefined;\n const settings = extensions?.settings as Record<string, unknown> | undefined;\n if (!settings) return null;\n\n const normalizedTargetPath = extensionPath ? normalizePath(extensionPath) : null;\n let nameMatch: string | null = null;\n\n for (const [id, entry] of Object.entries(settings)) {\n if (!EXTENSION_ID_RE.test(id) || typeof entry !== \"object\" || entry === null) {\n continue;\n }\n const record = entry as Record<string, unknown>;\n const recordPath = typeof record.path === \"string\" ? record.path : null;\n if (recordPath && normalizedTargetPath) {\n if (normalizePath(recordPath) === normalizedTargetPath) {\n return { id, matchedBy: \"path\" };\n }\n }\n const manifest = record.manifest as Record<string, unknown> | undefined;\n const name = typeof manifest?.name === \"string\" ? manifest.name : null;\n if (!nameMatch && name === EXTENSION_NAME) {\n nameMatch = id;\n }\n }\n\n if (nameMatch) {\n return { id: nameMatch, matchedBy: \"name\" };\n }\n return null;\n};\n\nconst getExtensionPathCandidates = (): Array<string | null> => {\n const candidates = new Set<string>();\n const primary = getExtensionPath();\n if (primary) {\n candidates.add(normalizePath(primary));\n }\n\n const cwdExtension = path.join(process.cwd(), \"extension\");\n if (fs.existsSync(path.join(cwdExtension, \"manifest.json\"))) {\n candidates.add(normalizePath(cwdExtension));\n }\n\n if (candidates.size === 0) {\n return [null];\n }\n return [...candidates];\n};\n\nexport const getNativeStatusSnapshot = (): NativeStatus => {\n const hostScript = getHostScriptPath();\n const manifestPath = getManifestPath();\n const wrapperPath = getWrapperPath();\n const registryPath = readRegistryPath();\n\n let installed = false;\n let manifestExists = false;\n let wrapperExists = false;\n let extensionIdValue: string | null = null;\n if (fs.existsSync(manifestPath)) {\n manifestExists = true;\n installed = true;\n const manifest = readManifest(manifestPath);\n extensionIdValue = manifest.extensionId;\n }\n if (fs.existsSync(wrapperPath)) {\n wrapperExists = true;\n }\n if (!manifestExists || !wrapperExists) {\n installed = false;\n }\n if (process.platform === \"win32\" && !registryPath) {\n installed = false;\n }\n\n return {\n installed,\n manifestPath: manifestExists ? manifestPath : null,\n wrapperPath: wrapperExists ? wrapperPath : null,\n hostScriptPath: hostScript,\n extensionId: extensionIdValue,\n registryPath\n };\n};\n\nexport function discoverExtensionId(): { extensionId: string | null; matchedBy?: ExtensionIdMatchReason } {\n const extensionPaths = getExtensionPathCandidates();\n const roots = getChromeUserDataRoots();\n for (const root of roots) {\n for (const profileDir of getProfileDirs(root)) {\n let nameFallback: { id: string; matchedBy: \"name\" } | null = null;\n let commandFallback: string | null = null;\n for (const preferences of readProfilePreferences(profileDir)) {\n for (const extensionPath of extensionPaths) {\n const match = findExtensionIdInPreferences(preferences, extensionPath);\n if (!match) {\n continue;\n }\n if (match.matchedBy === \"path\") {\n return { extensionId: match.id, matchedBy: match.matchedBy };\n }\n if (!nameFallback) {\n nameFallback = { 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\nexport function installNativeHost(extensionId: string) {\n const normalized = normalizeExtensionId(extensionId);\n if (!normalized) {\n return {\n success: false,\n message: \"Invalid extension ID format. Expected 32 characters (a-p).\",\n exitCode: EXIT_EXECUTION\n };\n }\n\n const hostScript = getHostScriptPath();\n if (!fs.existsSync(hostScript)) {\n return {\n success: false,\n message: `Native host not found at ${hostScript}.`,\n exitCode: EXIT_EXECUTION\n };\n }\n\n const scriptsDir = getScriptsDir();\n const manifestPath = getManifestPath();\n const installScript = process.platform === \"win32\"\n ? path.join(scriptsDir, \"install.ps1\")\n : path.join(scriptsDir, \"install.sh\");\n\n try {\n runScript(installScript, [normalized]);\n return {\n success: true,\n message: `Native host installed for extension ${normalized}.`,\n data: { manifestPath }\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: `Native install failed: ${message}`,\n exitCode: EXIT_EXECUTION\n };\n }\n}\n\nexport async function runNativeCommand(args: ParsedArgs) {\n const { subcommand, extensionId } = parseNativeArgs(args.rawArgs);\n const scriptsDir = getScriptsDir();\n const uninstallScript = process.platform === \"win32\"\n ? path.join(scriptsDir, \"uninstall.ps1\")\n : path.join(scriptsDir, \"uninstall.sh\");\n\n if (subcommand === \"install\") {\n return installNativeHost(extensionId as string);\n }\n\n if (subcommand === \"uninstall\") {\n try {\n runScript(uninstallScript, []);\n return { success: true, message: \"Native host uninstalled.\" };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, message: `Native uninstall failed: ${message}`, exitCode: EXIT_EXECUTION };\n }\n }\n\n const data = getNativeStatusSnapshot();\n\n if (!data.installed) {\n return {\n success: false,\n message: \"Native host not installed.\",\n data,\n exitCode: EXIT_DISCONNECTED\n };\n }\n\n const message = data.extensionId\n ? `Native host installed for extension ${data.extensionId}.`\n : \"Native host installed (extension id missing).\";\n return { success: true, message, data };\n}\n\nexport const __test__ = {\n readManifest,\n getManifestDir,\n getManifestPath,\n getWrapperPath,\n getHostScriptPath,\n parseNativeArgs,\n getNativeStatusSnapshot,\n normalizeExtensionId,\n findExtensionIdInPreferences,\n getProfileDirs,\n readProfilePreferences,\n findExtensionIdInCommands,\n getExtensionPathCandidates\n};\n","import { execFileSync } from \"child_process\";\nimport { existsSync, mkdirSync, unlinkSync, writeFileSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { dirname, join, resolve } from \"path\";\nimport { fileURLToPath } from \"url\";\n\nconst MAC_LABEL = \"com.opendevbrowser.daemon\";\nconst WIN_TASK_NAME = \"OpenDevBrowser Daemon\";\n\nexport type CliEntrypoint = {\n nodePath: string;\n cliPath: string;\n args: string[];\n command: string;\n};\n\nexport type AutostartStatus = {\n platform: NodeJS.Platform;\n supported: boolean;\n installed: boolean;\n location?: string;\n taskName?: string;\n command?: string;\n label?: string;\n};\n\nexport type AutostartInstallResult = AutostartStatus;\n\nexport type AutostartDeps = {\n platform?: NodeJS.Platform;\n argv1?: string;\n moduleUrl?: string;\n uid?: number;\n homedir?: () => string;\n existsSync?: typeof existsSync;\n mkdirSync?: typeof mkdirSync;\n writeFileSync?: typeof writeFileSync;\n unlinkSync?: typeof unlinkSync;\n execFileSync?: typeof execFileSync;\n};\n\nconst defaultDeps = (): Required<AutostartDeps> => ({\n platform: process.platform,\n argv1: process.argv[1] ?? \"\",\n moduleUrl: import.meta.url,\n uid: typeof process.getuid === \"function\" ? process.getuid() : 0,\n homedir,\n existsSync,\n mkdirSync,\n writeFileSync,\n unlinkSync,\n execFileSync\n});\n\nconst resolveCliPathFromModule = (moduleUrl: string, exists: typeof existsSync): string => {\n const modulePath = fileURLToPath(moduleUrl);\n const candidate = resolve(dirname(modulePath), \"..\", \"index.js\");\n if (!exists(candidate)) {\n throw new Error(`CLI entrypoint not found at ${candidate}`);\n }\n return candidate;\n};\n\nexport const resolveCliEntrypoint = (deps: AutostartDeps = {}): CliEntrypoint => {\n const resolved = { ...defaultDeps(), ...deps };\n const exists = resolved.existsSync;\n let cliPath: string | null = null;\n\n if (resolved.argv1) {\n const candidate = resolve(resolved.argv1);\n if (exists(candidate)) {\n cliPath = candidate;\n }\n }\n\n if (!cliPath) {\n cliPath = resolveCliPathFromModule(resolved.moduleUrl, exists);\n }\n\n const nodePath = process.execPath;\n const args = [cliPath, \"serve\"];\n const command = `\"${nodePath}\" \"${cliPath}\" serve`;\n\n return { nodePath, cliPath, args, command };\n};\n\nexport const getLaunchAgentPath = (home = homedir()): string => {\n return join(home, \"Library\", \"LaunchAgents\", `${MAC_LABEL}.plist`);\n};\n\nexport const buildLaunchAgentPlist = (\n entrypoint: CliEntrypoint,\n options: { label?: string; stdoutPath?: string; stderrPath?: string } = {}\n): string => {\n const label = options.label ?? MAC_LABEL;\n const stdoutPath = options.stdoutPath ?? join(homedir(), \"Library\", \"Logs\", \"opendevbrowser-daemon.log\");\n const stderrPath = options.stderrPath ?? join(homedir(), \"Library\", \"Logs\", \"opendevbrowser-daemon.err.log\");\n const programArgs = [entrypoint.nodePath, ...entrypoint.args]\n .map((value) => ` <string>${value}</string>`)\n .join(\"\\n\");\n\n return [\n \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\",\n \"<!DOCTYPE plist PUBLIC \\\"-//Apple//DTD PLIST 1.0//EN\\\" \\\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\\\">\",\n \"<plist version=\\\"1.0\\\">\",\n \"<dict>\",\n ` <key>Label</key>`,\n ` <string>${label}</string>`,\n \" <key>ProgramArguments</key>\",\n \" <array>\",\n programArgs,\n \" </array>\",\n \" <key>RunAtLoad</key>\",\n \" <true/>\",\n \" <key>KeepAlive</key>\",\n \" <true/>\",\n \" <key>StandardOutPath</key>\",\n ` <string>${stdoutPath}</string>`,\n \" <key>StandardErrorPath</key>\",\n ` <string>${stderrPath}</string>`,\n \"</dict>\",\n \"</plist>\",\n \"\"\n ].join(\"\\n\");\n};\n\nexport const buildWindowsTaskArgs = (\n entrypoint: CliEntrypoint,\n taskName = WIN_TASK_NAME\n): { taskName: string; command: string; args: string[] } => {\n const command = `\"${entrypoint.nodePath}\" \"${entrypoint.cliPath}\" serve`;\n const args = [\n \"/Create\",\n \"/TN\",\n taskName,\n \"/TR\",\n command,\n \"/SC\",\n \"ONLOGON\",\n \"/RL\",\n \"LIMITED\",\n \"/F\"\n ];\n return { taskName, command, args };\n};\n\nconst runCommand = (\n exec: typeof execFileSync,\n command: string,\n args: string[],\n ignoreFailure = false\n): void => {\n try {\n exec(command, args, { stdio: \"ignore\" });\n } catch (error) {\n if (ignoreFailure) return;\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`${command} ${args.join(\" \")} failed: ${message}`);\n }\n};\n\nconst installMacAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n const entrypoint = resolveCliEntrypoint(resolved);\n const plistPath = getLaunchAgentPath(resolved.homedir());\n resolved.mkdirSync(dirname(plistPath), { recursive: true });\n resolved.writeFileSync(plistPath, buildLaunchAgentPlist(entrypoint), { encoding: \"utf-8\" });\n\n const uid = resolved.uid;\n runCommand(resolved.execFileSync, \"launchctl\", [\"bootout\", `gui/${uid}`, plistPath], true);\n runCommand(resolved.execFileSync, \"launchctl\", [\"bootstrap\", `gui/${uid}`, plistPath]);\n runCommand(resolved.execFileSync, \"launchctl\", [\"enable\", `gui/${uid}/${MAC_LABEL}`], true);\n runCommand(resolved.execFileSync, \"launchctl\", [\"kickstart\", \"-k\", `gui/${uid}/${MAC_LABEL}`], true);\n\n return {\n platform: \"darwin\",\n supported: true,\n installed: true,\n location: plistPath,\n label: MAC_LABEL,\n command: entrypoint.command\n };\n};\n\nconst uninstallMacAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n const plistPath = getLaunchAgentPath(resolved.homedir());\n const uid = resolved.uid;\n runCommand(resolved.execFileSync, \"launchctl\", [\"bootout\", `gui/${uid}`, plistPath], true);\n if (resolved.existsSync(plistPath)) {\n resolved.unlinkSync(plistPath);\n }\n return {\n platform: \"darwin\",\n supported: true,\n installed: false,\n location: plistPath,\n label: MAC_LABEL\n };\n};\n\nconst isWindowsTaskInstalled = (deps: AutostartDeps = {}): boolean => {\n const resolved = { ...defaultDeps(), ...deps };\n try {\n resolved.execFileSync(\"schtasks\", [\"/Query\", \"/TN\", WIN_TASK_NAME], { stdio: \"ignore\" });\n return true;\n } catch {\n return false;\n }\n};\n\nconst installWindowsAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n const entrypoint = resolveCliEntrypoint(resolved);\n const { args } = buildWindowsTaskArgs(entrypoint, WIN_TASK_NAME);\n runCommand(resolved.execFileSync, \"schtasks\", args);\n return {\n platform: \"win32\",\n supported: true,\n installed: true,\n taskName: WIN_TASK_NAME,\n command: entrypoint.command\n };\n};\n\nconst uninstallWindowsAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const resolved = { ...defaultDeps(), ...deps };\n runCommand(resolved.execFileSync, \"schtasks\", [\"/Delete\", \"/TN\", WIN_TASK_NAME, \"/F\"], true);\n return {\n platform: \"win32\",\n supported: true,\n installed: false,\n taskName: WIN_TASK_NAME\n };\n};\n\nexport const getAutostartStatus = (deps: AutostartDeps = {}): AutostartStatus => {\n const resolved = { ...defaultDeps(), ...deps };\n const platform = resolved.platform;\n\n if (platform === \"darwin\") {\n const location = getLaunchAgentPath(resolved.homedir());\n return {\n platform,\n supported: true,\n installed: resolved.existsSync(location),\n location,\n label: MAC_LABEL\n };\n }\n\n if (platform === \"win32\") {\n return {\n platform,\n supported: true,\n installed: isWindowsTaskInstalled(resolved),\n taskName: WIN_TASK_NAME\n };\n }\n\n return {\n platform,\n supported: false,\n installed: false\n };\n};\n\nexport const installAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const platform = deps.platform ?? process.platform;\n if (platform === \"darwin\") {\n return installMacAutostart(deps);\n }\n if (platform === \"win32\") {\n return installWindowsAutostart(deps);\n }\n return {\n platform,\n supported: false,\n installed: false\n };\n};\n\nexport const uninstallAutostart = (deps: AutostartDeps = {}): AutostartInstallResult => {\n const platform = deps.platform ?? process.platform;\n if (platform === \"darwin\") {\n return uninstallMacAutostart(deps);\n }\n if (platform === \"win32\") {\n return uninstallWindowsAutostart(deps);\n }\n return {\n platform,\n supported: false,\n installed: false\n };\n};\n","import type { ParsedArgs } from \"../args\";\nimport { createUsageError, EXIT_DISCONNECTED, EXIT_EXECUTION } from \"../errors\";\nimport { fetchDaemonStatusFromMetadata } from \"../daemon-status\";\nimport { readDaemonMetadata } from \"../daemon\";\nimport { fetchWithTimeout } from \"../utils/http\";\nimport { getAutostartStatus, installAutostart, uninstallAutostart } from \"../daemon-autostart\";\n\ntype DaemonSubcommand = \"install\" | \"uninstall\" | \"status\";\n\ntype DaemonResult = {\n installed: boolean;\n running: boolean;\n autostart?: ReturnType<typeof getAutostartStatus>;\n};\n\nconst parseDaemonArgs = (rawArgs: string[]): { subcommand: DaemonSubcommand } => {\n const subcommand = rawArgs[0];\n if (subcommand === \"install\" || subcommand === \"uninstall\" || subcommand === \"status\") {\n return { subcommand };\n }\n throw createUsageError(\"Usage: opendevbrowser daemon <install|uninstall|status>\");\n};\n\nconst stopDaemonIfRunning = async (): Promise<boolean> => {\n const metadata = readDaemonMetadata();\n if (!metadata) {\n return false;\n }\n try {\n const response = await fetchWithTimeout(`http://127.0.0.1:${metadata.port}/stop`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${metadata.token}` }\n });\n return response.ok;\n } catch {\n return false;\n }\n};\n\nconst buildStatusMessage = (autostart: ReturnType<typeof getAutostartStatus>, running: boolean): string => {\n if (!autostart.supported) {\n return `Daemon autostart is not supported on ${autostart.platform}.`;\n }\n\n const installed = autostart.installed ? \"installed\" : \"not installed\";\n const runningText = running ? \"running\" : \"not running\";\n const location = autostart.location ? ` at ${autostart.location}` : \"\";\n const task = autostart.taskName ? ` (${autostart.taskName})` : \"\";\n return `Autostart ${installed}${location}${task}. Daemon is ${runningText}.`;\n};\n\nexport async function runDaemonCommand(args: ParsedArgs) {\n const { subcommand } = parseDaemonArgs(args.rawArgs);\n\n if (subcommand === \"install\") {\n const result = installAutostart();\n if (!result.supported) {\n return {\n success: false,\n message: `Daemon autostart is not supported on ${result.platform}.`,\n data: result,\n exitCode: EXIT_EXECUTION\n };\n }\n return {\n success: true,\n message: `Daemon autostart installed (${result.platform}).`,\n data: result\n };\n }\n\n if (subcommand === \"uninstall\") {\n const result = uninstallAutostart();\n if (!result.supported) {\n return {\n success: false,\n message: `Daemon autostart is not supported on ${result.platform}.`,\n data: result,\n exitCode: EXIT_EXECUTION\n };\n }\n await stopDaemonIfRunning();\n return {\n success: true,\n message: `Daemon autostart removed (${result.platform}).`,\n data: result\n };\n }\n\n const autostart = getAutostartStatus();\n const daemonStatus = await fetchDaemonStatusFromMetadata();\n const running = Boolean(daemonStatus);\n const message = buildStatusMessage(autostart, running);\n const data: DaemonResult = {\n installed: autostart.installed,\n running,\n autostart: autostart.supported ? autostart : undefined\n };\n\n if (!running) {\n return {\n success: false,\n message,\n data,\n exitCode: EXIT_DISCONNECTED\n };\n }\n\n return {\n success: true,\n message,\n data: { ...data, status: daemonStatus }\n };\n}\n","import { 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 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 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 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 { readFileSync } from \"fs\";\nimport { createOpenDevBrowserCore } from \"../../core\";\nimport type { ParsedArgs } from \"../args\";\nimport { writeOutput } from \"../output\";\nimport { createUsageError, EXIT_USAGE } from \"../errors\";\n\ntype RunArgs = {\n scriptPath?: string;\n headless?: boolean;\n profile?: string;\n persistProfile?: boolean;\n chromePath?: string;\n startUrl?: string;\n flags: string[];\n};\n\nfunction parseRunArgs(rawArgs: string[]): RunArgs {\n const parsed: RunArgs = { flags: [] };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--script\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --script\");\n parsed.scriptPath = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--script=\")) {\n parsed.scriptPath = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--headless\") {\n parsed.headless = true;\n continue;\n }\n if (arg === \"--profile\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --profile\");\n parsed.profile = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--profile=\")) {\n parsed.profile = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--persist-profile\") {\n parsed.persistProfile = true;\n continue;\n }\n if (arg === \"--chrome-path\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --chrome-path\");\n parsed.chromePath = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--chrome-path=\")) {\n parsed.chromePath = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--start-url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --start-url\");\n parsed.startUrl = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--start-url=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --start-url\");\n parsed.startUrl = value;\n continue;\n }\n if (arg === \"--flag\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --flag\");\n parsed.flags.push(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--flag=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --flag\");\n parsed.flags.push(value);\n continue;\n }\n }\n return parsed;\n}\n\nfunction readScriptFromStdin(): Promise<string> {\n return new Promise((resolve, reject) => {\n let data = \"\";\n process.stdin.setEncoding(\"utf8\");\n process.stdin.on(\"data\", (chunk) => {\n data += chunk;\n });\n process.stdin.on(\"end\", () => resolve(data));\n process.stdin.on(\"error\", reject);\n });\n}\n\nexport async function runScriptCommand(args: ParsedArgs) {\n const runArgs = parseRunArgs(args.rawArgs);\n const outputOptions = { format: args.outputFormat, quiet: args.quiet };\n\n let scriptRaw = \"\";\n if (runArgs.scriptPath) {\n scriptRaw = readFileSync(runArgs.scriptPath, \"utf-8\");\n } else if (!process.stdin.isTTY) {\n scriptRaw = await readScriptFromStdin();\n } else {\n throw createUsageError(\"Provide --script <path> or pipe JSON to stdin.\");\n }\n\n let steps: Array<{ action: string; args?: Record<string, unknown> }> = [];\n try {\n const parsed = JSON.parse(scriptRaw);\n if (Array.isArray(parsed)) {\n steps = parsed;\n } else if (parsed && typeof parsed === \"object\" && Array.isArray(parsed.steps)) {\n steps = parsed.steps;\n } else {\n throw new Error(\"Script must be a JSON array or an object with steps.\");\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON script.\";\n writeOutput({ success: false, error: message, exitCode: EXIT_USAGE }, outputOptions);\n return { success: false, message, exitCode: EXIT_USAGE, data: { suppressOutput: true } };\n }\n\n const core = createOpenDevBrowserCore({ directory: process.cwd() });\n const launchResult = await core.manager.launch({\n profile: runArgs.profile,\n headless: runArgs.headless,\n startUrl: runArgs.startUrl,\n chromePath: runArgs.chromePath,\n flags: runArgs.flags.length ? runArgs.flags : undefined,\n persistProfile: runArgs.persistProfile\n });\n\n try {\n const result = await core.runner.run(launchResult.sessionId, steps, true);\n writeOutput({\n success: true,\n sessionId: launchResult.sessionId,\n warnings: launchResult.warnings.length ? launchResult.warnings : undefined,\n ...result\n }, outputOptions);\n return { success: true, data: { suppressOutput: true } };\n } finally {\n await core.manager.disconnect(launchResult.sessionId, true);\n core.cleanup();\n }\n}\n","import type { OutputFormat } from \"./args\";\n\nexport type OutputOptions = {\n format: OutputFormat;\n quiet?: boolean;\n};\n\nexport function writeOutput(payload: unknown, options: OutputOptions): void {\n if (options.quiet) {\n return;\n }\n\n if (options.format === \"text\") {\n if (typeof payload === \"string\") {\n console.log(payload);\n } else {\n console.log(JSON.stringify(payload, null, 2));\n }\n return;\n }\n\n if (options.format === \"stream-json\") {\n if (Array.isArray(payload)) {\n for (const entry of payload) {\n console.log(JSON.stringify(entry));\n }\n return;\n }\n }\n\n console.log(JSON.stringify(payload));\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseNumberFlag } from \"../../utils/parse\";\n\ntype LaunchArgs = {\n profile?: string;\n headless?: boolean;\n startUrl?: string;\n chromePath?: string;\n flags: string[];\n persistProfile?: boolean;\n noExtension?: boolean;\n extensionOnly?: boolean;\n waitForExtension?: boolean;\n waitTimeoutMs?: number;\n extensionLegacy?: boolean;\n};\n\nconst MIN_LAUNCH_CALL_TIMEOUT_MS = 30_000;\nconst LAUNCH_CALL_TIMEOUT_BUFFER_MS = 5_000;\n\nconst parseBooleanFlag = (value: string, flag: string): boolean => {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\") return true;\n if (normalized === \"false\" || normalized === \"0\") return false;\n throw createUsageError(`Invalid ${flag}: ${value}`);\n};\n\nfunction parseLaunchArgs(rawArgs: string[]): LaunchArgs {\n const parsed: LaunchArgs = { flags: [] };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--headless\") {\n parsed.headless = true;\n continue;\n }\n if (arg === \"--profile\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --profile\");\n parsed.profile = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--profile=\")) {\n parsed.profile = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--start-url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --start-url\");\n parsed.startUrl = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--start-url=\")) {\n parsed.startUrl = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--chrome-path\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --chrome-path\");\n parsed.chromePath = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--chrome-path=\")) {\n parsed.chromePath = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--persist-profile\") {\n 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 return Math.max(MIN_LAUNCH_CALL_TIMEOUT_MS, waitHintMs);\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 headless?: boolean;\n extensionLegacy?: boolean;\n};\n\nfunction parseConnectArgs(rawArgs: string[]): ConnectArgs {\n const parsed: ConnectArgs = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--ws-endpoint\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ws-endpoint\");\n parsed.wsEndpoint = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ws-endpoint=\")) {\n parsed.wsEndpoint = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--host\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --host\");\n parsed.host = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--host=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --host\");\n parsed.host = value;\n continue;\n }\n if (arg === \"--cdp-port\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --cdp-port\");\n parsed.port = parseNumberFlag(value, \"--cdp-port\", { min: 1, max: 65535 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--cdp-port=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --cdp-port\");\n parsed.port = parseNumberFlag(value, \"--cdp-port\", { min: 1, max: 65535 });\n continue;\n }\n if (arg === \"--extension-legacy\") {\n parsed.extensionLegacy = true;\n continue;\n }\n 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) as { sessionId: string };\n return {\n success: true,\n message: `Session connected: ${result.sessionId}`,\n data: result\n };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDisconnectArgs(rawArgs: string[]): { sessionId?: string; closeBrowser?: boolean } {\n const parsed: { sessionId?: string; closeBrowser?: boolean } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--close-browser\") {\n parsed.closeBrowser = true;\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionDisconnect(args: ParsedArgs) {\n const { sessionId, closeBrowser } = parseDisconnectArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n await callDaemon(\"session.disconnect\", { sessionId, closeBrowser }, { timeoutMs: 20000 });\n return { success: true, message: `Session disconnected: ${sessionId}` };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseStatusArgs(rawArgs: string[]): { sessionId?: string } {\n const parsed: { sessionId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionStatus(args: ParsedArgs) {\n const { sessionId } = parseStatusArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n const result = await callDaemon(\"session.status\", { sessionId });\n return { success: true, message: `Session status: ${sessionId}`, data: result };\n}\n","import type { ParsedArgs } from \"../args\";\nimport { createUsageError, EXIT_DISCONNECTED } from \"../errors\";\nimport { fetchDaemonStatusFromMetadata } from \"../daemon-status\";\nimport { runSessionStatus } from \"./session/status\";\nimport { getNativeStatusSnapshot } from \"./native\";\n\ntype StatusArgs = {\n sessionId?: string;\n daemon: boolean;\n};\n\nconst parseStatusArgs = (rawArgs: string[]): StatusArgs => {\n const parsed: StatusArgs = { daemon: false };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--daemon\") {\n parsed.daemon = true;\n continue;\n }\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n};\n\nexport async function runStatus(args: ParsedArgs) {\n const { sessionId, daemon } = parseStatusArgs(args.rawArgs);\n if (sessionId && daemon) {\n throw createUsageError(\"Use --session-id or --daemon, not both.\");\n }\n\n if (sessionId) {\n return runSessionStatus(args);\n }\n\n if (!daemon && args.transport === \"native\") {\n const nativeStatus = getNativeStatusSnapshot();\n if (!nativeStatus.installed) {\n return {\n success: false,\n message: \"Native host not installed.\",\n data: nativeStatus,\n exitCode: EXIT_DISCONNECTED\n };\n }\n return {\n success: true,\n message: nativeStatus.extensionId\n ? `Native host installed for extension ${nativeStatus.extensionId}.`\n : \"Native host installed.\",\n data: nativeStatus\n };\n }\n\n const daemonStatus = await fetchDaemonStatusFromMetadata();\n if (!daemonStatus) {\n throw createUsageError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n\n const nativeStatus = getNativeStatusSnapshot();\n\n const baseMessage = [\n `Daemon OK (pid=${daemonStatus.pid})`,\n `Relay: port=${daemonStatus.relay.port ?? \"n/a\"} ext=${daemonStatus.relay.extensionConnected ? \"on\" : \"off\"} ` +\n `handshake=${daemonStatus.relay.extensionHandshakeComplete ? \"on\" : \"off\"} ` +\n `cdp=${daemonStatus.relay.cdpConnected ? \"on\" : \"off\"} ` +\n `annotate=${daemonStatus.relay.annotationConnected ? \"on\" : \"off\"} ` +\n `ops=${daemonStatus.relay.opsConnected ? \"on\" : \"off\"} ` +\n `pairing=${daemonStatus.relay.pairingRequired ? \"on\" : \"off\"} ` +\n `health=${daemonStatus.relay.health?.reason ?? \"n/a\"}`,\n `Native: ${nativeStatus.installed ? \"installed\" : \"not installed\"}${nativeStatus.extensionId ? ` (${nativeStatus.extensionId})` : \"\"}`,\n daemonStatus.relay.lastHandshakeError\n ? `Relay last handshake error: ${daemonStatus.relay.lastHandshakeError.code} (${daemonStatus.relay.lastHandshakeError.message})`\n : \"Relay last handshake error: none\",\n \"Legend: ext=extension websocket, handshake=extension handshake, cdp=active /cdp client, annotate=annotation channel, ops=ops clients, pairing=token required, health=relay status\"\n ].join(\"\\n\");\n\n const message = daemon || args.outputFormat !== \"text\"\n ? baseMessage\n : [\n \"Warning: `status` defaults to daemon status. Use --daemon explicitly or --session-id for session status.\",\n baseMessage\n ].join(\"\\n\");\n\n return {\n success: true,\n message,\n data: { ...daemonStatus, native: nativeStatus }\n };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseNumberFlag } from \"../../utils/parse\";\n\nfunction parseGotoArgs(rawArgs: string[]): { sessionId?: string; url?: string; waitUntil?: string; timeoutMs?: number } {\n const parsed: { sessionId?: string; url?: string; waitUntil?: string; timeoutMs?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --url\");\n parsed.url = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--url=\")) {\n parsed.url = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--wait-until\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --wait-until\");\n parsed.waitUntil = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--wait-until=\")) {\n parsed.waitUntil = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--timeout-ms\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --timeout-ms\");\n parsed.timeoutMs = parseNumberFlag(value, \"--timeout-ms\", { min: 1 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --timeout-ms\");\n parsed.timeoutMs = parseNumberFlag(value, \"--timeout-ms\", { min: 1 });\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runGoto(args: ParsedArgs) {\n const { sessionId, url, waitUntil, timeoutMs } = parseGotoArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!url) throw createUsageError(\"Missing --url\");\n const result = await callDaemon(\"nav.goto\", { sessionId, url, waitUntil, timeoutMs });\n return { success: true, message: `Navigated: ${url}`, data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseNumberFlag } from \"../../utils/parse\";\n\nfunction parseWaitArgs(rawArgs: string[]): { sessionId?: string; ref?: string; state?: string; until?: string; timeoutMs?: number } {\n const parsed: { sessionId?: string; ref?: string; state?: string; until?: string; timeoutMs?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--state\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --state\");\n parsed.state = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--state=\")) {\n parsed.state = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--until\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --until\");\n parsed.until = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--until=\")) {\n parsed.until = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--timeout-ms\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --timeout-ms\");\n parsed.timeoutMs = parseNumberFlag(value, \"--timeout-ms\", { min: 1 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --timeout-ms\");\n parsed.timeoutMs = parseNumberFlag(value, \"--timeout-ms\", { min: 1 });\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runWait(args: ParsedArgs) {\n const { sessionId, ref, state, until, timeoutMs } = parseWaitArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"nav.wait\", { sessionId, ref, state, until, timeoutMs });\n return { success: true, message: \"Wait complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseSnapshotArgs(rawArgs: string[]): { sessionId?: string; mode?: string; maxChars?: number; cursor?: string } {\n const parsed: { sessionId?: string; mode?: string; maxChars?: number; cursor?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--mode\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --mode\");\n parsed.mode = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--mode=\")) {\n parsed.mode = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--max-chars\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --max-chars\");\n parsed.maxChars = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--max-chars=\")) {\n parsed.maxChars = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n if (arg === \"--cursor\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --cursor\");\n parsed.cursor = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--cursor=\")) {\n parsed.cursor = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSnapshot(args: ParsedArgs) {\n const { sessionId, mode, maxChars, cursor } = parseSnapshotArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"nav.snapshot\", { sessionId, mode, maxChars, cursor });\n return { success: true, message: \"Snapshot captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../args\";\nimport { createUsageError } from \"../errors\";\nimport { parseNumberFlag } from \"../utils/parse\";\nimport { DaemonClient } from \"../daemon-client\";\nimport { buildAnnotateResult } from \"../../annotate/output\";\nimport type { AnnotationResponse, AnnotationTransport } from \"../../relay/protocol\";\n\ntype AnnotateArgs = {\n sessionId?: string;\n url?: string;\n screenshotMode?: \"visible\" | \"full\" | \"none\";\n debug?: boolean;\n context?: string;\n timeoutMs?: number;\n transport?: AnnotationTransport;\n targetId?: string;\n tabId?: number;\n};\n\nconst requireValue = (value: string | undefined, flag: string): string => {\n if (!value) throw createUsageError(`Missing value for ${flag}`);\n return value;\n};\n\nconst requireScreenshotMode = (value: string): \"visible\" | \"full\" | \"none\" => {\n if (value === \"visible\" || value === \"full\" || value === \"none\") {\n return value;\n }\n throw createUsageError(`Invalid --screenshot-mode: ${value}`);\n};\n\nconst requireTransport = (value: string): AnnotationTransport => {\n if (value === \"auto\" || value === \"direct\" || value === \"relay\") {\n return value;\n }\n throw createUsageError(`Invalid --transport: ${value}`);\n};\n\nexport const parseAnnotateArgs = (rawArgs: string[]): AnnotateArgs => {\n const parsed: AnnotateArgs = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = requireValue(rawArgs[i + 1], \"--session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--session-id\");\n parsed.sessionId = value;\n continue;\n }\n if (arg === \"--url\") {\n const value = requireValue(rawArgs[i + 1], \"--url\");\n parsed.url = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--url=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--url\");\n parsed.url = value;\n continue;\n }\n if (arg === \"--screenshot-mode\") {\n const value = requireValue(rawArgs[i + 1], \"--screenshot-mode\");\n parsed.screenshotMode = requireScreenshotMode(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--screenshot-mode=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--screenshot-mode\");\n parsed.screenshotMode = requireScreenshotMode(value);\n continue;\n }\n if (arg === \"--transport\") {\n const value = requireValue(rawArgs[i + 1], \"--transport\");\n parsed.transport = requireTransport(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--transport=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--transport\");\n parsed.transport = requireTransport(value);\n continue;\n }\n if (arg === \"--target-id\") {\n const value = requireValue(rawArgs[i + 1], \"--target-id\");\n parsed.targetId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--target-id=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--target-id\");\n parsed.targetId = value;\n continue;\n }\n if (arg === \"--tab-id\") {\n const value = requireValue(rawArgs[i + 1], \"--tab-id\");\n parsed.tabId = parseNumberFlag(value, \"--tab-id\", { min: 1 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--tab-id=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--tab-id\");\n parsed.tabId = parseNumberFlag(value, \"--tab-id\", { min: 1 });\n continue;\n }\n if (arg === \"--debug\") {\n parsed.debug = true;\n continue;\n }\n if (arg === \"--context\") {\n const value = requireValue(rawArgs[i + 1], \"--context\");\n parsed.context = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--context=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--context\");\n parsed.context = value;\n continue;\n }\n if (arg === \"--timeout-ms\") {\n const value = requireValue(rawArgs[i + 1], \"--timeout-ms\");\n parsed.timeoutMs = parseNumberFlag(value, \"--timeout-ms\", { min: 1 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n const value = requireValue(arg.split(\"=\", 2)[1], \"--timeout-ms\");\n parsed.timeoutMs = parseNumberFlag(value, \"--timeout-ms\", { min: 1 });\n continue;\n }\n }\n return parsed;\n};\n\nexport async function runAnnotate(args: ParsedArgs) {\n const { sessionId, url, screenshotMode, debug, context, timeoutMs, transport, targetId, tabId } = parseAnnotateArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n\n const client = new DaemonClient({ autoRenew: true });\n const callTimeoutMs = typeof timeoutMs === \"number\" ? timeoutMs + 10_000 : undefined;\n\n try {\n const response = await client.call<AnnotationResponse>(\"annotate\", {\n sessionId,\n transport,\n targetId,\n tabId,\n url,\n screenshotMode,\n debug,\n context,\n timeoutMs\n }, { timeoutMs: callTimeoutMs });\n\n if (response.status !== \"ok\" || !response.payload) {\n const message = response.error?.message ?? \"Annotation failed.\";\n throw new Error(message);\n }\n\n const { message, details, screenshots } = await buildAnnotateResult(response.payload);\n return { success: true, message, data: { details, screenshots } };\n } finally {\n await client.releaseBinding().catch(() => {});\n }\n}\n","import { 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\";\n\nfunction parseClickArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runClick(args: ParsedArgs) {\n const { sessionId, ref } = parseClickArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.click\", { sessionId, ref });\n return { success: true, message: \"Click complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseHoverArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runHover(args: ParsedArgs) {\n const { sessionId, ref } = parseHoverArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.hover\", { sessionId, ref });\n return { success: true, message: \"Hover complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parsePressArgs(rawArgs: string[]): { sessionId?: string; key?: string; ref?: string } {\n const parsed: { sessionId?: string; key?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--key\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --key\");\n parsed.key = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--key=\")) {\n parsed.key = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runPress(args: ParsedArgs) {\n const { sessionId, key, ref } = parsePressArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!key) throw createUsageError(\"Missing --key\");\n const result = await callDaemon(\"interact.press\", { sessionId, key, ref });\n return { success: true, message: \"Key press complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseCheckArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runCheck(args: ParsedArgs) {\n const { sessionId, ref } = parseCheckArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.check\", { sessionId, ref });\n return { success: true, message: \"Check complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseUncheckArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runUncheck(args: ParsedArgs) {\n const { sessionId, ref } = parseUncheckArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.uncheck\", { sessionId, ref });\n return { success: true, message: \"Uncheck complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseTypeArgs(rawArgs: string[]): { sessionId?: string; ref?: string; text?: string; clear?: boolean; submit?: boolean } {\n const parsed: { sessionId?: string; ref?: string; text?: string; clear?: boolean; submit?: boolean } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--text\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --text\");\n parsed.text = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--text=\")) {\n parsed.text = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--clear\") {\n parsed.clear = true;\n continue;\n }\n if (arg === \"--submit\") {\n parsed.submit = true;\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runType(args: ParsedArgs) {\n const { sessionId, ref, text, clear, submit } = parseTypeArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n if (!text) throw createUsageError(\"Missing --text\");\n const result = await callDaemon(\"interact.type\", { sessionId, ref, text, clear, submit });\n return { success: true, message: \"Type complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseSelectArgs(rawArgs: string[]): { sessionId?: string; ref?: string; values?: string[] } {\n const parsed: { sessionId?: string; ref?: string; values?: string[] } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--values\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --values\");\n parsed.values = value.split(\",\").map((entry) => entry.trim()).filter(Boolean);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--values=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) throw createUsageError(\"Missing value for --values\");\n parsed.values = value.split(\",\").map((entry) => entry.trim()).filter(Boolean);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSelect(args: ParsedArgs) {\n const { sessionId, ref, values } = parseSelectArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n if (!values || values.length === 0) throw createUsageError(\"Missing --values\");\n const result = await callDaemon(\"interact.select\", { sessionId, ref, values });\n return { success: true, message: \"Select complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseScrollArgs(rawArgs: string[]): { sessionId?: string; ref?: string; dy?: number } {\n const parsed: { sessionId?: string; ref?: string; dy?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--dy\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --dy\");\n parsed.dy = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--dy=\")) {\n parsed.dy = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runScroll(args: ParsedArgs) {\n const { sessionId, ref, dy } = parseScrollArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (typeof dy !== \"number\" || Number.isNaN(dy)) throw createUsageError(\"Missing --dy\");\n const result = await callDaemon(\"interact.scroll\", { sessionId, ref, dy });\n return { success: true, message: \"Scroll complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseScrollIntoViewArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runScrollIntoView(args: ParsedArgs) {\n const { sessionId, ref } = parseScrollIntoViewArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"interact.scrollIntoView\", { sessionId, ref });\n return { success: true, message: \"Scroll into view complete.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseTargetsListArgs(rawArgs: string[]): { sessionId?: string; includeUrls?: boolean } {\n const parsed: { sessionId?: string; includeUrls?: boolean } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--include-urls\") {\n parsed.includeUrls = true;\n }\n }\n return parsed;\n}\n\nexport async function runTargetsList(args: ParsedArgs) {\n const { sessionId, includeUrls } = parseTargetsListArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"targets.list\", { sessionId, includeUrls });\n return { success: true, message: `Targets listed for session: ${sessionId}`, data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseTargetUseArgs(rawArgs: string[]): { sessionId?: string; targetId?: string } {\n const parsed: { sessionId?: string; targetId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--target-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --target-id\");\n parsed.targetId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--target-id=\")) {\n parsed.targetId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runTargetUse(args: ParsedArgs) {\n const { sessionId, targetId } = parseTargetUseArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!targetId) throw createUsageError(\"Missing --target-id\");\n const result = await callDaemon(\"targets.use\", { sessionId, targetId });\n return { success: true, message: `Target selected: ${targetId}`, data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseTargetNewArgs(rawArgs: string[]): { sessionId?: string; url?: string } {\n const parsed: { sessionId?: string; url?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --url\");\n parsed.url = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--url=\")) {\n parsed.url = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runTargetNew(args: ParsedArgs) {\n const { sessionId, url } = parseTargetNewArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"targets.new\", { sessionId, url });\n return { success: true, message: \"Target created.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseTargetCloseArgs(rawArgs: string[]): { sessionId?: string; targetId?: string } {\n const parsed: { sessionId?: string; targetId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--target-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --target-id\");\n parsed.targetId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--target-id=\")) {\n parsed.targetId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runTargetClose(args: ParsedArgs) {\n const { sessionId, targetId } = parseTargetCloseArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!targetId) throw createUsageError(\"Missing --target-id\");\n await callDaemon(\"targets.close\", { sessionId, targetId });\n return { success: true, message: `Target closed: ${targetId}` };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parsePageOpenArgs(rawArgs: string[]): { sessionId?: string; name?: string; url?: string } {\n const parsed: { sessionId?: string; name?: string; url?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--name\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --name\");\n parsed.name = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--name=\")) {\n parsed.name = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--url\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --url\");\n parsed.url = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--url=\")) {\n parsed.url = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runPageOpen(args: ParsedArgs) {\n const { sessionId, name, url } = parsePageOpenArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!name) throw createUsageError(\"Missing --name\");\n const result = await callDaemon(\"page.open\", { sessionId, name, url });\n return { success: true, message: `Page ready: ${name}`, data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parsePagesListArgs(rawArgs: string[]): { sessionId?: string } {\n const parsed: { sessionId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runPagesList(args: ParsedArgs) {\n const { sessionId } = parsePagesListArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"page.list\", { sessionId });\n return { success: true, message: `Pages listed for session: ${sessionId}`, data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parsePageCloseArgs(rawArgs: string[]): { sessionId?: string; name?: string } {\n const parsed: { sessionId?: string; name?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--name\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --name\");\n parsed.name = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--name=\")) {\n parsed.name = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runPageClose(args: ParsedArgs) {\n const { sessionId, name } = parsePageCloseArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!name) throw createUsageError(\"Missing --name\");\n await callDaemon(\"page.close\", { sessionId, name });\n return { success: true, message: `Page closed: ${name}` };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDomHtmlArgs(rawArgs: string[]): { sessionId?: string; ref?: string; maxChars?: number } {\n const parsed: { sessionId?: string; ref?: string; maxChars?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--max-chars\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --max-chars\");\n parsed.maxChars = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--max-chars=\")) {\n parsed.maxChars = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runDomHtml(args: ParsedArgs) {\n const { sessionId, ref, maxChars } = parseDomHtmlArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.getHtml\", { sessionId, ref, maxChars });\n return { success: true, message: \"DOM HTML captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDomTextArgs(rawArgs: string[]): { sessionId?: string; ref?: string; maxChars?: number } {\n const parsed: { sessionId?: string; ref?: string; maxChars?: number } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--max-chars\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --max-chars\");\n parsed.maxChars = Number(value);\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--max-chars=\")) {\n parsed.maxChars = Number(arg.split(\"=\", 2)[1]);\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runDomText(args: ParsedArgs) {\n const { sessionId, ref, maxChars } = parseDomTextArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.getText\", { sessionId, ref, maxChars });\n return { success: true, message: \"DOM text captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDomAttrArgs(rawArgs: string[]): { sessionId?: string; ref?: string; attr?: string } {\n const parsed: { sessionId?: string; ref?: string; attr?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--attr\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --attr\");\n parsed.attr = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--attr=\")) {\n parsed.attr = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runDomAttr(args: ParsedArgs) {\n const { sessionId, ref, attr } = parseDomAttrArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n if (!attr) throw createUsageError(\"Missing --attr\");\n const result = await callDaemon(\"dom.getAttr\", { sessionId, ref, name: attr });\n return { success: true, message: \"DOM attribute captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDomValueArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runDomValue(args: ParsedArgs) {\n const { sessionId, ref } = parseDomValueArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.getValue\", { sessionId, ref });\n return { success: true, message: \"DOM value captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDomVisibleArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runDomVisible(args: ParsedArgs) {\n const { sessionId, ref } = parseDomVisibleArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.isVisible\", { sessionId, ref });\n return { success: true, message: \"Visibility checked.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDomEnabledArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runDomEnabled(args: ParsedArgs) {\n const { sessionId, ref } = parseDomEnabledArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.isEnabled\", { sessionId, ref });\n return { success: true, message: \"Enabled state checked.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseDomCheckedArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runDomChecked(args: ParsedArgs) {\n const { sessionId, ref } = parseDomCheckedArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"dom.isChecked\", { sessionId, ref });\n return { success: true, message: \"Checked state reported.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseClonePageArgs(rawArgs: string[]): { sessionId?: string } {\n const parsed: { sessionId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runClonePage(args: ParsedArgs) {\n const { sessionId } = parseClonePageArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"export.clonePage\", { sessionId });\n return { success: true, message: \"Page cloned.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseCloneComponentArgs(rawArgs: string[]): { sessionId?: string; ref?: string } {\n const parsed: { sessionId?: string; ref?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n if (arg === \"--ref\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --ref\");\n parsed.ref = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--ref=\")) {\n parsed.ref = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runCloneComponent(args: ParsedArgs) {\n const { sessionId, ref } = parseCloneComponentArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n if (!ref) throw createUsageError(\"Missing --ref\");\n const result = await callDaemon(\"export.cloneComponent\", { sessionId, ref });\n return { success: true, message: \"Component cloned.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parsePerfArgs(rawArgs: string[]): { sessionId?: string } {\n const parsed: { sessionId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runPerf(args: ParsedArgs) {\n const { sessionId } = parsePerfArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const result = await callDaemon(\"devtools.perf\", { sessionId });\n return { success: true, message: \"Performance metrics captured.\", data: result };\n}\n","import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseNumberFlag } from \"../../utils/parse\";\n\ntype ScreenshotArgs = {\n sessionId?: string;\n path?: string;\n timeoutMs?: 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\nfunction parseScreenshotArgs(rawArgs: string[]): ScreenshotArgs {\n const parsed: ScreenshotArgs = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n parsed.sessionId = requireValue(rawArgs[i + 1], \"--session-id\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = requireValue(arg.split(\"=\", 2)[1], \"--session-id\");\n continue;\n }\n if (arg === \"--path\") {\n parsed.path = requireValue(rawArgs[i + 1], \"--path\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--path=\")) {\n parsed.path = requireValue(arg.split(\"=\", 2)[1], \"--path\");\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 continue;\n }\n }\n return parsed;\n}\n\nexport async function runScreenshot(args: ParsedArgs) {\n const { sessionId, path, timeoutMs } = parseScreenshotArgs(args.rawArgs);\n if (!sessionId) throw createUsageError(\"Missing --session-id\");\n const params = { sessionId, path };\n const result = typeof timeoutMs === \"number\"\n ? await callDaemon(\"page.screenshot\", params, { timeoutMs })\n : await callDaemon(\"page.screenshot\", params);\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\";\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 { 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 { parseNumberFlag } from \"../utils/parse\";\n\ntype MacroResolveArgs = {\n expression?: string;\n defaultProvider?: string;\n includeCatalog?: boolean;\n execute?: boolean;\n timeoutMs?: number;\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 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\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 };\n const result = typeof parsed.timeoutMs === \"number\"\n ? await callDaemon(\"macro.resolve\", params, { timeoutMs: parsed.timeoutMs })\n : await callDaemon(\"macro.resolve\", params);\n\n return {\n success: true,\n message: parsed.execute ? \"Macro resolved and executed.\" : \"Macro resolved.\",\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\";\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 outputDir?: string;\n ttlHours?: number;\n useCookies?: boolean;\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\"]);\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 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 === \"--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 === \"--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 data = await callDaemon(\"research.run\", {\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 outputDir: parsed.outputDir,\n ttlHours: parsed.ttlHours,\n useCookies: parsed.useCookies,\n cookiePolicyOverride: parsed.cookiePolicyOverride\n });\n\n return {\n success: true,\n message: \"Research workflow completed.\",\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\";\n\ntype ShoppingCommandArgs = {\n query?: string;\n providers?: string[];\n budget?: number;\n region?: string;\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 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\"]);\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 === \"--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 === \"--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 sort: parsed.sort,\n mode: parsed.mode ?? \"compact\",\n ...(typeof parsed.timeoutMs === \"number\" ? { timeoutMs: parsed.timeoutMs } : {}),\n outputDir: parsed.outputDir,\n ttlHours: parsed.ttlHours,\n useCookies: parsed.useCookies,\n cookiePolicyOverride: parsed.cookiePolicyOverride\n };\n\n const data = typeof parsed.timeoutMs === \"number\"\n ? await callDaemon(\"shopping.run\", payload, { timeoutMs: parsed.timeoutMs })\n : await callDaemon(\"shopping.run\", payload);\n\n return {\n success: true,\n message: \"Shopping workflow completed.\",\n data\n };\n}\n\nexport const __test__ = {\n parseShoppingRunArgs,\n parseProviders\n};\n","import type { ParsedArgs } from \"../args\";\nimport { callDaemon } from \"../client\";\nimport { createUsageError } from \"../errors\";\nimport { parseNumberFlag } from \"../utils/parse\";\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 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\"]);\n\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 === \"--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 ?? 120000;\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 useCookies: parsed.useCookies,\n cookiePolicyOverride: parsed.cookiePolicyOverride\n }, { timeoutMs });\n\n return {\n success: true,\n message: \"Product video asset workflow completed.\",\n data\n };\n}\n\nexport const __test__ = {\n parseProductVideoArgs,\n parseBoolean\n};\n","{\n \"name\": \"opendevbrowser\",\n \"version\": \"0.0.16\",\n \"description\": \"OpenCode plugin for browser automation via CDP with snapshot-refs-actions workflow\",\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/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 ],\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\": \"tsup src/index.ts src/cli/index.ts --format esm --clean --sourcemap && tsc --emitDeclarationOnly --declaration --declarationMap -p tsconfig.json && node --input-type=module -e \\\"import { copyFileSync, existsSync } from 'node:fs';\\nimport { resolve } from 'node:path';\\nconst dist = resolve('dist');\\nconst pairs = [\\n ['index.js', 'opendevbrowser.js'],\\n ['index.js.map', 'opendevbrowser.js.map'],\\n ['index.d.ts', 'opendevbrowser.d.ts'],\\n ['index.d.ts.map', 'opendevbrowser.d.ts.map'],\\n];\\nfor (const [src, dst] of pairs) {\\n const from = resolve(dist, src);\\n const to = resolve(dist, dst);\\n if (existsSync(from)) copyFileSync(from, to);\\n}\\\"\",\n \"dev\": \"tsup src/index.ts src/cli/index.ts --format esm --dts --watch\",\n \"lint\": \"eslint \\\"src/**/*.ts\\\" \\\"tests/**/*.ts\\\"\",\n \"typecheck\": \"tsc --noEmit -p tsconfig.json\",\n \"test\": \"vitest run --coverage\",\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 && 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 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.11\",\n \"@puppeteer/browsers\": \"^2.13.0\",\n \"async-mutex\": \"^0.5.0\",\n \"jsonc-parser\": \"^3.2.0\",\n \"playwright-core\": \"^1.58.2\",\n \"ws\": \"^8.19.0\",\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 \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.18\"\n }\n}\n","#!/usr/bin/env node\n\nimport { parseArgs, detectOutputFormat } from \"./args\";\nimport type { OutputFormat } from \"./args\";\nimport { getHelpText } from \"./help\";\nimport { registerCommand, getCommand } from \"./commands/registry\";\nimport type { CommandResult } from \"./commands/types\";\nimport { installGlobal } from \"./installers/global\";\nimport { installLocal } from \"./installers/local\";\nimport { installSkills } from \"./installers/skills\";\nimport { runUpdate } from \"./commands/update\";\nimport { runUninstall, findInstalledConfigs } from \"./commands/uninstall\";\nimport { runServe } from \"./commands/serve\";\nimport { runDaemonCommand } from \"./commands/daemon\";\nimport { runNativeCommand } from \"./commands/native\";\nimport { runArtifactsCommand } from \"./commands/artifacts\";\nimport { getAutostartStatus, installAutostart } from \"./daemon-autostart\";\nimport { runScriptCommand } from \"./commands/run\";\nimport { runSessionLaunch } from \"./commands/session/launch\";\nimport { runSessionConnect } from \"./commands/session/connect\";\nimport { runSessionDisconnect } from \"./commands/session/disconnect\";\nimport { runStatus } from \"./commands/status\";\nimport { runGoto } from \"./commands/nav/goto\";\nimport { runWait } from \"./commands/nav/wait\";\nimport { runSnapshot } from \"./commands/nav/snapshot\";\nimport { runAnnotate } from \"./commands/annotate\";\nimport { 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 { runTargetsList } from \"./commands/targets/list\";\nimport { runTargetUse } from \"./commands/targets/use\";\nimport { runTargetNew } from \"./commands/targets/new\";\nimport { runTargetClose } from \"./commands/targets/close\";\nimport { runPageOpen } from \"./commands/pages/open\";\nimport { runPagesList } from \"./commands/pages/list\";\nimport { runPageClose } from \"./commands/pages/close\";\nimport { runDomHtml } from \"./commands/dom/html\";\nimport { runDomText } from \"./commands/dom/text\";\nimport { runDomAttr } from \"./commands/dom/attr\";\nimport { runDomValue } from \"./commands/dom/value\";\nimport { runDomVisible } from \"./commands/dom/visible\";\nimport { runDomEnabled } from \"./commands/dom/enabled\";\nimport { runDomChecked } from \"./commands/dom/checked\";\nimport { runClonePage } from \"./commands/export/clone-page\";\nimport { runCloneComponent } from \"./commands/export/clone-component\";\nimport { runPerf } from \"./commands/devtools/perf\";\nimport { runScreenshot } from \"./commands/devtools/screenshot\";\nimport { runConsolePoll } from \"./commands/devtools/console-poll\";\nimport { runNetworkPoll } from \"./commands/devtools/network-poll\";\nimport { runDebugTraceSnapshot } from \"./commands/devtools/debug-trace-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 { extractExtension } from \"../extension-extractor\";\nimport { writeOutput } from \"./output\";\nimport type { InstallMode } from \"./args\";\nimport { formatErrorPayload, resolveExitCode, toCliError, EXIT_EXECUTION, EXIT_USAGE } from \"./errors\";\nimport type { CliError } from \"./errors\";\nimport packageJson from \"../../package.json\";\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 const outputOptions = { format: args.outputFormat, quiet: args.quiet };\n\n const emitResult = (result: CommandResult, payload?: Record<string, unknown>) => {\n const suppressOutput = Boolean(\n result.data\n && typeof result.data === \"object\"\n && \"suppressOutput\" in result.data\n && (result.data as { suppressOutput?: boolean }).suppressOutput\n );\n if (suppressOutput) {\n return;\n }\n if (args.outputFormat === \"text\") {\n if (result.message) {\n writeOutput(result.message, outputOptions);\n }\n } else {\n const exitCode = resolveExitCode(result);\n writeOutput({\n success: result.success,\n message: result.message,\n ...(result.success || !result.message ? {} : { error: result.message }),\n ...(result.success || exitCode === null ? {} : { exitCode }),\n ...payload\n }, outputOptions);\n }\n };\n\n registerCommand({\n name: \"help\",\n description: \"Show help\",\n run: () => ({ success: true, message: getHelpText() })\n });\n\n registerCommand({\n name: \"version\",\n description: \"Show version\",\n run: () => ({ success: true, message: `opendevbrowser v${VERSION}` })\n });\n\n registerCommand({\n name: \"update\",\n description: \"Clear cached plugin to trigger reinstall\",\n run: () => {\n const result = runUpdate();\n return { success: result.success, message: result.message };\n }\n });\n\n registerCommand({\n name: \"uninstall\",\n description: \"Remove plugin from config\",\n run: async () => {\n let mode = args.mode;\n if (!mode && !args.noPrompt) {\n mode = await promptUninstallMode() ?? undefined;\n if (!mode) {\n return { success: true, message: \"Uninstall cancelled.\" };\n }\n }\n if (!mode) {\n return { success: false, message: \"Error: Please specify --global or --local for uninstall.\", exitCode: EXIT_USAGE };\n }\n const result = runUninstall(mode);\n return { success: result.success, message: result.message };\n }\n });\n\n registerCommand({\n name: \"install\",\n description: \"Install the plugin\",\n run: async () => {\n const log = (...values: unknown[]) => {\n if (args.quiet) return;\n console.log(...values);\n };\n const warn = (...values: unknown[]) => {\n if (args.quiet) return;\n console.warn(...values);\n };\n\n let mode = args.mode;\n if (!mode) {\n mode = await promptInstallMode();\n }\n\n const result = mode === \"global\"\n ? installGlobal(args.withConfig)\n : installLocal(args.withConfig);\n\n const maybeInstallAutostart = () => {\n const status = getAutostartStatus();\n if (!status.supported) {\n return { status, installed: false, message: `Autostart not supported on ${status.platform}.` };\n }\n if (status.installed) {\n return { status, installed: true, message: \"Autostart already installed.\" };\n }\n try {\n const result = installAutostart();\n return { status: result, installed: result.installed, message: `Autostart installed (${result.platform}).` };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { status, installed: false, message };\n }\n };\n\n if (args.outputFormat !== \"text\") {\n const payload: Record<string, unknown> = {\n alreadyInstalled: result.alreadyInstalled\n };\n\n if (result.success && args.skillsMode !== \"none\") {\n const skillsResult = installSkills(args.skillsMode);\n payload.skills = skillsResult;\n }\n\n if (args.fullInstall && result.success) {\n try {\n const extensionPath = extractExtension();\n payload.extensionPath = extensionPath;\n } catch (error) {\n payload.extensionError = error instanceof Error ? error.message : String(error);\n }\n }\n\n if (result.success && !result.alreadyInstalled) {\n const autostart = maybeInstallAutostart();\n payload.autostart = autostart.status;\n if (!autostart.installed) {\n payload.autostartError = autostart.message;\n }\n }\n\n return { success: result.success, message: result.message, data: payload };\n }\n\n log(result.message);\n\n if (args.skillsMode === \"none\") {\n log(\"Skill installation skipped (--no-skills).\");\n } else if (result.success) {\n const skillsResult = installSkills(args.skillsMode);\n if (skillsResult.success) {\n log(skillsResult.message);\n } else {\n warn(skillsResult.message);\n }\n } else {\n warn(\"Skill installation skipped because plugin install failed.\");\n }\n\n if (args.fullInstall && result.success) {\n try {\n const extensionPath = extractExtension();\n if (extensionPath) {\n log(`Extension assets extracted to ${extensionPath}`);\n } else {\n warn(\"Extension assets not found; skipping extraction.\");\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n warn(`Extension pre-extraction failed: ${message}`);\n }\n }\n\n if (result.success && !result.alreadyInstalled) {\n const autostart = maybeInstallAutostart();\n if (autostart.installed) {\n log(autostart.message);\n } else {\n warn(`Autostart install skipped: ${autostart.message}`);\n }\n }\n\n if (result.success && !result.alreadyInstalled) {\n log(\"\\nNext steps:\");\n log(\" 1. Start or restart OpenCode\");\n log(\" 2. Use opendevbrowser_status to verify the plugin is loaded\");\n log(\"\\nFor help: npx opendevbrowser --help\");\n }\n\n return { success: result.success, message: result.message };\n }\n });\n\n registerCommand({\n name: \"serve\",\n description: \"Start or stop the local daemon\",\n run: async () => runServe(args)\n });\n\n registerCommand({\n name: \"daemon\",\n description: \"Install/uninstall/status daemon auto-start\",\n run: async () => runDaemonCommand(args)\n });\n\n registerCommand({\n name: \"native\",\n description: \"Install/uninstall/status native messaging host\",\n run: async () => runNativeCommand(args)\n });\n\n registerCommand({\n name: \"run\",\n description: \"Execute a JSON script in a single process\",\n run: async () => runScriptCommand(args)\n });\n\n registerCommand({\n name: \"launch\",\n description: \"Launch a managed browser session via daemon\",\n run: async () => runSessionLaunch(args)\n });\n\n registerCommand({\n name: \"connect\",\n description: \"Connect to an existing browser via daemon\",\n run: async () => runSessionConnect(args)\n });\n\n registerCommand({\n name: \"disconnect\",\n description: \"Disconnect a daemon session\",\n run: async () => runSessionDisconnect(args)\n });\n\n registerCommand({\n name: \"status\",\n description: \"Get daemon or session status\",\n run: async () => runStatus(args)\n });\n\n registerCommand({\n name: \"goto\",\n description: \"Navigate current session to a URL\",\n run: async () => runGoto(args)\n });\n\n registerCommand({\n name: \"wait\",\n description: \"Wait for load or a ref to appear\",\n run: async () => runWait(args)\n });\n\n registerCommand({\n name: \"snapshot\",\n description: \"Capture a snapshot of the active page\",\n run: async () => runSnapshot(args)\n });\n\n registerCommand({\n name: \"annotate\",\n description: \"Request interactive annotations (extension relay)\",\n run: async () => runAnnotate(args)\n });\n\n registerCommand({\n name: \"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: \"targets-list\",\n description: \"List page targets\",\n run: async () => runTargetsList(args)\n });\n\n registerCommand({\n name: \"target-use\",\n description: \"Focus a target by id\",\n run: async () => runTargetUse(args)\n });\n\n registerCommand({\n name: \"target-new\",\n description: \"Open a new target\",\n run: async () => runTargetNew(args)\n });\n\n registerCommand({\n name: \"target-close\",\n description: \"Close a target by id\",\n run: async () => runTargetClose(args)\n });\n\n registerCommand({\n name: \"page\",\n description: \"Open or focus a named page\",\n run: async () => runPageOpen(args)\n });\n\n registerCommand({\n name: \"pages\",\n description: \"List named pages\",\n run: async () => runPagesList(args)\n });\n\n registerCommand({\n name: \"page-close\",\n description: \"Close a named page\",\n run: async () => runPageClose(args)\n });\n\n registerCommand({\n name: \"dom-html\",\n description: \"Capture HTML for a ref\",\n run: async () => runDomHtml(args)\n });\n\n registerCommand({\n name: \"dom-text\",\n description: \"Capture text for a ref\",\n run: async () => runDomText(args)\n });\n\n registerCommand({\n name: \"dom-attr\",\n description: \"Capture attribute value for a ref\",\n run: async () => runDomAttr(args)\n });\n\n registerCommand({\n name: \"dom-value\",\n description: \"Capture input value for a ref\",\n run: async () => runDomValue(args)\n });\n\n registerCommand({\n name: \"dom-visible\",\n description: \"Check visibility for a ref\",\n run: async () => runDomVisible(args)\n });\n\n registerCommand({\n name: \"dom-enabled\",\n description: \"Check enabled state for a ref\",\n run: async () => runDomEnabled(args)\n });\n\n registerCommand({\n name: \"dom-checked\",\n description: \"Check checked state for a ref\",\n run: async () => runDomChecked(args)\n });\n\n registerCommand({\n name: \"clone-page\",\n description: \"Clone the active page to React\",\n run: async () => runClonePage(args)\n });\n\n registerCommand({\n name: \"clone-component\",\n description: \"Clone a component by ref\",\n run: async () => runCloneComponent(args)\n });\n\n registerCommand({\n name: \"perf\",\n description: \"Capture performance metrics\",\n run: async () => runPerf(args)\n });\n\n registerCommand({\n name: \"screenshot\",\n description: \"Capture a screenshot\",\n run: async () => runScreenshot(args)\n });\n\n registerCommand({\n name: \"console-poll\",\n description: \"Poll console events\",\n run: async () => runConsolePoll(args)\n });\n\n registerCommand({\n name: \"network-poll\",\n description: \"Poll network events\",\n run: async () => runNetworkPoll(args)\n });\n\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: \"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: \"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 process.exit(exitCode);\n } catch (error) {\n const format = outputFormat ?? detectOutputFormat(process.argv);\n const cliError = toCliError(error, parseSucceeded ? EXIT_EXECUTION : EXIT_USAGE);\n emitFatalError(cliError, format);\n process.exit(cliError.exitCode);\n }\n}\n\nmain().catch((error: unknown) => {\n const cliError = toCliError(error, EXIT_EXECUTION);\n emitFatalError(cliError, detectOutputFormat(process.argv));\n process.exit(cliError.exitCode);\n});\n"],"mappings":"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","names":["mode","noPrompt","fs","edits","fs","path","os","fs","fs","path","fs","path","os","installed","skipped","fs","path","os","PLUGIN_NAME","fs","path","os","getPluginConfigPath","fs","path","homedir","fileURLToPath","fileURLToPath","homedir","message","metadata","message","staleNote","execFileSync","existsSync","mkdirSync","unlinkSync","writeFileSync","homedir","dirname","join","resolve","fileURLToPath","join","resolve","resolve","join","readFileSync","resolve","readFileSync","resolve","parseStatusArgs","nativeStatus","requireValue","message","readFileSync","requireValue","readFileSync","requireValue","path","readFileSync","requireValue","readFileSync","requireValue","requireValue","requireValue","MODE_VALUES","COOKIE_POLICY_VALUES","requireValue","parseBoolean","requireValue","parseBoolean","COOKIE_POLICY_VALUES","resolve","result","exitCode"]}
|