opendevbrowser 0.0.28 → 0.0.30

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 (325) hide show
  1. package/README.md +2 -2
  2. package/dist/accessibility-snapshot-CQ4ZKWKC.js +39 -0
  3. package/dist/accessibility-snapshot-CQ4ZKWKC.js.map +1 -0
  4. package/dist/active-window-TD5HYJ72.js +37 -0
  5. package/dist/active-window-TD5HYJ72.js.map +1 -0
  6. package/dist/annotate-VTLFS2XV.js +205 -0
  7. package/dist/annotate-VTLFS2XV.js.map +1 -0
  8. package/dist/artifacts-KJ6RNDO2.js +120 -0
  9. package/dist/artifacts-KJ6RNDO2.js.map +1 -0
  10. package/dist/attr-BCI5KYCW.js +84 -0
  11. package/dist/attr-BCI5KYCW.js.map +1 -0
  12. package/dist/browser/ops-client.d.ts +1 -0
  13. package/dist/browser/ops-client.d.ts.map +1 -1
  14. package/dist/canvas-5DFEEOKM.js +309 -0
  15. package/dist/canvas-5DFEEOKM.js.map +1 -0
  16. package/dist/capture-desktop-HFTTWY4Z.js +38 -0
  17. package/dist/capture-desktop-HFTTWY4Z.js.map +1 -0
  18. package/dist/capture-window-X63XPIFF.js +40 -0
  19. package/dist/capture-window-X63XPIFF.js.map +1 -0
  20. package/dist/check-LWAUY7GC.js +71 -0
  21. package/dist/check-LWAUY7GC.js.map +1 -0
  22. package/dist/checked-ZSOUKVYT.js +71 -0
  23. package/dist/checked-ZSOUKVYT.js.map +1 -0
  24. package/dist/chunk-2SIMIPLY.js +67 -0
  25. package/dist/chunk-2SIMIPLY.js.map +1 -0
  26. package/dist/chunk-37VSRUW4.js +141 -0
  27. package/dist/chunk-37VSRUW4.js.map +1 -0
  28. package/dist/{chunk-T3VVHJTK.js → chunk-4BEJVZRK.js} +1078 -1458
  29. package/dist/chunk-4BEJVZRK.js.map +1 -0
  30. package/dist/chunk-5SWZDVOW.js +144 -0
  31. package/dist/chunk-5SWZDVOW.js.map +1 -0
  32. package/dist/chunk-6PVZ2ABC.js +429 -0
  33. package/dist/chunk-6PVZ2ABC.js.map +1 -0
  34. package/dist/chunk-7GVOUZMQ.js +64 -0
  35. package/dist/chunk-7GVOUZMQ.js.map +1 -0
  36. package/dist/chunk-7THCPS52.js +84 -0
  37. package/dist/chunk-7THCPS52.js.map +1 -0
  38. package/dist/chunk-AHEWXOKY.js +64 -0
  39. package/dist/chunk-AHEWXOKY.js.map +1 -0
  40. package/dist/chunk-ASMHEEKY.js +10 -0
  41. package/dist/chunk-ASMHEEKY.js.map +1 -0
  42. package/dist/chunk-COAOWH3G.js +3651 -0
  43. package/dist/chunk-COAOWH3G.js.map +1 -0
  44. package/dist/chunk-DBF5OKH3.js +111 -0
  45. package/dist/chunk-DBF5OKH3.js.map +1 -0
  46. package/dist/chunk-DW4TX7MU.js +54 -0
  47. package/dist/chunk-DW4TX7MU.js.map +1 -0
  48. package/dist/chunk-GQJ5S3BL.js +20 -0
  49. package/dist/chunk-GQJ5S3BL.js.map +1 -0
  50. package/dist/chunk-IPE7TF2P.js +54 -0
  51. package/dist/chunk-IPE7TF2P.js.map +1 -0
  52. package/dist/chunk-IQTJHXZJ.js +126 -0
  53. package/dist/chunk-IQTJHXZJ.js.map +1 -0
  54. package/dist/chunk-J47N77VG.js +2969 -0
  55. package/dist/chunk-J47N77VG.js.map +1 -0
  56. package/dist/chunk-JZXD6FWR.js +25 -0
  57. package/dist/chunk-JZXD6FWR.js.map +1 -0
  58. package/dist/{chunk-QVWOPIZJ.js → chunk-KDSNXS6N.js} +75 -149
  59. package/dist/chunk-KDSNXS6N.js.map +1 -0
  60. package/dist/chunk-KZ2IXVQT.js +219 -0
  61. package/dist/chunk-KZ2IXVQT.js.map +1 -0
  62. package/dist/chunk-MD655IPO.js +838 -0
  63. package/dist/chunk-MD655IPO.js.map +1 -0
  64. package/dist/chunk-MX3NFLCE.js +940 -0
  65. package/dist/chunk-MX3NFLCE.js.map +1 -0
  66. package/dist/chunk-OW5HMYMI.js +19 -0
  67. package/dist/chunk-OW5HMYMI.js.map +1 -0
  68. package/dist/chunk-PPUWQKIC.js +26 -0
  69. package/dist/chunk-PPUWQKIC.js.map +1 -0
  70. package/dist/{chunk-I5ZCOZZV.js → chunk-QOMWCRE3.js} +1202 -9561
  71. package/dist/chunk-QOMWCRE3.js.map +1 -0
  72. package/dist/chunk-RCZZGGJS.js +226 -0
  73. package/dist/chunk-RCZZGGJS.js.map +1 -0
  74. package/dist/chunk-RJNI3BHT.js +1 -0
  75. package/dist/chunk-RPXWUCQQ.js +112 -0
  76. package/dist/chunk-RPXWUCQQ.js.map +1 -0
  77. package/dist/chunk-S5KZQJJI.js +107 -0
  78. package/dist/chunk-S5KZQJJI.js.map +1 -0
  79. package/dist/chunk-T4GMCW6Z.js +46 -0
  80. package/dist/chunk-T4GMCW6Z.js.map +1 -0
  81. package/dist/chunk-WHQZBUNY.js +982 -0
  82. package/dist/chunk-WHQZBUNY.js.map +1 -0
  83. package/dist/chunk-WOXBLP7V.js +610 -0
  84. package/dist/chunk-WOXBLP7V.js.map +1 -0
  85. package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
  86. package/dist/cli/commands/macro-resolve.d.ts +4 -1
  87. package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
  88. package/dist/cli/commands/product-video.d.ts.map +1 -1
  89. package/dist/cli/commands/research.d.ts.map +1 -1
  90. package/dist/cli/commands/serve.d.ts.map +1 -1
  91. package/dist/cli/commands/shopping.d.ts.map +1 -1
  92. package/dist/cli/commands/workflow-output.d.ts +2 -0
  93. package/dist/cli/commands/workflow-output.d.ts.map +1 -0
  94. package/dist/cli/daemon-commands.d.ts.map +1 -1
  95. package/dist/cli/daemon.d.ts.map +1 -1
  96. package/dist/cli/index.js +204 -8123
  97. package/dist/cli/index.js.map +1 -1
  98. package/dist/cli/installers/postinstall-skill-sync.js +2 -1
  99. package/dist/cli/installers/postinstall-skill-sync.js.map +1 -1
  100. package/dist/cli/remote-relay.d.ts.map +1 -1
  101. package/dist/click-2AILSEIZ.js +81 -0
  102. package/dist/click-2AILSEIZ.js.map +1 -0
  103. package/dist/clone-component-TPJS3PEG.js +82 -0
  104. package/dist/clone-component-TPJS3PEG.js.map +1 -0
  105. package/dist/clone-page-LE74CIFC.js +69 -0
  106. package/dist/clone-page-LE74CIFC.js.map +1 -0
  107. package/dist/close-HN4YI47K.js +63 -0
  108. package/dist/close-HN4YI47K.js.map +1 -0
  109. package/dist/close-WFERRHX6.js +63 -0
  110. package/dist/close-WFERRHX6.js.map +1 -0
  111. package/dist/connect-RWBV2UCQ.js +107 -0
  112. package/dist/connect-RWBV2UCQ.js.map +1 -0
  113. package/dist/console-poll-PP4YYPDF.js +76 -0
  114. package/dist/console-poll-PP4YYPDF.js.map +1 -0
  115. package/dist/cookie-import-6IP776FC.js +177 -0
  116. package/dist/cookie-import-6IP776FC.js.map +1 -0
  117. package/dist/cookie-list-O2KG6DPU.js +117 -0
  118. package/dist/cookie-list-O2KG6DPU.js.map +1 -0
  119. package/dist/daemon-2BSAZXLT.js +194 -0
  120. package/dist/daemon-2BSAZXLT.js.map +1 -0
  121. package/dist/daemon-fingerprint.json +1 -1
  122. package/dist/debug-trace-snapshot-F3BDVZXS.js +136 -0
  123. package/dist/debug-trace-snapshot-F3BDVZXS.js.map +1 -0
  124. package/dist/dialog-6JQYUWMQ.js +75 -0
  125. package/dist/dialog-6JQYUWMQ.js.map +1 -0
  126. package/dist/disconnect-763TP7GH.js +58 -0
  127. package/dist/disconnect-763TP7GH.js.map +1 -0
  128. package/dist/enabled-DLYQFNIP.js +71 -0
  129. package/dist/enabled-DLYQFNIP.js.map +1 -0
  130. package/dist/extension-extractor-GKWSFHPN.js +11 -0
  131. package/dist/extension-extractor-GKWSFHPN.js.map +1 -0
  132. package/dist/global-D6WLWBXA.js +56 -0
  133. package/dist/global-D6WLWBXA.js.map +1 -0
  134. package/dist/goto-S346TJJH.js +98 -0
  135. package/dist/goto-S346TJJH.js.map +1 -0
  136. package/dist/help-EKKKEDL5.js +491 -0
  137. package/dist/help-EKKKEDL5.js.map +1 -0
  138. package/dist/hover-6JVJFGO7.js +71 -0
  139. package/dist/hover-6JVJFGO7.js.map +1 -0
  140. package/dist/html-EVOSPBIT.js +84 -0
  141. package/dist/html-EVOSPBIT.js.map +1 -0
  142. package/dist/index.d.ts.map +1 -1
  143. package/dist/index.js +87 -38
  144. package/dist/index.js.map +1 -1
  145. package/dist/inspector-H57BVUJP.js +62 -0
  146. package/dist/inspector-H57BVUJP.js.map +1 -0
  147. package/dist/inspector-audit-NQBAJWC7.js +84 -0
  148. package/dist/inspector-audit-NQBAJWC7.js.map +1 -0
  149. package/dist/inspector-plan-ZDIQVND3.js +69 -0
  150. package/dist/inspector-plan-ZDIQVND3.js.map +1 -0
  151. package/dist/inspiredesign-IEUL4PX3.js +234 -0
  152. package/dist/inspiredesign-IEUL4PX3.js.map +1 -0
  153. package/dist/install-autostart-output-5DOMKCQL.js +41 -0
  154. package/dist/install-autostart-output-5DOMKCQL.js.map +1 -0
  155. package/dist/install-autostart-reconciliation-NHKOFYTD.js +73 -0
  156. package/dist/install-autostart-reconciliation-NHKOFYTD.js.map +1 -0
  157. package/dist/launch-EK66VQPF.js +225 -0
  158. package/dist/launch-EK66VQPF.js.map +1 -0
  159. package/dist/list-ADZAQ2IU.js +51 -0
  160. package/dist/list-ADZAQ2IU.js.map +1 -0
  161. package/dist/list-KKUKN467.js +54 -0
  162. package/dist/list-KKUKN467.js.map +1 -0
  163. package/dist/local-HXJLUUNT.js +54 -0
  164. package/dist/local-HXJLUUNT.js.map +1 -0
  165. package/dist/macro-resolve-6DOQJ7CA.js +253 -0
  166. package/dist/macro-resolve-6DOQJ7CA.js.map +1 -0
  167. package/dist/macros/execute-runtime.d.ts +3 -1
  168. package/dist/macros/execute-runtime.d.ts.map +1 -1
  169. package/dist/macros/execute.d.ts +2 -0
  170. package/dist/macros/execute.d.ts.map +1 -1
  171. package/dist/native-UPLVQ2SG.js +22 -0
  172. package/dist/native-UPLVQ2SG.js.map +1 -0
  173. package/dist/network-poll-NUL4PDPY.js +76 -0
  174. package/dist/network-poll-NUL4PDPY.js.map +1 -0
  175. package/dist/new-5NKYPEFT.js +69 -0
  176. package/dist/new-5NKYPEFT.js.map +1 -0
  177. package/dist/onboarding-metadata-7E3KLYSZ.js +27 -0
  178. package/dist/onboarding-metadata-7E3KLYSZ.js.map +1 -0
  179. package/dist/open-NR3BPLXV.js +81 -0
  180. package/dist/open-NR3BPLXV.js.map +1 -0
  181. package/dist/opendevbrowser.d.ts.map +1 -1
  182. package/dist/opendevbrowser.js +87 -38
  183. package/dist/opendevbrowser.js.map +1 -1
  184. package/dist/perf-HJ36ZI6H.js +58 -0
  185. package/dist/perf-HJ36ZI6H.js.map +1 -0
  186. package/dist/pointer-down-IYTTQWXZ.js +55 -0
  187. package/dist/pointer-down-IYTTQWXZ.js.map +1 -0
  188. package/dist/pointer-drag-A2YC5PWI.js +54 -0
  189. package/dist/pointer-drag-A2YC5PWI.js.map +1 -0
  190. package/dist/pointer-move-W5K5FUI4.js +52 -0
  191. package/dist/pointer-move-W5K5FUI4.js.map +1 -0
  192. package/dist/pointer-up-6GWVO64Y.js +55 -0
  193. package/dist/pointer-up-6GWVO64Y.js.map +1 -0
  194. package/dist/press-A3V5WB3S.js +83 -0
  195. package/dist/press-A3V5WB3S.js.map +1 -0
  196. package/dist/product-video-52REKWF3.js +235 -0
  197. package/dist/product-video-52REKWF3.js.map +1 -0
  198. package/dist/providers/artifacts.d.ts +0 -2
  199. package/dist/providers/artifacts.d.ts.map +1 -1
  200. package/dist/providers/blocker.d.ts.map +1 -1
  201. package/dist/providers/bounded-map.d.ts +2 -0
  202. package/dist/providers/bounded-map.d.ts.map +1 -0
  203. package/dist/providers/community/index.d.ts.map +1 -1
  204. package/dist/providers/constraint.d.ts.map +1 -1
  205. package/dist/providers/index.d.ts +1 -0
  206. package/dist/providers/index.d.ts.map +1 -1
  207. package/dist/providers/renderer.d.ts.map +1 -1
  208. package/dist/providers/research-compiler.d.ts +1 -1
  209. package/dist/providers/research-compiler.d.ts.map +1 -1
  210. package/dist/providers/research-executor.d.ts.map +1 -1
  211. package/dist/providers/runtime-factory.d.ts.map +1 -1
  212. package/dist/providers/shared/traversal-url.d.ts +3 -0
  213. package/dist/providers/shared/traversal-url.d.ts.map +1 -1
  214. package/dist/providers/shopping/index.d.ts.map +1 -1
  215. package/dist/providers/social/search-quality.d.ts.map +1 -1
  216. package/dist/providers/workflow-handoff.d.ts +4 -0
  217. package/dist/providers/workflow-handoff.d.ts.map +1 -1
  218. package/dist/providers/workflow-output-root.d.ts +6 -0
  219. package/dist/providers/workflow-output-root.d.ts.map +1 -0
  220. package/dist/providers/workflows.d.ts.map +1 -1
  221. package/dist/{providers-QF2RFB4J.js → providers-IMFYMMHQ.js} +19 -14
  222. package/dist/providers-IMFYMMHQ.js.map +1 -0
  223. package/dist/public-surface/generated-manifest.d.ts +2 -2
  224. package/dist/public-surface/generated-manifest.d.ts.map +1 -1
  225. package/dist/public-surface/source.d.ts +2 -2
  226. package/dist/public-surface/source.d.ts.map +1 -1
  227. package/dist/relay/protocol.d.ts +3 -1
  228. package/dist/relay/protocol.d.ts.map +1 -1
  229. package/dist/relay/relay-server.d.ts +6 -0
  230. package/dist/relay/relay-server.d.ts.map +1 -1
  231. package/dist/research-WB6BBCDD.js +295 -0
  232. package/dist/research-WB6BBCDD.js.map +1 -0
  233. package/dist/review-BGWVY4RA.js +48 -0
  234. package/dist/review-BGWVY4RA.js.map +1 -0
  235. package/dist/review-desktop-LEORC5VS.js +54 -0
  236. package/dist/review-desktop-LEORC5VS.js.map +1 -0
  237. package/dist/rpc-4TSKSFGC.js +159 -0
  238. package/dist/rpc-4TSKSFGC.js.map +1 -0
  239. package/dist/run-3NBLVWXD.js +180 -0
  240. package/dist/run-3NBLVWXD.js.map +1 -0
  241. package/dist/screencast-start-UZVIT3IN.js +67 -0
  242. package/dist/screencast-start-UZVIT3IN.js.map +1 -0
  243. package/dist/screencast-stop-NOSJSIUO.js +59 -0
  244. package/dist/screencast-stop-NOSJSIUO.js.map +1 -0
  245. package/dist/screenshot-LARG4JQG.js +68 -0
  246. package/dist/screenshot-LARG4JQG.js.map +1 -0
  247. package/dist/scroll-VNFMV6TW.js +84 -0
  248. package/dist/scroll-VNFMV6TW.js.map +1 -0
  249. package/dist/scroll-into-view-VYRT3JPT.js +71 -0
  250. package/dist/scroll-into-view-VYRT3JPT.js.map +1 -0
  251. package/dist/select-KJTUZDVO.js +86 -0
  252. package/dist/select-KJTUZDVO.js.map +1 -0
  253. package/dist/serve-EV7K4HKR.js +498 -0
  254. package/dist/serve-EV7K4HKR.js.map +1 -0
  255. package/dist/shopping-DTXHVQ2X.js +273 -0
  256. package/dist/shopping-DTXHVQ2X.js.map +1 -0
  257. package/dist/skill-lifecycle-5UAZGKSN.js +89 -0
  258. package/dist/skill-lifecycle-5UAZGKSN.js.map +1 -0
  259. package/dist/skills-NSXDX6YM.js +26 -0
  260. package/dist/skills-NSXDX6YM.js.map +1 -0
  261. package/dist/snapshot-3XQMCMRJ.js +113 -0
  262. package/dist/snapshot-3XQMCMRJ.js.map +1 -0
  263. package/dist/status-OXSYA5XD.js +35 -0
  264. package/dist/status-OXSYA5XD.js.map +1 -0
  265. package/dist/status-YUMDP5KY.js +132 -0
  266. package/dist/status-YUMDP5KY.js.map +1 -0
  267. package/dist/status-capabilities-P4KDSE2Y.js +57 -0
  268. package/dist/status-capabilities-P4KDSE2Y.js.map +1 -0
  269. package/dist/text-V3B7UVIH.js +84 -0
  270. package/dist/text-V3B7UVIH.js.map +1 -0
  271. package/dist/tools/deps.d.ts +1 -0
  272. package/dist/tools/deps.d.ts.map +1 -1
  273. package/dist/tools/inspiredesign_run.d.ts.map +1 -1
  274. package/dist/tools/macro_resolve.d.ts.map +1 -1
  275. package/dist/tools/product_video_run.d.ts.map +1 -1
  276. package/dist/tools/research_run.d.ts.map +1 -1
  277. package/dist/tools/shopping_run.d.ts.map +1 -1
  278. package/dist/tools/workflow-output.d.ts +3 -0
  279. package/dist/tools/workflow-output.d.ts.map +1 -0
  280. package/dist/type-IYBN3ZLR.js +94 -0
  281. package/dist/type-IYBN3ZLR.js.map +1 -0
  282. package/dist/uncheck-SG737EGI.js +71 -0
  283. package/dist/uncheck-SG737EGI.js.map +1 -0
  284. package/dist/uninstall-KYKGJAX7.js +91 -0
  285. package/dist/uninstall-KYKGJAX7.js.map +1 -0
  286. package/dist/update-SMXPYGXS.js +305 -0
  287. package/dist/update-SMXPYGXS.js.map +1 -0
  288. package/dist/update-skill-modes-BVX7IVMW.js +38 -0
  289. package/dist/update-skill-modes-BVX7IVMW.js.map +1 -0
  290. package/dist/upload-KH6ZABJA.js +56 -0
  291. package/dist/upload-KH6ZABJA.js.map +1 -0
  292. package/dist/use-7YDKO3U4.js +63 -0
  293. package/dist/use-7YDKO3U4.js.map +1 -0
  294. package/dist/value-RZBWSKKM.js +71 -0
  295. package/dist/value-RZBWSKKM.js.map +1 -0
  296. package/dist/visible-BSFTAKXR.js +71 -0
  297. package/dist/visible-BSFTAKXR.js.map +1 -0
  298. package/dist/wait-TMTEAYOP.js +109 -0
  299. package/dist/wait-TMTEAYOP.js.map +1 -0
  300. package/dist/windows-HIZ23OHS.js +37 -0
  301. package/dist/windows-HIZ23OHS.js.map +1 -0
  302. package/extension/dist/background.js +99 -22
  303. package/extension/dist/ops/ops-runtime.js +85 -7
  304. package/extension/dist/ops/ops-session-store.js +3 -0
  305. package/extension/dist/ops/target-session-coordinator.js +3 -0
  306. package/extension/dist/services/CDPRouter.js +9 -0
  307. package/extension/manifest.json +1 -1
  308. package/package.json +1 -1
  309. package/skills/opendevbrowser-best-practices/SKILL.md +8 -6
  310. package/skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md +1 -1
  311. package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +3 -2
  312. package/skills/opendevbrowser-best-practices/scripts/validator-fixture-cli.sh +39 -2
  313. package/skills/opendevbrowser-research/SKILL.md +64 -12
  314. package/skills/opendevbrowser-research/artifacts/research-workflows.md +56 -19
  315. package/skills/opendevbrowser-research/assets/templates/compact.md +31 -5
  316. package/skills/opendevbrowser-research/assets/templates/context.json +52 -1
  317. package/skills/opendevbrowser-research/assets/templates/report.md +57 -4
  318. package/skills/opendevbrowser-research/examples/sample-input.json +1 -1
  319. package/skills/opendevbrowser-research/examples/sample-output.md +27 -2
  320. package/skills/opendevbrowser-research/scripts/run-research.sh +2 -6
  321. package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +115 -1
  322. package/dist/chunk-I5ZCOZZV.js.map +0 -1
  323. package/dist/chunk-QVWOPIZJ.js.map +0 -1
  324. package/dist/chunk-T3VVHJTK.js.map +0 -1
  325. /package/dist/{providers-QF2RFB4J.js.map → chunk-RJNI3BHT.js.map} +0 -0
@@ -1,3 +1,6 @@
1
+ import {
2
+ ensureDir
3
+ } from "./chunk-7THCPS52.js";
1
4
  import {
2
5
  getBundledSkillsDir,
3
6
  listBundledSkillDirectories
@@ -5,108 +8,34 @@ import {
5
8
 
6
9
  // src/cli/installers/skills.ts
7
10
  import * as crypto from "crypto";
8
- import * as fs2 from "fs";
9
- import * as path3 from "path";
10
-
11
- // src/cli/utils/config.ts
12
11
  import * as fs from "fs";
13
- import * as path from "path";
14
- import * as os from "os";
15
- import { parse as parseJsonc, modify, applyEdits } from "jsonc-parser";
16
- var PLUGIN_NAME = "opendevbrowser";
17
- var SCHEMA_URL = "https://opencode.ai/config.json";
18
- function getGlobalConfigPath() {
19
- const configDir = process.env.OPENCODE_CONFIG_DIR || path.join(os.homedir(), ".config", "opencode");
20
- return path.join(configDir, "opencode.json");
21
- }
22
- function getLocalConfigPath() {
23
- return path.join(process.cwd(), "opencode.json");
24
- }
25
- function ensureDir(dirPath) {
26
- if (!fs.existsSync(dirPath)) {
27
- fs.mkdirSync(dirPath, { recursive: true });
28
- }
29
- }
30
- function readConfig(configPath) {
31
- if (!fs.existsSync(configPath)) {
32
- return { content: "", config: {} };
33
- }
34
- const content = fs.readFileSync(configPath, "utf-8");
35
- const errors = [];
36
- const parsed = parseJsonc(content, errors, { allowTrailingComma: true });
37
- if (errors.length > 0) {
38
- const firstError = errors[0];
39
- throw new Error(`Invalid JSONC at ${configPath}: parse error at offset ${firstError?.offset ?? 0}`);
40
- }
41
- return { content, config: parsed ?? {} };
42
- }
43
- function hasPlugin(config, pluginName = PLUGIN_NAME) {
44
- return config.plugin?.includes(pluginName) ?? false;
45
- }
46
- function createConfigWithPlugin(pluginName = PLUGIN_NAME) {
47
- return {
48
- $schema: SCHEMA_URL,
49
- plugin: [pluginName]
50
- };
51
- }
52
- function updateConfigContent(content, pluginName = PLUGIN_NAME) {
53
- if (!content.trim()) {
54
- return JSON.stringify(createConfigWithPlugin(pluginName), null, 2) + "\n";
55
- }
56
- const parsed = parseJsonc(content, [], { allowTrailingComma: true }) ?? {};
57
- if (parsed.plugin?.includes(pluginName)) {
58
- return content;
59
- }
60
- let result = content;
61
- if (!parsed.$schema) {
62
- const edits2 = modify(result, ["$schema"], SCHEMA_URL, { formattingOptions: { tabSize: 2, insertSpaces: true } });
63
- result = applyEdits(result, edits2);
64
- }
65
- const newPlugins = parsed.plugin ? [...parsed.plugin, pluginName] : [pluginName];
66
- const edits = modify(result, ["plugin"], newPlugins, { formattingOptions: { tabSize: 2, insertSpaces: true } });
67
- result = applyEdits(result, edits);
68
- return result;
69
- }
70
- function removePluginFromContent(content, pluginName = PLUGIN_NAME) {
71
- if (!content.trim()) {
72
- return content;
73
- }
74
- const parsed = parseJsonc(content, [], { allowTrailingComma: true }) ?? {};
75
- if (!parsed.plugin?.includes(pluginName)) {
76
- return content;
77
- }
78
- const newPlugins = parsed.plugin.filter((p) => p !== pluginName);
79
- const edits = modify(content, ["plugin"], newPlugins.length > 0 ? newPlugins : void 0, {
80
- formattingOptions: { tabSize: 2, insertSpaces: true }
81
- });
82
- return applyEdits(content, edits);
83
- }
12
+ import * as path2 from "path";
84
13
 
85
14
  // src/cli/utils/skills.ts
86
- import * as path2 from "path";
87
- import * as os2 from "os";
15
+ import * as path from "path";
16
+ import * as os from "os";
88
17
  var SKILL_DIR_NAME = "skill";
89
18
  var SKILLS_DIR_NAME = "skills";
90
19
  function getGlobalSkillDir() {
91
- const configDir = process.env.OPENCODE_CONFIG_DIR || path2.join(os2.homedir(), ".config", "opencode");
92
- return path2.join(configDir, SKILL_DIR_NAME);
20
+ const configDir = process.env.OPENCODE_CONFIG_DIR || path.join(os.homedir(), ".config", "opencode");
21
+ return path.join(configDir, SKILL_DIR_NAME);
93
22
  }
94
23
  function getLocalSkillDir() {
95
- return path2.join(process.cwd(), ".opencode", SKILL_DIR_NAME);
24
+ return path.join(process.cwd(), ".opencode", SKILL_DIR_NAME);
96
25
  }
97
26
  function getCodexHomeDir() {
98
- return process.env.CODEX_HOME || path2.join(os2.homedir(), ".codex");
27
+ return process.env.CODEX_HOME || path.join(os.homedir(), ".codex");
99
28
  }
100
29
  function getClaudeCodeHomeDir() {
101
- return process.env.CLAUDECODE_HOME || path2.join(os2.homedir(), ".claude");
30
+ return process.env.CLAUDECODE_HOME || path.join(os.homedir(), ".claude");
102
31
  }
103
32
  function getAmpHomeDir() {
104
- return process.env.AMP_CLI_HOME || path2.join(os2.homedir(), ".amp");
33
+ return process.env.AMP_CLI_HOME || path.join(os.homedir(), ".amp");
105
34
  }
106
35
  function dedupeTargets(targets) {
107
36
  const deduped = /* @__PURE__ */ new Map();
108
37
  for (const target of targets) {
109
- const key = path2.resolve(target.dir);
38
+ const key = path.resolve(target.dir);
110
39
  const existing = deduped.get(key);
111
40
  if (existing) {
112
41
  if (!existing.agents.includes(target.agent)) {
@@ -119,21 +48,21 @@ function dedupeTargets(targets) {
119
48
  return Array.from(deduped.values());
120
49
  }
121
50
  function getGlobalSkillTargets() {
122
- const claudeSkillsDir = path2.join(getClaudeCodeHomeDir(), SKILLS_DIR_NAME);
123
- const ampSkillsDir = path2.join(getAmpHomeDir(), SKILLS_DIR_NAME);
51
+ const claudeSkillsDir = path.join(getClaudeCodeHomeDir(), SKILLS_DIR_NAME);
52
+ const ampSkillsDir = path.join(getAmpHomeDir(), SKILLS_DIR_NAME);
124
53
  return dedupeTargets([
125
54
  { agent: "opencode", dir: getGlobalSkillDir() },
126
- { agent: "codex", dir: path2.join(getCodexHomeDir(), SKILLS_DIR_NAME) },
55
+ { agent: "codex", dir: path.join(getCodexHomeDir(), SKILLS_DIR_NAME) },
127
56
  { agent: "claudecode", dir: claudeSkillsDir },
128
57
  { agent: "ampcli", dir: ampSkillsDir }
129
58
  ]);
130
59
  }
131
60
  function getLocalSkillTargets() {
132
- const localClaudeSkillsDir = path2.join(process.cwd(), ".claude", SKILLS_DIR_NAME);
133
- const localAmpSkillsDir = path2.join(process.cwd(), ".amp", SKILLS_DIR_NAME);
61
+ const localClaudeSkillsDir = path.join(process.cwd(), ".claude", SKILLS_DIR_NAME);
62
+ const localAmpSkillsDir = path.join(process.cwd(), ".amp", SKILLS_DIR_NAME);
134
63
  return dedupeTargets([
135
64
  { agent: "opencode", dir: getLocalSkillDir() },
136
- { agent: "codex", dir: path2.join(process.cwd(), ".codex", SKILLS_DIR_NAME) },
65
+ { agent: "codex", dir: path.join(process.cwd(), ".codex", SKILLS_DIR_NAME) },
137
66
  { agent: "claudecode", dir: localClaudeSkillsDir },
138
67
  { agent: "ampcli", dir: localAmpSkillsDir }
139
68
  ]);
@@ -151,27 +80,27 @@ function getCanonicalBundledSkillNames() {
151
80
  return listBundledSkillDirectories().map((entry) => entry.name);
152
81
  }
153
82
  function getManagedSkillsMarkerPath(targetDir) {
154
- return path3.join(targetDir, MANAGED_SKILLS_MARKER);
83
+ return path2.join(targetDir, MANAGED_SKILLS_MARKER);
155
84
  }
156
85
  function getManagedSkillSentinelPath(targetPath) {
157
- return path3.join(targetPath, MANAGED_SKILL_SENTINEL);
86
+ return path2.join(targetPath, MANAGED_SKILL_SENTINEL);
158
87
  }
159
88
  function snapshotManagedSkillsMarker(targetDir) {
160
89
  const markerPath = getManagedSkillsMarkerPath(targetDir);
161
- return fs2.existsSync(markerPath) ? fs2.readFileSync(markerPath, "utf8") : null;
90
+ return fs.existsSync(markerPath) ? fs.readFileSync(markerPath, "utf8") : null;
162
91
  }
163
92
  function restoreManagedSkillsMarker(targetDir, previousMarker) {
164
93
  if (previousMarker === null) {
165
94
  removeManagedSkillsMarker(targetDir);
166
95
  return;
167
96
  }
168
- fs2.writeFileSync(getManagedSkillsMarkerPath(targetDir), previousMarker, "utf8");
97
+ fs.writeFileSync(getManagedSkillsMarkerPath(targetDir), previousMarker, "utf8");
169
98
  }
170
99
  function hasManagedSkillsMarker(targetDir) {
171
- return fs2.existsSync(getManagedSkillsMarkerPath(targetDir));
100
+ return fs.existsSync(getManagedSkillsMarkerPath(targetDir));
172
101
  }
173
102
  function isSafePathSegment(value) {
174
- return value.length > 0 && value !== "." && value !== ".." && !value.includes("/") && !value.includes("\\") && path3.basename(value) === value;
103
+ return value.length > 0 && value !== "." && value !== ".." && !value.includes("/") && !value.includes("\\") && path2.basename(value) === value;
175
104
  }
176
105
  function isManagedPackName(value) {
177
106
  return isSafePathSegment(value) && value.startsWith(MANAGED_PACK_PREFIX);
@@ -181,7 +110,7 @@ function readManagedSkillsMarker(targetDir) {
181
110
  return null;
182
111
  }
183
112
  try {
184
- const raw = fs2.readFileSync(getManagedSkillsMarkerPath(targetDir), "utf8");
113
+ const raw = fs.readFileSync(getManagedSkillsMarkerPath(targetDir), "utf8");
185
114
  const parsed = JSON.parse(raw);
186
115
  return Array.isArray(parsed.managedPacks) ? {
187
116
  managedPacks: parsed.managedPacks.filter(
@@ -198,7 +127,7 @@ function writeManagedSkillsMarker(targetDir, packNames, managesAllCanonicalPacks
198
127
  managedPacks: Array.from(new Set(packNames)),
199
128
  managesAllCanonicalPacks
200
129
  };
201
- fs2.writeFileSync(
130
+ fs.writeFileSync(
202
131
  getManagedSkillsMarkerPath(targetDir),
203
132
  `${JSON.stringify(marker, null, 2)}
204
133
  `,
@@ -206,7 +135,7 @@ function writeManagedSkillsMarker(targetDir, packNames, managesAllCanonicalPacks
206
135
  );
207
136
  }
208
137
  function removeManagedSkillsMarker(targetDir) {
209
- fs2.rmSync(getManagedSkillsMarkerPath(targetDir), { force: true });
138
+ fs.rmSync(getManagedSkillsMarkerPath(targetDir), { force: true });
210
139
  }
211
140
  function writeManagedSkillSentinel(targetPath, packName, fingerprint) {
212
141
  const sentinel = {
@@ -214,7 +143,7 @@ function writeManagedSkillSentinel(targetPath, packName, fingerprint) {
214
143
  packName,
215
144
  fingerprint
216
145
  };
217
- fs2.writeFileSync(
146
+ fs.writeFileSync(
218
147
  getManagedSkillSentinelPath(targetPath),
219
148
  `${JSON.stringify(sentinel, null, 2)}
220
149
  `,
@@ -223,13 +152,13 @@ function writeManagedSkillSentinel(targetPath, packName, fingerprint) {
223
152
  }
224
153
  function readManagedSkillFingerprint(targetPath) {
225
154
  const sentinelPath = getManagedSkillSentinelPath(targetPath);
226
- if (!fs2.existsSync(sentinelPath)) {
155
+ if (!fs.existsSync(sentinelPath)) {
227
156
  return null;
228
157
  }
229
158
  try {
230
- const raw = fs2.readFileSync(sentinelPath, "utf8");
159
+ const raw = fs.readFileSync(sentinelPath, "utf8");
231
160
  const parsed = JSON.parse(raw);
232
- return parsed.managedBy === MANAGED_SKILL_OWNER && parsed.packName === path3.basename(targetPath) && typeof parsed.fingerprint === "string" ? parsed.fingerprint : null;
161
+ return parsed.managedBy === MANAGED_SKILL_OWNER && parsed.packName === path2.basename(targetPath) && typeof parsed.fingerprint === "string" ? parsed.fingerprint : null;
233
162
  } catch {
234
163
  return null;
235
164
  }
@@ -237,16 +166,16 @@ function readManagedSkillFingerprint(targetPath) {
237
166
  function getSentinelManagedPackNames(targetDir, packNames) {
238
167
  const canonicalPackNames = new Set(packNames);
239
168
  const candidatePackNames = new Set(packNames);
240
- if (fs2.existsSync(targetDir) && isDirectoryPath(targetDir)) {
241
- for (const entry of fs2.readdirSync(targetDir, { withFileTypes: true })) {
169
+ if (fs.existsSync(targetDir) && isDirectoryPath(targetDir)) {
170
+ for (const entry of fs.readdirSync(targetDir, { withFileTypes: true })) {
242
171
  if (entry.isDirectory() && isManagedPackName(entry.name)) {
243
172
  candidatePackNames.add(entry.name);
244
173
  }
245
174
  }
246
175
  }
247
176
  return Array.from(candidatePackNames).filter((packName) => {
248
- const targetPath = path3.join(targetDir, packName);
249
- if (!fs2.existsSync(targetPath) || readManagedSkillFingerprint(targetPath) === null) {
177
+ const targetPath = path2.join(targetDir, packName);
178
+ if (!fs.existsSync(targetPath) || readManagedSkillFingerprint(targetPath) === null) {
250
179
  return false;
251
180
  }
252
181
  return canonicalPackNames.has(packName) || shouldRemoveRetiredManagedPack(targetPath);
@@ -259,9 +188,9 @@ function removeManagedPackArtifacts(targetDir, packNames) {
259
188
  const removed = [];
260
189
  const missing = [];
261
190
  for (const packName of packNames) {
262
- const targetPath = path3.join(targetDir, packName);
263
- if (fs2.existsSync(targetPath)) {
264
- fs2.rmSync(targetPath, { recursive: true, force: true });
191
+ const targetPath = path2.join(targetDir, packName);
192
+ if (fs.existsSync(targetPath)) {
193
+ fs.rmSync(targetPath, { recursive: true, force: true });
265
194
  removed.push(packName);
266
195
  continue;
267
196
  }
@@ -277,10 +206,10 @@ function formatSummary(parts, totalTargets, failures) {
277
206
  function hashDirectoryTree(dirPath) {
278
207
  const hash = crypto.createHash("sha256");
279
208
  const visit = (currentPath, relativePath) => {
280
- const entries = fs2.readdirSync(currentPath, { withFileTypes: true }).sort((left, right) => left.name.localeCompare(right.name));
209
+ const entries = fs.readdirSync(currentPath, { withFileTypes: true }).sort((left, right) => left.name.localeCompare(right.name));
281
210
  for (const entry of entries) {
282
- const absolutePath = path3.join(currentPath, entry.name);
283
- const entryRelativePath = relativePath ? path3.posix.join(relativePath, entry.name) : entry.name;
211
+ const absolutePath = path2.join(currentPath, entry.name);
212
+ const entryRelativePath = relativePath ? path2.posix.join(relativePath, entry.name) : entry.name;
284
213
  if (entry.isFile() && entry.name === MANAGED_SKILL_SENTINEL) {
285
214
  continue;
286
215
  }
@@ -291,12 +220,12 @@ function hashDirectoryTree(dirPath) {
291
220
  }
292
221
  if (entry.isFile()) {
293
222
  hash.update(`F:${entryRelativePath}\0`);
294
- hash.update(fs2.readFileSync(absolutePath));
223
+ hash.update(fs.readFileSync(absolutePath));
295
224
  hash.update("\0");
296
225
  continue;
297
226
  }
298
227
  if (entry.isSymbolicLink()) {
299
- hash.update(`L:${entryRelativePath}\0${fs2.readlinkSync(absolutePath)}\0`);
228
+ hash.update(`L:${entryRelativePath}\0${fs.readlinkSync(absolutePath)}\0`);
300
229
  }
301
230
  }
302
231
  };
@@ -304,18 +233,18 @@ function hashDirectoryTree(dirPath) {
304
233
  return hash.digest("hex");
305
234
  }
306
235
  function isDirectoryPath(targetPath) {
307
- return fs2.lstatSync(targetPath).isDirectory();
236
+ return fs.lstatSync(targetPath).isDirectory();
308
237
  }
309
238
  function shouldRemoveRetiredManagedPack(targetPath) {
310
- if (!fs2.existsSync(targetPath) || !isDirectoryPath(targetPath)) {
239
+ if (!fs.existsSync(targetPath) || !isDirectoryPath(targetPath)) {
311
240
  return false;
312
241
  }
313
242
  const fingerprint = readManagedSkillFingerprint(targetPath);
314
243
  return fingerprint !== null && hashDirectoryTree(targetPath) === fingerprint;
315
244
  }
316
245
  function syncSkillDirectory(sourcePath, targetPath, sourceFingerprint) {
317
- if (!fs2.existsSync(targetPath)) {
318
- fs2.cpSync(sourcePath, targetPath, { recursive: true });
246
+ if (!fs.existsSync(targetPath)) {
247
+ fs.cpSync(sourcePath, targetPath, { recursive: true });
319
248
  return "installed";
320
249
  }
321
250
  if (isDirectoryPath(targetPath)) {
@@ -324,32 +253,32 @@ function syncSkillDirectory(sourcePath, targetPath, sourceFingerprint) {
324
253
  return "unchanged";
325
254
  }
326
255
  }
327
- const parentDir = path3.dirname(targetPath);
328
- const targetName = path3.basename(targetPath);
329
- const stagingRoot = fs2.mkdtempSync(path3.join(parentDir, `.${targetName}-sync-`));
330
- const stagedPath = path3.join(stagingRoot, targetName);
331
- const backupPath = path3.join(stagingRoot, `${targetName}-backup`);
256
+ const parentDir = path2.dirname(targetPath);
257
+ const targetName = path2.basename(targetPath);
258
+ const stagingRoot = fs.mkdtempSync(path2.join(parentDir, `.${targetName}-sync-`));
259
+ const stagedPath = path2.join(stagingRoot, targetName);
260
+ const backupPath = path2.join(stagingRoot, `${targetName}-backup`);
332
261
  try {
333
- fs2.cpSync(sourcePath, stagedPath, { recursive: true });
334
- fs2.renameSync(targetPath, backupPath);
262
+ fs.cpSync(sourcePath, stagedPath, { recursive: true });
263
+ fs.renameSync(targetPath, backupPath);
335
264
  try {
336
- fs2.renameSync(stagedPath, targetPath);
265
+ fs.renameSync(stagedPath, targetPath);
337
266
  } catch (error) {
338
- if (fs2.existsSync(backupPath) && !fs2.existsSync(targetPath)) {
339
- fs2.renameSync(backupPath, targetPath);
267
+ if (fs.existsSync(backupPath) && !fs.existsSync(targetPath)) {
268
+ fs.renameSync(backupPath, targetPath);
340
269
  }
341
270
  throw error;
342
271
  }
343
- fs2.rmSync(backupPath, { recursive: true, force: true });
272
+ fs.rmSync(backupPath, { recursive: true, force: true });
344
273
  return "refreshed";
345
274
  } finally {
346
- if (fs2.existsSync(stagedPath)) {
347
- fs2.rmSync(stagedPath, { recursive: true, force: true });
275
+ if (fs.existsSync(stagedPath)) {
276
+ fs.rmSync(stagedPath, { recursive: true, force: true });
348
277
  }
349
- if (fs2.existsSync(backupPath)) {
350
- fs2.rmSync(backupPath, { recursive: true, force: true });
278
+ if (fs.existsSync(backupPath)) {
279
+ fs.rmSync(backupPath, { recursive: true, force: true });
351
280
  }
352
- fs2.rmSync(stagingRoot, { recursive: true, force: true });
281
+ fs.rmSync(stagingRoot, { recursive: true, force: true });
353
282
  }
354
283
  }
355
284
  function buildSyncMessage(mode, result) {
@@ -427,8 +356,8 @@ function syncBundledSkillsForTargets(mode, targets) {
427
356
  const packNames = getCanonicalBundledSkillNames();
428
357
  const bundledFingerprints = /* @__PURE__ */ new Map();
429
358
  for (const packName of packNames) {
430
- const sourcePath = path3.join(sourceDir, packName);
431
- if (!fs2.existsSync(sourcePath)) {
359
+ const sourcePath = path2.join(sourceDir, packName);
360
+ if (!fs.existsSync(sourcePath)) {
432
361
  throw new Error(`Bundled skill directory missing: ${packName}`);
433
362
  }
434
363
  bundledFingerprints.set(packName, hashDirectoryTree(sourcePath));
@@ -450,8 +379,8 @@ function syncBundledSkillsForTargets(mode, targets) {
450
379
  const activePackNameSet = new Set(activePackNames);
451
380
  writeManagedSkillsMarker(target.dir, managedPackNames, managesAllCanonicalPacks);
452
381
  for (const packName of activePackNames) {
453
- const sourcePath = path3.join(sourceDir, packName);
454
- const targetPath = path3.join(target.dir, packName);
382
+ const sourcePath = path2.join(sourceDir, packName);
383
+ const targetPath = path2.join(target.dir, packName);
455
384
  const sourceFingerprint = bundledFingerprints.get(packName);
456
385
  if (!sourceFingerprint) {
457
386
  throw new Error(`Bundled fingerprint missing: ${packName}`);
@@ -467,7 +396,7 @@ function syncBundledSkillsForTargets(mode, targets) {
467
396
  }
468
397
  }
469
398
  const retiredPackNames = managedPackNames.filter((packName) => {
470
- return !activePackNameSet.has(packName) && shouldRemoveRetiredManagedPack(path3.join(target.dir, packName));
399
+ return !activePackNameSet.has(packName) && shouldRemoveRetiredManagedPack(path2.join(target.dir, packName));
471
400
  });
472
401
  removeManagedPackArtifacts(target.dir, retiredPackNames);
473
402
  if (activePackNames.length > 0 || managesAllCanonicalPacks) {
@@ -547,7 +476,7 @@ function removeBundledSkillsForTargets(mode, targets) {
547
476
  removed.push(...currentRemoval.removed);
548
477
  missing.push(...currentRemoval.missing);
549
478
  const retiredPackNames = managedPackNames.filter((packName) => {
550
- return !packNames.includes(packName) && shouldRemoveRetiredManagedPack(path3.join(target.dir, packName));
479
+ return !packNames.includes(packName) && shouldRemoveRetiredManagedPack(path2.join(target.dir, packName));
551
480
  });
552
481
  const retiredRemoval = removeManagedPackArtifacts(target.dir, retiredPackNames);
553
482
  removed.push(...retiredRemoval.removed);
@@ -583,6 +512,9 @@ function removeBundledSkillsForTargets(mode, targets) {
583
512
  result.message = buildRemovalMessage(mode, result);
584
513
  return result;
585
514
  }
515
+ function removeBundledSkills(mode) {
516
+ return removeBundledSkillsForTargets(mode, getTargets(mode));
517
+ }
586
518
  function hasBundledSkillArtifacts(mode) {
587
519
  const packNames = getCanonicalBundledSkillNames();
588
520
  const targets = getTargets(mode);
@@ -593,20 +525,14 @@ function hasManagedBundledSkillInstall(mode) {
593
525
  }
594
526
 
595
527
  export {
596
- getGlobalConfigPath,
597
- getLocalConfigPath,
598
- ensureDir,
599
- readConfig,
600
- hasPlugin,
601
- updateConfigContent,
602
- removePluginFromContent,
603
528
  createNoOpSkillRemovalResult,
604
529
  getBundledSkillLifecycleTargets,
605
530
  getBundledSkillTargets,
606
531
  syncBundledSkillsForTargets,
607
532
  syncBundledSkills,
608
533
  removeBundledSkillsForTargets,
534
+ removeBundledSkills,
609
535
  hasBundledSkillArtifacts,
610
536
  hasManagedBundledSkillInstall
611
537
  };
612
- //# sourceMappingURL=chunk-QVWOPIZJ.js.map
538
+ //# sourceMappingURL=chunk-KDSNXS6N.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/installers/skills.ts","../src/cli/utils/skills.ts"],"sourcesContent":["import * as crypto from \"crypto\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { ensureDir } from \"../utils/config\";\nimport { getBundledSkillsDir, getGlobalSkillTargets, getLocalSkillTargets, type SkillTarget } from \"../utils/skills\";\nimport { listBundledSkillDirectories } from \"../../skills/bundled-skill-directories\";\n\nexport type SkillInstallMode = \"global\" | \"local\";\ntype ManagedSkillTarget = SkillTarget & {\n managedPackNames?: string[];\n};\n\ntype SyncOutcome = \"installed\" | \"refreshed\" | \"unchanged\";\nconst MANAGED_SKILLS_MARKER = \".opendevbrowser-managed-skills.json\";\nconst MANAGED_SKILL_SENTINEL = \".opendevbrowser-managed-skill.json\";\nconst MANAGED_SKILL_OWNER = \"opendevbrowser\";\nconst MANAGED_PACK_PREFIX = \"opendevbrowser-\";\n\ninterface ManagedSkillsMarker {\n managedPacks: string[];\n managesAllCanonicalPacks: boolean;\n}\n\ninterface ManagedSkillSentinel {\n managedBy: string;\n packName: string;\n fingerprint: string;\n}\n\ninterface SkillLifecycleTargetOptions {\n includeLegacyArtifacts: boolean;\n}\n\ninterface ManagedPackScope {\n managedPackNames: string[];\n activePackNames: string[];\n managesAllCanonicalPacks: boolean;\n}\n\nexport interface SkillTargetSyncResult {\n agents: string[];\n targetDir: string;\n installed: string[];\n refreshed: string[];\n unchanged: string[];\n success: boolean;\n error?: string;\n}\n\nexport interface SkillSyncResult {\n success: boolean;\n message: string;\n mode: SkillInstallMode;\n targets: SkillTargetSyncResult[];\n installed: string[];\n refreshed: string[];\n unchanged: string[];\n}\n\nexport interface SkillTargetRemovalResult {\n agents: string[];\n targetDir: string;\n removed: string[];\n missing: string[];\n success: boolean;\n error?: string;\n}\n\nexport interface SkillRemovalResult {\n success: boolean;\n message: string;\n mode: SkillInstallMode;\n targets: SkillTargetRemovalResult[];\n removed: string[];\n missing: string[];\n}\n\nfunction getTargets(mode: SkillInstallMode): SkillTarget[] {\n return mode === \"global\" ? getGlobalSkillTargets() : getLocalSkillTargets();\n}\n\nfunction getCanonicalBundledSkillNames(): string[] {\n return listBundledSkillDirectories().map((entry) => entry.name);\n}\n\nfunction getManagedSkillsMarkerPath(targetDir: string): string {\n return path.join(targetDir, MANAGED_SKILLS_MARKER);\n}\n\nfunction getManagedSkillSentinelPath(targetPath: string): string {\n return path.join(targetPath, MANAGED_SKILL_SENTINEL);\n}\n\nfunction snapshotManagedSkillsMarker(targetDir: string): string | null {\n const markerPath = getManagedSkillsMarkerPath(targetDir);\n return fs.existsSync(markerPath) ? fs.readFileSync(markerPath, \"utf8\") : null;\n}\n\nfunction restoreManagedSkillsMarker(targetDir: string, previousMarker: string | null): void {\n if (previousMarker === null) {\n removeManagedSkillsMarker(targetDir);\n return;\n }\n fs.writeFileSync(getManagedSkillsMarkerPath(targetDir), previousMarker, \"utf8\");\n}\n\nfunction hasManagedSkillsMarker(targetDir: string): boolean {\n return fs.existsSync(getManagedSkillsMarkerPath(targetDir));\n}\n\nfunction isSafePathSegment(value: string): boolean {\n return value.length > 0\n && value !== \".\"\n && value !== \"..\"\n && !value.includes(\"/\")\n && !value.includes(\"\\\\\")\n && path.basename(value) === value;\n}\n\nfunction isManagedPackName(value: string): boolean {\n return isSafePathSegment(value) && value.startsWith(MANAGED_PACK_PREFIX);\n}\n\nfunction readManagedSkillsMarker(targetDir: string): ManagedSkillsMarker | null {\n if (!hasManagedSkillsMarker(targetDir)) {\n return null;\n }\n\n try {\n const raw = fs.readFileSync(getManagedSkillsMarkerPath(targetDir), \"utf8\");\n const parsed = JSON.parse(raw) as Partial<ManagedSkillsMarker>;\n return Array.isArray(parsed.managedPacks)\n ? {\n managedPacks: parsed.managedPacks.filter(\n (value): value is string => typeof value === \"string\" && isManagedPackName(value)\n ),\n managesAllCanonicalPacks: parsed.managesAllCanonicalPacks !== false\n }\n : null;\n } catch {\n return null;\n }\n}\n\nfunction writeManagedSkillsMarker(\n targetDir: string,\n packNames: readonly string[],\n managesAllCanonicalPacks: boolean\n): void {\n const marker: ManagedSkillsMarker = {\n managedPacks: Array.from(new Set(packNames)),\n managesAllCanonicalPacks\n };\n fs.writeFileSync(\n getManagedSkillsMarkerPath(targetDir),\n `${JSON.stringify(marker, null, 2)}\\n`,\n \"utf8\"\n );\n}\n\nfunction removeManagedSkillsMarker(targetDir: string): void {\n fs.rmSync(getManagedSkillsMarkerPath(targetDir), { force: true });\n}\n\nfunction writeManagedSkillSentinel(targetPath: string, packName: string, fingerprint: string): void {\n const sentinel: ManagedSkillSentinel = {\n managedBy: MANAGED_SKILL_OWNER,\n packName,\n fingerprint\n };\n fs.writeFileSync(\n getManagedSkillSentinelPath(targetPath),\n `${JSON.stringify(sentinel, null, 2)}\\n`,\n \"utf8\"\n );\n}\n\nfunction readManagedSkillFingerprint(targetPath: string): string | null {\n const sentinelPath = getManagedSkillSentinelPath(targetPath);\n if (!fs.existsSync(sentinelPath)) {\n return null;\n }\n\n try {\n const raw = fs.readFileSync(sentinelPath, \"utf8\");\n const parsed = JSON.parse(raw) as Partial<ManagedSkillSentinel>;\n return parsed.managedBy === MANAGED_SKILL_OWNER\n && parsed.packName === path.basename(targetPath)\n && typeof parsed.fingerprint === \"string\"\n ? parsed.fingerprint\n : null;\n } catch {\n return null;\n }\n}\n\nfunction getSentinelManagedPackNames(targetDir: string, packNames: readonly string[]): string[] {\n const canonicalPackNames = new Set(packNames);\n const candidatePackNames = new Set(packNames);\n if (fs.existsSync(targetDir) && isDirectoryPath(targetDir)) {\n for (const entry of fs.readdirSync(targetDir, { withFileTypes: true })) {\n if (entry.isDirectory() && isManagedPackName(entry.name)) {\n candidatePackNames.add(entry.name);\n }\n }\n }\n\n return Array.from(candidatePackNames).filter((packName) => {\n const targetPath = path.join(targetDir, packName);\n if (!fs.existsSync(targetPath) || readManagedSkillFingerprint(targetPath) === null) {\n return false;\n }\n return canonicalPackNames.has(packName) || shouldRemoveRetiredManagedPack(targetPath);\n });\n}\n\nfunction hasManagedCanonicalBundledSkillInTarget(targetDir: string, packNames: readonly string[]): boolean {\n return getSentinelManagedPackNames(targetDir, packNames).length > 0;\n}\n\nfunction removeManagedPackArtifacts(\n targetDir: string,\n packNames: readonly string[]\n): { removed: string[]; missing: string[] } {\n const removed: string[] = [];\n const missing: string[] = [];\n\n for (const packName of packNames) {\n const targetPath = path.join(targetDir, packName);\n if (fs.existsSync(targetPath)) {\n fs.rmSync(targetPath, { recursive: true, force: true });\n removed.push(packName);\n continue;\n }\n missing.push(packName);\n }\n\n return { removed, missing };\n}\n\nfunction formatSummary(parts: string[], totalTargets: number, failures: number): string {\n const summary = parts.length > 0 ? parts.join(\", \") : \"no lifecycle changes\";\n const failureSummary = failures > 0 ? `, ${failures} failed` : \"\";\n return `${summary} across ${totalTargets} targets${failureSummary}`;\n}\n\nfunction hashDirectoryTree(dirPath: string): string {\n const hash = crypto.createHash(\"sha256\");\n\n const visit = (currentPath: string, relativePath: string): void => {\n const entries = fs.readdirSync(currentPath, { withFileTypes: true })\n .sort((left, right) => left.name.localeCompare(right.name));\n\n for (const entry of entries) {\n const absolutePath = path.join(currentPath, entry.name);\n const entryRelativePath = relativePath\n ? path.posix.join(relativePath, entry.name)\n : entry.name;\n\n if (entry.isFile() && entry.name === MANAGED_SKILL_SENTINEL) {\n continue;\n }\n\n if (entry.isDirectory()) {\n hash.update(`D:${entryRelativePath}\\0`);\n visit(absolutePath, entryRelativePath);\n continue;\n }\n\n if (entry.isFile()) {\n hash.update(`F:${entryRelativePath}\\0`);\n hash.update(fs.readFileSync(absolutePath));\n hash.update(\"\\0\");\n continue;\n }\n\n if (entry.isSymbolicLink()) {\n hash.update(`L:${entryRelativePath}\\0${fs.readlinkSync(absolutePath)}\\0`);\n }\n }\n };\n\n visit(dirPath, \"\");\n return hash.digest(\"hex\");\n}\n\nfunction isDirectoryPath(targetPath: string): boolean {\n return fs.lstatSync(targetPath).isDirectory();\n}\n\nfunction shouldRemoveRetiredManagedPack(targetPath: string): boolean {\n if (!fs.existsSync(targetPath) || !isDirectoryPath(targetPath)) {\n return false;\n }\n const fingerprint = readManagedSkillFingerprint(targetPath);\n return fingerprint !== null && hashDirectoryTree(targetPath) === fingerprint;\n}\n\nfunction syncSkillDirectory(sourcePath: string, targetPath: string, sourceFingerprint: string): SyncOutcome {\n if (!fs.existsSync(targetPath)) {\n fs.cpSync(sourcePath, targetPath, { recursive: true });\n return \"installed\";\n }\n\n if (isDirectoryPath(targetPath)) {\n const targetFingerprint = hashDirectoryTree(targetPath);\n if (targetFingerprint === sourceFingerprint) {\n return \"unchanged\";\n }\n }\n\n const parentDir = path.dirname(targetPath);\n const targetName = path.basename(targetPath);\n const stagingRoot = fs.mkdtempSync(path.join(parentDir, `.${targetName}-sync-`));\n const stagedPath = path.join(stagingRoot, targetName);\n const backupPath = path.join(stagingRoot, `${targetName}-backup`);\n\n try {\n fs.cpSync(sourcePath, stagedPath, { recursive: true });\n fs.renameSync(targetPath, backupPath);\n try {\n fs.renameSync(stagedPath, targetPath);\n } catch (error) {\n if (fs.existsSync(backupPath) && !fs.existsSync(targetPath)) {\n fs.renameSync(backupPath, targetPath);\n }\n throw error;\n }\n fs.rmSync(backupPath, { recursive: true, force: true });\n return \"refreshed\";\n } finally {\n if (fs.existsSync(stagedPath)) {\n fs.rmSync(stagedPath, { recursive: true, force: true });\n }\n if (fs.existsSync(backupPath)) {\n fs.rmSync(backupPath, { recursive: true, force: true });\n }\n fs.rmSync(stagingRoot, { recursive: true, force: true });\n }\n}\n\nfunction buildSyncMessage(mode: SkillInstallMode, result: SkillSyncResult): string {\n return `Skills ${mode} sync: ${formatSummary(\n [\n result.installed.length > 0 ? `${result.installed.length} installed` : \"\",\n result.refreshed.length > 0 ? `${result.refreshed.length} refreshed` : \"\",\n result.unchanged.length > 0 ? `${result.unchanged.length} unchanged` : \"\"\n ].filter(Boolean),\n result.targets.length,\n result.targets.filter((entry) => !entry.success).length\n )}`;\n}\n\nfunction buildRemovalMessage(mode: SkillInstallMode, result: SkillRemovalResult): string {\n return `Skills ${mode} removal: ${formatSummary(\n [\n result.removed.length > 0 ? `${result.removed.length} removed` : \"\",\n result.missing.length > 0 ? `${result.missing.length} already absent` : \"\"\n ].filter(Boolean),\n result.targets.length,\n result.targets.filter((entry) => !entry.success).length\n )}`;\n}\n\nfunction resolveManagedPackScope(\n target: ManagedSkillTarget,\n marker: ManagedSkillsMarker | null,\n packNames: readonly string[]\n): ManagedPackScope {\n const requestedAllCanonicalPacks = target.managedPackNames === undefined;\n const managesAllCanonicalPacks = requestedAllCanonicalPacks || marker?.managesAllCanonicalPacks === true;\n const managedPackNames = managesAllCanonicalPacks\n ? Array.from(new Set([...(marker?.managedPacks ?? []), ...packNames]))\n : Array.from(new Set(target.managedPackNames ?? marker?.managedPacks ?? []));\n const activePackNames = managesAllCanonicalPacks\n ? [...packNames]\n : managedPackNames.filter((packName) => packNames.includes(packName));\n\n return {\n managedPackNames,\n activePackNames,\n managesAllCanonicalPacks\n };\n}\n\nexport function createNoOpSkillRemovalResult(mode: SkillInstallMode): SkillRemovalResult {\n const result: SkillRemovalResult = {\n success: true,\n message: \"\",\n mode,\n targets: [],\n removed: [],\n missing: []\n };\n result.message = buildRemovalMessage(mode, result);\n return result;\n}\n\nexport function getBundledSkillLifecycleTargets(\n mode: SkillInstallMode,\n options: SkillLifecycleTargetOptions\n): SkillTarget[] {\n const packNames = getCanonicalBundledSkillNames();\n return getTargets(mode).flatMap((target) => {\n const marker = readManagedSkillsMarker(target.dir);\n if (marker) {\n if (marker.managesAllCanonicalPacks || !options.includeLegacyArtifacts) {\n return marker.managesAllCanonicalPacks\n ? [target]\n : [{ ...target, managedPackNames: marker.managedPacks }];\n }\n const managedPackNames = Array.from(new Set([\n ...marker.managedPacks,\n ...getSentinelManagedPackNames(target.dir, packNames)\n ]));\n return managedPackNames.length > 0 ? [{ ...target, managedPackNames }] : [];\n }\n if (!options.includeLegacyArtifacts) {\n return [];\n }\n const managedPackNames = getSentinelManagedPackNames(target.dir, packNames);\n return managedPackNames.length > 0 ? [{ ...target, managedPackNames }] : [];\n });\n}\n\nexport function getBundledSkillTargets(mode: SkillInstallMode): SkillTarget[] {\n return getTargets(mode);\n}\n\nexport function syncBundledSkillsForTargets(\n mode: SkillInstallMode,\n targets: readonly SkillTarget[]\n): SkillSyncResult {\n const targetResults: SkillTargetSyncResult[] = [];\n\n try {\n const sourceDir = getBundledSkillsDir();\n const packNames = getCanonicalBundledSkillNames();\n const bundledFingerprints = new Map<string, string>();\n\n for (const packName of packNames) {\n const sourcePath = path.join(sourceDir, packName);\n if (!fs.existsSync(sourcePath)) {\n throw new Error(`Bundled skill directory missing: ${packName}`);\n }\n bundledFingerprints.set(packName, hashDirectoryTree(sourcePath));\n }\n\n for (const target of targets) {\n const installed: string[] = [];\n const refreshed: string[] = [];\n const unchanged: string[] = [];\n const previousMarker = snapshotManagedSkillsMarker(target.dir);\n\n try {\n ensureDir(target.dir);\n const managedTarget = target as ManagedSkillTarget;\n const marker = readManagedSkillsMarker(target.dir);\n const { managedPackNames, activePackNames, managesAllCanonicalPacks } = resolveManagedPackScope(\n managedTarget,\n marker,\n packNames\n );\n const activePackNameSet = new Set(activePackNames);\n writeManagedSkillsMarker(target.dir, managedPackNames, managesAllCanonicalPacks);\n\n for (const packName of activePackNames) {\n const sourcePath = path.join(sourceDir, packName);\n const targetPath = path.join(target.dir, packName);\n const sourceFingerprint = bundledFingerprints.get(packName);\n if (!sourceFingerprint) {\n throw new Error(`Bundled fingerprint missing: ${packName}`);\n }\n\n const outcome = syncSkillDirectory(sourcePath, targetPath, sourceFingerprint);\n writeManagedSkillSentinel(targetPath, packName, sourceFingerprint);\n if (outcome === \"installed\") {\n installed.push(packName);\n } else if (outcome === \"refreshed\") {\n refreshed.push(packName);\n } else {\n unchanged.push(packName);\n }\n }\n\n const retiredPackNames = managedPackNames.filter((packName) => {\n return !activePackNameSet.has(packName)\n && shouldRemoveRetiredManagedPack(path.join(target.dir, packName));\n });\n removeManagedPackArtifacts(target.dir, retiredPackNames);\n if (activePackNames.length > 0 || managesAllCanonicalPacks) {\n writeManagedSkillsMarker(target.dir, activePackNames, managesAllCanonicalPacks);\n } else {\n removeManagedSkillsMarker(target.dir);\n }\n\n targetResults.push({\n agents: target.agents,\n targetDir: target.dir,\n installed,\n refreshed,\n unchanged,\n success: true\n });\n } catch (error) {\n restoreManagedSkillsMarker(target.dir, previousMarker);\n const message = error instanceof Error ? error.message : String(error);\n targetResults.push({\n agents: target.agents,\n targetDir: target.dir,\n installed,\n refreshed,\n unchanged,\n success: false,\n error: message\n });\n }\n }\n\n const result: SkillSyncResult = {\n success: targetResults.every((entry) => entry.success),\n message: \"\",\n mode,\n targets: targetResults,\n installed: targetResults.flatMap((entry) => entry.installed),\n refreshed: targetResults.flatMap((entry) => entry.refreshed),\n unchanged: targetResults.flatMap((entry) => entry.unchanged)\n };\n result.message = buildSyncMessage(mode, result);\n return result;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const result: SkillSyncResult = {\n success: false,\n message: \"\",\n mode,\n targets: targetResults,\n installed: targetResults.flatMap((entry) => entry.installed),\n refreshed: targetResults.flatMap((entry) => entry.refreshed),\n unchanged: targetResults.flatMap((entry) => entry.unchanged)\n };\n result.message = `Failed to sync skills (${mode}): ${message}`;\n return result;\n }\n}\n\nexport function syncBundledSkills(mode: SkillInstallMode): SkillSyncResult {\n return syncBundledSkillsForTargets(mode, getTargets(mode));\n}\n\nexport function removeBundledSkillsForTargets(\n mode: SkillInstallMode,\n targets: readonly SkillTarget[]\n): SkillRemovalResult {\n const packNames = getCanonicalBundledSkillNames();\n const targetResults: SkillTargetRemovalResult[] = [];\n\n for (const target of targets) {\n const removed: string[] = [];\n const missing: string[] = [];\n\n try {\n const managedTarget = target as ManagedSkillTarget;\n const marker = readManagedSkillsMarker(target.dir);\n const { managedPackNames, activePackNames } = resolveManagedPackScope(\n managedTarget,\n marker,\n packNames\n );\n const currentRemoval = removeManagedPackArtifacts(\n target.dir,\n activePackNames\n );\n removed.push(...currentRemoval.removed);\n missing.push(...currentRemoval.missing);\n const retiredPackNames = managedPackNames.filter((packName) => {\n return !packNames.includes(packName)\n && shouldRemoveRetiredManagedPack(path.join(target.dir, packName));\n });\n const retiredRemoval = removeManagedPackArtifacts(target.dir, retiredPackNames);\n removed.push(...retiredRemoval.removed);\n missing.push(...retiredRemoval.missing);\n removeManagedSkillsMarker(target.dir);\n\n targetResults.push({\n agents: target.agents,\n targetDir: target.dir,\n removed,\n missing,\n success: true\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n targetResults.push({\n agents: target.agents,\n targetDir: target.dir,\n removed,\n missing,\n success: false,\n error: message\n });\n }\n }\n\n const result: SkillRemovalResult = {\n success: targetResults.every((entry) => entry.success),\n message: \"\",\n mode,\n targets: targetResults,\n removed: targetResults.flatMap((entry) => entry.removed),\n missing: targetResults.flatMap((entry) => entry.missing)\n };\n result.message = buildRemovalMessage(mode, result);\n return result;\n}\n\nexport function removeBundledSkills(mode: SkillInstallMode): SkillRemovalResult {\n return removeBundledSkillsForTargets(mode, getTargets(mode));\n}\n\nexport function hasBundledSkillArtifacts(mode: SkillInstallMode): boolean {\n const packNames = getCanonicalBundledSkillNames();\n const targets = getTargets(mode);\n\n return targets.some((target) => hasManagedCanonicalBundledSkillInTarget(target.dir, packNames));\n}\n\nexport function hasManagedBundledSkillInstall(mode: SkillInstallMode): boolean {\n return getTargets(mode).some((target) => readManagedSkillsMarker(target.dir) !== null);\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nexport { getBundledSkillsDir } from \"../../utils/package-assets\";\n\nconst SKILL_DIR_NAME = \"skill\";\nconst SKILLS_DIR_NAME = \"skills\";\n\nexport type SkillTargetAgent = \"opencode\" | \"codex\" | \"claudecode\" | \"ampcli\";\n\nexport interface SkillTarget {\n agents: SkillTargetAgent[];\n dir: string;\n}\n\nexport function getGlobalSkillDir(): string {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, SKILL_DIR_NAME);\n}\n\nexport function getLocalSkillDir(): string {\n return path.join(process.cwd(), \".opencode\", SKILL_DIR_NAME);\n}\n\nfunction getCodexHomeDir(): string {\n return process.env.CODEX_HOME\n || path.join(os.homedir(), \".codex\");\n}\n\nfunction getClaudeCodeHomeDir(): string {\n return process.env.CLAUDECODE_HOME\n || path.join(os.homedir(), \".claude\");\n}\n\nfunction getAmpHomeDir(): string {\n return process.env.AMP_CLI_HOME\n || path.join(os.homedir(), \".amp\");\n}\n\nfunction dedupeTargets(targets: Array<{ agent: SkillTargetAgent; dir: string }>): SkillTarget[] {\n const deduped = new Map<string, SkillTarget>();\n\n for (const target of targets) {\n const key = path.resolve(target.dir);\n const existing = deduped.get(key);\n if (existing) {\n if (!existing.agents.includes(target.agent)) {\n existing.agents.push(target.agent);\n }\n continue;\n }\n deduped.set(key, { agents: [target.agent], dir: target.dir });\n }\n\n return Array.from(deduped.values());\n}\n\nexport function getGlobalSkillTargets(): SkillTarget[] {\n const claudeSkillsDir = path.join(getClaudeCodeHomeDir(), SKILLS_DIR_NAME);\n const ampSkillsDir = path.join(getAmpHomeDir(), SKILLS_DIR_NAME);\n\n return dedupeTargets([\n { agent: \"opencode\", dir: getGlobalSkillDir() },\n { agent: \"codex\", dir: path.join(getCodexHomeDir(), SKILLS_DIR_NAME) },\n { agent: \"claudecode\", dir: claudeSkillsDir },\n { agent: \"ampcli\", dir: ampSkillsDir }\n ]);\n}\n\nexport function getLocalSkillTargets(): SkillTarget[] {\n const localClaudeSkillsDir = path.join(process.cwd(), \".claude\", SKILLS_DIR_NAME);\n const localAmpSkillsDir = path.join(process.cwd(), \".amp\", SKILLS_DIR_NAME);\n\n return dedupeTargets([\n { agent: \"opencode\", dir: getLocalSkillDir() },\n { agent: \"codex\", dir: path.join(process.cwd(), \".codex\", SKILLS_DIR_NAME) },\n { agent: \"claudecode\", dir: localClaudeSkillsDir },\n { agent: \"ampcli\", dir: localAmpSkillsDir }\n ]);\n}\n"],"mappings":"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","names":["path","managedPackNames"]}