opendevbrowser 0.0.31 → 0.0.32

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 (294) hide show
  1. package/README.md +18 -5
  2. package/dist/{accessibility-snapshot-CQ4ZKWKC.js → accessibility-snapshot-XOP66CSK.js} +11 -11
  3. package/dist/{active-window-TD5HYJ72.js → active-window-E3WFOQGX.js} +11 -11
  4. package/dist/{annotate-VTLFS2XV.js → annotate-MAE7ZJOZ.js} +10 -10
  5. package/dist/{artifacts-KJ6RNDO2.js → artifacts-JHDUUJGQ.js} +2 -2
  6. package/dist/{attr-BCI5KYCW.js → attr-M3PFDJ7Q.js} +10 -10
  7. package/dist/{canvas-5DFEEOKM.js → canvas-3AJVL5I5.js} +10 -10
  8. package/dist/{capture-desktop-HFTTWY4Z.js → capture-desktop-VJGEETMJ.js} +11 -11
  9. package/dist/{capture-window-X63XPIFF.js → capture-window-W5UFSFQL.js} +11 -11
  10. package/dist/{check-LWAUY7GC.js → check-4IR3UJVW.js} +10 -10
  11. package/dist/{checked-ZSOUKVYT.js → checked-PKNY7724.js} +10 -10
  12. package/dist/{chunk-KZ2IXVQT.js → chunk-2X4JFMKJ.js} +39 -4
  13. package/dist/chunk-2X4JFMKJ.js.map +1 -0
  14. package/dist/{chunk-IPE7TF2P.js → chunk-7BNU6DFI.js} +8 -5
  15. package/dist/chunk-7BNU6DFI.js.map +1 -0
  16. package/dist/{chunk-6B5WAQV7.js → chunk-AKIAGFOE.js} +30 -7
  17. package/dist/chunk-AKIAGFOE.js.map +1 -0
  18. package/dist/{chunk-2I3YS3DV.js → chunk-AWQ37HSC.js} +7 -3
  19. package/dist/chunk-AWQ37HSC.js.map +1 -0
  20. package/dist/{chunk-3ILXPKSJ.js → chunk-BUVYTJZR.js} +2 -1
  21. package/dist/chunk-BUVYTJZR.js.map +1 -0
  22. package/dist/{chunk-AHEWXOKY.js → chunk-BUXFIY2P.js} +4 -4
  23. package/dist/{chunk-QOMWCRE3.js → chunk-HBK56JST.js} +3 -3
  24. package/dist/{chunk-T4GMCW6Z.js → chunk-J3KYGJRQ.js} +3 -3
  25. package/dist/{chunk-6PVZ2ABC.js → chunk-L3YNUGYF.js} +2 -2
  26. package/dist/{chunk-JZXD6FWR.js → chunk-NURQB55J.js} +2 -2
  27. package/dist/{chunk-GQJ5S3BL.js → chunk-P5K3ZIPI.js} +3 -3
  28. package/dist/{chunk-PPUWQKIC.js → chunk-PIFHXKV4.js} +4 -4
  29. package/dist/{chunk-STGGGVYT.js → chunk-QMHKAFYX.js} +2 -2
  30. package/dist/{chunk-4BEJVZRK.js → chunk-RO3SMXF3.js} +1073 -138
  31. package/dist/chunk-RO3SMXF3.js.map +1 -0
  32. package/dist/{chunk-RPXWUCQQ.js → chunk-SKFB5ICF.js} +2 -2
  33. package/dist/{chunk-2SIMIPLY.js → chunk-W6YPVNDX.js} +3 -3
  34. package/dist/{chunk-MD655IPO.js → chunk-XDLJE3RJ.js} +11 -4
  35. package/dist/chunk-XDLJE3RJ.js.map +1 -0
  36. package/dist/{chunk-KDSNXS6N.js → chunk-ZMNEWS7A.js} +2 -2
  37. package/dist/{chunk-COAOWH3G.js → chunk-ZOVMMQO6.js} +119 -27
  38. package/dist/chunk-ZOVMMQO6.js.map +1 -0
  39. package/dist/cli/args.d.ts.map +1 -1
  40. package/dist/cli/commands/daemon.d.ts +19 -2
  41. package/dist/cli/commands/daemon.d.ts.map +1 -1
  42. package/dist/cli/commands/inspiredesign.d.ts +6 -1
  43. package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
  44. package/dist/cli/commands/serve.d.ts +12 -3
  45. package/dist/cli/commands/serve.d.ts.map +1 -1
  46. package/dist/cli/commands/status.d.ts.map +1 -1
  47. package/dist/cli/commands/types.d.ts +1 -0
  48. package/dist/cli/commands/types.d.ts.map +1 -1
  49. package/dist/cli/daemon-client.d.ts.map +1 -1
  50. package/dist/cli/daemon-commands.d.ts.map +1 -1
  51. package/dist/cli/daemon-mismatch.d.ts +9 -0
  52. package/dist/cli/daemon-mismatch.d.ts.map +1 -0
  53. package/dist/cli/daemon.d.ts.map +1 -1
  54. package/dist/cli/errors.d.ts +4 -2
  55. package/dist/cli/errors.d.ts.map +1 -1
  56. package/dist/cli/help.d.ts.map +1 -1
  57. package/dist/cli/index.js +89 -88
  58. package/dist/cli/index.js.map +1 -1
  59. package/dist/cli/installers/postinstall-skill-sync.js +2 -2
  60. package/dist/{click-2AILSEIZ.js → click-HLNXU4I5.js} +10 -10
  61. package/dist/{clone-component-TPJS3PEG.js → clone-component-QIKN5PIM.js} +9 -9
  62. package/dist/{clone-page-LE74CIFC.js → clone-page-5C7DTGZT.js} +9 -9
  63. package/dist/{close-HN4YI47K.js → close-PCRZHX7F.js} +9 -9
  64. package/dist/{close-WFERRHX6.js → close-WTXB3EDD.js} +9 -9
  65. package/dist/{connect-RWBV2UCQ.js → connect-6C2IG55I.js} +10 -10
  66. package/dist/{console-poll-PP4YYPDF.js → console-poll-VJXCZR3F.js} +10 -10
  67. package/dist/{cookie-import-6IP776FC.js → cookie-import-5OEDFB6U.js} +9 -9
  68. package/dist/{cookie-list-O2KG6DPU.js → cookie-list-44UNJJ6D.js} +9 -9
  69. package/dist/{daemon-2BSAZXLT.js → daemon-CIKGBWEB.js} +25 -12
  70. package/dist/daemon-CIKGBWEB.js.map +1 -0
  71. package/dist/daemon-fingerprint.json +1 -1
  72. package/dist/{debug-trace-snapshot-F3BDVZXS.js → debug-trace-snapshot-RGXAPGWB.js} +10 -10
  73. package/dist/{dialog-6JQYUWMQ.js → dialog-S64MJUM2.js} +10 -10
  74. package/dist/{disconnect-763TP7GH.js → disconnect-MTIELIM7.js} +9 -9
  75. package/dist/{enabled-DLYQFNIP.js → enabled-KF2L7LW4.js} +10 -10
  76. package/dist/{goto-S346TJJH.js → goto-ULWINUAZ.js} +10 -10
  77. package/dist/{help-U7KBQME6.js → help-IG5S5RJD.js} +13 -9
  78. package/dist/help-IG5S5RJD.js.map +1 -0
  79. package/dist/{hover-6JVJFGO7.js → hover-NOCOTR6N.js} +10 -10
  80. package/dist/{html-EVOSPBIT.js → html-LXSYP6BT.js} +10 -10
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +46 -17
  83. package/dist/index.js.map +1 -1
  84. package/dist/{inspector-H57BVUJP.js → inspector-62EPCLYB.js} +11 -11
  85. package/dist/{inspector-audit-NQBAJWC7.js → inspector-audit-T2IF67RJ.js} +13 -13
  86. package/dist/{inspector-plan-ZDIQVND3.js → inspector-plan-KQS6LRMW.js} +11 -11
  87. package/dist/inspiredesign/capture.d.ts +4 -0
  88. package/dist/inspiredesign/capture.d.ts.map +1 -1
  89. package/dist/inspiredesign/contract.d.ts +22 -0
  90. package/dist/inspiredesign/contract.d.ts.map +1 -1
  91. package/dist/inspiredesign/handoff.d.ts +7 -1
  92. package/dist/inspiredesign/handoff.d.ts.map +1 -1
  93. package/dist/inspiredesign/meta-prompt.d.ts +9 -0
  94. package/dist/inspiredesign/meta-prompt.d.ts.map +1 -0
  95. package/dist/inspiredesign/reference-discovery.d.ts +29 -0
  96. package/dist/inspiredesign/reference-discovery.d.ts.map +1 -0
  97. package/dist/inspiredesign/reference-pattern-board.d.ts +21 -0
  98. package/dist/inspiredesign/reference-pattern-board.d.ts.map +1 -1
  99. package/dist/inspiredesign/visual-evidence.d.ts +46 -0
  100. package/dist/inspiredesign/visual-evidence.d.ts.map +1 -0
  101. package/dist/inspiredesign/visual-policy.d.ts +17 -0
  102. package/dist/inspiredesign/visual-policy.d.ts.map +1 -0
  103. package/dist/{inspiredesign-IEUL4PX3.js → inspiredesign-DB6CHYN3.js} +71 -19
  104. package/dist/inspiredesign-DB6CHYN3.js.map +1 -0
  105. package/dist/{launch-EK66VQPF.js → launch-B5ES6FVS.js} +10 -10
  106. package/dist/{list-KKUKN467.js → list-TIZVR6RO.js} +9 -9
  107. package/dist/{list-ADZAQ2IU.js → list-XM4BP5GM.js} +9 -9
  108. package/dist/{macro-resolve-6DOQJ7CA.js → macro-resolve-TTQZVFIW.js} +10 -10
  109. package/dist/{native-UPLVQ2SG.js → native-J2DFLOLP.js} +3 -3
  110. package/dist/{network-poll-NUL4PDPY.js → network-poll-NNSY4W63.js} +10 -10
  111. package/dist/{new-5NKYPEFT.js → new-E6VNAC2A.js} +9 -9
  112. package/dist/{open-NR3BPLXV.js → open-F55XKMKB.js} +9 -9
  113. package/dist/opendevbrowser.d.ts.map +1 -1
  114. package/dist/opendevbrowser.js +46 -17
  115. package/dist/opendevbrowser.js.map +1 -1
  116. package/dist/{perf-HJ36ZI6H.js → perf-RE7JE6CP.js} +10 -10
  117. package/dist/{pointer-down-IYTTQWXZ.js → pointer-down-BCBPC5FJ.js} +11 -11
  118. package/dist/{pointer-drag-A2YC5PWI.js → pointer-drag-QK7KGF7W.js} +11 -11
  119. package/dist/{pointer-move-W5K5FUI4.js → pointer-move-VFAZQAXA.js} +11 -11
  120. package/dist/{pointer-up-6GWVO64Y.js → pointer-up-FA5WE6LS.js} +11 -11
  121. package/dist/{press-A3V5WB3S.js → press-TNRHNDSW.js} +10 -10
  122. package/dist/{product-video-52REKWF3.js → product-video-UEANMZ2U.js} +11 -11
  123. package/dist/providers/renderer.d.ts +7 -1
  124. package/dist/providers/renderer.d.ts.map +1 -1
  125. package/dist/providers/workflow-handoff.d.ts +1 -0
  126. package/dist/providers/workflow-handoff.d.ts.map +1 -1
  127. package/dist/providers/workflows.d.ts +45 -3
  128. package/dist/providers/workflows.d.ts.map +1 -1
  129. package/dist/{providers-IMFYMMHQ.js → providers-AMCNWZUL.js} +3 -3
  130. package/dist/public-surface/generated-manifest.d.ts +12 -3
  131. package/dist/public-surface/generated-manifest.d.ts.map +1 -1
  132. package/dist/public-surface/source.d.ts +5 -5
  133. package/dist/public-surface/source.d.ts.map +1 -1
  134. package/dist/{research-WB6BBCDD.js → research-YFY7WJSZ.js} +11 -11
  135. package/dist/{review-BGWVY4RA.js → review-NHOPLAT7.js} +11 -11
  136. package/dist/{review-desktop-LEORC5VS.js → review-desktop-OFWPDYGD.js} +11 -11
  137. package/dist/{rpc-4TSKSFGC.js → rpc-TVVQPUOL.js} +10 -10
  138. package/dist/{run-3NBLVWXD.js → run-OCBEZRDW.js} +8 -8
  139. package/dist/{screencast-start-UZVIT3IN.js → screencast-start-GTSDA33J.js} +10 -10
  140. package/dist/{screencast-stop-NOSJSIUO.js → screencast-stop-FYBUIXAA.js} +10 -10
  141. package/dist/{screenshot-LARG4JQG.js → screenshot-OEYRT3SP.js} +10 -10
  142. package/dist/{scroll-VNFMV6TW.js → scroll-35OFEFC5.js} +10 -10
  143. package/dist/{scroll-into-view-VYRT3JPT.js → scroll-into-view-UQ5RAWIX.js} +10 -10
  144. package/dist/{select-KJTUZDVO.js → select-K56QELVZ.js} +10 -10
  145. package/dist/{serve-EV7K4HKR.js → serve-5UJ3VMWC.js} +48 -24
  146. package/dist/serve-5UJ3VMWC.js.map +1 -0
  147. package/dist/{shopping-DTXHVQ2X.js → shopping-FJG7XB4Q.js} +11 -11
  148. package/dist/{skill-lifecycle-5UAZGKSN.js → skill-lifecycle-OWZYBPFS.js} +3 -3
  149. package/dist/skills/bundled-skill-directories.d.ts.map +1 -1
  150. package/dist/skills/skill-loader.js +2 -2
  151. package/dist/{skills-NSXDX6YM.js → skills-KHMRNOE4.js} +3 -3
  152. package/dist/{snapshot-3XQMCMRJ.js → snapshot-W7RKVZEI.js} +10 -10
  153. package/dist/{status-YUMDP5KY.js → status-KHYCLGUD.js} +20 -12
  154. package/dist/status-KHYCLGUD.js.map +1 -0
  155. package/dist/{status-OXSYA5XD.js → status-R4EV4TWO.js} +11 -11
  156. package/dist/{status-capabilities-P4KDSE2Y.js → status-capabilities-XD3RGLKF.js} +11 -11
  157. package/dist/{text-V3B7UVIH.js → text-TANLFZ4O.js} +10 -10
  158. package/dist/tools/inspiredesign_run.d.ts.map +1 -1
  159. package/dist/{type-IYBN3ZLR.js → type-Y2Y7LX7Y.js} +10 -10
  160. package/dist/{uncheck-SG737EGI.js → uncheck-6REVUUB2.js} +10 -10
  161. package/dist/{uninstall-KYKGJAX7.js → uninstall-FW5ORBIN.js} +3 -3
  162. package/dist/{update-skill-modes-BVX7IVMW.js → update-skill-modes-3ULKJK3Y.js} +3 -3
  163. package/dist/{upload-KH6ZABJA.js → upload-GGZC5UQP.js} +10 -10
  164. package/dist/{use-7YDKO3U4.js → use-B4Q7CFG2.js} +9 -9
  165. package/dist/{value-RZBWSKKM.js → value-DHOHO55D.js} +10 -10
  166. package/dist/{visible-BSFTAKXR.js → visible-S5BTWYNH.js} +10 -10
  167. package/dist/{wait-TMTEAYOP.js → wait-WV6NZUKL.js} +10 -10
  168. package/dist/{windows-HIZ23OHS.js → windows-GKE36DJQ.js} +11 -11
  169. package/extension/manifest.json +1 -1
  170. package/package.json +1 -1
  171. package/skills/AGENTS.md +2 -1
  172. package/skills/opendevbrowser-best-practices/SKILL.md +9 -2
  173. package/skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md +4 -3
  174. package/skills/opendevbrowser-best-practices/assets/templates/mode-flag-matrix.json +7 -0
  175. package/skills/opendevbrowser-best-practices/assets/templates/skill-runtime-pack-matrix.json +49 -3
  176. package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +24 -2
  177. package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +1 -0
  178. package/skills/opendevbrowser-design-agent/SKILL.md +3 -0
  179. package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +85 -40
  180. package/skills/opendevbrowser-design-agent/artifacts/scroll-reveal-surface-planning.md +2 -0
  181. package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +20 -5
  182. package/skills/opendevbrowser-motion-design/SKILL.md +129 -0
  183. package/skills/opendevbrowser-motion-design/artifacts/accessibility-reduced-motion.md +37 -0
  184. package/skills/opendevbrowser-motion-design/artifacts/device-breakpoint-posture.md +40 -0
  185. package/skills/opendevbrowser-motion-design/artifacts/motion-anti-patterns.md +29 -0
  186. package/skills/opendevbrowser-motion-design/artifacts/motion-pattern-catalog.md +430 -0
  187. package/skills/opendevbrowser-motion-design/artifacts/motion-release-gate.md +28 -0
  188. package/skills/opendevbrowser-motion-design/artifacts/motion-terminology.md +46 -0
  189. package/skills/opendevbrowser-motion-design/artifacts/open-dev-browser-motion-evidence.md +48 -0
  190. package/skills/opendevbrowser-motion-design/artifacts/performance-frame-budget.md +38 -0
  191. package/skills/opendevbrowser-motion-design/artifacts/platform-framework-guide.md +166 -0
  192. package/skills/opendevbrowser-motion-design/assets/templates/motion-audit-report.v1.md +70 -0
  193. package/skills/opendevbrowser-motion-design/assets/templates/motion-contract.v1.json +79 -0
  194. package/skills/opendevbrowser-motion-design/assets/templates/motion-release-gate.v1.json +18 -0
  195. package/skills/opendevbrowser-motion-design/assets/templates/motion-viewport-matrix.v1.json +76 -0
  196. package/skills/opendevbrowser-motion-design/scripts/motion-workflow.sh +163 -0
  197. package/skills/opendevbrowser-motion-design/scripts/validate-skill-assets.sh +374 -0
  198. package/dist/chunk-2I3YS3DV.js.map +0 -1
  199. package/dist/chunk-3ILXPKSJ.js.map +0 -1
  200. package/dist/chunk-4BEJVZRK.js.map +0 -1
  201. package/dist/chunk-6B5WAQV7.js.map +0 -1
  202. package/dist/chunk-COAOWH3G.js.map +0 -1
  203. package/dist/chunk-IPE7TF2P.js.map +0 -1
  204. package/dist/chunk-KZ2IXVQT.js.map +0 -1
  205. package/dist/chunk-MD655IPO.js.map +0 -1
  206. package/dist/daemon-2BSAZXLT.js.map +0 -1
  207. package/dist/help-U7KBQME6.js.map +0 -1
  208. package/dist/inspiredesign-IEUL4PX3.js.map +0 -1
  209. package/dist/serve-EV7K4HKR.js.map +0 -1
  210. package/dist/status-YUMDP5KY.js.map +0 -1
  211. /package/dist/{accessibility-snapshot-CQ4ZKWKC.js.map → accessibility-snapshot-XOP66CSK.js.map} +0 -0
  212. /package/dist/{active-window-TD5HYJ72.js.map → active-window-E3WFOQGX.js.map} +0 -0
  213. /package/dist/{annotate-VTLFS2XV.js.map → annotate-MAE7ZJOZ.js.map} +0 -0
  214. /package/dist/{artifacts-KJ6RNDO2.js.map → artifacts-JHDUUJGQ.js.map} +0 -0
  215. /package/dist/{attr-BCI5KYCW.js.map → attr-M3PFDJ7Q.js.map} +0 -0
  216. /package/dist/{canvas-5DFEEOKM.js.map → canvas-3AJVL5I5.js.map} +0 -0
  217. /package/dist/{capture-desktop-HFTTWY4Z.js.map → capture-desktop-VJGEETMJ.js.map} +0 -0
  218. /package/dist/{capture-window-X63XPIFF.js.map → capture-window-W5UFSFQL.js.map} +0 -0
  219. /package/dist/{check-LWAUY7GC.js.map → check-4IR3UJVW.js.map} +0 -0
  220. /package/dist/{checked-ZSOUKVYT.js.map → checked-PKNY7724.js.map} +0 -0
  221. /package/dist/{chunk-AHEWXOKY.js.map → chunk-BUXFIY2P.js.map} +0 -0
  222. /package/dist/{chunk-QOMWCRE3.js.map → chunk-HBK56JST.js.map} +0 -0
  223. /package/dist/{chunk-T4GMCW6Z.js.map → chunk-J3KYGJRQ.js.map} +0 -0
  224. /package/dist/{chunk-6PVZ2ABC.js.map → chunk-L3YNUGYF.js.map} +0 -0
  225. /package/dist/{chunk-JZXD6FWR.js.map → chunk-NURQB55J.js.map} +0 -0
  226. /package/dist/{chunk-GQJ5S3BL.js.map → chunk-P5K3ZIPI.js.map} +0 -0
  227. /package/dist/{chunk-PPUWQKIC.js.map → chunk-PIFHXKV4.js.map} +0 -0
  228. /package/dist/{chunk-STGGGVYT.js.map → chunk-QMHKAFYX.js.map} +0 -0
  229. /package/dist/{chunk-RPXWUCQQ.js.map → chunk-SKFB5ICF.js.map} +0 -0
  230. /package/dist/{chunk-2SIMIPLY.js.map → chunk-W6YPVNDX.js.map} +0 -0
  231. /package/dist/{chunk-KDSNXS6N.js.map → chunk-ZMNEWS7A.js.map} +0 -0
  232. /package/dist/{click-2AILSEIZ.js.map → click-HLNXU4I5.js.map} +0 -0
  233. /package/dist/{clone-component-TPJS3PEG.js.map → clone-component-QIKN5PIM.js.map} +0 -0
  234. /package/dist/{clone-page-LE74CIFC.js.map → clone-page-5C7DTGZT.js.map} +0 -0
  235. /package/dist/{close-HN4YI47K.js.map → close-PCRZHX7F.js.map} +0 -0
  236. /package/dist/{close-WFERRHX6.js.map → close-WTXB3EDD.js.map} +0 -0
  237. /package/dist/{connect-RWBV2UCQ.js.map → connect-6C2IG55I.js.map} +0 -0
  238. /package/dist/{console-poll-PP4YYPDF.js.map → console-poll-VJXCZR3F.js.map} +0 -0
  239. /package/dist/{cookie-import-6IP776FC.js.map → cookie-import-5OEDFB6U.js.map} +0 -0
  240. /package/dist/{cookie-list-O2KG6DPU.js.map → cookie-list-44UNJJ6D.js.map} +0 -0
  241. /package/dist/{debug-trace-snapshot-F3BDVZXS.js.map → debug-trace-snapshot-RGXAPGWB.js.map} +0 -0
  242. /package/dist/{dialog-6JQYUWMQ.js.map → dialog-S64MJUM2.js.map} +0 -0
  243. /package/dist/{disconnect-763TP7GH.js.map → disconnect-MTIELIM7.js.map} +0 -0
  244. /package/dist/{enabled-DLYQFNIP.js.map → enabled-KF2L7LW4.js.map} +0 -0
  245. /package/dist/{goto-S346TJJH.js.map → goto-ULWINUAZ.js.map} +0 -0
  246. /package/dist/{hover-6JVJFGO7.js.map → hover-NOCOTR6N.js.map} +0 -0
  247. /package/dist/{html-EVOSPBIT.js.map → html-LXSYP6BT.js.map} +0 -0
  248. /package/dist/{inspector-H57BVUJP.js.map → inspector-62EPCLYB.js.map} +0 -0
  249. /package/dist/{inspector-audit-NQBAJWC7.js.map → inspector-audit-T2IF67RJ.js.map} +0 -0
  250. /package/dist/{inspector-plan-ZDIQVND3.js.map → inspector-plan-KQS6LRMW.js.map} +0 -0
  251. /package/dist/{launch-EK66VQPF.js.map → launch-B5ES6FVS.js.map} +0 -0
  252. /package/dist/{list-KKUKN467.js.map → list-TIZVR6RO.js.map} +0 -0
  253. /package/dist/{list-ADZAQ2IU.js.map → list-XM4BP5GM.js.map} +0 -0
  254. /package/dist/{macro-resolve-6DOQJ7CA.js.map → macro-resolve-TTQZVFIW.js.map} +0 -0
  255. /package/dist/{native-UPLVQ2SG.js.map → native-J2DFLOLP.js.map} +0 -0
  256. /package/dist/{network-poll-NUL4PDPY.js.map → network-poll-NNSY4W63.js.map} +0 -0
  257. /package/dist/{new-5NKYPEFT.js.map → new-E6VNAC2A.js.map} +0 -0
  258. /package/dist/{open-NR3BPLXV.js.map → open-F55XKMKB.js.map} +0 -0
  259. /package/dist/{perf-HJ36ZI6H.js.map → perf-RE7JE6CP.js.map} +0 -0
  260. /package/dist/{pointer-down-IYTTQWXZ.js.map → pointer-down-BCBPC5FJ.js.map} +0 -0
  261. /package/dist/{pointer-drag-A2YC5PWI.js.map → pointer-drag-QK7KGF7W.js.map} +0 -0
  262. /package/dist/{pointer-move-W5K5FUI4.js.map → pointer-move-VFAZQAXA.js.map} +0 -0
  263. /package/dist/{pointer-up-6GWVO64Y.js.map → pointer-up-FA5WE6LS.js.map} +0 -0
  264. /package/dist/{press-A3V5WB3S.js.map → press-TNRHNDSW.js.map} +0 -0
  265. /package/dist/{product-video-52REKWF3.js.map → product-video-UEANMZ2U.js.map} +0 -0
  266. /package/dist/{providers-IMFYMMHQ.js.map → providers-AMCNWZUL.js.map} +0 -0
  267. /package/dist/{research-WB6BBCDD.js.map → research-YFY7WJSZ.js.map} +0 -0
  268. /package/dist/{review-BGWVY4RA.js.map → review-NHOPLAT7.js.map} +0 -0
  269. /package/dist/{review-desktop-LEORC5VS.js.map → review-desktop-OFWPDYGD.js.map} +0 -0
  270. /package/dist/{rpc-4TSKSFGC.js.map → rpc-TVVQPUOL.js.map} +0 -0
  271. /package/dist/{run-3NBLVWXD.js.map → run-OCBEZRDW.js.map} +0 -0
  272. /package/dist/{screencast-start-UZVIT3IN.js.map → screencast-start-GTSDA33J.js.map} +0 -0
  273. /package/dist/{screencast-stop-NOSJSIUO.js.map → screencast-stop-FYBUIXAA.js.map} +0 -0
  274. /package/dist/{screenshot-LARG4JQG.js.map → screenshot-OEYRT3SP.js.map} +0 -0
  275. /package/dist/{scroll-VNFMV6TW.js.map → scroll-35OFEFC5.js.map} +0 -0
  276. /package/dist/{scroll-into-view-VYRT3JPT.js.map → scroll-into-view-UQ5RAWIX.js.map} +0 -0
  277. /package/dist/{select-KJTUZDVO.js.map → select-K56QELVZ.js.map} +0 -0
  278. /package/dist/{shopping-DTXHVQ2X.js.map → shopping-FJG7XB4Q.js.map} +0 -0
  279. /package/dist/{skill-lifecycle-5UAZGKSN.js.map → skill-lifecycle-OWZYBPFS.js.map} +0 -0
  280. /package/dist/{skills-NSXDX6YM.js.map → skills-KHMRNOE4.js.map} +0 -0
  281. /package/dist/{snapshot-3XQMCMRJ.js.map → snapshot-W7RKVZEI.js.map} +0 -0
  282. /package/dist/{status-OXSYA5XD.js.map → status-R4EV4TWO.js.map} +0 -0
  283. /package/dist/{status-capabilities-P4KDSE2Y.js.map → status-capabilities-XD3RGLKF.js.map} +0 -0
  284. /package/dist/{text-V3B7UVIH.js.map → text-TANLFZ4O.js.map} +0 -0
  285. /package/dist/{type-IYBN3ZLR.js.map → type-Y2Y7LX7Y.js.map} +0 -0
  286. /package/dist/{uncheck-SG737EGI.js.map → uncheck-6REVUUB2.js.map} +0 -0
  287. /package/dist/{uninstall-KYKGJAX7.js.map → uninstall-FW5ORBIN.js.map} +0 -0
  288. /package/dist/{update-skill-modes-BVX7IVMW.js.map → update-skill-modes-3ULKJK3Y.js.map} +0 -0
  289. /package/dist/{upload-KH6ZABJA.js.map → upload-GGZC5UQP.js.map} +0 -0
  290. /package/dist/{use-7YDKO3U4.js.map → use-B4Q7CFG2.js.map} +0 -0
  291. /package/dist/{value-RZBWSKKM.js.map → value-DHOHO55D.js.map} +0 -0
  292. /package/dist/{visible-BSFTAKXR.js.map → visible-S5BTWYNH.js.map} +0 -0
  293. /package/dist/{wait-TMTEAYOP.js.map → wait-WV6NZUKL.js.map} +0 -0
  294. /package/dist/{windows-HIZ23OHS.js.map → windows-GKE36DJQ.js.map} +0 -0
@@ -2,19 +2,21 @@ import {
2
2
  discoverExtensionId,
3
3
  getNativeStatusSnapshot,
4
4
  installNativeHost
5
- } from "./chunk-6PVZ2ABC.js";
5
+ } from "./chunk-L3YNUGYF.js";
6
6
  import {
7
7
  parseNumberFlag
8
- } from "./chunk-RPXWUCQQ.js";
8
+ } from "./chunk-SKFB5ICF.js";
9
9
  import {
10
+ DAEMON_FINGERPRINT_MISMATCH_REASON,
11
+ buildDaemonFingerprintMismatchMessage,
10
12
  createDaemonStopHeaders,
11
13
  fetchDaemonStatus,
12
14
  fetchWithTimeout,
13
15
  isCurrentDaemonFingerprint,
14
16
  readDaemonMetadata,
15
17
  startDaemon
16
- } from "./chunk-COAOWH3G.js";
17
- import "./chunk-QOMWCRE3.js";
18
+ } from "./chunk-ZOVMMQO6.js";
19
+ import "./chunk-HBK56JST.js";
18
20
  import {
19
21
  loadGlobalConfig
20
22
  } from "./chunk-MX3NFLCE.js";
@@ -23,15 +25,15 @@ import {
23
25
  EXIT_DISCONNECTED,
24
26
  EXIT_EXECUTION,
25
27
  createUsageError
26
- } from "./chunk-IPE7TF2P.js";
27
- import "./chunk-STGGGVYT.js";
28
- import "./chunk-3ILXPKSJ.js";
28
+ } from "./chunk-7BNU6DFI.js";
29
+ import "./chunk-QMHKAFYX.js";
30
+ import "./chunk-BUVYTJZR.js";
29
31
  import "./chunk-TBUCZX4A.js";
30
32
  import "./chunk-Y2KL55OG.js";
31
33
  import "./chunk-5SWZDVOW.js";
32
- import "./chunk-4BEJVZRK.js";
34
+ import "./chunk-RO3SMXF3.js";
33
35
  import "./chunk-S5KZQJJI.js";
34
- import "./chunk-KZ2IXVQT.js";
36
+ import "./chunk-2X4JFMKJ.js";
35
37
  import "./chunk-WHQZBUNY.js";
36
38
  import "./chunk-FUSXMW3G.js";
37
39
 
@@ -244,11 +246,14 @@ function isServeProcessRunningByPid(pid) {
244
246
  });
245
247
  }
246
248
  function buildStaleStopMessage(metadata) {
247
- const pid = isPositivePid(metadata.pid) ? ` pid=${metadata.pid}` : "";
248
- return `Daemon rejected stale stop request for 127.0.0.1:${metadata.port}${pid}. Run \`opendevbrowser status --daemon\` to inspect the active daemon, then restart from the current install if needed.`;
249
+ return buildDaemonFingerprintMismatchMessage({
250
+ label: "Daemon",
251
+ port: metadata.port,
252
+ pid: metadata.pid
253
+ });
249
254
  }
250
255
  function buildProtectedMismatchMessage(port, status) {
251
- return `Daemon on 127.0.0.1:${port} pid=${status.pid} is protected by a different opendevbrowser build. Run \`opendevbrowser status --daemon\` to inspect it, then restart from the current install.`;
256
+ return buildDaemonFingerprintMismatchMessage({ label: "Daemon", port, pid: status.pid });
252
257
  }
253
258
  async function waitForDaemonShutdown(port, token) {
254
259
  for (let attempt = 0; attempt < DAEMON_SHUTDOWN_POLL_ATTEMPTS; attempt += 1) {
@@ -292,13 +297,16 @@ async function stopMismatchedDaemon(port, daemon) {
292
297
  return null;
293
298
  }
294
299
  const message = error instanceof Error ? error.message : String(error);
295
- return `Failed to stop mismatched daemon on 127.0.0.1:${port}: ${message}.`;
300
+ return { message: `Failed to stop mismatched daemon on 127.0.0.1:${port}: ${message}.` };
296
301
  }
297
302
  if (response.status === 409) {
298
- return buildProtectedMismatchMessage(port, daemon.status);
303
+ return {
304
+ message: buildProtectedMismatchMessage(port, daemon.status),
305
+ reason: DAEMON_FINGERPRINT_MISMATCH_REASON
306
+ };
299
307
  }
300
308
  if (!response.ok) {
301
- return `Failed to stop mismatched daemon on 127.0.0.1:${port}: stop returned ${response.status}.`;
309
+ return { message: `Failed to stop mismatched daemon on 127.0.0.1:${port}: stop returned ${response.status}.` };
302
310
  }
303
311
  if (await waitForDaemonShutdown(port, daemon.token)) {
304
312
  return null;
@@ -306,7 +314,7 @@ async function stopMismatchedDaemon(port, daemon) {
306
314
  if (await terminateServeProcessByPid(daemon.status.pid)) {
307
315
  return null;
308
316
  }
309
- return `Timed out waiting for mismatched daemon on 127.0.0.1:${port} to stop.`;
317
+ return { message: `Timed out waiting for mismatched daemon on 127.0.0.1:${port} to stop.` };
310
318
  }
311
319
  async function prepareExistingDaemon(port, daemon) {
312
320
  if (isCurrentDaemonFingerprint(daemon.status.fingerprint)) {
@@ -350,7 +358,13 @@ async function runServe(args) {
350
358
  headers: createDaemonStopHeaders(metadata2.token, "serve.stop")
351
359
  });
352
360
  if (response.status === 409) {
353
- return { success: false, message: buildStaleStopMessage(metadata2), exitCode: EXIT_EXECUTION };
361
+ return {
362
+ success: false,
363
+ message: buildStaleStopMessage(metadata2),
364
+ reason: DAEMON_FINGERPRINT_MISMATCH_REASON,
365
+ data: { reason: DAEMON_FINGERPRINT_MISMATCH_REASON },
366
+ exitCode: EXIT_EXECUTION
367
+ };
354
368
  }
355
369
  if (!response.ok) {
356
370
  throw new Error(`Stop failed (${response.status})`);
@@ -383,9 +397,14 @@ async function runServe(args) {
383
397
  const staleDaemonPids = /* @__PURE__ */ new Set();
384
398
  const staleCleared = () => staleDaemonPids.size;
385
399
  if (existingDaemon) {
386
- const mismatchMessage = await prepareExistingDaemon(requestedPort, existingDaemon);
387
- if (mismatchMessage) {
388
- return { success: false, message: mismatchMessage, exitCode: EXIT_EXECUTION };
400
+ const mismatchFailure = await prepareExistingDaemon(requestedPort, existingDaemon);
401
+ if (mismatchFailure) {
402
+ return {
403
+ success: false,
404
+ message: mismatchFailure.message,
405
+ ...mismatchFailure.reason ? { reason: mismatchFailure.reason, data: { reason: mismatchFailure.reason } } : {},
406
+ exitCode: EXIT_EXECUTION
407
+ };
389
408
  }
390
409
  if (isCurrentDaemonFingerprint(existingDaemon.status.fingerprint)) {
391
410
  for (const pid of await cleanupCompetingServeProcesses(requestedPort, existingDaemon.status.pid)) {
@@ -438,9 +457,14 @@ async function runServe(args) {
438
457
  }
439
458
  const runningDaemon = await resolveExistingDaemon(requestedPort, tokenCandidates);
440
459
  if (runningDaemon) {
441
- const mismatchMessage = await prepareExistingDaemon(requestedPort, runningDaemon);
442
- if (mismatchMessage) {
443
- return { success: false, message: mismatchMessage, exitCode: EXIT_EXECUTION };
460
+ const mismatchFailure = await prepareExistingDaemon(requestedPort, runningDaemon);
461
+ if (mismatchFailure) {
462
+ return {
463
+ success: false,
464
+ message: mismatchFailure.message,
465
+ ...mismatchFailure.reason ? { reason: mismatchFailure.reason, data: { reason: mismatchFailure.reason } } : {},
466
+ exitCode: EXIT_EXECUTION
467
+ };
444
468
  }
445
469
  if (isCurrentDaemonFingerprint(runningDaemon.status.fingerprint)) {
446
470
  return buildAlreadyRunningResult(requestedPort, runningDaemon.status, config.relayPort, staleCleared());
@@ -495,4 +519,4 @@ ${nativeMessage}${staleNote}` : `${baseMessage}${staleNote}`;
495
519
  export {
496
520
  runServe
497
521
  };
498
- //# sourceMappingURL=serve-EV7K4HKR.js.map
522
+ //# sourceMappingURL=serve-5UJ3VMWC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/serve.ts"],"sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport type { ParsedArgs } from \"../args\";\nimport {\n createDaemonStopHeaders,\n isCurrentDaemonFingerprint,\n readDaemonMetadata,\n startDaemon\n} from \"../daemon\";\nimport { loadGlobalConfig } from \"../../config\";\nimport { createUsageError, EXIT_DISCONNECTED, EXIT_EXECUTION } from \"../errors\";\nimport { parseNumberFlag } from \"../utils/parse\";\nimport { fetchWithTimeout } from \"../utils/http\";\nimport {\n buildDaemonFingerprintMismatchMessage,\n DAEMON_FINGERPRINT_MISMATCH_REASON\n} from \"../daemon-mismatch\";\nimport { discoverExtensionId, getNativeStatusSnapshot, installNativeHost } from \"./native\";\nimport type { DaemonStatusPayload } from \"../daemon-status\";\nimport { fetchDaemonStatus } from \"../daemon-status\";\n\ntype ServeArgs = {\n port?: number;\n token?: string;\n stop: boolean;\n};\n\ntype DaemonHandle = {\n stop: () => Promise<void>;\n};\n\ntype ExistingDaemon = {\n token: string;\n status: DaemonStatusPayload;\n};\n\ntype ExistingDaemonPreparationFailure = {\n message: string;\n reason?: string;\n};\n\ntype ServeProcessSnapshot = {\n pid: number;\n uid: number | null;\n command: string;\n};\n\nlet daemonHandle: DaemonHandle | null = null;\nconst PS_MAX_BUFFER = 8 * 1024 * 1024;\nconst DAEMON_SHUTDOWN_POLL_ATTEMPTS = 10;\nconst DAEMON_SHUTDOWN_POLL_DELAY_MS = 100;\nconst DAEMON_SHUTDOWN_STATUS_TIMEOUT_MS = 250;\nconst DAEMON_STOP_TIMEOUT_MS = 1000;\nconst PROCESS_TERMINATE_GRACE_MS = 250;\nconst MIN_PORT = 1;\nconst MAX_PORT = 65535;\nconst SERVE_COMMAND_PATTERN = /(?:^|\\s)serve(?=\\s|$)/;\nconst SERVE_PORT_SPLIT_PATTERN = /(?:^|\\s)--port\\s+(\\d+)(?=\\s|$)/;\nconst SERVE_PORT_EQUALS_PATTERN = /(?:^|\\s)--port=(\\d+)(?=\\s|$)/;\nconst SERVE_STOP_PATTERN = /(?:^|\\s)--stop(?:\\s|$)/;\nconst CURRENT_UID = typeof process.getuid === \"function\" ? process.getuid() : null;\nconst CURRENT_EXECUTABLE = process.execPath;\nconst CURRENT_CLI_ENTRYPOINT = process.argv[1] ?? \"\";\n\nfunction resolveTokenCandidates(\n requestedToken: string | undefined,\n metadataToken: string | undefined,\n configToken: string | undefined\n): string[] {\n return Array.from(new Set([requestedToken, metadataToken, configToken].filter((token): token is string => (\n typeof token === \"string\" && token.trim().length > 0\n ))));\n}\n\nasync function resolveExistingDaemon(\n port: number,\n tokens: string[]\n): Promise<ExistingDaemon | null> {\n for (const token of tokens) {\n const status = await fetchDaemonStatus(port, token);\n if (status?.ok) {\n return { token, status };\n }\n }\n return null;\n}\n\nfunction isPositivePid(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value > 0;\n}\n\nfunction parseServeArgs(rawArgs: string[]): ServeArgs {\n const parsed: ServeArgs = { stop: false };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--stop\") {\n parsed.stop = true;\n continue;\n }\n if (arg === \"--daemon\") {\n throw createUsageError(\"`serve --daemon` is not supported. Use `serve` for foreground mode, `daemon install` for autostart, or `status --daemon` to inspect the daemon.\");\n }\n if (arg === \"--port\") {\n const value = rawArgs[i + 1];\n if (!value) {\n throw createUsageError(\"Missing value for --port\");\n }\n parsed.port = parseNumberFlag(value, \"--port\", { min: MIN_PORT, max: MAX_PORT });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--port=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) {\n throw createUsageError(\"Missing value for --port\");\n }\n parsed.port = parseNumberFlag(value, \"--port\", { min: MIN_PORT, max: MAX_PORT });\n continue;\n }\n if (arg === \"--token\") {\n const value = rawArgs[i + 1];\n if (!value) {\n throw createUsageError(\"Missing value for --token\");\n }\n parsed.token = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--token=\")) {\n const value = arg.split(\"=\", 2)[1];\n if (!value) {\n throw createUsageError(\"Missing value for --token\");\n }\n parsed.token = value;\n continue;\n }\n }\n return parsed;\n}\n\nfunction parseServeProcessSnapshot(line: string): ServeProcessSnapshot | null {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n return null;\n }\n const match = trimmed.match(/^(\\d+)(?:\\s+(\\d+))?\\s+(.*)$/);\n if (!match) {\n return null;\n }\n const pid = Number.parseInt(match[1] ?? \"\", 10);\n if (!Number.isInteger(pid) || pid <= 0) {\n return null;\n }\n const rawUid = match[2];\n const parsedUid = typeof rawUid === \"string\" && rawUid.length > 0\n ? Number.parseInt(rawUid, 10)\n : null;\n const command = (match[3] ?? \"\").trim();\n if (command.length === 0) {\n return null;\n }\n return {\n pid,\n uid: typeof parsedUid === \"number\" && Number.isInteger(parsedUid) && parsedUid >= 0 ? parsedUid : null,\n command\n };\n}\n\nfunction parseServeCommandPort(command: string): number | null {\n const rawPort = command.match(SERVE_PORT_EQUALS_PATTERN)?.[1]\n ?? command.match(SERVE_PORT_SPLIT_PATTERN)?.[1];\n if (!rawPort) {\n return null;\n }\n const port = Number.parseInt(rawPort, 10);\n return Number.isInteger(port) && port >= MIN_PORT && port <= MAX_PORT ? port : null;\n}\n\nfunction listServeProcessSnapshots(): ServeProcessSnapshot[] {\n const result = spawnSync(\"ps\", [\"-axww\", \"-o\", \"pid=,uid=,command=\"], {\n encoding: \"utf-8\",\n maxBuffer: PS_MAX_BUFFER\n });\n if ((result.status ?? 1) !== 0) {\n return [];\n }\n return String(result.stdout ?? \"\")\n .split(\"\\n\")\n .map((line) => parseServeProcessSnapshot(line))\n .filter((snapshot): snapshot is ServeProcessSnapshot => snapshot !== null);\n}\n\nfunction readServeProcessEntrypoint(command: string): string | null {\n const tokens = command.trim().split(/\\s+/u);\n const executable = tokens[0] ?? \"\";\n if (executable.length === 0) {\n return null;\n }\n return executable === CURRENT_EXECUTABLE ? (tokens[1] ?? null) : executable;\n}\n\nfunction isCurrentEntrypointServeProcess(snapshot: ServeProcessSnapshot): boolean {\n if (CURRENT_UID === null || snapshot.uid === null || snapshot.uid !== CURRENT_UID) {\n return false;\n }\n const entrypoint = readServeProcessEntrypoint(snapshot.command);\n if (!CURRENT_CLI_ENTRYPOINT || entrypoint !== CURRENT_CLI_ENTRYPOINT) {\n return false;\n }\n if (!SERVE_COMMAND_PATTERN.test(snapshot.command)) {\n return false;\n }\n return !SERVE_STOP_PATTERN.test(snapshot.command);\n}\n\nfunction isRequestedPortServeProcess(snapshot: ServeProcessSnapshot, requestedPort: number): boolean {\n return isCurrentEntrypointServeProcess(snapshot)\n && parseServeCommandPort(snapshot.command) === requestedPort;\n}\n\nasync function terminateProcess(pid: number): Promise<boolean> {\n if (!Number.isInteger(pid) || pid <= 0 || pid === process.pid || pid === process.ppid) {\n return false;\n }\n try {\n process.kill(pid, \"SIGTERM\");\n } catch {\n return false;\n }\n await new Promise((resolve) => setTimeout(resolve, PROCESS_TERMINATE_GRACE_MS));\n try {\n process.kill(pid, 0);\n } catch {\n return true;\n }\n try {\n process.kill(pid, \"SIGKILL\");\n } catch {\n // process may have exited after SIGTERM\n }\n return true;\n}\n\nasync function cleanupCompetingServeProcesses(requestedPort: number, keepPid?: number): Promise<number[]> {\n const candidates = listServeProcessSnapshots().filter((snapshot) => {\n if (!isRequestedPortServeProcess(snapshot, requestedPort)) {\n return false;\n }\n if (snapshot.pid === process.pid || snapshot.pid === process.ppid) {\n return false;\n }\n if (Number.isInteger(keepPid) && snapshot.pid === keepPid) {\n return false;\n }\n return true;\n });\n if (candidates.length === 0) {\n return [];\n }\n\n const clearedPids: number[] = [];\n for (const snapshot of candidates) {\n if (await terminateProcess(snapshot.pid)) {\n clearedPids.push(snapshot.pid);\n }\n }\n\n return clearedPids;\n}\n\nasync function terminateServeProcessByPid(pid?: number): Promise<boolean> {\n if (!isPositivePid(pid)) {\n return false;\n }\n const snapshot = listServeProcessSnapshots().find((item) => item.pid === pid);\n return snapshot ? isCurrentEntrypointServeProcess(snapshot) && await terminateProcess(pid) : false;\n}\n\nfunction isServeProcessRunningByPid(pid?: number): boolean {\n if (!isPositivePid(pid)) {\n return false;\n }\n return listServeProcessSnapshots().some((item) => {\n return item.pid === pid && isCurrentEntrypointServeProcess(item);\n });\n}\n\nfunction buildStaleStopMessage(metadata: NonNullable<ReturnType<typeof readDaemonMetadata>>): string {\n return buildDaemonFingerprintMismatchMessage({\n label: \"Daemon\",\n port: metadata.port,\n pid: metadata.pid\n });\n}\n\nfunction buildProtectedMismatchMessage(port: number, status: DaemonStatusPayload): string {\n return buildDaemonFingerprintMismatchMessage({ label: \"Daemon\", port, pid: status.pid });\n}\n\nasync function waitForDaemonShutdown(port: number, token: string): Promise<boolean> {\n for (let attempt = 0; attempt < DAEMON_SHUTDOWN_POLL_ATTEMPTS; attempt += 1) {\n const status = await fetchDaemonStatus(port, token, { timeoutMs: DAEMON_SHUTDOWN_STATUS_TIMEOUT_MS });\n if (!status?.ok) {\n return true;\n }\n await new Promise((resolve) => setTimeout(resolve, DAEMON_SHUTDOWN_POLL_DELAY_MS));\n }\n return false;\n}\n\nasync function waitForServeProcessExit(pid?: number): Promise<boolean> {\n if (!isPositivePid(pid)) {\n return true;\n }\n for (let attempt = 0; attempt < DAEMON_SHUTDOWN_POLL_ATTEMPTS; attempt += 1) {\n if (!isServeProcessRunningByPid(pid)) {\n return true;\n }\n await new Promise((resolve) => setTimeout(resolve, DAEMON_SHUTDOWN_POLL_DELAY_MS));\n }\n return false;\n}\n\nasync function confirmStoppedDaemon(port: number, token: string, pid?: number): Promise<boolean> {\n const statusStopped = await waitForDaemonShutdown(port, token);\n const processStopped = await waitForServeProcessExit(pid);\n return statusStopped && processStopped;\n}\n\nasync function stopMismatchedDaemon(\n port: number,\n daemon: ExistingDaemon\n): Promise<ExistingDaemonPreparationFailure | null> {\n let response: Response;\n try {\n response = await fetchWithTimeout(`http://127.0.0.1:${port}/stop`, {\n method: \"POST\",\n headers: createDaemonStopHeaders(daemon.token, \"serve.upgrade\")\n }, DAEMON_STOP_TIMEOUT_MS);\n } catch (error) {\n const status = await fetchDaemonStatus(port, daemon.token, {\n timeoutMs: DAEMON_SHUTDOWN_STATUS_TIMEOUT_MS\n });\n if (!status?.ok) {\n return null;\n }\n const message = error instanceof Error ? error.message : String(error);\n return { message: `Failed to stop mismatched daemon on 127.0.0.1:${port}: ${message}.` };\n }\n if (response.status === 409) {\n return {\n message: buildProtectedMismatchMessage(port, daemon.status),\n reason: DAEMON_FINGERPRINT_MISMATCH_REASON\n };\n }\n if (!response.ok) {\n return { message: `Failed to stop mismatched daemon on 127.0.0.1:${port}: stop returned ${response.status}.` };\n }\n if (await waitForDaemonShutdown(port, daemon.token)) {\n return null;\n }\n if (await terminateServeProcessByPid(daemon.status.pid)) {\n return null;\n }\n return { message: `Timed out waiting for mismatched daemon on 127.0.0.1:${port} to stop.` };\n}\n\nasync function prepareExistingDaemon(\n port: number,\n daemon: ExistingDaemon\n): Promise<ExistingDaemonPreparationFailure | null> {\n if (isCurrentDaemonFingerprint(daemon.status.fingerprint)) {\n return null;\n }\n return await stopMismatchedDaemon(port, daemon);\n}\n\nfunction buildAlreadyRunningResult(\n port: number,\n status: DaemonStatusPayload,\n fallbackRelayPort: number,\n clearedCount: number\n) {\n const relayPort = status.relay.port ?? fallbackRelayPort;\n const staleNote = clearedCount > 0 ? `\\nCleared ${clearedCount} stale daemon process${clearedCount === 1 ? \"\" : \"es\"}.` : \"\";\n return {\n success: true,\n message: `Daemon already running on 127.0.0.1:${port} (pid=${status.pid}, relay ${relayPort}).${staleNote}`,\n data: {\n port,\n pid: status.pid,\n relayPort,\n alreadyRunning: true,\n staleDaemonsCleared: clearedCount,\n relay: status.relay\n },\n exitCode: null\n };\n}\n\nexport async function runServe(args: ParsedArgs) {\n const serveArgs = parseServeArgs(args.rawArgs);\n\n if (serveArgs.stop) {\n const metadata = readDaemonMetadata();\n if (!metadata) {\n if (daemonHandle) {\n await daemonHandle.stop();\n daemonHandle = null;\n return { success: true, message: \"Daemon stopped.\" };\n }\n return { success: false, message: \"Daemon not running.\", exitCode: EXIT_DISCONNECTED };\n }\n\n try {\n const response = await fetchWithTimeout(`http://127.0.0.1:${metadata.port}/stop`, {\n method: \"POST\",\n headers: createDaemonStopHeaders(metadata.token, \"serve.stop\")\n });\n if (response.status === 409) {\n return {\n success: false,\n message: buildStaleStopMessage(metadata),\n reason: DAEMON_FINGERPRINT_MISMATCH_REASON,\n data: { reason: DAEMON_FINGERPRINT_MISMATCH_REASON },\n exitCode: EXIT_EXECUTION\n };\n }\n if (!response.ok) {\n throw new Error(`Stop failed (${response.status})`);\n }\n if (await confirmStoppedDaemon(metadata.port, metadata.token, metadata.pid)) {\n return { success: true, message: \"Daemon stopped.\" };\n }\n if (await terminateServeProcessByPid(metadata.pid)) {\n return { success: true, message: \"Daemon stopped.\" };\n }\n return {\n success: false,\n message: `Timed out waiting for daemon on 127.0.0.1:${metadata.port} to stop.`,\n exitCode: EXIT_EXECUTION\n };\n } catch (error) {\n if (await terminateServeProcessByPid(metadata.pid)) {\n return { success: true, message: \"Daemon stopped.\" };\n }\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, message: `Failed to stop daemon: ${message}`, exitCode: EXIT_EXECUTION };\n }\n }\n\n const config = loadGlobalConfig();\n const requestedPort = serveArgs.port ?? config.daemonPort;\n const metadata = readDaemonMetadata();\n const metadataToken = metadata?.port === requestedPort ? metadata.token : undefined;\n const tokenCandidates = resolveTokenCandidates(serveArgs.token, metadataToken, config.daemonToken);\n const existingDaemon = await resolveExistingDaemon(requestedPort, tokenCandidates);\n const staleDaemonPids = new Set<number>();\n const staleCleared = () => staleDaemonPids.size;\n\n if (existingDaemon) {\n const mismatchFailure = await prepareExistingDaemon(requestedPort, existingDaemon);\n if (mismatchFailure) {\n return {\n success: false,\n message: mismatchFailure.message,\n ...(mismatchFailure.reason ? { reason: mismatchFailure.reason, data: { reason: mismatchFailure.reason } } : {}),\n exitCode: EXIT_EXECUTION\n };\n }\n if (isCurrentDaemonFingerprint(existingDaemon.status.fingerprint)) {\n for (const pid of await cleanupCompetingServeProcesses(requestedPort, existingDaemon.status.pid)) {\n staleDaemonPids.add(pid);\n }\n return buildAlreadyRunningResult(requestedPort, existingDaemon.status, config.relayPort, staleCleared());\n }\n }\n\n for (const pid of await cleanupCompetingServeProcesses(requestedPort)) {\n staleDaemonPids.add(pid);\n }\n\n let nativeStatus = getNativeStatusSnapshot();\n let nativeMessage: string | null = null;\n if (!nativeStatus.installed || nativeStatus.mismatch) {\n const discovered = discoverExtensionId();\n const extensionId = nativeStatus.expectedExtensionId ?? config.nativeExtensionId ?? discovered.extensionId ?? null;\n const usedDiscovery = nativeStatus.expectedExtensionSource !== \"config\" && Boolean(extensionId);\n const previousExtensionId = nativeStatus.extensionId;\n if (extensionId) {\n const installResult = installNativeHost(extensionId);\n if (installResult.success) {\n const suffix = usedDiscovery && discovered.matchedBy ? ` (auto-detected by ${discovered.matchedBy})` : \"\";\n nativeMessage = nativeStatus.mismatch && previousExtensionId\n ? `Native host reinstalled for extension ${extensionId} (replacing stale ${previousExtensionId}).${suffix}`\n : `${installResult.message ?? \"Native host installed.\"}${suffix}`;\n nativeStatus = getNativeStatusSnapshot();\n } else {\n nativeMessage = nativeStatus.mismatch\n ? `Native host reinstall skipped: ${installResult.message ?? \"unknown error\"}`\n : `Native host install skipped: ${installResult.message ?? \"unknown error\"}`;\n }\n } else if (nativeStatus.mismatch && previousExtensionId) {\n nativeMessage = `Native host targets stale extension ${previousExtensionId}, but no current extension id could be resolved for reinstall.`;\n } else {\n nativeMessage = \"Native host not installed. Set nativeExtensionId in opendevbrowser.jsonc to auto-install.\";\n }\n }\n\n let handle: Awaited<ReturnType<typeof startDaemon>> | null = null;\n let startError: unknown = null;\n for (let attempt = 0; attempt < 2; attempt += 1) {\n try {\n handle = await startDaemon({\n port: serveArgs.port,\n token: serveArgs.token,\n config\n });\n startError = null;\n break;\n } catch (error) {\n startError = error;\n const message = error instanceof Error ? error.message : String(error);\n if (!message.includes(\"EADDRINUSE\") && !message.includes(\"in use\")) {\n break;\n }\n const runningDaemon = await resolveExistingDaemon(requestedPort, tokenCandidates);\n if (runningDaemon) {\n const mismatchFailure = await prepareExistingDaemon(requestedPort, runningDaemon);\n if (mismatchFailure) {\n return {\n success: false,\n message: mismatchFailure.message,\n ...(mismatchFailure.reason ? { reason: mismatchFailure.reason, data: { reason: mismatchFailure.reason } } : {}),\n exitCode: EXIT_EXECUTION\n };\n }\n if (isCurrentDaemonFingerprint(runningDaemon.status.fingerprint)) {\n return buildAlreadyRunningResult(requestedPort, runningDaemon.status, config.relayPort, staleCleared());\n }\n }\n if (attempt === 0) {\n let clearedNewPid = false;\n for (const pid of await cleanupCompetingServeProcesses(requestedPort)) {\n const previousSize = staleDaemonPids.size;\n staleDaemonPids.add(pid);\n if (staleDaemonPids.size > previousSize) {\n clearedNewPid = true;\n }\n }\n if (clearedNewPid) {\n continue;\n }\n }\n break;\n }\n }\n\n if (!handle) {\n const message = startError instanceof Error ? startError.message : String(startError);\n if (message.includes(\"EADDRINUSE\") || message.includes(\"in use\")) {\n return {\n success: false,\n message: `Daemon port ${requestedPort} is already in use by another process. If this is an existing daemon, run \\`opendevbrowser status --daemon\\` or \\`opendevbrowser serve --stop\\`.`,\n exitCode: EXIT_EXECUTION\n };\n }\n return {\n success: false,\n message: `Failed to start daemon: ${message}`,\n exitCode: EXIT_EXECUTION\n };\n }\n\n daemonHandle = handle;\n const { state } = handle;\n\n const baseMessage = `Daemon running on 127.0.0.1:${state.port} (relay ${state.relayPort})`;\n const clearedCount = staleCleared();\n const staleNote = clearedCount > 0 ? `\\nCleared ${clearedCount} stale daemon process${clearedCount === 1 ? \"\" : \"es\"}.` : \"\";\n const message = nativeMessage\n ? `${baseMessage}\\n${nativeMessage}${staleNote}`\n : `${baseMessage}${staleNote}`;\n\n return {\n success: true,\n message,\n data: { port: state.port, pid: state.pid, relayPort: state.relayPort, native: nativeStatus, staleDaemonsCleared: clearedCount },\n exitCode: null\n };\n}\n"],"mappings":"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","names":["metadata","message"]}
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  resolveWorkflowOutputDirFlag
3
- } from "./chunk-GQJ5S3BL.js";
3
+ } from "./chunk-P5K3ZIPI.js";
4
4
  import "./chunk-RJNI3BHT.js";
5
5
  import {
6
6
  parseNumberFlag
7
- } from "./chunk-RPXWUCQQ.js";
7
+ } from "./chunk-SKFB5ICF.js";
8
8
  import {
9
9
  DEFAULT_WORKFLOW_TRANSPORT_TIMEOUT_MS
10
10
  } from "./chunk-OW5HMYMI.js";
11
11
  import {
12
12
  callDaemon
13
- } from "./chunk-MD655IPO.js";
14
- import "./chunk-COAOWH3G.js";
15
- import "./chunk-QOMWCRE3.js";
13
+ } from "./chunk-XDLJE3RJ.js";
14
+ import "./chunk-ZOVMMQO6.js";
15
+ import "./chunk-HBK56JST.js";
16
16
  import "./chunk-MX3NFLCE.js";
17
17
  import "./chunk-ASMHEEKY.js";
18
18
  import {
@@ -20,17 +20,17 @@ import {
20
20
  } from "./chunk-37VSRUW4.js";
21
21
  import {
22
22
  createUsageError
23
- } from "./chunk-IPE7TF2P.js";
24
- import "./chunk-STGGGVYT.js";
25
- import "./chunk-3ILXPKSJ.js";
23
+ } from "./chunk-7BNU6DFI.js";
24
+ import "./chunk-QMHKAFYX.js";
25
+ import "./chunk-BUVYTJZR.js";
26
26
  import "./chunk-TBUCZX4A.js";
27
27
  import "./chunk-Y2KL55OG.js";
28
28
  import "./chunk-5SWZDVOW.js";
29
29
  import {
30
30
  isChallengeAutomationMode
31
- } from "./chunk-4BEJVZRK.js";
31
+ } from "./chunk-RO3SMXF3.js";
32
32
  import "./chunk-S5KZQJJI.js";
33
- import "./chunk-KZ2IXVQT.js";
33
+ import "./chunk-2X4JFMKJ.js";
34
34
  import "./chunk-WHQZBUNY.js";
35
35
  import "./chunk-FUSXMW3G.js";
36
36
 
@@ -270,4 +270,4 @@ export {
270
270
  __test__,
271
271
  runShoppingCommand
272
272
  };
273
- //# sourceMappingURL=shopping-DTXHVQ2X.js.map
273
+ //# sourceMappingURL=shopping-FJG7XB4Q.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  createNoOpSkillRemovalResult
3
- } from "./chunk-KDSNXS6N.js";
3
+ } from "./chunk-ZMNEWS7A.js";
4
4
  import "./chunk-7THCPS52.js";
5
- import "./chunk-3ILXPKSJ.js";
5
+ import "./chunk-BUVYTJZR.js";
6
6
  import "./chunk-TBUCZX4A.js";
7
7
 
8
8
  // src/cli/skill-lifecycle.ts
@@ -86,4 +86,4 @@ export {
86
86
  buildUninstallCommandResult,
87
87
  buildUpdateCommandResult
88
88
  };
89
- //# sourceMappingURL=skill-lifecycle-5UAZGKSN.js.map
89
+ //# sourceMappingURL=skill-lifecycle-OWZYBPFS.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bundled-skill-directories.d.ts","sourceRoot":"","sources":["../../src/skills/bundled-skill-directories.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,uBAAuB,EAAE,qBAAqB,EAU1D,CAAC;AAMF,wBAAgB,2BAA2B,IAAI,qBAAqB,EAAE,CAErE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAEnF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD"}
1
+ {"version":3,"file":"bundled-skill-directories.d.ts","sourceRoot":"","sources":["../../src/skills/bundled-skill-directories.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,uBAAuB,EAAE,qBAAqB,EAW1D,CAAC;AAMF,wBAAgB,2BAA2B,IAAI,qBAAqB,EAAE,CAErE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAEnF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD"}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SkillLoader
3
- } from "../chunk-STGGGVYT.js";
4
- import "../chunk-3ILXPKSJ.js";
3
+ } from "../chunk-QMHKAFYX.js";
4
+ import "../chunk-BUVYTJZR.js";
5
5
  export {
6
6
  SkillLoader
7
7
  };
@@ -8,9 +8,9 @@ import {
8
8
  removeBundledSkillsForTargets,
9
9
  syncBundledSkills,
10
10
  syncBundledSkillsForTargets
11
- } from "./chunk-KDSNXS6N.js";
11
+ } from "./chunk-ZMNEWS7A.js";
12
12
  import "./chunk-7THCPS52.js";
13
- import "./chunk-3ILXPKSJ.js";
13
+ import "./chunk-BUVYTJZR.js";
14
14
  import "./chunk-TBUCZX4A.js";
15
15
  export {
16
16
  createNoOpSkillRemovalResult,
@@ -23,4 +23,4 @@ export {
23
23
  syncBundledSkills,
24
24
  syncBundledSkillsForTargets
25
25
  };
26
- //# sourceMappingURL=skills-NSXDX6YM.js.map
26
+ //# sourceMappingURL=skills-KHMRNOE4.js.map
@@ -2,28 +2,28 @@ import "./chunk-RJNI3BHT.js";
2
2
  import {
3
3
  parseNumberFlag,
4
4
  parseOptionalStringFlag
5
- } from "./chunk-RPXWUCQQ.js";
5
+ } from "./chunk-SKFB5ICF.js";
6
6
  import {
7
7
  DEFAULT_SNAPSHOT_TRANSPORT_TIMEOUT_MS
8
8
  } from "./chunk-OW5HMYMI.js";
9
9
  import {
10
10
  callDaemon
11
- } from "./chunk-MD655IPO.js";
12
- import "./chunk-COAOWH3G.js";
13
- import "./chunk-QOMWCRE3.js";
11
+ } from "./chunk-XDLJE3RJ.js";
12
+ import "./chunk-ZOVMMQO6.js";
13
+ import "./chunk-HBK56JST.js";
14
14
  import "./chunk-MX3NFLCE.js";
15
15
  import "./chunk-ASMHEEKY.js";
16
16
  import {
17
17
  createUsageError
18
- } from "./chunk-IPE7TF2P.js";
19
- import "./chunk-STGGGVYT.js";
20
- import "./chunk-3ILXPKSJ.js";
18
+ } from "./chunk-7BNU6DFI.js";
19
+ import "./chunk-QMHKAFYX.js";
20
+ import "./chunk-BUVYTJZR.js";
21
21
  import "./chunk-TBUCZX4A.js";
22
22
  import "./chunk-Y2KL55OG.js";
23
23
  import "./chunk-5SWZDVOW.js";
24
- import "./chunk-4BEJVZRK.js";
24
+ import "./chunk-RO3SMXF3.js";
25
25
  import "./chunk-S5KZQJJI.js";
26
- import "./chunk-KZ2IXVQT.js";
26
+ import "./chunk-2X4JFMKJ.js";
27
27
  import "./chunk-WHQZBUNY.js";
28
28
  import "./chunk-FUSXMW3G.js";
29
29
 
@@ -110,4 +110,4 @@ async function runSnapshot(args) {
110
110
  export {
111
111
  runSnapshot
112
112
  };
113
- //# sourceMappingURL=snapshot-3XQMCMRJ.js.map
113
+ //# sourceMappingURL=snapshot-W7RKVZEI.js.map
@@ -2,29 +2,31 @@ import "./chunk-RJNI3BHT.js";
2
2
  import {
3
3
  assessNativeStatus,
4
4
  getNativeStatusSnapshot
5
- } from "./chunk-6PVZ2ABC.js";
5
+ } from "./chunk-L3YNUGYF.js";
6
6
  import {
7
7
  callDaemon
8
- } from "./chunk-MD655IPO.js";
8
+ } from "./chunk-XDLJE3RJ.js";
9
9
  import {
10
+ DAEMON_FINGERPRINT_MISMATCH_REASON,
10
11
  DEFAULT_DAEMON_STATUS_FETCH_OPTIONS,
12
+ buildDaemonFingerprintMismatchStatusGuidance,
11
13
  fetchDaemonStatusFromMetadata
12
- } from "./chunk-COAOWH3G.js";
13
- import "./chunk-QOMWCRE3.js";
14
+ } from "./chunk-ZOVMMQO6.js";
15
+ import "./chunk-HBK56JST.js";
14
16
  import "./chunk-MX3NFLCE.js";
15
17
  import "./chunk-ASMHEEKY.js";
16
18
  import {
17
19
  createDisconnectedError,
18
20
  createUsageError
19
- } from "./chunk-IPE7TF2P.js";
20
- import "./chunk-STGGGVYT.js";
21
- import "./chunk-3ILXPKSJ.js";
21
+ } from "./chunk-7BNU6DFI.js";
22
+ import "./chunk-QMHKAFYX.js";
23
+ import "./chunk-BUVYTJZR.js";
22
24
  import "./chunk-TBUCZX4A.js";
23
25
  import "./chunk-Y2KL55OG.js";
24
26
  import "./chunk-5SWZDVOW.js";
25
- import "./chunk-4BEJVZRK.js";
27
+ import "./chunk-RO3SMXF3.js";
26
28
  import "./chunk-S5KZQJJI.js";
27
- import "./chunk-KZ2IXVQT.js";
29
+ import "./chunk-2X4JFMKJ.js";
28
30
  import "./chunk-WHQZBUNY.js";
29
31
  import "./chunk-FUSXMW3G.js";
30
32
 
@@ -103,13 +105,15 @@ async function runStatus(args) {
103
105
  }
104
106
  const nativeStatus = getNativeStatusSnapshot();
105
107
  const nativeAssessment = assessNativeStatus(nativeStatus);
106
- const fingerprintLine = daemonStatus.fingerprintCurrent === false ? "Daemon fingerprint: mismatch with current build" : "Daemon fingerprint: current";
108
+ const daemonFingerprintMismatch = daemonStatus.fingerprintCurrent === false;
109
+ const fingerprintLine = daemonFingerprintMismatch ? "Daemon fingerprint: mismatch with current build" : "Daemon fingerprint: current";
107
110
  const baseLines = [
108
111
  `Daemon OK (pid=${daemonStatus.pid})`,
109
112
  fingerprintLine,
110
113
  `Relay: port=${daemonStatus.relay.port ?? "n/a"} ext=${daemonStatus.relay.extensionConnected ? "on" : "off"} handshake=${daemonStatus.relay.extensionHandshakeComplete ? "on" : "off"} cdp=${daemonStatus.relay.cdpConnected ? "on" : "off"} annotate=${daemonStatus.relay.annotationConnected ? "on" : "off"} ops=${daemonStatus.relay.opsConnected ? "on" : "off"} canvas=${daemonStatus.relay.canvasConnected ? "on" : "off"} pairing=${daemonStatus.relay.pairingRequired ? "on" : "off"} health=${daemonStatus.relay.health?.reason ?? "n/a"}`,
111
114
  `Native: ${nativeAssessment.summary}`,
112
115
  daemonStatus.relay.lastHandshakeError ? `Relay last handshake error: ${daemonStatus.relay.lastHandshakeError.code} (${daemonStatus.relay.lastHandshakeError.message})` : "Relay last handshake error: none",
116
+ ...daemonFingerprintMismatch ? [buildDaemonFingerprintMismatchStatusGuidance()] : [],
113
117
  "Legend: ext=extension websocket, handshake=extension handshake, cdp=active /cdp client, annotate=annotation channel, ops=ops clients, canvas=canvas clients, pairing=token required, health=relay status"
114
118
  ];
115
119
  if (!nativeAssessment.success) {
@@ -123,10 +127,14 @@ async function runStatus(args) {
123
127
  return {
124
128
  success: true,
125
129
  message,
126
- data: { ...daemonStatus, native: nativeStatus }
130
+ data: {
131
+ ...daemonStatus,
132
+ ...daemonFingerprintMismatch ? { reason: DAEMON_FINGERPRINT_MISMATCH_REASON } : {},
133
+ native: nativeStatus
134
+ }
127
135
  };
128
136
  }
129
137
  export {
130
138
  runStatus
131
139
  };
132
- //# sourceMappingURL=status-YUMDP5KY.js.map
140
+ //# sourceMappingURL=status-KHYCLGUD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/session/status.ts","../src/cli/commands/status.ts"],"sourcesContent":["import type { ParsedArgs } from \"../../args\";\nimport { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\n\nfunction parseStatusArgs(rawArgs: string[]): { sessionId?: string } {\n const parsed: { sessionId?: string } = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n}\n\nexport async function runSessionStatus(args: ParsedArgs) {\n const { sessionId } = parseStatusArgs(args.rawArgs);\n if (!sessionId) {\n throw createUsageError(\"Missing --session-id\");\n }\n const result = await callDaemon(\"session.status\", { sessionId });\n return { success: true, message: `Session status: ${sessionId}`, data: result };\n}\n","import type { ParsedArgs } from \"../args\";\nimport { createDisconnectedError, createUsageError } from \"../errors\";\nimport { fetchDaemonStatusFromMetadata } from \"../daemon-status\";\nimport { DEFAULT_DAEMON_STATUS_FETCH_OPTIONS } from \"../daemon-status-policy\";\nimport {\n buildDaemonFingerprintMismatchStatusGuidance,\n DAEMON_FINGERPRINT_MISMATCH_REASON\n} from \"../daemon-mismatch\";\nimport { runSessionStatus } from \"./session/status\";\nimport { assessNativeStatus, getNativeStatusSnapshot } from \"./native\";\n\ntype StatusArgs = {\n sessionId?: string;\n daemon: boolean;\n};\n\nconst parseStatusArgs = (rawArgs: string[]): StatusArgs => {\n const parsed: StatusArgs = { daemon: false };\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--daemon\") {\n parsed.daemon = true;\n continue;\n }\n if (arg === \"--session-id\") {\n const value = rawArgs[i + 1];\n if (!value) throw createUsageError(\"Missing value for --session-id\");\n parsed.sessionId = value;\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--session-id=\")) {\n parsed.sessionId = arg.split(\"=\", 2)[1];\n continue;\n }\n }\n return parsed;\n};\n\nexport async function runStatus(args: ParsedArgs) {\n const { sessionId, daemon } = parseStatusArgs(args.rawArgs);\n if (sessionId && daemon) {\n throw createUsageError(\"Use --session-id or --daemon, not both.\");\n }\n\n if (sessionId) {\n return runSessionStatus(args);\n }\n\n if (!daemon && args.transport === \"native\") {\n const nativeStatus = getNativeStatusSnapshot();\n const assessment = assessNativeStatus(nativeStatus);\n return {\n success: assessment.success,\n message: assessment.message,\n data: nativeStatus,\n exitCode: assessment.exitCode ?? undefined\n };\n }\n\n const daemonStatus = await fetchDaemonStatusFromMetadata(undefined, DEFAULT_DAEMON_STATUS_FETCH_OPTIONS);\n if (!daemonStatus) {\n throw createDisconnectedError(\"Daemon not running. Start with `opendevbrowser serve`.\");\n }\n\n const nativeStatus = getNativeStatusSnapshot();\n const nativeAssessment = assessNativeStatus(nativeStatus);\n const daemonFingerprintMismatch = daemonStatus.fingerprintCurrent === false;\n const fingerprintLine = daemonFingerprintMismatch\n ? \"Daemon fingerprint: mismatch with current build\"\n : \"Daemon fingerprint: current\";\n\n const baseLines = [\n `Daemon OK (pid=${daemonStatus.pid})`,\n fingerprintLine,\n `Relay: port=${daemonStatus.relay.port ?? \"n/a\"} ext=${daemonStatus.relay.extensionConnected ? \"on\" : \"off\"} ` +\n `handshake=${daemonStatus.relay.extensionHandshakeComplete ? \"on\" : \"off\"} ` +\n `cdp=${daemonStatus.relay.cdpConnected ? \"on\" : \"off\"} ` +\n `annotate=${daemonStatus.relay.annotationConnected ? \"on\" : \"off\"} ` +\n `ops=${daemonStatus.relay.opsConnected ? \"on\" : \"off\"} ` +\n `canvas=${daemonStatus.relay.canvasConnected ? \"on\" : \"off\"} ` +\n `pairing=${daemonStatus.relay.pairingRequired ? \"on\" : \"off\"} ` +\n `health=${daemonStatus.relay.health?.reason ?? \"n/a\"}`,\n `Native: ${nativeAssessment.summary}`,\n daemonStatus.relay.lastHandshakeError\n ? `Relay last handshake error: ${daemonStatus.relay.lastHandshakeError.code} (${daemonStatus.relay.lastHandshakeError.message})`\n : \"Relay last handshake error: none\",\n ...(daemonFingerprintMismatch ? [buildDaemonFingerprintMismatchStatusGuidance()] : []),\n \"Legend: ext=extension websocket, handshake=extension handshake, cdp=active /cdp client, annotate=annotation channel, ops=ops clients, canvas=canvas clients, pairing=token required, health=relay status\"\n ];\n if (!nativeAssessment.success) {\n baseLines.splice(4, 0, `Native detail: ${nativeAssessment.message}`);\n }\n const baseMessage = baseLines.join(\"\\n\");\n\n const message = daemon || args.outputFormat !== \"text\"\n ? baseMessage\n : [\n \"Warning: `status` defaults to daemon status. Use --daemon explicitly or --session-id for session status.\",\n baseMessage\n ].join(\"\\n\");\n\n return {\n success: true,\n message,\n data: {\n ...daemonStatus,\n ...(daemonFingerprintMismatch ? { reason: DAEMON_FINGERPRINT_MISMATCH_REASON } : {}),\n native: nativeStatus\n }\n };\n}\n"],"mappings":"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","names":["parseStatusArgs","nativeStatus"]}
@@ -2,24 +2,24 @@ import {
2
2
  callDesktopCommand,
3
3
  desktopCommandResult,
4
4
  parseDesktopTimeoutArgs
5
- } from "./chunk-AHEWXOKY.js";
5
+ } from "./chunk-BUXFIY2P.js";
6
6
  import "./chunk-RJNI3BHT.js";
7
- import "./chunk-RPXWUCQQ.js";
7
+ import "./chunk-SKFB5ICF.js";
8
8
  import "./chunk-OW5HMYMI.js";
9
- import "./chunk-MD655IPO.js";
10
- import "./chunk-COAOWH3G.js";
11
- import "./chunk-QOMWCRE3.js";
9
+ import "./chunk-XDLJE3RJ.js";
10
+ import "./chunk-ZOVMMQO6.js";
11
+ import "./chunk-HBK56JST.js";
12
12
  import "./chunk-MX3NFLCE.js";
13
13
  import "./chunk-ASMHEEKY.js";
14
- import "./chunk-IPE7TF2P.js";
15
- import "./chunk-STGGGVYT.js";
16
- import "./chunk-3ILXPKSJ.js";
14
+ import "./chunk-7BNU6DFI.js";
15
+ import "./chunk-QMHKAFYX.js";
16
+ import "./chunk-BUVYTJZR.js";
17
17
  import "./chunk-TBUCZX4A.js";
18
18
  import "./chunk-Y2KL55OG.js";
19
19
  import "./chunk-5SWZDVOW.js";
20
- import "./chunk-4BEJVZRK.js";
20
+ import "./chunk-RO3SMXF3.js";
21
21
  import "./chunk-S5KZQJJI.js";
22
- import "./chunk-KZ2IXVQT.js";
22
+ import "./chunk-2X4JFMKJ.js";
23
23
  import "./chunk-WHQZBUNY.js";
24
24
  import "./chunk-FUSXMW3G.js";
25
25
 
@@ -32,4 +32,4 @@ async function runDesktopStatus(args) {
32
32
  export {
33
33
  runDesktopStatus
34
34
  };
35
- //# sourceMappingURL=status-OXSYA5XD.js.map
35
+ //# sourceMappingURL=status-R4EV4TWO.js.map
@@ -1,30 +1,30 @@
1
1
  import {
2
2
  parseOptionalChallengeAutomationMode
3
- } from "./chunk-PPUWQKIC.js";
3
+ } from "./chunk-PIFHXKV4.js";
4
4
  import "./chunk-RJNI3BHT.js";
5
5
  import {
6
6
  parseNumberFlag,
7
7
  parseOptionalStringFlag
8
- } from "./chunk-RPXWUCQQ.js";
8
+ } from "./chunk-SKFB5ICF.js";
9
9
  import {
10
10
  DEFAULT_REVIEW_TRANSPORT_TIMEOUT_MS
11
11
  } from "./chunk-OW5HMYMI.js";
12
12
  import {
13
13
  callDaemon
14
- } from "./chunk-MD655IPO.js";
15
- import "./chunk-COAOWH3G.js";
16
- import "./chunk-QOMWCRE3.js";
14
+ } from "./chunk-XDLJE3RJ.js";
15
+ import "./chunk-ZOVMMQO6.js";
16
+ import "./chunk-HBK56JST.js";
17
17
  import "./chunk-MX3NFLCE.js";
18
18
  import "./chunk-ASMHEEKY.js";
19
- import "./chunk-IPE7TF2P.js";
20
- import "./chunk-STGGGVYT.js";
21
- import "./chunk-3ILXPKSJ.js";
19
+ import "./chunk-7BNU6DFI.js";
20
+ import "./chunk-QMHKAFYX.js";
21
+ import "./chunk-BUVYTJZR.js";
22
22
  import "./chunk-TBUCZX4A.js";
23
23
  import "./chunk-Y2KL55OG.js";
24
24
  import "./chunk-5SWZDVOW.js";
25
- import "./chunk-4BEJVZRK.js";
25
+ import "./chunk-RO3SMXF3.js";
26
26
  import "./chunk-S5KZQJJI.js";
27
- import "./chunk-KZ2IXVQT.js";
27
+ import "./chunk-2X4JFMKJ.js";
28
28
  import "./chunk-WHQZBUNY.js";
29
29
  import "./chunk-FUSXMW3G.js";
30
30
 
@@ -54,4 +54,4 @@ async function runStatusCapabilities(args) {
54
54
  export {
55
55
  runStatusCapabilities
56
56
  };
57
- //# sourceMappingURL=status-capabilities-P4KDSE2Y.js.map
57
+ //# sourceMappingURL=status-capabilities-XD3RGLKF.js.map
@@ -2,25 +2,25 @@ import "./chunk-RJNI3BHT.js";
2
2
  import {
3
3
  parseNumberFlag,
4
4
  parseOptionalStringFlag
5
- } from "./chunk-RPXWUCQQ.js";
5
+ } from "./chunk-SKFB5ICF.js";
6
6
  import {
7
7
  callDaemon
8
- } from "./chunk-MD655IPO.js";
9
- import "./chunk-COAOWH3G.js";
10
- import "./chunk-QOMWCRE3.js";
8
+ } from "./chunk-XDLJE3RJ.js";
9
+ import "./chunk-ZOVMMQO6.js";
10
+ import "./chunk-HBK56JST.js";
11
11
  import "./chunk-MX3NFLCE.js";
12
12
  import "./chunk-ASMHEEKY.js";
13
13
  import {
14
14
  createUsageError
15
- } from "./chunk-IPE7TF2P.js";
16
- import "./chunk-STGGGVYT.js";
17
- import "./chunk-3ILXPKSJ.js";
15
+ } from "./chunk-7BNU6DFI.js";
16
+ import "./chunk-QMHKAFYX.js";
17
+ import "./chunk-BUVYTJZR.js";
18
18
  import "./chunk-TBUCZX4A.js";
19
19
  import "./chunk-Y2KL55OG.js";
20
20
  import "./chunk-5SWZDVOW.js";
21
- import "./chunk-4BEJVZRK.js";
21
+ import "./chunk-RO3SMXF3.js";
22
22
  import "./chunk-S5KZQJJI.js";
23
- import "./chunk-KZ2IXVQT.js";
23
+ import "./chunk-2X4JFMKJ.js";
24
24
  import "./chunk-WHQZBUNY.js";
25
25
  import "./chunk-FUSXMW3G.js";
26
26
 
@@ -81,4 +81,4 @@ async function runDomText(args) {
81
81
  export {
82
82
  runDomText
83
83
  };
84
- //# sourceMappingURL=text-V3B7UVIH.js.map
84
+ //# sourceMappingURL=text-TANLFZ4O.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inspiredesign_run.d.ts","sourceRoot":"","sources":["../../src/tools/inspiredesign_run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAgBvC,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,QAAQ,GAAG,cAAc,CAkDzE"}
1
+ {"version":3,"file":"inspiredesign_run.d.ts","sourceRoot":"","sources":["../../src/tools/inspiredesign_run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAmBvC,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,QAAQ,GAAG,cAAc,CAuEzE"}