opendevbrowser 0.0.27 → 0.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/accessibility-snapshot-PA6NWNS7.js +39 -0
- package/dist/accessibility-snapshot-PA6NWNS7.js.map +1 -0
- package/dist/active-window-YNYTIPZN.js +37 -0
- package/dist/active-window-YNYTIPZN.js.map +1 -0
- package/dist/annotate-STYHXZYJ.js +205 -0
- package/dist/annotate-STYHXZYJ.js.map +1 -0
- package/dist/artifacts-KJ6RNDO2.js +120 -0
- package/dist/artifacts-KJ6RNDO2.js.map +1 -0
- package/dist/attr-GHFZZ4SA.js +84 -0
- package/dist/attr-GHFZZ4SA.js.map +1 -0
- package/dist/browser/canvas-manager.d.ts.map +1 -1
- package/dist/browser/ops-client.d.ts +1 -0
- package/dist/browser/ops-client.d.ts.map +1 -1
- package/dist/canvas/document-store.d.ts.map +1 -1
- package/dist/canvas/guidance.d.ts +22 -0
- package/dist/canvas/guidance.d.ts.map +1 -0
- package/dist/canvas-54FBOEGP.js +309 -0
- package/dist/canvas-54FBOEGP.js.map +1 -0
- package/dist/capture-desktop-SNABC24E.js +38 -0
- package/dist/capture-desktop-SNABC24E.js.map +1 -0
- package/dist/capture-window-UJSB5AMP.js +40 -0
- package/dist/capture-window-UJSB5AMP.js.map +1 -0
- package/dist/check-ST5UQ2F5.js +71 -0
- package/dist/check-ST5UQ2F5.js.map +1 -0
- package/dist/checked-IEMWI5CU.js +71 -0
- package/dist/checked-IEMWI5CU.js.map +1 -0
- package/dist/chunk-2CG4SW3E.js +64 -0
- package/dist/chunk-2CG4SW3E.js.map +1 -0
- package/dist/chunk-2SIMIPLY.js +67 -0
- package/dist/chunk-2SIMIPLY.js.map +1 -0
- package/dist/chunk-37VSRUW4.js +141 -0
- package/dist/chunk-37VSRUW4.js.map +1 -0
- package/dist/chunk-5SWZDVOW.js +144 -0
- package/dist/chunk-5SWZDVOW.js.map +1 -0
- package/dist/chunk-6PVZ2ABC.js +429 -0
- package/dist/chunk-6PVZ2ABC.js.map +1 -0
- package/dist/chunk-7GVOUZMQ.js +64 -0
- package/dist/chunk-7GVOUZMQ.js.map +1 -0
- package/dist/chunk-7THCPS52.js +84 -0
- package/dist/chunk-7THCPS52.js.map +1 -0
- package/dist/chunk-ASMHEEKY.js +10 -0
- package/dist/chunk-ASMHEEKY.js.map +1 -0
- package/dist/chunk-DBF5OKH3.js +111 -0
- package/dist/chunk-DBF5OKH3.js.map +1 -0
- package/dist/chunk-DW4TX7MU.js +54 -0
- package/dist/chunk-DW4TX7MU.js.map +1 -0
- package/dist/chunk-IPE7TF2P.js +54 -0
- package/dist/chunk-IPE7TF2P.js.map +1 -0
- package/dist/chunk-IQTJHXZJ.js +126 -0
- package/dist/chunk-IQTJHXZJ.js.map +1 -0
- package/dist/chunk-J47N77VG.js +2969 -0
- package/dist/chunk-J47N77VG.js.map +1 -0
- package/dist/chunk-JZXD6FWR.js +25 -0
- package/dist/chunk-JZXD6FWR.js.map +1 -0
- package/dist/{chunk-QVWOPIZJ.js → chunk-KDSNXS6N.js} +75 -149
- package/dist/chunk-KDSNXS6N.js.map +1 -0
- package/dist/chunk-KZ2IXVQT.js +219 -0
- package/dist/chunk-KZ2IXVQT.js.map +1 -0
- package/dist/chunk-LBPELU7L.js +3649 -0
- package/dist/chunk-LBPELU7L.js.map +1 -0
- package/dist/chunk-MX3NFLCE.js +940 -0
- package/dist/chunk-MX3NFLCE.js.map +1 -0
- package/dist/chunk-N44UXKIB.js +26 -0
- package/dist/chunk-N44UXKIB.js.map +1 -0
- package/dist/chunk-OW5HMYMI.js +19 -0
- package/dist/chunk-OW5HMYMI.js.map +1 -0
- package/dist/chunk-OYNLAZQU.js +838 -0
- package/dist/chunk-OYNLAZQU.js.map +1 -0
- package/dist/chunk-PDPJN2OP.js +17 -0
- package/dist/chunk-PDPJN2OP.js.map +1 -0
- package/dist/chunk-RCZZGGJS.js +226 -0
- package/dist/chunk-RCZZGGJS.js.map +1 -0
- package/dist/chunk-RJNI3BHT.js +1 -0
- package/dist/chunk-RPXWUCQQ.js +112 -0
- package/dist/chunk-RPXWUCQQ.js.map +1 -0
- package/dist/chunk-S5KZQJJI.js +107 -0
- package/dist/chunk-S5KZQJJI.js.map +1 -0
- package/dist/{chunk-V5DJUSPV.js → chunk-S6S2UP6U.js} +2255 -1577
- package/dist/chunk-S6S2UP6U.js.map +1 -0
- package/dist/{chunk-MWBDO2L5.js → chunk-SXAGSEKZ.js} +1369 -9584
- package/dist/chunk-SXAGSEKZ.js.map +1 -0
- package/dist/chunk-T4GMCW6Z.js +46 -0
- package/dist/chunk-T4GMCW6Z.js.map +1 -0
- package/dist/chunk-WHQZBUNY.js +982 -0
- package/dist/chunk-WHQZBUNY.js.map +1 -0
- package/dist/chunk-WOXBLP7V.js +610 -0
- package/dist/chunk-WOXBLP7V.js.map +1 -0
- package/dist/cli/commands/inspiredesign.d.ts +2 -0
- package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
- package/dist/cli/commands/macro-resolve.d.ts +5 -0
- package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
- package/dist/cli/commands/product-video.d.ts +2 -0
- package/dist/cli/commands/product-video.d.ts.map +1 -1
- package/dist/cli/commands/research.d.ts +2 -0
- package/dist/cli/commands/research.d.ts.map +1 -1
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/shopping.d.ts.map +1 -1
- package/dist/cli/commands/workflow-output.d.ts +2 -0
- package/dist/cli/commands/workflow-output.d.ts.map +1 -0
- package/dist/cli/daemon-commands.d.ts.map +1 -1
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.js +207 -8029
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/installers/postinstall-skill-sync.js +2 -1
- package/dist/cli/installers/postinstall-skill-sync.js.map +1 -1
- package/dist/cli/remote-relay.d.ts.map +1 -1
- package/dist/cli/utils/workflow-message.d.ts +3 -0
- package/dist/cli/utils/workflow-message.d.ts.map +1 -1
- package/dist/click-TENZA3Y6.js +81 -0
- package/dist/click-TENZA3Y6.js.map +1 -0
- package/dist/clone-component-STH5AR6M.js +82 -0
- package/dist/clone-component-STH5AR6M.js.map +1 -0
- package/dist/clone-page-BSTWAPAJ.js +69 -0
- package/dist/clone-page-BSTWAPAJ.js.map +1 -0
- package/dist/close-CEMMAAM7.js +63 -0
- package/dist/close-CEMMAAM7.js.map +1 -0
- package/dist/close-QCWUNRAI.js +63 -0
- package/dist/close-QCWUNRAI.js.map +1 -0
- package/dist/connect-J3RVSEZF.js +107 -0
- package/dist/connect-J3RVSEZF.js.map +1 -0
- package/dist/console-poll-HL7BVIVX.js +76 -0
- package/dist/console-poll-HL7BVIVX.js.map +1 -0
- package/dist/cookie-import-WMUCIIHN.js +177 -0
- package/dist/cookie-import-WMUCIIHN.js.map +1 -0
- package/dist/cookie-list-PB2N4RPH.js +117 -0
- package/dist/cookie-list-PB2N4RPH.js.map +1 -0
- package/dist/daemon-5KSVMGN4.js +194 -0
- package/dist/daemon-5KSVMGN4.js.map +1 -0
- package/dist/daemon-fingerprint.json +1 -1
- package/dist/debug-trace-snapshot-RK7KDXA5.js +136 -0
- package/dist/debug-trace-snapshot-RK7KDXA5.js.map +1 -0
- package/dist/dialog-P6P4U7XE.js +75 -0
- package/dist/dialog-P6P4U7XE.js.map +1 -0
- package/dist/disconnect-32F7IDIP.js +58 -0
- package/dist/disconnect-32F7IDIP.js.map +1 -0
- package/dist/enabled-A6C6ZM2O.js +71 -0
- package/dist/enabled-A6C6ZM2O.js.map +1 -0
- package/dist/extension-extractor-GKWSFHPN.js +11 -0
- package/dist/extension-extractor-GKWSFHPN.js.map +1 -0
- package/dist/global-D6WLWBXA.js +56 -0
- package/dist/global-D6WLWBXA.js.map +1 -0
- package/dist/goto-ULTSABDM.js +98 -0
- package/dist/goto-ULTSABDM.js.map +1 -0
- package/dist/help-EKKKEDL5.js +491 -0
- package/dist/help-EKKKEDL5.js.map +1 -0
- package/dist/hover-UF2ZUMTQ.js +71 -0
- package/dist/hover-UF2ZUMTQ.js.map +1 -0
- package/dist/html-B6TX7GK7.js +84 -0
- package/dist/html-B6TX7GK7.js.map +1 -0
- package/dist/index.js +100 -42
- package/dist/index.js.map +1 -1
- package/dist/inspector-6S5FKUZQ.js +62 -0
- package/dist/inspector-6S5FKUZQ.js.map +1 -0
- package/dist/inspector-audit-ARGEGOS7.js +84 -0
- package/dist/inspector-audit-ARGEGOS7.js.map +1 -0
- package/dist/inspector-plan-CSG5HZOC.js +69 -0
- package/dist/inspector-plan-CSG5HZOC.js.map +1 -0
- package/dist/inspiredesign/contract.d.ts +52 -1
- package/dist/inspiredesign/contract.d.ts.map +1 -1
- package/dist/inspiredesign/handoff.d.ts +12 -0
- package/dist/inspiredesign/handoff.d.ts.map +1 -1
- package/dist/inspiredesign/reference-pattern-board.d.ts +1 -0
- package/dist/inspiredesign/reference-pattern-board.d.ts.map +1 -1
- package/dist/inspiredesign-7VRMMZN4.js +234 -0
- package/dist/inspiredesign-7VRMMZN4.js.map +1 -0
- package/dist/install-autostart-output-5DOMKCQL.js +41 -0
- package/dist/install-autostart-output-5DOMKCQL.js.map +1 -0
- package/dist/install-autostart-reconciliation-NHKOFYTD.js +73 -0
- package/dist/install-autostart-reconciliation-NHKOFYTD.js.map +1 -0
- package/dist/launch-REYCIR3Z.js +225 -0
- package/dist/launch-REYCIR3Z.js.map +1 -0
- package/dist/list-NPRXRQY2.js +51 -0
- package/dist/list-NPRXRQY2.js.map +1 -0
- package/dist/list-STYD2ZWA.js +54 -0
- package/dist/list-STYD2ZWA.js.map +1 -0
- package/dist/local-HXJLUUNT.js +54 -0
- package/dist/local-HXJLUUNT.js.map +1 -0
- package/dist/macro-resolve-ZIJZ65QI.js +253 -0
- package/dist/macro-resolve-ZIJZ65QI.js.map +1 -0
- package/dist/macros/execute-runtime.d.ts +4 -1
- package/dist/macros/execute-runtime.d.ts.map +1 -1
- package/dist/macros/execute.d.ts +6 -2
- package/dist/macros/execute.d.ts.map +1 -1
- package/dist/native-UPLVQ2SG.js +22 -0
- package/dist/native-UPLVQ2SG.js.map +1 -0
- package/dist/network-poll-HLDOSC72.js +76 -0
- package/dist/network-poll-HLDOSC72.js.map +1 -0
- package/dist/new-HXLLN6UT.js +69 -0
- package/dist/new-HXLLN6UT.js.map +1 -0
- package/dist/onboarding-metadata-7E3KLYSZ.js +27 -0
- package/dist/onboarding-metadata-7E3KLYSZ.js.map +1 -0
- package/dist/open-KDR25LQZ.js +81 -0
- package/dist/open-KDR25LQZ.js.map +1 -0
- package/dist/opendevbrowser.js +100 -42
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/perf-EM6SWFJ6.js +58 -0
- package/dist/perf-EM6SWFJ6.js.map +1 -0
- package/dist/pointer-down-ZYWRZNCH.js +55 -0
- package/dist/pointer-down-ZYWRZNCH.js.map +1 -0
- package/dist/pointer-drag-LVEAVJO4.js +54 -0
- package/dist/pointer-drag-LVEAVJO4.js.map +1 -0
- package/dist/pointer-move-7SRKUS66.js +52 -0
- package/dist/pointer-move-7SRKUS66.js.map +1 -0
- package/dist/pointer-up-KLDBSK37.js +55 -0
- package/dist/pointer-up-KLDBSK37.js.map +1 -0
- package/dist/press-UIIXFTD7.js +83 -0
- package/dist/press-UIIXFTD7.js.map +1 -0
- package/dist/product-video-PYOXJVAI.js +235 -0
- package/dist/product-video-PYOXJVAI.js.map +1 -0
- package/dist/providers/artifacts.d.ts +0 -2
- package/dist/providers/artifacts.d.ts.map +1 -1
- package/dist/providers/blocker.d.ts.map +1 -1
- package/dist/providers/bounded-map.d.ts +2 -0
- package/dist/providers/bounded-map.d.ts.map +1 -0
- package/dist/providers/browser-fallback.d.ts +7 -0
- package/dist/providers/browser-fallback.d.ts.map +1 -1
- package/dist/providers/community/index.d.ts.map +1 -1
- package/dist/providers/constraint.d.ts.map +1 -1
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/renderer.d.ts.map +1 -1
- package/dist/providers/research-compiler.d.ts +1 -1
- package/dist/providers/research-compiler.d.ts.map +1 -1
- package/dist/providers/research-executor.d.ts.map +1 -1
- package/dist/providers/runtime-bundle.d.ts +1 -1
- package/dist/providers/runtime-bundle.d.ts.map +1 -1
- package/dist/providers/runtime-factory.d.ts.map +1 -1
- package/dist/providers/shared/traversal-url.d.ts +3 -0
- package/dist/providers/shared/traversal-url.d.ts.map +1 -1
- package/dist/providers/shopping/index.d.ts.map +1 -1
- package/dist/providers/social/platform.d.ts.map +1 -1
- package/dist/providers/social/search-quality.d.ts.map +1 -1
- package/dist/providers/social/youtube.d.ts.map +1 -1
- package/dist/providers/workflow-handoff.d.ts +22 -1
- package/dist/providers/workflow-handoff.d.ts.map +1 -1
- package/dist/providers/workflows.d.ts +3 -0
- package/dist/providers/workflows.d.ts.map +1 -1
- package/dist/{providers-TR3DUJZV.js → providers-4YY2BLXG.js} +19 -14
- package/dist/providers-4YY2BLXG.js.map +1 -0
- package/dist/public-surface/generated-manifest.d.ts +6 -6
- package/dist/public-surface/generated-manifest.d.ts.map +1 -1
- package/dist/public-surface/source.d.ts +8 -8
- package/dist/public-surface/source.d.ts.map +1 -1
- package/dist/relay/protocol.d.ts +3 -1
- package/dist/relay/protocol.d.ts.map +1 -1
- package/dist/relay/relay-server.d.ts +6 -0
- package/dist/relay/relay-server.d.ts.map +1 -1
- package/dist/research-CKXMJ2DK.js +295 -0
- package/dist/research-CKXMJ2DK.js.map +1 -0
- package/dist/review-7HWJPZOD.js +48 -0
- package/dist/review-7HWJPZOD.js.map +1 -0
- package/dist/review-desktop-2IBJHFB5.js +54 -0
- package/dist/review-desktop-2IBJHFB5.js.map +1 -0
- package/dist/rpc-3HGIEJUO.js +159 -0
- package/dist/rpc-3HGIEJUO.js.map +1 -0
- package/dist/run-ADRYI3MS.js +180 -0
- package/dist/run-ADRYI3MS.js.map +1 -0
- package/dist/screencast-start-DTLUHD5H.js +67 -0
- package/dist/screencast-start-DTLUHD5H.js.map +1 -0
- package/dist/screencast-stop-54C5LRSS.js +59 -0
- package/dist/screencast-stop-54C5LRSS.js.map +1 -0
- package/dist/screenshot-HOAKR7P7.js +68 -0
- package/dist/screenshot-HOAKR7P7.js.map +1 -0
- package/dist/scroll-IAOO5COY.js +84 -0
- package/dist/scroll-IAOO5COY.js.map +1 -0
- package/dist/scroll-into-view-RKWSLAPH.js +71 -0
- package/dist/scroll-into-view-RKWSLAPH.js.map +1 -0
- package/dist/select-IGD3T6X4.js +86 -0
- package/dist/select-IGD3T6X4.js.map +1 -0
- package/dist/serve-7X4INUCU.js +498 -0
- package/dist/serve-7X4INUCU.js.map +1 -0
- package/dist/shopping-FC6DRW76.js +273 -0
- package/dist/shopping-FC6DRW76.js.map +1 -0
- package/dist/skill-lifecycle-5UAZGKSN.js +89 -0
- package/dist/skill-lifecycle-5UAZGKSN.js.map +1 -0
- package/dist/skills-NSXDX6YM.js +26 -0
- package/dist/skills-NSXDX6YM.js.map +1 -0
- package/dist/snapshot-X22GG324.js +113 -0
- package/dist/snapshot-X22GG324.js.map +1 -0
- package/dist/status-SP55LMNW.js +132 -0
- package/dist/status-SP55LMNW.js.map +1 -0
- package/dist/status-VH2WXIDG.js +35 -0
- package/dist/status-VH2WXIDG.js.map +1 -0
- package/dist/status-capabilities-YBERLRRA.js +57 -0
- package/dist/status-capabilities-YBERLRRA.js.map +1 -0
- package/dist/text-6TB5WNLI.js +84 -0
- package/dist/text-6TB5WNLI.js.map +1 -0
- package/dist/tools/inspiredesign_run.d.ts.map +1 -1
- package/dist/tools/macro_resolve.d.ts.map +1 -1
- package/dist/tools/product_video_run.d.ts.map +1 -1
- package/dist/tools/research_run.d.ts.map +1 -1
- package/dist/tools/shopping_run.d.ts.map +1 -1
- package/dist/type-3UI3TQH3.js +94 -0
- package/dist/type-3UI3TQH3.js.map +1 -0
- package/dist/uncheck-5L3D2D4U.js +71 -0
- package/dist/uncheck-5L3D2D4U.js.map +1 -0
- package/dist/uninstall-KYKGJAX7.js +91 -0
- package/dist/uninstall-KYKGJAX7.js.map +1 -0
- package/dist/update-SMXPYGXS.js +305 -0
- package/dist/update-SMXPYGXS.js.map +1 -0
- package/dist/update-skill-modes-BVX7IVMW.js +38 -0
- package/dist/update-skill-modes-BVX7IVMW.js.map +1 -0
- package/dist/upload-YG4J2EMI.js +56 -0
- package/dist/upload-YG4J2EMI.js.map +1 -0
- package/dist/use-V3LGFP3K.js +63 -0
- package/dist/use-V3LGFP3K.js.map +1 -0
- package/dist/value-3247D57X.js +71 -0
- package/dist/value-3247D57X.js.map +1 -0
- package/dist/visible-A7HEV36U.js +71 -0
- package/dist/visible-A7HEV36U.js.map +1 -0
- package/dist/wait-UZPP4Y4R.js +109 -0
- package/dist/wait-UZPP4Y4R.js.map +1 -0
- package/dist/windows-76TR3AIP.js +37 -0
- package/dist/windows-76TR3AIP.js.map +1 -0
- package/extension/dist/background.js +99 -22
- package/extension/dist/ops/ops-runtime.js +85 -7
- package/extension/dist/ops/ops-session-store.js +3 -0
- package/extension/dist/ops/target-session-coordinator.js +3 -0
- package/extension/dist/services/CDPRouter.js +9 -0
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
- package/skills/opendevbrowser-best-practices/SKILL.md +13 -11
- package/skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md +1 -1
- package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +3 -2
- package/skills/opendevbrowser-best-practices/scripts/validator-fixture-cli.sh +39 -2
- package/skills/opendevbrowser-design-agent/SKILL.md +5 -0
- package/skills/opendevbrowser-design-agent/artifacts/design-contract-playbook.md +6 -1
- package/skills/opendevbrowser-design-agent/assets/templates/design-contract.v1.json +15 -1
- package/skills/opendevbrowser-design-agent/assets/templates/inspiredesign-advanced-brief.v1.json +5 -2
- package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +2 -0
- package/skills/opendevbrowser-research/SKILL.md +64 -12
- package/skills/opendevbrowser-research/artifacts/research-workflows.md +56 -19
- package/skills/opendevbrowser-research/assets/templates/compact.md +31 -5
- package/skills/opendevbrowser-research/assets/templates/context.json +52 -1
- package/skills/opendevbrowser-research/assets/templates/report.md +57 -4
- package/skills/opendevbrowser-research/examples/sample-input.json +1 -1
- package/skills/opendevbrowser-research/examples/sample-output.md +27 -2
- package/skills/opendevbrowser-research/scripts/run-research.sh +2 -6
- package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +115 -1
- package/dist/chunk-MWBDO2L5.js.map +0 -1
- package/dist/chunk-QVWOPIZJ.js.map +0 -1
- package/dist/chunk-V5DJUSPV.js.map +0 -1
- /package/dist/{providers-TR3DUJZV.js.map → chunk-RJNI3BHT.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/devtools/console-poll.ts"],"sourcesContent":["import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { parseNumberFlag } from \"../../utils/parse\";\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 = parseNumberFlag(value, \"--since-seq\", { min: 0 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--since-seq=\")) {\n parsed.sinceSeq = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--since-seq\", { min: 0 });\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 = parseNumberFlag(value, \"--max\", { min: 1 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--max=\")) {\n parsed.max = parseNumberFlag(arg.split(\"=\", 2)[1] ?? \"\", \"--max\", { min: 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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,SAAS,qBAAqB,SAA4E;AACxG,QAAM,SAAkE,CAAC;AACzE,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;AAC1C,UAAM,MAAM,QAAQ,CAAC;AACrB,QAAI,QAAQ,gBAAgB;AAC1B,YAAM,QAAQ,QAAQ,IAAI,CAAC;AAC3B,UAAI,CAAC,MAAO,OAAM,iBAAiB,gCAAgC;AACnE,aAAO,YAAY;AACnB,WAAK;AACL;AAAA,IACF;AACA,QAAI,KAAK,WAAW,eAAe,GAAG;AACpC,aAAO,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;AACtC;AAAA,IACF;AACA,QAAI,QAAQ,eAAe;AACzB,YAAM,QAAQ,QAAQ,IAAI,CAAC;AAC3B,UAAI,CAAC,MAAO,OAAM,iBAAiB,+BAA+B;AAClE,aAAO,WAAW,gBAAgB,OAAO,eAAe,EAAE,KAAK,EAAE,CAAC;AAClE,WAAK;AACL;AAAA,IACF;AACA,QAAI,KAAK,WAAW,cAAc,GAAG;AACnC,aAAO,WAAW,gBAAgB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI,eAAe,EAAE,KAAK,EAAE,CAAC;AACvF;AAAA,IACF;AACA,QAAI,QAAQ,SAAS;AACnB,YAAM,QAAQ,QAAQ,IAAI,CAAC;AAC3B,UAAI,CAAC,MAAO,OAAM,iBAAiB,yBAAyB;AAC5D,aAAO,MAAM,gBAAgB,OAAO,SAAS,EAAE,KAAK,EAAE,CAAC;AACvD,WAAK;AACL;AAAA,IACF;AACA,QAAI,KAAK,WAAW,QAAQ,GAAG;AAC7B,aAAO,MAAM,gBAAgB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5E;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAsB,eAAe,MAAkB;AACrD,QAAM,EAAE,WAAW,UAAU,IAAI,IAAI,qBAAqB,KAAK,OAAO;AACtE,MAAI,CAAC,UAAW,OAAM,iBAAiB,sBAAsB;AAC7D,QAAM,SAAS,MAAM,WAAW,wBAAwB,EAAE,WAAW,UAAU,IAAI,CAAC;AACpF,SAAO,EAAE,SAAS,MAAM,SAAS,0BAA0B,MAAM,OAAO;AAC1E;","names":[]}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import "./chunk-RJNI3BHT.js";
|
|
2
|
+
import {
|
|
3
|
+
callDaemon
|
|
4
|
+
} from "./chunk-OYNLAZQU.js";
|
|
5
|
+
import "./chunk-LBPELU7L.js";
|
|
6
|
+
import "./chunk-SXAGSEKZ.js";
|
|
7
|
+
import "./chunk-MX3NFLCE.js";
|
|
8
|
+
import "./chunk-ASMHEEKY.js";
|
|
9
|
+
import {
|
|
10
|
+
createUsageError
|
|
11
|
+
} from "./chunk-IPE7TF2P.js";
|
|
12
|
+
import "./chunk-STGGGVYT.js";
|
|
13
|
+
import "./chunk-3ILXPKSJ.js";
|
|
14
|
+
import "./chunk-TBUCZX4A.js";
|
|
15
|
+
import "./chunk-Y2KL55OG.js";
|
|
16
|
+
import "./chunk-5SWZDVOW.js";
|
|
17
|
+
import "./chunk-S6S2UP6U.js";
|
|
18
|
+
import "./chunk-S5KZQJJI.js";
|
|
19
|
+
import "./chunk-KZ2IXVQT.js";
|
|
20
|
+
import "./chunk-WHQZBUNY.js";
|
|
21
|
+
import "./chunk-FUSXMW3G.js";
|
|
22
|
+
|
|
23
|
+
// src/cli/commands/session/cookie-import.ts
|
|
24
|
+
import { readFileSync } from "fs";
|
|
25
|
+
var requireValue = (value, flag) => {
|
|
26
|
+
if (!value) {
|
|
27
|
+
throw createUsageError(`Missing value for ${flag}`);
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
};
|
|
31
|
+
var parseStrictValue = (value, flag) => {
|
|
32
|
+
const normalized = value.trim().toLowerCase();
|
|
33
|
+
if (normalized === "true") return true;
|
|
34
|
+
if (normalized === "false") return false;
|
|
35
|
+
throw createUsageError(`Invalid ${flag}: ${value}`);
|
|
36
|
+
};
|
|
37
|
+
var parseCookieImportArgs = (rawArgs) => {
|
|
38
|
+
const parsed = {};
|
|
39
|
+
for (let index = 0; index < rawArgs.length; index += 1) {
|
|
40
|
+
const arg = rawArgs[index];
|
|
41
|
+
if (arg === "--session-id") {
|
|
42
|
+
parsed.sessionId = requireValue(rawArgs[index + 1], "--session-id");
|
|
43
|
+
index += 1;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (arg?.startsWith("--session-id=")) {
|
|
47
|
+
parsed.sessionId = requireValue(arg.split("=", 2)[1], "--session-id");
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (arg === "--cookies") {
|
|
51
|
+
parsed.cookies = requireValue(rawArgs[index + 1], "--cookies");
|
|
52
|
+
index += 1;
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (arg?.startsWith("--cookies=")) {
|
|
56
|
+
parsed.cookies = requireValue(arg.split("=", 2)[1], "--cookies");
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (arg === "--cookies-file") {
|
|
60
|
+
parsed.cookiesFile = requireValue(rawArgs[index + 1], "--cookies-file");
|
|
61
|
+
index += 1;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (arg?.startsWith("--cookies-file=")) {
|
|
65
|
+
parsed.cookiesFile = requireValue(arg.split("=", 2)[1], "--cookies-file");
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (arg === "--strict") {
|
|
69
|
+
parsed.strict = true;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (arg?.startsWith("--strict=")) {
|
|
73
|
+
parsed.strict = parseStrictValue(requireValue(arg.split("=", 2)[1], "--strict"), "--strict");
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (arg === "--request-id") {
|
|
77
|
+
parsed.requestId = requireValue(rawArgs[index + 1], "--request-id");
|
|
78
|
+
index += 1;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (arg?.startsWith("--request-id=")) {
|
|
82
|
+
parsed.requestId = requireValue(arg.split("=", 2)[1], "--request-id");
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return parsed;
|
|
87
|
+
};
|
|
88
|
+
var parseCookiesJson = (raw, source) => {
|
|
89
|
+
let parsed;
|
|
90
|
+
try {
|
|
91
|
+
parsed = JSON.parse(raw);
|
|
92
|
+
} catch (error) {
|
|
93
|
+
const message = error instanceof Error ? error.message : "Invalid JSON";
|
|
94
|
+
throw createUsageError(`Invalid JSON from ${source}: ${message}`);
|
|
95
|
+
}
|
|
96
|
+
if (!Array.isArray(parsed)) {
|
|
97
|
+
throw createUsageError(`Invalid JSON from ${source}: expected array`);
|
|
98
|
+
}
|
|
99
|
+
const cookies = [];
|
|
100
|
+
for (const entry of parsed) {
|
|
101
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
102
|
+
throw createUsageError(`Invalid JSON from ${source}: expected cookie object entries`);
|
|
103
|
+
}
|
|
104
|
+
const cookie = entry;
|
|
105
|
+
if (typeof cookie.name !== "string" || typeof cookie.value !== "string") {
|
|
106
|
+
throw createUsageError(`Invalid JSON from ${source}: each cookie requires string name and value`);
|
|
107
|
+
}
|
|
108
|
+
if (typeof cookie.sameSite !== "undefined" && cookie.sameSite !== "Strict" && cookie.sameSite !== "Lax" && cookie.sameSite !== "None") {
|
|
109
|
+
throw createUsageError(`Invalid JSON from ${source}: sameSite must be Strict, Lax, or None`);
|
|
110
|
+
}
|
|
111
|
+
cookies.push({
|
|
112
|
+
name: cookie.name,
|
|
113
|
+
value: cookie.value,
|
|
114
|
+
...typeof cookie.url === "string" ? { url: cookie.url } : {},
|
|
115
|
+
...typeof cookie.domain === "string" ? { domain: cookie.domain } : {},
|
|
116
|
+
...typeof cookie.path === "string" ? { path: cookie.path } : {},
|
|
117
|
+
...typeof cookie.expires === "number" ? { expires: cookie.expires } : {},
|
|
118
|
+
...typeof cookie.httpOnly === "boolean" ? { httpOnly: cookie.httpOnly } : {},
|
|
119
|
+
...typeof cookie.secure === "boolean" ? { secure: cookie.secure } : {},
|
|
120
|
+
...cookie.sameSite ? { sameSite: cookie.sameSite } : {}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
return cookies;
|
|
124
|
+
};
|
|
125
|
+
var resolveCookies = (parsed) => {
|
|
126
|
+
const hasInline = typeof parsed.cookies === "string";
|
|
127
|
+
const hasFile = typeof parsed.cookiesFile === "string";
|
|
128
|
+
if (!hasInline && !hasFile) {
|
|
129
|
+
throw createUsageError("Missing --cookies or --cookies-file");
|
|
130
|
+
}
|
|
131
|
+
if (hasInline && hasFile) {
|
|
132
|
+
throw createUsageError("Provide only one cookies source: --cookies or --cookies-file.");
|
|
133
|
+
}
|
|
134
|
+
if (hasInline) {
|
|
135
|
+
return parseCookiesJson(parsed.cookies ?? "", "--cookies");
|
|
136
|
+
}
|
|
137
|
+
let raw = "";
|
|
138
|
+
try {
|
|
139
|
+
raw = readFileSync(parsed.cookiesFile ?? "", "utf8");
|
|
140
|
+
} catch (error) {
|
|
141
|
+
const message = error instanceof Error ? error.message : "Unable to read file";
|
|
142
|
+
throw createUsageError(`Invalid --cookies-file: ${message}`);
|
|
143
|
+
}
|
|
144
|
+
if (!raw.trim()) {
|
|
145
|
+
throw createUsageError("Invalid JSON from --cookies-file: empty input");
|
|
146
|
+
}
|
|
147
|
+
return parseCookiesJson(raw, "--cookies-file");
|
|
148
|
+
};
|
|
149
|
+
async function runCookieImport(args) {
|
|
150
|
+
const parsed = parseCookieImportArgs(args.rawArgs);
|
|
151
|
+
if (!parsed.sessionId) {
|
|
152
|
+
throw createUsageError("Missing --session-id");
|
|
153
|
+
}
|
|
154
|
+
const cookies = resolveCookies(parsed);
|
|
155
|
+
const result = await callDaemon("session.cookieImport", {
|
|
156
|
+
sessionId: parsed.sessionId,
|
|
157
|
+
cookies,
|
|
158
|
+
strict: parsed.strict ?? true,
|
|
159
|
+
requestId: parsed.requestId
|
|
160
|
+
});
|
|
161
|
+
const imported = typeof result.imported === "number" ? result.imported : cookies.length;
|
|
162
|
+
return {
|
|
163
|
+
success: true,
|
|
164
|
+
message: `Cookies imported: ${imported}`,
|
|
165
|
+
data: result
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
var __test__ = {
|
|
169
|
+
parseCookieImportArgs,
|
|
170
|
+
parseCookiesJson,
|
|
171
|
+
resolveCookies
|
|
172
|
+
};
|
|
173
|
+
export {
|
|
174
|
+
__test__,
|
|
175
|
+
runCookieImport
|
|
176
|
+
};
|
|
177
|
+
//# sourceMappingURL=cookie-import-WMUCIIHN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/session/cookie-import.ts"],"sourcesContent":["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"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import "./chunk-RJNI3BHT.js";
|
|
2
|
+
import {
|
|
3
|
+
callDaemon
|
|
4
|
+
} from "./chunk-OYNLAZQU.js";
|
|
5
|
+
import "./chunk-LBPELU7L.js";
|
|
6
|
+
import "./chunk-SXAGSEKZ.js";
|
|
7
|
+
import "./chunk-MX3NFLCE.js";
|
|
8
|
+
import "./chunk-ASMHEEKY.js";
|
|
9
|
+
import {
|
|
10
|
+
createUsageError
|
|
11
|
+
} from "./chunk-IPE7TF2P.js";
|
|
12
|
+
import "./chunk-STGGGVYT.js";
|
|
13
|
+
import "./chunk-3ILXPKSJ.js";
|
|
14
|
+
import "./chunk-TBUCZX4A.js";
|
|
15
|
+
import "./chunk-Y2KL55OG.js";
|
|
16
|
+
import "./chunk-5SWZDVOW.js";
|
|
17
|
+
import "./chunk-S6S2UP6U.js";
|
|
18
|
+
import "./chunk-S5KZQJJI.js";
|
|
19
|
+
import "./chunk-KZ2IXVQT.js";
|
|
20
|
+
import "./chunk-WHQZBUNY.js";
|
|
21
|
+
import "./chunk-FUSXMW3G.js";
|
|
22
|
+
|
|
23
|
+
// src/cli/commands/session/cookie-list.ts
|
|
24
|
+
var requireValue = (value, flag) => {
|
|
25
|
+
if (!value) {
|
|
26
|
+
throw createUsageError(`Missing value for ${flag}`);
|
|
27
|
+
}
|
|
28
|
+
return value;
|
|
29
|
+
};
|
|
30
|
+
var normalizeCookieUrls = (values) => {
|
|
31
|
+
const normalized = [];
|
|
32
|
+
const seen = /* @__PURE__ */ new Set();
|
|
33
|
+
for (const value of values) {
|
|
34
|
+
const trimmed = value.trim();
|
|
35
|
+
if (!trimmed) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
let parsedUrl;
|
|
39
|
+
try {
|
|
40
|
+
parsedUrl = new URL(trimmed);
|
|
41
|
+
} catch {
|
|
42
|
+
throw createUsageError(`Invalid --url value: ${trimmed}`);
|
|
43
|
+
}
|
|
44
|
+
if (parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") {
|
|
45
|
+
throw createUsageError(`Invalid --url protocol: ${trimmed}`);
|
|
46
|
+
}
|
|
47
|
+
const normalizedUrl = parsedUrl.toString();
|
|
48
|
+
if (seen.has(normalizedUrl)) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
seen.add(normalizedUrl);
|
|
52
|
+
normalized.push(normalizedUrl);
|
|
53
|
+
}
|
|
54
|
+
return normalized;
|
|
55
|
+
};
|
|
56
|
+
var parseCookieListArgs = (rawArgs) => {
|
|
57
|
+
const parsed = { urls: [] };
|
|
58
|
+
for (let index = 0; index < rawArgs.length; index += 1) {
|
|
59
|
+
const arg = rawArgs[index];
|
|
60
|
+
if (arg === "--session-id") {
|
|
61
|
+
parsed.sessionId = requireValue(rawArgs[index + 1], "--session-id");
|
|
62
|
+
index += 1;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (arg?.startsWith("--session-id=")) {
|
|
66
|
+
parsed.sessionId = requireValue(arg.split("=", 2)[1], "--session-id");
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (arg === "--url") {
|
|
70
|
+
const rawValue = requireValue(rawArgs[index + 1], "--url");
|
|
71
|
+
parsed.urls.push(...rawValue.split(","));
|
|
72
|
+
index += 1;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (arg?.startsWith("--url=")) {
|
|
76
|
+
parsed.urls.push(...requireValue(arg.split("=", 2)[1], "--url").split(","));
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (arg === "--request-id") {
|
|
80
|
+
parsed.requestId = requireValue(rawArgs[index + 1], "--request-id");
|
|
81
|
+
index += 1;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (arg?.startsWith("--request-id=")) {
|
|
85
|
+
parsed.requestId = requireValue(arg.split("=", 2)[1], "--request-id");
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
parsed.urls = normalizeCookieUrls(parsed.urls);
|
|
90
|
+
return parsed;
|
|
91
|
+
};
|
|
92
|
+
async function runCookieList(args) {
|
|
93
|
+
const parsed = parseCookieListArgs(args.rawArgs);
|
|
94
|
+
if (!parsed.sessionId) {
|
|
95
|
+
throw createUsageError("Missing --session-id");
|
|
96
|
+
}
|
|
97
|
+
const result = await callDaemon("session.cookieList", {
|
|
98
|
+
sessionId: parsed.sessionId,
|
|
99
|
+
...parsed.urls.length > 0 ? { urls: parsed.urls } : {},
|
|
100
|
+
requestId: parsed.requestId
|
|
101
|
+
});
|
|
102
|
+
const count = typeof result.count === "number" ? result.count : Array.isArray(result.cookies) ? result.cookies.length : 0;
|
|
103
|
+
return {
|
|
104
|
+
success: true,
|
|
105
|
+
message: `Cookies listed: ${count}`,
|
|
106
|
+
data: result
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
var __test__ = {
|
|
110
|
+
parseCookieListArgs,
|
|
111
|
+
normalizeCookieUrls
|
|
112
|
+
};
|
|
113
|
+
export {
|
|
114
|
+
__test__,
|
|
115
|
+
runCookieList
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=cookie-list-PB2N4RPH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/session/cookie-list.ts"],"sourcesContent":["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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAUA,IAAM,eAAe,CAAC,OAA2B,SAAyB;AACxE,MAAI,CAAC,OAAO;AACV,UAAM,iBAAiB,qBAAqB,IAAI,EAAE;AAAA,EACpD;AACA,SAAO;AACT;AAEA,IAAM,sBAAsB,CAAC,WAA+B;AAC1D,QAAM,aAAuB,CAAC;AAC9B,QAAM,OAAO,oBAAI,IAAY;AAE7B,aAAW,SAAS,QAAQ;AAC1B,UAAM,UAAU,MAAM,KAAK;AAC3B,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AAEA,QAAI;AACJ,QAAI;AACF,kBAAY,IAAI,IAAI,OAAO;AAAA,IAC7B,QAAQ;AACN,YAAM,iBAAiB,wBAAwB,OAAO,EAAE;AAAA,IAC1D;AACA,QAAI,UAAU,aAAa,WAAW,UAAU,aAAa,UAAU;AACrE,YAAM,iBAAiB,2BAA2B,OAAO,EAAE;AAAA,IAC7D;AAEA,UAAM,gBAAgB,UAAU,SAAS;AACzC,QAAI,KAAK,IAAI,aAAa,GAAG;AAC3B;AAAA,IACF;AACA,SAAK,IAAI,aAAa;AACtB,eAAW,KAAK,aAAa;AAAA,EAC/B;AAEA,SAAO;AACT;AAEA,IAAM,sBAAsB,CAAC,YAAsC;AACjE,QAAM,SAAyB,EAAE,MAAM,CAAC,EAAE;AAE1C,WAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AACtD,UAAM,MAAM,QAAQ,KAAK;AAEzB,QAAI,QAAQ,gBAAgB;AAC1B,aAAO,YAAY,aAAa,QAAQ,QAAQ,CAAC,GAAG,cAAc;AAClE,eAAS;AACT;AAAA,IACF;AACA,QAAI,KAAK,WAAW,eAAe,GAAG;AACpC,aAAO,YAAY,aAAa,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,cAAc;AACpE;AAAA,IACF;AAEA,QAAI,QAAQ,SAAS;AACnB,YAAM,WAAW,aAAa,QAAQ,QAAQ,CAAC,GAAG,OAAO;AACzD,aAAO,KAAK,KAAK,GAAG,SAAS,MAAM,GAAG,CAAC;AACvC,eAAS;AACT;AAAA,IACF;AACA,QAAI,KAAK,WAAW,QAAQ,GAAG;AAC7B,aAAO,KAAK,KAAK,GAAG,aAAa,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,MAAM,GAAG,CAAC;AAC1E;AAAA,IACF;AAEA,QAAI,QAAQ,gBAAgB;AAC1B,aAAO,YAAY,aAAa,QAAQ,QAAQ,CAAC,GAAG,cAAc;AAClE,eAAS;AACT;AAAA,IACF;AACA,QAAI,KAAK,WAAW,eAAe,GAAG;AACpC,aAAO,YAAY,aAAa,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,cAAc;AACpE;AAAA,IACF;AAAA,EACF;AAEA,SAAO,OAAO,oBAAoB,OAAO,IAAI;AAC7C,SAAO;AACT;AAEA,eAAsB,cAAc,MAAkB;AACpD,QAAM,SAAS,oBAAoB,KAAK,OAAO;AAC/C,MAAI,CAAC,OAAO,WAAW;AACrB,UAAM,iBAAiB,sBAAsB;AAAA,EAC/C;AAEA,QAAM,SAAS,MAAM,WAAW,sBAAsB;AAAA,IACpD,WAAW,OAAO;AAAA,IAClB,GAAI,OAAO,KAAK,SAAS,IAAI,EAAE,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,IACtD,WAAW,OAAO;AAAA,EACpB,CAAC;AAED,QAAM,QAAQ,OAAQ,OAA+B,UAAU,WAC1D,OAA6B,QAC9B,MAAM,QAAS,OAAmC,OAAO,IACtD,OAAkC,QAAQ,SAC3C;AAEN,SAAO;AAAA,IACL,SAAS;AAAA,IACT,SAAS,mBAAmB,KAAK;AAAA,IACjC,MAAM;AAAA,EACR;AACF;AAEO,IAAM,WAAW;AAAA,EACtB;AAAA,EACA;AACF;","names":[]}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import {
|
|
2
|
+
STABLE_DAEMON_INSTALL_GUIDANCE,
|
|
3
|
+
getAutostartStatus,
|
|
4
|
+
installAutostart,
|
|
5
|
+
isTransientAutostartInstallError,
|
|
6
|
+
uninstallAutostart
|
|
7
|
+
} from "./chunk-WOXBLP7V.js";
|
|
8
|
+
import {
|
|
9
|
+
DEFAULT_DAEMON_STATUS_FETCH_OPTIONS,
|
|
10
|
+
createDaemonStopHeaders,
|
|
11
|
+
fetchDaemonStatusFromMetadata,
|
|
12
|
+
fetchWithTimeout,
|
|
13
|
+
readDaemonMetadata
|
|
14
|
+
} from "./chunk-LBPELU7L.js";
|
|
15
|
+
import "./chunk-SXAGSEKZ.js";
|
|
16
|
+
import "./chunk-MX3NFLCE.js";
|
|
17
|
+
import "./chunk-ASMHEEKY.js";
|
|
18
|
+
import {
|
|
19
|
+
EXIT_DISCONNECTED,
|
|
20
|
+
EXIT_EXECUTION,
|
|
21
|
+
createUsageError
|
|
22
|
+
} from "./chunk-IPE7TF2P.js";
|
|
23
|
+
import "./chunk-STGGGVYT.js";
|
|
24
|
+
import "./chunk-3ILXPKSJ.js";
|
|
25
|
+
import "./chunk-TBUCZX4A.js";
|
|
26
|
+
import "./chunk-Y2KL55OG.js";
|
|
27
|
+
import "./chunk-5SWZDVOW.js";
|
|
28
|
+
import "./chunk-S6S2UP6U.js";
|
|
29
|
+
import "./chunk-S5KZQJJI.js";
|
|
30
|
+
import "./chunk-KZ2IXVQT.js";
|
|
31
|
+
import "./chunk-WHQZBUNY.js";
|
|
32
|
+
import "./chunk-FUSXMW3G.js";
|
|
33
|
+
|
|
34
|
+
// src/cli/commands/daemon.ts
|
|
35
|
+
var parseDaemonArgs = (rawArgs) => {
|
|
36
|
+
const subcommand = rawArgs[0];
|
|
37
|
+
if (subcommand === "install" || subcommand === "uninstall" || subcommand === "status") {
|
|
38
|
+
return { subcommand };
|
|
39
|
+
}
|
|
40
|
+
throw createUsageError("Usage: opendevbrowser daemon <install|uninstall|status>");
|
|
41
|
+
};
|
|
42
|
+
var stopDaemonIfRunning = async () => {
|
|
43
|
+
const metadata = readDaemonMetadata();
|
|
44
|
+
if (!metadata) {
|
|
45
|
+
return { outcome: "not_running" };
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const response = await fetchWithTimeout(`http://127.0.0.1:${metadata.port}/stop`, {
|
|
49
|
+
method: "POST",
|
|
50
|
+
headers: createDaemonStopHeaders(metadata.token, "daemon.uninstall")
|
|
51
|
+
});
|
|
52
|
+
if (response.status === 409) {
|
|
53
|
+
return { outcome: "fingerprint_rejected", pid: metadata.pid, port: metadata.port };
|
|
54
|
+
}
|
|
55
|
+
return response.ok ? { outcome: "stopped", pid: metadata.pid, port: metadata.port } : { outcome: "failed", pid: metadata.pid, port: metadata.port, status: response.status };
|
|
56
|
+
} catch (error) {
|
|
57
|
+
return {
|
|
58
|
+
outcome: "failed",
|
|
59
|
+
pid: metadata.pid,
|
|
60
|
+
port: metadata.port,
|
|
61
|
+
error: error instanceof Error ? error.message : String(error)
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
var buildStopFailureMessage = (stop) => {
|
|
66
|
+
const target = stop.port ? `127.0.0.1:${stop.port}` : "recorded daemon";
|
|
67
|
+
const pid = stop.pid ? ` pid=${stop.pid}` : "";
|
|
68
|
+
if (stop.outcome === "fingerprint_rejected") {
|
|
69
|
+
return `Daemon autostart removed, but the running daemon at ${target}${pid} rejected the stop request as stale. Run \`opendevbrowser status --daemon\` to inspect it and restart from the current install if needed.`;
|
|
70
|
+
}
|
|
71
|
+
const reason = stop.error ?? (stop.status ? `HTTP ${stop.status}` : "unknown error");
|
|
72
|
+
return `Daemon autostart removed, but stopping ${target}${pid} failed (${reason}).`;
|
|
73
|
+
};
|
|
74
|
+
var shouldFailUninstallStop = (stop) => {
|
|
75
|
+
if (stop.outcome === "stopped" || stop.outcome === "not_running") {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
};
|
|
80
|
+
var formatReason = (reason) => {
|
|
81
|
+
return reason ? reason.replace(/_/g, " ") : "unknown reason";
|
|
82
|
+
};
|
|
83
|
+
var buildStableAutostartGuidance = (action) => {
|
|
84
|
+
return `${STABLE_DAEMON_INSTALL_GUIDANCE.replace(/\.$/, "")} to ${action} it.`;
|
|
85
|
+
};
|
|
86
|
+
var describeAutostartLocation = (autostart) => {
|
|
87
|
+
if (autostart.location) {
|
|
88
|
+
return ` at ${autostart.location}`;
|
|
89
|
+
}
|
|
90
|
+
if (autostart.taskName) {
|
|
91
|
+
return ` (${autostart.taskName})`;
|
|
92
|
+
}
|
|
93
|
+
return "";
|
|
94
|
+
};
|
|
95
|
+
var buildStatusMessage = (autostart, running) => {
|
|
96
|
+
const runningText = running ? "running" : "not running";
|
|
97
|
+
if (!autostart.supported) {
|
|
98
|
+
return `Daemon autostart is not supported on ${autostart.platform}. Daemon is ${runningText}.`;
|
|
99
|
+
}
|
|
100
|
+
const location = describeAutostartLocation(autostart);
|
|
101
|
+
if (autostart.health === "healthy") {
|
|
102
|
+
return `Autostart is installed and healthy${location}. Daemon is ${runningText}.`;
|
|
103
|
+
}
|
|
104
|
+
if (autostart.health === "missing") {
|
|
105
|
+
return `Autostart is not installed${location}. ${buildStableAutostartGuidance("install")} Daemon is ${runningText}.`;
|
|
106
|
+
}
|
|
107
|
+
if (autostart.health === "needs_repair") {
|
|
108
|
+
return `Autostart is installed${location} but needs repair (${formatReason(autostart.reason)}). ${buildStableAutostartGuidance("repair")} Daemon is ${runningText}.`;
|
|
109
|
+
}
|
|
110
|
+
if (autostart.health === "malformed") {
|
|
111
|
+
return `Autostart exists${location} but is malformed (${formatReason(autostart.reason)}). ${buildStableAutostartGuidance("repair")} Daemon is ${runningText}.`;
|
|
112
|
+
}
|
|
113
|
+
return `Daemon autostart is not supported on ${autostart.platform}. Daemon is ${runningText}.`;
|
|
114
|
+
};
|
|
115
|
+
async function runDaemonCommand(args) {
|
|
116
|
+
const { subcommand } = parseDaemonArgs(args.rawArgs);
|
|
117
|
+
if (subcommand === "install") {
|
|
118
|
+
let result;
|
|
119
|
+
try {
|
|
120
|
+
result = installAutostart();
|
|
121
|
+
} catch (error) {
|
|
122
|
+
const message2 = error instanceof Error ? error.message : String(error);
|
|
123
|
+
return {
|
|
124
|
+
success: false,
|
|
125
|
+
message: isTransientAutostartInstallError(error) ? message2 : `Daemon autostart install failed: ${message2}`,
|
|
126
|
+
exitCode: EXIT_EXECUTION
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
if (!result.supported) {
|
|
130
|
+
return {
|
|
131
|
+
success: false,
|
|
132
|
+
message: `Daemon autostart is not supported on ${result.platform}.`,
|
|
133
|
+
data: result,
|
|
134
|
+
exitCode: EXIT_EXECUTION
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
success: true,
|
|
139
|
+
message: `Daemon autostart installed (${result.platform}).`,
|
|
140
|
+
data: result
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
if (subcommand === "uninstall") {
|
|
144
|
+
const result = uninstallAutostart();
|
|
145
|
+
if (!result.supported) {
|
|
146
|
+
return {
|
|
147
|
+
success: false,
|
|
148
|
+
message: `Daemon autostart is not supported on ${result.platform}.`,
|
|
149
|
+
data: result,
|
|
150
|
+
exitCode: EXIT_EXECUTION
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
const stop = await stopDaemonIfRunning();
|
|
154
|
+
if (shouldFailUninstallStop(stop)) {
|
|
155
|
+
return {
|
|
156
|
+
success: false,
|
|
157
|
+
message: buildStopFailureMessage(stop),
|
|
158
|
+
data: { ...result, stop },
|
|
159
|
+
exitCode: EXIT_EXECUTION
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
success: true,
|
|
164
|
+
message: `Daemon autostart removed (${result.platform}).`,
|
|
165
|
+
data: result
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
const autostart = getAutostartStatus();
|
|
169
|
+
const daemonStatus = await fetchDaemonStatusFromMetadata(void 0, DEFAULT_DAEMON_STATUS_FETCH_OPTIONS);
|
|
170
|
+
const running = Boolean(daemonStatus);
|
|
171
|
+
const message = buildStatusMessage(autostart, running);
|
|
172
|
+
const data = {
|
|
173
|
+
installed: autostart.installed,
|
|
174
|
+
running,
|
|
175
|
+
autostart: autostart.supported ? autostart : void 0
|
|
176
|
+
};
|
|
177
|
+
if (!running) {
|
|
178
|
+
return {
|
|
179
|
+
success: false,
|
|
180
|
+
message,
|
|
181
|
+
data,
|
|
182
|
+
exitCode: EXIT_DISCONNECTED
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
success: true,
|
|
187
|
+
message,
|
|
188
|
+
data: { ...data, status: daemonStatus }
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
export {
|
|
192
|
+
runDaemonCommand
|
|
193
|
+
};
|
|
194
|
+
//# sourceMappingURL=daemon-5KSVMGN4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/daemon.ts"],"sourcesContent":["import type { ParsedArgs } from \"../args\";\nimport { createUsageError, EXIT_DISCONNECTED, EXIT_EXECUTION } from \"../errors\";\nimport { fetchDaemonStatusFromMetadata } from \"../daemon-status\";\nimport { DEFAULT_DAEMON_STATUS_FETCH_OPTIONS } from \"../daemon-status-policy\";\nimport { createDaemonStopHeaders, readDaemonMetadata } from \"../daemon\";\nimport { fetchWithTimeout } from \"../utils/http\";\nimport {\n getAutostartStatus,\n installAutostart,\n isTransientAutostartInstallError,\n STABLE_DAEMON_INSTALL_GUIDANCE,\n uninstallAutostart\n} from \"../daemon-autostart\";\n\ntype DaemonSubcommand = \"install\" | \"uninstall\" | \"status\";\n\ntype DaemonResult = {\n installed: boolean;\n running: boolean;\n autostart?: ReturnType<typeof getAutostartStatus>;\n status?: Awaited<ReturnType<typeof fetchDaemonStatusFromMetadata>>;\n};\n\ntype StopDaemonResult = {\n outcome: \"stopped\" | \"not_running\" | \"fingerprint_rejected\" | \"failed\";\n pid?: number;\n port?: number;\n status?: number;\n error?: string;\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<StopDaemonResult> => {\n const metadata = readDaemonMetadata();\n if (!metadata) {\n return { outcome: \"not_running\" };\n }\n try {\n const response = await fetchWithTimeout(`http://127.0.0.1:${metadata.port}/stop`, {\n method: \"POST\",\n headers: createDaemonStopHeaders(metadata.token, \"daemon.uninstall\")\n });\n if (response.status === 409) {\n return { outcome: \"fingerprint_rejected\", pid: metadata.pid, port: metadata.port };\n }\n return response.ok\n ? { outcome: \"stopped\", pid: metadata.pid, port: metadata.port }\n : { outcome: \"failed\", pid: metadata.pid, port: metadata.port, status: response.status };\n } catch (error) {\n return {\n outcome: \"failed\",\n pid: metadata.pid,\n port: metadata.port,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n};\n\nconst buildStopFailureMessage = (stop: StopDaemonResult): string => {\n const target = stop.port ? `127.0.0.1:${stop.port}` : \"recorded daemon\";\n const pid = stop.pid ? ` pid=${stop.pid}` : \"\";\n if (stop.outcome === \"fingerprint_rejected\") {\n return `Daemon autostart removed, but the running daemon at ${target}${pid} rejected the stop request as stale. Run \\`opendevbrowser status --daemon\\` to inspect it and restart from the current install if needed.`;\n }\n const reason = stop.error ?? (stop.status ? `HTTP ${stop.status}` : \"unknown error\");\n return `Daemon autostart removed, but stopping ${target}${pid} failed (${reason}).`;\n};\n\nconst shouldFailUninstallStop = (stop: StopDaemonResult): boolean => {\n if (stop.outcome === \"stopped\" || stop.outcome === \"not_running\") {\n return false;\n }\n return true;\n};\n\nconst formatReason = (reason?: ReturnType<typeof getAutostartStatus>[\"reason\"]): string => {\n return reason ? reason.replace(/_/g, \" \") : \"unknown reason\";\n};\n\nconst buildStableAutostartGuidance = (action: \"install\" | \"repair\"): string => {\n return `${STABLE_DAEMON_INSTALL_GUIDANCE.replace(/\\.$/, \"\")} to ${action} it.`;\n};\n\nconst describeAutostartLocation = (autostart: ReturnType<typeof getAutostartStatus>): string => {\n if (autostart.location) {\n return ` at ${autostart.location}`;\n }\n if (autostart.taskName) {\n return ` (${autostart.taskName})`;\n }\n return \"\";\n};\n\nconst buildStatusMessage = (autostart: ReturnType<typeof getAutostartStatus>, running: boolean): string => {\n const runningText = running ? \"running\" : \"not running\";\n\n if (!autostart.supported) {\n return `Daemon autostart is not supported on ${autostart.platform}. Daemon is ${runningText}.`;\n }\n\n const location = describeAutostartLocation(autostart);\n\n if (autostart.health === \"healthy\") {\n return `Autostart is installed and healthy${location}. Daemon is ${runningText}.`;\n }\n\n if (autostart.health === \"missing\") {\n return `Autostart is not installed${location}. ${buildStableAutostartGuidance(\"install\")} Daemon is ${runningText}.`;\n }\n\n if (autostart.health === \"needs_repair\") {\n return `Autostart is installed${location} but needs repair (${formatReason(autostart.reason)}). ${buildStableAutostartGuidance(\"repair\")} Daemon is ${runningText}.`;\n }\n\n if (autostart.health === \"malformed\") {\n return `Autostart exists${location} but is malformed (${formatReason(autostart.reason)}). ${buildStableAutostartGuidance(\"repair\")} Daemon is ${runningText}.`;\n }\n\n return `Daemon autostart is not supported on ${autostart.platform}. Daemon is ${runningText}.`;\n};\n\nexport async function runDaemonCommand(args: ParsedArgs) {\n const { subcommand } = parseDaemonArgs(args.rawArgs);\n\n if (subcommand === \"install\") {\n let result;\n try {\n result = installAutostart();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: isTransientAutostartInstallError(error)\n ? message\n : `Daemon autostart install failed: ${message}`,\n exitCode: EXIT_EXECUTION\n };\n }\n if (!result.supported) {\n return {\n success: false,\n message: `Daemon autostart is not supported on ${result.platform}.`,\n data: result,\n exitCode: EXIT_EXECUTION\n };\n }\n return {\n success: true,\n message: `Daemon autostart installed (${result.platform}).`,\n data: result\n };\n }\n\n if (subcommand === \"uninstall\") {\n const result = uninstallAutostart();\n if (!result.supported) {\n return {\n success: false,\n message: `Daemon autostart is not supported on ${result.platform}.`,\n data: result,\n exitCode: EXIT_EXECUTION\n };\n }\n const stop = await stopDaemonIfRunning();\n if (shouldFailUninstallStop(stop)) {\n return {\n success: false,\n message: buildStopFailureMessage(stop),\n data: { ...result, stop },\n exitCode: EXIT_EXECUTION\n };\n }\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(undefined, DEFAULT_DAEMON_STATUS_FETCH_OPTIONS);\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"],"mappings":"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","names":["message"]}
|