opendevbrowser 0.0.31 → 0.0.33

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 (336) hide show
  1. package/README.md +18 -5
  2. package/dist/{accessibility-snapshot-CQ4ZKWKC.js → accessibility-snapshot-JSPFVWZ6.js} +12 -12
  3. package/dist/{active-window-TD5HYJ72.js → active-window-2OB2MSCR.js} +12 -12
  4. package/dist/{annotate-VTLFS2XV.js → annotate-VDZBZBKZ.js} +11 -11
  5. package/dist/{artifacts-KJ6RNDO2.js → artifacts-JHDUUJGQ.js} +2 -2
  6. package/dist/{attr-BCI5KYCW.js → attr-7XIO4MCH.js} +11 -11
  7. package/dist/browser/canvas-manager.d.ts.map +1 -1
  8. package/dist/canvas/guidance.d.ts +7 -0
  9. package/dist/canvas/guidance.d.ts.map +1 -1
  10. package/dist/canvas/repair-examples.d.ts +45 -0
  11. package/dist/canvas/repair-examples.d.ts.map +1 -0
  12. package/dist/{canvas-5DFEEOKM.js → canvas-N4PAA274.js} +26 -11
  13. package/dist/canvas-N4PAA274.js.map +1 -0
  14. package/dist/{capture-desktop-HFTTWY4Z.js → capture-desktop-T5YO3EBI.js} +12 -12
  15. package/dist/{capture-window-X63XPIFF.js → capture-window-UKEUBWKH.js} +12 -12
  16. package/dist/{check-LWAUY7GC.js → check-PQB6KKMN.js} +11 -11
  17. package/dist/{checked-ZSOUKVYT.js → checked-RNZIMCU6.js} +11 -11
  18. package/dist/{chunk-6B5WAQV7.js → chunk-27W46IKI.js} +42 -11
  19. package/dist/chunk-27W46IKI.js.map +1 -0
  20. package/dist/{chunk-WHQZBUNY.js → chunk-3WLCWHIV.js} +2 -2
  21. package/dist/{chunk-WHQZBUNY.js.map → chunk-3WLCWHIV.js.map} +1 -1
  22. package/dist/{chunk-PPUWQKIC.js → chunk-52ZIOWVU.js} +4 -4
  23. package/dist/{chunk-IPE7TF2P.js → chunk-7BNU6DFI.js} +8 -5
  24. package/dist/chunk-7BNU6DFI.js.map +1 -0
  25. package/dist/{chunk-3ILXPKSJ.js → chunk-BUVYTJZR.js} +2 -1
  26. package/dist/chunk-BUVYTJZR.js.map +1 -0
  27. package/dist/{chunk-QOMWCRE3.js → chunk-EOX6U6Q4.js} +47 -19
  28. package/dist/chunk-EOX6U6Q4.js.map +1 -0
  29. package/dist/{chunk-4BEJVZRK.js → chunk-FBKPDILE.js} +3625 -289
  30. package/dist/chunk-FBKPDILE.js.map +1 -0
  31. package/dist/{chunk-2I3YS3DV.js → chunk-FDBUB7BM.js} +7 -3
  32. package/dist/chunk-FDBUB7BM.js.map +1 -0
  33. package/dist/{chunk-COAOWH3G.js → chunk-HMRANSDX.js} +120 -28
  34. package/dist/chunk-HMRANSDX.js.map +1 -0
  35. package/dist/{chunk-KZ2IXVQT.js → chunk-IBIHDGTZ.js} +40 -5
  36. package/dist/chunk-IBIHDGTZ.js.map +1 -0
  37. package/dist/{chunk-T4GMCW6Z.js → chunk-J3KYGJRQ.js} +3 -3
  38. package/dist/{chunk-AHEWXOKY.js → chunk-JROW6ZNN.js} +4 -4
  39. package/dist/{chunk-6PVZ2ABC.js → chunk-L3YNUGYF.js} +2 -2
  40. package/dist/{chunk-MD655IPO.js → chunk-MJF67OTH.js} +11 -4
  41. package/dist/chunk-MJF67OTH.js.map +1 -0
  42. package/dist/{chunk-JZXD6FWR.js → chunk-NURQB55J.js} +2 -2
  43. package/dist/{chunk-STGGGVYT.js → chunk-QMHKAFYX.js} +2 -2
  44. package/dist/{chunk-RPXWUCQQ.js → chunk-SKFB5ICF.js} +2 -2
  45. package/dist/{chunk-2SIMIPLY.js → chunk-W6YPVNDX.js} +3 -3
  46. package/dist/{chunk-GQJ5S3BL.js → chunk-YRRRUGSQ.js} +3 -3
  47. package/dist/{chunk-37VSRUW4.js → chunk-ZGCTC5YM.js} +39 -7
  48. package/dist/chunk-ZGCTC5YM.js.map +1 -0
  49. package/dist/{chunk-KDSNXS6N.js → chunk-ZMNEWS7A.js} +2 -2
  50. package/dist/cli/args.d.ts.map +1 -1
  51. package/dist/cli/commands/canvas.d.ts +12 -0
  52. package/dist/cli/commands/canvas.d.ts.map +1 -1
  53. package/dist/cli/commands/daemon.d.ts +19 -2
  54. package/dist/cli/commands/daemon.d.ts.map +1 -1
  55. package/dist/cli/commands/inspiredesign.d.ts +6 -1
  56. package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
  57. package/dist/cli/commands/serve.d.ts +12 -3
  58. package/dist/cli/commands/serve.d.ts.map +1 -1
  59. package/dist/cli/commands/status.d.ts.map +1 -1
  60. package/dist/cli/commands/types.d.ts +1 -0
  61. package/dist/cli/commands/types.d.ts.map +1 -1
  62. package/dist/cli/daemon-client.d.ts.map +1 -1
  63. package/dist/cli/daemon-commands.d.ts.map +1 -1
  64. package/dist/cli/daemon-mismatch.d.ts +15 -0
  65. package/dist/cli/daemon-mismatch.d.ts.map +1 -0
  66. package/dist/cli/daemon.d.ts.map +1 -1
  67. package/dist/cli/errors.d.ts +4 -2
  68. package/dist/cli/errors.d.ts.map +1 -1
  69. package/dist/cli/help.d.ts.map +1 -1
  70. package/dist/cli/index.js +91 -90
  71. package/dist/cli/index.js.map +1 -1
  72. package/dist/cli/installers/postinstall-skill-sync.js +2 -2
  73. package/dist/cli/utils/workflow-message.d.ts +1 -1
  74. package/dist/cli/utils/workflow-message.d.ts.map +1 -1
  75. package/dist/{click-2AILSEIZ.js → click-U7ZFKSB4.js} +11 -11
  76. package/dist/{clone-component-TPJS3PEG.js → clone-component-SWYAORTU.js} +10 -10
  77. package/dist/{clone-page-LE74CIFC.js → clone-page-WJ6UJOJG.js} +10 -10
  78. package/dist/{close-HN4YI47K.js → close-NAVIHZ2T.js} +10 -10
  79. package/dist/{close-WFERRHX6.js → close-VKIGIKVT.js} +10 -10
  80. package/dist/{connect-RWBV2UCQ.js → connect-XVG2MOZL.js} +11 -11
  81. package/dist/{console-poll-PP4YYPDF.js → console-poll-XI5BZPL7.js} +11 -11
  82. package/dist/{cookie-import-6IP776FC.js → cookie-import-QELKE7TK.js} +10 -10
  83. package/dist/{cookie-list-O2KG6DPU.js → cookie-list-QDA6KWIY.js} +10 -10
  84. package/dist/{daemon-2BSAZXLT.js → daemon-CA4UIIZQ.js} +26 -13
  85. package/dist/daemon-CA4UIIZQ.js.map +1 -0
  86. package/dist/daemon-fingerprint.json +1 -1
  87. package/dist/{debug-trace-snapshot-F3BDVZXS.js → debug-trace-snapshot-AT4GAO57.js} +11 -11
  88. package/dist/{dialog-6JQYUWMQ.js → dialog-O3V2IBFH.js} +11 -11
  89. package/dist/{disconnect-763TP7GH.js → disconnect-NAX5TPTG.js} +10 -10
  90. package/dist/{enabled-DLYQFNIP.js → enabled-VT4FJXDX.js} +11 -11
  91. package/dist/{goto-S346TJJH.js → goto-GBJG5NC4.js} +11 -11
  92. package/dist/guidance/context.d.ts +44 -0
  93. package/dist/guidance/context.d.ts.map +1 -0
  94. package/dist/guidance/index.d.ts +7 -0
  95. package/dist/guidance/index.d.ts.map +1 -0
  96. package/dist/guidance/readiness.d.ts +7 -0
  97. package/dist/guidance/readiness.d.ts.map +1 -0
  98. package/dist/guidance/recipes/generic.d.ts +3 -0
  99. package/dist/guidance/recipes/generic.d.ts.map +1 -0
  100. package/dist/guidance/recipes/pinterest.d.ts +5 -0
  101. package/dist/guidance/recipes/pinterest.d.ts.map +1 -0
  102. package/dist/guidance/recipes/site-recipe-types.d.ts +2 -0
  103. package/dist/guidance/recipes/site-recipe-types.d.ts.map +1 -0
  104. package/dist/guidance/recipes/site-registry.d.ts +5 -0
  105. package/dist/guidance/recipes/site-registry.d.ts.map +1 -0
  106. package/dist/guidance/renderers.d.ts +22 -0
  107. package/dist/guidance/renderers.d.ts.map +1 -0
  108. package/dist/guidance/router.d.ts +8 -0
  109. package/dist/guidance/router.d.ts.map +1 -0
  110. package/dist/guidance/types.d.ts +139 -0
  111. package/dist/guidance/types.d.ts.map +1 -0
  112. package/dist/{help-U7KBQME6.js → help-SUI4H77K.js} +14 -9
  113. package/dist/help-SUI4H77K.js.map +1 -0
  114. package/dist/{hover-6JVJFGO7.js → hover-476ZNQZE.js} +11 -11
  115. package/dist/{html-EVOSPBIT.js → html-5C4TXOV3.js} +11 -11
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +47 -18
  118. package/dist/index.js.map +1 -1
  119. package/dist/{inspector-H57BVUJP.js → inspector-73ARPCIV.js} +13 -13
  120. package/dist/{inspector-audit-NQBAJWC7.js → inspector-audit-QT6QY7KS.js} +15 -15
  121. package/dist/{inspector-plan-ZDIQVND3.js → inspector-plan-JRNSGN2Z.js} +13 -13
  122. package/dist/inspiredesign/capture.d.ts +4 -0
  123. package/dist/inspiredesign/capture.d.ts.map +1 -1
  124. package/dist/inspiredesign/contract.d.ts +24 -0
  125. package/dist/inspiredesign/contract.d.ts.map +1 -1
  126. package/dist/inspiredesign/handoff.d.ts +9 -3
  127. package/dist/inspiredesign/handoff.d.ts.map +1 -1
  128. package/dist/inspiredesign/meta-prompt.d.ts +9 -0
  129. package/dist/inspiredesign/meta-prompt.d.ts.map +1 -0
  130. package/dist/inspiredesign/reference-discovery.d.ts +29 -0
  131. package/dist/inspiredesign/reference-discovery.d.ts.map +1 -0
  132. package/dist/inspiredesign/reference-pattern-board.d.ts +38 -1
  133. package/dist/inspiredesign/reference-pattern-board.d.ts.map +1 -1
  134. package/dist/inspiredesign/visual-evidence.d.ts +46 -0
  135. package/dist/inspiredesign/visual-evidence.d.ts.map +1 -0
  136. package/dist/inspiredesign/visual-policy.d.ts +17 -0
  137. package/dist/inspiredesign/visual-policy.d.ts.map +1 -0
  138. package/dist/{inspiredesign-IEUL4PX3.js → inspiredesign-IPVZDLSQ.js} +73 -21
  139. package/dist/inspiredesign-IPVZDLSQ.js.map +1 -0
  140. package/dist/{launch-EK66VQPF.js → launch-B35YDRQC.js} +11 -11
  141. package/dist/{list-ADZAQ2IU.js → list-JV55JVGB.js} +10 -10
  142. package/dist/{list-KKUKN467.js → list-YETWKTKY.js} +10 -10
  143. package/dist/{macro-resolve-6DOQJ7CA.js → macro-resolve-DQK4B3W3.js} +12 -12
  144. package/dist/{native-UPLVQ2SG.js → native-J2DFLOLP.js} +3 -3
  145. package/dist/{network-poll-NUL4PDPY.js → network-poll-4GWHCJXI.js} +11 -11
  146. package/dist/{new-5NKYPEFT.js → new-XDCQPIEG.js} +10 -10
  147. package/dist/{open-NR3BPLXV.js → open-GIM3ZCSV.js} +10 -10
  148. package/dist/opendevbrowser.d.ts.map +1 -1
  149. package/dist/opendevbrowser.js +47 -18
  150. package/dist/opendevbrowser.js.map +1 -1
  151. package/dist/{perf-HJ36ZI6H.js → perf-26VBXDPI.js} +11 -11
  152. package/dist/{pointer-down-IYTTQWXZ.js → pointer-down-O3VSNAXW.js} +12 -12
  153. package/dist/{pointer-drag-A2YC5PWI.js → pointer-drag-WQ5QGE6J.js} +12 -12
  154. package/dist/{pointer-move-W5K5FUI4.js → pointer-move-4N4D7JY2.js} +12 -12
  155. package/dist/{pointer-up-6GWVO64Y.js → pointer-up-CQC4NPDX.js} +12 -12
  156. package/dist/{press-A3V5WB3S.js → press-XGJD45CU.js} +11 -11
  157. package/dist/{product-video-52REKWF3.js → product-video-HD4ZOUI7.js} +13 -13
  158. package/dist/providers/browser-native-discovery.d.ts +23 -0
  159. package/dist/providers/browser-native-discovery.d.ts.map +1 -0
  160. package/dist/providers/renderer.d.ts +9 -1
  161. package/dist/providers/renderer.d.ts.map +1 -1
  162. package/dist/providers/workflow-handoff.d.ts +4 -0
  163. package/dist/providers/workflow-handoff.d.ts.map +1 -1
  164. package/dist/providers/workflows.d.ts +45 -3
  165. package/dist/providers/workflows.d.ts.map +1 -1
  166. package/dist/{providers-IMFYMMHQ.js → providers-KKNPJSQK.js} +4 -4
  167. package/dist/public-surface/generated-manifest.d.ts +14 -5
  168. package/dist/public-surface/generated-manifest.d.ts.map +1 -1
  169. package/dist/public-surface/source.d.ts +7 -7
  170. package/dist/public-surface/source.d.ts.map +1 -1
  171. package/dist/{research-WB6BBCDD.js → research-VUWWEQ4R.js} +13 -13
  172. package/dist/{review-BGWVY4RA.js → review-LZ3TA7U7.js} +12 -12
  173. package/dist/{review-desktop-LEORC5VS.js → review-desktop-LAO7U7T3.js} +12 -12
  174. package/dist/{rpc-4TSKSFGC.js → rpc-HKNIVFGC.js} +11 -11
  175. package/dist/{run-3NBLVWXD.js → run-SHCF53FO.js} +9 -9
  176. package/dist/{screencast-start-UZVIT3IN.js → screencast-start-JHMQZVWJ.js} +11 -11
  177. package/dist/{screencast-stop-NOSJSIUO.js → screencast-stop-RWQTWWQS.js} +11 -11
  178. package/dist/{screenshot-LARG4JQG.js → screenshot-QHFYO6PB.js} +11 -11
  179. package/dist/{scroll-VNFMV6TW.js → scroll-L3FTMAV4.js} +11 -11
  180. package/dist/{scroll-into-view-VYRT3JPT.js → scroll-into-view-JVDHX4WU.js} +11 -11
  181. package/dist/{select-KJTUZDVO.js → select-X4BO7GTB.js} +11 -11
  182. package/dist/{serve-EV7K4HKR.js → serve-JIMIBCNO.js} +49 -25
  183. package/dist/serve-JIMIBCNO.js.map +1 -0
  184. package/dist/{shopping-DTXHVQ2X.js → shopping-EGSDP2GL.js} +13 -13
  185. package/dist/{skill-lifecycle-5UAZGKSN.js → skill-lifecycle-OWZYBPFS.js} +3 -3
  186. package/dist/skills/bundled-skill-directories.d.ts.map +1 -1
  187. package/dist/skills/skill-loader.js +2 -2
  188. package/dist/{skills-NSXDX6YM.js → skills-KHMRNOE4.js} +3 -3
  189. package/dist/{snapshot-3XQMCMRJ.js → snapshot-QGJ7RDNV.js} +11 -11
  190. package/dist/{status-YUMDP5KY.js → status-CKGPNYIH.js} +21 -13
  191. package/dist/status-CKGPNYIH.js.map +1 -0
  192. package/dist/{status-OXSYA5XD.js → status-LEBY2X7N.js} +12 -12
  193. package/dist/{status-capabilities-P4KDSE2Y.js → status-capabilities-6QTWNGKM.js} +12 -12
  194. package/dist/{text-V3B7UVIH.js → text-VUZU7D3L.js} +11 -11
  195. package/dist/tools/inspiredesign_run.d.ts.map +1 -1
  196. package/dist/{type-IYBN3ZLR.js → type-N5SURP74.js} +11 -11
  197. package/dist/{uncheck-SG737EGI.js → uncheck-JFMK3SSY.js} +11 -11
  198. package/dist/{uninstall-KYKGJAX7.js → uninstall-FW5ORBIN.js} +3 -3
  199. package/dist/{update-skill-modes-BVX7IVMW.js → update-skill-modes-3ULKJK3Y.js} +3 -3
  200. package/dist/{upload-KH6ZABJA.js → upload-KFUYLL7M.js} +11 -11
  201. package/dist/{use-7YDKO3U4.js → use-CNMPP2ED.js} +10 -10
  202. package/dist/{value-RZBWSKKM.js → value-J335MPZE.js} +11 -11
  203. package/dist/{visible-BSFTAKXR.js → visible-YQZWWPBZ.js} +11 -11
  204. package/dist/{wait-TMTEAYOP.js → wait-IC7YJJPJ.js} +11 -11
  205. package/dist/{windows-HIZ23OHS.js → windows-AGVQ3KX3.js} +12 -12
  206. package/extension/manifest.json +1 -1
  207. package/package.json +1 -1
  208. package/skills/AGENTS.md +2 -1
  209. package/skills/opendevbrowser-best-practices/SKILL.md +16 -3
  210. package/skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md +4 -4
  211. package/skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md +4 -3
  212. package/skills/opendevbrowser-best-practices/assets/templates/mode-flag-matrix.json +7 -0
  213. package/skills/opendevbrowser-best-practices/assets/templates/skill-runtime-pack-matrix.json +49 -3
  214. package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +31 -2
  215. package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +7 -0
  216. package/skills/opendevbrowser-design-agent/SKILL.md +11 -6
  217. package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +4 -3
  218. package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +110 -41
  219. package/skills/opendevbrowser-design-agent/artifacts/scroll-reveal-surface-planning.md +2 -0
  220. package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +21 -5
  221. package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +5 -2
  222. package/skills/opendevbrowser-design-agent/scripts/validate-skill-assets.sh +8 -2
  223. package/skills/opendevbrowser-motion-design/SKILL.md +129 -0
  224. package/skills/opendevbrowser-motion-design/artifacts/accessibility-reduced-motion.md +37 -0
  225. package/skills/opendevbrowser-motion-design/artifacts/device-breakpoint-posture.md +40 -0
  226. package/skills/opendevbrowser-motion-design/artifacts/motion-anti-patterns.md +29 -0
  227. package/skills/opendevbrowser-motion-design/artifacts/motion-pattern-catalog.md +430 -0
  228. package/skills/opendevbrowser-motion-design/artifacts/motion-release-gate.md +28 -0
  229. package/skills/opendevbrowser-motion-design/artifacts/motion-terminology.md +46 -0
  230. package/skills/opendevbrowser-motion-design/artifacts/open-dev-browser-motion-evidence.md +48 -0
  231. package/skills/opendevbrowser-motion-design/artifacts/performance-frame-budget.md +38 -0
  232. package/skills/opendevbrowser-motion-design/artifacts/platform-framework-guide.md +166 -0
  233. package/skills/opendevbrowser-motion-design/assets/templates/motion-audit-report.v1.md +70 -0
  234. package/skills/opendevbrowser-motion-design/assets/templates/motion-contract.v1.json +79 -0
  235. package/skills/opendevbrowser-motion-design/assets/templates/motion-release-gate.v1.json +18 -0
  236. package/skills/opendevbrowser-motion-design/assets/templates/motion-viewport-matrix.v1.json +76 -0
  237. package/skills/opendevbrowser-motion-design/scripts/motion-workflow.sh +163 -0
  238. package/skills/opendevbrowser-motion-design/scripts/validate-skill-assets.sh +375 -0
  239. package/dist/canvas-5DFEEOKM.js.map +0 -1
  240. package/dist/chunk-2I3YS3DV.js.map +0 -1
  241. package/dist/chunk-37VSRUW4.js.map +0 -1
  242. package/dist/chunk-3ILXPKSJ.js.map +0 -1
  243. package/dist/chunk-4BEJVZRK.js.map +0 -1
  244. package/dist/chunk-6B5WAQV7.js.map +0 -1
  245. package/dist/chunk-COAOWH3G.js.map +0 -1
  246. package/dist/chunk-IPE7TF2P.js.map +0 -1
  247. package/dist/chunk-KZ2IXVQT.js.map +0 -1
  248. package/dist/chunk-MD655IPO.js.map +0 -1
  249. package/dist/chunk-QOMWCRE3.js.map +0 -1
  250. package/dist/daemon-2BSAZXLT.js.map +0 -1
  251. package/dist/help-U7KBQME6.js.map +0 -1
  252. package/dist/inspiredesign-IEUL4PX3.js.map +0 -1
  253. package/dist/serve-EV7K4HKR.js.map +0 -1
  254. package/dist/status-YUMDP5KY.js.map +0 -1
  255. /package/dist/{accessibility-snapshot-CQ4ZKWKC.js.map → accessibility-snapshot-JSPFVWZ6.js.map} +0 -0
  256. /package/dist/{active-window-TD5HYJ72.js.map → active-window-2OB2MSCR.js.map} +0 -0
  257. /package/dist/{annotate-VTLFS2XV.js.map → annotate-VDZBZBKZ.js.map} +0 -0
  258. /package/dist/{artifacts-KJ6RNDO2.js.map → artifacts-JHDUUJGQ.js.map} +0 -0
  259. /package/dist/{attr-BCI5KYCW.js.map → attr-7XIO4MCH.js.map} +0 -0
  260. /package/dist/{capture-desktop-HFTTWY4Z.js.map → capture-desktop-T5YO3EBI.js.map} +0 -0
  261. /package/dist/{capture-window-X63XPIFF.js.map → capture-window-UKEUBWKH.js.map} +0 -0
  262. /package/dist/{check-LWAUY7GC.js.map → check-PQB6KKMN.js.map} +0 -0
  263. /package/dist/{checked-ZSOUKVYT.js.map → checked-RNZIMCU6.js.map} +0 -0
  264. /package/dist/{chunk-PPUWQKIC.js.map → chunk-52ZIOWVU.js.map} +0 -0
  265. /package/dist/{chunk-T4GMCW6Z.js.map → chunk-J3KYGJRQ.js.map} +0 -0
  266. /package/dist/{chunk-AHEWXOKY.js.map → chunk-JROW6ZNN.js.map} +0 -0
  267. /package/dist/{chunk-6PVZ2ABC.js.map → chunk-L3YNUGYF.js.map} +0 -0
  268. /package/dist/{chunk-JZXD6FWR.js.map → chunk-NURQB55J.js.map} +0 -0
  269. /package/dist/{chunk-STGGGVYT.js.map → chunk-QMHKAFYX.js.map} +0 -0
  270. /package/dist/{chunk-RPXWUCQQ.js.map → chunk-SKFB5ICF.js.map} +0 -0
  271. /package/dist/{chunk-2SIMIPLY.js.map → chunk-W6YPVNDX.js.map} +0 -0
  272. /package/dist/{chunk-GQJ5S3BL.js.map → chunk-YRRRUGSQ.js.map} +0 -0
  273. /package/dist/{chunk-KDSNXS6N.js.map → chunk-ZMNEWS7A.js.map} +0 -0
  274. /package/dist/{click-2AILSEIZ.js.map → click-U7ZFKSB4.js.map} +0 -0
  275. /package/dist/{clone-component-TPJS3PEG.js.map → clone-component-SWYAORTU.js.map} +0 -0
  276. /package/dist/{clone-page-LE74CIFC.js.map → clone-page-WJ6UJOJG.js.map} +0 -0
  277. /package/dist/{close-HN4YI47K.js.map → close-NAVIHZ2T.js.map} +0 -0
  278. /package/dist/{close-WFERRHX6.js.map → close-VKIGIKVT.js.map} +0 -0
  279. /package/dist/{connect-RWBV2UCQ.js.map → connect-XVG2MOZL.js.map} +0 -0
  280. /package/dist/{console-poll-PP4YYPDF.js.map → console-poll-XI5BZPL7.js.map} +0 -0
  281. /package/dist/{cookie-import-6IP776FC.js.map → cookie-import-QELKE7TK.js.map} +0 -0
  282. /package/dist/{cookie-list-O2KG6DPU.js.map → cookie-list-QDA6KWIY.js.map} +0 -0
  283. /package/dist/{debug-trace-snapshot-F3BDVZXS.js.map → debug-trace-snapshot-AT4GAO57.js.map} +0 -0
  284. /package/dist/{dialog-6JQYUWMQ.js.map → dialog-O3V2IBFH.js.map} +0 -0
  285. /package/dist/{disconnect-763TP7GH.js.map → disconnect-NAX5TPTG.js.map} +0 -0
  286. /package/dist/{enabled-DLYQFNIP.js.map → enabled-VT4FJXDX.js.map} +0 -0
  287. /package/dist/{goto-S346TJJH.js.map → goto-GBJG5NC4.js.map} +0 -0
  288. /package/dist/{hover-6JVJFGO7.js.map → hover-476ZNQZE.js.map} +0 -0
  289. /package/dist/{html-EVOSPBIT.js.map → html-5C4TXOV3.js.map} +0 -0
  290. /package/dist/{inspector-H57BVUJP.js.map → inspector-73ARPCIV.js.map} +0 -0
  291. /package/dist/{inspector-audit-NQBAJWC7.js.map → inspector-audit-QT6QY7KS.js.map} +0 -0
  292. /package/dist/{inspector-plan-ZDIQVND3.js.map → inspector-plan-JRNSGN2Z.js.map} +0 -0
  293. /package/dist/{launch-EK66VQPF.js.map → launch-B35YDRQC.js.map} +0 -0
  294. /package/dist/{list-ADZAQ2IU.js.map → list-JV55JVGB.js.map} +0 -0
  295. /package/dist/{list-KKUKN467.js.map → list-YETWKTKY.js.map} +0 -0
  296. /package/dist/{macro-resolve-6DOQJ7CA.js.map → macro-resolve-DQK4B3W3.js.map} +0 -0
  297. /package/dist/{native-UPLVQ2SG.js.map → native-J2DFLOLP.js.map} +0 -0
  298. /package/dist/{network-poll-NUL4PDPY.js.map → network-poll-4GWHCJXI.js.map} +0 -0
  299. /package/dist/{new-5NKYPEFT.js.map → new-XDCQPIEG.js.map} +0 -0
  300. /package/dist/{open-NR3BPLXV.js.map → open-GIM3ZCSV.js.map} +0 -0
  301. /package/dist/{perf-HJ36ZI6H.js.map → perf-26VBXDPI.js.map} +0 -0
  302. /package/dist/{pointer-down-IYTTQWXZ.js.map → pointer-down-O3VSNAXW.js.map} +0 -0
  303. /package/dist/{pointer-drag-A2YC5PWI.js.map → pointer-drag-WQ5QGE6J.js.map} +0 -0
  304. /package/dist/{pointer-move-W5K5FUI4.js.map → pointer-move-4N4D7JY2.js.map} +0 -0
  305. /package/dist/{pointer-up-6GWVO64Y.js.map → pointer-up-CQC4NPDX.js.map} +0 -0
  306. /package/dist/{press-A3V5WB3S.js.map → press-XGJD45CU.js.map} +0 -0
  307. /package/dist/{product-video-52REKWF3.js.map → product-video-HD4ZOUI7.js.map} +0 -0
  308. /package/dist/{providers-IMFYMMHQ.js.map → providers-KKNPJSQK.js.map} +0 -0
  309. /package/dist/{research-WB6BBCDD.js.map → research-VUWWEQ4R.js.map} +0 -0
  310. /package/dist/{review-BGWVY4RA.js.map → review-LZ3TA7U7.js.map} +0 -0
  311. /package/dist/{review-desktop-LEORC5VS.js.map → review-desktop-LAO7U7T3.js.map} +0 -0
  312. /package/dist/{rpc-4TSKSFGC.js.map → rpc-HKNIVFGC.js.map} +0 -0
  313. /package/dist/{run-3NBLVWXD.js.map → run-SHCF53FO.js.map} +0 -0
  314. /package/dist/{screencast-start-UZVIT3IN.js.map → screencast-start-JHMQZVWJ.js.map} +0 -0
  315. /package/dist/{screencast-stop-NOSJSIUO.js.map → screencast-stop-RWQTWWQS.js.map} +0 -0
  316. /package/dist/{screenshot-LARG4JQG.js.map → screenshot-QHFYO6PB.js.map} +0 -0
  317. /package/dist/{scroll-VNFMV6TW.js.map → scroll-L3FTMAV4.js.map} +0 -0
  318. /package/dist/{scroll-into-view-VYRT3JPT.js.map → scroll-into-view-JVDHX4WU.js.map} +0 -0
  319. /package/dist/{select-KJTUZDVO.js.map → select-X4BO7GTB.js.map} +0 -0
  320. /package/dist/{shopping-DTXHVQ2X.js.map → shopping-EGSDP2GL.js.map} +0 -0
  321. /package/dist/{skill-lifecycle-5UAZGKSN.js.map → skill-lifecycle-OWZYBPFS.js.map} +0 -0
  322. /package/dist/{skills-NSXDX6YM.js.map → skills-KHMRNOE4.js.map} +0 -0
  323. /package/dist/{snapshot-3XQMCMRJ.js.map → snapshot-QGJ7RDNV.js.map} +0 -0
  324. /package/dist/{status-OXSYA5XD.js.map → status-LEBY2X7N.js.map} +0 -0
  325. /package/dist/{status-capabilities-P4KDSE2Y.js.map → status-capabilities-6QTWNGKM.js.map} +0 -0
  326. /package/dist/{text-V3B7UVIH.js.map → text-VUZU7D3L.js.map} +0 -0
  327. /package/dist/{type-IYBN3ZLR.js.map → type-N5SURP74.js.map} +0 -0
  328. /package/dist/{uncheck-SG737EGI.js.map → uncheck-JFMK3SSY.js.map} +0 -0
  329. /package/dist/{uninstall-KYKGJAX7.js.map → uninstall-FW5ORBIN.js.map} +0 -0
  330. /package/dist/{update-skill-modes-BVX7IVMW.js.map → update-skill-modes-3ULKJK3Y.js.map} +0 -0
  331. /package/dist/{upload-KH6ZABJA.js.map → upload-KFUYLL7M.js.map} +0 -0
  332. /package/dist/{use-7YDKO3U4.js.map → use-CNMPP2ED.js.map} +0 -0
  333. /package/dist/{value-RZBWSKKM.js.map → value-J335MPZE.js.map} +0 -0
  334. /package/dist/{visible-BSFTAKXR.js.map → visible-YQZWWPBZ.js.map} +0 -0
  335. /package/dist/{wait-TMTEAYOP.js.map → wait-IC7YJJPJ.js.map} +0 -0
  336. /package/dist/{windows-HIZ23OHS.js.map → windows-AGVQ3KX3.js.map} +0 -0
@@ -0,0 +1,375 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ skill_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ skill_file="$skill_root/SKILL.md"
6
+
7
+ node - "$skill_root" "$skill_file" <<'NODE'
8
+ const fs = require("node:fs");
9
+ const path = require("node:path");
10
+ const { spawnSync } = require("node:child_process");
11
+
12
+ const [skillRoot, skillFile] = process.argv.slice(2);
13
+ const failures = [];
14
+ const fullPath = (relativePath) => path.join(skillRoot, relativePath);
15
+ const read = (relativePath) => fs.readFileSync(fullPath(relativePath), "utf8");
16
+
17
+ const requiredPaths = [
18
+ "SKILL.md",
19
+ "artifacts/motion-terminology.md",
20
+ "artifacts/motion-pattern-catalog.md",
21
+ "artifacts/platform-framework-guide.md",
22
+ "artifacts/device-breakpoint-posture.md",
23
+ "artifacts/accessibility-reduced-motion.md",
24
+ "artifacts/performance-frame-budget.md",
25
+ "artifacts/open-dev-browser-motion-evidence.md",
26
+ "artifacts/motion-release-gate.md",
27
+ "artifacts/motion-anti-patterns.md",
28
+ "assets/templates/motion-contract.v1.json",
29
+ "assets/templates/motion-audit-report.v1.md",
30
+ "assets/templates/motion-viewport-matrix.v1.json",
31
+ "assets/templates/motion-release-gate.v1.json",
32
+ "scripts/motion-workflow.sh",
33
+ "scripts/validate-skill-assets.sh"
34
+ ];
35
+
36
+ const jsonTemplates = [
37
+ "assets/templates/motion-contract.v1.json",
38
+ "assets/templates/motion-viewport-matrix.v1.json",
39
+ "assets/templates/motion-release-gate.v1.json"
40
+ ];
41
+
42
+ const executableScripts = [
43
+ "scripts/motion-workflow.sh",
44
+ "scripts/validate-skill-assets.sh"
45
+ ];
46
+
47
+ for (const relativePath of requiredPaths) {
48
+ if (!fs.existsSync(fullPath(relativePath))) {
49
+ failures.push(`Missing required asset: ${relativePath}`);
50
+ }
51
+ }
52
+
53
+ for (const relativePath of executableScripts) {
54
+ if (!fs.existsSync(fullPath(relativePath))) continue;
55
+ const mode = fs.statSync(fullPath(relativePath)).mode & 0o111;
56
+ if (mode === 0) {
57
+ failures.push(`Script is not executable: ${relativePath}`);
58
+ }
59
+ }
60
+
61
+ for (const relativePath of jsonTemplates) {
62
+ if (!fs.existsSync(fullPath(relativePath))) continue;
63
+ try {
64
+ JSON.parse(read(relativePath));
65
+ } catch {
66
+ failures.push(`Invalid JSON template: ${relativePath}`);
67
+ }
68
+ }
69
+
70
+ const skillDoc = fs.readFileSync(skillFile, "utf8");
71
+ for (const marker of requiredPaths) {
72
+ if (marker !== "SKILL.md" && !skillDoc.includes(marker)) {
73
+ failures.push(`SKILL.md missing marker: ${marker}`);
74
+ }
75
+ }
76
+
77
+ for (const marker of [
78
+ "opendevbrowser-best-practices",
79
+ "opendevbrowser-design-agent",
80
+ "Motion Contract",
81
+ "nextStepGuidance.readiness",
82
+ "Pattern Selection",
83
+ "Platform And Framework Policy",
84
+ "Device Posture",
85
+ "Reduced Motion",
86
+ "Verification",
87
+ "Anti-patterns",
88
+ "Related Skills"
89
+ ]) {
90
+ if (!skillDoc.includes(marker)) {
91
+ failures.push(`SKILL.md missing marker: ${marker}`);
92
+ }
93
+ }
94
+
95
+ const terminology = read("artifacts/motion-terminology.md");
96
+ for (const marker of [
97
+ "Duration",
98
+ "Delay",
99
+ "Easing",
100
+ "Spring",
101
+ "Damping",
102
+ "Stiffness",
103
+ "Mass",
104
+ "Keyframe",
105
+ "Timeline",
106
+ "Choreography",
107
+ "Stagger",
108
+ "Interpolation",
109
+ "Transform",
110
+ "Opacity",
111
+ "Layout animation",
112
+ "Shared element transition",
113
+ "FLIP",
114
+ "Scroll progress",
115
+ "View progress",
116
+ "Gesture velocity",
117
+ "Inertia",
118
+ "Overshoot",
119
+ "Anticipation",
120
+ "Follow-through",
121
+ "Interruptibility",
122
+ "Retargeting",
123
+ "Reduced motion",
124
+ "Motion contract",
125
+ "Motion evidence",
126
+ "Frame budget",
127
+ "Input latency",
128
+ "Compositing",
129
+ "Decorative",
130
+ "Meaning-bearing"
131
+ ]) {
132
+ if (!terminology.includes(marker)) {
133
+ failures.push(`motion-terminology missing marker: ${marker}`);
134
+ }
135
+ }
136
+
137
+ const patternCatalog = read("artifacts/motion-pattern-catalog.md");
138
+ const patternEntries = patternCatalog.match(/^### Pattern /gm) ?? [];
139
+ if (patternEntries.length < 30) {
140
+ failures.push(`motion-pattern-catalog has ${patternEntries.length} entries; expected at least 30`);
141
+ }
142
+ for (const marker of [
143
+ "No-motion",
144
+ "Opacity Fade",
145
+ "Fade-through",
146
+ "Crossfade",
147
+ "Scale Fade",
148
+ "Slide",
149
+ "Shared Element",
150
+ "FLIP Layout",
151
+ "Staggered Reveal",
152
+ "Choreographed Sequence",
153
+ "Progressive Disclosure",
154
+ "Modal Motion",
155
+ "Sheet Motion",
156
+ "Popover Motion",
157
+ "Skeleton Shimmer",
158
+ "Progress Morph",
159
+ "Pull-to-refresh",
160
+ "Swipe-to-dismiss",
161
+ "Spring Settle",
162
+ "Scroll Reveal",
163
+ "Parallax",
164
+ "Pinned Scroll",
165
+ "SVG Path",
166
+ "Icon Morph",
167
+ "Lottie/Rive",
168
+ "WebGL/Spatial"
169
+ ]) {
170
+ if (!patternCatalog.includes(marker)) {
171
+ failures.push(`motion-pattern-catalog missing marker: ${marker}`);
172
+ }
173
+ }
174
+
175
+ const frameworkGuide = read("artifacts/platform-framework-guide.md");
176
+ for (const marker of [
177
+ "CSS Transitions",
178
+ "CSS Keyframe Animations",
179
+ "Web Animations API",
180
+ "View Transition API",
181
+ "CSS Scroll-driven Animations",
182
+ "Motion For React",
183
+ "motion/react",
184
+ "GSAP 3.x",
185
+ "Anime.js 4.x",
186
+ "react-spring",
187
+ "Lottie",
188
+ "Rive Web Runtime",
189
+ "Three.js",
190
+ "react-three-fiber",
191
+ "Spline",
192
+ "WebGL",
193
+ "SwiftUI",
194
+ "UIKit",
195
+ "Core Animation",
196
+ "Jetpack Compose",
197
+ "Android MotionLayout",
198
+ "React Native Reanimated 4.x",
199
+ "Flutter Animation APIs",
200
+ "Haptics",
201
+ "new runtime dependency requires approval"
202
+ ]) {
203
+ if (!frameworkGuide.includes(marker)) {
204
+ failures.push(`platform-framework-guide missing marker: ${marker}`);
205
+ }
206
+ }
207
+
208
+ const devicePosture = read("artifacts/device-breakpoint-posture.md");
209
+ for (const marker of [
210
+ "Mobile portrait",
211
+ "Mobile landscape",
212
+ "Tablet portrait",
213
+ "Tablet landscape",
214
+ "Laptop and desktop",
215
+ "Large monitor",
216
+ "Short viewport",
217
+ "Coarse pointer",
218
+ "Fine pointer",
219
+ "Trackpad",
220
+ "Touch gesture context",
221
+ "Keyboard-only context",
222
+ "Reduced-power devices",
223
+ "High-refresh displays",
224
+ "Foldable/device posture",
225
+ "device-posture",
226
+ "progressive enhancement"
227
+ ]) {
228
+ if (!devicePosture.includes(marker)) {
229
+ failures.push(`device-breakpoint-posture missing marker: ${marker}`);
230
+ }
231
+ }
232
+
233
+ const accessibility = read("artifacts/accessibility-reduced-motion.md");
234
+ for (const marker of [
235
+ "WCAG 2.2 SC 2.3.3",
236
+ "prefers-reduced-motion",
237
+ "Essential",
238
+ "Non-essential",
239
+ "vestibular",
240
+ "keyboard order",
241
+ "focus stable",
242
+ "motion-only feedback",
243
+ "ARIA live"
244
+ ]) {
245
+ if (!accessibility.includes(marker)) {
246
+ failures.push(`accessibility-reduced-motion missing marker: ${marker}`);
247
+ }
248
+ }
249
+
250
+ const performance = read("artifacts/performance-frame-budget.md");
251
+ for (const marker of [
252
+ "transform and opacity",
253
+ "layout",
254
+ "paint",
255
+ "compositing",
256
+ "will-change",
257
+ "requestAnimationFrame",
258
+ "INP",
259
+ "input latency",
260
+ "dropped frames",
261
+ "high refresh",
262
+ "mobile thermal",
263
+ "cleanup",
264
+ "layout shift",
265
+ "horizontal overflow"
266
+ ]) {
267
+ if (!performance.includes(marker)) {
268
+ failures.push(`performance-frame-budget missing marker: ${marker}`);
269
+ }
270
+ }
271
+
272
+ const evidence = read("artifacts/open-dev-browser-motion-evidence.md");
273
+ for (const marker of [
274
+ "snapshot",
275
+ "screenshot",
276
+ "debug-trace-snapshot",
277
+ "screencast-start",
278
+ "screencast-stop",
279
+ "console and network",
280
+ "viewport matrix",
281
+ "reduced-motion",
282
+ "canvas.preview.render"
283
+ ]) {
284
+ if (!evidence.includes(marker)) {
285
+ failures.push(`open-dev-browser-motion-evidence missing marker: ${marker}`);
286
+ }
287
+ }
288
+
289
+ const releaseGate = read("artifacts/motion-release-gate.md");
290
+ for (const marker of [
291
+ "Contract alignment",
292
+ "Pattern justification",
293
+ "Reduced motion",
294
+ "Keyboard order",
295
+ "Viewport matrix",
296
+ "Temporal proof",
297
+ "Debug trace",
298
+ "Console/network stability",
299
+ "Performance",
300
+ "Overflow",
301
+ "Focus traps",
302
+ "Library policy"
303
+ ]) {
304
+ if (!releaseGate.includes(marker)) {
305
+ failures.push(`motion-release-gate missing marker: ${marker}`);
306
+ }
307
+ }
308
+
309
+ const antiPatterns = read("artifacts/motion-anti-patterns.md");
310
+ for (const marker of [
311
+ "Decorative motion without user value",
312
+ "Missing progress owner",
313
+ "Competing scroll observers",
314
+ "Layout-property animation",
315
+ "Long-distance mobile travel",
316
+ "Default parallax",
317
+ "Pinned scroll without escape",
318
+ "Hover-only affordance",
319
+ "Reduced motion that removes meaning",
320
+ "Unbounded loops",
321
+ "Fake progress",
322
+ "Unapproved runtime dependency",
323
+ "Haptic spam",
324
+ "Index-keyed animated lists",
325
+ "Non-interruptible gesture animation"
326
+ ]) {
327
+ if (!antiPatterns.includes(marker)) {
328
+ failures.push(`motion-anti-patterns missing marker: ${marker}`);
329
+ }
330
+ }
331
+
332
+ const workflowScript = fullPath("scripts/motion-workflow.sh");
333
+ const workflowSource = fs.readFileSync(workflowScript, "utf8");
334
+ for (const marker of ["resolve-odb-cli.sh", "CLI_PREFIX"]) {
335
+ if (!workflowSource.includes(marker)) {
336
+ failures.push(`motion-workflow.sh missing resolver marker: ${marker}`);
337
+ }
338
+ }
339
+
340
+ for (const workflow of [
341
+ "list",
342
+ "contract-first",
343
+ "pattern-select",
344
+ "viewport-matrix",
345
+ "reduced-motion-check",
346
+ "temporal-proof",
347
+ "scroll-stage-audit",
348
+ "gesture-motion",
349
+ "performance-audit",
350
+ "release-gate"
351
+ ]) {
352
+ const result = spawnSync(workflowScript, [workflow], { encoding: "utf8" });
353
+ if (result.status !== 0) {
354
+ failures.push(`motion-workflow.sh failed for mode ${workflow}: ${result.stderr.trim() || result.stdout.trim()}`);
355
+ continue;
356
+ }
357
+ if (result.stdout.trim().length === 0) {
358
+ failures.push(`motion-workflow.sh returned empty output for mode ${workflow}`);
359
+ }
360
+ }
361
+
362
+ const temporalProof = spawnSync(workflowScript, ["temporal-proof"], { encoding: "utf8" });
363
+ for (const marker of ["screencast-start", "screencast-stop", "snapshot", "screenshot", "debug-trace-snapshot"]) {
364
+ if (!temporalProof.stdout.includes(marker)) {
365
+ failures.push(`temporal-proof output missing marker: ${marker}`);
366
+ }
367
+ }
368
+
369
+ if (failures.length > 0) {
370
+ console.error(failures.join("\n"));
371
+ process.exit(1);
372
+ }
373
+
374
+ console.log("Motion-design skill assets validated.");
375
+ NODE
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/commands/canvas.ts"],"sourcesContent":["import { readFileSync } from \"fs\";\nimport type { ParsedArgs } from \"../args\";\nimport { DaemonClient } from \"../daemon-client\";\nimport { createUsageError } from \"../errors\";\nimport { writeOutput } from \"../output\";\nimport { parseNumberFlag } from \"../utils/parse\";\n\ntype CanvasArgs = {\n command?: string;\n params?: string;\n paramsFile?: string;\n timeoutMs?: number;\n};\n\nconst DEFAULT_FEEDBACK_STREAM_TIMEOUT_MS = 30000;\n\ntype FeedbackItem = Record<string, unknown>;\n\ntype FeedbackSubscribeResult = {\n subscriptionId: string | null;\n initialItems: FeedbackItem[];\n cursor: string | null;\n heartbeatMs: number;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst asString = (value: unknown): string | null => {\n return typeof value === \"string\" && value.length > 0 ? value : null;\n};\n\nconst asNumber = (value: unknown): number | null => {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n};\n\nconst asRecordArray = (value: unknown): FeedbackItem[] => {\n return Array.isArray(value) ? value.filter(isRecord) : [];\n};\n\nconst toFeedbackSubscribeResult = (value: unknown): FeedbackSubscribeResult => {\n if (!isRecord(value)) {\n return {\n subscriptionId: null,\n initialItems: [],\n cursor: null,\n heartbeatMs: 15000\n };\n }\n return {\n subscriptionId: asString(value.subscriptionId),\n initialItems: asRecordArray(value.initialItems),\n cursor: asString(value.cursor),\n heartbeatMs: Math.max(asNumber(value.heartbeatMs) ?? 15000, 1000)\n };\n};\n\nasync function streamFeedbackViaSubscription(\n client: DaemonClient,\n args: ParsedArgs,\n canvasArgs: CanvasArgs,\n params: Record<string, unknown>,\n initial: Record<string, unknown>\n): Promise<void> {\n const outputOptions = { format: args.outputFormat, quiet: args.quiet };\n writeOutput({\n success: true,\n message: `Canvas executed: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n result: initial\n }\n }, outputOptions);\n\n const initialResult = toFeedbackSubscribeResult(initial);\n const subscriptionId = initialResult.subscriptionId;\n const heartbeatMs = initialResult.heartbeatMs;\n const streamTimeoutMs = canvasArgs.timeoutMs ?? DEFAULT_FEEDBACK_STREAM_TIMEOUT_MS;\n const deadline = Date.now() + streamTimeoutMs;\n let cursor = initialResult.cursor;\n\n for (const item of initialResult.initialItems) {\n const itemCursor = asString(item.cursor);\n if (itemCursor) {\n cursor = itemCursor;\n }\n writeOutput({\n success: true,\n message: `Canvas feedback: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n streamEvent: {\n eventType: \"feedback.item\",\n item\n }\n }\n }, outputOptions);\n }\n\n while (subscriptionId && Date.now() < deadline) {\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) {\n break;\n }\n const nextEvent = await client.call(\n \"canvas.execute\",\n {\n command: \"canvas.feedback.next\",\n params: {\n ...params,\n subscriptionId,\n timeoutMs: Math.min(heartbeatMs, remainingMs)\n }\n },\n { timeoutMs: remainingMs }\n );\n if (isRecord(nextEvent)) {\n if (nextEvent.eventType === \"feedback.item\" && isRecord(nextEvent.item)) {\n const itemCursor = asString(nextEvent.item.cursor);\n if (itemCursor) {\n cursor = itemCursor;\n }\n } else if (typeof nextEvent.cursor === \"string\") {\n cursor = nextEvent.cursor;\n }\n }\n writeOutput({\n success: true,\n message: `Canvas feedback: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n streamEvent: nextEvent\n }\n }, outputOptions);\n if (isRecord(nextEvent) && nextEvent.eventType === \"feedback.complete\") {\n break;\n }\n }\n\n if (Date.now() >= deadline) {\n writeOutput({\n success: true,\n message: `Canvas feedback: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n streamEvent: {\n eventType: \"feedback.complete\",\n cursor: cursor ?? null,\n reason: \"timeout\"\n }\n }\n }, outputOptions);\n }\n\n if (subscriptionId) {\n await client.call(\n \"canvas.execute\",\n {\n command: \"canvas.feedback.unsubscribe\",\n params: {\n ...params,\n subscriptionId\n }\n }\n ).catch(() => {});\n }\n}\n\nconst requireValue = (value: string | undefined, flag: string): string => {\n if (!value) throw createUsageError(`Missing value for ${flag}`);\n return value;\n};\n\nconst parseJsonObject = (raw: string, source: string): Record<string, unknown> => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON\";\n throw createUsageError(`Invalid JSON from ${source}: ${message}`);\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw createUsageError(`Invalid JSON from ${source}: expected object`);\n }\n return parsed as Record<string, unknown>;\n};\n\nexport const parseCanvasArgs = (rawArgs: string[]): CanvasArgs => {\n const parsed: CanvasArgs = {};\n for (let i = 0; i < rawArgs.length; i += 1) {\n const arg = rawArgs[i];\n if (arg === \"--command\") {\n parsed.command = requireValue(rawArgs[i + 1], \"--command\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--command=\")) {\n parsed.command = requireValue(arg.split(\"=\", 2)[1], \"--command\");\n continue;\n }\n if (arg === \"--params\") {\n parsed.params = requireValue(rawArgs[i + 1], \"--params\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--params=\")) {\n parsed.params = requireValue(arg.split(\"=\", 2)[1], \"--params\");\n continue;\n }\n if (arg === \"--params-file\") {\n parsed.paramsFile = requireValue(rawArgs[i + 1], \"--params-file\");\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--params-file=\")) {\n parsed.paramsFile = requireValue(arg.split(\"=\", 2)[1], \"--params-file\");\n continue;\n }\n if (arg === \"--timeout-ms\") {\n parsed.timeoutMs = parseNumberFlag(requireValue(rawArgs[i + 1], \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n i += 1;\n continue;\n }\n if (arg?.startsWith(\"--timeout-ms=\")) {\n parsed.timeoutMs = parseNumberFlag(requireValue(arg.split(\"=\", 2)[1], \"--timeout-ms\"), \"--timeout-ms\", { min: 1 });\n }\n }\n return parsed;\n};\n\nconst resolveCanvasParams = (canvasArgs: CanvasArgs): Record<string, unknown> => {\n const hasParams = typeof canvasArgs.params === \"string\";\n const hasParamsFile = typeof canvasArgs.paramsFile === \"string\";\n if (Number(hasParams) + Number(hasParamsFile) > 1) {\n throw createUsageError(\"Provide only one params source: --params or --params-file.\");\n }\n if (hasParams) {\n return parseJsonObject(canvasArgs.params ?? \"\", \"--params\");\n }\n if (hasParamsFile) {\n let raw = \"\";\n try {\n raw = readFileSync(canvasArgs.paramsFile ?? \"\", \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unable to read file\";\n throw createUsageError(`Invalid --params-file: ${message}`);\n }\n if (!raw.trim()) {\n throw createUsageError(\"Invalid JSON from --params-file: empty input\");\n }\n return parseJsonObject(raw, \"--params-file\");\n }\n return {};\n};\n\nconst attachRepoRoot = (params: Record<string, unknown>): Record<string, unknown> => {\n if (typeof params.repoRoot === \"string\" && params.repoRoot.trim().length > 0) {\n return params;\n }\n return {\n ...params,\n repoRoot: process.cwd()\n };\n};\n\nexport async function runCanvas(args: ParsedArgs) {\n const canvasArgs = parseCanvasArgs(args.rawArgs);\n if (!canvasArgs.command) {\n throw createUsageError(\"Usage: opendevbrowser canvas --command <canvas.command> [--params <json> | --params-file <path>]\");\n }\n if (!canvasArgs.command.startsWith(\"canvas.\")) {\n throw createUsageError(\"Canvas command names must start with 'canvas.'.\");\n }\n\n const client = new DaemonClient({ autoRenew: true });\n try {\n const params = attachRepoRoot(resolveCanvasParams(canvasArgs));\n const result = await client.call<unknown>(\n \"canvas.execute\",\n {\n command: canvasArgs.command,\n params\n },\n { timeoutMs: canvasArgs.timeoutMs }\n );\n if (\n canvasArgs.command === \"canvas.feedback.subscribe\"\n && args.outputFormat === \"stream-json\"\n && isRecord(result)\n ) {\n await streamFeedbackViaSubscription(client, args, canvasArgs, params, result);\n return {\n success: true,\n message: `Canvas executed: ${canvasArgs.command}`,\n data: {\n suppressOutput: true\n }\n };\n }\n if (args.outputFormat === \"text\") {\n const output = typeof result === \"string\" ? result : JSON.stringify(result, null, 2);\n return { success: true, message: output };\n }\n return {\n success: true,\n message: `Canvas executed: ${canvasArgs.command}`,\n data: {\n command: canvasArgs.command,\n result\n }\n };\n } finally {\n await client.releaseBinding().catch(() => {});\n }\n}\n\nexport const __test__ = {\n parseCanvasArgs,\n parseJsonObject,\n resolveCanvasParams,\n attachRepoRoot,\n toFeedbackSubscribeResult\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/args.ts"],"sourcesContent":["import { createUsageError } from \"./errors\";\nimport {\n CLI_COMMANDS,\n VALID_EQUALS_FLAGS,\n VALID_FLAGS\n} from \"../public-surface/generated-manifest\";\nimport type { PublicSurfaceCliCommandName } from \"../public-surface/source\";\n\nconst CLI_COMMAND_SET = new Set<string>(CLI_COMMANDS);\n\nexport { CLI_COMMANDS, VALID_EQUALS_FLAGS, VALID_FLAGS };\n\nexport type CliCommand = PublicSurfaceCliCommandName;\nexport type InstallMode = \"global\" | \"local\";\nexport type SkillsMode = \"global\" | \"local\" | \"none\";\nexport type OutputFormat = \"text\" | \"json\" | \"stream-json\";\nexport type TransportMode = \"relay\" | \"native\";\n\nexport interface ParsedArgs {\n command: CliCommand;\n mode?: InstallMode;\n withConfig: boolean;\n noPrompt: boolean;\n noInteractive: boolean;\n quiet: boolean;\n outputFormat: OutputFormat;\n transport: TransportMode;\n skillsMode: SkillsMode;\n fullInstall: boolean;\n rawArgs: string[];\n}\n\nconst SHORT_FLAGS: Record<string, string> = {\n \"-g\": \"--global\",\n \"-l\": \"--local\",\n \"-u\": \"--update\",\n \"-h\": \"--help\",\n \"-v\": \"--version\",\n \"-f\": \"--full\"\n};\n\nfunction expandShortFlags(args: string[]): string[] {\n return args.map((arg) => SHORT_FLAGS[arg] ?? arg);\n}\n\nfunction parseSkillsMode(args: string[]): SkillsMode {\n const hasLocal = args.includes(\"--skills-local\");\n const hasGlobal = args.includes(\"--skills-global\");\n if (hasLocal && hasGlobal) {\n throw createUsageError(\"Choose either --skills-local or --skills-global.\");\n }\n if (args.includes(\"--no-skills\")) {\n return \"none\";\n }\n if (hasLocal) {\n return \"local\";\n }\n if (hasGlobal) {\n return \"global\";\n }\n return \"global\";\n}\n\nfunction parseOutputFormat(args: string[]): OutputFormat {\n const outputFlag = args.find((arg) => arg.startsWith(\"--output-format\"));\n if (!outputFlag) {\n return \"text\";\n }\n\n let value: string | undefined;\n if (outputFlag.includes(\"=\")) {\n value = outputFlag.split(\"=\", 2)[1];\n } else {\n const index = args.indexOf(outputFlag);\n value = index >= 0 ? args[index + 1] : undefined;\n }\n\n if (value === \"text\" || value === \"json\" || value === \"stream-json\") {\n return value;\n }\n\n throw createUsageError(`Invalid --output-format: ${value ?? \"missing\"}`);\n}\n\nfunction parseTransport(args: string[]): TransportMode {\n const transportFlag = args.find((arg) => arg.startsWith(\"--transport\"));\n if (!transportFlag) {\n return \"relay\";\n }\n\n let value: string | undefined;\n if (transportFlag.includes(\"=\")) {\n value = transportFlag.split(\"=\", 2)[1];\n } else {\n const index = args.indexOf(transportFlag);\n value = index >= 0 ? args[index + 1] : undefined;\n }\n\n if (value === \"relay\" || value === \"native\") {\n return value;\n }\n\n throw createUsageError(`Invalid --transport: ${value ?? \"missing\"}`);\n}\n\nconst VALID_FLAG_SET = new Set<string>(VALID_FLAGS);\nconst VALID_EQUALS_FLAG_SET = new Set<string>(VALID_EQUALS_FLAGS);\nconst SIGNED_VALUE_FLAG_SET = new Set<string>([\"--dy\"]);\nconst SIGNED_INTEGER_VALUE = /^-\\d+$/;\n\nfunction shouldSkipValueToken(flag: string, value: string | undefined): boolean {\n if (!VALID_EQUALS_FLAG_SET.has(flag) || value === undefined) {\n return false;\n }\n if (!value.startsWith(\"-\")) {\n return true;\n }\n return SIGNED_VALUE_FLAG_SET.has(flag) && SIGNED_INTEGER_VALUE.test(value);\n}\n\nexport function parseArgs(argv: string[]): ParsedArgs {\n let args = expandShortFlags(argv.slice(2));\n let commandOverride: CliCommand | null = null;\n\n if (args[0] && !args[0].startsWith(\"-\")) {\n const candidate = args[0];\n if (CLI_COMMAND_SET.has(candidate)) {\n commandOverride = candidate as CliCommand;\n args = args.slice(1);\n } else {\n throw createUsageError(`Unknown command: ${candidate}`);\n }\n }\n const hasGlobal = args.includes(\"--global\");\n const hasLocal = args.includes(\"--local\");\n if (hasGlobal && hasLocal) {\n throw createUsageError(\"Choose either --global or --local.\");\n }\n\n const skillsMode = parseSkillsMode(args);\n const fullInstall = args.includes(\"--full\");\n const outputFormat = parseOutputFormat(args);\n const transport = commandOverride === \"annotate\" ? \"relay\" : parseTransport(args);\n\n if (commandOverride === \"help\" || args.includes(\"--help\") || args.includes(\"-h\")) {\n return {\n command: \"help\",\n withConfig: false,\n noPrompt: false,\n noInteractive: false,\n quiet: false,\n outputFormat,\n transport,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n if (commandOverride === \"version\" || args.includes(\"--version\") || args.includes(\"-v\")) {\n return {\n command: \"version\",\n withConfig: false,\n noPrompt: false,\n noInteractive: false,\n quiet: false,\n outputFormat,\n transport,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n if (commandOverride === \"update\" || args.includes(\"--update\")) {\n const mode = args.includes(\"--global\") ? \"global\" : args.includes(\"--local\") ? \"local\" : undefined;\n return {\n command: \"update\",\n mode,\n withConfig: false,\n noPrompt: false,\n noInteractive: false,\n quiet: false,\n outputFormat,\n transport,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n if (commandOverride === \"uninstall\" || args.includes(\"--uninstall\")) {\n const mode = args.includes(\"--global\") ? \"global\" : args.includes(\"--local\") ? \"local\" : undefined;\n const noPrompt = args.includes(\"--no-prompt\") || args.includes(\"--no-interactive\");\n return {\n command: \"uninstall\",\n mode,\n withConfig: false,\n noPrompt,\n noInteractive: noPrompt,\n quiet: args.includes(\"--quiet\"),\n outputFormat,\n transport,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n }\n\n const withConfig = args.includes(\"--with-config\") || fullInstall;\n const noPrompt = args.includes(\"--no-prompt\") || args.includes(\"--no-interactive\");\n const noInteractive = args.includes(\"--no-interactive\") || noPrompt;\n const quiet = args.includes(\"--quiet\");\n\n let mode: InstallMode | undefined;\n if (args.includes(\"--global\")) {\n mode = \"global\";\n } else if (args.includes(\"--local\")) {\n mode = \"local\";\n } else if (noPrompt) {\n mode = \"global\";\n }\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index] ?? \"\";\n if (arg.startsWith(\"--\") && !VALID_FLAG_SET.has(arg)) {\n if (arg.includes(\"=\")) {\n const baseFlag = arg.split(\"=\", 2)[0] ?? \"\";\n if (VALID_EQUALS_FLAG_SET.has(baseFlag)) {\n continue;\n }\n }\n throw createUsageError(`Unknown flag: ${arg}`);\n }\n if (arg.startsWith(\"-\") && !arg.startsWith(\"--\") && !SHORT_FLAGS[arg]) {\n throw createUsageError(`Unknown flag: ${arg}`);\n }\n if (shouldSkipValueToken(arg, args[index + 1])) {\n index += 1;\n }\n }\n\n return {\n command: commandOverride ?? \"install\",\n mode,\n withConfig,\n noPrompt,\n noInteractive,\n quiet,\n outputFormat,\n transport,\n skillsMode,\n fullInstall,\n rawArgs: args\n };\n}\n\nexport function detectOutputFormat(argv: string[]): OutputFormat {\n const args = expandShortFlags(argv.slice(2));\n try {\n return parseOutputFormat(args);\n } catch {\n return \"text\";\n }\n}\n\nexport function detectQuiet(argv: string[]): boolean {\n const args = expandShortFlags(argv.slice(2));\n return args.includes(\"--quiet\");\n}\n"],"mappings":";;;;;;;;;;AAQA,IAAM,kBAAkB,IAAI,IAAY,YAAY;AAwBpD,IAAM,cAAsC;AAAA,EAC1C,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AACR;AAEA,SAAS,iBAAiB,MAA0B;AAClD,SAAO,KAAK,IAAI,CAAC,QAAQ,YAAY,GAAG,KAAK,GAAG;AAClD;AAEA,SAAS,gBAAgB,MAA4B;AACnD,QAAM,WAAW,KAAK,SAAS,gBAAgB;AAC/C,QAAM,YAAY,KAAK,SAAS,iBAAiB;AACjD,MAAI,YAAY,WAAW;AACzB,UAAM,iBAAiB,kDAAkD;AAAA,EAC3E;AACA,MAAI,KAAK,SAAS,aAAa,GAAG;AAChC,WAAO;AAAA,EACT;AACA,MAAI,UAAU;AACZ,WAAO;AAAA,EACT;AACA,MAAI,WAAW;AACb,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,MAA8B;AACvD,QAAM,aAAa,KAAK,KAAK,CAAC,QAAQ,IAAI,WAAW,iBAAiB,CAAC;AACvE,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,EACT;AAEA,MAAI;AACJ,MAAI,WAAW,SAAS,GAAG,GAAG;AAC5B,YAAQ,WAAW,MAAM,KAAK,CAAC,EAAE,CAAC;AAAA,EACpC,OAAO;AACL,UAAM,QAAQ,KAAK,QAAQ,UAAU;AACrC,YAAQ,SAAS,IAAI,KAAK,QAAQ,CAAC,IAAI;AAAA,EACzC;AAEA,MAAI,UAAU,UAAU,UAAU,UAAU,UAAU,eAAe;AACnE,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB,4BAA4B,SAAS,SAAS,EAAE;AACzE;AAEA,SAAS,eAAe,MAA+B;AACrD,QAAM,gBAAgB,KAAK,KAAK,CAAC,QAAQ,IAAI,WAAW,aAAa,CAAC;AACtE,MAAI,CAAC,eAAe;AAClB,WAAO;AAAA,EACT;AAEA,MAAI;AACJ,MAAI,cAAc,SAAS,GAAG,GAAG;AAC/B,YAAQ,cAAc,MAAM,KAAK,CAAC,EAAE,CAAC;AAAA,EACvC,OAAO;AACL,UAAM,QAAQ,KAAK,QAAQ,aAAa;AACxC,YAAQ,SAAS,IAAI,KAAK,QAAQ,CAAC,IAAI;AAAA,EACzC;AAEA,MAAI,UAAU,WAAW,UAAU,UAAU;AAC3C,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB,wBAAwB,SAAS,SAAS,EAAE;AACrE;AAEA,IAAM,iBAAiB,IAAI,IAAY,WAAW;AAClD,IAAM,wBAAwB,IAAI,IAAY,kBAAkB;AAChE,IAAM,wBAAwB,oBAAI,IAAY,CAAC,MAAM,CAAC;AACtD,IAAM,uBAAuB;AAE7B,SAAS,qBAAqB,MAAc,OAAoC;AAC9E,MAAI,CAAC,sBAAsB,IAAI,IAAI,KAAK,UAAU,QAAW;AAC3D,WAAO;AAAA,EACT;AACA,MAAI,CAAC,MAAM,WAAW,GAAG,GAAG;AAC1B,WAAO;AAAA,EACT;AACA,SAAO,sBAAsB,IAAI,IAAI,KAAK,qBAAqB,KAAK,KAAK;AAC3E;AAEO,SAAS,UAAU,MAA4B;AACpD,MAAI,OAAO,iBAAiB,KAAK,MAAM,CAAC,CAAC;AACzC,MAAI,kBAAqC;AAEzC,MAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,GAAG;AACvC,UAAM,YAAY,KAAK,CAAC;AACxB,QAAI,gBAAgB,IAAI,SAAS,GAAG;AAClC,wBAAkB;AAClB,aAAO,KAAK,MAAM,CAAC;AAAA,IACrB,OAAO;AACL,YAAM,iBAAiB,oBAAoB,SAAS,EAAE;AAAA,IACxD;AAAA,EACF;AACA,QAAM,YAAY,KAAK,SAAS,UAAU;AAC1C,QAAM,WAAW,KAAK,SAAS,SAAS;AACxC,MAAI,aAAa,UAAU;AACzB,UAAM,iBAAiB,oCAAoC;AAAA,EAC7D;AAEA,QAAM,aAAa,gBAAgB,IAAI;AACvC,QAAM,cAAc,KAAK,SAAS,QAAQ;AAC1C,QAAM,eAAe,kBAAkB,IAAI;AAC3C,QAAM,YAAY,oBAAoB,aAAa,UAAU,eAAe,IAAI;AAEhF,MAAI,oBAAoB,UAAU,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,IAAI,GAAG;AAChF,WAAO;AAAA,MACL,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,eAAe;AAAA,MACf,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AAEA,MAAI,oBAAoB,aAAa,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,IAAI,GAAG;AACtF,WAAO;AAAA,MACL,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,eAAe;AAAA,MACf,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AAEA,MAAI,oBAAoB,YAAY,KAAK,SAAS,UAAU,GAAG;AAC7D,UAAMA,QAAO,KAAK,SAAS,UAAU,IAAI,WAAW,KAAK,SAAS,SAAS,IAAI,UAAU;AACzF,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAAA;AAAA,MACA,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,eAAe;AAAA,MACf,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AAEA,MAAI,oBAAoB,eAAe,KAAK,SAAS,aAAa,GAAG;AACnE,UAAMA,QAAO,KAAK,SAAS,UAAU,IAAI,WAAW,KAAK,SAAS,SAAS,IAAI,UAAU;AACzF,UAAMC,YAAW,KAAK,SAAS,aAAa,KAAK,KAAK,SAAS,kBAAkB;AACjF,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAAD;AAAA,MACA,YAAY;AAAA,MACZ,UAAAC;AAAA,MACA,eAAeA;AAAA,MACf,OAAO,KAAK,SAAS,SAAS;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AAEA,QAAM,aAAa,KAAK,SAAS,eAAe,KAAK;AACrD,QAAM,WAAW,KAAK,SAAS,aAAa,KAAK,KAAK,SAAS,kBAAkB;AACjF,QAAM,gBAAgB,KAAK,SAAS,kBAAkB,KAAK;AAC3D,QAAM,QAAQ,KAAK,SAAS,SAAS;AAErC,MAAI;AACJ,MAAI,KAAK,SAAS,UAAU,GAAG;AAC7B,WAAO;AAAA,EACT,WAAW,KAAK,SAAS,SAAS,GAAG;AACnC,WAAO;AAAA,EACT,WAAW,UAAU;AACnB,WAAO;AAAA,EACT;AAEA,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACnD,UAAM,MAAM,KAAK,KAAK,KAAK;AAC3B,QAAI,IAAI,WAAW,IAAI,KAAK,CAAC,eAAe,IAAI,GAAG,GAAG;AACpD,UAAI,IAAI,SAAS,GAAG,GAAG;AACrB,cAAM,WAAW,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,KAAK;AACzC,YAAI,sBAAsB,IAAI,QAAQ,GAAG;AACvC;AAAA,QACF;AAAA,MACF;AACA,YAAM,iBAAiB,iBAAiB,GAAG,EAAE;AAAA,IAC/C;AACA,QAAI,IAAI,WAAW,GAAG,KAAK,CAAC,IAAI,WAAW,IAAI,KAAK,CAAC,YAAY,GAAG,GAAG;AACrE,YAAM,iBAAiB,iBAAiB,GAAG,EAAE;AAAA,IAC/C;AACA,QAAI,qBAAqB,KAAK,KAAK,QAAQ,CAAC,CAAC,GAAG;AAC9C,eAAS;AAAA,IACX;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS,mBAAmB;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EACX;AACF;AAEO,SAAS,mBAAmB,MAA8B;AAC/D,QAAM,OAAO,iBAAiB,KAAK,MAAM,CAAC,CAAC;AAC3C,MAAI;AACF,WAAO,kBAAkB,IAAI;AAAA,EAC/B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":["mode","noPrompt"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/utils/workflow-message.ts"],"sourcesContent":["import { summarizePrimaryProviderIssue } from \"../../providers/constraint\";\n\ntype FailureShape = {\n provider?: string;\n error?: {\n reasonCode?: unknown;\n code?: unknown;\n message?: unknown;\n details?: Record<string, unknown>;\n };\n};\n\nconst asRecord = (value: unknown): Record<string, unknown> | null => (\n value && typeof value === \"object\" && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null\n);\n\nconst readNonEmptyString = (value: unknown): string | null => (\n typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null\n);\n\nconst UNRESOLVED_COMMAND_PLACEHOLDER_RE = /<[^>\\n]+>/;\n\nconst readRunnableStepCommand = (step: Record<string, unknown>): string | null => {\n const command = readNonEmptyString(step.command);\n if (!command) return null;\n return UNRESOLVED_COMMAND_PLACEHOLDER_RE.test(command) ? null : command;\n};\n\nconst readDisplayableNextStep = (value: unknown): string | null => {\n const text = readNonEmptyString(value);\n if (!text) return null;\n return UNRESOLVED_COMMAND_PLACEHOLDER_RE.test(text) ? null : text;\n};\n\nconst readMeta = (data: unknown): Record<string, unknown> | null => {\n return asRecord(asRecord(data)?.meta);\n};\n\nconst readPrimaryConstraint = (data: unknown): Record<string, unknown> | null => {\n const meta = readMeta(data);\n if (!meta) return null;\n return asRecord(meta.primaryConstraint);\n};\n\nconst readPrimarySummary = (data: unknown): string | null => {\n const meta = readMeta(data);\n return readNonEmptyString(meta?.primaryConstraintSummary);\n};\n\nconst readPrimaryNextStep = (data: unknown): string | null => {\n const constraint = readPrimaryConstraint(data);\n if (!constraint) return null;\n const guidance = asRecord(constraint.guidance);\n if (!guidance) return null;\n const commands = guidance.recommendedNextCommands;\n if (!Array.isArray(commands)) return null;\n const nextStep = commands.find((entry): entry is string => typeof entry === \"string\" && entry.trim().length > 0);\n return nextStep?.trim() ?? null;\n};\n\nconst inferPrimaryIssueNextStep = (data: unknown): string | null => {\n return summarizePrimaryProviderIssue(readFailures(data))?.guidance?.recommendedNextCommands[0] ?? null;\n};\n\nconst readFailures = (data: unknown): FailureShape[] => {\n const meta = readMeta(data);\n if (!meta) return [];\n const failures = meta.failures;\n return Array.isArray(failures)\n ? failures.filter((entry): entry is FailureShape => Boolean(entry) && typeof entry === \"object\")\n : [];\n};\n\nexport const readFollowthroughSummary = (data: unknown): string | null => {\n const record = asRecord(data);\n return readNonEmptyString(record?.followthroughSummary)\n ?? readNonEmptyString(readMeta(data)?.followthroughSummary);\n};\n\nconst readSuggestedSteps = (data: unknown): readonly Record<string, unknown>[] => {\n const steps = asRecord(data)?.suggestedSteps;\n return Array.isArray(steps)\n ? steps.flatMap((step) => {\n const record = asRecord(step);\n return record ? [record] : [];\n })\n : [];\n};\n\nexport const buildNextStepMessage = (message: string, nextStep: string | null): string => {\n const displayableNextStep = readDisplayableNextStep(nextStep);\n return displayableNextStep ? `${message} Next step: ${displayableNextStep}` : message;\n};\n\nexport const buildProviderFollowupErrorMessage = (message: string): string => {\n const normalized = message.toLowerCase();\n if (normalized.includes(\"next step:\")) return message;\n if (normalized.includes(\"requires login or an existing session\")) {\n return buildNextStepMessage(\n message,\n \"Reuse an authenticated browser session, import logged-in cookies, or use the provider sign-in flow.\"\n );\n }\n if (\n normalized.includes(\"requires manual browser follow-up\")\n || normalized.includes(\"requires a live browser-rendered page\")\n ) {\n return buildNextStepMessage(message, \"Retry with browser assistance or a headed browser session.\");\n }\n return message;\n};\n\nexport const readSuggestedNextAction = (data: unknown): string | null => {\n const record = asRecord(data);\n if (!record) return null;\n return readDisplayableNextStep(record.suggestedNextAction)\n ?? readDisplayableNextStep(asRecord(record.sessionInspector)?.suggestedNextAction);\n};\n\nexport const readSuggestedStepCommand = (data: unknown): string | null => {\n let current = asRecord(data);\n\n while (current) {\n const command = readSuggestedSteps(current)\n .map(readRunnableStepCommand)\n .find((step): step is string => Boolean(step));\n if (command) {\n return command;\n }\n current = asRecord(current.challengePlan);\n }\n\n return null;\n};\n\nexport const readSuggestedStepReason = (data: unknown): string | null => {\n let current = asRecord(data);\n\n while (current) {\n const [firstStep] = readSuggestedSteps(current);\n if (firstStep) {\n return readDisplayableNextStep(firstStep.reason);\n }\n current = asRecord(current.challengePlan);\n }\n\n return null;\n};\n\nexport const readWorkflowGuidanceNextStep = (data: unknown): string | null => (\n readSuggestedNextAction(data) ?? readSuggestedStepCommand(data) ?? readSuggestedStepReason(data)\n);\n\nexport const buildWorkflowCompletionMessage = (workflowLabel: string, data: unknown): string => {\n const explicitSummary = readPrimarySummary(data);\n if (explicitSummary) {\n return buildNextStepMessage(\n `${workflowLabel} completed with provider follow-up required: ${explicitSummary}`,\n readPrimaryNextStep(data) ?? inferPrimaryIssueNextStep(data)\n );\n }\n const inferred = summarizePrimaryProviderIssue(readFailures(data));\n if (inferred) {\n return buildNextStepMessage(\n `${workflowLabel} completed with provider follow-up required: ${inferred.summary}`,\n inferred.guidance?.recommendedNextCommands[0] ?? null\n );\n }\n const followthroughSummary = readFollowthroughSummary(data);\n if (followthroughSummary) {\n return buildNextStepMessage(\n `${workflowLabel} completed. ${followthroughSummary}`,\n readWorkflowGuidanceNextStep(data)\n );\n }\n return `${workflowLabel} completed.`;\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/package-assets.ts","../src/skills/bundled-skill-directories.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\n\nconst PACKAGE_NAME = \"opendevbrowser\";\nconst SKILLS_DIR_NAME = \"skills\";\n\nlet cachedPackageRoot: string | null = null;\n\nfunction findPackageRoot(startDir: string): string | null {\n let current = startDir;\n\n while (true) {\n const pkgPath = path.join(current, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n try {\n const parsed = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\")) as { name?: string };\n if (parsed.name === PACKAGE_NAME) {\n return current;\n }\n } catch {\n void 0;\n }\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n\n return null;\n}\n\nexport function getPackageRoot(): string {\n if (cachedPackageRoot) {\n return cachedPackageRoot;\n }\n const moduleDir = path.dirname(fileURLToPath(import.meta.url));\n const packageRoot = findPackageRoot(moduleDir);\n if (!packageRoot) {\n throw new Error(`Unable to locate ${PACKAGE_NAME} package root.`);\n }\n cachedPackageRoot = packageRoot;\n return cachedPackageRoot;\n}\n\nexport function findBundledSkillsDir(): string | null {\n try {\n const skillsDir = path.join(getPackageRoot(), SKILLS_DIR_NAME);\n return fs.existsSync(skillsDir) ? skillsDir : null;\n } catch {\n return null;\n }\n}\n\nexport function getBundledSkillsDir(): string {\n const skillsDir = findBundledSkillsDir();\n if (!skillsDir) {\n throw new Error(`Bundled skills directory not found in ${PACKAGE_NAME} package.`);\n }\n return skillsDir;\n}\n","export interface BundledSkillDirectory {\n name: string;\n}\n\nexport const bundledSkillDirectories: BundledSkillDirectory[] = [\n { name: \"opendevbrowser-best-practices\" },\n { name: \"opendevbrowser-continuity-ledger\" },\n { name: \"opendevbrowser-data-extraction\" },\n { name: \"opendevbrowser-design-agent\" },\n { name: \"opendevbrowser-form-testing\" },\n { name: \"opendevbrowser-login-automation\" },\n { name: \"opendevbrowser-product-presentation-asset\" },\n { name: \"opendevbrowser-research\" },\n { name: \"opendevbrowser-shopping\" }\n];\n\nconst bundledSkillDirectoryByName = new Map(\n bundledSkillDirectories.map((entry) => [entry.name, entry] as const)\n);\n\nexport function listBundledSkillDirectories(): BundledSkillDirectory[] {\n return [...bundledSkillDirectories];\n}\n\nexport function getBundledSkillDirectory(name: string): BundledSkillDirectory | null {\n return bundledSkillDirectoryByName.get(name) ?? null;\n}\n\nexport function isBundledSkillName(name: string): boolean {\n return bundledSkillDirectoryByName.has(name);\n}\n"],"mappings":";AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,SAAS,qBAAqB;AAE9B,IAAM,eAAe;AACrB,IAAM,kBAAkB;AAExB,IAAI,oBAAmC;AAEvC,SAAS,gBAAgB,UAAiC;AACxD,MAAI,UAAU;AAEd,SAAO,MAAM;AACX,UAAM,UAAe,UAAK,SAAS,cAAc;AACjD,QAAO,cAAW,OAAO,GAAG;AAC1B,UAAI;AACF,cAAM,SAAS,KAAK,MAAS,gBAAa,SAAS,OAAO,CAAC;AAC3D,YAAI,OAAO,SAAS,cAAc;AAChC,iBAAO;AAAA,QACT;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,UAAM,SAAc,aAAQ,OAAO;AACnC,QAAI,WAAW,SAAS;AACtB;AAAA,IACF;AACA,cAAU;AAAA,EACZ;AAEA,SAAO;AACT;AAEO,SAAS,iBAAyB;AACvC,MAAI,mBAAmB;AACrB,WAAO;AAAA,EACT;AACA,QAAM,YAAiB,aAAQ,cAAc,YAAY,GAAG,CAAC;AAC7D,QAAM,cAAc,gBAAgB,SAAS;AAC7C,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,oBAAoB,YAAY,gBAAgB;AAAA,EAClE;AACA,sBAAoB;AACpB,SAAO;AACT;AAEO,SAAS,uBAAsC;AACpD,MAAI;AACF,UAAM,YAAiB,UAAK,eAAe,GAAG,eAAe;AAC7D,WAAU,cAAW,SAAS,IAAI,YAAY;AAAA,EAChD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,sBAA8B;AAC5C,QAAM,YAAY,qBAAqB;AACvC,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,yCAAyC,YAAY,WAAW;AAAA,EAClF;AACA,SAAO;AACT;;;AC3DO,IAAM,0BAAmD;AAAA,EAC9D,EAAE,MAAM,gCAAgC;AAAA,EACxC,EAAE,MAAM,mCAAmC;AAAA,EAC3C,EAAE,MAAM,iCAAiC;AAAA,EACzC,EAAE,MAAM,8BAA8B;AAAA,EACtC,EAAE,MAAM,8BAA8B;AAAA,EACtC,EAAE,MAAM,kCAAkC;AAAA,EAC1C,EAAE,MAAM,4CAA4C;AAAA,EACpD,EAAE,MAAM,0BAA0B;AAAA,EAClC,EAAE,MAAM,0BAA0B;AACpC;AAEA,IAAM,8BAA8B,IAAI;AAAA,EACtC,wBAAwB,IAAI,CAAC,UAAU,CAAC,MAAM,MAAM,KAAK,CAAU;AACrE;AAEO,SAAS,8BAAuD;AACrE,SAAO,CAAC,GAAG,uBAAuB;AACpC;AAMO,SAAS,mBAAmB,MAAuB;AACxD,SAAO,4BAA4B,IAAI,IAAI;AAC7C;","names":[]}