opendevbrowser 0.0.28 → 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/ops-client.d.ts +1 -0
- package/dist/browser/ops-client.d.ts.map +1 -1
- 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-T3VVHJTK.js → chunk-S6S2UP6U.js} +1074 -1459
- package/dist/chunk-S6S2UP6U.js.map +1 -0
- package/dist/{chunk-I5ZCOZZV.js → chunk-SXAGSEKZ.js} +1202 -9561
- 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.map +1 -1
- package/dist/cli/commands/macro-resolve.d.ts +4 -1
- package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
- package/dist/cli/commands/product-video.d.ts.map +1 -1
- 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/index.js +204 -8123
- 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/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 +68 -34
- 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-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 +3 -1
- package/dist/macros/execute-runtime.d.ts.map +1 -1
- package/dist/macros/execute.d.ts +2 -0
- 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 +68 -34
- 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/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-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/search-quality.d.ts.map +1 -1
- package/dist/providers/workflow-handoff.d.ts +4 -0
- package/dist/providers/workflow-handoff.d.ts.map +1 -1
- package/dist/providers/workflows.d.ts.map +1 -1
- package/dist/{providers-QF2RFB4J.js → providers-4YY2BLXG.js} +19 -14
- package/dist/providers-4YY2BLXG.js.map +1 -0
- package/dist/public-surface/generated-manifest.d.ts +2 -2
- package/dist/public-surface/generated-manifest.d.ts.map +1 -1
- package/dist/public-surface/source.d.ts +2 -2
- 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/macro_resolve.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 +8 -6
- 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-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-I5ZCOZZV.js.map +0 -1
- package/dist/chunk-QVWOPIZJ.js.map +0 -1
- package/dist/chunk-T3VVHJTK.js.map +0 -1
- /package/dist/{providers-QF2RFB4J.js.map → chunk-RJNI3BHT.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/utils/http.ts","../src/cli/daemon.ts","../src/cli/daemon-commands.ts","../src/browser/session-inspector.ts","../src/inspiredesign/capture.ts","../src/macros/execute.ts","../src/macros/execute-runtime.ts","../src/cli/daemon-state.ts","../src/cli/daemon-status-policy.ts","../src/cli/daemon-status.ts"],"sourcesContent":["const DEFAULT_HTTP_TIMEOUT_MS = 5000;\n\ntype FetchInput = Parameters<typeof fetch>[0];\ntype FetchInit = Parameters<typeof fetch>[1];\n\nexport type TimedFetchResponse = {\n response: Response;\n signal: AbortSignal;\n timeoutMs: number;\n dispose: () => void;\n};\n\nfunction isAbortError(error: unknown): boolean {\n if (!error || typeof error !== \"object\") return false;\n return \"name\" in error && (error as { name?: string }).name === \"AbortError\";\n}\n\nconst resolveTimeoutMs = (timeoutMs: number = DEFAULT_HTTP_TIMEOUT_MS): number => {\n return Number.isFinite(timeoutMs) && timeoutMs > 0 ? timeoutMs : DEFAULT_HTTP_TIMEOUT_MS;\n};\n\nconst createTimeoutError = (timeoutMs: number): Error => {\n return new Error(`Request timed out after ${timeoutMs}ms`);\n};\n\nconst createTimedSignal = (\n timeoutMs: number,\n upstreamSignal?: AbortSignal\n): { signal: AbortSignal; dispose: () => void } => {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n let removeAbortListener: (() => void) | undefined;\n if (upstreamSignal) {\n if (upstreamSignal.aborted) {\n controller.abort(upstreamSignal.reason);\n } else {\n const onAbort = () => controller.abort(upstreamSignal.reason);\n upstreamSignal.addEventListener(\"abort\", onAbort, { once: true });\n removeAbortListener = () => upstreamSignal.removeEventListener(\"abort\", onAbort);\n }\n }\n\n return {\n signal: controller.signal,\n dispose: () => {\n clearTimeout(timeoutId);\n removeAbortListener?.();\n }\n };\n};\n\nconst cancelResponseBody = (response: Response): void => {\n try {\n const cancelResult = response.body?.cancel?.();\n if (cancelResult instanceof Promise) {\n void cancelResult.catch(() => {});\n }\n } catch {\n // Best effort only.\n }\n};\n\nconst readResponseBodyWithTimeout = async <T>(\n response: Response,\n signal: AbortSignal,\n timeoutMs: number,\n reader: () => Promise<T>\n): Promise<T> => {\n let bodyCancelled = false;\n const cancelBody = () => {\n if (bodyCancelled) {\n return;\n }\n bodyCancelled = true;\n cancelResponseBody(response);\n };\n\n if (signal.aborted) {\n cancelBody();\n throw createTimeoutError(timeoutMs);\n }\n\n let removeAbortListener: (() => void) | undefined;\n const abortPromise = new Promise<T>((_, reject) => {\n const onAbort = () => {\n cancelBody();\n reject(createTimeoutError(timeoutMs));\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n removeAbortListener = () => signal.removeEventListener(\"abort\", onAbort);\n });\n\n try {\n return await Promise.race([reader(), abortPromise]);\n } catch (error) {\n if (signal.aborted || isAbortError(error)) {\n cancelBody();\n throw createTimeoutError(timeoutMs);\n }\n throw error;\n } finally {\n removeAbortListener?.();\n }\n};\n\nexport async function fetchWithTimeout(\n input: FetchInput,\n init: FetchInit = {},\n timeoutMs: number = DEFAULT_HTTP_TIMEOUT_MS\n): Promise<Response> {\n const resolvedTimeout = resolveTimeoutMs(timeoutMs);\n const timedSignal = createTimedSignal(resolvedTimeout, init?.signal ?? undefined);\n\n try {\n return await fetch(input, { ...init, signal: timedSignal.signal });\n } catch (error) {\n if (isAbortError(error) || timedSignal.signal.aborted) {\n throw createTimeoutError(resolvedTimeout);\n }\n throw error;\n } finally {\n timedSignal.dispose();\n }\n}\n\nexport async function fetchWithTimeoutContext(\n input: FetchInput,\n init: FetchInit = {},\n timeoutMs: number = DEFAULT_HTTP_TIMEOUT_MS\n): Promise<TimedFetchResponse> {\n const resolvedTimeout = resolveTimeoutMs(timeoutMs);\n const timedSignal = createTimedSignal(resolvedTimeout, init?.signal ?? undefined);\n\n try {\n const response = await fetch(input, { ...init, signal: timedSignal.signal });\n return {\n response,\n signal: timedSignal.signal,\n timeoutMs: resolvedTimeout,\n dispose: timedSignal.dispose\n };\n } catch (error) {\n timedSignal.dispose();\n if (isAbortError(error) || timedSignal.signal.aborted) {\n throw createTimeoutError(resolvedTimeout);\n }\n throw error;\n }\n}\n\nexport async function readResponseTextWithTimeout(\n response: Response,\n signal: AbortSignal,\n timeoutMs: number\n): Promise<string> {\n return await readResponseBodyWithTimeout(response, signal, timeoutMs, () => response.text());\n}\n\nexport async function readResponseJsonWithTimeout<T>(\n response: Response,\n signal: AbortSignal,\n timeoutMs: number\n): Promise<T> {\n return await readResponseBodyWithTimeout(response, signal, timeoutMs, () => response.json() as Promise<T>);\n}\n","import { createServer, type IncomingMessage, type ServerResponse } from \"http\";\nimport { createHash, timingSafeEqual } from \"crypto\";\nimport { mkdirSync, readFileSync, writeFileSync, unlinkSync, existsSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { basename, dirname, join, resolve } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { generateSecureToken } from \"../utils/crypto\";\nimport { createOpenDevBrowserCore } from \"../core\";\nimport { loadGlobalConfig, resolveConfig, type OpenDevBrowserConfig } from \"../config\";\nimport { handleDaemonCommand, type DaemonCommandRequest } from \"./daemon-commands\";\nimport { clearBinding, getBindingDiagnostics, getHubInstanceId } from \"./daemon-state\";\n\nconst DEFAULT_DAEMON_PORT = 8788;\nexport const DAEMON_STOP_DEBUG_ENV = \"OPDEVBROWSER_DEBUG_DAEMON_STOP\";\nconst DAEMON_FINGERPRINT_FILE = \"daemon-fingerprint.json\";\nexport const DAEMON_STOP_REASON_HEADER = \"x-opendevbrowser-stop-reason\";\nexport const DAEMON_STOP_CLIENT_PID_HEADER = \"x-opendevbrowser-stop-client-pid\";\nexport const DAEMON_STOP_FINGERPRINT_HEADER = \"x-opendevbrowser-stop-fingerprint\";\n\nconst RECOVERABLE_PLAYWRIGHT_TRANSPORT_ERRORS = [\n \"Cannot find context with specified id\",\n \"Detached while handling command.\",\n \"No frame with given id found\"\n] as const;\nconst DAEMON_FINGERPRINT_VERSION = \"v1\";\n\nexport type DaemonState = {\n port: number;\n token: string;\n pid: number;\n relayPort: number;\n startedAt: string;\n fingerprint: string;\n hubInstanceId?: string;\n relayInstanceId?: string;\n relayEpoch?: number;\n};\n\ntype DaemonOptions = {\n port?: number;\n token?: string;\n config?: OpenDevBrowserConfig;\n directory?: string;\n worktree?: string | null;\n};\n\ntype ResolveDaemonEntrypointOptions = {\n argv1?: string;\n moduleUrl?: string;\n entryExists?: (path: string) => boolean;\n};\n\nexport function 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\nexport function resolveCurrentDaemonEntrypointPath(\n options: ResolveDaemonEntrypointOptions = {}\n): string {\n const rawEntry = options.argv1 ?? process.argv[1];\n if (typeof rawEntry === \"string\" && rawEntry.trim().length > 0) {\n return resolve(rawEntry);\n }\n const moduleUrl = options.moduleUrl ?? import.meta.url;\n const cliEntrypoint = resolve(fileURLToPath(new URL(\"./index.js\", moduleUrl)));\n const entryExists = options.entryExists ?? existsSync;\n if (entryExists(cliEntrypoint)) {\n return cliEntrypoint;\n }\n return resolve(fileURLToPath(moduleUrl));\n}\n\nfunction hashFileContents(entryPath: string): string {\n try {\n return createHash(\"sha256\").update(readFileSync(entryPath)).digest(\"hex\");\n } catch {\n return \"missing\";\n }\n}\n\nfunction resolveDaemonFingerprintDistRoot(modulePath: string): string | null {\n let currentDir = dirname(modulePath);\n while (true) {\n if (basename(currentDir) === \"dist\") {\n return currentDir;\n }\n const parentDir = dirname(currentDir);\n if (parentDir === currentDir) {\n break;\n }\n currentDir = parentDir;\n }\n return null;\n}\n\nfunction readDaemonFingerprintArtifact(modulePath: string): string | null {\n const distRoot = resolveDaemonFingerprintDistRoot(modulePath);\n if (distRoot === null) {\n return null;\n }\n try {\n const content = readFileSync(join(distRoot, DAEMON_FINGERPRINT_FILE), \"utf-8\");\n const payload = JSON.parse(content) as { fingerprint?: unknown };\n if (typeof payload.fingerprint === \"string\" && payload.fingerprint.trim().length > 0) {\n return payload.fingerprint.trim();\n }\n } catch {\n // Fall back to the local module hash below.\n }\n return null;\n}\n\nexport function getCurrentDaemonFingerprint(options: ResolveDaemonEntrypointOptions = {}): string {\n const modulePath = resolve(fileURLToPath(options.moduleUrl ?? import.meta.url));\n const sharedFingerprint = readDaemonFingerprintArtifact(modulePath);\n const fingerprintParts = [\n DAEMON_FINGERPRINT_VERSION,\n sharedFingerprint ?? hashFileContents(modulePath)\n ];\n\n return createHash(\"sha256\")\n .update(fingerprintParts.join(\"\\n\"))\n .digest(\"hex\");\n}\n\nexport function isCurrentDaemonFingerprint(fingerprint?: string | null): boolean {\n return typeof fingerprint === \"string\" && fingerprint === getCurrentDaemonFingerprint();\n}\n\nexport function createDaemonStopHeaders(token: string, reason: string): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n [DAEMON_STOP_FINGERPRINT_HEADER]: getCurrentDaemonFingerprint(),\n [DAEMON_STOP_REASON_HEADER]: reason\n };\n if (process.env[DAEMON_STOP_DEBUG_ENV] === \"1\") {\n headers[DAEMON_STOP_CLIENT_PID_HEADER] = String(process.pid);\n }\n return headers;\n}\n\nexport function resolveDaemonFingerprint(...candidates: Array<string | null | undefined>): string {\n for (const candidate of candidates) {\n if (typeof candidate === \"string\" && candidate.trim().length > 0) {\n return candidate;\n }\n }\n return \"missing\";\n}\n\nexport function isRecoverablePlaywrightTransportError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error ?? \"\");\n return RECOVERABLE_PLAYWRIGHT_TRANSPORT_ERRORS.some((pattern) => message.includes(pattern));\n}\n\nfunction isRecoverablePlaywrightTransportAssertion(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error ?? \"\");\n const isKnownTransportAssertion = message.includes(\"Assertion error\")\n || message.includes(\"No tab attached\");\n if (!isKnownTransportAssertion) {\n return false;\n }\n const stack = error instanceof Error && typeof error.stack === \"string\" ? error.stack : \"\";\n return stack.includes(\"playwright-core/lib/server/chromium/crConnection.js\")\n || stack.includes(\"playwright-core/lib/server/transport.js\");\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\nfunction logDaemonStopDebug(message: string, details?: Record<string, unknown>): void {\n if (process.env[DAEMON_STOP_DEBUG_ENV] !== \"1\") {\n return;\n }\n const suffix = details ? ` ${JSON.stringify(details)}` : \"\";\n console.error(`[daemon-stop-debug] ${message}${suffix}`);\n}\n\nfunction readSingleHeader(request: IncomingMessage, name: string): string | null {\n const value = request.headers[name];\n if (typeof value === \"string\") {\n return value;\n }\n return null;\n}\n\nconst isDaemonCommandRequest = (value: Record<string, unknown>): value is DaemonCommandRequest => {\n if (typeof value.name !== \"string\") {\n return false;\n }\n if (typeof value.params === \"undefined\") {\n return true;\n }\n return typeof value.params === \"object\" && value.params !== null && !Array.isArray(value.params);\n};\n\nexport async function startDaemon(options: DaemonOptions = {}): Promise<{ state: DaemonState; stop: () => Promise<void> }> {\n const config = typeof options.config === \"undefined\"\n ? loadGlobalConfig()\n : resolveConfig(options.config);\n const port = options.port ?? config.daemonPort ?? DEFAULT_DAEMON_PORT;\n const token = options.token ?? config.daemonToken ?? generateSecureToken();\n const startedAt = new Date().toISOString();\n const fingerprint = getCurrentDaemonFingerprint();\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 const relayStatus = core.relay.status();\n writeDaemonMetadata({\n port,\n token,\n pid: process.pid,\n relayPort: relayStatus.port ?? config.relayPort,\n startedAt,\n fingerprint,\n hubInstanceId: getHubInstanceId(),\n relayInstanceId: relayStatus.instanceId,\n relayEpoch: relayStatus.epoch\n });\n sendJson(response, 200, {\n ok: true,\n pid: process.pid,\n fingerprint,\n hub: { instanceId: getHubInstanceId() },\n relay: relayStatus,\n binding: getBindingDiagnostics()\n });\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/stop\") {\n const stopFingerprint = readSingleHeader(request, DAEMON_STOP_FINGERPRINT_HEADER);\n logDaemonStopDebug(\"http.stop\", {\n remoteAddress: request.socket.remoteAddress ?? null,\n remotePort: request.socket.remotePort ?? null,\n reason: readSingleHeader(request, DAEMON_STOP_REASON_HEADER),\n clientPid: readSingleHeader(request, DAEMON_STOP_CLIENT_PID_HEADER),\n fingerprintMatches: stopFingerprint === fingerprint\n });\n if (stopFingerprint !== fingerprint) {\n sendJson(response, 409, { ok: false, error: \"Stale daemon stop request.\" });\n return;\n }\n sendJson(response, 200, { ok: true });\n await stop(\"http.stop\");\n return;\n }\n\n if (request.method === \"POST\" && url.pathname === \"/command\") {\n try {\n const body = await readJson(request);\n if (!isDaemonCommandRequest(body)) {\n throw new Error(\"Invalid daemon command request\");\n }\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,\n fingerprint,\n hubInstanceId: getHubInstanceId(),\n relayInstanceId: core.relay.status().instanceId,\n relayEpoch: core.relay.status().epoch\n };\n writeDaemonMetadata(state);\n\n let stopping = false;\n const handleRecoverableDaemonError = (channel: \"uncaughtException\" | \"unhandledRejection\", error: unknown): boolean => {\n if (!isRecoverablePlaywrightTransportError(error)) {\n if (isRecoverablePlaywrightTransportAssertion(error)) {\n const message = error instanceof Error ? error.message : String(error ?? \"unknown\");\n console.warn(`[daemon] ignored recoverable Playwright transport follow-on (${channel}): ${message}`);\n return true;\n }\n return false;\n }\n const message = error instanceof Error ? error.message : String(error ?? \"unknown\");\n console.warn(`[daemon] ignored recoverable Playwright transport error (${channel}): ${message}`);\n return true;\n };\n\n const uncaughtExceptionHandler = (error: Error) => {\n if (handleRecoverableDaemonError(\"uncaughtException\", error)) {\n return;\n }\n console.error(error);\n void stop(\"uncaughtException\").finally(() => {\n process.exitCode = 1;\n });\n };\n\n const unhandledRejectionHandler = (reason: unknown) => {\n if (handleRecoverableDaemonError(\"unhandledRejection\", reason)) {\n return;\n }\n console.error(reason);\n void stop(\"unhandledRejection\").finally(() => {\n process.exitCode = 1;\n });\n };\n\n const stop = async (reason = \"unknown\") => {\n if (stopping) {\n return;\n }\n stopping = true;\n logDaemonStopDebug(\"stop.begin\", { reason });\n clearDaemonMetadata();\n clearBinding();\n process.off(\"SIGINT\", sigintHandler);\n process.off(\"SIGTERM\", sigtermHandler);\n process.off(\"uncaughtException\", uncaughtExceptionHandler);\n process.off(\"unhandledRejection\", unhandledRejectionHandler);\n core.cleanup();\n await new Promise<void>((resolve) => {\n server.close(() => resolve());\n });\n logDaemonStopDebug(\"stop.complete\", { reason });\n };\n\n const sigintHandler = () => {\n void stop(\"SIGINT\").catch(() => {});\n };\n const sigtermHandler = () => {\n void stop(\"SIGTERM\").catch(() => {});\n };\n\n process.on(\"SIGINT\", sigintHandler);\n process.on(\"SIGTERM\", sigtermHandler);\n process.on(\"uncaughtException\", uncaughtExceptionHandler);\n process.on(\"unhandledRejection\", unhandledRejectionHandler);\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 { randomUUID } from \"crypto\";\nimport type { OpenDevBrowserCore } from \"../core\";\nimport { buildBrowserReviewResult } from \"../browser/review-surface\";\nimport {\n buildCorrelatedAuditBundle,\n inspectSession\n} from \"../browser/session-inspector\";\nimport { resolveBundledProviderRuntime } from \"../providers/runtime-bundle\";\nimport { buildBlockerArtifacts, classifyBlockerSignal } from \"../providers/blocker\";\nimport { captureInspiredesignReferenceFromManager } from \"../inspiredesign/capture\";\nimport {\n runInspiredesignWorkflow,\n runProductVideoWorkflow,\n runResearchWorkflow,\n runShoppingWorkflow\n} from \"../providers/workflows\";\nimport { buildMacroResolveSuccessHandoff } from \"../providers/workflow-handoff\";\nimport { isChallengeAutomationMode, type ChallengeAutomationMode } from \"../challenges\";\nimport {\n type MacroExecutionPayload,\n type MacroResolution\n} from \"../macros/execute\";\nimport { executeMacroWithRuntime } from \"../macros/execute-runtime\";\nimport type { RuntimeInit } from \"../providers\";\nimport type { WorkflowBrowserMode } from \"../providers/types\";\nimport type { AnnotationDispatchSource, AnnotationPayload } from \"../relay/protocol\";\nimport {\n buildLoopbackSessionRelayEndpoint,\n classifySessionRelayEndpoint,\n resolveSessionRelayRoute\n} from \"../relay/relay-endpoints\";\nimport {\n bindRelay,\n waitForBinding,\n releaseRelay,\n renewRelay,\n requireBinding,\n completeScreencastOwner,\n registerScreencastOwner,\n requireScreencastOwner,\n registerSessionLease,\n getSessionLease,\n requireSessionLease,\n releaseSessionLease,\n releaseOwnedSessionLease,\n getBindingRenewConfig,\n getHubInstanceId\n} from \"./daemon-state\";\nimport { fetchWithTimeout } from \"./utils/http\";\n\nexport type DaemonCommandRequest = {\n name: string;\n params?: Record<string, unknown>;\n};\n\nconst createDaemonWorkflowRuntime = (\n core: OpenDevBrowserCore,\n options?: { init?: Omit<RuntimeInit, \"providers\"> }\n) => resolveBundledProviderRuntime({\n existingRuntime: core.providerRuntime,\n config: core.config,\n manager: core.manager,\n browserFallbackPort: core.browserFallbackPort,\n init: options?.init\n});\n\nexport async function handleDaemonCommand(core: OpenDevBrowserCore, request: DaemonCommandRequest): Promise<unknown> {\n const params = request.params ?? {};\n const bindingId = optionalString(params.bindingId);\n\n try {\n return await (async () => {\n switch (request.name) {\n case \"relay.status\":\n return core.relay.status();\n case \"relay.cdpUrl\":\n return core.relay.getCdpUrl();\n case \"relay.annotationUrl\":\n return core.relay.getAnnotationUrl?.() ?? null;\n case \"relay.opsUrl\":\n return core.relay.getOpsUrl?.() ?? null;\n case \"relay.canvasUrl\":\n return core.relay.getCanvasUrl?.() ?? null;\n case \"canvas.execute\":\n return core.canvasManager.execute(\n requireString(params.command, \"command\"),\n requireRecord(params.params ?? {}, \"params\")\n );\n case \"relay.bind\": {\n const clientId = requireClientId(params);\n const binding = bindRelay(clientId);\n const relayStatus = core.relay.status();\n return {\n ...binding,\n hubInstanceId: getHubInstanceId(),\n relayInstanceId: relayStatus.instanceId,\n relayPort: relayStatus.port ?? null,\n bindingConfig: getBindingRenewConfig()\n };\n }\n case \"relay.wait\": {\n const clientId = requireClientId(params);\n const timeoutMs = optionalNumber(params.timeoutMs, \"timeoutMs\");\n const binding = await waitForBinding(clientId, timeoutMs);\n const relayStatus = core.relay.status();\n return {\n ...binding,\n hubInstanceId: getHubInstanceId(),\n relayInstanceId: relayStatus.instanceId,\n relayPort: relayStatus.port ?? null,\n bindingConfig: getBindingRenewConfig()\n };\n }\n case \"relay.renew\": {\n const clientId = requireClientId(params);\n const binding = renewRelay(clientId, requireString(bindingId, \"bindingId\"));\n const relayStatus = core.relay.status();\n return {\n ...binding,\n hubInstanceId: getHubInstanceId(),\n relayInstanceId: relayStatus.instanceId,\n relayPort: relayStatus.port ?? null,\n bindingConfig: getBindingRenewConfig()\n };\n }\n case \"relay.release\": {\n const clientId = requireClientId(params);\n return releaseRelay(clientId, requireString(bindingId, \"bindingId\"));\n }\n case \"session.launch\":\n return launchWithRelay(core, params, requireClientId(params), bindingId);\n case \"session.connect\":\n return connectWithRelayRouting(core, params, requireClientId(params), bindingId);\n case \"session.disconnect\":\n return disconnectSession(core, params, requireClientId(params), bindingId);\n case \"session.status\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.status(requireString(params.sessionId, \"sessionId\"));\n case \"status.capabilities\":\n if (typeof params.sessionId === \"string\") {\n await authorizeSessionCommand(core, params, request.name, bindingId);\n }\n return runStatusCapabilities(core, params);\n case \"session.inspect\": {\n await authorizeSessionCommand(core, params, request.name, bindingId);\n const inspector = requireSessionInspectorHandle(core);\n return inspectSession(inspector, {\n sessionId: requireString(params.sessionId, \"sessionId\"),\n includeUrls: optionalBoolean(params.includeUrls) ?? true,\n sinceConsoleSeq: optionalNumber(params.sinceConsoleSeq, \"sinceConsoleSeq\") ?? undefined,\n sinceNetworkSeq: optionalNumber(params.sinceNetworkSeq, \"sinceNetworkSeq\") ?? undefined,\n sinceExceptionSeq: optionalNumber(params.sinceExceptionSeq, \"sinceExceptionSeq\") ?? undefined,\n max: optionalNumber(params.max, \"max\") ?? undefined,\n requestId: optionalString(params.requestId),\n relayStatus: core.relay.status()\n });\n }\n case \"session.inspectPlan\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return runInspectChallengePlan(core, params);\n case \"session.inspectAudit\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return runInspectAudit(core, params);\n case \"desktop.status\":\n return core.desktopRuntime.status();\n case \"desktop.windows.list\":\n return core.desktopRuntime.listWindows(optionalString(params.reason));\n case \"desktop.window.active\":\n return core.desktopRuntime.activeWindow(optionalString(params.reason));\n case \"desktop.capture.desktop\":\n return core.desktopRuntime.captureDesktop({\n reason: requireString(params.reason, \"reason\")\n });\n case \"desktop.capture.window\":\n return core.desktopRuntime.captureWindow(\n requireString(params.windowId, \"windowId\"),\n { reason: requireString(params.reason, \"reason\") }\n );\n case \"desktop.accessibility.snapshot\":\n return core.desktopRuntime.accessibilitySnapshot(\n requireString(params.reason, \"reason\"),\n optionalString(params.windowId)\n );\n case \"annotate\": {\n await authorizeSessionCommand(core, params, request.name, bindingId);\n const sessionId = requireString(params.sessionId, \"sessionId\");\n const stored = optionalBoolean(params.stored) ?? false;\n const transport = stored ? \"relay\" : requireAnnotationTransport(params.transport);\n if (transport === \"relay\" && !stored) {\n const status = await core.manager.status(sessionId);\n if (status.mode !== \"extension\") {\n throw new Error(\"Relay annotations require extension mode.\");\n }\n }\n const url = optionalString(params.url);\n const targetId = optionalString(params.targetId);\n const tabId = optionalNumber(params.tabId, \"tabId\");\n const screenshotMode = requireScreenshotMode(params.screenshotMode);\n const debug = optionalBoolean(params.debug) ?? false;\n const context = optionalString(params.context);\n const includeScreenshots = optionalBoolean(params.includeScreenshots) ?? true;\n const timeoutMs = optionalNumber(params.timeoutMs, \"timeoutMs\");\n return core.annotationManager.requestAnnotation({\n sessionId,\n transport,\n stored,\n includeScreenshots,\n targetId,\n tabId,\n url,\n screenshotMode,\n debug,\n context,\n timeoutMs\n });\n }\n case \"agent.inbox.enqueue\":\n return core.agentInbox.enqueue({\n payload: requireAnnotationPayload(params.payload),\n source: requireAnnotationDispatchSource(params.source),\n label: optionalString(params.label) ?? \"\",\n explicitChatScopeKey: optionalString(params.chatScopeKey) ?? null\n });\n case \"agent.inbox.peek\": {\n const chatScopeKey = requireString(params.chatScopeKey, \"chatScopeKey\");\n return {\n chatScopeKey,\n activeScopes: core.agentInbox.listActiveScopes(),\n entries: core.agentInbox.peekScope(chatScopeKey)\n };\n }\n case \"agent.inbox.consume\": {\n const chatScopeKey = requireString(params.chatScopeKey, \"chatScopeKey\");\n const entries = core.agentInbox.consumeScope(chatScopeKey);\n return {\n chatScopeKey,\n receiptIds: entries.map((entry) => entry.id),\n entries\n };\n }\n case \"agent.inbox.ack\": {\n const receiptIds = requireStringArray(params.receiptIds, \"receiptIds\");\n core.agentInbox.acknowledge(receiptIds);\n return {\n ok: true,\n receiptIds\n };\n }\n case \"targets.list\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.listTargets(\n requireString(params.sessionId, \"sessionId\"),\n optionalBoolean(params.includeUrls) ?? false\n );\n case \"targets.use\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.useTarget(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.targetId, \"targetId\")\n );\n case \"targets.new\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.newTarget(\n requireString(params.sessionId, \"sessionId\"),\n optionalString(params.url)\n );\n case \"targets.close\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n await core.manager.closeTarget(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.targetId, \"targetId\")\n );\n return { ok: true };\n case \"page.open\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.page(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.name, \"name\"),\n optionalString(params.url)\n );\n case \"page.list\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.listPages(requireString(params.sessionId, \"sessionId\"));\n case \"page.close\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n await core.manager.closePage(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.name, \"name\")\n );\n return { ok: true };\n case \"nav.goto\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n {\n const targetId = optionalString(params.targetId);\n const sessionId = requireString(params.sessionId, \"sessionId\");\n return attachBlockerMetaForNavigation(\n core,\n sessionId,\n await core.manager.goto(\n sessionId,\n requireString(params.url, \"url\"),\n requireWaitUntil(params.waitUntil),\n optionalNumber(params.timeoutMs, \"timeoutMs\") ?? 30000,\n undefined,\n targetId\n )\n );\n }\n case \"nav.wait\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n {\n const targetId = optionalString(params.targetId);\n const sessionId = requireString(params.sessionId, \"sessionId\");\n if (typeof params.ref === \"string\") {\n return attachBlockerMetaForNavigation(\n core,\n sessionId,\n await core.manager.waitForRef(\n sessionId,\n requireString(params.ref, \"ref\"),\n requireState(params.state),\n optionalNumber(params.timeoutMs, \"timeoutMs\") ?? 30000,\n targetId\n )\n );\n }\n return attachBlockerMetaForNavigation(\n core,\n sessionId,\n await core.manager.waitForLoad(\n sessionId,\n requireWaitUntil(params.until),\n optionalNumber(params.timeoutMs, \"timeoutMs\") ?? 30000,\n targetId\n )\n );\n }\n case \"nav.snapshot\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n {\n const targetId = optionalString(params.targetId);\n return core.manager.snapshot(\n requireString(params.sessionId, \"sessionId\"),\n requireSnapshotMode(params.mode),\n optionalPositiveInteger(params.maxChars, \"maxChars\") ?? 16000,\n optionalString(params.cursor),\n targetId\n );\n }\n case \"nav.review\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return buildBrowserReviewResult({\n manager: core.manager,\n sessionId: requireString(params.sessionId, \"sessionId\"),\n targetId: optionalString(params.targetId),\n maxChars: optionalPositiveInteger(params.maxChars, \"maxChars\") ?? core.config.snapshot.maxChars,\n cursor: optionalString(params.cursor)\n });\n case \"nav.reviewDesktop\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return runReviewDesktop(core, params);\n case \"interact.click\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.click(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n optionalString(params.targetId)\n );\n case \"interact.hover\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.hover(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n optionalString(params.targetId)\n );\n case \"interact.press\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.press(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.key, \"key\"),\n optionalString(params.ref),\n optionalString(params.targetId)\n );\n case \"interact.check\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.check(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n optionalString(params.targetId)\n );\n case \"interact.uncheck\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.uncheck(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n optionalString(params.targetId)\n );\n case \"interact.type\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\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 optionalString(params.targetId)\n );\n case \"interact.select\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.select(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n requireStringArray(params.values, \"values\"),\n optionalString(params.targetId)\n );\n case \"interact.upload\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.upload(\n requireString(params.sessionId, \"sessionId\"),\n {\n ref: requireString(params.ref, \"ref\"),\n files: requireStringArray(params.files, \"files\"),\n ...(typeof params.targetId === \"string\" ? { targetId: params.targetId } : {})\n }\n );\n case \"interact.scroll\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.scroll(\n requireString(params.sessionId, \"sessionId\"),\n optionalNumber(params.dy, \"dy\") ?? 0,\n optionalString(params.ref),\n optionalString(params.targetId)\n );\n case \"interact.scrollIntoView\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.scrollIntoView(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n optionalString(params.targetId)\n );\n case \"pointer.move\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.pointerMove(\n requireString(params.sessionId, \"sessionId\"),\n requireFiniteNumber(params.x, \"x\"),\n requireFiniteNumber(params.y, \"y\"),\n optionalString(params.targetId),\n optionalNumber(params.steps, \"steps\")\n );\n case \"pointer.down\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.pointerDown(\n requireString(params.sessionId, \"sessionId\"),\n requireFiniteNumber(params.x, \"x\"),\n requireFiniteNumber(params.y, \"y\"),\n optionalString(params.targetId),\n optionalPointerButton(params.button),\n optionalNumber(params.clickCount, \"clickCount\") ?? 1\n );\n case \"pointer.up\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.pointerUp(\n requireString(params.sessionId, \"sessionId\"),\n requireFiniteNumber(params.x, \"x\"),\n requireFiniteNumber(params.y, \"y\"),\n optionalString(params.targetId),\n optionalPointerButton(params.button),\n optionalNumber(params.clickCount, \"clickCount\") ?? 1\n );\n case \"pointer.drag\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.drag(\n requireString(params.sessionId, \"sessionId\"),\n requirePointerPoint(params.from, \"from\"),\n requirePointerPoint(params.to, \"to\"),\n optionalString(params.targetId),\n optionalNumber(params.steps, \"steps\")\n );\n case \"dom.getHtml\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.domGetHtml(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n optionalPositiveInteger(params.maxChars, \"maxChars\") ?? 8000,\n optionalString(params.targetId)\n );\n case \"dom.getText\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.domGetText(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n optionalPositiveInteger(params.maxChars, \"maxChars\") ?? 8000,\n optionalString(params.targetId)\n );\n case \"dom.getAttr\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.domGetAttr(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n requireString(params.name, \"name\"),\n optionalString(params.targetId)\n );\n case \"dom.getValue\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.domGetValue(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n optionalString(params.targetId)\n );\n case \"dom.isVisible\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.domIsVisible(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n optionalString(params.targetId)\n );\n case \"dom.isEnabled\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.domIsEnabled(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n optionalString(params.targetId)\n );\n case \"dom.isChecked\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.domIsChecked(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n optionalString(params.targetId)\n );\n case \"export.clonePage\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.clonePage(\n requireString(params.sessionId, \"sessionId\"),\n optionalString(params.targetId)\n );\n case \"export.clonePageHtml\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n if (typeof core.manager.clonePageHtmlWithOptions !== \"function\") {\n throw new Error(\"clonePageHtmlWithOptions unavailable in this execution lane.\");\n }\n {\n const maxNodes = optionalPositiveInteger(params.maxNodes, \"maxNodes\");\n return core.manager.clonePageHtmlWithOptions(\n requireString(params.sessionId, \"sessionId\"),\n optionalString(params.targetId),\n {\n ...(typeof maxNodes === \"number\" ? { maxNodes } : {}),\n ...(typeof params.inlineStyles === \"boolean\" ? { inlineStyles: params.inlineStyles } : {})\n }\n );\n }\n case \"export.cloneComponent\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.cloneComponent(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.ref, \"ref\"),\n optionalString(params.targetId)\n );\n case \"devtools.perf\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.perfMetrics(\n requireString(params.sessionId, \"sessionId\"),\n optionalString(params.targetId)\n );\n case \"page.screenshot\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.screenshot(\n requireString(params.sessionId, \"sessionId\"),\n {\n ...(typeof params.path === \"string\" ? { path: params.path } : {}),\n ...(typeof params.targetId === \"string\" ? { targetId: params.targetId } : {}),\n ...(typeof params.ref === \"string\" ? { ref: params.ref } : {}),\n ...(params.fullPage === true ? { fullPage: true } : {})\n }\n );\n case \"page.screencast.start\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n const screencastOwnerClientId = requireClientId(params);\n const screencast = await core.manager.startScreencast(\n requireString(params.sessionId, \"sessionId\"),\n {\n targetId: optionalString(params.targetId),\n outputDir: optionalString(params.outputDir),\n intervalMs: optionalNumber(params.intervalMs, \"intervalMs\") ?? undefined,\n maxFrames: optionalNumber(params.maxFrames, \"maxFrames\") ?? undefined\n }\n );\n registerScreencastOwner(screencast.sessionId, screencast.screencastId, screencastOwnerClientId);\n core.manager.monitorScreencastCompletion?.(screencast.screencastId, () => {\n completeScreencastOwner(screencast.screencastId);\n });\n return screencast;\n case \"page.screencast.stop\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n const screencastResult = await core.manager.stopScreencast(\n requireString(params.sessionId, \"sessionId\"),\n requireString(params.screencastId, \"screencastId\")\n );\n completeScreencastOwner(screencastResult.screencastId);\n return screencastResult;\n case \"page.dialog\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.dialog(\n requireString(params.sessionId, \"sessionId\"),\n {\n ...(typeof params.targetId === \"string\" ? { targetId: params.targetId } : {}),\n ...(typeof params.action === \"string\" ? { action: requireDialogAction(params.action) } : {}),\n ...(typeof params.promptText === \"string\" ? { promptText: params.promptText } : {})\n }\n );\n case \"devtools.consolePoll\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.consolePoll(\n requireString(params.sessionId, \"sessionId\"),\n optionalNonNegativeInteger(params.sinceSeq, \"sinceSeq\"),\n optionalPositiveInteger(params.max, \"max\") ?? 50\n );\n case \"devtools.networkPoll\":\n await authorizeSessionCommand(core, params, request.name, bindingId);\n return core.manager.networkPoll(\n requireString(params.sessionId, \"sessionId\"),\n optionalNonNegativeInteger(params.sinceSeq, \"sinceSeq\"),\n optionalPositiveInteger(params.max, \"max\") ?? 50\n );\n case \"devtools.debugTraceSnapshot\": {\n await authorizeSessionCommand(core, params, request.name, bindingId);\n const sessionId = requireString(params.sessionId, \"sessionId\");\n const manager = core.manager as OpenDevBrowserCore[\"manager\"] & {\n debugTraceSnapshot?: (\n sessionId: string,\n options?: {\n sinceConsoleSeq?: number;\n sinceNetworkSeq?: number;\n sinceExceptionSeq?: number;\n max?: number;\n requestId?: string;\n }\n ) => Promise<unknown>;\n exceptionPoll?: (\n sessionId: string,\n sinceSeq?: number,\n max?: number\n ) => Promise<{ events: unknown[]; nextSeq: number }>;\n };\n\n const max = optionalNumber(params.max, \"max\") ?? 50;\n const requestId = optionalString(params.requestId);\n const sinceConsoleSeq = optionalNumber(params.sinceConsoleSeq, \"sinceConsoleSeq\");\n const sinceNetworkSeq = optionalNumber(params.sinceNetworkSeq, \"sinceNetworkSeq\");\n const sinceExceptionSeq = optionalNumber(params.sinceExceptionSeq, \"sinceExceptionSeq\");\n\n if (typeof manager.debugTraceSnapshot === \"function\") {\n return manager.debugTraceSnapshot(sessionId, {\n sinceConsoleSeq,\n sinceNetworkSeq,\n sinceExceptionSeq,\n max,\n requestId\n });\n }\n\n const [page, consoleChannel, networkChannel] = await Promise.all([\n core.manager.status(sessionId),\n core.manager.consolePoll(sessionId, sinceConsoleSeq, max),\n core.manager.networkPoll(sessionId, sinceNetworkSeq, max)\n ]);\n const exceptionChannel = typeof manager.exceptionPoll === \"function\"\n ? await manager.exceptionPoll(sessionId, sinceExceptionSeq, max)\n : { events: [], nextSeq: sinceExceptionSeq ?? 0 };\n\n const fallbackResult = {\n requestId: requestId ?? randomUUID(),\n generatedAt: new Date().toISOString(),\n page,\n channels: {\n console: consoleChannel,\n network: networkChannel,\n exception: exceptionChannel\n }\n };\n return attachBlockerMetaForTrace(core, fallbackResult);\n }\n case \"session.cookieImport\": {\n await authorizeSessionCommand(core, params, request.name, bindingId);\n const sessionId = requireString(params.sessionId, \"sessionId\");\n const manager = core.manager as OpenDevBrowserCore[\"manager\"] & {\n cookieImport?: (\n sessionId: string,\n cookies: CookieImportRecord[],\n strict?: boolean,\n requestId?: string\n ) => Promise<{ requestId: string; imported: number; rejected: Array<{ index: number; reason: string }> }>;\n };\n\n const cookies = requireCookieArray(params.cookies, \"cookies\");\n const strict = optionalBoolean(params.strict) ?? true;\n const requestId = optionalString(params.requestId) ?? randomUUID();\n\n if (typeof manager.cookieImport === \"function\") {\n return manager.cookieImport(sessionId, cookies, strict, requestId);\n }\n\n const normalized: CookieImportRecord[] = [];\n const rejected: Array<{ index: number; reason: string }> = [];\n cookies.forEach((cookie, index) => {\n const validation = validateCookieRecord(cookie);\n if (!validation.valid) {\n rejected.push({ index, reason: validation.reason });\n return;\n }\n normalized.push(validation.cookie);\n });\n\n if (strict && rejected.length > 0) {\n throw new Error(`Cookie import rejected ${rejected.length} entries.`);\n }\n\n if (normalized.length > 0) {\n const targetId = optionalString(params.targetId);\n await core.manager.withPage(sessionId, targetId ?? null, async (page) => {\n await page.context().addCookies(normalized);\n return undefined;\n });\n }\n\n return {\n requestId,\n imported: normalized.length,\n rejected\n };\n }\n case \"session.cookieList\": {\n await authorizeSessionCommand(core, params, request.name, bindingId);\n const sessionId = requireString(params.sessionId, \"sessionId\");\n const manager = core.manager as OpenDevBrowserCore[\"manager\"] & {\n cookieList?: (\n sessionId: string,\n urls?: string[],\n requestId?: string\n ) => Promise<{ requestId: string; cookies: CookieListRecord[]; count: number }>;\n };\n\n const urls = requireOptionalCookieUrlArray(params.urls, \"urls\");\n const requestId = optionalString(params.requestId) ?? randomUUID();\n\n if (typeof manager.cookieList === \"function\") {\n return manager.cookieList(sessionId, urls, requestId);\n }\n\n const targetId = optionalString(params.targetId);\n const cookies = await core.manager.withPage(\n sessionId,\n targetId ?? null,\n async (page) => {\n const listed = urls ? await page.context().cookies(urls) : await page.context().cookies();\n return listed.map((cookie) => ({\n name: cookie.name,\n value: cookie.value,\n domain: cookie.domain,\n path: cookie.path,\n expires: cookie.expires,\n httpOnly: cookie.httpOnly,\n secure: cookie.secure,\n ...(cookie.sameSite ? { sameSite: cookie.sameSite as \"Strict\" | \"Lax\" | \"None\" } : {})\n }));\n }\n );\n\n return {\n requestId,\n cookies,\n count: cookies.length\n };\n }\n case \"macro.resolve\":\n {\n const execute = optionalBoolean(params.execute) ?? false;\n const browserMode = optionalWorkflowBrowserMode(params.browserMode);\n const useCookies = optionalBoolean(params.useCookies);\n const challengeAutomationMode = optionalChallengeAutomationMode(params.challengeAutomationMode);\n const cookiePolicyOverride = optionalCookiePolicy(params.cookiePolicyOverride);\n\n if (!execute && browserMode) {\n throw new Error(\"browserMode requires execute=true for macro resolution\");\n }\n if (!execute && typeof useCookies === \"boolean\") {\n throw new Error(\"useCookies requires execute=true for macro resolution\");\n }\n if (!execute && challengeAutomationMode) {\n throw new Error(\"challengeAutomationMode requires execute=true for macro resolution\");\n }\n if (!execute && cookiePolicyOverride) {\n throw new Error(\"cookiePolicyOverride requires execute=true for macro resolution\");\n }\n\n return resolveMacroExpression(\n {\n expression: requireString(params.expression, \"expression\"),\n defaultProvider: optionalString(params.defaultProvider),\n includeCatalog: optionalBoolean(params.includeCatalog) ?? false,\n execute,\n timeoutMs: optionalNumber(params.timeoutMs, \"timeoutMs\"),\n browserMode,\n useCookies,\n challengeAutomationMode,\n cookiePolicyOverride\n },\n core.config,\n core.manager,\n core.browserFallbackPort,\n core.providerRuntime\n );\n }\n case \"research.run\":\n return runResearchWorkflow(\n createDaemonWorkflowRuntime(core),\n {\n topic: requireString(params.topic, \"topic\"),\n days: optionalNumber(params.days, \"days\"),\n from: optionalString(params.from),\n to: optionalString(params.to),\n sourceSelection: optionalProviderSelection(params.sourceSelection),\n sources: optionalProviderSources(params.sources),\n mode: optionalRenderMode(params.mode) ?? \"compact\",\n includeEngagement: optionalBoolean(params.includeEngagement),\n limitPerSource: optionalNumber(params.limitPerSource, \"limitPerSource\"),\n timeoutMs: optionalNumber(params.timeoutMs, \"timeoutMs\"),\n outputDir: optionalString(params.outputDir),\n ttlHours: optionalNumber(params.ttlHours, \"ttlHours\"),\n browserMode: optionalWorkflowBrowserMode(params.browserMode),\n useCookies: optionalBoolean(params.useCookies),\n challengeAutomationMode: optionalChallengeAutomationMode(params.challengeAutomationMode),\n cookiePolicyOverride: optionalCookiePolicy(params.cookiePolicyOverride)\n }\n );\n case \"shopping.run\":\n return runShoppingWorkflow(\n createDaemonWorkflowRuntime(core),\n {\n query: requireString(params.query, \"query\"),\n providers: optionalStringArray(params.providers),\n budget: optionalNumber(params.budget, \"budget\"),\n region: optionalString(params.region),\n browserMode: optionalWorkflowBrowserMode(params.browserMode),\n sort: optionalShoppingSort(params.sort),\n mode: optionalRenderMode(params.mode) ?? \"compact\",\n timeoutMs: optionalNumber(params.timeoutMs, \"timeoutMs\"),\n outputDir: optionalString(params.outputDir),\n ttlHours: optionalNumber(params.ttlHours, \"ttlHours\"),\n useCookies: optionalBoolean(params.useCookies),\n challengeAutomationMode: optionalChallengeAutomationMode(params.challengeAutomationMode),\n cookiePolicyOverride: optionalCookiePolicy(params.cookiePolicyOverride)\n }\n );\n case \"inspiredesign.run\": {\n const inspiredesignTimeoutMs = optionalNumber(params.timeoutMs, \"timeoutMs\");\n return runInspiredesignWorkflow(\n createDaemonWorkflowRuntime(core),\n {\n brief: requireString(params.brief, \"brief\"),\n urls: optionalStringArray(params.urls),\n captureMode: optionalInspiredesignCaptureMode(params.captureMode),\n includePrototypeGuidance: optionalBoolean(params.includePrototypeGuidance),\n mode: optionalRenderMode(params.mode) ?? \"compact\",\n timeoutMs: inspiredesignTimeoutMs,\n outputDir: optionalString(params.outputDir),\n ttlHours: optionalNumber(params.ttlHours, \"ttlHours\"),\n browserMode: optionalWorkflowBrowserMode(params.browserMode),\n useCookies: optionalBoolean(params.useCookies),\n challengeAutomationMode: optionalChallengeAutomationMode(params.challengeAutomationMode),\n cookiePolicyOverride: optionalCookiePolicy(params.cookiePolicyOverride)\n },\n {\n captureReference: async (url, options) =>\n captureInspiredesignReferenceFromManager(core.manager, url, {\n ...options,\n cookieSource: core.config.providers?.cookieSource\n })\n }\n );\n }\n case \"product.video.run\": {\n const productVideoTimeoutMs = optionalNumber(params.timeoutMs, \"timeoutMs\");\n return runProductVideoWorkflow(\n createDaemonWorkflowRuntime(core),\n {\n product_url: optionalString(params.product_url),\n product_name: optionalString(params.product_name),\n provider_hint: optionalString(params.provider_hint),\n include_screenshots: optionalBoolean(params.include_screenshots),\n include_all_images: optionalBoolean(params.include_all_images),\n include_copy: optionalBoolean(params.include_copy),\n output_dir: optionalString(params.output_dir),\n ttl_hours: optionalNumber(params.ttl_hours, \"ttl_hours\"),\n timeoutMs: productVideoTimeoutMs,\n browserMode: optionalWorkflowBrowserMode(params.browserMode),\n useCookies: optionalBoolean(params.useCookies),\n challengeAutomationMode: optionalChallengeAutomationMode(params.challengeAutomationMode),\n cookiePolicyOverride: optionalCookiePolicy(params.cookiePolicyOverride)\n },\n {\n captureScreenshot: async (url: string, timeoutMs?: number) => {\n const captureTimeoutMs = Math.max(1, Math.min(timeoutMs ?? 30000, 30000));\n const session = await core.manager.launch({\n headless: true,\n startUrl: \"about:blank\",\n // Capture sessions are ephemeral; avoid persisted profile lock contention.\n persistProfile: false\n });\n try {\n await core.manager.goto(session.sessionId, url, \"load\", captureTimeoutMs);\n const screenshot = await Promise.race([\n core.manager.screenshot(session.sessionId),\n new Promise<null>((resolve) => {\n setTimeout(() => resolve(null), captureTimeoutMs);\n })\n ]);\n if (!screenshot || typeof screenshot.base64 !== \"string\" || screenshot.base64.length === 0) return null;\n return Buffer.from(screenshot.base64, \"base64\");\n } catch {\n return null;\n } finally {\n await core.manager.disconnect(session.sessionId, true).catch(() => {\n // Best effort cleanup.\n });\n }\n }\n }\n );\n }\n default:\n throw new Error(`Unknown daemon command: ${request.name}`);\n }\n })();\n } catch (error) {\n throw coerceDaemonSessionError(params, error);\n }\n}\n\nasync function launchWithRelay(\n core: OpenDevBrowserCore,\n params: Record<string, unknown>,\n clientId: string,\n bindingId?: string\n) {\n let relayStatus = core.relay.status();\n const extensionLegacy = optionalBoolean(params.extensionLegacy) ?? false;\n let relayUrl = extensionLegacy ? core.relay.getCdpUrl() : core.relay.getOpsUrl?.() ?? null;\n const relayPort = core.config.relayPort;\n const noExtension = optionalBoolean(params.noExtension) ?? false;\n const extensionOnly = optionalBoolean(params.extensionOnly) ?? false;\n const waitForExtension = optionalBoolean(params.waitForExtension) ?? false;\n const headlessExplicit = optionalBoolean(params.headless) === true;\n if (headlessExplicit && !noExtension) {\n throw unsupportedModeError(\n \"Extension mode does not support headless launches. Use --no-extension --headless for managed mode.\"\n );\n }\n const managedExplicit = Boolean(noExtension || headlessExplicit);\n const managedHeadless = headlessExplicit ? true : false;\n const waitTimeoutMs = clampWaitTimeout(optionalNumber(params.waitTimeoutMs, \"waitTimeoutMs\") ?? 30000);\n\n if (!managedExplicit && extensionLegacy) {\n requireBinding(clientId, bindingId);\n }\n\n if (waitForExtension && !managedExplicit) {\n const observedPort = resolveObservedPort(relayStatus, relayPort);\n const connected = await waitForRelayHandshake(core.relay, observedPort, waitTimeoutMs);\n if (connected) {\n relayStatus = core.relay.status();\n relayUrl = extensionLegacy ? core.relay.getCdpUrl() ?? relayUrl : core.relay.getOpsUrl?.() ?? relayUrl;\n }\n }\n\n const observedPort = resolveObservedPort(relayStatus, relayPort);\n const shouldFetchObserved = !managedExplicit && (!relayUrl || !relayStatus.extensionHandshakeComplete);\n const observedStatus = shouldFetchObserved ? await fetchRelayObservedStatus(observedPort) : null;\n const matchingObservedStatus = getMatchingObservedRelayStatus(relayStatus, observedStatus);\n if (!relayUrl) {\n const fallbackPort = isValidPort(observedStatus?.port) ? observedStatus?.port : observedPort;\n relayUrl = fallbackPort ? buildLoopbackSessionRelayEndpoint(fallbackPort, { extensionLegacy }) : null;\n }\n const extensionReady = Boolean(\n relayUrl && (\n relayStatus.extensionHandshakeComplete ||\n matchingObservedStatus?.extensionHandshakeComplete\n )\n );\n const extensionSocketConnected = Boolean(\n relayStatus.extensionConnected || matchingObservedStatus?.extensionConnected\n );\n const observedInstanceMismatch = Boolean(\n observedStatus\n && observedStatus.instanceId !== relayStatus.instanceId\n && (observedStatus.extensionConnected || observedStatus.extensionHandshakeComplete)\n );\n const handshakePending = Boolean(relayUrl && extensionSocketConnected && !extensionReady);\n const diagnostics = observedStatus\n ? `Diagnostics: relayPort=${observedPort ?? \"?\"} instance=${observedStatus.instanceId.slice(0, 8)} ext=${observedStatus.extensionConnected} handshake=${observedStatus.extensionHandshakeComplete} ops=${observedStatus.opsConnected} cdp=${observedStatus.cdpConnected}`\n : null;\n const missingReason = observedInstanceMismatch\n ? diagnostics\n ? `Extension not connected to the expected relay instance. ${diagnostics}`\n : \"Extension not connected to the expected relay instance.\"\n : handshakePending\n ? diagnostics\n ? `Extension websocket connected but handshake incomplete. Re-establish a clean daemon-extension handshake. ${diagnostics}`\n : \"Extension websocket connected but handshake incomplete. Re-establish a clean daemon-extension handshake.\"\n : diagnostics\n ? `Extension not connected. ${diagnostics}`\n : \"Extension not connected.\";\n\n if (extensionOnly && !extensionReady) {\n throw new Error(buildExtensionMissingMessage(missingReason));\n }\n\n if (!managedExplicit) {\n if (!extensionReady || !relayUrl) {\n throw new Error(buildExtensionMissingMessage(missingReason));\n }\n try {\n const startUrl = optionalString(params.startUrl);\n const result = startUrl\n ? await core.manager.connectRelay(relayUrl, { startUrl })\n : await core.manager.connectRelay(relayUrl);\n const leaseId = extractLeaseId(result);\n if (result.mode === \"extension\" && !extensionLegacy && !leaseId) {\n throw new Error(\"[invalid_session] Extension relay session missing leaseId.\");\n }\n if (result.mode === \"extension\" && leaseId) {\n registerSessionLease(result.sessionId, leaseId, clientId);\n }\n return { ...result, warnings: result.warnings ?? [], ...(leaseId ? { leaseId } : {}) };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const unauthorized = message.toLowerCase().includes(\"unauthorized\") || message.includes(\"401\");\n const relayLabel = extensionLegacy ? \"/cdp\" : \"/ops\";\n const reason = unauthorized\n ? `Extension relay connection failed: relay ${relayLabel} unauthorized (token mismatch).`\n : `Extension relay connection failed: ${message}`;\n throw new Error(buildExtensionMissingMessage(reason));\n }\n }\n\n try {\n const result = await core.manager.launch({\n profile: optionalString(params.profile),\n headless: managedHeadless,\n startUrl: optionalString(params.startUrl),\n chromePath: optionalString(params.chromePath),\n flags: optionalStringArray(params.flags),\n persistProfile: optionalBoolean(params.persistProfile)\n });\n return { ...result, warnings: result.warnings ?? [] };\n } catch (error) {\n throw new Error(buildManagedFailureMessage(error));\n }\n}\n\nasync function connectWithRelayRouting(\n core: OpenDevBrowserCore,\n params: Record<string, unknown>,\n clientId: string,\n bindingId?: string\n) {\n const wsEndpoint = optionalString(params.wsEndpoint);\n const extensionLegacy = optionalBoolean(params.extensionLegacy) ?? false;\n const relayUrl = extensionLegacy ? core.relay.getCdpUrl() : core.relay.getOpsUrl?.() ?? null;\n const parsedRelayEndpoint = classifySessionRelayEndpoint(wsEndpoint);\n const resolvedRelayEndpoint = parsedRelayEndpoint\n ? resolveSessionRelayRoute(parsedRelayEndpoint, { extensionLegacy })\n : null;\n if (resolvedRelayEndpoint && \"code\" in resolvedRelayEndpoint) {\n throw new Error(\"Legacy extension relay (/cdp) requires --extension-legacy.\");\n }\n const relayEndpoint = relayUrl && wsEndpoint === relayUrl\n ? relayUrl\n : resolvedRelayEndpoint?.normalizedEndpoint ?? null;\n\n const hasExplicitCdp = Boolean(wsEndpoint || params.host || params.port);\n const headlessExplicit = optionalBoolean(params.headless) === true;\n\n if (headlessExplicit && !hasExplicitCdp) {\n throw unsupportedModeError(\n \"Extension mode does not support headless connect routing. Use launch --no-extension --headless or connect to an explicit CDP endpoint.\"\n );\n }\n\n if (relayEndpoint || (!hasExplicitCdp && relayUrl)) {\n if (headlessExplicit) {\n throw unsupportedModeError(\n \"Extension mode does not support headless connect routing. Use launch --no-extension --headless or connect to an explicit CDP endpoint.\"\n );\n }\n if (extensionLegacy) {\n requireBinding(clientId, bindingId);\n }\n const startUrl = optionalString(params.startUrl);\n const result = startUrl\n ? await core.manager.connectRelay(relayEndpoint ?? relayUrl ?? \"\", { startUrl })\n : await core.manager.connectRelay(relayEndpoint ?? relayUrl ?? \"\");\n const leaseId = extractLeaseId(result);\n if (result.mode === \"extension\" && !extensionLegacy && !leaseId) {\n throw new Error(\"[invalid_session] Extension relay session missing leaseId.\");\n }\n if (result.mode === \"extension\" && leaseId) {\n registerSessionLease(result.sessionId, leaseId, clientId);\n }\n return { ...result, ...(leaseId ? { leaseId } : {}) };\n }\n\n if (!hasExplicitCdp) {\n throw new Error(\"Extension relay not available. Connect the extension or pass --cdp-port/--ws-endpoint.\");\n }\n\n return core.manager.connect({\n wsEndpoint,\n host: optionalString(params.host),\n port: optionalNumber(params.port, \"port\"),\n startUrl: optionalString(params.startUrl)\n });\n}\n\nasync function disconnectSession(\n core: OpenDevBrowserCore,\n params: Record<string, unknown>,\n clientId: string,\n bindingId?: string\n): Promise<{ ok: true; bindingReleased?: boolean }> {\n const sessionId = requireString(params.sessionId, \"sessionId\");\n let status: Awaited<ReturnType<OpenDevBrowserCore[\"manager\"][\"status\"]>> | null = null;\n try {\n status = await core.manager.status(sessionId);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error ?? \"\");\n if (isIgnorableDisconnectStatusError(message)) {\n const lease = getSessionLease(sessionId);\n if (lease) {\n requireSessionLease(sessionId, clientId, optionalString(params.leaseId));\n } else if (bindingId) {\n requireBinding(clientId, bindingId);\n }\n releaseSessionLease(sessionId);\n if (bindingId) {\n releaseRelay(clientId, bindingId);\n return { ok: true, bindingReleased: true };\n }\n return { ok: true };\n }\n throw error;\n }\n if (status.mode === \"extension\") {\n const lease = getSessionLease(sessionId);\n if (lease) {\n requireSessionLease(sessionId, clientId, optionalString(params.leaseId));\n } else {\n requireBinding(clientId, bindingId);\n }\n }\n await core.manager.disconnect(sessionId, optionalBoolean(params.closeBrowser) ?? false);\n releaseSessionLease(sessionId);\n if (status.mode === \"extension\" && bindingId) {\n releaseRelay(clientId, bindingId);\n return { ok: true, bindingReleased: true };\n }\n return { ok: true };\n}\n\nfunction requireSessionInspectorHandle(core: OpenDevBrowserCore) {\n const inspector = core.manager.createSessionInspector?.();\n if (!inspector) {\n throw new Error(\"Session inspector is unavailable for the current runtime.\");\n }\n return inspector;\n}\n\nfunction readChallengeAutomationMode(\n params: Record<string, unknown>\n): ChallengeAutomationMode | undefined {\n return optionalChallengeAutomationMode(params.challengeAutomationMode);\n}\n\nasync function runReviewDesktop(\n core: OpenDevBrowserCore,\n params: Record<string, unknown>\n) {\n return core.automationCoordinator.reviewDesktop({\n browserSessionId: requireString(params.sessionId, \"sessionId\"),\n targetId: optionalString(params.targetId),\n reason: optionalString(params.reason),\n maxChars: optionalNumber(params.maxChars, \"maxChars\"),\n cursor: optionalString(params.cursor)\n });\n}\n\nasync function runInspectChallengePlan(\n core: OpenDevBrowserCore,\n params: Record<string, unknown>\n) {\n return core.automationCoordinator.inspectChallengePlan({\n browserSessionId: requireString(params.sessionId, \"sessionId\"),\n targetId: optionalString(params.targetId),\n runMode: readChallengeAutomationMode(params)\n });\n}\n\nasync function runInspectAudit(\n core: OpenDevBrowserCore,\n params: Record<string, unknown>\n) {\n const browserSessionId = requireString(params.sessionId, \"sessionId\");\n const targetId = optionalString(params.targetId);\n const review = await runReviewDesktop(core, params);\n const challengePlan = await core.automationCoordinator.inspectChallengePlan({\n browserSessionId,\n targetId,\n runMode: readChallengeAutomationMode(params)\n });\n return buildCorrelatedAuditBundle({\n handle: requireSessionInspectorHandle(core),\n browserSessionId,\n targetId,\n observation: review.observation,\n review: review.verification,\n challengePlan,\n includeUrls: optionalBoolean(params.includeUrls) ?? undefined,\n sinceConsoleSeq: optionalNumber(params.sinceConsoleSeq, \"sinceConsoleSeq\"),\n sinceNetworkSeq: optionalNumber(params.sinceNetworkSeq, \"sinceNetworkSeq\"),\n sinceExceptionSeq: optionalNumber(params.sinceExceptionSeq, \"sinceExceptionSeq\"),\n max: optionalNumber(params.max, \"max\"),\n requestId: optionalString(params.requestId),\n relayStatus: core.relay.status()\n });\n}\n\nasync function runStatusCapabilities(\n core: OpenDevBrowserCore,\n params: Record<string, unknown>\n) {\n return core.automationCoordinator.statusCapabilities({\n browserSessionId: optionalString(params.sessionId),\n targetId: optionalString(params.targetId),\n runMode: readChallengeAutomationMode(params)\n });\n}\n\nasync function authorizeSessionCommand(\n core: OpenDevBrowserCore,\n params: Record<string, unknown>,\n commandName: string,\n bindingId?: string\n): Promise<void> {\n const sessionId = optionalString(params.sessionId);\n if (!sessionId) return;\n const clientId = requireClientId(params);\n const lease = getSessionLease(sessionId);\n if (lease) {\n requireSessionLease(sessionId, clientId, optionalString(params.leaseId));\n return;\n }\n let status: Awaited<ReturnType<OpenDevBrowserCore[\"manager\"][\"status\"]>>;\n try {\n status = await core.manager.status(sessionId);\n } catch (error) {\n if (canStopCompletedScreencastWithoutLiveSession(commandName, error)) {\n requireScreencastOwner(\n sessionId,\n requireString(params.screencastId, \"screencastId\"),\n clientId\n );\n return;\n }\n throw error;\n }\n if (status.mode !== \"extension\") {\n return;\n }\n requireBinding(clientId, bindingId);\n}\n\nfunction extractLeaseId(result: unknown): string | undefined {\n if (!result || typeof result !== \"object\") return undefined;\n const leaseId = (result as Record<string, unknown>).leaseId;\n return typeof leaseId === \"string\" ? leaseId : undefined;\n}\n\nfunction buildExtensionMissingMessage(reason: string): string {\n return [\n reason,\n \"Connect the extension: open the Chrome extension popup and click Connect. If ext=on but handshake=off, click Connect again to re-establish a clean daemon-extension handshake, then retry.\",\n \"Tip: If the popup says Connected, it may be connected to a different relay instance/port than the daemon expects.\",\n \"Legend: ext=extension websocket, handshake=extension handshake, ops=active /ops client, cdp=active /cdp client, pairing=token required.\",\n \"\",\n \"Other options (explicit):\",\n \"- Managed (headed): npx opendevbrowser launch --no-extension\",\n \"- Managed (headless): npx opendevbrowser launch --no-extension --headless\",\n \"- Legacy extension relay: npx opendevbrowser launch --extension-legacy\",\n \"- CDPConnect (default port): npx opendevbrowser connect --cdp-port 9222\",\n \"- CDPConnect (explicit WS): npx opendevbrowser connect --ws-endpoint ws://127.0.0.1:9222/devtools/browser/<id>\",\n \"Note: CDPConnect requires Chrome started with --remote-debugging-port=9222.\"\n ].join(\"\\n\");\n}\n\nfunction buildManagedFailureMessage(error: unknown): string {\n const detail = error instanceof Error ? error.message : String(error);\n const normalized = detail.toLowerCase();\n const profileLocked = normalized.includes(\"singletonlock\")\n || normalized.includes(\"processsingleton\")\n || normalized.includes(\"profile in use\")\n || normalized.includes(\"already in use\")\n || normalized.includes(\"user data directory is already in use\")\n || normalized.includes(\"profile is locked\");\n\n if (profileLocked) {\n return [\n `Managed session failed: ${detail}`,\n \"\",\n \"Detected persisted profile lock (another Chrome process is using the same profile).\",\n \"Retry options (explicit):\",\n \"- Managed with a unique profile: npx opendevbrowser launch --no-extension --profile lock-safe-<timestamp>\",\n \"- Managed with a temporary profile: npx opendevbrowser launch --no-extension --persist-profile false\",\n \"- CDPConnect (default port): npx opendevbrowser connect --cdp-port 9222\",\n \"- CDPConnect (explicit WS): npx opendevbrowser connect --ws-endpoint ws://127.0.0.1:9222/devtools/browser/<id>\"\n ].join(\"\\n\");\n }\n\n return [\n `Managed session failed: ${detail}`,\n \"\",\n \"Final option (explicit):\",\n \"- CDPConnect (default port): npx opendevbrowser connect --cdp-port 9222\",\n \"- CDPConnect (explicit WS): npx opendevbrowser connect --ws-endpoint ws://127.0.0.1:9222/devtools/browser/<id>\"\n ].join(\"\\n\");\n}\n\nfunction unsupportedModeError(message: string): Error {\n return new Error(`[unsupported_mode] ${message}`);\n}\n\nfunction coerceDaemonSessionError(params: Record<string, unknown>, error: unknown): Error {\n const sessionId = optionalString(params.sessionId);\n const clientId = optionalString(params.clientId);\n const baseError = error instanceof Error ? error : new Error(String(error ?? \"\"));\n if (!sessionId || !clientId) {\n return baseError;\n }\n if (!isStaleExtensionSessionError(baseError.message)) {\n return baseError;\n }\n const released = releaseOwnedSessionLease(sessionId, clientId, optionalString(params.leaseId));\n if (!released) {\n return baseError;\n }\n return new Error([\n `[relaunch_required] Extension session ${sessionId} is no longer valid.`,\n \"Relaunch the extension-backed session and retry the command.\",\n `Previous error: ${baseError.message}`\n ].join(\" \"));\n}\n\nfunction isIgnorableDisconnectStatusError(message: string): boolean {\n return message.includes(\"[invalid_session]\")\n || message.includes(\"Unknown ops session\")\n || message.includes(\"Ops client not connected\");\n}\n\nfunction canStopCompletedScreencastWithoutLiveSession(commandName: string, error: unknown): boolean {\n if (commandName !== \"page.screencast.stop\") {\n return false;\n }\n const message = error instanceof Error ? error.message : String(error ?? \"\");\n return isIgnorableDisconnectStatusError(message);\n}\n\nfunction isStaleExtensionSessionError(message: string): boolean {\n return message.includes(\"[invalid_session]\")\n || message.includes(\"Unknown sessionId:\")\n || message.includes(\"Unknown ops session\")\n || message.includes(\"[not_owner]\")\n || message.includes(\"Client does not own session\")\n || message.includes(\"Lease does not match session owner\");\n}\n\nasync function attachBlockerMetaForNavigation(\n core: OpenDevBrowserCore,\n sessionId: string,\n result: unknown\n): Promise<unknown> {\n if (!result || typeof result !== \"object\" || Array.isArray(result)) {\n return result;\n }\n\n const record = result as Record<string, unknown>;\n const existingMeta = (!Array.isArray(record.meta) && typeof record.meta === \"object\" && record.meta !== null)\n ? record.meta as Record<string, unknown>\n : undefined;\n if (existingMeta && typeof existingMeta.blockerState === \"string\") {\n return result;\n }\n\n const fallbackStatus = await core.manager.status(sessionId);\n let networkEvents: { events: Array<{ url?: string; status?: number }> } = { events: [] };\n try {\n const polled = await core.manager.networkPoll(\n sessionId,\n undefined,\n core.config.blockerArtifactCaps.maxNetworkEvents\n );\n if (polled && Array.isArray(polled.events)) {\n networkEvents = { events: polled.events as Array<{ url?: string; status?: number }> };\n }\n } catch {\n // Ignore polling failures for fallback blocker enrichment.\n }\n\n const blocker = classifyBlockerSignal({\n source: \"navigation\",\n url: typeof record.url === \"string\" ? record.url : fallbackStatus.url,\n finalUrl: typeof record.finalUrl === \"string\" ? record.finalUrl : fallbackStatus.url,\n title: fallbackStatus.title,\n status: typeof record.status === \"number\" ? record.status : findLatestStatus(networkEvents.events),\n networkHosts: extractHosts(networkEvents.events),\n threshold: core.config.blockerDetectionThreshold,\n promptGuardEnabled: core.config.security.promptInjectionGuard?.enabled ?? true\n });\n\n return {\n ...record,\n meta: {\n ...(existingMeta ?? {}),\n blockerState: blocker ? \"active\" : \"clear\",\n ...(blocker ? { blocker } : {})\n }\n };\n}\n\nfunction attachBlockerMetaForTrace(\n core: OpenDevBrowserCore,\n result: {\n requestId: string;\n generatedAt: string;\n page: { url?: string; title?: string };\n channels: {\n network: { events: Array<{ url?: string; status?: number }> };\n console: { events: unknown[] };\n exception: { events: unknown[] };\n };\n }\n): unknown {\n const blocker = classifyBlockerSignal({\n source: \"network\",\n url: result.page.url,\n finalUrl: result.page.url,\n title: result.page.title,\n status: findLatestStatus(result.channels.network.events),\n networkHosts: extractHosts(result.channels.network.events),\n traceRequestId: result.requestId,\n threshold: core.config.blockerDetectionThreshold,\n promptGuardEnabled: core.config.security.promptInjectionGuard?.enabled ?? true\n });\n const blockerArtifacts = blocker\n ? buildBlockerArtifacts({\n networkEvents: result.channels.network.events,\n consoleEvents: result.channels.console.events,\n exceptionEvents: result.channels.exception.events,\n promptGuardEnabled: core.config.security.promptInjectionGuard?.enabled ?? true,\n caps: core.config.blockerArtifactCaps\n })\n : undefined;\n return {\n ...result,\n meta: {\n blockerState: blocker ? \"active\" : \"clear\",\n ...(blocker ? { blocker } : {}),\n ...(blockerArtifacts ? { blockerArtifacts } : {})\n }\n };\n}\n\nfunction findLatestStatus(events: Array<{ status?: number }>): number | undefined {\n for (let index = events.length - 1; index >= 0; index -= 1) {\n const status = events[index]?.status;\n if (typeof status === \"number\") return status;\n }\n return undefined;\n}\n\nfunction extractHosts(events: Array<{ url?: string }>): string[] {\n const hosts: string[] = [];\n const seen = new Set<string>();\n for (const event of events) {\n if (typeof event.url !== \"string\") continue;\n try {\n const host = new URL(event.url).hostname.toLowerCase();\n if (!host || seen.has(host)) continue;\n seen.add(host);\n hosts.push(host);\n } catch {\n // Ignore invalid URLs.\n }\n }\n return hosts;\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 requireRecord(value: unknown, label: string): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(`Invalid ${label}`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction requireClientId(params: Record<string, unknown>): string {\n return requireString(params.clientId, \"clientId\");\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 requireDialogAction(value: unknown): \"status\" | \"accept\" | \"dismiss\" {\n if (value === \"status\" || value === \"accept\" || value === \"dismiss\") {\n return value;\n }\n throw new Error(\"Invalid action\");\n}\n\ntype CookieImportRecord = {\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\ntype CookieListRecord = {\n name: string;\n value: string;\n domain: string;\n path: string;\n expires: number;\n httpOnly: boolean;\n secure: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n};\n\nfunction requireCookieArray(value: unknown, label: string): CookieImportRecord[] {\n if (!Array.isArray(value)) {\n throw new Error(`Invalid ${label}`);\n }\n const parsed: CookieImportRecord[] = [];\n for (const entry of value) {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n throw new Error(`Invalid ${label}`);\n }\n const cookie = entry as Record<string, unknown>;\n if (typeof cookie.name !== \"string\" || typeof cookie.value !== \"string\") {\n throw new Error(`Invalid ${label}`);\n }\n if (typeof cookie.sameSite !== \"undefined\" && cookie.sameSite !== \"Strict\" && cookie.sameSite !== \"Lax\" && cookie.sameSite !== \"None\") {\n throw new Error(`Invalid ${label}`);\n }\n parsed.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 return parsed;\n}\n\nfunction requireOptionalCookieUrlArray(value: unknown, label: string): string[] | undefined {\n if (typeof value === \"undefined\") {\n return undefined;\n }\n if (!Array.isArray(value)) {\n throw new Error(`Invalid ${label}`);\n }\n\n const normalized: string[] = [];\n const seen = new Set<string>();\n for (const entry of value) {\n if (typeof entry !== \"string\") {\n throw new Error(`Invalid ${label}`);\n }\n const trimmed = entry.trim();\n if (!trimmed) {\n throw new Error(`Invalid ${label}`);\n }\n let parsedUrl: URL;\n try {\n parsedUrl = new URL(trimmed);\n } catch {\n throw new Error(`Invalid ${label}`);\n }\n if (parsedUrl.protocol !== \"http:\" && parsedUrl.protocol !== \"https:\") {\n throw new Error(`Invalid ${label}`);\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.length > 0 ? normalized : undefined;\n}\n\nfunction validateCookieRecord(cookie: CookieImportRecord): { valid: boolean; reason: string; cookie: CookieImportRecord } {\n const name = cookie.name?.trim();\n if (!name) {\n return { valid: false, reason: \"Cookie name is required.\", cookie };\n }\n if (!/^[^\\s;=]+$/.test(name)) {\n return { valid: false, reason: `Invalid cookie name: ${cookie.name}.`, cookie };\n }\n if (typeof cookie.value !== \"string\" || /\\r|\\n|;/.test(cookie.value)) {\n return { valid: false, reason: `Invalid cookie value for ${name}.`, cookie };\n }\n\n const hasUrl = typeof cookie.url === \"string\" && cookie.url.trim().length > 0;\n const hasDomain = typeof cookie.domain === \"string\" && cookie.domain.trim().length > 0;\n if (!hasUrl && !hasDomain) {\n return { valid: false, reason: `Cookie ${name} requires url or domain.`, cookie };\n }\n\n let normalizedUrl: string | undefined;\n if (hasUrl) {\n try {\n const parsedUrl = new URL(cookie.url as string);\n if (parsedUrl.protocol !== \"http:\" && parsedUrl.protocol !== \"https:\") {\n return { valid: false, reason: `Cookie ${name} url must be http(s).`, cookie };\n }\n normalizedUrl = parsedUrl.toString();\n } catch {\n return { valid: false, reason: `Cookie ${name} has invalid url.`, cookie };\n }\n }\n\n let normalizedDomain: string | undefined;\n if (hasDomain) {\n normalizedDomain = String(cookie.domain).trim().toLowerCase();\n if (!/^\\.?[a-z0-9.-]+$/.test(normalizedDomain) || normalizedDomain.includes(\"..\")) {\n return { valid: false, reason: `Cookie ${name} has invalid domain.`, cookie };\n }\n }\n\n const normalizedPath = typeof cookie.path === \"string\" ? cookie.path.trim() : undefined;\n if (typeof normalizedPath === \"string\" && !normalizedPath.startsWith(\"/\")) {\n return { valid: false, reason: `Cookie ${name} path must start with '/'.`, cookie };\n }\n\n if (typeof cookie.expires !== \"undefined\") {\n if (!Number.isFinite(cookie.expires) || cookie.expires < -1) {\n return { valid: false, reason: `Cookie ${name} has invalid expires.`, cookie };\n }\n }\n\n if (cookie.sameSite === \"None\" && cookie.secure !== true) {\n return { valid: false, reason: `Cookie ${name} with SameSite=None must set secure=true.`, cookie };\n }\n\n const normalizedCookie: CookieImportRecord = {\n name,\n value: cookie.value,\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 } : {})\n };\n\n if (normalizedDomain) {\n normalizedCookie.domain = normalizedDomain;\n normalizedCookie.path = normalizedPath ?? \"/\";\n } else if (normalizedUrl) {\n normalizedCookie.url = normalizedUrl;\n }\n\n return {\n valid: true,\n reason: \"\",\n cookie: normalizedCookie\n };\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, label: string): number | undefined {\n if (typeof value === \"undefined\") {\n return undefined;\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n throw new Error(`Invalid ${label}`);\n}\n\nfunction optionalBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction requireFiniteNumber(value: unknown, label: string): number {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n throw new Error(`Invalid ${label}`);\n}\n\nfunction optionalPositiveInteger(value: unknown, label: string): number | undefined {\n if (typeof value === \"undefined\") {\n return undefined;\n }\n if (typeof value === \"number\" && Number.isInteger(value) && value > 0) {\n return value;\n }\n throw new Error(`Invalid ${label}`);\n}\n\nfunction optionalNonNegativeInteger(value: unknown, label: string): number | undefined {\n if (typeof value === \"undefined\") {\n return undefined;\n }\n if (typeof value === \"number\" && Number.isInteger(value) && value >= 0) {\n return value;\n }\n throw new Error(`Invalid ${label}`);\n}\n\nfunction requirePointerPoint(value: unknown, label: string): { x: number; y: number } {\n const point = requireRecord(value, label);\n return {\n x: requireFiniteNumber(point.x, `${label}.x`),\n y: requireFiniteNumber(point.y, `${label}.y`)\n };\n}\n\nfunction optionalPointerButton(value: unknown): \"left\" | \"middle\" | \"right\" {\n if (value === \"middle\" || value === \"right\") {\n return value;\n }\n return \"left\";\n}\n\nfunction optionalRenderMode(value: unknown): \"compact\" | \"json\" | \"md\" | \"context\" | \"path\" | undefined {\n if (typeof value === \"undefined\") return undefined;\n if (value === \"compact\" || value === \"json\" || value === \"md\" || value === \"context\" || value === \"path\") {\n return value;\n }\n throw new Error(\"Invalid mode\");\n}\n\nfunction optionalProviderSelection(value: unknown): \"auto\" | \"web\" | \"community\" | \"social\" | \"shopping\" | \"all\" | undefined {\n if (typeof value === \"undefined\") return undefined;\n if (value === \"auto\" || value === \"web\" || value === \"community\" || value === \"social\" || value === \"shopping\" || value === \"all\") {\n return value;\n }\n throw new Error(\"Invalid sourceSelection\");\n}\n\nfunction optionalProviderSources(value: unknown): Array<\"web\" | \"community\" | \"social\" | \"shopping\"> | undefined {\n if (typeof value === \"undefined\") return undefined;\n if (!Array.isArray(value)) {\n throw new Error(\"Invalid sources\");\n }\n const valid = value.every((entry) => entry === \"web\" || entry === \"community\" || entry === \"social\" || entry === \"shopping\");\n if (!valid) {\n throw new Error(\"Invalid sources\");\n }\n return value as Array<\"web\" | \"community\" | \"social\" | \"shopping\">;\n}\n\nfunction optionalCookiePolicy(value: unknown): \"off\" | \"auto\" | \"required\" | undefined {\n if (typeof value === \"undefined\") return undefined;\n if (value === \"off\" || value === \"auto\" || value === \"required\") {\n return value;\n }\n throw new Error(\"Invalid cookiePolicyOverride\");\n}\n\nfunction optionalChallengeAutomationMode(value: unknown): ChallengeAutomationMode | undefined {\n if (typeof value === \"undefined\") return undefined;\n if (isChallengeAutomationMode(value)) {\n return value;\n }\n throw new Error(\"Invalid challengeAutomationMode\");\n}\n\nfunction optionalShoppingSort(value: unknown): \"best_deal\" | \"lowest_price\" | \"highest_rating\" | \"fastest_shipping\" | undefined {\n if (typeof value === \"undefined\") return undefined;\n if (value === \"best_deal\" || value === \"lowest_price\" || value === \"highest_rating\" || value === \"fastest_shipping\") {\n return value;\n }\n throw new Error(\"Invalid shopping sort\");\n}\n\nfunction optionalWorkflowBrowserMode(value: unknown): \"auto\" | \"extension\" | \"managed\" | undefined {\n if (typeof value === \"undefined\") return undefined;\n if (value === \"auto\" || value === \"extension\" || value === \"managed\") {\n return value;\n }\n throw new Error(\"Invalid browserMode\");\n}\n\nfunction optionalInspiredesignCaptureMode(value: unknown): \"off\" | \"deep\" | undefined {\n if (typeof value === \"undefined\") return undefined;\n if (value === \"off\" || value === \"deep\") {\n return value;\n }\n throw new Error(\"Invalid captureMode\");\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 requireScreenshotMode(value: unknown): \"visible\" | \"full\" | \"none\" {\n if (value === \"visible\" || value === \"full\" || value === \"none\") {\n return value;\n }\n return \"visible\";\n}\n\nfunction requireAnnotationTransport(value: unknown): \"auto\" | \"direct\" | \"relay\" {\n if (value === \"auto\" || value === \"direct\" || value === \"relay\") {\n return value;\n }\n if (typeof value === \"undefined\") {\n return \"auto\";\n }\n throw new Error(\"Invalid transport\");\n}\n\nfunction requireAnnotationDispatchSource(value: unknown): AnnotationDispatchSource {\n if (\n value === \"annotate_item\"\n || value === \"annotate_all\"\n || value === \"popup_item\"\n || value === \"popup_all\"\n || value === \"canvas_item\"\n || value === \"canvas_all\"\n ) {\n return value;\n }\n throw new Error(\"Invalid source\");\n}\n\nfunction requireAnnotationPayload(value: unknown): AnnotationPayload {\n const payload = requireRecord(value, \"payload\");\n if (\n typeof payload.url !== \"string\"\n || typeof payload.timestamp !== \"string\"\n || !Array.isArray(payload.annotations)\n ) {\n throw new Error(\"Invalid payload\");\n }\n if (\n (typeof payload.title !== \"undefined\" && typeof payload.title !== \"string\")\n || (typeof payload.context !== \"undefined\" && typeof payload.context !== \"string\")\n ) {\n throw new Error(\"Invalid payload\");\n }\n if (\n typeof payload.screenshotMode !== \"undefined\"\n && payload.screenshotMode !== \"visible\"\n && payload.screenshotMode !== \"full\"\n && payload.screenshotMode !== \"none\"\n ) {\n throw new Error(\"Invalid payload\");\n }\n return payload as AnnotationPayload;\n}\n\nfunction requireState(value: unknown): \"attached\" | \"visible\" | \"hidden\" {\n if (value === \"visible\" || value === \"hidden\") return value;\n return \"attached\";\n}\n\ntype RelayObservedStatus = {\n instanceId: string;\n running: boolean;\n port?: number;\n extensionConnected: boolean;\n extensionHandshakeComplete: boolean;\n cdpConnected: boolean;\n opsConnected: boolean;\n pairingRequired: boolean;\n};\n\ntype MacroRuntimeModule = {\n createDefaultMacroRegistry?: () => {\n resolve: (expression: string, context?: { defaultProvider?: string }) => Promise<MacroResolution>;\n list: () => Array<{ name: string; pack?: string; description?: string }>;\n };\n};\n\ntype MacroResolveOptions = {\n expression: string;\n defaultProvider?: string;\n includeCatalog: boolean;\n execute: boolean;\n timeoutMs?: number;\n browserMode?: WorkflowBrowserMode;\n useCookies?: boolean;\n challengeAutomationMode?: ChallengeAutomationMode;\n cookiePolicyOverride?: \"off\" | \"auto\" | \"required\";\n};\n\nconst MIN_WAIT_TIMEOUT_MS = 3000;\nconst WAIT_MIN_DELAY_MS = 250;\nconst WAIT_MAX_DELAY_MS = 2000;\nconst RELAY_STATUS_TIMEOUT_MS = 1500;\n\nfunction clampWaitTimeout(timeoutMs: number): number {\n if (!Number.isFinite(timeoutMs)) {\n return MIN_WAIT_TIMEOUT_MS;\n }\n return Math.max(timeoutMs, MIN_WAIT_TIMEOUT_MS);\n}\n\nasync function waitForRelayHandshake(\n relay: { status: () => { extensionHandshakeComplete: boolean; instanceId: string } },\n observedPort: number | null,\n timeoutMs: number\n): Promise<boolean> {\n const start = Date.now();\n let delay = WAIT_MIN_DELAY_MS;\n while (Date.now() - start < timeoutMs) {\n const relayStatus = relay.status();\n if (relayStatus.extensionHandshakeComplete) {\n return true;\n }\n const observedStatus = getMatchingObservedRelayStatus(\n relayStatus,\n await fetchRelayObservedStatus(observedPort)\n );\n if (observedStatus?.extensionHandshakeComplete) {\n return true;\n }\n await new Promise((resolve) => setTimeout(resolve, delay));\n delay = Math.min(delay * 2, WAIT_MAX_DELAY_MS);\n }\n return false;\n}\n\nfunction resolveObservedPort(relayStatus: { port?: number }, configPort: number): number | null {\n if (isValidPort(relayStatus.port)) return relayStatus.port;\n if (isValidPort(configPort)) return configPort;\n return null;\n}\n\nfunction isValidPort(port: unknown): port is number {\n return typeof port === \"number\" && Number.isInteger(port) && port > 0 && port <= 65535;\n}\n\nasync function fetchRelayObservedStatus(port: number | null): Promise<RelayObservedStatus | null> {\n if (!isValidPort(port)) {\n return null;\n }\n try {\n const response = await fetchWithTimeout(\n `http://127.0.0.1:${port}/status`,\n undefined,\n RELAY_STATUS_TIMEOUT_MS\n );\n if (!response.ok) {\n return null;\n }\n const data = await response.json();\n if (!data || typeof data !== \"object\") {\n return null;\n }\n const record = data as Record<string, unknown>;\n if (typeof record.instanceId !== \"string\") {\n return null;\n }\n return {\n instanceId: record.instanceId,\n running: Boolean(record.running),\n port: typeof record.port === \"number\" ? record.port : undefined,\n extensionConnected: Boolean(record.extensionConnected),\n extensionHandshakeComplete: Boolean(record.extensionHandshakeComplete),\n cdpConnected: Boolean(record.cdpConnected),\n opsConnected: Boolean(record.opsConnected),\n pairingRequired: Boolean(record.pairingRequired)\n };\n } catch {\n return null;\n }\n}\n\nfunction getMatchingObservedRelayStatus(\n relayStatus: { instanceId: string },\n observedStatus: RelayObservedStatus | null\n): RelayObservedStatus | null {\n if (!observedStatus) {\n return null;\n }\n return observedStatus.instanceId === relayStatus.instanceId ? observedStatus : null;\n}\n\nasync function loadMacroRuntime(): Promise<MacroRuntimeModule | null> {\n try {\n const module = await import(\"../macros\");\n return module as MacroRuntimeModule;\n } catch {\n return null;\n }\n}\n\nfunction parseFallbackMacro(expression: string, defaultProvider?: string): {\n action: {\n source: \"web\";\n operation: \"search\";\n input: { query: string; limit: number; providerId: string };\n };\n provenance: {\n macro: string;\n provider: string;\n resolvedQuery: string;\n pack: string;\n args: { positional: string[]; named: Record<string, string> };\n };\n} {\n const raw = expression.trim();\n if (!raw.startsWith(\"@\")) {\n throw new Error(\"Macro expressions must start with '@'\");\n }\n\n const body = raw.slice(1).trim();\n if (!body) {\n throw new Error(\"Macro name is required\");\n }\n\n const openParen = body.indexOf(\"(\");\n const closeParen = body.endsWith(\")\") ? body.length - 1 : -1;\n const macroName = openParen >= 0 ? body.slice(0, openParen).trim() : body;\n const argsBody = openParen >= 0 && closeParen > openParen\n ? body.slice(openParen + 1, closeParen).trim()\n : \"\";\n const positional = argsBody\n ? argsBody.split(\",\").map((part) => part.trim().replace(/^['\"]|['\"]$/g, \"\")).filter(Boolean)\n : [];\n const query = positional[0] ?? macroName;\n const provider = defaultProvider ?? \"web/default\";\n\n return {\n action: {\n source: \"web\",\n operation: \"search\",\n input: {\n query,\n limit: 10,\n providerId: provider\n }\n },\n provenance: {\n macro: macroName,\n provider,\n resolvedQuery: query,\n pack: \"fallback\",\n args: {\n positional,\n named: {}\n }\n }\n };\n}\n\nasync function resolveMacroExpression(\n options: MacroResolveOptions,\n config: Pick<OpenDevBrowserCore[\"config\"], \"blockerDetectionThreshold\" | \"security\" | \"providers\">,\n manager: OpenDevBrowserCore[\"manager\"],\n browserFallbackPort: OpenDevBrowserCore[\"browserFallbackPort\"],\n existingRuntime?: OpenDevBrowserCore[\"providerRuntime\"]\n): Promise<{\n runtime: \"macros\" | \"fallback\";\n resolution: MacroResolution;\n catalog?: Array<{ name: string; pack?: string; description?: string }>;\n execution?: MacroExecutionPayload;\n followthroughSummary: string;\n suggestedNextAction: string;\n suggestedSteps: Array<{ reason: string; command?: string }>;\n}> {\n const runtime = await loadMacroRuntime();\n const registry = runtime?.createDefaultMacroRegistry?.();\n let resolvedRuntime: \"macros\" | \"fallback\" = \"fallback\";\n let resolution: MacroResolution;\n let catalog: Array<{ name: string; pack?: string; description?: string }> | undefined;\n\n if (registry) {\n resolvedRuntime = \"macros\";\n resolution = await registry.resolve(options.expression, {\n defaultProvider: options.defaultProvider\n });\n catalog = options.includeCatalog\n ? registry.list().map((entry) => ({\n name: entry.name,\n pack: entry.pack,\n description: entry.description\n }))\n : undefined;\n } else {\n resolution = parseFallbackMacro(options.expression, options.defaultProvider);\n }\n\n if (!options.execute) {\n const handoff = buildMacroResolveSuccessHandoff({\n expression: options.expression,\n defaultProvider: options.defaultProvider,\n execute: false,\n blocked: false\n });\n return {\n runtime: resolvedRuntime,\n resolution,\n ...(catalog ? { catalog } : {}),\n ...handoff\n };\n }\n\n const execution = await executeMacroWithRuntime({\n resolution,\n existingRuntime,\n config,\n manager,\n browserFallbackPort,\n timeoutMs: options.timeoutMs,\n browserMode: options.browserMode,\n useCookies: options.useCookies,\n challengeAutomationMode: options.challengeAutomationMode,\n cookiePolicyOverride: options.cookiePolicyOverride\n });\n const handoff = buildMacroResolveSuccessHandoff({\n expression: options.expression,\n defaultProvider: options.defaultProvider,\n execute: true,\n blocked: Boolean(execution.meta.blocker)\n });\n return {\n runtime: resolvedRuntime,\n resolution,\n ...(catalog ? { catalog } : {}),\n execution,\n ...handoff\n };\n}\n","import { randomUUID } from \"node:crypto\";\nimport type { ChallengeInspectPlan } from \"../challenges\";\nimport type { RelayStatus } from \"../relay/relay-server\";\nimport type { BrowserResponseMeta, SessionInspectorHandle } from \"./manager-types\";\nimport type {\n BrowserVerificationEnvelope,\n DesktopObservationEnvelope\n} from \"../automation/coordinator\";\n\ntype SessionInspectorStatus = Awaited<ReturnType<SessionInspectorHandle[\"status\"]>>;\ntype SessionInspectorTargets = Awaited<ReturnType<SessionInspectorHandle[\"listTargets\"]>>;\n\ntype TraceChannelSummary = {\n eventCount: number;\n nextSeq: number | null;\n truncated: boolean;\n};\n\ntype ConsoleSummary = TraceChannelSummary & {\n errorCount: number;\n warningCount: number;\n latest: Array<{ level: string; message: string }>;\n};\n\ntype NetworkSummary = TraceChannelSummary & {\n failureCount: number;\n latestFailures: Array<{ status?: number; method?: string; url?: string; error?: string }>;\n};\n\ntype ExceptionSummary = TraceChannelSummary & {\n latest: Array<{ message: string; url?: string; line?: number; column?: number }>;\n};\n\nexport type SessionInspectorResult = {\n session: SessionInspectorStatus;\n relay: {\n running: boolean;\n port?: number;\n extensionConnected: boolean;\n extensionHandshakeComplete: boolean;\n annotationConnected: boolean;\n opsConnected: boolean;\n canvasConnected: boolean;\n cdpConnected: boolean;\n pairingRequired: boolean;\n health: RelayStatus[\"health\"];\n } | null;\n targets: {\n activeTargetId: string | null;\n count: number;\n items: SessionInspectorTargets[\"targets\"];\n };\n console: ConsoleSummary;\n network: NetworkSummary;\n exception: ExceptionSummary;\n proofArtifact: {\n source: \"debug_trace_snapshot\";\n requestId: string | null;\n generatedAt: string | null;\n blockerState: \"clear\" | \"active\" | \"resolving\";\n url?: string;\n title?: string;\n };\n healthState: \"ok\" | \"warning\" | \"blocked\";\n suggestedNextAction: string;\n};\n\nexport type CorrelatedAuditBundle = {\n bundleId: string;\n createdAt: string;\n browserSessionId: string;\n targetId?: string | null;\n observationId: string;\n requestId: string | null;\n challengeId?: string;\n desktop: DesktopObservationEnvelope;\n review: BrowserVerificationEnvelope;\n sessionInspector: SessionInspectorResult;\n challengePlan: ChallengeInspectPlan;\n};\n\nexport type InspectSessionOptions = {\n sessionId: string;\n includeUrls?: boolean;\n sinceConsoleSeq?: number;\n sinceNetworkSeq?: number;\n sinceExceptionSeq?: number;\n max?: number;\n requestId?: string;\n relayStatus?: RelayStatus | null;\n};\n\nexport async function inspectSession(\n handle: SessionInspectorHandle,\n options: InspectSessionOptions\n): Promise<SessionInspectorResult> {\n const [session, targets, traceRaw] = await Promise.all([\n handle.status(options.sessionId),\n handle.listTargets(options.sessionId, options.includeUrls ?? true),\n handle.debugTraceSnapshot(options.sessionId, {\n sinceConsoleSeq: options.sinceConsoleSeq,\n sinceNetworkSeq: options.sinceNetworkSeq,\n sinceExceptionSeq: options.sinceExceptionSeq,\n max: options.max ?? 25,\n requestId: options.requestId\n })\n ]);\n\n const trace = asRecord(traceRaw);\n const tracePage = asRecord(trace.page);\n const traceMeta = asRecord(trace.meta);\n const traceConsole = summarizeConsole(readChannel(trace, \"console\"));\n const traceNetwork = summarizeNetwork(readChannel(trace, \"network\"));\n const traceException = summarizeException(readChannel(trace, \"exception\"));\n const blockerState = readBlockerState(traceMeta, session.meta);\n const relay = options.relayStatus ? summarizeRelay(options.relayStatus) : null;\n const healthState = deriveHealthState({\n mode: session.mode,\n blockerState,\n dialogOpen: session.meta?.dialog?.open === true,\n relay,\n activeTargetId: targets.activeTargetId,\n consoleErrors: traceConsole.errorCount,\n networkFailures: traceNetwork.failureCount,\n exceptionCount: traceException.eventCount\n });\n\n return {\n session,\n relay,\n targets: {\n activeTargetId: targets.activeTargetId,\n count: targets.targets.length,\n items: targets.targets\n },\n console: traceConsole,\n network: traceNetwork,\n exception: traceException,\n proofArtifact: {\n source: \"debug_trace_snapshot\",\n requestId: getString(trace.requestId) ?? options.requestId ?? null,\n generatedAt: getString(trace.generatedAt) ?? null,\n blockerState,\n ...(getString(tracePage.url) || session.url ? { url: getString(tracePage.url) ?? session.url } : {}),\n ...(getString(tracePage.title) || session.title ? { title: getString(tracePage.title) ?? session.title } : {})\n },\n healthState,\n suggestedNextAction: deriveSuggestedNextAction({\n mode: session.mode,\n dialogOpen: session.meta?.dialog?.open === true,\n blockerState,\n relay,\n activeTargetId: targets.activeTargetId,\n consoleErrors: traceConsole.errorCount,\n networkFailures: traceNetwork.failureCount,\n exceptionCount: traceException.eventCount\n })\n };\n}\n\nexport async function buildCorrelatedAuditBundle(args: {\n handle: SessionInspectorHandle;\n browserSessionId: string;\n targetId?: string | null;\n observation: DesktopObservationEnvelope;\n review: BrowserVerificationEnvelope;\n challengePlan: ChallengeInspectPlan;\n includeUrls?: boolean;\n sinceConsoleSeq?: number;\n sinceNetworkSeq?: number;\n sinceExceptionSeq?: number;\n max?: number;\n requestId?: string;\n relayStatus?: RelayStatus | null;\n}): Promise<CorrelatedAuditBundle> {\n const requestId = args.requestId ?? randomUUID();\n const sessionInspector = await inspectSession(args.handle, {\n sessionId: args.browserSessionId,\n includeUrls: args.includeUrls,\n sinceConsoleSeq: args.sinceConsoleSeq,\n sinceNetworkSeq: args.sinceNetworkSeq,\n sinceExceptionSeq: args.sinceExceptionSeq,\n max: args.max,\n requestId,\n relayStatus: args.relayStatus\n });\n\n return {\n bundleId: randomUUID(),\n createdAt: new Date().toISOString(),\n browserSessionId: args.browserSessionId,\n ...(typeof args.targetId !== \"undefined\" ? { targetId: args.targetId } : {}),\n observationId: args.observation.observationId,\n requestId: sessionInspector.proofArtifact.requestId ?? requestId,\n ...(args.challengePlan.challengeId ? { challengeId: args.challengePlan.challengeId } : {}),\n desktop: args.observation,\n review: args.review,\n sessionInspector,\n challengePlan: args.challengePlan\n };\n}\n\nfunction readChannel(trace: Record<string, unknown>, channelName: \"console\" | \"network\" | \"exception\") {\n const channels = asRecord(trace.channels);\n const channel = asRecord(channels[channelName]);\n const events = asArray(channel.events);\n return {\n events,\n nextSeq: getNumber(channel.nextSeq),\n truncated: getBoolean(channel.truncated) ?? false\n };\n}\n\nfunction summarizeException(channel: {\n events: unknown[];\n nextSeq: number | null;\n truncated: boolean;\n}): ExceptionSummary {\n const events = channel.events\n .map((entry) => {\n const record = asRecord(entry);\n const message = [\n getString(record.text),\n getString(record.message),\n getString(record.value)\n ].find((value) => typeof value === \"string\" && value.trim().length > 0);\n const url = getString(record.url) ?? getString(record.sourceURL) ?? undefined;\n const line = getNumber(record.lineNumber) ?? getNumber(record.line) ?? undefined;\n const column = getNumber(record.columnNumber) ?? getNumber(record.column) ?? undefined;\n if (!message && !url && typeof line !== \"number\" && typeof column !== \"number\") {\n return null;\n }\n return {\n message: message?.trim() ?? \"Unhandled exception\",\n ...(url ? { url } : {}),\n ...(typeof line === \"number\" ? { line } : {}),\n ...(typeof column === \"number\" ? { column } : {})\n };\n })\n .filter((entry): entry is { message: string; url?: string; line?: number; column?: number } => entry !== null);\n\n return {\n eventCount: channel.events.length,\n nextSeq: channel.nextSeq,\n truncated: channel.truncated,\n latest: events.slice(-3).reverse()\n };\n}\n\nfunction summarizeConsole(channel: {\n events: unknown[];\n nextSeq: number | null;\n truncated: boolean;\n}): ConsoleSummary {\n const events = channel.events\n .map((entry) => {\n const record = asRecord(entry);\n const message = [\n getString(record.text),\n getString(record.message),\n getString(record.value)\n ].find((value) => typeof value === \"string\" && value.trim().length > 0);\n return {\n level: (getString(record.level) ?? getString(record.type) ?? \"log\").toLowerCase(),\n message: message?.trim() ?? \"\"\n };\n })\n .filter((entry) => entry.message.length > 0);\n\n const latest = events.slice(-3).reverse().map((entry) => ({\n level: entry.level,\n message: entry.message\n }));\n\n return {\n eventCount: channel.events.length,\n nextSeq: channel.nextSeq,\n truncated: channel.truncated,\n errorCount: events.filter((entry) => entry.level.includes(\"error\")).length,\n warningCount: events.filter((entry) => entry.level.includes(\"warn\")).length,\n latest\n };\n}\n\nfunction summarizeNetwork(channel: {\n events: unknown[];\n nextSeq: number | null;\n truncated: boolean;\n}): NetworkSummary {\n const normalized = channel.events.map((entry) => {\n const record = asRecord(entry);\n return {\n status: getNumber(record.status) ?? undefined,\n method: getString(record.method) ?? undefined,\n url: getString(record.url) ?? undefined,\n error: getString(record.errorText) ?? getString(record.error) ?? undefined\n };\n });\n\n const failures = normalized.filter((entry) => (\n (typeof entry.status === \"number\" && entry.status >= 400)\n || typeof entry.error === \"string\"\n ));\n\n return {\n eventCount: channel.events.length,\n nextSeq: channel.nextSeq,\n truncated: channel.truncated,\n failureCount: failures.length,\n latestFailures: failures.slice(-3).reverse()\n };\n}\n\nfunction summarizeRelay(relay: RelayStatus) {\n return {\n running: relay.running,\n ...(typeof relay.port === \"number\" ? { port: relay.port } : {}),\n extensionConnected: relay.extensionConnected,\n extensionHandshakeComplete: relay.extensionHandshakeComplete,\n annotationConnected: relay.annotationConnected,\n opsConnected: relay.opsConnected,\n canvasConnected: relay.canvasConnected,\n cdpConnected: relay.cdpConnected,\n pairingRequired: relay.pairingRequired,\n health: relay.health\n };\n}\n\nfunction deriveHealthState(input: {\n mode: SessionInspectorStatus[\"mode\"];\n blockerState: \"clear\" | \"active\" | \"resolving\";\n dialogOpen: boolean;\n relay: SessionInspectorResult[\"relay\"];\n activeTargetId: string | null;\n consoleErrors: number;\n networkFailures: number;\n exceptionCount: number;\n}): SessionInspectorResult[\"healthState\"] {\n if (\n input.blockerState === \"active\"\n || input.dialogOpen\n || input.activeTargetId === null\n || (\n input.mode === \"extension\"\n && input.relay\n && !input.relay.extensionHandshakeComplete\n && input.relay.extensionConnected\n )\n ) {\n return \"blocked\";\n }\n if (\n (input.relay && !input.relay.health.ok)\n || input.consoleErrors > 0\n || input.networkFailures > 0\n || input.exceptionCount > 0\n ) {\n return \"warning\";\n }\n return \"ok\";\n}\n\nfunction deriveSuggestedNextAction(input: {\n mode: SessionInspectorStatus[\"mode\"];\n dialogOpen: boolean;\n blockerState: \"clear\" | \"active\" | \"resolving\";\n relay: SessionInspectorResult[\"relay\"];\n activeTargetId: string | null;\n consoleErrors: number;\n networkFailures: number;\n exceptionCount: number;\n}): string {\n if (input.dialogOpen) {\n return \"Handle the open dialog before continuing any page interaction.\";\n }\n if (input.mode === \"extension\" && input.relay && !input.relay.extensionHandshakeComplete) {\n return \"Re-establish a clean daemon-extension handshake: open the extension popup, click Connect again, confirm `status --daemon` shows ext=on and handshake=on, then retry the next page action.\";\n }\n if (input.blockerState === \"active\") {\n return \"Resolve the active blocker or challenge before issuing more page actions.\";\n }\n if (input.activeTargetId === null) {\n return \"Create or select a target before continuing the next automation step.\";\n }\n if (input.consoleErrors > 0 || input.networkFailures > 0 || input.exceptionCount > 0) {\n return \"Inspect the summarized trace failures, fix the page instability, then rerun snapshot or review.\";\n }\n return \"Capture snapshot or review and continue the normal snapshot -> action -> snapshot loop.\";\n}\n\nfunction readBlockerState(\n traceMeta: Record<string, unknown>,\n sessionMeta?: BrowserResponseMeta\n): \"clear\" | \"active\" | \"resolving\" {\n const raw = getString(traceMeta.blockerState) ?? sessionMeta?.blockerState ?? \"clear\";\n return raw === \"active\" || raw === \"resolving\" ? raw : \"clear\";\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null ? value as Record<string, unknown> : {};\n}\n\nfunction asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction getString(value: unknown): string | null {\n return typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nfunction getNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction getBoolean(value: unknown): boolean | null {\n return typeof value === \"boolean\" ? value : null;\n}\n","import type { BrowserManagerLike } from \"../browser/manager-types\";\nimport { redactSensitive } from \"../core/logging\";\nimport type { ChallengeAutomationMode } from \"../challenges/types\";\nimport { readCookiesFromSource } from \"../providers/cookie-source\";\nimport type { ProviderCookiePolicy, ProviderCookieSourceConfig } from \"../providers/types\";\nimport type {\n InspiredesignCaptureAttemptEvidence,\n InspiredesignCaptureAttemptStatus,\n InspiredesignCaptureAttempts,\n InspiredesignCaptureEvidence\n} from \"./contract\";\n\ntype InspiredesignCaptureManagerBase = Pick<\n BrowserManagerLike,\n | \"launch\"\n | \"cookieImport\"\n | \"cookieList\"\n | \"goto\"\n | \"waitForLoad\"\n | \"snapshot\"\n | \"clonePage\"\n | \"disconnect\"\n | \"clonePageHtmlWithOptions\"\n>;\n\ntype InspiredesignCaptureManagerLike = Omit<\n InspiredesignCaptureManagerBase,\n \"launch\" | \"cookieImport\" | \"cookieList\" | \"snapshot\" | \"clonePage\" | \"clonePageHtmlWithOptions\"\n> & {\n launch: (\n options: Parameters<BrowserManagerLike[\"launch\"]>[0],\n timeoutMs?: number\n ) => ReturnType<BrowserManagerLike[\"launch\"]>;\n cookieImport: (\n sessionId: string,\n cookies: Parameters<BrowserManagerLike[\"cookieImport\"]>[1],\n strict?: boolean,\n requestId?: string,\n timeoutMs?: number\n ) => ReturnType<BrowserManagerLike[\"cookieImport\"]>;\n cookieList: (\n sessionId: string,\n urls?: string[],\n requestId?: string,\n timeoutMs?: number\n ) => ReturnType<BrowserManagerLike[\"cookieList\"]>;\n snapshot: (\n sessionId: string,\n mode: \"outline\" | \"actionables\",\n maxChars: number,\n cursor?: string,\n targetId?: string | null,\n timeoutMs?: number\n ) => ReturnType<BrowserManagerLike[\"snapshot\"]>;\n clonePage: (\n sessionId: string,\n targetId?: string | null,\n timeoutMs?: number\n ) => ReturnType<BrowserManagerLike[\"clonePage\"]>;\n clonePageHtmlWithOptions?: (\n sessionId: string,\n targetId?: string | null,\n options?: Parameters<NonNullable<BrowserManagerLike[\"clonePageHtmlWithOptions\"]>>[2],\n timeoutMs?: number\n ) => ReturnType<NonNullable<BrowserManagerLike[\"clonePageHtmlWithOptions\"]>>;\n setSessionChallengeAutomationMode?: (sessionId: string, mode?: ChallengeAutomationMode) => void;\n};\n\nexport type InspiredesignCaptureOptions = {\n timeoutMs?: number;\n useCookies?: boolean;\n challengeAutomationMode?: ChallengeAutomationMode;\n cookiePolicyOverride?: ProviderCookiePolicy;\n cookieSource?: ProviderCookieSourceConfig;\n};\n\ntype CaptureCookieImportState = {\n sourceConfigured: boolean;\n sourceAvailable: boolean;\n sourceMessage?: string;\n};\n\nconst INSPIREDESIGN_CAPTURE_TIMEOUT_MS = 30_000;\nconst INSPIREDESIGN_CAPTURE_MAX_CHARS = 12_000;\nconst ACTIVE_SESSION_COOKIE_REUSE_UNAVAILABLE_MESSAGE = \"Deep capture only honors configured provider cookie sources; active session cookies are not reused.\";\nconst DOM_CAPTURE_HELPER_UNAVAILABLE_MESSAGE = \"DOM capture helper unavailable in this execution lane.\";\nconst SNAPSHOT_CAPTURE_EMPTY_MESSAGE = \"Snapshot capture returned empty content.\";\nconst CLONE_CAPTURE_EMPTY_MESSAGE = \"Clone capture returned empty component and CSS previews.\";\nconst DOM_CAPTURE_EMPTY_MESSAGE = \"DOM capture returned empty HTML.\";\nconst SKIPPED_AFTER_TRANSPORT_TIMEOUT_SUFFIX = \"transport timeout.\";\n\nconst createRemainingCaptureTimeout = (timeoutMs: number): (() => number) => {\n const startedAtMs = Date.now();\n let firstRead = true;\n return () => {\n if (firstRead) {\n firstRead = false;\n return timeoutMs;\n }\n return Math.max(1, timeoutMs - Math.max(0, Date.now() - startedAtMs));\n };\n};\n\nconst clampInspiredesignCaptureTimeout = (timeoutMs?: number): number => {\n if (typeof timeoutMs !== \"number\" || !Number.isFinite(timeoutMs)) return INSPIREDESIGN_CAPTURE_TIMEOUT_MS;\n return Math.max(1, Math.min(timeoutMs, INSPIREDESIGN_CAPTURE_TIMEOUT_MS));\n};\n\nfunction sanitizeInspiredesignCaptureText(value: string): string;\nfunction sanitizeInspiredesignCaptureText(value: string | undefined): string | undefined;\nfunction sanitizeInspiredesignCaptureText(value: string | undefined): string | undefined {\n if (value === undefined) return undefined;\n const redacted = redactSensitive(value);\n return typeof redacted === \"string\" ? redacted : value;\n}\n\nconst buildCaptureAttempt = (\n status: InspiredesignCaptureAttemptStatus,\n detail?: string\n): InspiredesignCaptureAttemptEvidence => {\n const sanitizedDetail = sanitizeInspiredesignCaptureText(detail);\n return sanitizedDetail ? { status, detail: sanitizedDetail } : { status };\n};\n\nconst detailFromCaptureError = (error: unknown, fallback: string): string => {\n return error instanceof Error ? error.message : fallback;\n};\n\nconst isTransportTimeoutError = (\n error: unknown,\n detail: string\n): boolean => {\n if (error instanceof Error) {\n const code = (error as NodeJS.ErrnoException).code;\n if (error.name === \"TimeoutError\" || code === \"ETIMEDOUT\" || code === \"ERR_HTTP_REQUEST_TIMEOUT\") {\n return true;\n }\n }\n return /\\btimed out after \\d+ms\\b/i.test(detail)\n || /exceeded timeout budget\\./i.test(detail);\n};\n\nconst isIgnorableNetworkIdleWaitError = (error: unknown): boolean => {\n if (!(error instanceof Error)) {\n return false;\n }\n return /timed out|timeout/i.test(error.message);\n};\n\nconst buildSkippedAfterTransportTimeoutAttempt = (\n label: string\n): InspiredesignCaptureAttemptEvidence => {\n return buildCaptureAttempt(\"skipped\", `Skipped after ${label} ${SKIPPED_AFTER_TRANSPORT_TIMEOUT_SUFFIX}`);\n};\n\nconst hasUsableCaptureText = (value: string | undefined): boolean => {\n return typeof value === \"string\" && value.trim().length > 0;\n};\n\nconst resolveInspiredesignCaptureCookiePolicy = (\n options: InspiredesignCaptureOptions\n): ProviderCookiePolicy => {\n if (options.cookiePolicyOverride) return options.cookiePolicyOverride;\n return options.useCookies === false ? \"off\" : \"auto\";\n};\n\nconst withCaptureDeadline = async <T>(\n promise: Promise<T>,\n timeoutMs: number,\n label: string\n): Promise<T> => {\n let clearDeadline = () => {};\n const timeoutPromise = new Promise<T>((_, reject) => {\n const handle = setTimeout(() => reject(new Error(`Deep capture ${label} exceeded timeout budget.`)), timeoutMs);\n clearDeadline = () => clearTimeout(handle);\n });\n try {\n return await Promise.race([promise, timeoutPromise]);\n } finally {\n clearDeadline();\n }\n};\n\nconst verifyRequiredCaptureCookies = async (\n manager: InspiredesignCaptureManagerLike,\n sessionId: string,\n url: string,\n importState: CaptureCookieImportState,\n timeoutMs: number\n): Promise<void> => {\n const cookies = await withCaptureDeadline(\n manager.cookieList(sessionId, [url], undefined, timeoutMs),\n timeoutMs,\n \"cookie verification\"\n );\n if (cookies.count > 0) return;\n if (!importState.sourceConfigured) {\n throw new Error(ACTIVE_SESSION_COOKIE_REUSE_UNAVAILABLE_MESSAGE);\n }\n const sourceDetail = importState.sourceMessage ? ` ${importState.sourceMessage}` : \"\";\n throw new Error(`Deep capture requires observable cookies from the configured provider cookie source for the requested URL.${sourceDetail}`);\n};\n\nconst importConfiguredCaptureCookies = async (\n manager: InspiredesignCaptureManagerLike,\n sessionId: string,\n source: ProviderCookieSourceConfig | undefined,\n timeoutMs: number\n): Promise<CaptureCookieImportState> => {\n if (!source || typeof manager.cookieImport !== \"function\") {\n return {\n sourceConfigured: Boolean(source),\n sourceAvailable: false\n };\n }\n const loaded = await readCookiesFromSource(source);\n if (loaded.cookies.length === 0) {\n return {\n sourceConfigured: true,\n sourceAvailable: loaded.available,\n sourceMessage: loaded.message\n };\n }\n await withCaptureDeadline(\n manager.cookieImport(sessionId, loaded.cookies, false, undefined, timeoutMs),\n timeoutMs,\n \"cookie import\"\n );\n return {\n sourceConfigured: true,\n sourceAvailable: loaded.available,\n sourceMessage: loaded.message\n };\n};\n\ntype CaptureArtifactResult = {\n attempt: InspiredesignCaptureAttemptEvidence;\n transportTimedOut?: boolean;\n snapshot?: InspiredesignCaptureEvidence[\"snapshot\"];\n clone?: InspiredesignCaptureEvidence[\"clone\"];\n dom?: InspiredesignCaptureEvidence[\"dom\"];\n};\n\nconst captureSnapshotArtifact = async (\n manager: InspiredesignCaptureManagerLike,\n sessionId: string,\n remainingTimeoutMs: () => number\n): Promise<CaptureArtifactResult> => {\n try {\n const snapshot = await withCaptureDeadline(\n manager.snapshot(\n sessionId,\n \"actionables\",\n INSPIREDESIGN_CAPTURE_MAX_CHARS,\n undefined,\n undefined,\n remainingTimeoutMs()\n ),\n remainingTimeoutMs(),\n \"snapshot capture\"\n );\n const content = sanitizeInspiredesignCaptureText(snapshot.content) ?? \"\";\n if (!hasUsableCaptureText(content)) {\n return {\n attempt: buildCaptureAttempt(\"failed\", SNAPSHOT_CAPTURE_EMPTY_MESSAGE)\n };\n }\n return {\n attempt: buildCaptureAttempt(\"captured\"),\n snapshot: {\n content,\n refCount: snapshot.refCount,\n warnings: snapshot.warnings ?? []\n }\n };\n } catch (error) {\n const detail = detailFromCaptureError(error, \"Snapshot capture failed.\");\n return {\n attempt: buildCaptureAttempt(\"failed\", detail),\n ...(isTransportTimeoutError(error, detail) ? { transportTimedOut: true } : {})\n };\n }\n};\n\nconst captureCloneArtifact = async (\n manager: InspiredesignCaptureManagerLike,\n sessionId: string,\n remainingTimeoutMs: () => number\n): Promise<CaptureArtifactResult> => {\n try {\n const clone = await withCaptureDeadline(\n manager.clonePage(sessionId, undefined, remainingTimeoutMs()),\n remainingTimeoutMs(),\n \"clone capture\"\n );\n const componentPreview = sanitizeInspiredesignCaptureText(clone.component) ?? \"\";\n const cssPreview = sanitizeInspiredesignCaptureText(clone.css) ?? \"\";\n if (!hasUsableCaptureText(componentPreview) && !hasUsableCaptureText(cssPreview)) {\n return {\n attempt: buildCaptureAttempt(\"failed\", CLONE_CAPTURE_EMPTY_MESSAGE)\n };\n }\n return {\n attempt: buildCaptureAttempt(\"captured\"),\n clone: {\n componentPreview,\n cssPreview,\n warnings: clone.warnings ?? []\n }\n };\n } catch (error) {\n const detail = detailFromCaptureError(error, \"Clone capture failed.\");\n return {\n attempt: buildCaptureAttempt(\"failed\", detail),\n ...(isTransportTimeoutError(error, detail) ? { transportTimedOut: true } : {})\n };\n }\n};\n\nconst captureDomArtifact = async (\n manager: InspiredesignCaptureManagerLike,\n sessionId: string,\n remainingTimeoutMs: () => number\n): Promise<CaptureArtifactResult> => {\n if (typeof manager.clonePageHtmlWithOptions !== \"function\") {\n return {\n attempt: buildCaptureAttempt(\"skipped\", DOM_CAPTURE_HELPER_UNAVAILABLE_MESSAGE)\n };\n }\n try {\n const dom = await withCaptureDeadline(\n manager.clonePageHtmlWithOptions(sessionId, undefined, undefined, remainingTimeoutMs()),\n remainingTimeoutMs(),\n \"DOM capture\"\n );\n const outerHTML = sanitizeInspiredesignCaptureText(dom.html) ?? \"\";\n if (!hasUsableCaptureText(outerHTML)) {\n return {\n attempt: buildCaptureAttempt(\"failed\", DOM_CAPTURE_EMPTY_MESSAGE)\n };\n }\n return {\n attempt: buildCaptureAttempt(\"captured\"),\n dom: {\n outerHTML,\n truncated: false\n }\n };\n } catch (error) {\n const detail = detailFromCaptureError(error, \"DOM capture failed.\");\n return {\n attempt: buildCaptureAttempt(\"failed\", detail),\n ...(isTransportTimeoutError(error, detail) ? { transportTimedOut: true } : {})\n };\n }\n};\n\nconst buildCaptureEvidence = (\n snapshot: CaptureArtifactResult,\n clone: CaptureArtifactResult,\n dom: CaptureArtifactResult\n): InspiredesignCaptureEvidence => {\n const attempts: InspiredesignCaptureAttempts = {\n snapshot: snapshot.attempt,\n clone: clone.attempt,\n dom: dom.attempt\n };\n return {\n ...(snapshot.snapshot ? { snapshot: snapshot.snapshot } : {}),\n ...(dom.dom ? { dom: dom.dom } : {}),\n ...(clone.clone ? { clone: clone.clone } : {}),\n attempts\n };\n};\n\nconst buildTransportTimeoutCaptureEvidence = (\n snapshot: CaptureArtifactResult,\n clone: CaptureArtifactResult | undefined,\n label: string\n): InspiredesignCaptureEvidence => {\n const attempts: InspiredesignCaptureAttempts = {\n snapshot: snapshot.attempt,\n clone: clone?.attempt ?? buildSkippedAfterTransportTimeoutAttempt(label),\n dom: buildSkippedAfterTransportTimeoutAttempt(label)\n };\n return {\n ...(snapshot.snapshot ? { snapshot: snapshot.snapshot } : {}),\n ...(clone?.clone ? { clone: clone.clone } : {}),\n attempts\n };\n};\n\nconst captureInspiredesignArtifacts = async (\n manager: InspiredesignCaptureManagerLike,\n sessionId: string,\n remainingTimeoutMs: () => number\n): Promise<InspiredesignCaptureEvidence> => {\n const snapshot = await captureSnapshotArtifact(manager, sessionId, remainingTimeoutMs);\n if (snapshot.transportTimedOut) {\n return buildTransportTimeoutCaptureEvidence(snapshot, undefined, \"snapshot capture\");\n }\n const clone = await captureCloneArtifact(manager, sessionId, remainingTimeoutMs);\n if (clone.transportTimedOut) {\n return buildTransportTimeoutCaptureEvidence(snapshot, clone, \"clone capture\");\n }\n const dom = await captureDomArtifact(manager, sessionId, remainingTimeoutMs);\n return buildCaptureEvidence(snapshot, clone, dom);\n};\n\nexport async function captureInspiredesignReferenceFromManager(\n manager: InspiredesignCaptureManagerLike,\n url: string,\n options: InspiredesignCaptureOptions = {}\n): Promise<InspiredesignCaptureEvidence> {\n const cookiePolicy = resolveInspiredesignCaptureCookiePolicy(options);\n const captureTimeoutMs = clampInspiredesignCaptureTimeout(options.timeoutMs);\n const remainingTimeoutMs = createRemainingCaptureTimeout(captureTimeoutMs);\n const launchTimeoutMs = remainingTimeoutMs();\n const session = await withCaptureDeadline(\n manager.launch({\n headless: true,\n startUrl: \"about:blank\",\n persistProfile: false,\n noExtension: true\n }, launchTimeoutMs),\n launchTimeoutMs,\n \"session launch\"\n );\n try {\n const importState = cookiePolicy === \"off\"\n ? { sourceConfigured: false, sourceAvailable: false }\n : await importConfiguredCaptureCookies(\n manager,\n session.sessionId,\n options.cookieSource,\n remainingTimeoutMs()\n );\n if (cookiePolicy === \"required\") {\n await verifyRequiredCaptureCookies(\n manager,\n session.sessionId,\n url,\n importState,\n remainingTimeoutMs()\n );\n }\n manager.setSessionChallengeAutomationMode?.(session.sessionId, options.challengeAutomationMode);\n const gotoTimeoutMs = remainingTimeoutMs();\n await withCaptureDeadline(\n manager.goto(session.sessionId, url, \"load\", gotoTimeoutMs),\n gotoTimeoutMs,\n \"navigation\"\n );\n const waitTimeoutMs = remainingTimeoutMs();\n try {\n await withCaptureDeadline(\n manager.waitForLoad(session.sessionId, \"networkidle\", waitTimeoutMs),\n waitTimeoutMs,\n \"network idle wait\"\n );\n } catch (error) {\n if (!isIgnorableNetworkIdleWaitError(error)) {\n throw error;\n }\n }\n return await captureInspiredesignArtifacts(manager, session.sessionId, remainingTimeoutMs);\n } finally {\n await manager.disconnect(session.sessionId, true).catch(() => undefined);\n }\n}\n","import type {\n JsonValue,\n ProviderAggregateResult,\n ProviderCallResultByOperation,\n ProviderExecutionMetadata,\n ProviderOperation,\n ProviderRunOptions,\n ProviderSelection,\n WorkflowBrowserMode\n} from \"../providers/types\";\nimport type { SocialPlatform } from \"../providers/social\";\nimport { detectSocialSearchShell } from \"../providers/social/search-quality\";\n\nexport type MacroResolution = {\n action: {\n source: ProviderSelection;\n operation: ProviderOperation;\n input: Record<string, unknown>;\n };\n provenance: {\n macro: string;\n provider: string;\n resolvedQuery: string;\n pack: string;\n args: {\n positional: string[];\n named: Record<string, string>;\n };\n };\n};\n\nexport type MacroRuntimeExecutor = {\n search: (\n input: ProviderCallResultByOperation[\"search\"],\n options?: ProviderRunOptions\n ) => Promise<ProviderAggregateResult>;\n fetch: (\n input: ProviderCallResultByOperation[\"fetch\"],\n options?: ProviderRunOptions\n ) => Promise<ProviderAggregateResult>;\n crawl: (\n input: ProviderCallResultByOperation[\"crawl\"],\n options?: ProviderRunOptions\n ) => Promise<ProviderAggregateResult>;\n post: (\n input: ProviderCallResultByOperation[\"post\"],\n options?: ProviderRunOptions\n ) => Promise<ProviderAggregateResult>;\n};\n\nexport type MacroExecutionPayload = {\n records: ProviderAggregateResult[\"records\"];\n failures: ProviderAggregateResult[\"failures\"];\n metrics: ProviderAggregateResult[\"metrics\"];\n meta: {\n ok: ProviderAggregateResult[\"ok\"];\n partial: ProviderAggregateResult[\"partial\"];\n sourceSelection: ProviderAggregateResult[\"sourceSelection\"];\n providerOrder: ProviderAggregateResult[\"providerOrder\"];\n trace: ProviderAggregateResult[\"trace\"];\n tier?: ProviderExecutionMetadata[\"tier\"];\n provenance?: ProviderExecutionMetadata[\"provenance\"];\n blocker?: ProviderExecutionMetadata[\"blocker\"];\n error?: ProviderAggregateResult[\"error\"];\n };\n diagnostics?: ProviderAggregateResult[\"diagnostics\"];\n};\n\ntype MacroExecutionOverrides = Pick<ProviderRunOptions, \"challengeAutomationMode\"> & {\n browserMode?: WorkflowBrowserMode;\n useCookies?: boolean;\n cookiePolicyOverride?: ProviderRunOptions[\"cookiePolicyOverride\"];\n};\n\nconst buildRuntimePolicyOverrides = (\n overrides?: MacroExecutionOverrides\n): ProviderRunOptions[\"runtimePolicy\"] | undefined => {\n if (!overrides) {\n return undefined;\n }\n const runtimePolicy = {\n ...(overrides.browserMode ? { browserMode: overrides.browserMode } : {}),\n ...(typeof overrides.useCookies === \"boolean\" ? { useCookies: overrides.useCookies } : {}),\n ...(overrides.cookiePolicyOverride ? { cookiePolicyOverride: overrides.cookiePolicyOverride } : {})\n };\n return Object.keys(runtimePolicy).length > 0 ? runtimePolicy : undefined;\n};\n\nconst isRecordValue = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n\nconst requireMacroString = (value: unknown, label: string): string => {\n if (typeof value !== \"string\" || !value.trim()) {\n throw new Error(`Macro action missing ${label}`);\n }\n return value;\n};\n\nconst optionalPositiveInteger = (value: unknown): number | undefined =>\n typeof value === \"number\" && Number.isInteger(value) && value > 0 ? value : undefined;\n\nconst optionalBoolean = (value: unknown): boolean | undefined =>\n typeof value === \"boolean\" ? value : undefined;\n\nconst optionalJsonRecord = (value: unknown): Record<string, JsonValue> | undefined =>\n isRecordValue(value) ? value as Record<string, JsonValue> : undefined;\n\nconst optionalStringArray = (value: unknown): string[] | undefined => {\n if (!Array.isArray(value)) return undefined;\n const parsed = value\n .filter((item): item is string => typeof item === \"string\")\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n return parsed.length > 0 ? parsed : undefined;\n};\n\nconst normalizePlainText = (value: unknown): string => (\n typeof value === \"string\"\n ? value.replace(/\\s+/g, \" \").trim()\n : \"\"\n);\n\nconst REDDIT_VERIFICATION_WALL_RE = /\\b(?:please wait for verification|verify you are human|security check)\\b/i;\n\nconst readTargetedSocialPlatform = (\n providerId?: string\n): Extract<SocialPlatform, \"x\" | \"bluesky\" | \"reddit\" | \"facebook\" | \"threads\"> | null => {\n switch (providerId) {\n case \"social/x\":\n return \"x\";\n case \"social/bluesky\":\n return \"bluesky\";\n case \"social/reddit\":\n return \"reddit\";\n case \"social/facebook\":\n return \"facebook\";\n case \"social/threads\":\n return \"threads\";\n default:\n return null;\n }\n};\n\nconst getMacroShellReason = (\n record: ProviderAggregateResult[\"records\"][number],\n providerId?: string,\n fallbackRetrievalPath?: string\n): string | null => {\n const url = normalizePlainText(record?.url).toLowerCase();\n const title = normalizePlainText(record?.title);\n const content = normalizePlainText(record?.content);\n const combined = `${title} ${content}`.trim().toLowerCase();\n const retrievalPath = normalizePlainText(\n typeof record?.attributes?.retrievalPath === \"string\"\n ? record.attributes.retrievalPath\n : fallbackRetrievalPath\n ).toLowerCase();\n const extractionQuality = optionalJsonRecord(record?.attributes?.extractionQuality);\n const contentChars = Number(extractionQuality?.contentChars ?? content.length);\n const links = optionalStringArray(record?.attributes?.links) ?? [];\n\n if (\n combined.includes(\"bots use duckduckgo too\")\n || combined.includes(\"please complete the following challenge\")\n || combined.includes(\"select all squares containing a duck\")\n ) {\n return \"challenge_shell\";\n }\n\n const socialPlatform = readTargetedSocialPlatform(providerId);\n if (socialPlatform) {\n const socialShell = detectSocialSearchShell(socialPlatform, {\n url,\n title,\n content,\n links\n });\n if (socialShell) {\n return socialShell.providerShell;\n }\n }\n\n if (url.includes(\"reddit.com\") && REDDIT_VERIFICATION_WALL_RE.test(combined)) {\n return \"challenge_shell\";\n }\n\n if (\n retrievalPath === \"web:search:index\"\n && (\n url.includes(\"duckduckgo.com\")\n || title.toLowerCase().includes(\"duckduckgo\")\n )\n ) {\n return \"search_shell\";\n }\n\n if (\n providerId === \"web/default\"\n && (retrievalPath === \"web:fetch:url\" || retrievalPath.startsWith(\"fetch:\"))\n && contentChars > 0\n && contentChars <= 8\n && links.length >= 20\n ) {\n return \"truncated_fetch_shell\";\n }\n\n if (\n providerId === \"social/youtube\"\n && (\n (\n url.includes(\"youtube.com/watch\")\n && combined.includes(\"about press copyright contact us creators advertise developers terms privacy policy\")\n )\n || (\n url.includes(\"developers.google.com/youtube\")\n && combined.includes(\"google for developers skip to main content youtube\")\n )\n )\n ) {\n return \"generic_shell\";\n }\n\n return null;\n};\n\nconst assertMacroExecutionQuality = (\n resolution: MacroResolution,\n result: ProviderAggregateResult\n): void => {\n if (!Array.isArray(result.records) || result.records.length === 0 || result.failures.length > 0) {\n return;\n }\n\n const providerId = typeof resolution.action.input.providerId === \"string\"\n && resolution.action.input.providerId.trim()\n ? resolution.action.input.providerId.trim()\n : resolution.provenance.provider;\n const fallbackRetrievalPath = normalizePlainText(\n optionalJsonRecord(result.meta?.provenance)?.retrievalPath as string | undefined\n );\n const reasons = result.records\n .map((record) => getMacroShellReason(record, providerId, fallbackRetrievalPath))\n .filter((reason): reason is string => typeof reason === \"string\");\n if (reasons.length !== result.records.length) {\n return;\n }\n\n throw new Error(`Macro execution returned only shell records (${[...new Set(reasons)].join(\",\")}).`);\n};\n\nconst partitionMacroExecutionRecords = (\n records: ProviderAggregateResult[\"records\"],\n providerId?: string,\n fallbackRetrievalPath?: string\n): {\n usable: ProviderAggregateResult[\"records\"];\n shell: Array<{ record: ProviderAggregateResult[\"records\"][number]; reason: string }>;\n} => {\n const usable: ProviderAggregateResult[\"records\"] = [];\n const shell: Array<{ record: ProviderAggregateResult[\"records\"][number]; reason: string }> = [];\n for (const record of records) {\n const reason = getMacroShellReason(record, providerId, fallbackRetrievalPath);\n if (reason) {\n shell.push({ record, reason });\n } else {\n usable.push(record);\n }\n }\n return { usable, shell };\n};\n\nconst prioritizeMacroExecutionRecords = (\n resolution: MacroResolution,\n result: ProviderAggregateResult\n): ProviderAggregateResult => {\n if (!Array.isArray(result.records) || result.records.length <= 1) {\n return result;\n }\n\n const providerId = typeof resolution.action.input.providerId === \"string\"\n && resolution.action.input.providerId.trim()\n ? resolution.action.input.providerId.trim()\n : resolution.provenance.provider;\n const fallbackRetrievalPath = normalizePlainText(\n optionalJsonRecord(result.meta?.provenance)?.retrievalPath as string | undefined\n );\n const { usable, shell } = partitionMacroExecutionRecords(result.records, providerId, fallbackRetrievalPath);\n if (usable.length === 0 || shell.length === 0) {\n return result;\n }\n\n return {\n ...result,\n records: [\n ...usable,\n ...shell.map((entry) => entry.record)\n ]\n };\n};\n\nconst normalizeSearchInput = (input: Record<string, unknown>): ProviderCallResultByOperation[\"search\"] => {\n const query = requireMacroString(input.query, \"search.query\");\n const limit = optionalPositiveInteger(input.limit);\n const filters = optionalJsonRecord(input.filters);\n return {\n query,\n ...(limit !== undefined ? { limit } : {}),\n ...(filters ? { filters } : {})\n };\n};\n\nconst normalizeFetchInput = (input: Record<string, unknown>): ProviderCallResultByOperation[\"fetch\"] => {\n const url = requireMacroString(input.url, \"fetch.url\");\n const filters = optionalJsonRecord(input.filters);\n return {\n url,\n ...(filters ? { filters } : {})\n };\n};\n\nconst normalizeCrawlInput = (input: Record<string, unknown>): ProviderCallResultByOperation[\"crawl\"] => {\n const seedUrls = optionalStringArray(input.seedUrls);\n if (!seedUrls || seedUrls.length === 0) {\n throw new Error(\"Macro action missing crawl.seedUrls\");\n }\n\n const strategy = input.strategy === \"bfs\" || input.strategy === \"dfs\"\n ? input.strategy\n : undefined;\n const maxDepth = optionalPositiveInteger(input.maxDepth);\n const maxPages = optionalPositiveInteger(input.maxPages);\n const maxPerDomain = optionalPositiveInteger(input.maxPerDomain);\n const filters = optionalJsonRecord(input.filters);\n\n return {\n seedUrls,\n ...(strategy ? { strategy } : {}),\n ...(maxDepth !== undefined ? { maxDepth } : {}),\n ...(maxPages !== undefined ? { maxPages } : {}),\n ...(maxPerDomain !== undefined ? { maxPerDomain } : {}),\n ...(filters ? { filters } : {})\n };\n};\n\nconst normalizePostInput = (input: Record<string, unknown>): ProviderCallResultByOperation[\"post\"] => {\n const target = requireMacroString(input.target, \"post.target\");\n const content = requireMacroString(input.content, \"post.content\");\n const mediaUrls = optionalStringArray(input.mediaUrls);\n const confirm = optionalBoolean(input.confirm);\n const riskAccepted = optionalBoolean(input.riskAccepted);\n const metadata = optionalJsonRecord(input.metadata);\n\n return {\n target,\n content,\n ...(mediaUrls ? { mediaUrls } : {}),\n ...(confirm !== undefined ? { confirm } : {}),\n ...(riskAccepted !== undefined ? { riskAccepted } : {}),\n ...(metadata ? { metadata } : {})\n };\n};\n\nconst buildRunOptions = (\n resolution: MacroResolution,\n overrides?: MacroExecutionOverrides\n): ProviderRunOptions => {\n const source = resolution.action.source;\n const providerId = typeof resolution.action.input.providerId === \"string\"\n && resolution.action.input.providerId.trim()\n ? resolution.action.input.providerId.trim()\n : undefined;\n const runtimePolicy = buildRuntimePolicyOverrides(overrides);\n return {\n source,\n ...(providerId ? { providerIds: [providerId] } : {}),\n ...(overrides?.challengeAutomationMode\n ? { challengeAutomationMode: overrides.challengeAutomationMode }\n : {}),\n ...(runtimePolicy ? { runtimePolicy } : {})\n };\n};\n\nexport const executeMacroResolution = async (\n resolution: MacroResolution,\n runtime: MacroRuntimeExecutor,\n overrides?: MacroExecutionOverrides\n): Promise<ProviderAggregateResult> => {\n const { operation, input } = resolution.action;\n if (!isRecordValue(input)) {\n throw new Error(\"Macro action input is invalid\");\n }\n\n const options = buildRunOptions(resolution, overrides);\n let result: ProviderAggregateResult;\n switch (operation) {\n case \"search\":\n result = await runtime.search(normalizeSearchInput(input), options);\n break;\n case \"fetch\":\n result = await runtime.fetch(normalizeFetchInput(input), options);\n break;\n case \"crawl\":\n result = await runtime.crawl(normalizeCrawlInput(input), options);\n break;\n case \"post\":\n result = await runtime.post(normalizePostInput(input), options);\n break;\n default:\n throw new Error(`Macro operation is not supported: ${operation}`);\n }\n const prioritized = prioritizeMacroExecutionRecords(resolution, result);\n assertMacroExecutionQuality(resolution, prioritized);\n return prioritized;\n};\n\nexport const shapeExecutionPayload = (result: ProviderAggregateResult): MacroExecutionPayload => {\n return {\n records: result.records,\n failures: result.failures,\n metrics: result.metrics,\n meta: {\n ok: result.ok,\n partial: result.partial,\n sourceSelection: result.sourceSelection,\n providerOrder: result.providerOrder,\n trace: result.trace,\n ...(result.meta?.tier ? { tier: result.meta.tier } : {}),\n ...(result.meta?.provenance ? { provenance: result.meta.provenance } : {}),\n ...(result.meta?.blocker ? { blocker: result.meta.blocker } : {}),\n ...(result.error ? { error: result.error } : {})\n },\n ...(result.diagnostics ? { diagnostics: result.diagnostics } : {})\n };\n};\n","import type { BrowserManagerLike } from \"../browser/manager-types\";\nimport type { ChallengeAutomationMode } from \"../challenges\";\nimport type { BundledProviderRuntime, ProviderRuntimeBundleConfig } from \"../providers/runtime-bundle\";\nimport { resolveBundledProviderRuntime } from \"../providers/runtime-bundle\";\nimport type { BrowserFallbackPort, ProviderCookiePolicy, WorkflowBrowserMode } from \"../providers/types\";\nimport type { RuntimeInit } from \"../providers\";\nimport {\n executeMacroResolution,\n shapeExecutionPayload,\n type MacroExecutionPayload,\n type MacroResolution,\n type MacroRuntimeExecutor\n} from \"./execute\";\n\nconst MACRO_TIMEOUT_MIN_MS = 1_000;\nconst MACRO_TIMEOUT_MAX_MS = 300_000;\n\nexport const clampMacroRuntimeTimeout = (timeoutMs: number | undefined): number | null => {\n if (!Number.isFinite(timeoutMs ?? NaN)) {\n return null;\n }\n const parsed = Math.floor(timeoutMs as number);\n return Math.max(MACRO_TIMEOUT_MIN_MS, Math.min(MACRO_TIMEOUT_MAX_MS, parsed));\n};\n\nexport const buildMacroRuntimeInit = (\n timeoutMs: number | undefined\n): Omit<RuntimeInit, \"providers\"> | undefined => {\n const macroTimeoutMs = clampMacroRuntimeTimeout(timeoutMs);\n if (macroTimeoutMs === null) {\n return undefined;\n }\n\n return {\n budgets: {\n timeoutMs: {\n search: macroTimeoutMs,\n fetch: macroTimeoutMs,\n crawl: macroTimeoutMs,\n post: macroTimeoutMs\n }\n }\n };\n};\n\nexport const executeMacroWithRuntime = async (args: {\n resolution: MacroResolution;\n runtime?: MacroRuntimeExecutor;\n existingRuntime?: BundledProviderRuntime;\n config?: ProviderRuntimeBundleConfig;\n manager?: BrowserManagerLike;\n browserFallbackPort?: BrowserFallbackPort;\n timeoutMs?: number;\n browserMode?: WorkflowBrowserMode;\n useCookies?: boolean;\n challengeAutomationMode?: ChallengeAutomationMode;\n cookiePolicyOverride?: ProviderCookiePolicy;\n}): Promise<MacroExecutionPayload> => {\n const runtime = args.runtime ?? resolveBundledProviderRuntime({\n existingRuntime: args.existingRuntime,\n config: args.config,\n manager: args.manager,\n browserFallbackPort: args.browserFallbackPort,\n init: buildMacroRuntimeInit(args.timeoutMs)\n });\n\n return shapeExecutionPayload(\n await executeMacroResolution(\n args.resolution,\n runtime,\n args.challengeAutomationMode\n || args.browserMode\n || typeof args.useCookies === \"boolean\"\n || args.cookiePolicyOverride\n ? {\n ...(args.browserMode ? { browserMode: args.browserMode } : {}),\n ...(typeof args.useCookies === \"boolean\" ? { useCookies: args.useCookies } : {}),\n ...(args.challengeAutomationMode ? { challengeAutomationMode: args.challengeAutomationMode } : {}),\n ...(args.cookiePolicyOverride ? { cookiePolicyOverride: args.cookiePolicyOverride } : {})\n }\n : undefined\n )\n );\n};\n","import { randomUUID } from \"crypto\";\nimport { SCREENCAST_RETENTION_MS } from \"../browser/manager-types\";\n\nconst HUB_INSTANCE_ID = randomUUID();\nconst BINDING_TTL_MS = 60_000;\nconst RENEW_INTERVAL_MS = 20_000;\nconst RENEW_GRACE_MS = RENEW_INTERVAL_MS * 2;\nconst RENEW_JITTER_MS = 2000;\nconst WAIT_MAX_MS = 30_000;\n\nexport type RelayBindingState = {\n bindingId: string;\n clientId: string;\n expiresAt: number;\n lastRenewedAt: number;\n};\n\nexport type SessionLeaseState = {\n sessionId: string;\n leaseId: string;\n clientId: string;\n createdAt: number;\n lastUsedAt: number;\n};\n\nexport type ScreencastOwnerState = {\n screencastId: string;\n sessionId: string;\n clientId: string;\n createdAt: number;\n completedAt: number | null;\n lastUsedAt: number;\n};\n\nexport type RelayBindingResponse = {\n bindingId: string;\n expiresAt: string;\n ttlMs: number;\n renewAfterMs: number;\n};\n\nexport type RelayQueueResponse = {\n queued: true;\n position: number;\n waitUntil: string;\n waitMs: number;\n};\n\nexport type RelayBindResult = RelayBindingResponse | RelayQueueResponse;\n\ntype RelayQueueEntry = {\n clientId: string;\n requestedAt: number;\n timeoutAt: number;\n};\n\nlet binding: RelayBindingState | null = null;\nlet queue: RelayQueueEntry[] = [];\nconst sessionLeases = new Map<string, SessionLeaseState>();\nconst screencastOwners = new Map<string, ScreencastOwnerState>();\nconst screencastOwnerCleanupTimers = new Map<string, NodeJS.Timeout>();\n\nexport const getHubInstanceId = (): string => HUB_INSTANCE_ID;\n\nconst nowMs = (): number => Date.now();\n\nconst isExpired = (state: RelayBindingState): boolean => nowMs() > state.expiresAt + RENEW_GRACE_MS;\n\nconst computeRenewAfterMs = (): number => {\n const jitter = Math.floor((Math.random() * 2 - 1) * RENEW_JITTER_MS);\n return Math.max(1000, RENEW_INTERVAL_MS + jitter);\n};\n\nconst serializeBinding = (state: RelayBindingState): RelayBindingResponse => ({\n bindingId: state.bindingId,\n expiresAt: new Date(state.expiresAt).toISOString(),\n ttlMs: BINDING_TTL_MS,\n renewAfterMs: computeRenewAfterMs()\n});\n\nconst serializeQueue = (entry: RelayQueueEntry): RelayQueueResponse => ({\n queued: true,\n position: queue.findIndex((item) => item.clientId === entry.clientId) + 1,\n waitUntil: new Date(entry.timeoutAt).toISOString(),\n waitMs: Math.max(0, entry.timeoutAt - nowMs())\n});\n\nconst cleanupQueue = (): void => {\n const now = nowMs();\n queue = queue.filter((entry) => entry.timeoutAt > now);\n};\n\nconst clearScreencastOwnerCleanup = (screencastId: string): void => {\n const timer = screencastOwnerCleanupTimers.get(screencastId);\n if (!timer) {\n return;\n }\n clearTimeout(timer);\n screencastOwnerCleanupTimers.delete(screencastId);\n};\n\nconst releaseTrackedScreencastOwner = (screencastId: string): void => {\n clearScreencastOwnerCleanup(screencastId);\n screencastOwners.delete(screencastId);\n};\n\nconst isExpiredScreencastOwner = (owner: ScreencastOwnerState): boolean => {\n return owner.completedAt !== null && owner.lastUsedAt + SCREENCAST_RETENTION_MS <= nowMs();\n};\n\nconst scheduleScreencastOwnerCleanup = (owner: ScreencastOwnerState): void => {\n clearScreencastOwnerCleanup(owner.screencastId);\n if (owner.completedAt === null) {\n return;\n }\n const timer = setTimeout(() => {\n if (isExpiredScreencastOwner(owner) && screencastOwners.get(owner.screencastId) === owner) {\n screencastOwners.delete(owner.screencastId);\n }\n screencastOwnerCleanupTimers.delete(owner.screencastId);\n }, SCREENCAST_RETENTION_MS);\n timer.unref?.();\n screencastOwnerCleanupTimers.set(owner.screencastId, timer);\n};\n\nconst cleanupScreencastOwners = (): void => {\n for (const [screencastId, owner] of screencastOwners.entries()) {\n if (isExpiredScreencastOwner(owner)) {\n releaseTrackedScreencastOwner(screencastId);\n }\n }\n};\n\nconst getQueueEntry = (clientId: string): RelayQueueEntry | null => {\n return queue.find((entry) => entry.clientId === clientId) ?? null;\n};\n\nconst enqueueClient = (clientId: string): RelayQueueEntry => {\n cleanupQueue();\n const existing = getQueueEntry(clientId);\n if (existing) {\n return existing;\n }\n const entry: RelayQueueEntry = {\n clientId,\n requestedAt: nowMs(),\n timeoutAt: nowMs() + WAIT_MAX_MS\n };\n queue.push(entry);\n return entry;\n};\n\nconst dequeueClient = (clientId: string): void => {\n queue = queue.filter((entry) => entry.clientId !== clientId);\n};\n\nconst maybeGrantBinding = (clientId: string): RelayBindingResponse | null => {\n const existing = getBindingState();\n const now = nowMs();\n\n if (existing) {\n if (existing.clientId !== clientId) {\n return null;\n }\n existing.expiresAt = now + BINDING_TTL_MS;\n existing.lastRenewedAt = now;\n return serializeBinding(existing);\n }\n\n cleanupQueue();\n const head = queue[0];\n if (head && head.clientId !== clientId) {\n return null;\n }\n if (head && head.clientId === clientId) {\n queue.shift();\n }\n\n const state: RelayBindingState = {\n bindingId: randomUUID(),\n clientId: clientId.trim(),\n expiresAt: now + BINDING_TTL_MS,\n lastRenewedAt: now\n };\n binding = state;\n return serializeBinding(state);\n};\n\nexport const getBindingState = (): RelayBindingState | null => {\n if (binding && isExpired(binding)) {\n binding = null;\n }\n cleanupQueue();\n return binding;\n};\n\nexport const clearBinding = (): void => {\n binding = null;\n queue = [];\n};\n\nexport const registerSessionLease = (sessionId: string, leaseId: string, clientId: string): SessionLeaseState => {\n if (!sessionId || !sessionId.trim()) {\n throw new Error(\"RELAY_SESSION_REQUIRED: sessionId is required\");\n }\n if (!leaseId || !leaseId.trim()) {\n throw new Error(\"RELAY_LEASE_REQUIRED: leaseId is required\");\n }\n if (!clientId || !clientId.trim()) {\n throw new Error(\"RELAY_CLIENT_ID_REQUIRED: clientId is required\");\n }\n const lease: SessionLeaseState = {\n sessionId,\n leaseId,\n clientId: clientId.trim(),\n createdAt: nowMs(),\n lastUsedAt: nowMs()\n };\n sessionLeases.set(sessionId, lease);\n return lease;\n};\n\nexport const getSessionLease = (sessionId: string): SessionLeaseState | null => {\n if (!sessionId || !sessionId.trim()) return null;\n return sessionLeases.get(sessionId) ?? null;\n};\n\nexport const touchSessionLease = (sessionId: string): void => {\n const lease = sessionLeases.get(sessionId);\n if (!lease) return;\n lease.lastUsedAt = nowMs();\n};\n\nexport const releaseSessionLease = (sessionId: string): void => {\n sessionLeases.delete(sessionId);\n};\n\nexport const releaseOwnedSessionLease = (sessionId: string, clientId: string, leaseId?: string): boolean => {\n if (!sessionId || !sessionId.trim()) return false;\n if (!clientId || !clientId.trim()) return false;\n const lease = sessionLeases.get(sessionId);\n if (!lease) return false;\n const normalizedClientId = clientId.trim();\n const normalizedLeaseId = leaseId?.trim() ?? \"\";\n if (lease.clientId !== normalizedClientId) return false;\n if (normalizedLeaseId && lease.leaseId !== normalizedLeaseId) return false;\n sessionLeases.delete(sessionId);\n return true;\n};\n\nexport const clearSessionLeases = (): void => {\n sessionLeases.clear();\n};\n\nexport const registerScreencastOwner = (\n sessionId: string,\n screencastId: string,\n clientId: string\n): ScreencastOwnerState => {\n if (!sessionId || !sessionId.trim()) {\n throw new Error(\"RELAY_SESSION_REQUIRED: sessionId is required\");\n }\n if (!screencastId || !screencastId.trim()) {\n throw new Error(\"RELAY_SCREENCAST_REQUIRED: screencastId is required\");\n }\n if (!clientId || !clientId.trim()) {\n throw new Error(\"RELAY_CLIENT_ID_REQUIRED: clientId is required\");\n }\n cleanupScreencastOwners();\n const createdAt = nowMs();\n const owner: ScreencastOwnerState = {\n screencastId: screencastId.trim(),\n sessionId: sessionId.trim(),\n clientId: clientId.trim(),\n createdAt,\n completedAt: null,\n lastUsedAt: createdAt\n };\n releaseTrackedScreencastOwner(owner.screencastId);\n screencastOwners.set(owner.screencastId, owner);\n return owner;\n};\n\nexport const getScreencastOwner = (screencastId: string): ScreencastOwnerState | null => {\n if (!screencastId || !screencastId.trim()) return null;\n cleanupScreencastOwners();\n return screencastOwners.get(screencastId) ?? null;\n};\n\nexport const touchScreencastOwner = (screencastId: string): ScreencastOwnerState | null => {\n const owner = getScreencastOwner(screencastId);\n if (!owner) {\n return null;\n }\n owner.lastUsedAt = nowMs();\n scheduleScreencastOwnerCleanup(owner);\n return owner;\n};\n\nexport const completeScreencastOwner = (screencastId: string): ScreencastOwnerState | null => {\n const owner = getScreencastOwner(screencastId);\n if (!owner) {\n return null;\n }\n const completedAt = nowMs();\n owner.completedAt = completedAt;\n owner.lastUsedAt = completedAt;\n scheduleScreencastOwnerCleanup(owner);\n return owner;\n};\n\nexport const releaseScreencastOwner = (screencastId: string): void => {\n if (!screencastId || !screencastId.trim()) return;\n releaseTrackedScreencastOwner(screencastId);\n};\n\nexport const clearScreencastOwners = (): void => {\n for (const screencastId of screencastOwners.keys()) {\n clearScreencastOwnerCleanup(screencastId);\n }\n screencastOwners.clear();\n};\n\nexport const requireScreencastOwner = (\n sessionId: string,\n screencastId: string,\n clientId: string\n): ScreencastOwnerState => {\n if (!sessionId || !sessionId.trim()) {\n throw new Error(\"RELAY_SESSION_REQUIRED: sessionId is required\");\n }\n if (!screencastId || !screencastId.trim()) {\n throw new Error(\"RELAY_SCREENCAST_REQUIRED: screencastId is required\");\n }\n if (!clientId || !clientId.trim()) {\n throw new Error(\"RELAY_CLIENT_ID_REQUIRED: clientId is required\");\n }\n const owner = getScreencastOwner(screencastId);\n if (!owner) {\n throw new Error(\"RELAY_SCREENCAST_OWNER_REQUIRED: No retained owner for completed screencast retrieval.\");\n }\n const normalizedSessionId = sessionId.trim();\n const normalizedClientId = clientId.trim();\n if (owner.sessionId !== normalizedSessionId || owner.clientId !== normalizedClientId) {\n throw new Error(\"RELAY_SCREENCAST_OWNER_INVALID: Screencast does not match the current owner.\");\n }\n touchScreencastOwner(screencastId);\n return owner;\n};\n\nexport const requireSessionLease = (sessionId: string, clientId: string, leaseId: string | undefined): SessionLeaseState => {\n if (!sessionId || !sessionId.trim()) {\n throw new Error(\"RELAY_SESSION_REQUIRED: sessionId is required\");\n }\n if (!clientId || !clientId.trim()) {\n throw new Error(\"RELAY_CLIENT_ID_REQUIRED: clientId is required\");\n }\n const lease = sessionLeases.get(sessionId);\n if (!lease) {\n throw new Error(\"RELAY_LEASE_REQUIRED: No active lease for session.\");\n }\n const normalizedClientId = clientId.trim();\n const normalizedLeaseId = leaseId?.trim() ?? \"\";\n\n if (!normalizedLeaseId) {\n if (lease.clientId !== normalizedClientId) {\n throw new Error(\"RELAY_LEASE_INVALID: Lease does not match session owner.\");\n }\n lease.lastUsedAt = nowMs();\n return lease;\n }\n if (lease.leaseId !== normalizedLeaseId || lease.clientId !== normalizedClientId) {\n throw new Error(\"RELAY_LEASE_INVALID: Lease does not match session owner.\");\n }\n lease.lastUsedAt = nowMs();\n return lease;\n};\n\nexport const bindRelay = (clientId: string): RelayBindResult => {\n if (!clientId || !clientId.trim()) {\n throw new Error(\"RELAY_CLIENT_ID_REQUIRED: clientId is required\");\n }\n\n const result = maybeGrantBinding(clientId);\n if (result) {\n return result;\n }\n\n const entry = enqueueClient(clientId.trim());\n return serializeQueue(entry);\n};\n\nexport const waitForBinding = async (clientId: string, timeoutMs?: number): Promise<RelayBindingResponse> => {\n if (!clientId || !clientId.trim()) {\n throw new Error(\"RELAY_CLIENT_ID_REQUIRED: clientId is required\");\n }\n\n const entry = enqueueClient(clientId.trim());\n const deadline = timeoutMs ? Math.min(entry.timeoutAt, nowMs() + timeoutMs) : entry.timeoutAt;\n\n while (nowMs() <= deadline) {\n const result = maybeGrantBinding(clientId);\n if (result) {\n return result;\n }\n cleanupQueue();\n if (!getQueueEntry(clientId)) {\n break;\n }\n await new Promise((resolve) => setTimeout(resolve, 250));\n }\n\n dequeueClient(clientId);\n throw new Error(\"RELAY_WAIT_TIMEOUT: Timed out waiting for relay binding.\");\n};\n\nexport const renewRelay = (clientId: string, bindingId: string): RelayBindingResponse => {\n if (!clientId || !clientId.trim()) {\n throw new Error(\"RELAY_CLIENT_ID_REQUIRED: clientId is required\");\n }\n if (!bindingId || !bindingId.trim()) {\n throw new Error(\"RELAY_BINDING_REQUIRED: bindingId is required\");\n }\n const existing = getBindingState();\n if (!existing) {\n throw new Error(\"RELAY_BINDING_REQUIRED: No active binding to renew.\");\n }\n if (existing.clientId !== clientId || existing.bindingId !== bindingId) {\n throw new Error(\"RELAY_BINDING_INVALID: Binding does not match the current owner.\");\n }\n const now = nowMs();\n existing.expiresAt = now + BINDING_TTL_MS;\n existing.lastRenewedAt = now;\n return serializeBinding(existing);\n};\n\nexport const releaseRelay = (clientId: string, bindingId: string): { released: boolean } => {\n if (!clientId || !clientId.trim()) {\n throw new Error(\"RELAY_CLIENT_ID_REQUIRED: clientId is required\");\n }\n if (!bindingId || !bindingId.trim()) {\n throw new Error(\"RELAY_BINDING_REQUIRED: bindingId is required\");\n }\n const existing = getBindingState();\n if (!existing) {\n return { released: false };\n }\n if (existing.clientId !== clientId || existing.bindingId !== bindingId) {\n throw new Error(\"RELAY_BINDING_INVALID: Binding does not match the current owner.\");\n }\n binding = null;\n return { released: true };\n};\n\nexport const requireBinding = (clientId: string, bindingId: string | undefined): RelayBindingState => {\n if (!clientId || !clientId.trim()) {\n throw new Error(\"RELAY_CLIENT_ID_REQUIRED: clientId is required\");\n }\n const existing = getBindingState();\n if (!existing) {\n throw new Error(\"RELAY_BINDING_REQUIRED: Call relay.bind to acquire the relay binding.\");\n }\n if (!bindingId || !bindingId.trim()) {\n throw new Error(\"RELAY_BINDING_REQUIRED: bindingId is required for relay operations.\");\n }\n if (existing.clientId !== clientId || existing.bindingId !== bindingId) {\n throw new Error(\"RELAY_BINDING_INVALID: Binding does not match the current owner.\");\n }\n return existing;\n};\n\nexport const getBindingDiagnostics = (): {\n bindingId: string;\n clientId: string;\n expiresAt: string;\n expiresInMs: number;\n queueLength: number;\n} | null => {\n const existing = getBindingState();\n if (!existing) return null;\n const expiresInMs = Math.max(0, existing.expiresAt - nowMs());\n return {\n bindingId: existing.bindingId,\n clientId: existing.clientId,\n expiresAt: new Date(existing.expiresAt).toISOString(),\n expiresInMs,\n queueLength: queue.length\n };\n};\n\nexport const getBindingRenewConfig = (): { ttlMs: number; renewIntervalMs: number; graceMs: number; waitMaxMs: number } => ({\n ttlMs: BINDING_TTL_MS,\n renewIntervalMs: RENEW_INTERVAL_MS,\n graceMs: RENEW_GRACE_MS,\n waitMaxMs: WAIT_MAX_MS\n});\n","export const DEFAULT_DAEMON_STATUS_FETCH_OPTIONS = {\n timeoutMs: 5_000,\n retryAttempts: 5,\n retryDelayMs: 250\n} as const;\n","import type { RelayStatus } from \"../relay/relay-server\";\nimport type { OpenDevBrowserConfig } from \"../config\";\nimport { loadGlobalConfig } from \"../config\";\nimport {\n readDaemonMetadata,\n isCurrentDaemonFingerprint,\n resolveDaemonFingerprint,\n writeDaemonMetadata,\n type DaemonState\n} from \"./daemon\";\nimport { fetchWithTimeoutContext, readResponseJsonWithTimeout } from \"./utils/http\";\nimport { DEFAULT_DAEMON_STATUS_FETCH_OPTIONS } from \"./daemon-status-policy\";\n\nexport type DaemonStatusPayload = {\n ok: true;\n pid: number;\n fingerprint?: string;\n fingerprintCurrent?: boolean;\n hub: { instanceId: string };\n relay: RelayStatus;\n binding: {\n bindingId: string;\n clientId: string;\n expiresAt: string;\n expiresInMs: number;\n } | null;\n};\n\nexport type DaemonStatusFetchOptions = {\n timeoutMs?: number;\n retryAttempts?: number;\n retryDelayMs?: number;\n};\n\ntype DaemonMetadataSeed = Pick<DaemonState, \"port\" | \"token\">\n & Partial<Omit<DaemonState, \"port\" | \"token\">>;\n\nconst DEFAULT_DAEMON_STATUS_TIMEOUT_MS = DEFAULT_DAEMON_STATUS_FETCH_OPTIONS.timeoutMs;\n\nconst sleep = async (delayMs: number): Promise<void> => {\n if (!(Number.isFinite(delayMs) && delayMs > 0)) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n};\n\nconst resolveRetryAttempts = (retryAttempts?: number): number => {\n return typeof retryAttempts === \"number\" && Number.isFinite(retryAttempts) && retryAttempts > 1\n ? Math.floor(retryAttempts)\n : 1;\n};\n\nconst resolveRetryDelayMs = (retryDelayMs?: number): number => {\n return typeof retryDelayMs === \"number\" && Number.isFinite(retryDelayMs) && retryDelayMs > 0\n ? retryDelayMs\n : 0;\n};\n\nconst resolveStatusTimeoutMs = (timeoutMs?: number): number => {\n return typeof timeoutMs === \"number\" && Number.isFinite(timeoutMs) && timeoutMs > 0\n ? timeoutMs\n : DEFAULT_DAEMON_STATUS_TIMEOUT_MS;\n};\n\nconst withFingerprintCurrent = (status: DaemonStatusPayload): DaemonStatusPayload => ({\n ...status,\n fingerprintCurrent: isCurrentDaemonFingerprint(status.fingerprint)\n});\n\nconst readRemainingBudgetMs = (deadlineMs: number): number => {\n return Math.max(0, deadlineMs - Date.now());\n};\n\nconst readSeedTimeoutMs = (remainingBudgetMs: number, remainingSeedCount: number): number => {\n if (remainingSeedCount <= 1) {\n return remainingBudgetMs;\n }\n return Math.max(1, Math.floor(remainingBudgetMs / remainingSeedCount));\n};\n\nconst resolveDaemonStatusSeeds = (\n metadata: DaemonState | null,\n config: OpenDevBrowserConfig\n): DaemonMetadataSeed[] => {\n const seeds: DaemonMetadataSeed[] = [];\n const seen = new Set<string>();\n const addSeed = (seed: DaemonMetadataSeed | null): void => {\n if (!seed) {\n return;\n }\n const key = `${seed.port}:${seed.token}`;\n if (seen.has(key)) {\n return;\n }\n seen.add(key);\n seeds.push(seed);\n };\n\n addSeed(\n config.daemonPort > 0 && config.daemonToken\n ? {\n port: config.daemonPort,\n token: config.daemonToken,\n relayPort: config.relayPort\n }\n : null\n );\n addSeed(metadata);\n return seeds;\n};\n\nexport async function fetchDaemonStatus(\n port: number,\n token: string,\n options: DaemonStatusFetchOptions = {}\n): Promise<DaemonStatusPayload | null> {\n const attempts = resolveRetryAttempts(options.retryAttempts);\n const retryDelayMs = resolveRetryDelayMs(options.retryDelayMs);\n\n for (let attempt = 1; attempt <= attempts; attempt += 1) {\n try {\n const timedResponse = await fetchWithTimeoutContext(`http://127.0.0.1:${port}/status`, {\n method: \"GET\",\n headers: { Authorization: `Bearer ${token}` }\n }, options.timeoutMs);\n try {\n if (timedResponse.response.ok) {\n const status = await readResponseJsonWithTimeout<DaemonStatusPayload>(\n timedResponse.response,\n timedResponse.signal,\n timedResponse.timeoutMs\n );\n return withFingerprintCurrent(status);\n }\n } finally {\n timedResponse.dispose();\n }\n } catch {\n // retry below when configured\n }\n if (attempt < attempts) {\n await sleep(retryDelayMs);\n }\n }\n\n return null;\n}\n\nexport async function fetchDaemonStatusFromMetadata(\n config?: OpenDevBrowserConfig,\n options: DaemonStatusFetchOptions = {}\n): Promise<DaemonStatusPayload | null> {\n const resolvedConfig = config ?? loadGlobalConfig();\n const attempts = resolveRetryAttempts(options.retryAttempts);\n const retryDelayMs = resolveRetryDelayMs(options.retryDelayMs);\n const deadlineMs = Date.now() + resolveStatusTimeoutMs(options.timeoutMs);\n\n for (let attempt = 1; attempt <= attempts; attempt += 1) {\n const metadata = readDaemonMetadata();\n const seeds = resolveDaemonStatusSeeds(metadata, resolvedConfig);\n for (let seedIndex = 0; seedIndex < seeds.length; seedIndex += 1) {\n const seed = seeds[seedIndex];\n if (!seed) {\n continue;\n }\n const remainingBudgetMs = readRemainingBudgetMs(deadlineMs);\n if (remainingBudgetMs <= 0) {\n return null;\n }\n const timeoutMs = readSeedTimeoutMs(remainingBudgetMs, seeds.length - seedIndex);\n const status = await fetchDaemonStatus(seed.port, seed.token, {\n timeoutMs\n });\n if (status?.ok) {\n persistDaemonStatusMetadata(seed, status, resolvedConfig);\n return status;\n }\n }\n\n if (attempt < attempts) {\n const remainingBudgetMs = readRemainingBudgetMs(deadlineMs);\n if (remainingBudgetMs <= 0) {\n break;\n }\n await sleep(Math.min(retryDelayMs, remainingBudgetMs));\n }\n }\n\n return null;\n}\n\nexport function persistDaemonStatusMetadata(\n base: DaemonMetadataSeed,\n status: DaemonStatusPayload,\n config?: OpenDevBrowserConfig\n): void {\n const resolvedConfig = config ?? loadGlobalConfig();\n writeDaemonMetadata({\n port: base.port,\n token: base.token,\n pid: status.pid,\n relayPort: status.relay.port ?? resolvedConfig.relayPort,\n startedAt: base.startedAt ?? new Date().toISOString(),\n fingerprint: resolveDaemonFingerprint(status.fingerprint, base.fingerprint),\n hubInstanceId: status.hub.instanceId,\n relayInstanceId: status.relay.instanceId,\n relayEpoch: status.relay.epoch\n });\n}\n"],"mappings":"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","names":["randomUUID","randomUUID","randomUUID","resolve","binding","optionalBoolean","optionalPositiveInteger","randomUUID","optionalStringArray","resolve","observedPort","handoff","resolve","message","resolve"]}
|