opendevbrowser 0.0.34 → 0.0.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/README.md +1 -1
  2. package/dist/{accessibility-snapshot-VCBXK47S.js → accessibility-snapshot-TAFPVLZN.js} +8 -8
  3. package/dist/{active-window-7EUN36LZ.js → active-window-MHFMC6NQ.js} +8 -8
  4. package/dist/{annotate-VLBK7YB6.js → annotate-5ZFRFQ4B.js} +7 -7
  5. package/dist/{attr-JNANQKM6.js → attr-MBF2UCRF.js} +7 -7
  6. package/dist/browser/browser-manager.d.ts +6 -1
  7. package/dist/browser/browser-manager.d.ts.map +1 -1
  8. package/dist/browser/manager-types.d.ts +48 -0
  9. package/dist/browser/manager-types.d.ts.map +1 -1
  10. package/dist/browser/ops-browser-manager.d.ts +2 -1
  11. package/dist/browser/ops-browser-manager.d.ts.map +1 -1
  12. package/dist/{canvas-V5LO4JVL.js → canvas-CAMD22YU.js} +7 -7
  13. package/dist/{capture-desktop-FKVDWTVG.js → capture-desktop-TMZSFA5R.js} +8 -8
  14. package/dist/{capture-window-QVPM2DN2.js → capture-window-NZDKD2AE.js} +8 -8
  15. package/dist/{check-V3CWZ56S.js → check-MO33GTQ4.js} +7 -7
  16. package/dist/{checked-Q27Q6YZN.js → checked-3HDF5X2M.js} +7 -7
  17. package/dist/{chunk-VX47SJZM.js → chunk-32ZSOZND.js} +2 -2
  18. package/dist/{chunk-XRDCSHKZ.js → chunk-AHQC4A6P.js} +744 -14
  19. package/dist/chunk-AHQC4A6P.js.map +1 -0
  20. package/dist/{chunk-IBIHDGTZ.js → chunk-B5XIJQXO.js} +32 -4
  21. package/dist/chunk-B5XIJQXO.js.map +1 -0
  22. package/dist/{chunk-OJAUKABV.js → chunk-BHZLEFXW.js} +2 -2
  23. package/dist/{chunk-VY47VKXU.js → chunk-FJZY3Z3X.js} +2 -2
  24. package/dist/{chunk-GC2FWISX.js → chunk-HM4CO3EW.js} +20 -16
  25. package/dist/chunk-HM4CO3EW.js.map +1 -0
  26. package/dist/{chunk-Z3HIX2SE.js → chunk-UEAXTWGT.js} +2 -2
  27. package/dist/{chunk-ZGCTC5YM.js → chunk-UVD34RA2.js} +33 -1
  28. package/dist/chunk-UVD34RA2.js.map +1 -0
  29. package/dist/{chunk-5FDXH4CS.js → chunk-WTWSBEBW.js} +5659 -419
  30. package/dist/chunk-WTWSBEBW.js.map +1 -0
  31. package/dist/{chunk-NX2XYJP5.js → chunk-XSSPNVMS.js} +3 -3
  32. package/dist/{chunk-NX2XYJP5.js.map → chunk-XSSPNVMS.js.map} +1 -1
  33. package/dist/{chunk-QXJDJDSZ.js → chunk-Z3ADLR7I.js} +667 -8
  34. package/dist/chunk-Z3ADLR7I.js.map +1 -0
  35. package/dist/cli/commands/inspiredesign.d.ts +12 -1
  36. package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
  37. package/dist/cli/daemon-commands.d.ts.map +1 -1
  38. package/dist/cli/help.d.ts.map +1 -1
  39. package/dist/cli/index.js +76 -76
  40. package/dist/cli/index.js.map +1 -1
  41. package/dist/cli/utils/workflow-message.d.ts.map +1 -1
  42. package/dist/{click-EQDRSLR3.js → click-SWZPJO2U.js} +7 -7
  43. package/dist/{clone-component-SISUXTJS.js → clone-component-YTB46YU4.js} +7 -7
  44. package/dist/{clone-page-MLDPCBOY.js → clone-page-5FMPHQ3A.js} +7 -7
  45. package/dist/{close-7J7EV237.js → close-22SNMDX3.js} +7 -7
  46. package/dist/{close-2LQMJVOA.js → close-ORQZCZ2E.js} +7 -7
  47. package/dist/{connect-JFRSIW5M.js → connect-EWYITNQU.js} +7 -7
  48. package/dist/{console-poll-NSVVUNEC.js → console-poll-LJR6ZTDK.js} +7 -7
  49. package/dist/{cookie-import-B7IQTGTN.js → cookie-import-PTAIWPEC.js} +7 -7
  50. package/dist/{cookie-list-YHG7JCZZ.js → cookie-list-76C35B5B.js} +7 -7
  51. package/dist/{daemon-ENU4FOV4.js → daemon-UKJMDLCB.js} +6 -6
  52. package/dist/daemon-fingerprint.json +1 -1
  53. package/dist/{debug-trace-snapshot-KLGU2AWY.js → debug-trace-snapshot-PQ5FJART.js} +7 -7
  54. package/dist/{dialog-MUVQIERS.js → dialog-WLJDWJV4.js} +7 -7
  55. package/dist/{disconnect-KELQJ45J.js → disconnect-FNB4JC2U.js} +7 -7
  56. package/dist/{enabled-SF6UU5HG.js → enabled-PYMCOQPC.js} +7 -7
  57. package/dist/{goto-AZQWXYPG.js → goto-UNTEW4VI.js} +7 -7
  58. package/dist/guidance/context.d.ts +10 -0
  59. package/dist/guidance/context.d.ts.map +1 -1
  60. package/dist/guidance/readiness.d.ts.map +1 -1
  61. package/dist/guidance/recipes/generic.d.ts.map +1 -1
  62. package/dist/guidance/recipes/pinterest.d.ts.map +1 -1
  63. package/dist/guidance/types.d.ts +4 -0
  64. package/dist/guidance/types.d.ts.map +1 -1
  65. package/dist/{help-B44IBHXL.js → help-QOLCIB3P.js} +8 -7
  66. package/dist/{help-B44IBHXL.js.map → help-QOLCIB3P.js.map} +1 -1
  67. package/dist/{hover-MQRAKKVU.js → hover-ZWY4YOM4.js} +7 -7
  68. package/dist/{html-PLRTU2WS.js → html-M46YBFT3.js} +7 -7
  69. package/dist/index.js +43 -18
  70. package/dist/index.js.map +1 -1
  71. package/dist/{inspector-IY4GBIT6.js → inspector-6YAOI74U.js} +8 -8
  72. package/dist/{inspector-audit-7MQCRJHD.js → inspector-audit-PF64X6SJ.js} +9 -9
  73. package/dist/{inspector-plan-ZAUDHBET.js → inspector-plan-IUGTQV3Q.js} +9 -9
  74. package/dist/inspiredesign/capture-mode.d.ts +8 -0
  75. package/dist/inspiredesign/capture-mode.d.ts.map +1 -1
  76. package/dist/inspiredesign/capture.d.ts +36 -1
  77. package/dist/inspiredesign/capture.d.ts.map +1 -1
  78. package/dist/inspiredesign/contract.d.ts +24 -0
  79. package/dist/inspiredesign/contract.d.ts.map +1 -1
  80. package/dist/inspiredesign/handoff.d.ts +6 -2
  81. package/dist/inspiredesign/handoff.d.ts.map +1 -1
  82. package/dist/inspiredesign/media-analysis/analyzer.d.ts +13 -0
  83. package/dist/inspiredesign/media-analysis/analyzer.d.ts.map +1 -0
  84. package/dist/inspiredesign/media-analysis/design-guidance.d.ts +11 -0
  85. package/dist/inspiredesign/media-analysis/design-guidance.d.ts.map +1 -0
  86. package/dist/inspiredesign/media-analysis/ffmpeg.d.ts +21 -0
  87. package/dist/inspiredesign/media-analysis/ffmpeg.d.ts.map +1 -0
  88. package/dist/inspiredesign/media-analysis/ffprobe.d.ts +8 -0
  89. package/dist/inspiredesign/media-analysis/ffprobe.d.ts.map +1 -0
  90. package/dist/inspiredesign/media-analysis/index.d.ts +10 -0
  91. package/dist/inspiredesign/media-analysis/index.d.ts.map +1 -0
  92. package/dist/inspiredesign/media-analysis/persist.d.ts +6 -0
  93. package/dist/inspiredesign/media-analysis/persist.d.ts.map +1 -0
  94. package/dist/inspiredesign/media-analysis/pixel.d.ts +9 -0
  95. package/dist/inspiredesign/media-analysis/pixel.d.ts.map +1 -0
  96. package/dist/inspiredesign/media-analysis/types.d.ts +163 -0
  97. package/dist/inspiredesign/media-analysis/types.d.ts.map +1 -0
  98. package/dist/inspiredesign/media-analysis/typography-structure.d.ts +3 -0
  99. package/dist/inspiredesign/media-analysis/typography-structure.d.ts.map +1 -0
  100. package/dist/inspiredesign/meta-prompt.d.ts.map +1 -1
  101. package/dist/inspiredesign/motion-evidence.d.ts +73 -0
  102. package/dist/inspiredesign/motion-evidence.d.ts.map +1 -0
  103. package/dist/inspiredesign/pinterest-media-classification.d.ts +27 -0
  104. package/dist/inspiredesign/pinterest-media-classification.d.ts.map +1 -0
  105. package/dist/inspiredesign/pinterest-pin-media-evidence.d.ts +151 -0
  106. package/dist/inspiredesign/pinterest-pin-media-evidence.d.ts.map +1 -0
  107. package/dist/inspiredesign/product-readiness.d.ts +97 -0
  108. package/dist/inspiredesign/product-readiness.d.ts.map +1 -0
  109. package/dist/inspiredesign/reference-pattern-board.d.ts +27 -2
  110. package/dist/inspiredesign/reference-pattern-board.d.ts.map +1 -1
  111. package/dist/inspiredesign/visual-evidence.d.ts +5 -0
  112. package/dist/inspiredesign/visual-evidence.d.ts.map +1 -1
  113. package/dist/{inspiredesign-VHPEO3UK.js → inspiredesign-GZIEXETS.js} +29 -12
  114. package/dist/inspiredesign-GZIEXETS.js.map +1 -0
  115. package/dist/{launch-OCTWPTV5.js → launch-I7WNLWLY.js} +7 -7
  116. package/dist/{list-HUSYADUS.js → list-BAECFJI7.js} +7 -7
  117. package/dist/{list-JWKAMAUA.js → list-BCF4HZ2K.js} +7 -7
  118. package/dist/{macro-resolve-WOXMPZDQ.js → macro-resolve-4GNZYHHW.js} +8 -8
  119. package/dist/{network-poll-WHB62OEF.js → network-poll-DCZ5ZNLP.js} +7 -7
  120. package/dist/{new-IKZBYBNK.js → new-6KZYJTJG.js} +7 -7
  121. package/dist/{open-UA2VI6ZP.js → open-JPGEAJHJ.js} +7 -7
  122. package/dist/opendevbrowser.js +43 -18
  123. package/dist/opendevbrowser.js.map +1 -1
  124. package/dist/{perf-DICS3VKH.js → perf-5X367PRP.js} +7 -7
  125. package/dist/{pointer-down-2XPRZFJC.js → pointer-down-5OAUDDNR.js} +7 -7
  126. package/dist/{pointer-drag-7NY4BOLH.js → pointer-drag-LIW5PY5P.js} +7 -7
  127. package/dist/{pointer-move-FWEXMH37.js → pointer-move-7AMURLJD.js} +7 -7
  128. package/dist/{pointer-up-VU2OHK5D.js → pointer-up-EY652YWL.js} +7 -7
  129. package/dist/{press-W7IZ3FCX.js → press-UIAE5XEF.js} +7 -7
  130. package/dist/{product-video-XCZ6CHR5.js → product-video-B6TLS7VC.js} +9 -9
  131. package/dist/providers/browser-native-discovery.d.ts.map +1 -1
  132. package/dist/providers/renderer.d.ts +10 -1
  133. package/dist/providers/renderer.d.ts.map +1 -1
  134. package/dist/providers/workflows.d.ts +53 -2
  135. package/dist/providers/workflows.d.ts.map +1 -1
  136. package/dist/{providers-XCNSU3T6.js → providers-AERTX6X4.js} +5 -3
  137. package/dist/public-surface/generated-manifest.d.ts +2 -2
  138. package/dist/public-surface/generated-manifest.d.ts.map +1 -1
  139. package/dist/public-surface/source.d.ts +2 -2
  140. package/dist/public-surface/source.d.ts.map +1 -1
  141. package/dist/{research-AYCKHOWK.js → research-AJH6ECYW.js} +9 -9
  142. package/dist/{review-PP2UNSMJ.js → review-RN6XF2YB.js} +7 -7
  143. package/dist/{review-desktop-3JOJFUEJ.js → review-desktop-UJOUS7K2.js} +7 -7
  144. package/dist/{rpc-7EPTJQQ6.js → rpc-VS5Y5FUT.js} +7 -7
  145. package/dist/{run-P6UJS3D4.js → run-EVRIQW7S.js} +5 -5
  146. package/dist/{screencast-start-ZZYNH2HT.js → screencast-start-U6J4FYU4.js} +7 -7
  147. package/dist/{screencast-stop-Y6ADFOFA.js → screencast-stop-EQUPRGMP.js} +7 -7
  148. package/dist/{screenshot-CJB7PMAF.js → screenshot-BENYGC36.js} +7 -7
  149. package/dist/{scroll-BP5MA4ZT.js → scroll-3OALQLX2.js} +7 -7
  150. package/dist/{scroll-into-view-O3RDWLM2.js → scroll-into-view-SNZKBIVB.js} +7 -7
  151. package/dist/{select-QLCNRI36.js → select-JDZDDC3Y.js} +7 -7
  152. package/dist/{serve-OO2MQWGL.js → serve-LOC6ESJ4.js} +6 -6
  153. package/dist/{shopping-UYHCYPAH.js → shopping-267OAYGM.js} +9 -9
  154. package/dist/{snapshot-SXYZ3CMC.js → snapshot-ASYI5UFR.js} +7 -7
  155. package/dist/{status-AL2AHVA5.js → status-47CI4LJX.js} +7 -7
  156. package/dist/{status-QQW7REK4.js → status-N4O6DJTF.js} +8 -8
  157. package/dist/{status-capabilities-AVHJYQQQ.js → status-capabilities-C777JZG4.js} +8 -8
  158. package/dist/{text-B6Z47EOA.js → text-MS2653MW.js} +7 -7
  159. package/dist/tools/inspiredesign_run.d.ts.map +1 -1
  160. package/dist/{type-LR3F3SQY.js → type-UMPSDACC.js} +7 -7
  161. package/dist/{uncheck-5PJEHR7J.js → uncheck-2OZ56D42.js} +7 -7
  162. package/dist/{upload-HQ3QN2OW.js → upload-CD7PRH54.js} +7 -7
  163. package/dist/{use-KFZLMRUH.js → use-MO67AGG7.js} +7 -7
  164. package/dist/{value-TKUFUK5I.js → value-4GI2LRUY.js} +7 -7
  165. package/dist/{visible-P5Z2N2QR.js → visible-VSUFGRFZ.js} +7 -7
  166. package/dist/{wait-BYSHJPSC.js → wait-OQYMFENT.js} +7 -7
  167. package/dist/{windows-6GTD25EU.js → windows-75W2JCW7.js} +8 -8
  168. package/extension/manifest.json +1 -1
  169. package/package.json +1 -1
  170. package/skills/opendevbrowser-best-practices/SKILL.md +41 -30
  171. package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +12 -8
  172. package/skills/opendevbrowser-best-practices/artifacts/parity-gates.md +1 -0
  173. package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +19 -0
  174. package/skills/opendevbrowser-best-practices/assets/templates/mode-flag-matrix.json +23 -13
  175. package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +3 -1
  176. package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +62 -21
  177. package/skills/opendevbrowser-best-practices/scripts/resolve-odb-cli.sh +28 -0
  178. package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +15 -0
  179. package/skills/opendevbrowser-best-practices/scripts/validator-fixture-cli.sh +13 -0
  180. package/skills/opendevbrowser-design-agent/SKILL.md +2 -0
  181. package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +15 -13
  182. package/skills/opendevbrowser-design-agent/artifacts/isolated-preview-validation.md +1 -1
  183. package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +14 -7
  184. package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +1 -0
  185. package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +10 -7
  186. package/skills/opendevbrowser-motion-design/SKILL.md +1 -1
  187. package/skills/opendevbrowser-product-presentation-asset/SKILL.md +5 -4
  188. package/skills/opendevbrowser-product-presentation-asset/scripts/capture-screenshots.sh +1 -0
  189. package/skills/opendevbrowser-product-presentation-asset/scripts/collect-product.sh +1 -0
  190. package/skills/opendevbrowser-product-presentation-asset/scripts/download-images.sh +1 -0
  191. package/skills/opendevbrowser-product-presentation-asset/scripts/validate-skill-assets.sh +4 -0
  192. package/skills/opendevbrowser-product-presentation-asset/scripts/write-manifest.sh +1 -0
  193. package/skills/opendevbrowser-research/SKILL.md +1 -0
  194. package/skills/opendevbrowser-research/scripts/render-output.sh +1 -0
  195. package/skills/opendevbrowser-research/scripts/run-research.sh +1 -0
  196. package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +4 -0
  197. package/skills/opendevbrowser-research/scripts/write-artifacts.sh +1 -0
  198. package/skills/opendevbrowser-shopping/SKILL.md +1 -0
  199. package/skills/opendevbrowser-shopping/scripts/normalize-offers.sh +1 -0
  200. package/skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh +1 -0
  201. package/skills/opendevbrowser-shopping/scripts/run-shopping.sh +1 -0
  202. package/skills/opendevbrowser-shopping/scripts/validate-skill-assets.sh +4 -0
  203. package/dist/chunk-5FDXH4CS.js.map +0 -1
  204. package/dist/chunk-GC2FWISX.js.map +0 -1
  205. package/dist/chunk-IBIHDGTZ.js.map +0 -1
  206. package/dist/chunk-QXJDJDSZ.js.map +0 -1
  207. package/dist/chunk-XRDCSHKZ.js.map +0 -1
  208. package/dist/chunk-ZGCTC5YM.js.map +0 -1
  209. package/dist/inspiredesign-VHPEO3UK.js.map +0 -1
  210. /package/dist/{accessibility-snapshot-VCBXK47S.js.map → accessibility-snapshot-TAFPVLZN.js.map} +0 -0
  211. /package/dist/{active-window-7EUN36LZ.js.map → active-window-MHFMC6NQ.js.map} +0 -0
  212. /package/dist/{annotate-VLBK7YB6.js.map → annotate-5ZFRFQ4B.js.map} +0 -0
  213. /package/dist/{attr-JNANQKM6.js.map → attr-MBF2UCRF.js.map} +0 -0
  214. /package/dist/{canvas-V5LO4JVL.js.map → canvas-CAMD22YU.js.map} +0 -0
  215. /package/dist/{capture-desktop-FKVDWTVG.js.map → capture-desktop-TMZSFA5R.js.map} +0 -0
  216. /package/dist/{capture-window-QVPM2DN2.js.map → capture-window-NZDKD2AE.js.map} +0 -0
  217. /package/dist/{check-V3CWZ56S.js.map → check-MO33GTQ4.js.map} +0 -0
  218. /package/dist/{checked-Q27Q6YZN.js.map → checked-3HDF5X2M.js.map} +0 -0
  219. /package/dist/{chunk-VX47SJZM.js.map → chunk-32ZSOZND.js.map} +0 -0
  220. /package/dist/{chunk-OJAUKABV.js.map → chunk-BHZLEFXW.js.map} +0 -0
  221. /package/dist/{chunk-VY47VKXU.js.map → chunk-FJZY3Z3X.js.map} +0 -0
  222. /package/dist/{chunk-Z3HIX2SE.js.map → chunk-UEAXTWGT.js.map} +0 -0
  223. /package/dist/{click-EQDRSLR3.js.map → click-SWZPJO2U.js.map} +0 -0
  224. /package/dist/{clone-component-SISUXTJS.js.map → clone-component-YTB46YU4.js.map} +0 -0
  225. /package/dist/{clone-page-MLDPCBOY.js.map → clone-page-5FMPHQ3A.js.map} +0 -0
  226. /package/dist/{close-7J7EV237.js.map → close-22SNMDX3.js.map} +0 -0
  227. /package/dist/{close-2LQMJVOA.js.map → close-ORQZCZ2E.js.map} +0 -0
  228. /package/dist/{connect-JFRSIW5M.js.map → connect-EWYITNQU.js.map} +0 -0
  229. /package/dist/{console-poll-NSVVUNEC.js.map → console-poll-LJR6ZTDK.js.map} +0 -0
  230. /package/dist/{cookie-import-B7IQTGTN.js.map → cookie-import-PTAIWPEC.js.map} +0 -0
  231. /package/dist/{cookie-list-YHG7JCZZ.js.map → cookie-list-76C35B5B.js.map} +0 -0
  232. /package/dist/{daemon-ENU4FOV4.js.map → daemon-UKJMDLCB.js.map} +0 -0
  233. /package/dist/{debug-trace-snapshot-KLGU2AWY.js.map → debug-trace-snapshot-PQ5FJART.js.map} +0 -0
  234. /package/dist/{dialog-MUVQIERS.js.map → dialog-WLJDWJV4.js.map} +0 -0
  235. /package/dist/{disconnect-KELQJ45J.js.map → disconnect-FNB4JC2U.js.map} +0 -0
  236. /package/dist/{enabled-SF6UU5HG.js.map → enabled-PYMCOQPC.js.map} +0 -0
  237. /package/dist/{goto-AZQWXYPG.js.map → goto-UNTEW4VI.js.map} +0 -0
  238. /package/dist/{hover-MQRAKKVU.js.map → hover-ZWY4YOM4.js.map} +0 -0
  239. /package/dist/{html-PLRTU2WS.js.map → html-M46YBFT3.js.map} +0 -0
  240. /package/dist/{inspector-IY4GBIT6.js.map → inspector-6YAOI74U.js.map} +0 -0
  241. /package/dist/{inspector-audit-7MQCRJHD.js.map → inspector-audit-PF64X6SJ.js.map} +0 -0
  242. /package/dist/{inspector-plan-ZAUDHBET.js.map → inspector-plan-IUGTQV3Q.js.map} +0 -0
  243. /package/dist/{launch-OCTWPTV5.js.map → launch-I7WNLWLY.js.map} +0 -0
  244. /package/dist/{list-HUSYADUS.js.map → list-BAECFJI7.js.map} +0 -0
  245. /package/dist/{list-JWKAMAUA.js.map → list-BCF4HZ2K.js.map} +0 -0
  246. /package/dist/{macro-resolve-WOXMPZDQ.js.map → macro-resolve-4GNZYHHW.js.map} +0 -0
  247. /package/dist/{network-poll-WHB62OEF.js.map → network-poll-DCZ5ZNLP.js.map} +0 -0
  248. /package/dist/{new-IKZBYBNK.js.map → new-6KZYJTJG.js.map} +0 -0
  249. /package/dist/{open-UA2VI6ZP.js.map → open-JPGEAJHJ.js.map} +0 -0
  250. /package/dist/{perf-DICS3VKH.js.map → perf-5X367PRP.js.map} +0 -0
  251. /package/dist/{pointer-down-2XPRZFJC.js.map → pointer-down-5OAUDDNR.js.map} +0 -0
  252. /package/dist/{pointer-drag-7NY4BOLH.js.map → pointer-drag-LIW5PY5P.js.map} +0 -0
  253. /package/dist/{pointer-move-FWEXMH37.js.map → pointer-move-7AMURLJD.js.map} +0 -0
  254. /package/dist/{pointer-up-VU2OHK5D.js.map → pointer-up-EY652YWL.js.map} +0 -0
  255. /package/dist/{press-W7IZ3FCX.js.map → press-UIAE5XEF.js.map} +0 -0
  256. /package/dist/{product-video-XCZ6CHR5.js.map → product-video-B6TLS7VC.js.map} +0 -0
  257. /package/dist/{providers-XCNSU3T6.js.map → providers-AERTX6X4.js.map} +0 -0
  258. /package/dist/{research-AYCKHOWK.js.map → research-AJH6ECYW.js.map} +0 -0
  259. /package/dist/{review-PP2UNSMJ.js.map → review-RN6XF2YB.js.map} +0 -0
  260. /package/dist/{review-desktop-3JOJFUEJ.js.map → review-desktop-UJOUS7K2.js.map} +0 -0
  261. /package/dist/{rpc-7EPTJQQ6.js.map → rpc-VS5Y5FUT.js.map} +0 -0
  262. /package/dist/{run-P6UJS3D4.js.map → run-EVRIQW7S.js.map} +0 -0
  263. /package/dist/{screencast-start-ZZYNH2HT.js.map → screencast-start-U6J4FYU4.js.map} +0 -0
  264. /package/dist/{screencast-stop-Y6ADFOFA.js.map → screencast-stop-EQUPRGMP.js.map} +0 -0
  265. /package/dist/{screenshot-CJB7PMAF.js.map → screenshot-BENYGC36.js.map} +0 -0
  266. /package/dist/{scroll-BP5MA4ZT.js.map → scroll-3OALQLX2.js.map} +0 -0
  267. /package/dist/{scroll-into-view-O3RDWLM2.js.map → scroll-into-view-SNZKBIVB.js.map} +0 -0
  268. /package/dist/{select-QLCNRI36.js.map → select-JDZDDC3Y.js.map} +0 -0
  269. /package/dist/{serve-OO2MQWGL.js.map → serve-LOC6ESJ4.js.map} +0 -0
  270. /package/dist/{shopping-UYHCYPAH.js.map → shopping-267OAYGM.js.map} +0 -0
  271. /package/dist/{snapshot-SXYZ3CMC.js.map → snapshot-ASYI5UFR.js.map} +0 -0
  272. /package/dist/{status-AL2AHVA5.js.map → status-47CI4LJX.js.map} +0 -0
  273. /package/dist/{status-QQW7REK4.js.map → status-N4O6DJTF.js.map} +0 -0
  274. /package/dist/{status-capabilities-AVHJYQQQ.js.map → status-capabilities-C777JZG4.js.map} +0 -0
  275. /package/dist/{text-B6Z47EOA.js.map → text-MS2653MW.js.map} +0 -0
  276. /package/dist/{type-LR3F3SQY.js.map → type-UMPSDACC.js.map} +0 -0
  277. /package/dist/{uncheck-5PJEHR7J.js.map → uncheck-2OZ56D42.js.map} +0 -0
  278. /package/dist/{upload-HQ3QN2OW.js.map → upload-CD7PRH54.js.map} +0 -0
  279. /package/dist/{use-KFZLMRUH.js.map → use-MO67AGG7.js.map} +0 -0
  280. /package/dist/{value-TKUFUK5I.js.map → value-4GI2LRUY.js.map} +0 -0
  281. /package/dist/{visible-P5Z2N2QR.js.map → visible-VSUFGRFZ.js.map} +0 -0
  282. /package/dist/{wait-BYSHJPSC.js.map → wait-OQYMFENT.js.map} +0 -0
  283. /package/dist/{windows-6GTD25EU.js.map → windows-75W2JCW7.js.map} +0 -0
@@ -13,7 +13,7 @@ import {
13
13
  readResponseJsonWithTimeout,
14
14
  readResponseTextWithTimeout,
15
15
  resolveCurrentDaemonEntrypointPath
16
- } from "./chunk-QXJDJDSZ.js";
16
+ } from "./chunk-Z3ADLR7I.js";
17
17
  import {
18
18
  loadGlobalConfig
19
19
  } from "./chunk-MX3NFLCE.js";
@@ -36,7 +36,7 @@ var CLIENT_ID_FILE = "client.json";
36
36
  var DEFAULT_RENEW_AFTER_MS = 2e4;
37
37
  var MIN_RENEW_AFTER_MS = 5e3;
38
38
  var TRANSPORT_TIMEOUT_BUFFER_MS = 5e3;
39
- var MAX_DERIVED_TRANSPORT_TIMEOUT_MS = 3e5;
39
+ var MAX_DERIVED_TRANSPORT_TIMEOUT_MS = 6e5;
40
40
  var TRANSPORT_TIMEOUT_HINT_KEYS = ["timeoutMs", "waitTimeoutMs"];
41
41
  var DAEMON_STATUS_RETRY_OPTIONS = {
42
42
  retryAttempts: 5,
@@ -842,4 +842,4 @@ export {
842
842
  DaemonClient,
843
843
  callDaemon
844
844
  };
845
- //# sourceMappingURL=chunk-NX2XYJP5.js.map
845
+ //# sourceMappingURL=chunk-XSSPNVMS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/daemon-client.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { join, resolve } from \"path\";\nimport { randomUUID } from \"crypto\";\nimport { fileURLToPath } from \"url\";\nimport {\n DAEMON_STOP_DEBUG_ENV,\n createDaemonStopHeaders,\n getCacheRoot,\n isCurrentDaemonFingerprint,\n readDaemonMetadata,\n resolveCurrentDaemonEntrypointPath\n} from \"./daemon\";\nimport { CliError, createDisconnectedError, EXIT_EXECUTION } from \"./errors\";\nimport { writeFileAtomic } from \"../utils/fs\";\nimport { loadGlobalConfig } from \"../config\";\nimport {\n fetchDaemonStatus,\n persistDaemonStatusMetadata,\n type DaemonStatusFetchOptions,\n type DaemonStatusPayload\n} from \"./daemon-status\";\nimport {\n buildDaemonFingerprintMismatchMessage,\n DAEMON_FINGERPRINT_MISMATCH_REASON\n} from \"./daemon-mismatch\";\nimport {\n fetchWithTimeout,\n fetchWithTimeoutContext,\n readResponseJsonWithTimeout,\n readResponseTextWithTimeout,\n type TimedFetchResponse\n} from \"./utils/http\";\n\nconst CLIENT_ID_FILE = \"client.json\";\nconst DEFAULT_RENEW_AFTER_MS = 20_000;\nconst MIN_RENEW_AFTER_MS = 5_000;\nconst TRANSPORT_TIMEOUT_BUFFER_MS = 5_000;\nconst MAX_DERIVED_TRANSPORT_TIMEOUT_MS = 300_000;\nconst TRANSPORT_TIMEOUT_HINT_KEYS = [\"timeoutMs\", \"waitTimeoutMs\"] as const;\nconst DAEMON_STATUS_RETRY_OPTIONS: DaemonStatusFetchOptions = {\n retryAttempts: 5,\n retryDelayMs: 250\n};\nconst DAEMON_CONFIG_PREFER_OPTIONS: DaemonStatusFetchOptions = {\n timeoutMs: 500,\n retryAttempts: 3,\n retryDelayMs: 250\n};\nconst DAEMON_RESTART_STATUS_TIMEOUT_MS = 5_000;\nconst DAEMON_RECOVERY_READY_TIMEOUT_MS = 5_000;\nconst DAEMON_RESTART_READY_TIMEOUT_MS = 15_000;\nconst DAEMON_RESTART_POLL_DELAY_MS = 250;\n\ntype DaemonResponse<T> = { ok?: boolean; data?: T; error?: string };\n\ntype BindingConfig = {\n ttlMs: number;\n renewIntervalMs: number;\n graceMs: number;\n waitMaxMs: number;\n};\n\ntype BindingResponse = {\n bindingId: string;\n expiresAt: string;\n ttlMs?: number;\n renewAfterMs?: number;\n};\n\ntype QueueResponse = {\n queued: true;\n position: number;\n waitUntil: string;\n waitMs?: number;\n};\n\ntype RelayBindResponse = (BindingResponse | QueueResponse) & {\n hubInstanceId?: string;\n relayInstanceId?: string;\n relayPort?: number | null;\n bindingConfig?: BindingConfig;\n};\n\ntype BindingState = {\n bindingId: string;\n expiresAtMs: number;\n renewAfterMs: number;\n};\n\ntype CachedBindingState = {\n bindingId: string;\n expiresAt: string;\n renewAfterMs?: number;\n};\n\ntype CachedClientState = {\n clientId: string;\n createdAt: string;\n binding?: CachedBindingState;\n};\n\ntype CallOptions = {\n requireBinding?: boolean;\n timeoutMs?: number;\n};\n\nlet cachedClientState: CachedClientState | null | undefined;\n\nconst 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\nconst getClientStateFilePath = (): string => {\n const cacheRoot = getCacheRoot();\n return join(cacheRoot, CLIENT_ID_FILE);\n};\n\nconst readCachedClientState = (): CachedClientState | null => {\n if (cachedClientState !== undefined) {\n return cachedClientState;\n }\n\n const filePath = getClientStateFilePath();\n if (existsSync(filePath)) {\n try {\n const content = readFileSync(filePath, \"utf-8\");\n const parsed = JSON.parse(content) as {\n clientId?: unknown;\n createdAt?: unknown;\n binding?: unknown;\n };\n if (typeof parsed.clientId === \"string\" && parsed.clientId.trim()) {\n cachedClientState = {\n clientId: parsed.clientId.trim(),\n createdAt: typeof parsed.createdAt === \"string\" && parsed.createdAt.trim()\n ? parsed.createdAt\n : new Date().toISOString(),\n ...(parsed.binding && typeof parsed.binding === \"object\"\n ? { binding: parsed.binding as CachedBindingState }\n : {})\n };\n return cachedClientState;\n }\n } catch {\n // fallthrough to regenerate\n }\n }\n\n cachedClientState = null;\n return cachedClientState;\n};\n\nconst writeCachedClientState = (state: CachedClientState): void => {\n const filePath = getClientStateFilePath();\n writeFileAtomic(filePath, JSON.stringify(state, null, 2), { mode: 0o600 });\n cachedClientState = state;\n};\n\nconst loadClientState = (): CachedClientState => {\n const existing = readCachedClientState();\n if (existing) {\n return existing;\n }\n\n const state = {\n clientId: randomUUID(),\n createdAt: new Date().toISOString()\n };\n writeCachedClientState(state);\n return state;\n};\n\nconst parseBindingResponse = (data: BindingResponse): BindingState => {\n const expiresAtMs = Date.parse(data.expiresAt);\n if (!Number.isFinite(expiresAtMs)) {\n throw new Error(\"Invalid binding expiry timestamp\");\n }\n const renewAfterMs = Math.max(\n MIN_RENEW_AFTER_MS,\n typeof data.renewAfterMs === \"number\" && Number.isFinite(data.renewAfterMs)\n ? data.renewAfterMs\n : DEFAULT_RENEW_AFTER_MS\n );\n return {\n bindingId: data.bindingId,\n expiresAtMs,\n renewAfterMs\n };\n};\n\nconst serializeBindingState = (binding: BindingState): CachedBindingState => ({\n bindingId: binding.bindingId,\n expiresAt: new Date(binding.expiresAtMs).toISOString(),\n renewAfterMs: binding.renewAfterMs\n});\n\nconst updateCachedBindingState = (clientId: string, binding: BindingState | null): void => {\n const current = loadClientState();\n const base: CachedClientState = current.clientId === clientId\n ? current\n : { clientId, createdAt: new Date().toISOString() };\n if (binding) {\n writeCachedClientState({\n ...base,\n binding: serializeBindingState(binding)\n });\n return;\n }\n writeCachedClientState({\n clientId: base.clientId,\n createdAt: base.createdAt\n });\n};\n\nconst isBindingRequiredError = (error: unknown): boolean => {\n const message = error instanceof Error ? error.message : String(error ?? \"\");\n return message.startsWith(\"RELAY_BINDING_REQUIRED\") || message.startsWith(\"RELAY_BINDING_INVALID\");\n};\n\nconst isLeaseInvalidError = (error: unknown): boolean => {\n const message = error instanceof Error ? error.message : String(error ?? \"\");\n return message.startsWith(\"RELAY_LEASE_INVALID\");\n};\n\nconst isTransportTimeoutError = (error: unknown): boolean => {\n const message = error instanceof Error ? error.message : String(error ?? \"\");\n return message.startsWith(\"Request timed out after \");\n};\n\nexport class DaemonClient {\n private binding: BindingState | null = null;\n private renewTimer: NodeJS.Timeout | null = null;\n private readonly clientId: string;\n private readonly autoRenew: boolean;\n private bindingAcquiredInProcess = false;\n private sessionLeases = new Map<string, string>();\n\n constructor(options: { clientId?: string; autoRenew?: boolean } = {}) {\n const cachedState = loadClientState();\n this.clientId = options.clientId ?? cachedState.clientId;\n this.autoRenew = options.autoRenew ?? false;\n if (cachedState.clientId === this.clientId && cachedState.binding) {\n try {\n this.setBinding(parseBindingResponse(cachedState.binding), { acquiredInProcess: false });\n } catch {\n updateCachedBindingState(this.clientId, null);\n }\n }\n }\n\n async call<T>(name: string, params: Record<string, unknown> = {}, options: CallOptions = {}): Promise<T> {\n try {\n const result = await this.callWithBinding<T>(name, params, options);\n this.maybeTrackLease(name, params, result);\n return result;\n } catch (error) {\n const sessionId = typeof params.sessionId === \"string\" ? params.sessionId : undefined;\n if (sessionId && !(\"leaseId\" in params) && isLeaseInvalidError(error) && this.sessionLeases.has(sessionId)) {\n this.sessionLeases.delete(sessionId);\n const result = await this.callWithBinding<T>(name, params, options);\n this.maybeTrackLease(name, params, result);\n return result;\n }\n if (isBindingRequiredError(error)) {\n if (this.binding) {\n this.clearBinding();\n }\n await this.ensureBinding();\n const result = await this.callWithBinding<T>(name, params, { ...options, requireBinding: true });\n this.maybeTrackLease(name, params, result);\n return result;\n }\n throw error;\n }\n }\n\n async releaseBinding(): Promise<void> {\n if (!this.binding) return;\n if (!this.bindingAcquiredInProcess) {\n this.clearBinding({ persist: false });\n return;\n }\n const bindingId = this.binding.bindingId;\n try {\n await this.callRaw(\"relay.release\", { clientId: this.clientId, bindingId });\n } finally {\n this.clearBinding();\n }\n }\n\n private async callWithBinding<T>(name: string, params: Record<string, unknown>, options: CallOptions): Promise<T> {\n const requireBinding = options.requireBinding ?? false;\n const bindingId = requireBinding ? await this.ensureBinding() : this.binding?.bindingId;\n const sessionId = typeof params.sessionId === \"string\" ? params.sessionId : undefined;\n const leaseId = sessionId ? this.sessionLeases.get(sessionId) : undefined;\n const payload = {\n ...params,\n clientId: this.clientId,\n ...(bindingId ? { bindingId } : {}),\n ...(leaseId ? { leaseId } : {})\n };\n return await this.callRaw<T>(name, payload, deriveTransportTimeoutMs(params, options.timeoutMs));\n }\n\n private maybeTrackLease<T>(name: string, params: Record<string, unknown>, result: T): void {\n if (name === \"session.disconnect\") {\n const sessionId = typeof params.sessionId === \"string\" ? params.sessionId : undefined;\n if (sessionId) {\n this.sessionLeases.delete(sessionId);\n }\n if (result && typeof result === \"object\" && (result as Record<string, unknown>).bindingReleased === true) {\n this.clearBinding();\n }\n return;\n }\n if (name !== \"session.launch\" && name !== \"session.connect\") return;\n if (!result || typeof result !== \"object\") return;\n const record = result as Record<string, unknown>;\n const sessionId = record.sessionId;\n const leaseId = record.leaseId;\n if (typeof sessionId === \"string\" && typeof leaseId === \"string\") {\n this.sessionLeases.set(sessionId, leaseId);\n }\n }\n\n private async ensureBinding(): Promise<string> {\n if (this.binding && Date.now() < this.binding.expiresAtMs - MIN_RENEW_AFTER_MS) {\n return this.binding.bindingId;\n }\n const data = await this.callRaw<RelayBindResponse>(\"relay.bind\", { clientId: this.clientId });\n const state = await this.resolveBindingState(data);\n this.setBinding(state, { acquiredInProcess: true });\n return state.bindingId;\n }\n\n private async resolveBindingState(data: RelayBindResponse): Promise<BindingState> {\n if (\"queued\" in data && data.queued) {\n const waitMs = typeof data.waitMs === \"number\" && Number.isFinite(data.waitMs) ? data.waitMs : null;\n const timeoutMs = waitMs ? Math.max(1000, waitMs) : data.bindingConfig?.waitMaxMs;\n const waitResponse = await this.callRaw<RelayBindResponse>(\"relay.wait\", {\n clientId: this.clientId,\n ...(timeoutMs ? { timeoutMs } : {})\n });\n if (\"queued\" in waitResponse && waitResponse.queued) {\n throw new Error(\"RELAY_WAIT_TIMEOUT: Timed out waiting for relay binding.\");\n }\n return parseBindingResponse(waitResponse as BindingResponse);\n }\n return parseBindingResponse(data as BindingResponse);\n }\n\n private async renewBinding(): Promise<void> {\n if (!this.binding) return;\n const data = await this.callRaw<BindingResponse>(\"relay.renew\", {\n clientId: this.clientId,\n bindingId: this.binding.bindingId\n });\n this.setBinding(parseBindingResponse(data), { acquiredInProcess: this.bindingAcquiredInProcess });\n }\n\n private setBinding(state: BindingState, options: { acquiredInProcess?: boolean } = {}): void {\n this.binding = state;\n if (options.acquiredInProcess !== undefined) {\n this.bindingAcquiredInProcess = options.acquiredInProcess;\n }\n updateCachedBindingState(this.clientId, state);\n if (this.autoRenew) {\n this.scheduleRenew(resolveRenewDelayMs(state));\n }\n }\n\n private scheduleRenew(delayMs: number): void {\n if (!this.autoRenew) return;\n this.clearRenewTimer();\n this.renewTimer = setTimeout(() => {\n this.renewTimer = null;\n this.renewBinding().catch(() => this.clearBinding());\n }, delayMs);\n }\n\n private clearBinding(options: { persist?: boolean } = {}): void {\n this.binding = null;\n this.bindingAcquiredInProcess = false;\n if (options.persist !== false) {\n updateCachedBindingState(this.clientId, null);\n }\n this.clearRenewTimer();\n }\n\n private clearRenewTimer(): void {\n if (this.renewTimer) {\n clearTimeout(this.renewTimer);\n this.renewTimer = null;\n }\n }\n\n private async callRaw<T>(name: string, params: Record<string, unknown>, timeoutMs?: number): Promise<T> {\n const budget = createTimeoutBudget(timeoutMs);\n const connection = await resolveDaemonConnection(budget, {\n preferConfiguredRecovery: requiresConfiguredRecovery(name)\n });\n\n let timedResponse: TimedFetchResponse;\n try {\n timedResponse = await openDaemonCommand(\n connection.port,\n connection.token,\n name,\n params,\n readRemainingBudgetMs(budget)\n );\n } catch (error) {\n if (isTransportTimeoutError(error)) {\n throw error;\n }\n timedResponse = await retryWithRefreshedConnection(name, params, budget);\n }\n\n try {\n if (!timedResponse.response.ok) {\n const message = await readDaemonErrorMessage(timedResponse);\n if (message.includes(\"Unauthorized\") || timedResponse.response.status === 401) {\n timedResponse.dispose();\n timedResponse = await retryWithRefreshedConnection(name, params, budget);\n if (!timedResponse.response.ok) {\n throw new CliError(await readDaemonErrorMessage(timedResponse), EXIT_EXECUTION);\n }\n } else {\n throw new CliError(message, EXIT_EXECUTION);\n }\n }\n\n const payload = await readResponseJsonWithTimeout<DaemonResponse<T>>(\n timedResponse.response,\n timedResponse.signal,\n timedResponse.timeoutMs\n );\n if (!payload.ok) {\n throw new CliError(payload.error || \"Daemon command failed.\", EXIT_EXECUTION);\n }\n\n return payload.data as T;\n } finally {\n timedResponse.dispose();\n }\n }\n}\n\nconst asPositiveNumber = (value: unknown): number | undefined => {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0 ? value : undefined;\n};\n\nconst createTransportTimeoutError = (timeoutMs: number): Error => {\n return new Error(`Request timed out after ${timeoutMs}ms`);\n};\n\nconst createTimeoutBudget = (timeoutMs?: number): TimeoutBudget | null => {\n const resolved = asPositiveNumber(timeoutMs);\n return resolved === undefined\n ? null\n : { timeoutMs: resolved, deadlineMs: Date.now() + resolved };\n};\n\nconst readRemainingBudgetMs = (budget: TimeoutBudget | null): number | undefined => {\n if (!budget) {\n return undefined;\n }\n const remainingMs = budget.deadlineMs - Date.now();\n if (remainingMs <= 0) {\n throw createTransportTimeoutError(budget.timeoutMs);\n }\n return remainingMs;\n};\n\nconst capTimeoutToBudget = (\n timeoutMs: number,\n budget: TimeoutBudget | null\n): number => {\n const remainingMs = readRemainingBudgetMs(budget);\n return remainingMs === undefined\n ? timeoutMs\n : Math.max(1, Math.min(timeoutMs, remainingMs));\n};\n\nconst resolveReadyDeadlineMs = (\n readyTimeoutMs: number,\n budget: TimeoutBudget | null\n): number => {\n const localDeadlineMs = Date.now() + readyTimeoutMs;\n return budget ? Math.min(localDeadlineMs, budget.deadlineMs) : localDeadlineMs;\n};\n\nconst hasBudgetTimedOut = (\n budget: TimeoutBudget | null,\n deadlineMs: number\n): boolean => {\n if (!budget) {\n return false;\n }\n return deadlineMs >= budget.deadlineMs && Date.now() >= budget.deadlineMs;\n};\n\nconst deriveTransportTimeoutMs = (\n params: Record<string, unknown>,\n explicitTimeoutMs?: number\n): number | undefined => {\n const explicit = asPositiveNumber(explicitTimeoutMs);\n if (explicit !== undefined) {\n return explicit;\n }\n for (const key of TRANSPORT_TIMEOUT_HINT_KEYS) {\n const value = asPositiveNumber(params[key]);\n if (value !== undefined) {\n return Math.min(value + TRANSPORT_TIMEOUT_BUFFER_MS, MAX_DERIVED_TRANSPORT_TIMEOUT_MS);\n }\n }\n return undefined;\n};\n\nconst resolveRenewDelayMs = (binding: BindingState): number => {\n const remainingMs = Math.max(0, binding.expiresAtMs - Date.now() - MIN_RENEW_AFTER_MS);\n return Math.max(0, Math.min(binding.renewAfterMs, remainingMs));\n};\n\nconst cliClient = new DaemonClient({ autoRenew: false });\n\nexport async function callDaemon(command: string, params?: Record<string, unknown>, options?: CallOptions): Promise<unknown> {\n return cliClient.call(command, params ?? {}, options);\n}\n\nexport const __test__ = {\n deriveTransportTimeoutMs,\n isTransportTimeoutError,\n resolveDaemonRestartCommand,\n resetCachedClientState: (): void => {\n cachedClientState = undefined;\n }\n};\n\ntype DaemonConnection = {\n port: number;\n token: string;\n};\n\ntype DaemonRestartCommand = {\n command: string;\n args: string[];\n};\n\ntype TimeoutBudget = {\n timeoutMs: number;\n deadlineMs: number;\n};\n\ntype ResolveDaemonConnectionOptions = {\n preferConfiguredRecovery?: boolean;\n};\n\ntype ResolveDaemonRestartCommandOptions = {\n argv1?: string;\n execPath?: string;\n execArgv?: string[];\n moduleUrl?: string;\n entryExists?: (path: string) => boolean;\n};\n\nconst TYPESCRIPT_ENTRY_RE = /\\.[cm]?ts$/i;\nconst RESTART_LOADER_ARG_FLAGS = new Set([\"--experimental-loader\", \"--import\", \"--loader\", \"--require\", \"-r\"]);\nconst RESTART_TYPESCRIPT_CONTEXT_ARG_FLAGS = new Set([\"--experimental-strip-types\", \"--experimental-transform-types\"]);\nconst RESTART_DEBUG_ARG_FLAGS = new Set([\"--inspect\", \"--inspect-brk\", \"--inspect-port\", \"--debug\", \"--debug-brk\"]);\n\nconst isInlineRestartArg = (arg: string, flags: Set<string>): boolean => {\n for (const flag of flags) {\n if (arg.startsWith(`${flag}=`)) {\n return true;\n }\n }\n return false;\n};\n\nconst isRestartLoaderArg = (arg: string): boolean => {\n return RESTART_LOADER_ARG_FLAGS.has(arg) || isInlineRestartArg(arg, RESTART_LOADER_ARG_FLAGS);\n};\n\nconst isRestartTypeScriptContextArg = (arg: string): boolean => {\n return RESTART_TYPESCRIPT_CONTEXT_ARG_FLAGS.has(arg)\n || isInlineRestartArg(arg, RESTART_TYPESCRIPT_CONTEXT_ARG_FLAGS);\n};\n\nconst isRestartDebugArg = (arg: string): boolean => {\n return RESTART_DEBUG_ARG_FLAGS.has(arg) || isInlineRestartArg(arg, RESTART_DEBUG_ARG_FLAGS);\n};\n\nconst resolveRestartSplitArgValue = (\n arg: string,\n value: string | undefined\n): string | null => {\n if (arg.includes(\"=\")) return null;\n if (typeof value !== \"string\") return null;\n return value.startsWith(\"-\") ? null : value;\n};\n\nconst resolveRestartExecArgv = (entryPath: string, execArgv: string[]): string[] => {\n const preserved: string[] = [];\n let hasLoaderContext = false;\n for (let index = 0; index < execArgv.length; index += 1) {\n const arg = execArgv[index];\n if (!arg) {\n continue;\n }\n if (isRestartDebugArg(arg)) {\n const next = resolveRestartSplitArgValue(arg, execArgv[index + 1]);\n if (RESTART_DEBUG_ARG_FLAGS.has(arg) && next) {\n index += 1;\n }\n continue;\n }\n preserved.push(arg);\n if (isRestartLoaderArg(arg) || isRestartTypeScriptContextArg(arg)) {\n hasLoaderContext = true;\n }\n const value = resolveRestartSplitArgValue(arg, execArgv[index + 1]);\n if (!value) continue;\n preserved.push(value);\n index += 1;\n }\n return TYPESCRIPT_ENTRY_RE.test(entryPath) && !hasLoaderContext ? [] : preserved;\n};\n\nconst fetchCurrentDaemonStatus = async (\n connection: DaemonConnection,\n options: DaemonStatusFetchOptions,\n budget: TimeoutBudget | null = null\n): Promise<DaemonStatusPayload | null> => {\n const attempts = typeof options.retryAttempts === \"number\" && Number.isFinite(options.retryAttempts) && options.retryAttempts > 1\n ? Math.floor(options.retryAttempts)\n : 1;\n const retryDelayMs = typeof options.retryDelayMs === \"number\" && Number.isFinite(options.retryDelayMs) && options.retryDelayMs > 0\n ? options.retryDelayMs\n : 0;\n\n for (let attempt = 1; attempt <= attempts; attempt += 1) {\n const status = await fetchDaemonStatus(connection.port, connection.token, {\n timeoutMs: capTimeoutToBudget(options.timeoutMs ?? DAEMON_RESTART_STATUS_TIMEOUT_MS, budget)\n });\n if (status?.ok && isCurrentDaemonFingerprint(status.fingerprint)) {\n return status;\n }\n if (attempt < attempts) {\n await sleep(Math.min(retryDelayMs, readRemainingBudgetMs(budget) ?? retryDelayMs));\n }\n }\n\n return null;\n};\n\nconst fetchAnyDaemonStatus = async (\n connection: DaemonConnection,\n options: DaemonStatusFetchOptions,\n budget: TimeoutBudget | null = null\n): Promise<DaemonStatusPayload | null> => {\n const attempts = typeof options.retryAttempts === \"number\" && Number.isFinite(options.retryAttempts) && options.retryAttempts > 1\n ? Math.floor(options.retryAttempts)\n : 1;\n const retryDelayMs = typeof options.retryDelayMs === \"number\" && Number.isFinite(options.retryDelayMs) && options.retryDelayMs > 0\n ? options.retryDelayMs\n : 0;\n\n for (let attempt = 1; attempt <= attempts; attempt += 1) {\n const status = await fetchDaemonStatus(connection.port, connection.token, {\n timeoutMs: capTimeoutToBudget(options.timeoutMs ?? DAEMON_RESTART_STATUS_TIMEOUT_MS, budget)\n });\n if (status?.ok) {\n return status;\n }\n if (attempt < attempts) {\n await sleep(Math.min(retryDelayMs, readRemainingBudgetMs(budget) ?? retryDelayMs));\n }\n }\n\n return null;\n};\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 requiresConfiguredRecovery = (name: string): boolean => {\n return name === \"canvas.execute\" || name === \"inspiredesign.run\";\n};\n\nconst getConfiguredDaemonConnection = (): DaemonConnection | null => {\n const config = loadGlobalConfig();\n if (!(config.daemonPort > 0 && config.daemonToken)) {\n return null;\n }\n return { port: config.daemonPort, token: config.daemonToken };\n};\n\nconst sameDaemonConnection = (left: DaemonConnection, right: DaemonConnection): boolean => {\n return left.port === right.port && left.token === right.token;\n};\n\nconst persistResolvedDaemonStatus = (\n connection: DaemonConnection,\n status: DaemonStatusPayload\n): void => {\n const config = loadGlobalConfig();\n persistDaemonStatusMetadata({\n port: connection.port,\n token: connection.token,\n startedAt: new Date().toISOString(),\n fingerprint: status.fingerprint\n }, status, config);\n};\n\nconst persistCurrentConfiguredConnection = async (\n configuredConnection: DaemonConnection,\n status: DaemonStatusPayload,\n staleMetadata: { connection: DaemonConnection } | null\n): Promise<DaemonConnection> => {\n if (staleMetadata && !sameDaemonConnection(staleMetadata.connection, configuredConnection)) {\n // Once the configured daemon has proven current, stale metadata cleanup must not block the caller.\n void stopDaemonConnection(staleMetadata.connection, null, \"persistCurrentConfiguredConnection.staleMetadata\").catch(() => undefined);\n }\n persistResolvedDaemonStatus(configuredConnection, status);\n return configuredConnection;\n};\n\ntype DaemonShutdownOutcome = \"stopped\" | DaemonStatusPayload;\ntype DaemonStopOutcome = \"stopped\" | \"fingerprint_rejected\" | \"unreachable\";\n\nconst resolveConfiguredPreferenceOptions = (\n budget: TimeoutBudget | null\n): DaemonStatusFetchOptions | null => {\n if (!budget) {\n return DAEMON_CONFIG_PREFER_OPTIONS;\n }\n const remainingMs = readRemainingBudgetMs(budget);\n if (remainingMs === undefined || remainingMs <= 1) {\n return null;\n }\n const timeoutMs = Math.min(DAEMON_CONFIG_PREFER_OPTIONS.timeoutMs ?? remainingMs, remainingMs);\n const retryDelayMs = Math.max(0, DAEMON_CONFIG_PREFER_OPTIONS.retryDelayMs ?? 0);\n const maxAttempts = Math.max(1, DAEMON_CONFIG_PREFER_OPTIONS.retryAttempts ?? 1);\n let retryAttempts = 1;\n while (retryAttempts < maxAttempts) {\n const nextAttempts = retryAttempts + 1;\n const nextWorstCaseMs = (nextAttempts * timeoutMs) + ((nextAttempts - 1) * retryDelayMs);\n if (nextWorstCaseMs > remainingMs) {\n break;\n }\n retryAttempts = nextAttempts;\n }\n return {\n timeoutMs,\n retryAttempts,\n retryDelayMs: retryAttempts > 1 ? retryDelayMs : 0\n };\n};\n\nconst stopDaemonConnection = async (\n connection: DaemonConnection,\n budget: TimeoutBudget | null = null,\n reason = \"unknown\"\n): Promise<DaemonStopOutcome> => {\n const stopTimeoutMs = capTimeoutToBudget(DAEMON_RESTART_STATUS_TIMEOUT_MS, budget);\n logDaemonStopDebug(\"client.stop.request\", { reason, port: connection.port });\n try {\n const response = await fetchWithTimeout(`http://127.0.0.1:${connection.port}/stop`, {\n method: \"POST\",\n headers: createDaemonStopHeaders(connection.token, reason)\n }, stopTimeoutMs);\n if (response.status === 409) {\n logDaemonStopDebug(\"client.stop.fingerprintRejected\", { reason, port: connection.port });\n return \"fingerprint_rejected\";\n }\n if (!response.ok) {\n logDaemonStopDebug(\"client.stop.rejected\", { reason, port: connection.port, status: response.status });\n return \"unreachable\";\n }\n logDaemonStopDebug(\"client.stop.complete\", { reason, port: connection.port });\n return \"stopped\";\n } catch {\n logDaemonStopDebug(\"client.stop.error\", { reason, port: connection.port });\n return \"unreachable\";\n }\n};\n\nfunction resolveDaemonRestartCommand(\n options: ResolveDaemonRestartCommandOptions = {}\n): DaemonRestartCommand {\n const execPath = options.execPath ?? process.execPath;\n const execArgv = options.execArgv ?? process.execArgv;\n const moduleUrl = options.moduleUrl ?? import.meta.url;\n const argv1 = options.argv1 ?? process.argv[1];\n const entryPath = resolveCurrentDaemonEntrypointPath({\n argv1,\n moduleUrl,\n entryExists: options.entryExists ?? existsSync\n });\n if (!(typeof argv1 === \"string\" && argv1.trim().length > 0)) {\n const modulePath = resolve(fileURLToPath(moduleUrl));\n if (entryPath === modulePath) {\n throw createDisconnectedError(\"Daemon restart requires a stable CLI entrypoint. Start with `opendevbrowser serve`.\");\n }\n }\n const restartExecArgv = resolveRestartExecArgv(entryPath, execArgv);\n if (TYPESCRIPT_ENTRY_RE.test(entryPath) && restartExecArgv.length === 0) {\n throw createDisconnectedError(\"Daemon restart requires the original loader context. Start with `opendevbrowser serve`.\");\n }\n return {\n command: execPath,\n args: [...restartExecArgv, entryPath]\n };\n}\n\nconst restartDaemonConnection = async (connection: DaemonConnection): Promise<void> => {\n const restart = resolveDaemonRestartCommand();\n const child = spawn(restart.command, [\n ...restart.args,\n \"serve\",\n \"--port\",\n String(connection.port),\n \"--token\",\n connection.token,\n \"--output-format\",\n \"json\"\n ], {\n detached: true,\n stdio: \"ignore\"\n });\n child.unref();\n};\n\nconst waitForCurrentDaemonStatus = async (\n connection: DaemonConnection,\n readyTimeoutMs = DAEMON_RESTART_READY_TIMEOUT_MS,\n budget: TimeoutBudget | null = null\n): Promise<DaemonStatusPayload | null> => {\n const deadline = resolveReadyDeadlineMs(readyTimeoutMs, budget);\n while (true) {\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) {\n if (hasBudgetTimedOut(budget, deadline)) {\n throw createTransportTimeoutError(budget!.timeoutMs);\n }\n return null;\n }\n const status = await fetchDaemonStatus(connection.port, connection.token, {\n timeoutMs: Math.min(DAEMON_RESTART_STATUS_TIMEOUT_MS, remainingMs)\n });\n if (status?.ok && isCurrentDaemonFingerprint(status.fingerprint)) {\n return status;\n }\n if (Date.now() >= deadline) {\n return null;\n }\n await sleep(Math.min(DAEMON_RESTART_POLL_DELAY_MS, Math.max(0, deadline - Date.now())));\n }\n};\n\nconst waitForDaemonShutdown = async (\n connection: DaemonConnection,\n readyTimeoutMs = DAEMON_RECOVERY_READY_TIMEOUT_MS,\n budget: TimeoutBudget | null = null\n): Promise<DaemonShutdownOutcome | null> => {\n const deadline = resolveReadyDeadlineMs(readyTimeoutMs, budget);\n while (true) {\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) {\n if (hasBudgetTimedOut(budget, deadline)) {\n throw createTransportTimeoutError(budget!.timeoutMs);\n }\n return null;\n }\n const status = await fetchDaemonStatus(connection.port, connection.token, {\n timeoutMs: Math.min(DAEMON_RESTART_STATUS_TIMEOUT_MS, remainingMs)\n });\n if (!status?.ok) {\n return \"stopped\";\n }\n if (isCurrentDaemonFingerprint(status.fingerprint)) {\n return status;\n }\n if (Date.now() >= deadline) {\n return null;\n }\n await sleep(Math.min(DAEMON_RESTART_POLL_DELAY_MS, Math.max(0, deadline - Date.now())));\n }\n};\n\nconst resolveMetadataConnection = async (\n metadataConnection: DaemonConnection,\n configuredConnection: DaemonConnection,\n budget: TimeoutBudget | null = null\n): Promise<{ connection: DaemonConnection; status: DaemonStatusPayload } | null> => {\n const status = await fetchAnyDaemonStatus(metadataConnection, DAEMON_STATUS_RETRY_OPTIONS, budget);\n if (!status?.ok) {\n return null;\n }\n if (isCurrentDaemonFingerprint(status.fingerprint)) {\n persistResolvedDaemonStatus(metadataConnection, status);\n return { connection: metadataConnection, status };\n }\n if (sameDaemonConnection(metadataConnection, configuredConnection)) {\n return null;\n }\n return { connection: metadataConnection, status };\n};\n\nconst resolveFreshDaemonConnection = async (\n budget: TimeoutBudget | null = null,\n options: ResolveDaemonConnectionOptions = {}\n): Promise<DaemonConnection> => {\n const configuredConnection = getConfiguredDaemonConnection();\n if (!configuredConnection) {\n throw createDisconnectedError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n\n const configuredStatus = await fetchAnyDaemonStatus(configuredConnection, DAEMON_STATUS_RETRY_OPTIONS, budget);\n\n let currentConfiguredStatus =\n configuredStatus?.ok && isCurrentDaemonFingerprint(configuredStatus.fingerprint)\n ? configuredStatus\n : null;\n\n const metadata = readDaemonMetadata();\n const metadataConnection = metadata\n ? { port: metadata.port, token: metadata.token }\n : null;\n const staleMetadata = metadataConnection\n ? await resolveMetadataConnection(metadataConnection, configuredConnection, budget)\n : null;\n if (currentConfiguredStatus?.ok) {\n return await persistCurrentConfiguredConnection(configuredConnection, currentConfiguredStatus, staleMetadata);\n }\n if (options.preferConfiguredRecovery && staleMetadata) {\n currentConfiguredStatus = await waitForCurrentDaemonStatus(\n configuredConnection,\n DAEMON_RECOVERY_READY_TIMEOUT_MS,\n budget\n );\n if (currentConfiguredStatus?.ok) {\n return await persistCurrentConfiguredConnection(configuredConnection, currentConfiguredStatus, staleMetadata);\n }\n if (!configuredStatus?.ok) {\n throw createDisconnectedError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n }\n if (\n !options.preferConfiguredRecovery\n && staleMetadata?.status.ok\n && isCurrentDaemonFingerprint(staleMetadata.status.fingerprint)\n ) {\n if (configuredStatus?.ok) {\n void stopDaemonConnection(configuredConnection, budget, \"resolveFreshDaemonConnection.configuredCurrentMetadataPreferred\").catch(() => undefined);\n }\n return staleMetadata.connection;\n }\n if (!configuredStatus?.ok && staleMetadata) {\n currentConfiguredStatus = await waitForCurrentDaemonStatus(\n configuredConnection,\n DAEMON_RECOVERY_READY_TIMEOUT_MS,\n budget\n );\n if (currentConfiguredStatus?.ok) {\n return await persistCurrentConfiguredConnection(configuredConnection, currentConfiguredStatus, staleMetadata);\n }\n throw createDisconnectedError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n\n const staleConnections: Array<{ connection: DaemonConnection; status: DaemonStatusPayload }> = [];\n if (configuredStatus?.ok) {\n staleConnections.push({ connection: configuredConnection, status: configuredStatus });\n }\n if (staleConnections.length === 0) {\n const recoveringStatus = await waitForCurrentDaemonStatus(\n configuredConnection,\n DAEMON_RECOVERY_READY_TIMEOUT_MS,\n budget\n );\n if (recoveringStatus?.ok) {\n persistResolvedDaemonStatus(configuredConnection, recoveringStatus);\n return configuredConnection;\n }\n throw createDisconnectedError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n for (const staleConnection of staleConnections) {\n const stopOutcome = await stopDaemonConnection(\n staleConnection.connection,\n budget,\n \"resolveFreshDaemonConnection.staleConnections\"\n );\n if (stopOutcome === \"fingerprint_rejected\") {\n throw createDisconnectedError(\n buildDaemonFingerprintMismatchMessage({\n label: \"Daemon\",\n port: staleConnection.connection.port,\n pid: staleConnection.status.pid\n }),\n DAEMON_FINGERPRINT_MISMATCH_REASON\n );\n }\n }\n if (configuredStatus?.ok) {\n const shutdownOutcome = await waitForDaemonShutdown(configuredConnection, DAEMON_RECOVERY_READY_TIMEOUT_MS, budget);\n if (!shutdownOutcome) {\n throw createDisconnectedError(\"Daemon restart could not reclaim the configured port after fingerprint mismatch. Start with `opendevbrowser serve`.\");\n }\n if (shutdownOutcome !== \"stopped\") {\n persistResolvedDaemonStatus(configuredConnection, shutdownOutcome);\n return configuredConnection;\n }\n }\n await restartDaemonConnection(configuredConnection);\n const refreshedStatus = await waitForCurrentDaemonStatus(configuredConnection, DAEMON_RESTART_READY_TIMEOUT_MS, budget);\n if (!refreshedStatus?.ok) {\n throw createDisconnectedError(\"Daemon restart failed after fingerprint mismatch. Start with `opendevbrowser serve`.\");\n }\n persistResolvedDaemonStatus(configuredConnection, refreshedStatus);\n return configuredConnection;\n};\n\nconst resolveDaemonConnection = async (\n budget: TimeoutBudget | null = null,\n options: ResolveDaemonConnectionOptions = {}\n): Promise<DaemonConnection> => {\n const metadata = readDaemonMetadata();\n if (metadata && isCurrentDaemonFingerprint(metadata.fingerprint)) {\n const metadataConnection = { port: metadata.port, token: metadata.token };\n const configuredConnection = getConfiguredDaemonConnection();\n if (!configuredConnection || sameDaemonConnection(metadataConnection, configuredConnection)) {\n return metadataConnection;\n }\n const configuredOptions = resolveConfiguredPreferenceOptions(budget);\n if (!configuredOptions) {\n if (options.preferConfiguredRecovery) {\n return await resolveFreshDaemonConnection(budget, options);\n }\n return metadataConnection;\n }\n const configuredStatus = await fetchCurrentDaemonStatus(configuredConnection, configuredOptions, budget);\n if (configuredStatus?.ok) {\n return await persistCurrentConfiguredConnection(\n configuredConnection,\n configuredStatus,\n { connection: metadataConnection }\n );\n }\n if (options.preferConfiguredRecovery) {\n return await resolveFreshDaemonConnection(budget, options);\n }\n return metadataConnection;\n }\n return await resolveFreshDaemonConnection(budget, options);\n};\n\nconst retryWithRefreshedConnection = async (\n name: string,\n params: Record<string, unknown>,\n budget: TimeoutBudget | null\n): Promise<TimedFetchResponse> => {\n const connection = await resolveFreshDaemonConnection(budget, {\n preferConfiguredRecovery: requiresConfiguredRecovery(name)\n });\n return await openDaemonCommand(connection.port, connection.token, name, params, readRemainingBudgetMs(budget));\n};\n\nconst openDaemonCommand = async (\n port: number,\n token: string,\n name: string,\n params: Record<string, unknown>,\n timeoutMs?: number\n): Promise<TimedFetchResponse> => {\n return await fetchWithTimeoutContext(`http://127.0.0.1:${port}/command`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`\n },\n body: JSON.stringify({ name, params })\n }, timeoutMs);\n};\n\nconst readDaemonErrorMessage = async (timedResponse: TimedFetchResponse): Promise<string> => {\n const text = await readResponseTextWithTimeout(\n timedResponse.response,\n timedResponse.signal,\n timedResponse.timeoutMs\n );\n let message = text || String(timedResponse.response.status);\n try {\n const parsed = JSON.parse(text) as Record<string, unknown> | null;\n if (parsed && typeof parsed === \"object\") {\n if (typeof parsed.error === \"string\" && parsed.error.trim()) {\n message = parsed.error;\n } else if (typeof parsed.message === \"string\" && parsed.message.trim()) {\n message = parsed.message;\n }\n }\n } catch {\n // Ignore JSON parse errors; fall back to raw text/status.\n }\n return message;\n};\n"],"mappings":"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","names":["sessionId","resolve"]}
1
+ {"version":3,"sources":["../src/cli/daemon-client.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { join, resolve } from \"path\";\nimport { randomUUID } from \"crypto\";\nimport { fileURLToPath } from \"url\";\nimport {\n DAEMON_STOP_DEBUG_ENV,\n createDaemonStopHeaders,\n getCacheRoot,\n isCurrentDaemonFingerprint,\n readDaemonMetadata,\n resolveCurrentDaemonEntrypointPath\n} from \"./daemon\";\nimport { CliError, createDisconnectedError, EXIT_EXECUTION } from \"./errors\";\nimport { writeFileAtomic } from \"../utils/fs\";\nimport { loadGlobalConfig } from \"../config\";\nimport {\n fetchDaemonStatus,\n persistDaemonStatusMetadata,\n type DaemonStatusFetchOptions,\n type DaemonStatusPayload\n} from \"./daemon-status\";\nimport {\n buildDaemonFingerprintMismatchMessage,\n DAEMON_FINGERPRINT_MISMATCH_REASON\n} from \"./daemon-mismatch\";\nimport {\n fetchWithTimeout,\n fetchWithTimeoutContext,\n readResponseJsonWithTimeout,\n readResponseTextWithTimeout,\n type TimedFetchResponse\n} from \"./utils/http\";\n\nconst CLIENT_ID_FILE = \"client.json\";\nconst DEFAULT_RENEW_AFTER_MS = 20_000;\nconst MIN_RENEW_AFTER_MS = 5_000;\nconst TRANSPORT_TIMEOUT_BUFFER_MS = 5_000;\nconst MAX_DERIVED_TRANSPORT_TIMEOUT_MS = 600_000;\nconst TRANSPORT_TIMEOUT_HINT_KEYS = [\"timeoutMs\", \"waitTimeoutMs\"] as const;\nconst DAEMON_STATUS_RETRY_OPTIONS: DaemonStatusFetchOptions = {\n retryAttempts: 5,\n retryDelayMs: 250\n};\nconst DAEMON_CONFIG_PREFER_OPTIONS: DaemonStatusFetchOptions = {\n timeoutMs: 500,\n retryAttempts: 3,\n retryDelayMs: 250\n};\nconst DAEMON_RESTART_STATUS_TIMEOUT_MS = 5_000;\nconst DAEMON_RECOVERY_READY_TIMEOUT_MS = 5_000;\nconst DAEMON_RESTART_READY_TIMEOUT_MS = 15_000;\nconst DAEMON_RESTART_POLL_DELAY_MS = 250;\n\ntype DaemonResponse<T> = { ok?: boolean; data?: T; error?: string };\n\ntype BindingConfig = {\n ttlMs: number;\n renewIntervalMs: number;\n graceMs: number;\n waitMaxMs: number;\n};\n\ntype BindingResponse = {\n bindingId: string;\n expiresAt: string;\n ttlMs?: number;\n renewAfterMs?: number;\n};\n\ntype QueueResponse = {\n queued: true;\n position: number;\n waitUntil: string;\n waitMs?: number;\n};\n\ntype RelayBindResponse = (BindingResponse | QueueResponse) & {\n hubInstanceId?: string;\n relayInstanceId?: string;\n relayPort?: number | null;\n bindingConfig?: BindingConfig;\n};\n\ntype BindingState = {\n bindingId: string;\n expiresAtMs: number;\n renewAfterMs: number;\n};\n\ntype CachedBindingState = {\n bindingId: string;\n expiresAt: string;\n renewAfterMs?: number;\n};\n\ntype CachedClientState = {\n clientId: string;\n createdAt: string;\n binding?: CachedBindingState;\n};\n\ntype CallOptions = {\n requireBinding?: boolean;\n timeoutMs?: number;\n};\n\nlet cachedClientState: CachedClientState | null | undefined;\n\nconst 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\nconst getClientStateFilePath = (): string => {\n const cacheRoot = getCacheRoot();\n return join(cacheRoot, CLIENT_ID_FILE);\n};\n\nconst readCachedClientState = (): CachedClientState | null => {\n if (cachedClientState !== undefined) {\n return cachedClientState;\n }\n\n const filePath = getClientStateFilePath();\n if (existsSync(filePath)) {\n try {\n const content = readFileSync(filePath, \"utf-8\");\n const parsed = JSON.parse(content) as {\n clientId?: unknown;\n createdAt?: unknown;\n binding?: unknown;\n };\n if (typeof parsed.clientId === \"string\" && parsed.clientId.trim()) {\n cachedClientState = {\n clientId: parsed.clientId.trim(),\n createdAt: typeof parsed.createdAt === \"string\" && parsed.createdAt.trim()\n ? parsed.createdAt\n : new Date().toISOString(),\n ...(parsed.binding && typeof parsed.binding === \"object\"\n ? { binding: parsed.binding as CachedBindingState }\n : {})\n };\n return cachedClientState;\n }\n } catch {\n // fallthrough to regenerate\n }\n }\n\n cachedClientState = null;\n return cachedClientState;\n};\n\nconst writeCachedClientState = (state: CachedClientState): void => {\n const filePath = getClientStateFilePath();\n writeFileAtomic(filePath, JSON.stringify(state, null, 2), { mode: 0o600 });\n cachedClientState = state;\n};\n\nconst loadClientState = (): CachedClientState => {\n const existing = readCachedClientState();\n if (existing) {\n return existing;\n }\n\n const state = {\n clientId: randomUUID(),\n createdAt: new Date().toISOString()\n };\n writeCachedClientState(state);\n return state;\n};\n\nconst parseBindingResponse = (data: BindingResponse): BindingState => {\n const expiresAtMs = Date.parse(data.expiresAt);\n if (!Number.isFinite(expiresAtMs)) {\n throw new Error(\"Invalid binding expiry timestamp\");\n }\n const renewAfterMs = Math.max(\n MIN_RENEW_AFTER_MS,\n typeof data.renewAfterMs === \"number\" && Number.isFinite(data.renewAfterMs)\n ? data.renewAfterMs\n : DEFAULT_RENEW_AFTER_MS\n );\n return {\n bindingId: data.bindingId,\n expiresAtMs,\n renewAfterMs\n };\n};\n\nconst serializeBindingState = (binding: BindingState): CachedBindingState => ({\n bindingId: binding.bindingId,\n expiresAt: new Date(binding.expiresAtMs).toISOString(),\n renewAfterMs: binding.renewAfterMs\n});\n\nconst updateCachedBindingState = (clientId: string, binding: BindingState | null): void => {\n const current = loadClientState();\n const base: CachedClientState = current.clientId === clientId\n ? current\n : { clientId, createdAt: new Date().toISOString() };\n if (binding) {\n writeCachedClientState({\n ...base,\n binding: serializeBindingState(binding)\n });\n return;\n }\n writeCachedClientState({\n clientId: base.clientId,\n createdAt: base.createdAt\n });\n};\n\nconst isBindingRequiredError = (error: unknown): boolean => {\n const message = error instanceof Error ? error.message : String(error ?? \"\");\n return message.startsWith(\"RELAY_BINDING_REQUIRED\") || message.startsWith(\"RELAY_BINDING_INVALID\");\n};\n\nconst isLeaseInvalidError = (error: unknown): boolean => {\n const message = error instanceof Error ? error.message : String(error ?? \"\");\n return message.startsWith(\"RELAY_LEASE_INVALID\");\n};\n\nconst isTransportTimeoutError = (error: unknown): boolean => {\n const message = error instanceof Error ? error.message : String(error ?? \"\");\n return message.startsWith(\"Request timed out after \");\n};\n\nexport class DaemonClient {\n private binding: BindingState | null = null;\n private renewTimer: NodeJS.Timeout | null = null;\n private readonly clientId: string;\n private readonly autoRenew: boolean;\n private bindingAcquiredInProcess = false;\n private sessionLeases = new Map<string, string>();\n\n constructor(options: { clientId?: string; autoRenew?: boolean } = {}) {\n const cachedState = loadClientState();\n this.clientId = options.clientId ?? cachedState.clientId;\n this.autoRenew = options.autoRenew ?? false;\n if (cachedState.clientId === this.clientId && cachedState.binding) {\n try {\n this.setBinding(parseBindingResponse(cachedState.binding), { acquiredInProcess: false });\n } catch {\n updateCachedBindingState(this.clientId, null);\n }\n }\n }\n\n async call<T>(name: string, params: Record<string, unknown> = {}, options: CallOptions = {}): Promise<T> {\n try {\n const result = await this.callWithBinding<T>(name, params, options);\n this.maybeTrackLease(name, params, result);\n return result;\n } catch (error) {\n const sessionId = typeof params.sessionId === \"string\" ? params.sessionId : undefined;\n if (sessionId && !(\"leaseId\" in params) && isLeaseInvalidError(error) && this.sessionLeases.has(sessionId)) {\n this.sessionLeases.delete(sessionId);\n const result = await this.callWithBinding<T>(name, params, options);\n this.maybeTrackLease(name, params, result);\n return result;\n }\n if (isBindingRequiredError(error)) {\n if (this.binding) {\n this.clearBinding();\n }\n await this.ensureBinding();\n const result = await this.callWithBinding<T>(name, params, { ...options, requireBinding: true });\n this.maybeTrackLease(name, params, result);\n return result;\n }\n throw error;\n }\n }\n\n async releaseBinding(): Promise<void> {\n if (!this.binding) return;\n if (!this.bindingAcquiredInProcess) {\n this.clearBinding({ persist: false });\n return;\n }\n const bindingId = this.binding.bindingId;\n try {\n await this.callRaw(\"relay.release\", { clientId: this.clientId, bindingId });\n } finally {\n this.clearBinding();\n }\n }\n\n private async callWithBinding<T>(name: string, params: Record<string, unknown>, options: CallOptions): Promise<T> {\n const requireBinding = options.requireBinding ?? false;\n const bindingId = requireBinding ? await this.ensureBinding() : this.binding?.bindingId;\n const sessionId = typeof params.sessionId === \"string\" ? params.sessionId : undefined;\n const leaseId = sessionId ? this.sessionLeases.get(sessionId) : undefined;\n const payload = {\n ...params,\n clientId: this.clientId,\n ...(bindingId ? { bindingId } : {}),\n ...(leaseId ? { leaseId } : {})\n };\n return await this.callRaw<T>(name, payload, deriveTransportTimeoutMs(params, options.timeoutMs));\n }\n\n private maybeTrackLease<T>(name: string, params: Record<string, unknown>, result: T): void {\n if (name === \"session.disconnect\") {\n const sessionId = typeof params.sessionId === \"string\" ? params.sessionId : undefined;\n if (sessionId) {\n this.sessionLeases.delete(sessionId);\n }\n if (result && typeof result === \"object\" && (result as Record<string, unknown>).bindingReleased === true) {\n this.clearBinding();\n }\n return;\n }\n if (name !== \"session.launch\" && name !== \"session.connect\") return;\n if (!result || typeof result !== \"object\") return;\n const record = result as Record<string, unknown>;\n const sessionId = record.sessionId;\n const leaseId = record.leaseId;\n if (typeof sessionId === \"string\" && typeof leaseId === \"string\") {\n this.sessionLeases.set(sessionId, leaseId);\n }\n }\n\n private async ensureBinding(): Promise<string> {\n if (this.binding && Date.now() < this.binding.expiresAtMs - MIN_RENEW_AFTER_MS) {\n return this.binding.bindingId;\n }\n const data = await this.callRaw<RelayBindResponse>(\"relay.bind\", { clientId: this.clientId });\n const state = await this.resolveBindingState(data);\n this.setBinding(state, { acquiredInProcess: true });\n return state.bindingId;\n }\n\n private async resolveBindingState(data: RelayBindResponse): Promise<BindingState> {\n if (\"queued\" in data && data.queued) {\n const waitMs = typeof data.waitMs === \"number\" && Number.isFinite(data.waitMs) ? data.waitMs : null;\n const timeoutMs = waitMs ? Math.max(1000, waitMs) : data.bindingConfig?.waitMaxMs;\n const waitResponse = await this.callRaw<RelayBindResponse>(\"relay.wait\", {\n clientId: this.clientId,\n ...(timeoutMs ? { timeoutMs } : {})\n });\n if (\"queued\" in waitResponse && waitResponse.queued) {\n throw new Error(\"RELAY_WAIT_TIMEOUT: Timed out waiting for relay binding.\");\n }\n return parseBindingResponse(waitResponse as BindingResponse);\n }\n return parseBindingResponse(data as BindingResponse);\n }\n\n private async renewBinding(): Promise<void> {\n if (!this.binding) return;\n const data = await this.callRaw<BindingResponse>(\"relay.renew\", {\n clientId: this.clientId,\n bindingId: this.binding.bindingId\n });\n this.setBinding(parseBindingResponse(data), { acquiredInProcess: this.bindingAcquiredInProcess });\n }\n\n private setBinding(state: BindingState, options: { acquiredInProcess?: boolean } = {}): void {\n this.binding = state;\n if (options.acquiredInProcess !== undefined) {\n this.bindingAcquiredInProcess = options.acquiredInProcess;\n }\n updateCachedBindingState(this.clientId, state);\n if (this.autoRenew) {\n this.scheduleRenew(resolveRenewDelayMs(state));\n }\n }\n\n private scheduleRenew(delayMs: number): void {\n if (!this.autoRenew) return;\n this.clearRenewTimer();\n this.renewTimer = setTimeout(() => {\n this.renewTimer = null;\n this.renewBinding().catch(() => this.clearBinding());\n }, delayMs);\n }\n\n private clearBinding(options: { persist?: boolean } = {}): void {\n this.binding = null;\n this.bindingAcquiredInProcess = false;\n if (options.persist !== false) {\n updateCachedBindingState(this.clientId, null);\n }\n this.clearRenewTimer();\n }\n\n private clearRenewTimer(): void {\n if (this.renewTimer) {\n clearTimeout(this.renewTimer);\n this.renewTimer = null;\n }\n }\n\n private async callRaw<T>(name: string, params: Record<string, unknown>, timeoutMs?: number): Promise<T> {\n const budget = createTimeoutBudget(timeoutMs);\n const connection = await resolveDaemonConnection(budget, {\n preferConfiguredRecovery: requiresConfiguredRecovery(name)\n });\n\n let timedResponse: TimedFetchResponse;\n try {\n timedResponse = await openDaemonCommand(\n connection.port,\n connection.token,\n name,\n params,\n readRemainingBudgetMs(budget)\n );\n } catch (error) {\n if (isTransportTimeoutError(error)) {\n throw error;\n }\n timedResponse = await retryWithRefreshedConnection(name, params, budget);\n }\n\n try {\n if (!timedResponse.response.ok) {\n const message = await readDaemonErrorMessage(timedResponse);\n if (message.includes(\"Unauthorized\") || timedResponse.response.status === 401) {\n timedResponse.dispose();\n timedResponse = await retryWithRefreshedConnection(name, params, budget);\n if (!timedResponse.response.ok) {\n throw new CliError(await readDaemonErrorMessage(timedResponse), EXIT_EXECUTION);\n }\n } else {\n throw new CliError(message, EXIT_EXECUTION);\n }\n }\n\n const payload = await readResponseJsonWithTimeout<DaemonResponse<T>>(\n timedResponse.response,\n timedResponse.signal,\n timedResponse.timeoutMs\n );\n if (!payload.ok) {\n throw new CliError(payload.error || \"Daemon command failed.\", EXIT_EXECUTION);\n }\n\n return payload.data as T;\n } finally {\n timedResponse.dispose();\n }\n }\n}\n\nconst asPositiveNumber = (value: unknown): number | undefined => {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0 ? value : undefined;\n};\n\nconst createTransportTimeoutError = (timeoutMs: number): Error => {\n return new Error(`Request timed out after ${timeoutMs}ms`);\n};\n\nconst createTimeoutBudget = (timeoutMs?: number): TimeoutBudget | null => {\n const resolved = asPositiveNumber(timeoutMs);\n return resolved === undefined\n ? null\n : { timeoutMs: resolved, deadlineMs: Date.now() + resolved };\n};\n\nconst readRemainingBudgetMs = (budget: TimeoutBudget | null): number | undefined => {\n if (!budget) {\n return undefined;\n }\n const remainingMs = budget.deadlineMs - Date.now();\n if (remainingMs <= 0) {\n throw createTransportTimeoutError(budget.timeoutMs);\n }\n return remainingMs;\n};\n\nconst capTimeoutToBudget = (\n timeoutMs: number,\n budget: TimeoutBudget | null\n): number => {\n const remainingMs = readRemainingBudgetMs(budget);\n return remainingMs === undefined\n ? timeoutMs\n : Math.max(1, Math.min(timeoutMs, remainingMs));\n};\n\nconst resolveReadyDeadlineMs = (\n readyTimeoutMs: number,\n budget: TimeoutBudget | null\n): number => {\n const localDeadlineMs = Date.now() + readyTimeoutMs;\n return budget ? Math.min(localDeadlineMs, budget.deadlineMs) : localDeadlineMs;\n};\n\nconst hasBudgetTimedOut = (\n budget: TimeoutBudget | null,\n deadlineMs: number\n): boolean => {\n if (!budget) {\n return false;\n }\n return deadlineMs >= budget.deadlineMs && Date.now() >= budget.deadlineMs;\n};\n\nconst deriveTransportTimeoutMs = (\n params: Record<string, unknown>,\n explicitTimeoutMs?: number\n): number | undefined => {\n const explicit = asPositiveNumber(explicitTimeoutMs);\n if (explicit !== undefined) {\n return explicit;\n }\n for (const key of TRANSPORT_TIMEOUT_HINT_KEYS) {\n const value = asPositiveNumber(params[key]);\n if (value !== undefined) {\n return Math.min(value + TRANSPORT_TIMEOUT_BUFFER_MS, MAX_DERIVED_TRANSPORT_TIMEOUT_MS);\n }\n }\n return undefined;\n};\n\nconst resolveRenewDelayMs = (binding: BindingState): number => {\n const remainingMs = Math.max(0, binding.expiresAtMs - Date.now() - MIN_RENEW_AFTER_MS);\n return Math.max(0, Math.min(binding.renewAfterMs, remainingMs));\n};\n\nconst cliClient = new DaemonClient({ autoRenew: false });\n\nexport async function callDaemon(command: string, params?: Record<string, unknown>, options?: CallOptions): Promise<unknown> {\n return cliClient.call(command, params ?? {}, options);\n}\n\nexport const __test__ = {\n deriveTransportTimeoutMs,\n isTransportTimeoutError,\n resolveDaemonRestartCommand,\n resetCachedClientState: (): void => {\n cachedClientState = undefined;\n }\n};\n\ntype DaemonConnection = {\n port: number;\n token: string;\n};\n\ntype DaemonRestartCommand = {\n command: string;\n args: string[];\n};\n\ntype TimeoutBudget = {\n timeoutMs: number;\n deadlineMs: number;\n};\n\ntype ResolveDaemonConnectionOptions = {\n preferConfiguredRecovery?: boolean;\n};\n\ntype ResolveDaemonRestartCommandOptions = {\n argv1?: string;\n execPath?: string;\n execArgv?: string[];\n moduleUrl?: string;\n entryExists?: (path: string) => boolean;\n};\n\nconst TYPESCRIPT_ENTRY_RE = /\\.[cm]?ts$/i;\nconst RESTART_LOADER_ARG_FLAGS = new Set([\"--experimental-loader\", \"--import\", \"--loader\", \"--require\", \"-r\"]);\nconst RESTART_TYPESCRIPT_CONTEXT_ARG_FLAGS = new Set([\"--experimental-strip-types\", \"--experimental-transform-types\"]);\nconst RESTART_DEBUG_ARG_FLAGS = new Set([\"--inspect\", \"--inspect-brk\", \"--inspect-port\", \"--debug\", \"--debug-brk\"]);\n\nconst isInlineRestartArg = (arg: string, flags: Set<string>): boolean => {\n for (const flag of flags) {\n if (arg.startsWith(`${flag}=`)) {\n return true;\n }\n }\n return false;\n};\n\nconst isRestartLoaderArg = (arg: string): boolean => {\n return RESTART_LOADER_ARG_FLAGS.has(arg) || isInlineRestartArg(arg, RESTART_LOADER_ARG_FLAGS);\n};\n\nconst isRestartTypeScriptContextArg = (arg: string): boolean => {\n return RESTART_TYPESCRIPT_CONTEXT_ARG_FLAGS.has(arg)\n || isInlineRestartArg(arg, RESTART_TYPESCRIPT_CONTEXT_ARG_FLAGS);\n};\n\nconst isRestartDebugArg = (arg: string): boolean => {\n return RESTART_DEBUG_ARG_FLAGS.has(arg) || isInlineRestartArg(arg, RESTART_DEBUG_ARG_FLAGS);\n};\n\nconst resolveRestartSplitArgValue = (\n arg: string,\n value: string | undefined\n): string | null => {\n if (arg.includes(\"=\")) return null;\n if (typeof value !== \"string\") return null;\n return value.startsWith(\"-\") ? null : value;\n};\n\nconst resolveRestartExecArgv = (entryPath: string, execArgv: string[]): string[] => {\n const preserved: string[] = [];\n let hasLoaderContext = false;\n for (let index = 0; index < execArgv.length; index += 1) {\n const arg = execArgv[index];\n if (!arg) {\n continue;\n }\n if (isRestartDebugArg(arg)) {\n const next = resolveRestartSplitArgValue(arg, execArgv[index + 1]);\n if (RESTART_DEBUG_ARG_FLAGS.has(arg) && next) {\n index += 1;\n }\n continue;\n }\n preserved.push(arg);\n if (isRestartLoaderArg(arg) || isRestartTypeScriptContextArg(arg)) {\n hasLoaderContext = true;\n }\n const value = resolveRestartSplitArgValue(arg, execArgv[index + 1]);\n if (!value) continue;\n preserved.push(value);\n index += 1;\n }\n return TYPESCRIPT_ENTRY_RE.test(entryPath) && !hasLoaderContext ? [] : preserved;\n};\n\nconst fetchCurrentDaemonStatus = async (\n connection: DaemonConnection,\n options: DaemonStatusFetchOptions,\n budget: TimeoutBudget | null = null\n): Promise<DaemonStatusPayload | null> => {\n const attempts = typeof options.retryAttempts === \"number\" && Number.isFinite(options.retryAttempts) && options.retryAttempts > 1\n ? Math.floor(options.retryAttempts)\n : 1;\n const retryDelayMs = typeof options.retryDelayMs === \"number\" && Number.isFinite(options.retryDelayMs) && options.retryDelayMs > 0\n ? options.retryDelayMs\n : 0;\n\n for (let attempt = 1; attempt <= attempts; attempt += 1) {\n const status = await fetchDaemonStatus(connection.port, connection.token, {\n timeoutMs: capTimeoutToBudget(options.timeoutMs ?? DAEMON_RESTART_STATUS_TIMEOUT_MS, budget)\n });\n if (status?.ok && isCurrentDaemonFingerprint(status.fingerprint)) {\n return status;\n }\n if (attempt < attempts) {\n await sleep(Math.min(retryDelayMs, readRemainingBudgetMs(budget) ?? retryDelayMs));\n }\n }\n\n return null;\n};\n\nconst fetchAnyDaemonStatus = async (\n connection: DaemonConnection,\n options: DaemonStatusFetchOptions,\n budget: TimeoutBudget | null = null\n): Promise<DaemonStatusPayload | null> => {\n const attempts = typeof options.retryAttempts === \"number\" && Number.isFinite(options.retryAttempts) && options.retryAttempts > 1\n ? Math.floor(options.retryAttempts)\n : 1;\n const retryDelayMs = typeof options.retryDelayMs === \"number\" && Number.isFinite(options.retryDelayMs) && options.retryDelayMs > 0\n ? options.retryDelayMs\n : 0;\n\n for (let attempt = 1; attempt <= attempts; attempt += 1) {\n const status = await fetchDaemonStatus(connection.port, connection.token, {\n timeoutMs: capTimeoutToBudget(options.timeoutMs ?? DAEMON_RESTART_STATUS_TIMEOUT_MS, budget)\n });\n if (status?.ok) {\n return status;\n }\n if (attempt < attempts) {\n await sleep(Math.min(retryDelayMs, readRemainingBudgetMs(budget) ?? retryDelayMs));\n }\n }\n\n return null;\n};\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 requiresConfiguredRecovery = (name: string): boolean => {\n return name === \"canvas.execute\" || name === \"inspiredesign.run\";\n};\n\nconst getConfiguredDaemonConnection = (): DaemonConnection | null => {\n const config = loadGlobalConfig();\n if (!(config.daemonPort > 0 && config.daemonToken)) {\n return null;\n }\n return { port: config.daemonPort, token: config.daemonToken };\n};\n\nconst sameDaemonConnection = (left: DaemonConnection, right: DaemonConnection): boolean => {\n return left.port === right.port && left.token === right.token;\n};\n\nconst persistResolvedDaemonStatus = (\n connection: DaemonConnection,\n status: DaemonStatusPayload\n): void => {\n const config = loadGlobalConfig();\n persistDaemonStatusMetadata({\n port: connection.port,\n token: connection.token,\n startedAt: new Date().toISOString(),\n fingerprint: status.fingerprint\n }, status, config);\n};\n\nconst persistCurrentConfiguredConnection = async (\n configuredConnection: DaemonConnection,\n status: DaemonStatusPayload,\n staleMetadata: { connection: DaemonConnection } | null\n): Promise<DaemonConnection> => {\n if (staleMetadata && !sameDaemonConnection(staleMetadata.connection, configuredConnection)) {\n // Once the configured daemon has proven current, stale metadata cleanup must not block the caller.\n void stopDaemonConnection(staleMetadata.connection, null, \"persistCurrentConfiguredConnection.staleMetadata\").catch(() => undefined);\n }\n persistResolvedDaemonStatus(configuredConnection, status);\n return configuredConnection;\n};\n\ntype DaemonShutdownOutcome = \"stopped\" | DaemonStatusPayload;\ntype DaemonStopOutcome = \"stopped\" | \"fingerprint_rejected\" | \"unreachable\";\n\nconst resolveConfiguredPreferenceOptions = (\n budget: TimeoutBudget | null\n): DaemonStatusFetchOptions | null => {\n if (!budget) {\n return DAEMON_CONFIG_PREFER_OPTIONS;\n }\n const remainingMs = readRemainingBudgetMs(budget);\n if (remainingMs === undefined || remainingMs <= 1) {\n return null;\n }\n const timeoutMs = Math.min(DAEMON_CONFIG_PREFER_OPTIONS.timeoutMs ?? remainingMs, remainingMs);\n const retryDelayMs = Math.max(0, DAEMON_CONFIG_PREFER_OPTIONS.retryDelayMs ?? 0);\n const maxAttempts = Math.max(1, DAEMON_CONFIG_PREFER_OPTIONS.retryAttempts ?? 1);\n let retryAttempts = 1;\n while (retryAttempts < maxAttempts) {\n const nextAttempts = retryAttempts + 1;\n const nextWorstCaseMs = (nextAttempts * timeoutMs) + ((nextAttempts - 1) * retryDelayMs);\n if (nextWorstCaseMs > remainingMs) {\n break;\n }\n retryAttempts = nextAttempts;\n }\n return {\n timeoutMs,\n retryAttempts,\n retryDelayMs: retryAttempts > 1 ? retryDelayMs : 0\n };\n};\n\nconst stopDaemonConnection = async (\n connection: DaemonConnection,\n budget: TimeoutBudget | null = null,\n reason = \"unknown\"\n): Promise<DaemonStopOutcome> => {\n const stopTimeoutMs = capTimeoutToBudget(DAEMON_RESTART_STATUS_TIMEOUT_MS, budget);\n logDaemonStopDebug(\"client.stop.request\", { reason, port: connection.port });\n try {\n const response = await fetchWithTimeout(`http://127.0.0.1:${connection.port}/stop`, {\n method: \"POST\",\n headers: createDaemonStopHeaders(connection.token, reason)\n }, stopTimeoutMs);\n if (response.status === 409) {\n logDaemonStopDebug(\"client.stop.fingerprintRejected\", { reason, port: connection.port });\n return \"fingerprint_rejected\";\n }\n if (!response.ok) {\n logDaemonStopDebug(\"client.stop.rejected\", { reason, port: connection.port, status: response.status });\n return \"unreachable\";\n }\n logDaemonStopDebug(\"client.stop.complete\", { reason, port: connection.port });\n return \"stopped\";\n } catch {\n logDaemonStopDebug(\"client.stop.error\", { reason, port: connection.port });\n return \"unreachable\";\n }\n};\n\nfunction resolveDaemonRestartCommand(\n options: ResolveDaemonRestartCommandOptions = {}\n): DaemonRestartCommand {\n const execPath = options.execPath ?? process.execPath;\n const execArgv = options.execArgv ?? process.execArgv;\n const moduleUrl = options.moduleUrl ?? import.meta.url;\n const argv1 = options.argv1 ?? process.argv[1];\n const entryPath = resolveCurrentDaemonEntrypointPath({\n argv1,\n moduleUrl,\n entryExists: options.entryExists ?? existsSync\n });\n if (!(typeof argv1 === \"string\" && argv1.trim().length > 0)) {\n const modulePath = resolve(fileURLToPath(moduleUrl));\n if (entryPath === modulePath) {\n throw createDisconnectedError(\"Daemon restart requires a stable CLI entrypoint. Start with `opendevbrowser serve`.\");\n }\n }\n const restartExecArgv = resolveRestartExecArgv(entryPath, execArgv);\n if (TYPESCRIPT_ENTRY_RE.test(entryPath) && restartExecArgv.length === 0) {\n throw createDisconnectedError(\"Daemon restart requires the original loader context. Start with `opendevbrowser serve`.\");\n }\n return {\n command: execPath,\n args: [...restartExecArgv, entryPath]\n };\n}\n\nconst restartDaemonConnection = async (connection: DaemonConnection): Promise<void> => {\n const restart = resolveDaemonRestartCommand();\n const child = spawn(restart.command, [\n ...restart.args,\n \"serve\",\n \"--port\",\n String(connection.port),\n \"--token\",\n connection.token,\n \"--output-format\",\n \"json\"\n ], {\n detached: true,\n stdio: \"ignore\"\n });\n child.unref();\n};\n\nconst waitForCurrentDaemonStatus = async (\n connection: DaemonConnection,\n readyTimeoutMs = DAEMON_RESTART_READY_TIMEOUT_MS,\n budget: TimeoutBudget | null = null\n): Promise<DaemonStatusPayload | null> => {\n const deadline = resolveReadyDeadlineMs(readyTimeoutMs, budget);\n while (true) {\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) {\n if (hasBudgetTimedOut(budget, deadline)) {\n throw createTransportTimeoutError(budget!.timeoutMs);\n }\n return null;\n }\n const status = await fetchDaemonStatus(connection.port, connection.token, {\n timeoutMs: Math.min(DAEMON_RESTART_STATUS_TIMEOUT_MS, remainingMs)\n });\n if (status?.ok && isCurrentDaemonFingerprint(status.fingerprint)) {\n return status;\n }\n if (Date.now() >= deadline) {\n return null;\n }\n await sleep(Math.min(DAEMON_RESTART_POLL_DELAY_MS, Math.max(0, deadline - Date.now())));\n }\n};\n\nconst waitForDaemonShutdown = async (\n connection: DaemonConnection,\n readyTimeoutMs = DAEMON_RECOVERY_READY_TIMEOUT_MS,\n budget: TimeoutBudget | null = null\n): Promise<DaemonShutdownOutcome | null> => {\n const deadline = resolveReadyDeadlineMs(readyTimeoutMs, budget);\n while (true) {\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) {\n if (hasBudgetTimedOut(budget, deadline)) {\n throw createTransportTimeoutError(budget!.timeoutMs);\n }\n return null;\n }\n const status = await fetchDaemonStatus(connection.port, connection.token, {\n timeoutMs: Math.min(DAEMON_RESTART_STATUS_TIMEOUT_MS, remainingMs)\n });\n if (!status?.ok) {\n return \"stopped\";\n }\n if (isCurrentDaemonFingerprint(status.fingerprint)) {\n return status;\n }\n if (Date.now() >= deadline) {\n return null;\n }\n await sleep(Math.min(DAEMON_RESTART_POLL_DELAY_MS, Math.max(0, deadline - Date.now())));\n }\n};\n\nconst resolveMetadataConnection = async (\n metadataConnection: DaemonConnection,\n configuredConnection: DaemonConnection,\n budget: TimeoutBudget | null = null\n): Promise<{ connection: DaemonConnection; status: DaemonStatusPayload } | null> => {\n const status = await fetchAnyDaemonStatus(metadataConnection, DAEMON_STATUS_RETRY_OPTIONS, budget);\n if (!status?.ok) {\n return null;\n }\n if (isCurrentDaemonFingerprint(status.fingerprint)) {\n persistResolvedDaemonStatus(metadataConnection, status);\n return { connection: metadataConnection, status };\n }\n if (sameDaemonConnection(metadataConnection, configuredConnection)) {\n return null;\n }\n return { connection: metadataConnection, status };\n};\n\nconst resolveFreshDaemonConnection = async (\n budget: TimeoutBudget | null = null,\n options: ResolveDaemonConnectionOptions = {}\n): Promise<DaemonConnection> => {\n const configuredConnection = getConfiguredDaemonConnection();\n if (!configuredConnection) {\n throw createDisconnectedError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n\n const configuredStatus = await fetchAnyDaemonStatus(configuredConnection, DAEMON_STATUS_RETRY_OPTIONS, budget);\n\n let currentConfiguredStatus =\n configuredStatus?.ok && isCurrentDaemonFingerprint(configuredStatus.fingerprint)\n ? configuredStatus\n : null;\n\n const metadata = readDaemonMetadata();\n const metadataConnection = metadata\n ? { port: metadata.port, token: metadata.token }\n : null;\n const staleMetadata = metadataConnection\n ? await resolveMetadataConnection(metadataConnection, configuredConnection, budget)\n : null;\n if (currentConfiguredStatus?.ok) {\n return await persistCurrentConfiguredConnection(configuredConnection, currentConfiguredStatus, staleMetadata);\n }\n if (options.preferConfiguredRecovery && staleMetadata) {\n currentConfiguredStatus = await waitForCurrentDaemonStatus(\n configuredConnection,\n DAEMON_RECOVERY_READY_TIMEOUT_MS,\n budget\n );\n if (currentConfiguredStatus?.ok) {\n return await persistCurrentConfiguredConnection(configuredConnection, currentConfiguredStatus, staleMetadata);\n }\n if (!configuredStatus?.ok) {\n throw createDisconnectedError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n }\n if (\n !options.preferConfiguredRecovery\n && staleMetadata?.status.ok\n && isCurrentDaemonFingerprint(staleMetadata.status.fingerprint)\n ) {\n if (configuredStatus?.ok) {\n void stopDaemonConnection(configuredConnection, budget, \"resolveFreshDaemonConnection.configuredCurrentMetadataPreferred\").catch(() => undefined);\n }\n return staleMetadata.connection;\n }\n if (!configuredStatus?.ok && staleMetadata) {\n currentConfiguredStatus = await waitForCurrentDaemonStatus(\n configuredConnection,\n DAEMON_RECOVERY_READY_TIMEOUT_MS,\n budget\n );\n if (currentConfiguredStatus?.ok) {\n return await persistCurrentConfiguredConnection(configuredConnection, currentConfiguredStatus, staleMetadata);\n }\n throw createDisconnectedError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n\n const staleConnections: Array<{ connection: DaemonConnection; status: DaemonStatusPayload }> = [];\n if (configuredStatus?.ok) {\n staleConnections.push({ connection: configuredConnection, status: configuredStatus });\n }\n if (staleConnections.length === 0) {\n const recoveringStatus = await waitForCurrentDaemonStatus(\n configuredConnection,\n DAEMON_RECOVERY_READY_TIMEOUT_MS,\n budget\n );\n if (recoveringStatus?.ok) {\n persistResolvedDaemonStatus(configuredConnection, recoveringStatus);\n return configuredConnection;\n }\n throw createDisconnectedError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n for (const staleConnection of staleConnections) {\n const stopOutcome = await stopDaemonConnection(\n staleConnection.connection,\n budget,\n \"resolveFreshDaemonConnection.staleConnections\"\n );\n if (stopOutcome === \"fingerprint_rejected\") {\n throw createDisconnectedError(\n buildDaemonFingerprintMismatchMessage({\n label: \"Daemon\",\n port: staleConnection.connection.port,\n pid: staleConnection.status.pid\n }),\n DAEMON_FINGERPRINT_MISMATCH_REASON\n );\n }\n }\n if (configuredStatus?.ok) {\n const shutdownOutcome = await waitForDaemonShutdown(configuredConnection, DAEMON_RECOVERY_READY_TIMEOUT_MS, budget);\n if (!shutdownOutcome) {\n throw createDisconnectedError(\"Daemon restart could not reclaim the configured port after fingerprint mismatch. Start with `opendevbrowser serve`.\");\n }\n if (shutdownOutcome !== \"stopped\") {\n persistResolvedDaemonStatus(configuredConnection, shutdownOutcome);\n return configuredConnection;\n }\n }\n await restartDaemonConnection(configuredConnection);\n const refreshedStatus = await waitForCurrentDaemonStatus(configuredConnection, DAEMON_RESTART_READY_TIMEOUT_MS, budget);\n if (!refreshedStatus?.ok) {\n throw createDisconnectedError(\"Daemon restart failed after fingerprint mismatch. Start with `opendevbrowser serve`.\");\n }\n persistResolvedDaemonStatus(configuredConnection, refreshedStatus);\n return configuredConnection;\n};\n\nconst resolveDaemonConnection = async (\n budget: TimeoutBudget | null = null,\n options: ResolveDaemonConnectionOptions = {}\n): Promise<DaemonConnection> => {\n const metadata = readDaemonMetadata();\n if (metadata && isCurrentDaemonFingerprint(metadata.fingerprint)) {\n const metadataConnection = { port: metadata.port, token: metadata.token };\n const configuredConnection = getConfiguredDaemonConnection();\n if (!configuredConnection || sameDaemonConnection(metadataConnection, configuredConnection)) {\n return metadataConnection;\n }\n const configuredOptions = resolveConfiguredPreferenceOptions(budget);\n if (!configuredOptions) {\n if (options.preferConfiguredRecovery) {\n return await resolveFreshDaemonConnection(budget, options);\n }\n return metadataConnection;\n }\n const configuredStatus = await fetchCurrentDaemonStatus(configuredConnection, configuredOptions, budget);\n if (configuredStatus?.ok) {\n return await persistCurrentConfiguredConnection(\n configuredConnection,\n configuredStatus,\n { connection: metadataConnection }\n );\n }\n if (options.preferConfiguredRecovery) {\n return await resolveFreshDaemonConnection(budget, options);\n }\n return metadataConnection;\n }\n return await resolveFreshDaemonConnection(budget, options);\n};\n\nconst retryWithRefreshedConnection = async (\n name: string,\n params: Record<string, unknown>,\n budget: TimeoutBudget | null\n): Promise<TimedFetchResponse> => {\n const connection = await resolveFreshDaemonConnection(budget, {\n preferConfiguredRecovery: requiresConfiguredRecovery(name)\n });\n return await openDaemonCommand(connection.port, connection.token, name, params, readRemainingBudgetMs(budget));\n};\n\nconst openDaemonCommand = async (\n port: number,\n token: string,\n name: string,\n params: Record<string, unknown>,\n timeoutMs?: number\n): Promise<TimedFetchResponse> => {\n return await fetchWithTimeoutContext(`http://127.0.0.1:${port}/command`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`\n },\n body: JSON.stringify({ name, params })\n }, timeoutMs);\n};\n\nconst readDaemonErrorMessage = async (timedResponse: TimedFetchResponse): Promise<string> => {\n const text = await readResponseTextWithTimeout(\n timedResponse.response,\n timedResponse.signal,\n timedResponse.timeoutMs\n );\n let message = text || String(timedResponse.response.status);\n try {\n const parsed = JSON.parse(text) as Record<string, unknown> | null;\n if (parsed && typeof parsed === \"object\") {\n if (typeof parsed.error === \"string\" && parsed.error.trim()) {\n message = parsed.error;\n } else if (typeof parsed.message === \"string\" && parsed.message.trim()) {\n message = parsed.message;\n }\n }\n } catch {\n // Ignore JSON parse errors; fall back to raw text/status.\n }\n return message;\n};\n"],"mappings":"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","names":["sessionId","resolve"]}