opkg 0.9.2 → 0.9.4

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 (404) hide show
  1. package/.claude/agents/code-reviewer.md +171 -0
  2. package/.claude/commands/commit-push-pr.md +20 -0
  3. package/.claude/commands/{specs/read.md → read-specs.md} +1 -1
  4. package/.claude/commands/{specs/update.md → update-specs.md} +4 -0
  5. package/.claude/skills/code-review-excellence/SKILL.md +538 -0
  6. package/README.md +2 -2
  7. package/package.json +3 -1
  8. package/packages/cli/dist/add-IJAPFHIX.js +624 -0
  9. package/packages/cli/dist/add-IJAPFHIX.js.map +7 -0
  10. package/packages/cli/dist/add-LLUNFLJI.js +624 -0
  11. package/packages/cli/dist/add-LLUNFLJI.js.map +7 -0
  12. package/packages/cli/dist/add-U44SL3OR.js +624 -0
  13. package/packages/cli/dist/add-U44SL3OR.js.map +7 -0
  14. package/packages/cli/dist/chunk-23VBP5L6.js +371 -0
  15. package/packages/cli/dist/chunk-23VBP5L6.js.map +7 -0
  16. package/packages/cli/dist/chunk-2SVHLF5C.js +1419 -0
  17. package/packages/cli/dist/chunk-2SVHLF5C.js.map +7 -0
  18. package/packages/cli/dist/chunk-37256POU.js +99 -0
  19. package/packages/cli/dist/chunk-37256POU.js.map +7 -0
  20. package/packages/cli/dist/chunk-3PZRVA6O.js +196 -0
  21. package/packages/cli/dist/chunk-3PZRVA6O.js.map +7 -0
  22. package/packages/cli/dist/chunk-427DCURL.js +155 -0
  23. package/packages/cli/dist/chunk-427DCURL.js.map +7 -0
  24. package/packages/cli/dist/chunk-4B5HJLP2.js +48 -0
  25. package/packages/cli/dist/chunk-4B5HJLP2.js.map +7 -0
  26. package/packages/cli/dist/chunk-4OWT3YEG.js +413 -0
  27. package/packages/cli/dist/chunk-4OWT3YEG.js.map +7 -0
  28. package/packages/cli/dist/chunk-4RIBTBXI.js +568 -0
  29. package/packages/cli/dist/chunk-4RIBTBXI.js.map +7 -0
  30. package/packages/cli/dist/chunk-4X2EJHJN.js +63 -0
  31. package/packages/cli/dist/chunk-4X2EJHJN.js.map +7 -0
  32. package/packages/cli/dist/chunk-6CYW66HD.js +1136 -0
  33. package/packages/cli/dist/chunk-6CYW66HD.js.map +7 -0
  34. package/packages/cli/dist/chunk-6DITYAFA.js +172 -0
  35. package/packages/cli/dist/chunk-6DITYAFA.js.map +7 -0
  36. package/packages/cli/dist/chunk-7KEAKEVZ.js +568 -0
  37. package/packages/cli/dist/chunk-7KEAKEVZ.js.map +7 -0
  38. package/packages/cli/dist/chunk-ABFUD25D.js +61 -0
  39. package/packages/cli/dist/chunk-ABFUD25D.js.map +7 -0
  40. package/packages/cli/dist/chunk-AR7GJCG6.js +274 -0
  41. package/packages/cli/dist/chunk-AR7GJCG6.js.map +7 -0
  42. package/packages/cli/dist/chunk-AYTGQCXH.js +86 -0
  43. package/packages/cli/dist/chunk-AYTGQCXH.js.map +7 -0
  44. package/packages/cli/dist/chunk-BROJ6OUT.js +631 -0
  45. package/packages/cli/dist/chunk-BROJ6OUT.js.map +7 -0
  46. package/packages/cli/dist/chunk-BVVSU7QD.js +23 -0
  47. package/packages/cli/dist/chunk-BVVSU7QD.js.map +7 -0
  48. package/packages/cli/dist/chunk-C6FY55UP.js +108 -0
  49. package/packages/cli/dist/chunk-C6FY55UP.js.map +7 -0
  50. package/packages/cli/dist/chunk-CVA64SXK.js +1136 -0
  51. package/packages/cli/dist/chunk-CVA64SXK.js.map +7 -0
  52. package/packages/cli/dist/chunk-D3O7LY2Q.js +1151 -0
  53. package/packages/cli/dist/chunk-D3O7LY2Q.js.map +7 -0
  54. package/packages/cli/dist/chunk-D6LEPODL.js +413 -0
  55. package/packages/cli/dist/chunk-D6LEPODL.js.map +7 -0
  56. package/packages/cli/dist/chunk-DEC24S7E.js +186 -0
  57. package/packages/cli/dist/chunk-DEC24S7E.js.map +7 -0
  58. package/packages/cli/dist/chunk-FMVVJH5M.js +371 -0
  59. package/packages/cli/dist/chunk-FMVVJH5M.js.map +7 -0
  60. package/packages/cli/dist/chunk-GDVFS3YP.js +130 -0
  61. package/packages/cli/dist/chunk-GDVFS3YP.js.map +7 -0
  62. package/packages/cli/dist/chunk-GEP2G5HF.js +31 -0
  63. package/packages/cli/dist/chunk-GEP2G5HF.js.map +7 -0
  64. package/packages/cli/dist/chunk-GSWHZBT2.js +62 -0
  65. package/packages/cli/dist/chunk-GSWHZBT2.js.map +7 -0
  66. package/packages/cli/dist/chunk-HTYHJA3B.js +61 -0
  67. package/packages/cli/dist/chunk-HTYHJA3B.js.map +7 -0
  68. package/packages/cli/dist/chunk-HYKYECAE.js +222 -0
  69. package/packages/cli/dist/chunk-HYKYECAE.js.map +7 -0
  70. package/packages/cli/dist/chunk-I7FEAHB4.js +100 -0
  71. package/packages/cli/dist/chunk-I7FEAHB4.js.map +7 -0
  72. package/packages/cli/dist/chunk-IHVZ5AUJ.js +107 -0
  73. package/packages/cli/dist/chunk-IHVZ5AUJ.js.map +7 -0
  74. package/packages/cli/dist/chunk-KI7FDU3H.js +99 -0
  75. package/packages/cli/dist/chunk-KI7FDU3H.js.map +7 -0
  76. package/packages/cli/dist/chunk-L5GRJQBS.js +32 -0
  77. package/packages/cli/dist/chunk-L5GRJQBS.js.map +7 -0
  78. package/packages/cli/dist/chunk-LHEAUDJL.js +302 -0
  79. package/packages/cli/dist/chunk-LHEAUDJL.js.map +7 -0
  80. package/packages/cli/dist/chunk-MIURCESJ.js +48 -0
  81. package/packages/cli/dist/chunk-MIURCESJ.js.map +7 -0
  82. package/packages/cli/dist/chunk-N43IXOND.js +732 -0
  83. package/packages/cli/dist/chunk-N43IXOND.js.map +7 -0
  84. package/packages/cli/dist/chunk-OUZRMGPV.js +274 -0
  85. package/packages/cli/dist/chunk-OUZRMGPV.js.map +7 -0
  86. package/packages/cli/dist/chunk-PSQXKAL4.js +371 -0
  87. package/packages/cli/dist/chunk-PSQXKAL4.js.map +7 -0
  88. package/packages/cli/dist/chunk-PUDRKDVZ.js +1419 -0
  89. package/packages/cli/dist/chunk-PUDRKDVZ.js.map +7 -0
  90. package/packages/cli/dist/chunk-RAKMX654.js +631 -0
  91. package/packages/cli/dist/chunk-RAKMX654.js.map +7 -0
  92. package/packages/cli/dist/chunk-RSFLK2TP.js +195 -0
  93. package/packages/cli/dist/chunk-RSFLK2TP.js.map +7 -0
  94. package/packages/cli/dist/chunk-S26PR2BS.js +99 -0
  95. package/packages/cli/dist/chunk-S26PR2BS.js.map +7 -0
  96. package/packages/cli/dist/chunk-U7FW7SXX.js +568 -0
  97. package/packages/cli/dist/chunk-U7FW7SXX.js.map +7 -0
  98. package/packages/cli/dist/chunk-VKM6K5TN.js +413 -0
  99. package/packages/cli/dist/chunk-VKM6K5TN.js.map +7 -0
  100. package/packages/cli/dist/chunk-VKNJG4JN.js +253 -0
  101. package/packages/cli/dist/chunk-VKNJG4JN.js.map +7 -0
  102. package/packages/cli/dist/chunk-VQ2KY6CK.js +113 -0
  103. package/packages/cli/dist/chunk-VQ2KY6CK.js.map +7 -0
  104. package/packages/cli/dist/chunk-VQDTXLOX.js +1312 -0
  105. package/packages/cli/dist/chunk-VQDTXLOX.js.map +7 -0
  106. package/packages/cli/dist/chunk-VXNS3X5O.js +60 -0
  107. package/packages/cli/dist/chunk-VXNS3X5O.js.map +7 -0
  108. package/packages/cli/dist/chunk-WF7H2YDU.js +376 -0
  109. package/packages/cli/dist/chunk-WF7H2YDU.js.map +7 -0
  110. package/packages/cli/dist/chunk-WNRXZLWW.js +266 -0
  111. package/packages/cli/dist/chunk-WNRXZLWW.js.map +7 -0
  112. package/packages/cli/dist/chunk-WT4VVCXM.js +1121 -0
  113. package/packages/cli/dist/chunk-WT4VVCXM.js.map +7 -0
  114. package/packages/cli/dist/configure-3AZUMDJZ.js +107 -0
  115. package/packages/cli/dist/configure-3AZUMDJZ.js.map +7 -0
  116. package/packages/cli/dist/configure-D722JQOD.js +107 -0
  117. package/packages/cli/dist/configure-D722JQOD.js.map +7 -0
  118. package/packages/cli/dist/configure-IU5H7XD6.js +107 -0
  119. package/packages/cli/dist/configure-IU5H7XD6.js.map +7 -0
  120. package/packages/cli/dist/file-format-detector-PXCIAKTK.js +22 -0
  121. package/packages/cli/dist/file-format-detector-PXCIAKTK.js.map +7 -0
  122. package/packages/cli/dist/index.js +17 -17
  123. package/packages/cli/dist/install-EZNWMLJR.js +7581 -0
  124. package/packages/cli/dist/install-EZNWMLJR.js.map +7 -0
  125. package/packages/cli/dist/install-F5ANFUBX.js +7577 -0
  126. package/packages/cli/dist/install-F5ANFUBX.js.map +7 -0
  127. package/packages/cli/dist/install-JSXEPPC2.js +7104 -0
  128. package/packages/cli/dist/install-JSXEPPC2.js.map +7 -0
  129. package/packages/cli/dist/install-QHEBX7JH.js +7101 -0
  130. package/packages/cli/dist/install-QHEBX7JH.js.map +7 -0
  131. package/packages/cli/dist/list-DMOUATYI.js +327 -0
  132. package/packages/cli/dist/list-DMOUATYI.js.map +7 -0
  133. package/packages/cli/dist/list-UESSCB7Y.js +327 -0
  134. package/packages/cli/dist/list-UESSCB7Y.js.map +7 -0
  135. package/packages/cli/dist/list-XR7RSJFS.js +327 -0
  136. package/packages/cli/dist/list-XR7RSJFS.js.map +7 -0
  137. package/packages/cli/dist/login-EYZ2SOYZ.js +150 -0
  138. package/packages/cli/dist/login-EYZ2SOYZ.js.map +7 -0
  139. package/packages/cli/dist/login-JWCSTAEU.js +150 -0
  140. package/packages/cli/dist/login-JWCSTAEU.js.map +7 -0
  141. package/packages/cli/dist/login-NRKHXZKM.js +150 -0
  142. package/packages/cli/dist/login-NRKHXZKM.js.map +7 -0
  143. package/packages/cli/dist/logout-HDMYRXIE.js +40 -0
  144. package/packages/cli/dist/logout-HDMYRXIE.js.map +7 -0
  145. package/packages/cli/dist/logout-SYHXCVCQ.js +40 -0
  146. package/packages/cli/dist/logout-SYHXCVCQ.js.map +7 -0
  147. package/packages/cli/dist/logout-X3XUUOH5.js +40 -0
  148. package/packages/cli/dist/logout-X3XUUOH5.js.map +7 -0
  149. package/packages/cli/dist/new-3LTFKDTQ.js +277 -0
  150. package/packages/cli/dist/new-3LTFKDTQ.js.map +7 -0
  151. package/packages/cli/dist/new-F46OSD72.js +277 -0
  152. package/packages/cli/dist/new-F46OSD72.js.map +7 -0
  153. package/packages/cli/dist/new-OPCCLNL2.js +277 -0
  154. package/packages/cli/dist/new-OPCCLNL2.js.map +7 -0
  155. package/packages/cli/dist/package-marker-detector-T5O5YD2E.js +80 -0
  156. package/packages/cli/dist/package-marker-detector-T5O5YD2E.js.map +7 -0
  157. package/packages/cli/dist/package-yml-QWZIJDYU.js +16 -0
  158. package/packages/cli/dist/package-yml-QWZIJDYU.js.map +7 -0
  159. package/packages/cli/dist/plugin-naming-YP2I4NPA.js +29 -0
  160. package/packages/cli/dist/plugin-naming-YP2I4NPA.js.map +7 -0
  161. package/packages/cli/dist/publish-4H43PCSG.js +619 -0
  162. package/packages/cli/dist/publish-4H43PCSG.js.map +7 -0
  163. package/packages/cli/dist/publish-RULKLNUX.js +619 -0
  164. package/packages/cli/dist/publish-RULKLNUX.js.map +7 -0
  165. package/packages/cli/dist/publish-URWY2P3E.js +619 -0
  166. package/packages/cli/dist/publish-URWY2P3E.js.map +7 -0
  167. package/packages/cli/dist/remove-BD52BHR2.js +542 -0
  168. package/packages/cli/dist/remove-BD52BHR2.js.map +7 -0
  169. package/packages/cli/dist/remove-G5NRC7LD.js +542 -0
  170. package/packages/cli/dist/remove-G5NRC7LD.js.map +7 -0
  171. package/packages/cli/dist/remove-TC3FQUYQ.js +542 -0
  172. package/packages/cli/dist/remove-TC3FQUYQ.js.map +7 -0
  173. package/packages/cli/dist/resource-discoverer-4X4RY43E.js +17 -0
  174. package/packages/cli/dist/resource-discoverer-4X4RY43E.js.map +7 -0
  175. package/packages/cli/dist/save-24TESYKI.js +1728 -0
  176. package/packages/cli/dist/save-24TESYKI.js.map +7 -0
  177. package/packages/cli/dist/save-N3QWF2WN.js +1728 -0
  178. package/packages/cli/dist/save-N3QWF2WN.js.map +7 -0
  179. package/packages/cli/dist/save-P2U67DTV.js +1728 -0
  180. package/packages/cli/dist/save-P2U67DTV.js.map +7 -0
  181. package/packages/cli/dist/search-ABROK3UO.js +157 -0
  182. package/packages/cli/dist/search-ABROK3UO.js.map +7 -0
  183. package/packages/cli/dist/search-WVFXFNAV.js +157 -0
  184. package/packages/cli/dist/search-WVFXFNAV.js.map +7 -0
  185. package/packages/cli/dist/search-YQN2Q2SO.js +157 -0
  186. package/packages/cli/dist/search-YQN2Q2SO.js.map +7 -0
  187. package/packages/cli/dist/set-DCWF73F6.js +251 -0
  188. package/packages/cli/dist/set-DCWF73F6.js.map +7 -0
  189. package/packages/cli/dist/set-GJEG2F6Y.js +251 -0
  190. package/packages/cli/dist/set-GJEG2F6Y.js.map +7 -0
  191. package/packages/cli/dist/set-NGM2FIKF.js +251 -0
  192. package/packages/cli/dist/set-NGM2FIKF.js.map +7 -0
  193. package/packages/cli/dist/uninstall-3CJQMTYH.js +539 -0
  194. package/packages/cli/dist/uninstall-3CJQMTYH.js.map +7 -0
  195. package/packages/cli/dist/uninstall-Q3CP4UN5.js +539 -0
  196. package/packages/cli/dist/uninstall-Q3CP4UN5.js.map +7 -0
  197. package/packages/cli/dist/uninstall-QU5OMEEC.js +539 -0
  198. package/packages/cli/dist/uninstall-QU5OMEEC.js.map +7 -0
  199. package/packages/cli/dist/unpublish-GHJQYC4S.js +245 -0
  200. package/packages/cli/dist/unpublish-GHJQYC4S.js.map +7 -0
  201. package/packages/cli/dist/unpublish-L2CYMK4B.js +245 -0
  202. package/packages/cli/dist/unpublish-L2CYMK4B.js.map +7 -0
  203. package/packages/cli/dist/unpublish-VBTNTMS5.js +245 -0
  204. package/packages/cli/dist/unpublish-VBTNTMS5.js.map +7 -0
  205. package/packages/cli/dist/view-MXRBMXOG.js +488 -0
  206. package/packages/cli/dist/view-MXRBMXOG.js.map +7 -0
  207. package/packages/cli/dist/view-NMND7SAW.js +488 -0
  208. package/packages/cli/dist/view-NMND7SAW.js.map +7 -0
  209. package/packages/cli/dist/view-RPQRDSYB.js +488 -0
  210. package/packages/cli/dist/view-RPQRDSYB.js.map +7 -0
  211. package/packages/cli/package.json +2 -0
  212. package/packages/core/dist/constants/index.d.ts +9 -0
  213. package/packages/core/dist/constants/index.d.ts.map +1 -1
  214. package/packages/core/dist/constants/index.js +12 -0
  215. package/packages/core/dist/constants/index.js.map +1 -1
  216. package/packages/core/dist/core/dependency-resolver/index.d.ts +2 -10
  217. package/packages/core/dist/core/dependency-resolver/index.d.ts.map +1 -1
  218. package/packages/core/dist/core/dependency-resolver/index.js +3 -14
  219. package/packages/core/dist/core/dependency-resolver/index.js.map +1 -1
  220. package/packages/core/dist/core/install/base-detector.d.ts +2 -1
  221. package/packages/core/dist/core/install/base-detector.d.ts.map +1 -1
  222. package/packages/core/dist/core/install/base-detector.js +54 -1
  223. package/packages/core/dist/core/install/base-detector.js.map +1 -1
  224. package/packages/core/dist/core/install/conflicts/file-conflict-resolver.d.ts +7 -5
  225. package/packages/core/dist/core/install/conflicts/file-conflict-resolver.d.ts.map +1 -1
  226. package/packages/core/dist/core/install/conflicts/file-conflict-resolver.js +25 -9
  227. package/packages/core/dist/core/install/conflicts/file-conflict-resolver.js.map +1 -1
  228. package/packages/core/dist/core/install/flow-index-installer.d.ts +2 -1
  229. package/packages/core/dist/core/install/flow-index-installer.d.ts.map +1 -1
  230. package/packages/core/dist/core/install/flow-index-installer.js +19 -4
  231. package/packages/core/dist/core/install/flow-index-installer.js.map +1 -1
  232. package/packages/core/dist/core/install/input-classifier-base.js +3 -3
  233. package/packages/core/dist/core/install/input-classifier-base.js.map +1 -1
  234. package/packages/core/dist/core/install/install-reporting.d.ts.map +1 -1
  235. package/packages/core/dist/core/install/install-reporting.js +7 -9
  236. package/packages/core/dist/core/install/install-reporting.js.map +1 -1
  237. package/packages/core/dist/core/install/list-handler.d.ts.map +1 -1
  238. package/packages/core/dist/core/install/list-handler.js +3 -0
  239. package/packages/core/dist/core/install/list-handler.js.map +1 -1
  240. package/packages/core/dist/core/install/marketplace-handler.d.ts.map +1 -1
  241. package/packages/core/dist/core/install/marketplace-handler.js.map +1 -1
  242. package/packages/core/dist/core/install/operations/conflict-handler.d.ts +2 -1
  243. package/packages/core/dist/core/install/operations/conflict-handler.d.ts.map +1 -1
  244. package/packages/core/dist/core/install/operations/conflict-handler.js +2 -2
  245. package/packages/core/dist/core/install/operations/conflict-handler.js.map +1 -1
  246. package/packages/core/dist/core/install/operations/installation-executor.d.ts +3 -0
  247. package/packages/core/dist/core/install/operations/installation-executor.d.ts.map +1 -1
  248. package/packages/core/dist/core/install/operations/installation-executor.js +39 -22
  249. package/packages/core/dist/core/install/operations/installation-executor.js.map +1 -1
  250. package/packages/core/dist/core/install/orchestrator/orchestrator.d.ts +7 -3
  251. package/packages/core/dist/core/install/orchestrator/orchestrator.d.ts.map +1 -1
  252. package/packages/core/dist/core/install/orchestrator/orchestrator.js +193 -93
  253. package/packages/core/dist/core/install/orchestrator/orchestrator.js.map +1 -1
  254. package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.d.ts +1 -0
  255. package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.d.ts.map +1 -1
  256. package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.js +11 -24
  257. package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.js.map +1 -1
  258. package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.d.ts +2 -0
  259. package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.d.ts.map +1 -1
  260. package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.js +14 -14
  261. package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.js.map +1 -1
  262. package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.d.ts +7 -0
  263. package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.d.ts.map +1 -1
  264. package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.js +28 -0
  265. package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.js.map +1 -1
  266. package/packages/core/dist/core/install/orchestrator/types.d.ts +2 -0
  267. package/packages/core/dist/core/install/orchestrator/types.d.ts.map +1 -1
  268. package/packages/core/dist/core/install/path-package-loader.d.ts.map +1 -1
  269. package/packages/core/dist/core/install/path-package-loader.js +20 -1
  270. package/packages/core/dist/core/install/path-package-loader.js.map +1 -1
  271. package/packages/core/dist/core/install/platform-resolution.d.ts +3 -0
  272. package/packages/core/dist/core/install/platform-resolution.d.ts.map +1 -1
  273. package/packages/core/dist/core/install/platform-resolution.js +5 -2
  274. package/packages/core/dist/core/install/platform-resolution.js.map +1 -1
  275. package/packages/core/dist/core/install/preprocessing/context-population.d.ts +18 -0
  276. package/packages/core/dist/core/install/preprocessing/context-population.d.ts.map +1 -0
  277. package/packages/core/dist/core/install/preprocessing/context-population.js +36 -0
  278. package/packages/core/dist/core/install/preprocessing/context-population.js.map +1 -0
  279. package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.d.ts +23 -0
  280. package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.d.ts.map +1 -1
  281. package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.js +44 -0
  282. package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.js.map +1 -1
  283. package/packages/core/dist/core/install/sources/git-source.d.ts.map +1 -1
  284. package/packages/core/dist/core/install/sources/git-source.js +67 -4
  285. package/packages/core/dist/core/install/sources/git-source.js.map +1 -1
  286. package/packages/core/dist/core/install/sources/path-source.d.ts.map +1 -1
  287. package/packages/core/dist/core/install/sources/path-source.js +8 -0
  288. package/packages/core/dist/core/install/sources/path-source.js.map +1 -1
  289. package/packages/core/dist/core/install/strategies/flow-based-strategy.d.ts.map +1 -1
  290. package/packages/core/dist/core/install/strategies/flow-based-strategy.js +12 -5
  291. package/packages/core/dist/core/install/strategies/flow-based-strategy.js.map +1 -1
  292. package/packages/core/dist/core/install/strategies/types.d.ts +11 -1
  293. package/packages/core/dist/core/install/strategies/types.d.ts.map +1 -1
  294. package/packages/core/dist/core/install/unified/context-builders.d.ts +5 -0
  295. package/packages/core/dist/core/install/unified/context-builders.d.ts.map +1 -1
  296. package/packages/core/dist/core/install/unified/context-builders.js +12 -0
  297. package/packages/core/dist/core/install/unified/context-builders.js.map +1 -1
  298. package/packages/core/dist/core/install/unified/context-helpers.d.ts +0 -4
  299. package/packages/core/dist/core/install/unified/context-helpers.d.ts.map +1 -1
  300. package/packages/core/dist/core/install/unified/context-helpers.js +0 -24
  301. package/packages/core/dist/core/install/unified/context-helpers.js.map +1 -1
  302. package/packages/core/dist/core/install/unified/index.d.ts +1 -1
  303. package/packages/core/dist/core/install/unified/index.d.ts.map +1 -1
  304. package/packages/core/dist/core/install/unified/index.js +1 -1
  305. package/packages/core/dist/core/install/unified/index.js.map +1 -1
  306. package/packages/core/dist/core/install/unified/multi-context-pipeline.d.ts +6 -0
  307. package/packages/core/dist/core/install/unified/multi-context-pipeline.d.ts.map +1 -1
  308. package/packages/core/dist/core/install/unified/multi-context-pipeline.js +11 -4
  309. package/packages/core/dist/core/install/unified/multi-context-pipeline.js.map +1 -1
  310. package/packages/core/dist/core/install/unified/phases/conflicts.d.ts.map +1 -1
  311. package/packages/core/dist/core/install/unified/phases/conflicts.js +1 -1
  312. package/packages/core/dist/core/install/unified/phases/conflicts.js.map +1 -1
  313. package/packages/core/dist/core/install/unified/phases/execute.d.ts.map +1 -1
  314. package/packages/core/dist/core/install/unified/phases/execute.js +5 -5
  315. package/packages/core/dist/core/install/unified/phases/execute.js.map +1 -1
  316. package/packages/core/dist/core/install/unified/phases/load-package.js +3 -3
  317. package/packages/core/dist/core/install/unified/phases/load-package.js.map +1 -1
  318. package/packages/core/dist/core/install/unified/phases/report.js +1 -1
  319. package/packages/core/dist/core/install/unified/phases/report.js.map +1 -1
  320. package/packages/core/dist/core/install/unified/pipeline.d.ts.map +1 -1
  321. package/packages/core/dist/core/install/unified/pipeline.js +7 -10
  322. package/packages/core/dist/core/install/unified/pipeline.js.map +1 -1
  323. package/packages/core/dist/core/install/wave-resolver/content-root-cache.d.ts +24 -0
  324. package/packages/core/dist/core/install/wave-resolver/content-root-cache.d.ts.map +1 -0
  325. package/packages/core/dist/core/install/wave-resolver/content-root-cache.js +71 -0
  326. package/packages/core/dist/core/install/wave-resolver/content-root-cache.js.map +1 -0
  327. package/packages/core/dist/core/install/wave-resolver/context-builder.d.ts +39 -0
  328. package/packages/core/dist/core/install/wave-resolver/context-builder.d.ts.map +1 -0
  329. package/packages/core/dist/core/install/wave-resolver/context-builder.js +148 -0
  330. package/packages/core/dist/core/install/wave-resolver/context-builder.js.map +1 -0
  331. package/packages/core/dist/core/install/wave-resolver/fetcher.d.ts +49 -0
  332. package/packages/core/dist/core/install/wave-resolver/fetcher.d.ts.map +1 -0
  333. package/packages/core/dist/core/install/wave-resolver/fetcher.js +221 -0
  334. package/packages/core/dist/core/install/wave-resolver/fetcher.js.map +1 -0
  335. package/packages/core/dist/core/install/wave-resolver/index-updater.d.ts +23 -0
  336. package/packages/core/dist/core/install/wave-resolver/index-updater.d.ts.map +1 -0
  337. package/packages/core/dist/core/install/wave-resolver/index-updater.js +87 -0
  338. package/packages/core/dist/core/install/wave-resolver/index-updater.js.map +1 -0
  339. package/packages/core/dist/core/install/wave-resolver/index-write-collector.d.ts +101 -0
  340. package/packages/core/dist/core/install/wave-resolver/index-write-collector.d.ts.map +1 -0
  341. package/packages/core/dist/core/install/wave-resolver/index-write-collector.js +194 -0
  342. package/packages/core/dist/core/install/wave-resolver/index-write-collector.js.map +1 -0
  343. package/packages/core/dist/core/install/wave-resolver/index.d.ts +17 -0
  344. package/packages/core/dist/core/install/wave-resolver/index.d.ts.map +1 -0
  345. package/packages/core/dist/core/install/wave-resolver/index.js +16 -0
  346. package/packages/core/dist/core/install/wave-resolver/index.js.map +1 -0
  347. package/packages/core/dist/core/install/wave-resolver/manifest-reader.d.ts +34 -0
  348. package/packages/core/dist/core/install/wave-resolver/manifest-reader.d.ts.map +1 -0
  349. package/packages/core/dist/core/install/wave-resolver/manifest-reader.js +112 -0
  350. package/packages/core/dist/core/install/wave-resolver/manifest-reader.js.map +1 -0
  351. package/packages/core/dist/core/install/wave-resolver/types.d.ts +210 -0
  352. package/packages/core/dist/core/install/wave-resolver/types.d.ts.map +1 -0
  353. package/packages/core/dist/core/install/wave-resolver/types.js +6 -0
  354. package/packages/core/dist/core/install/wave-resolver/types.js.map +1 -0
  355. package/packages/core/dist/core/install/wave-resolver/version-solver.d.ts +65 -0
  356. package/packages/core/dist/core/install/wave-resolver/version-solver.d.ts.map +1 -0
  357. package/packages/core/dist/core/install/wave-resolver/version-solver.js +166 -0
  358. package/packages/core/dist/core/install/wave-resolver/version-solver.js.map +1 -0
  359. package/packages/core/dist/core/install/wave-resolver/wave-engine.d.ts +16 -0
  360. package/packages/core/dist/core/install/wave-resolver/wave-engine.d.ts.map +1 -0
  361. package/packages/core/dist/core/install/wave-resolver/wave-engine.js +337 -0
  362. package/packages/core/dist/core/install/wave-resolver/wave-engine.js.map +1 -0
  363. package/packages/core/dist/core/install/wave-resolver/wave-installer.d.ts +50 -0
  364. package/packages/core/dist/core/install/wave-resolver/wave-installer.d.ts.map +1 -0
  365. package/packages/core/dist/core/install/wave-resolver/wave-installer.js +246 -0
  366. package/packages/core/dist/core/install/wave-resolver/wave-installer.js.map +1 -0
  367. package/packages/core/dist/core/ports/buffered-output.d.ts +36 -0
  368. package/packages/core/dist/core/ports/buffered-output.d.ts.map +1 -0
  369. package/packages/core/dist/core/ports/buffered-output.js +89 -0
  370. package/packages/core/dist/core/ports/buffered-output.js.map +1 -0
  371. package/packages/core/dist/core/ports/resolve.d.ts +0 -13
  372. package/packages/core/dist/core/ports/resolve.d.ts.map +1 -1
  373. package/packages/core/dist/core/ports/resolve.js +0 -28
  374. package/packages/core/dist/core/ports/resolve.js.map +1 -1
  375. package/packages/core/dist/core/remove/removal-confirmation.d.ts +4 -1
  376. package/packages/core/dist/core/remove/removal-confirmation.d.ts.map +1 -1
  377. package/packages/core/dist/core/remove/removal-confirmation.js +5 -4
  378. package/packages/core/dist/core/remove/removal-confirmation.js.map +1 -1
  379. package/packages/core/dist/core/remove/remove-from-source-pipeline.d.ts.map +1 -1
  380. package/packages/core/dist/core/remove/remove-from-source-pipeline.js +1 -10
  381. package/packages/core/dist/core/remove/remove-from-source-pipeline.js.map +1 -1
  382. package/packages/core/dist/core/uninstall/uninstall-executor.js +1 -1
  383. package/packages/core/dist/core/uninstall/uninstall-executor.js.map +1 -1
  384. package/packages/core/dist/core/uninstall/uninstall-reporter.d.ts +2 -2
  385. package/packages/core/dist/core/uninstall/uninstall-reporter.d.ts.map +1 -1
  386. package/packages/core/dist/core/uninstall/uninstall-reporter.js +4 -4
  387. package/packages/core/dist/core/uninstall/uninstall-reporter.js.map +1 -1
  388. package/packages/core/dist/index.d.ts +1 -1
  389. package/packages/core/dist/index.d.ts.map +1 -1
  390. package/packages/core/dist/types/execution-context.d.ts +40 -10
  391. package/packages/core/dist/types/execution-context.d.ts.map +1 -1
  392. package/packages/core/dist/utils/concurrency-pool.d.ts +34 -0
  393. package/packages/core/dist/utils/concurrency-pool.d.ts.map +1 -0
  394. package/packages/core/dist/utils/concurrency-pool.js +58 -0
  395. package/packages/core/dist/utils/concurrency-pool.js.map +1 -0
  396. package/packages/core/dist/utils/plugin-naming.d.ts +11 -3
  397. package/packages/core/dist/utils/plugin-naming.d.ts.map +1 -1
  398. package/packages/core/dist/utils/plugin-naming.js +27 -7
  399. package/packages/core/dist/utils/plugin-naming.js.map +1 -1
  400. package/plans/wave-resolver.md +254 -0
  401. package/.claude/agents/essentials/code-simplifier.md +0 -52
  402. package/.claude/commands/essentials/cleanup.md +0 -1
  403. package/.claude/commands/essentials/review.md +0 -8
  404. package/.claude/commands/git/commit.md +0 -5
@@ -0,0 +1,266 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ DIR_TO_TYPE,
4
+ STRUCTURAL_PREFIX_DIRS
5
+ } from "./chunk-IHVZ5AUJ.js";
6
+ import {
7
+ ValidationError
8
+ } from "./chunk-ID4SVDQZ.js";
9
+ import {
10
+ logger
11
+ } from "./chunk-5EFWGD33.js";
12
+
13
+ // ../core/src/utils/plugin-naming.ts
14
+ import { basename } from "path";
15
+
16
+ // ../core/src/utils/git-url-parser.ts
17
+ function normalizeGitUrl(url) {
18
+ let normalized = url.toLowerCase().trim();
19
+ return normalized.endsWith(".git") && (normalized = normalized.slice(0, -4)), normalized.startsWith("git@github.com:") && (normalized = normalized.replace("git@github.com:", "https://github.com/")), normalized.startsWith("git@") && (normalized = normalized.replace(/^git@([^:]+):/, "https://$1/")), normalized = normalized.replace(/\/$/, ""), normalized;
20
+ }
21
+ function parseGitUrl(url) {
22
+ let normalized = normalizeGitUrl(url), httpsMatch = normalized.match(/^https?:\/\/([^\/]+)\/(.+?)\/([^\/]+?)(?:\.git)?$/);
23
+ if (httpsMatch) {
24
+ let [, host, owner, repo] = httpsMatch;
25
+ return {
26
+ host,
27
+ owner,
28
+ repo,
29
+ protocol: "https",
30
+ normalized
31
+ };
32
+ }
33
+ let sshMatch = normalized.match(/^(?:ssh:\/\/)?git@([^:\/]+)[:\\/](.+?)\/([^\/]+?)(?:\.git)?$/);
34
+ if (sshMatch) {
35
+ let [, host, owner, repo] = sshMatch;
36
+ return {
37
+ host,
38
+ owner,
39
+ repo,
40
+ protocol: "ssh",
41
+ normalized: `https://${host}/${owner}/${repo}`
42
+ // Normalize for consistency
43
+ };
44
+ }
45
+ let gitMatch = normalized.match(/^git:\/\/([^\/]+)\/(.+?)\/([^\/]+?)(?:\.git)?$/);
46
+ if (gitMatch) {
47
+ let [, host, owner, repo] = gitMatch;
48
+ return {
49
+ host,
50
+ owner,
51
+ repo,
52
+ protocol: "git",
53
+ normalized: `https://${host}/${owner}/${repo}`
54
+ };
55
+ }
56
+ throw new ValidationError(
57
+ `Unable to parse Git URL: ${url}. Expected format: https://host/owner/repo.git or git@host:owner/repo.git`
58
+ );
59
+ }
60
+ function extractGitHubInfo(url) {
61
+ try {
62
+ let parsed = parseGitUrl(url);
63
+ return parsed.host !== "github.com" ? null : {
64
+ username: parsed.owner,
65
+ repo: parsed.repo
66
+ };
67
+ } catch {
68
+ return null;
69
+ }
70
+ }
71
+
72
+ // ../core/src/utils/plugin-naming.ts
73
+ function generateGitHubPackageName(context) {
74
+ let {
75
+ gitUrl,
76
+ path,
77
+ resourcePath,
78
+ packageName,
79
+ repoPath
80
+ } = context, pathToUse = resourcePath ?? path, normalizePath = (value) => value.replace(/\\/g, "/").replace(/^\.\/?/, "").toLowerCase();
81
+ if (!gitUrl)
82
+ return packageName && pathToUse ? `${packageName}/${normalizePath(pathToUse)}` : packageName || (pathToUse ? basename(pathToUse) : "unnamed-package");
83
+ let githubInfo = extractGitHubInfo(gitUrl);
84
+ if (!githubInfo)
85
+ return logger.debug("Non-GitHub URL, using package name as-is", { gitUrl }), packageName && pathToUse ? `${packageName}/${normalizePath(pathToUse)}` : packageName || (pathToUse ? basename(pathToUse) : "unnamed-package");
86
+ let { username, repo } = githubInfo;
87
+ if (pathToUse) {
88
+ let normalizedPath = normalizePath(pathToUse);
89
+ return `gh@${username}/${repo}/${normalizedPath}`;
90
+ } else
91
+ return `gh@${username}/${repo}`;
92
+ }
93
+ function generatePluginName(context) {
94
+ return generateGitHubPackageName(context);
95
+ }
96
+ function generateMarketplaceName(gitUrl, marketplaceManifestName, repoPath) {
97
+ return generateGitHubPackageName({
98
+ gitUrl,
99
+ packageName: marketplaceManifestName,
100
+ repoPath
101
+ });
102
+ }
103
+ function parseScopedPluginName(name) {
104
+ let ghMatch = name.match(/^gh@([^\/]+)\/([^\/]+)(?:\/(.+))?$/);
105
+ if (ghMatch) {
106
+ let [, username, repo, rest] = ghMatch;
107
+ return rest ? {
108
+ username,
109
+ repo,
110
+ plugin: rest,
111
+ isGitHub: !0
112
+ } : {
113
+ username,
114
+ repo,
115
+ plugin: void 0,
116
+ isGitHub: !0
117
+ };
118
+ }
119
+ let oldPluginMatch = name.match(/^@([^\/]+)\/([^\/]+)\/(.+)$/);
120
+ if (oldPluginMatch) {
121
+ let [, username, repo, plugin] = oldPluginMatch;
122
+ return {
123
+ username,
124
+ repo,
125
+ plugin,
126
+ isGitHub: !1
127
+ };
128
+ }
129
+ let oldRepoMatch = name.match(/^@([^\/]+)\/([^\/]+)$/);
130
+ if (oldRepoMatch) {
131
+ let [, username, repo] = oldRepoMatch;
132
+ return {
133
+ username,
134
+ repo,
135
+ plugin: void 0,
136
+ isGitHub: !1
137
+ };
138
+ }
139
+ return null;
140
+ }
141
+ function splitPackageNameForTelemetry(packageName) {
142
+ let ghMatch = packageName.match(/^gh@([^\/]+)\/([^\/]+)(?:\/(.+))?$/);
143
+ if (ghMatch) {
144
+ let [, username, repo, path] = ghMatch;
145
+ return {
146
+ baseName: `gh@${username}/${repo}`,
147
+ resourcePath: path
148
+ };
149
+ }
150
+ let scopedMatch = packageName.match(/^@([^\/]+)\/([^\/]+)(?:\/(.+))?$/);
151
+ if (scopedMatch) {
152
+ let [, scope, name, path] = scopedMatch;
153
+ return {
154
+ baseName: `@${scope}/${name}`,
155
+ resourcePath: path
156
+ };
157
+ }
158
+ let segments = packageName.split("/");
159
+ return segments.length > 1 && segments.length > 2 ? {
160
+ baseName: segments[0],
161
+ resourcePath: segments.slice(1).join("/")
162
+ } : {
163
+ baseName: packageName,
164
+ resourcePath: void 0
165
+ };
166
+ }
167
+ function stripExtension(segment) {
168
+ let dotIdx = segment.lastIndexOf(".");
169
+ return dotIdx > 0 ? segment.slice(0, dotIdx) : segment;
170
+ }
171
+ function deriveNamespaceSlug(packageName, existingSlugs) {
172
+ let parsed = parseScopedPluginName(packageName);
173
+ if (!parsed)
174
+ return packageName;
175
+ let { username, repo, plugin } = parsed, resourceDirNames = new Set(Object.keys(DIR_TO_TYPE)), leaf;
176
+ if (!plugin)
177
+ leaf = repo;
178
+ else {
179
+ let segments = plugin.split("/"), markerIndex = segments.findIndex((seg) => resourceDirNames.has(seg));
180
+ if (markerIndex > 0)
181
+ leaf = stripExtension(segments[markerIndex - 1]);
182
+ else if (markerIndex === 0)
183
+ leaf = repo;
184
+ else {
185
+ let prefixIndex = segments.findIndex((seg) => STRUCTURAL_PREFIX_DIRS.has(seg));
186
+ prefixIndex >= 0 && prefixIndex + 1 < segments.length ? leaf = stripExtension(segments[prefixIndex + 1]) : leaf = repo;
187
+ }
188
+ }
189
+ let candidates = plugin ? leaf === repo ? (
190
+ // Leaf is already the repo — start at repo, escalate to owner/repo
191
+ [repo, `${username}/${repo}`]
192
+ ) : [leaf, `${repo}/${leaf}`, `${username}/${repo}/${leaf}`] : [repo, `${username}/${repo}`];
193
+ if (!existingSlugs || existingSlugs.size === 0)
194
+ return candidates[0];
195
+ for (let candidate of candidates)
196
+ if (!existingSlugs.has(candidate))
197
+ return candidate;
198
+ return packageName.replace(/^gh@/, "").replace(/@/g, "");
199
+ }
200
+ function isScopedPluginName(name) {
201
+ return parseScopedPluginName(name) !== null;
202
+ }
203
+ function isGitHubPluginName(name) {
204
+ return name.startsWith("gh@");
205
+ }
206
+ function detectOldPluginNaming(dep) {
207
+ let gitUrlRaw = dep.url || dep.git;
208
+ if (!gitUrlRaw || !dep.name.startsWith("@"))
209
+ return null;
210
+ let gitUrl = gitUrlRaw.includes("#") ? gitUrlRaw.split("#", 2)[0] : gitUrlRaw, githubInfo = extractGitHubInfo(gitUrl);
211
+ if (!githubInfo)
212
+ return null;
213
+ let { username, repo } = githubInfo, nameMatch = dep.name.match(/^@([^\/]+)\/(?:([^\/]+)\/)?([^\/]+)$/);
214
+ if (!nameMatch)
215
+ return null;
216
+ let [, nameUsername, middlePart, pluginPart] = nameMatch;
217
+ if (nameUsername !== username)
218
+ return null;
219
+ if (dep.path) {
220
+ let expectedName = `@${username}/${repo}/${pluginPart}`;
221
+ if (middlePart !== repo)
222
+ return expectedName;
223
+ } else {
224
+ let expectedName = `@${username}/${repo}`;
225
+ if (middlePart || nameUsername + "/" + (middlePart || pluginPart) != username + "/" + repo)
226
+ return expectedName;
227
+ }
228
+ return null;
229
+ }
230
+ function detectOldGitHubNaming(dep) {
231
+ let gitUrlRaw = dep.url || dep.git;
232
+ if (!gitUrlRaw)
233
+ return null;
234
+ let gitUrl = gitUrlRaw.includes("#") ? gitUrlRaw.split("#", 2)[0] : gitUrlRaw, githubInfo = extractGitHubInfo(gitUrl);
235
+ if (!githubInfo)
236
+ return null;
237
+ let { username, repo } = githubInfo, actualPath = dep.path || (dep.subdirectory?.startsWith("./") ? dep.subdirectory.substring(2) : dep.subdirectory);
238
+ if (!dep.name.startsWith("gh@"))
239
+ return dep.name.startsWith("@") ? actualPath ? `gh@${username}/${repo}/${actualPath}` : `gh@${username}/${repo}` : actualPath ? `gh@${username}/${repo}/${actualPath}` : `gh@${username}/${repo}`;
240
+ if (actualPath && dep.name.startsWith("gh@")) {
241
+ let nameMatch = dep.name.match(/^gh@([^\/]+)\/([^\/]+)(?:\/(.+))?$/);
242
+ if (nameMatch) {
243
+ let [, nameUsername, nameRepo, namePath] = nameMatch;
244
+ if (nameUsername === username && nameRepo === repo && namePath !== actualPath)
245
+ return `gh@${username}/${repo}/${actualPath}`;
246
+ }
247
+ }
248
+ return null;
249
+ }
250
+
251
+ export {
252
+ normalizeGitUrl,
253
+ parseGitUrl,
254
+ extractGitHubInfo,
255
+ generateGitHubPackageName,
256
+ generatePluginName,
257
+ generateMarketplaceName,
258
+ parseScopedPluginName,
259
+ splitPackageNameForTelemetry,
260
+ deriveNamespaceSlug,
261
+ isScopedPluginName,
262
+ isGitHubPluginName,
263
+ detectOldPluginNaming,
264
+ detectOldGitHubNaming
265
+ };
266
+ //# sourceMappingURL=chunk-WNRXZLWW.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../core/src/utils/plugin-naming.ts", "../../core/src/utils/git-url-parser.ts"],
4
+ "sourcesContent": ["import { basename } from 'path';\nimport { extractGitHubInfo } from './git-url-parser.js';\nimport { DIR_TO_TYPE, STRUCTURAL_PREFIX_DIRS } from '../constants/index.js';\nimport { logger } from './logger.js';\n\n/**\n * Context for generating scoped package names from GitHub sources.\n * Used for both Claude plugins and OpenPackage repositories.\n */\nexport interface GitHubPackageNamingContext {\n gitUrl?: string; // Git URL (for extracting GitHub info)\n path?: string; // Path within repo (subdirectory)\n resourcePath?: string; // Full resource path within repo\n packageName?: string; // Name from manifest (plugin.json or openpackage.yml)\n repoPath?: string; // Path to repository root (for fallback)\n}\n\n/**\n * Generate a scoped name for any GitHub-sourced package.\n * \n * Works for:\n * - Claude Code plugins\n * - OpenPackage repositories\n * - Marketplace plugins\n * \n * Format:\n * - GitHub repo with path: gh@username/repo/path\n * - GitHub repo (package is the repo): gh@username/repo\n * - Non-GitHub or local: use packageName as-is (no scoping)\n * \n * Fallback behavior:\n * - If packageName is undefined \u2192 use path basename or repo name\n */\nexport function generateGitHubPackageName(\n context: GitHubPackageNamingContext\n): string {\n const {\n gitUrl,\n path,\n resourcePath,\n packageName,\n repoPath\n } = context;\n const pathToUse = resourcePath ?? path;\n const normalizePath = (value: string): string => value.replace(/\\\\/g, '/').replace(/^\\.\\/?/, '').toLowerCase();\n \n // If no Git URL, use package name or fallback\n if (!gitUrl) {\n if (packageName && pathToUse) {\n return `${packageName}/${normalizePath(pathToUse)}`;\n }\n return packageName || (pathToUse ? basename(pathToUse) : 'unnamed-package');\n }\n \n // Try to extract GitHub info\n const githubInfo = extractGitHubInfo(gitUrl);\n \n // If not GitHub, use package name as-is\n if (!githubInfo) {\n logger.debug('Non-GitHub URL, using package name as-is', { gitUrl });\n if (packageName && pathToUse) {\n return `${packageName}/${normalizePath(pathToUse)}`;\n }\n return packageName || (pathToUse ? basename(pathToUse) : 'unnamed-package');\n }\n \n // GitHub URL - generate scoped name\n const { username, repo } = githubInfo;\n \n // If there's a subdirectory path, include it for uniqueness\n if (pathToUse) {\n // Use the full path for maximum clarity and unambiguity\n // Example: plugins/feature-dev -> gh@username/repo/plugins/feature-dev\n const normalizedPath = normalizePath(pathToUse);\n return `gh@${username}/${repo}/${normalizedPath}`;\n } else {\n // Root of repo: gh@username/repo\n return `gh@${username}/${repo}`;\n }\n}\n\n/**\n * DEPRECATED: Use generateGitHubPackageName instead.\n * Kept for backward compatibility with plugin-specific code.\n * \n * @deprecated\n */\nexport function generatePluginName(\n context: GitHubPackageNamingContext\n): string {\n return generateGitHubPackageName(context);\n}\n\n/**\n * DEPRECATED: Use GitHubPackageNamingContext instead.\n * Kept for backward compatibility.\n * \n * @deprecated\n */\nexport type PluginNamingContext = GitHubPackageNamingContext;\n\n/**\n * Generate a scoped name for a marketplace.\n * Uses the unified GitHub package naming system.\n * \n * Format:\n * - GitHub: gh@username/repo\n * - Non-GitHub: marketplace-name\n */\nexport function generateMarketplaceName(\n gitUrl: string | undefined,\n marketplaceManifestName?: string,\n repoPath?: string\n): string {\n // Reuse the unified naming function for consistency\n return generateGitHubPackageName({\n gitUrl,\n packageName: marketplaceManifestName,\n repoPath\n });\n}\n\n/**\n * Parse a scoped plugin name into its components.\n * Supports GitHub (gh@username/repo or gh@username/repo/path) and\n * old (@username/...) formats.\n * Returns null if the name is not scoped.\n */\nexport function parseScopedPluginName(name: string): {\n username: string;\n repo: string;\n plugin?: string;\n isGitHub: boolean;\n} | null {\n // GitHub format: gh@username/repo or gh@username/repo/...\n const ghMatch = name.match(/^gh@([^\\/]+)\\/([^\\/]+)(?:\\/(.+))?$/);\n if (ghMatch) {\n const [, username, repo, rest] = ghMatch;\n \n // If has path after repo\n if (rest) {\n return {\n username,\n repo,\n plugin: rest,\n isGitHub: true\n };\n }\n \n // Standalone repo: gh@username/repo\n return {\n username,\n repo,\n plugin: undefined,\n isGitHub: true\n };\n }\n \n // Old format with plugin: @username/repo/plugin\n const oldPluginMatch = name.match(/^@([^\\/]+)\\/([^\\/]+)\\/(.+)$/);\n if (oldPluginMatch) {\n const [, username, repo, plugin] = oldPluginMatch;\n return {\n username,\n repo,\n plugin,\n isGitHub: false\n };\n }\n \n // Old format standalone: @username/repo\n const oldRepoMatch = name.match(/^@([^\\/]+)\\/([^\\/]+)$/);\n if (oldRepoMatch) {\n const [, username, repo] = oldRepoMatch;\n return {\n username,\n repo,\n plugin: undefined,\n isGitHub: false\n };\n }\n \n return null;\n}\n\n/**\n * Split a package name into base package name and resource path for telemetry.\n * Handles GitHub-scoped names that may include resource paths.\n * \n * Examples:\n * - \"gh@user/repo/agents/designer\" \u2192 { baseName: \"gh@user/repo\", resourcePath: \"agents/designer\" }\n * - \"gh@user/repo\" \u2192 { baseName: \"gh@user/repo\", resourcePath: undefined }\n * - \"@scope/package/path\" \u2192 { baseName: \"@scope/package\", resourcePath: \"path\" }\n * - \"simple-package\" \u2192 { baseName: \"simple-package\", resourcePath: undefined }\n * \n * @param packageName - Full package name (may include resource path)\n * @returns Object with base package name and optional resource path\n */\nexport function splitPackageNameForTelemetry(packageName: string): {\n baseName: string;\n resourcePath?: string;\n} {\n // Handle GitHub format: gh@username/repo[/path]\n const ghMatch = packageName.match(/^gh@([^\\/]+)\\/([^\\/]+)(?:\\/(.+))?$/);\n if (ghMatch) {\n const [, username, repo, path] = ghMatch;\n return {\n baseName: `gh@${username}/${repo}`,\n resourcePath: path\n };\n }\n \n // Handle scoped format: @scope/name[/path]\n const scopedMatch = packageName.match(/^@([^\\/]+)\\/([^\\/]+)(?:\\/(.+))?$/);\n if (scopedMatch) {\n const [, scope, name, path] = scopedMatch;\n return {\n baseName: `@${scope}/${name}`,\n resourcePath: path\n };\n }\n \n // Handle unscoped format with path: name/path\n // Need to be careful not to split \"owner/repo\" GitHub shorthand\n // If it doesn't match gh@ or @ format, treat first segment as package name\n const segments = packageName.split('/');\n if (segments.length > 1) {\n // Ambiguous case: could be \"name/path\" or just \"owner/repo\"\n // For telemetry safety, only split if we have 2+ slashes (clear path indicator)\n if (segments.length > 2) {\n return {\n baseName: segments[0],\n resourcePath: segments.slice(1).join('/')\n };\n }\n }\n \n // No path detected, return as-is\n return {\n baseName: packageName,\n resourcePath: undefined\n };\n}\n\n/**\n * Strip a file extension from a path segment (e.g. \"code-reviewer.md\" \u2192 \"code-reviewer\").\n */\nfunction stripExtension(segment: string): string {\n const dotIdx = segment.lastIndexOf('.');\n return dotIdx > 0 ? segment.slice(0, dotIdx) : segment;\n}\n\n/**\n * Derive a short, human-readable namespace slug from a full package name.\n *\n * Uses \"smart leaf detection\": walks the sub-path segments and identifies\n * the meaningful name segment using a three-tier strategy:\n *\n * 1. **Resource marker** \u2014 if a resource-type directory (`rules`, `agents`,\n * `commands`, `skills`, `hooks` from `DIR_TO_TYPE`) appears at index > 0,\n * the segment immediately before it is the leaf.\n * 2. **Structural prefix** \u2014 if no resource marker is found (or it's at\n * index 0), and a known structural prefix directory (`plugins`,\n * `packages`) exists, the segment immediately *after* it is the leaf.\n * 3. **Repo fallback** \u2014 if neither strategy applies, the repo name is used.\n *\n * The slug uses `/` as separators so it produces real nested directories.\n *\n * ### Escalation for uniqueness\n *\n * If `existingSlugs` is provided, the function progressively escalates\n * to avoid collisions:\n * 1. `leaf` (e.g. \"feature-dev\")\n * 2. `repo/leaf` (e.g. \"claude-plugins/feature-dev\")\n * 3. `owner/repo/leaf` (e.g. \"anthropics/claude-plugins/feature-dev\")\n *\n * For repo-level packages (no sub-path):\n * 1. `repo` (e.g. \"essentials\")\n * 2. `owner/repo` (e.g. \"anthropics/essentials\")\n *\n * For plain registry names (not scoped): returned as-is with no escalation.\n *\n * ### Examples\n *\n * | Package Name | Slug (no collision) |\n * |---------------------------------------------------------------|---------------------|\n * | gh@owner/repo/plugins/foo/commands/bar/baz/hello.md | foo |\n * | gh@anthropics/claude-plugins/plugins/feature-dev/agents/x.md | feature-dev |\n * | gh@anthropics/repo/plugins/code-review | code-review |\n * | gh@owner/repo/packages/my-tool | my-tool |\n * | gh@anthropics/essentials | essentials |\n * | gh@owner/repo/agents/designer.md | repo |\n * | gh@owner/repo/tools/linter | repo |\n * | my-plain-package | my-plain-package |\n * | @scope/package-name | package-name |\n *\n * @param packageName Full canonical package name\n * @param existingSlugs Set of slugs already in use by other installed packages.\n * When provided, the function escalates to avoid collisions.\n */\nexport function deriveNamespaceSlug(\n packageName: string,\n existingSlugs?: Set<string>\n): string {\n const parsed = parseScopedPluginName(packageName);\n\n // \u2500\u2500 Plain registry name (not scoped) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (!parsed) {\n return packageName;\n }\n\n const { username, repo, plugin } = parsed;\n const resourceDirNames = new Set(Object.keys(DIR_TO_TYPE));\n\n // \u2500\u2500 Determine the leaf \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n let leaf: string;\n\n if (!plugin) {\n // Repo-level package: gh@owner/repo \u2014 leaf is repo\n leaf = repo;\n } else {\n const segments = plugin.split('/');\n const markerIndex = segments.findIndex(seg => resourceDirNames.has(seg));\n\n if (markerIndex > 0) {\n // Segment immediately before the first resource marker\n leaf = stripExtension(segments[markerIndex - 1]);\n } else if (markerIndex === 0) {\n // Marker at index 0 (e.g. \"agents/designer.md\") \u2014 package IS the repo\n leaf = repo;\n } else {\n // No resource marker found \u2014 check for known structural prefix directories\n // (e.g. \"plugins/code-review\", \"packages/my-tool\")\n const prefixIndex = segments.findIndex(seg => STRUCTURAL_PREFIX_DIRS.has(seg));\n\n if (prefixIndex >= 0 && prefixIndex + 1 < segments.length) {\n // Use the segment immediately after the structural prefix\n leaf = stripExtension(segments[prefixIndex + 1]);\n } else {\n // No recognized structure \u2014 fall back to repo\n leaf = repo;\n }\n }\n }\n\n // \u2500\u2500 Build escalation candidates \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const candidates: string[] = !plugin\n ? [repo, `${username}/${repo}`]\n : leaf === repo\n ? // Leaf is already the repo \u2014 start at repo, escalate to owner/repo\n [repo, `${username}/${repo}`]\n : [leaf, `${repo}/${leaf}`, `${username}/${repo}/${leaf}`];\n\n // \u2500\u2500 Pick the shortest non-colliding slug \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (!existingSlugs || existingSlugs.size === 0) {\n return candidates[0];\n }\n\n for (const candidate of candidates) {\n if (!existingSlugs.has(candidate)) {\n return candidate;\n }\n }\n\n // All candidates collide (extremely unlikely) \u2014 fall back to full name\n // with problematic characters stripped\n return packageName.replace(/^gh@/, '').replace(/@/g, '');\n}\n\n/**\n * Check if a name is a scoped plugin name (either new gh@ format or old @ format).\n */\nexport function isScopedPluginName(name: string): boolean {\n return parseScopedPluginName(name) !== null;\n}\n\n/**\n * Check if a name uses the new GitHub format (gh@username/...).\n */\nexport function isGitHubPluginName(name: string): boolean {\n return name.startsWith('gh@');\n}\n\n/**\n * Detect if a plugin dependency uses old naming format.\n * Returns the correct new name if migration needed, null otherwise.\n * \n * Old format: @username/marketplace-name/plugin (marketplace name from marketplace.json)\n * New format: @username/repo/plugin (always use repo name)\n */\nexport function detectOldPluginNaming(dep: { name: string; git?: string; url?: string; path?: string; subdirectory?: string }): string | null {\n // Only check GitHub git/url sources with scoped names\n const gitUrlRaw = dep.url || dep.git;\n if (!gitUrlRaw || !dep.name.startsWith('@')) {\n return null;\n }\n \n // Parse url to get base url (strip ref if present)\n const gitUrl = gitUrlRaw.includes('#') ? gitUrlRaw.split('#', 2)[0] : gitUrlRaw;\n \n const githubInfo = extractGitHubInfo(gitUrl);\n if (!githubInfo) {\n return null;\n }\n \n const { username, repo } = githubInfo;\n \n // Parse the current name\n const nameMatch = dep.name.match(/^@([^\\/]+)\\/(?:([^\\/]+)\\/)?([^\\/]+)$/);\n if (!nameMatch) {\n return null;\n }\n \n const [, nameUsername, middlePart, pluginPart] = nameMatch;\n \n // Check if username matches\n if (nameUsername !== username) {\n return null;\n }\n \n // If there's a path, this should be a 3-part name\n if (dep.path) {\n // Expected format: @username/repo/plugin\n const expectedName = `@${username}/${repo}/${pluginPart}`;\n \n // If middle part doesn't match repo name, it's old format\n if (middlePart !== repo) {\n return expectedName;\n }\n } else {\n // No subdirectory - should be 2-part name: @username/repo\n const expectedName = `@${username}/${repo}`;\n \n // If current name has 3 parts or doesn't match repo, it's old format\n if (middlePart || nameUsername + '/' + (middlePart || pluginPart) !== username + '/' + repo) {\n return expectedName;\n }\n }\n \n return null;\n}\n\n/**\n * Detect if a plugin dependency uses old GitHub naming format without gh@ prefix.\n * Returns the correct new name if migration needed, null otherwise.\n * \n * Old format: @username/repo or @username/repo/path\n * New format: gh@username/repo or gh@username/repo/path\n * \n * Also handles path mismatches where package name doesn't match the path/subdirectory field.\n */\nexport function detectOldGitHubNaming(dep: { name: string; git?: string; url?: string; path?: string; subdirectory?: string }): string | null {\n // Skip if not a git/url source\n const gitUrlRaw = dep.url || dep.git;\n if (!gitUrlRaw) {\n return null;\n }\n \n // Parse url to get base url (strip ref if present)\n const gitUrl = gitUrlRaw.includes('#') ? gitUrlRaw.split('#', 2)[0] : gitUrlRaw;\n \n const githubInfo = extractGitHubInfo(gitUrl);\n if (!githubInfo) {\n return null;\n }\n \n const { username, repo } = githubInfo;\n \n // Get the actual path (prefer path over subdirectory, normalize subdirectory)\n const actualPath = dep.path || (dep.subdirectory?.startsWith('./') \n ? dep.subdirectory.substring(2) \n : dep.subdirectory);\n \n // Check if name is missing gh@ prefix\n if (!dep.name.startsWith('gh@')) {\n // Handle old format with @ prefix\n if (dep.name.startsWith('@')) {\n // @username/repo/path or @username/repo\n if (actualPath) {\n return `gh@${username}/${repo}/${actualPath}`;\n }\n return `gh@${username}/${repo}`;\n }\n \n // Handle format without @ prefix: username/repo/path or username/repo\n // This happens when the @ was stripped somewhere\n if (actualPath) {\n return `gh@${username}/${repo}/${actualPath}`;\n }\n return `gh@${username}/${repo}`;\n }\n \n // Check if package name path matches the actual path field\n // This handles cases where name has basename instead of full path\n if (actualPath && dep.name.startsWith('gh@')) {\n // Extract the path portion from the package name\n const nameMatch = dep.name.match(/^gh@([^\\/]+)\\/([^\\/]+)(?:\\/(.+))?$/);\n if (nameMatch) {\n const [, nameUsername, nameRepo, namePath] = nameMatch;\n \n // Verify username and repo match\n if (nameUsername === username && nameRepo === repo) {\n // If actualPath exists but namePath is different, update to use full path\n if (namePath !== actualPath) {\n return `gh@${username}/${repo}/${actualPath}`;\n }\n }\n }\n }\n \n return null;\n}\n", "import { ValidationError } from './errors.js';\n\n/**\n * Parsed Git URL components.\n */\nexport interface ParsedGitUrl {\n host: string; // github.com, gitlab.com, etc.\n owner: string; // username or org\n repo: string; // repository name (without .git)\n protocol: 'https' | 'ssh' | 'git';\n normalized: string; // Normalized URL for hashing\n}\n\n/**\n * GitHub-specific metadata extracted from URL.\n */\nexport interface GitHubInfo {\n username: string;\n repo: string;\n}\n\n/**\n * Normalize a Git URL for consistent hashing.\n * - Converts to lowercase\n * - Removes .git suffix\n * - Normalizes GitHub SSH to HTTPS format\n */\nexport function normalizeGitUrl(url: string): string {\n let normalized = url.toLowerCase().trim();\n \n // Remove .git suffix\n if (normalized.endsWith('.git')) {\n normalized = normalized.slice(0, -4);\n }\n \n // Normalize GitHub SSH to HTTPS\n if (normalized.startsWith('git@github.com:')) {\n normalized = normalized.replace('git@github.com:', 'https://github.com/');\n }\n \n // Normalize other SSH formats\n if (normalized.startsWith('git@')) {\n // git@gitlab.com:owner/repo \u2192 https://gitlab.com/owner/repo\n normalized = normalized.replace(/^git@([^:]+):/, 'https://$1/');\n }\n \n // Remove trailing slashes\n normalized = normalized.replace(/\\/$/, '');\n \n return normalized;\n}\n\n/**\n * Parse a Git URL into its components.\n * Supports various formats:\n * - https://github.com/owner/repo.git\n * - git@github.com:owner/repo.git\n * - https://gitlab.com/group/subgroup/repo.git\n * - ssh://git@bitbucket.org/owner/repo.git\n */\nexport function parseGitUrl(url: string): ParsedGitUrl {\n const normalized = normalizeGitUrl(url);\n \n // Try HTTPS format first\n const httpsMatch = normalized.match(/^https?:\\/\\/([^\\/]+)\\/(.+?)\\/([^\\/]+?)(?:\\.git)?$/);\n if (httpsMatch) {\n const [, host, owner, repo] = httpsMatch;\n return {\n host,\n owner,\n repo,\n protocol: 'https',\n normalized\n };\n }\n \n // Try SSH format (already normalized to https above, but handle edge cases)\n const sshMatch = normalized.match(/^(?:ssh:\\/\\/)?git@([^:\\/]+)[:\\\\/](.+?)\\/([^\\/]+?)(?:\\.git)?$/);\n if (sshMatch) {\n const [, host, owner, repo] = sshMatch;\n return {\n host,\n owner,\n repo,\n protocol: 'ssh',\n normalized: `https://${host}/${owner}/${repo}` // Normalize for consistency\n };\n }\n \n // Try git:// protocol\n const gitMatch = normalized.match(/^git:\\/\\/([^\\/]+)\\/(.+?)\\/([^\\/]+?)(?:\\.git)?$/);\n if (gitMatch) {\n const [, host, owner, repo] = gitMatch;\n return {\n host,\n owner,\n repo,\n protocol: 'git',\n normalized: `https://${host}/${owner}/${repo}`\n };\n }\n \n throw new ValidationError(\n `Unable to parse Git URL: ${url}. Expected format: https://host/owner/repo.git or git@host:owner/repo.git`\n );\n}\n\n/**\n * Extract GitHub metadata from a Git URL.\n * Returns null if the URL is not a GitHub URL.\n */\nexport function extractGitHubInfo(url: string): GitHubInfo | null {\n try {\n const parsed = parseGitUrl(url);\n \n // Only handle github.com\n if (parsed.host !== 'github.com') {\n return null;\n }\n \n return {\n username: parsed.owner,\n repo: parsed.repo\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Check if a URL is a GitHub URL.\n */\nexport function isGitHubUrl(url: string): boolean {\n return extractGitHubInfo(url) !== null;\n}\n\n/**\n * Sanitize a Git ref name for use in filesystem paths.\n * Converts slashes and other problematic characters to hyphens.\n * \n * Examples:\n * - main \u2192 main\n * - feature/new-thing \u2192 feature-new-thing\n * - v1.0.0 \u2192 v1.0.0\n */\nexport function sanitizeRefName(ref: string): string {\n return ref.replace(/[\\/\\\\:]/g, '-');\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }