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,17 @@
1
+ /**
2
+ * Wave-based BFS dependency resolver.
3
+ *
4
+ * Processes dependencies in breadth-first waves -- each wave batches all
5
+ * unresolved packages at the current frontier, fetches their metadata in
6
+ * parallel, discovers new dependencies, and repeats until the queue is empty.
7
+ *
8
+ * Public API:
9
+ * resolveWave() - Run the BFS resolution loop
10
+ * buildInstallContexts() - Convert the graph into pipeline-ready contexts
11
+ * updateWorkspaceIndex() - Post-install index update
12
+ */
13
+ export { resolveWave } from './wave-engine.js';
14
+ export { buildInstallContexts, type BuildContextOptions } from './context-builder.js';
15
+ export { updateWorkspaceIndex } from './index-updater.js';
16
+ export type { WaveNode, WaveGraph, WaveResult, WaveVersionSolution, WaveVersionConflict, WaveResolverOptions, FetchResult, PackageFetcher, FetcherOptions } from './types.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/install/wave-resolver/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,cAAc,EACf,MAAM,YAAY,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Wave-based BFS dependency resolver.
3
+ *
4
+ * Processes dependencies in breadth-first waves -- each wave batches all
5
+ * unresolved packages at the current frontier, fetches their metadata in
6
+ * parallel, discovers new dependencies, and repeats until the queue is empty.
7
+ *
8
+ * Public API:
9
+ * resolveWave() - Run the BFS resolution loop
10
+ * buildInstallContexts() - Convert the graph into pipeline-ready contexts
11
+ * updateWorkspaceIndex() - Post-install index update
12
+ */
13
+ export { resolveWave } from './wave-engine.js';
14
+ export { buildInstallContexts } from './context-builder.js';
15
+ export { updateWorkspaceIndex } from './index-updater.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/install/wave-resolver/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAA4B,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Manifest reading for the wave resolver.
3
+ * Reads openpackage.yml from path and extracts dependency declarations.
4
+ */
5
+ import type { DependencyDeclaration, ParsedManifest, ResolvedSource } from './types.js';
6
+ /**
7
+ * Resolve the path to the manifest file at a content root, if it exists.
8
+ * Tries openpackage.yml at root, then .openpackage/openpackage.yml (workspace style).
9
+ * Returns null if neither exists.
10
+ */
11
+ export declare function getManifestPathAtContentRoot(contentRoot: string): Promise<string | null>;
12
+ /**
13
+ * Read manifest from a content root directory.
14
+ * Tries openpackage.yml at root, then .openpackage/openpackage.yml (workspace style).
15
+ */
16
+ export declare function readManifestAtPath(contentRoot: string): Promise<ParsedManifest | null>;
17
+ /**
18
+ * Read manifest from a resolved source.
19
+ * For path: reads from absolutePath. For git/registry: requires contentRoot (populated after load).
20
+ */
21
+ export declare function readManifestFromSource(source: ResolvedSource): Promise<ParsedManifest | null>;
22
+ /**
23
+ * Extract dependency declarations from a parsed manifest.
24
+ * declaredIn: path to the manifest file that contains these dependencies.
25
+ * depth: depth in the dependency tree (used when recursing).
26
+ * includeDev: if true, include dev-dependencies (only at root level).
27
+ */
28
+ export declare function extractDependencies(manifest: ParsedManifest, declaredIn: string, depth: number, includeDev: boolean): DependencyDeclaration[];
29
+ /**
30
+ * Get the directory containing the manifest file.
31
+ * Used as base for resolving relative path dependencies.
32
+ */
33
+ export declare function getDeclaredInDir(manifestPath: string): string;
34
+ //# sourceMappingURL=manifest-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-reader.d.ts","sourceRoot":"","sources":["../../../../src/core/install/wave-resolver/manifest-reader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAExF;;;;GAIG;AACH,wBAAsB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAM9F;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAkB5F;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAMhC;AA6BD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,OAAO,GAClB,qBAAqB,EAAE,CAqBzB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7D"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Manifest reading for the wave resolver.
3
+ * Reads openpackage.yml from path and extracts dependency declarations.
4
+ */
5
+ import { join, dirname } from 'path';
6
+ import { loadPackageConfig } from '../../package-context.js';
7
+ import { exists } from '../../../utils/fs.js';
8
+ import { parsePackageYml } from '../../../utils/package-yml.js';
9
+ import { DIR_PATTERNS, FILE_PATTERNS } from '../../../constants/index.js';
10
+ /**
11
+ * Resolve the path to the manifest file at a content root, if it exists.
12
+ * Tries openpackage.yml at root, then .openpackage/openpackage.yml (workspace style).
13
+ * Returns null if neither exists.
14
+ */
15
+ export async function getManifestPathAtContentRoot(contentRoot) {
16
+ const atRoot = join(contentRoot, FILE_PATTERNS.OPENPACKAGE_YML);
17
+ if (await exists(atRoot))
18
+ return atRoot;
19
+ const inOpenPackage = join(contentRoot, DIR_PATTERNS.OPENPACKAGE, FILE_PATTERNS.OPENPACKAGE_YML);
20
+ if (await exists(inOpenPackage))
21
+ return inOpenPackage;
22
+ return null;
23
+ }
24
+ /**
25
+ * Read manifest from a content root directory.
26
+ * Tries openpackage.yml at root, then .openpackage/openpackage.yml (workspace style).
27
+ */
28
+ export async function readManifestAtPath(contentRoot) {
29
+ const atRoot = join(contentRoot, FILE_PATTERNS.OPENPACKAGE_YML);
30
+ if (await exists(atRoot)) {
31
+ try {
32
+ return await parsePackageYml(atRoot);
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ const inOpenPackage = join(contentRoot, DIR_PATTERNS.OPENPACKAGE, FILE_PATTERNS.OPENPACKAGE_YML);
39
+ if (await exists(inOpenPackage)) {
40
+ try {
41
+ return await parsePackageYml(inOpenPackage);
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ return loadPackageConfig(contentRoot);
48
+ }
49
+ /**
50
+ * Read manifest from a resolved source.
51
+ * For path: reads from absolutePath. For git/registry: requires contentRoot (populated after load).
52
+ */
53
+ export async function readManifestFromSource(source) {
54
+ const contentRoot = source.contentRoot ?? source.absolutePath;
55
+ if (!contentRoot) {
56
+ return null;
57
+ }
58
+ return readManifestAtPath(contentRoot);
59
+ }
60
+ /**
61
+ * Convert PackageDependency from manifest to DependencyDeclaration.
62
+ */
63
+ function toDependencyDeclaration(dep, declaredIn, depth, isDev) {
64
+ const urlRaw = dep.url ?? dep.git;
65
+ const [url, embeddedRef] = typeof urlRaw === 'string' && urlRaw.includes('#') ? urlRaw.split('#', 2) : [urlRaw, undefined];
66
+ const ref = embeddedRef ?? dep.ref;
67
+ return {
68
+ name: dep.name,
69
+ version: dep.version,
70
+ path: dep.path,
71
+ url: typeof url === 'string' ? url : undefined,
72
+ ref,
73
+ base: dep.base,
74
+ isDev,
75
+ declaredIn,
76
+ depth
77
+ };
78
+ }
79
+ /**
80
+ * Extract dependency declarations from a parsed manifest.
81
+ * declaredIn: path to the manifest file that contains these dependencies.
82
+ * depth: depth in the dependency tree (used when recursing).
83
+ * includeDev: if true, include dev-dependencies (only at root level).
84
+ */
85
+ export function extractDependencies(manifest, declaredIn, depth, includeDev) {
86
+ const out = [];
87
+ const deps = manifest.dependencies ?? manifest.packages ?? [];
88
+ for (const dep of deps) {
89
+ if (!dep?.name)
90
+ continue;
91
+ out.push(toDependencyDeclaration(dep, declaredIn, depth, false));
92
+ }
93
+ if (includeDev && depth === 0) {
94
+ const devDeps = manifest['dev-dependencies'] ??
95
+ manifest['dev-packages'] ??
96
+ [];
97
+ for (const dep of devDeps) {
98
+ if (!dep?.name)
99
+ continue;
100
+ out.push(toDependencyDeclaration(dep, declaredIn, depth, true));
101
+ }
102
+ }
103
+ return out;
104
+ }
105
+ /**
106
+ * Get the directory containing the manifest file.
107
+ * Used as base for resolving relative path dependencies.
108
+ */
109
+ export function getDeclaredInDir(manifestPath) {
110
+ return dirname(manifestPath);
111
+ }
112
+ //# sourceMappingURL=manifest-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-reader.js","sourceRoot":"","sources":["../../../../src/core/install/wave-resolver/manifest-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Types for the wave-based BFS dependency resolver.
3
+ * Used by wave-engine, fetcher, version-solver, context-builder, and index-updater.
4
+ */
5
+ import type { PackageYml } from '../../../types/index.js';
6
+ import type { InstallResolutionMode } from '../types.js';
7
+ /** Parsed manifest (openpackage.yml) - alias for PackageYml */
8
+ export type ParsedManifest = PackageYml;
9
+ export interface DependencyDeclaration {
10
+ name: string;
11
+ version?: string;
12
+ path?: string;
13
+ url?: string;
14
+ ref?: string;
15
+ base?: string;
16
+ isDev: boolean;
17
+ declaredIn: string;
18
+ depth: number;
19
+ }
20
+ export interface ResolvedSource {
21
+ type: 'registry' | 'path' | 'git';
22
+ packageName?: string;
23
+ resolvedVersion?: string;
24
+ registryPath?: string;
25
+ absolutePath?: string;
26
+ gitUrl?: string;
27
+ gitRef?: string;
28
+ resourcePath?: string;
29
+ contentRoot?: string;
30
+ manifestPath?: string;
31
+ }
32
+ export interface BaseDetectionResult {
33
+ base?: string;
34
+ relative?: string;
35
+ source?: 'openpackage' | 'plugin' | 'marketplace' | 'pattern' | 'user-selection' | 'manifest';
36
+ pattern?: string;
37
+ matchType?: string;
38
+ }
39
+ export interface LoadedPackageData {
40
+ name: string;
41
+ version: string;
42
+ contentRoot: string;
43
+ repoRoot?: string;
44
+ metadata: PackageYml;
45
+ manifest: ParsedManifest;
46
+ baseDetection?: BaseDetectionResult;
47
+ formatDetection?: {
48
+ format?: unknown;
49
+ };
50
+ }
51
+ /**
52
+ * A resolved dependency node in the wave graph.
53
+ */
54
+ export interface WaveNode {
55
+ /** Canonical key (e.g. 'registry:react', 'git:url#ref:path', 'path:/abs/path') */
56
+ id: string;
57
+ /** Human-readable display name */
58
+ displayName: string;
59
+ /** Source type for this dependency */
60
+ sourceType: 'registry' | 'path' | 'git';
61
+ /** Full resolved source information */
62
+ source: ResolvedSource;
63
+ /** All declarations that led to this node (may have multiple parents) */
64
+ declarations: DependencyDeclaration[];
65
+ /** Resolved version (picked by the version solver for registry deps) */
66
+ resolvedVersion?: string;
67
+ /** Filesystem path to package content */
68
+ contentRoot?: string;
69
+ /** For git sources, the repository root path */
70
+ repoRoot?: string;
71
+ /** Parsed package manifest */
72
+ metadata?: PackageYml;
73
+ /** Child node IDs (dependencies of this package) */
74
+ children: string[];
75
+ /** Parent node IDs (packages that depend on this) */
76
+ parents: string[];
77
+ /** Which wave resolved this node */
78
+ wave: number;
79
+ /** Whether this is a marketplace (excluded from recursive resolution) */
80
+ isMarketplace?: boolean;
81
+ /** Loaded package data (populated for path/git; left undefined for registry nodes) */
82
+ loaded?: LoadedPackageData;
83
+ }
84
+ /**
85
+ * The complete resolved dependency graph produced by the wave engine.
86
+ */
87
+ export interface WaveGraph {
88
+ /** All resolved nodes keyed by canonical ID */
89
+ nodes: Map<string, WaveNode>;
90
+ /** Root node IDs (entry points) */
91
+ roots: string[];
92
+ /** Topologically sorted install order (leaves first) */
93
+ installOrder: string[];
94
+ /** Detected dependency cycles (arrays of node IDs) */
95
+ cycles: string[][];
96
+ /** Total number of waves executed */
97
+ waveCount: number;
98
+ /** Warnings accumulated during resolution */
99
+ warnings: string[];
100
+ }
101
+ /**
102
+ * Return type of resolveWave().
103
+ */
104
+ export interface WaveResult {
105
+ /** The resolved dependency graph */
106
+ graph: WaveGraph;
107
+ /** Version solution from constraint resolution */
108
+ versionSolution: WaveVersionSolution;
109
+ }
110
+ /**
111
+ * Output from the version solver.
112
+ */
113
+ export interface WaveVersionSolution {
114
+ /** Package name to resolved version */
115
+ resolved: Map<string, string>;
116
+ /** Conflicts that could not be resolved */
117
+ conflicts: WaveVersionConflict[];
118
+ }
119
+ /**
120
+ * A version conflict encountered during solving.
121
+ */
122
+ export interface WaveVersionConflict {
123
+ /** Package name with conflicting constraints */
124
+ packageName: string;
125
+ /** All semver ranges requested */
126
+ ranges: string[];
127
+ /** Which manifests requested each range */
128
+ requestedBy: string[];
129
+ }
130
+ /**
131
+ * Result returned by a PackageFetcher.
132
+ */
133
+ export interface FetchResult {
134
+ /** Canonical dependency key */
135
+ id: string;
136
+ /** Human-readable name */
137
+ displayName: string;
138
+ /** Package name */
139
+ name: string;
140
+ /** Resolved version (for registry deps) */
141
+ version?: string;
142
+ /** Filesystem content root */
143
+ contentRoot?: string;
144
+ /** Repository root (for git sources) */
145
+ repoRoot?: string;
146
+ /** Source type */
147
+ sourceType: 'registry' | 'path' | 'git';
148
+ /** Full resolved source */
149
+ source: ResolvedSource;
150
+ /** Parsed package manifest */
151
+ metadata?: PackageYml;
152
+ /** Dependency declarations found in this package's manifest */
153
+ childDependencies: DependencyDeclaration[];
154
+ /** Whether this is a marketplace package */
155
+ isMarketplace?: boolean;
156
+ /** Pre-loaded package data (for path/git fetchers) */
157
+ loaded?: LoadedPackageData;
158
+ }
159
+ /**
160
+ * Options passed to individual fetchers.
161
+ */
162
+ export interface FetcherOptions {
163
+ /** Workspace root directory */
164
+ workspaceRoot: string;
165
+ /** How to resolve versions (local-only, remote-primary, default) */
166
+ resolutionMode: InstallResolutionMode;
167
+ /** Skip git cache */
168
+ skipCache?: boolean;
169
+ /** Authentication profile */
170
+ profile?: string;
171
+ /** API key for remote registry */
172
+ apiKey?: string;
173
+ /** Current depth in the dependency tree (for dev-dependency inclusion) */
174
+ depth: number;
175
+ }
176
+ /**
177
+ * Interface for source-type-specific package fetchers.
178
+ */
179
+ export interface PackageFetcher {
180
+ /** Fetch metadata and child dependencies for a single declaration. */
181
+ fetch(declaration: DependencyDeclaration, declaredInDir: string, options: FetcherOptions): Promise<FetchResult>;
182
+ }
183
+ /**
184
+ * Top-level options for resolveWave().
185
+ */
186
+ export interface WaveResolverOptions {
187
+ /** Workspace root directory */
188
+ workspaceRoot: string;
189
+ /** Root manifest path. If not set, uses workspace .openpackage/openpackage.yml */
190
+ rootManifestPath?: string;
191
+ /** Include dev-dependencies at root level (default: true) */
192
+ includeDev?: boolean;
193
+ /** Include root manifest package itself as a node in the graph */
194
+ includeRoot?: boolean;
195
+ /** Force install even when conflicts exist */
196
+ force?: boolean;
197
+ /** Skip git cache (for --remote flag) */
198
+ skipCache?: boolean;
199
+ /** Version resolution mode */
200
+ resolutionMode?: InstallResolutionMode;
201
+ /** Safety valve: maximum number of resolved nodes (default: 10_000) */
202
+ maxNodes?: number;
203
+ /** Callback for interactive conflict resolution */
204
+ onConflict?: (conflict: WaveVersionConflict, availableVersions: string[]) => Promise<string | null>;
205
+ /** Authentication profile */
206
+ profile?: string;
207
+ /** API key for remote registry */
208
+ apiKey?: string;
209
+ }
210
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/install/wave-resolver/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Types for the wave-based BFS dependency resolver.
3
+ * Used by wave-engine, fetcher, version-solver, context-builder, and index-updater.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/install/wave-resolver/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Version constraint solver for the wave resolver.
3
+ * Accumulates semver constraints per package name across waves
4
+ * and finds the highest satisfying version.
5
+ */
6
+ import type { WaveVersionSolution, WaveVersionConflict } from './types.js';
7
+ export declare class WaveVersionSolver {
8
+ private constraints;
9
+ private availableVersions;
10
+ /**
11
+ * Add a version constraint for a package.
12
+ * Wildcard-like ranges (undefined, null, empty, '*', 'latest') are ignored
13
+ * since they impose no actual constraint.
14
+ *
15
+ * @param packageName - The package to constrain
16
+ * @param range - Semver range string, or a wildcard/empty value to skip
17
+ * @param requestedBy - Identifier of the dependent that requested this constraint
18
+ */
19
+ addConstraint(packageName: string, range: string | undefined, requestedBy: string): void;
20
+ /**
21
+ * Register a known available version for a package.
22
+ * Only valid semver strings are accepted.
23
+ *
24
+ * @param packageName - The package name
25
+ * @param version - A semver version string gathered during fetching
26
+ */
27
+ addAvailableVersion(packageName: string, version: string): void;
28
+ /**
29
+ * Solve all accumulated constraints and return resolved versions plus any conflicts.
30
+ *
31
+ * For each constrained package the solver finds the highest available version
32
+ * that satisfies every registered range. When no version satisfies all ranges
33
+ * the behaviour depends on the provided options:
34
+ * - `force`: pick the highest available version anyway and record a conflict.
35
+ * - `onConflict`: delegate to the caller (e.g. interactive prompt).
36
+ * - Otherwise: record the conflict with no resolved version.
37
+ *
38
+ * Packages with available versions but no constraints are included in the
39
+ * result with their highest available version.
40
+ *
41
+ * @param options - Optional force flag and conflict callback
42
+ * @returns Resolved version map and list of conflicts
43
+ */
44
+ solve(options?: {
45
+ force?: boolean;
46
+ onConflict?: (conflict: WaveVersionConflict, versions: string[]) => Promise<string | null>;
47
+ }): Promise<WaveVersionSolution>;
48
+ /**
49
+ * Retrieve the accumulated constraints for a specific package.
50
+ * Useful for debugging and logging.
51
+ *
52
+ * @param packageName - The package to look up
53
+ * @returns The constraint entry, or undefined if no constraints exist
54
+ */
55
+ getConstraintsForPackage(packageName: string): {
56
+ ranges: string[];
57
+ requestedBy: string[];
58
+ } | undefined;
59
+ /**
60
+ * Reset all accumulated constraints and available versions.
61
+ */
62
+ clear(): void;
63
+ }
64
+ export default WaveVersionSolver;
65
+ //# sourceMappingURL=version-solver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-solver.d.ts","sourceRoot":"","sources":["../../../../src/core/install/wave-resolver/version-solver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA2B3E,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,CAA2C;IAC9D,OAAO,CAAC,iBAAiB,CAAuC;IAEhE;;;;;;;;OAQG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAexF;;;;;;OAMG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAc/D;;;;;;;;;;;;;;;OAeG;IACG,KAAK,CAAC,OAAO,CAAC,EAAE;QACpB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;KAC5F,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0EhC;;;;;;OAMG;IACH,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS;IAItG;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Version constraint solver for the wave resolver.
3
+ * Accumulates semver constraints per package name across waves
4
+ * and finds the highest satisfying version.
5
+ */
6
+ import semver from 'semver';
7
+ function findHighestSatisfying(versions, ranges) {
8
+ if (versions.length === 0)
9
+ return null;
10
+ const satisfying = versions.filter(v => ranges.every(range => {
11
+ try {
12
+ return semver.satisfies(v, range, { includePrerelease: true });
13
+ }
14
+ catch {
15
+ return false;
16
+ }
17
+ }));
18
+ if (satisfying.length === 0)
19
+ return null;
20
+ return semver.maxSatisfying(satisfying, '*', { includePrerelease: true });
21
+ }
22
+ export class WaveVersionSolver {
23
+ constructor() {
24
+ this.constraints = new Map();
25
+ this.availableVersions = new Map();
26
+ }
27
+ /**
28
+ * Add a version constraint for a package.
29
+ * Wildcard-like ranges (undefined, null, empty, '*', 'latest') are ignored
30
+ * since they impose no actual constraint.
31
+ *
32
+ * @param packageName - The package to constrain
33
+ * @param range - Semver range string, or a wildcard/empty value to skip
34
+ * @param requestedBy - Identifier of the dependent that requested this constraint
35
+ */
36
+ addConstraint(packageName, range, requestedBy) {
37
+ if (!range || range.trim() === '' || range.trim() === '*' || range.trim().toLowerCase() === 'latest') {
38
+ return;
39
+ }
40
+ let entry = this.constraints.get(packageName);
41
+ if (!entry) {
42
+ entry = { ranges: [], requestedBy: [] };
43
+ this.constraints.set(packageName, entry);
44
+ }
45
+ entry.ranges.push(range.trim());
46
+ entry.requestedBy.push(requestedBy);
47
+ }
48
+ /**
49
+ * Register a known available version for a package.
50
+ * Only valid semver strings are accepted.
51
+ *
52
+ * @param packageName - The package name
53
+ * @param version - A semver version string gathered during fetching
54
+ */
55
+ addAvailableVersion(packageName, version) {
56
+ if (!semver.valid(version)) {
57
+ return;
58
+ }
59
+ let versions = this.availableVersions.get(packageName);
60
+ if (!versions) {
61
+ versions = new Set();
62
+ this.availableVersions.set(packageName, versions);
63
+ }
64
+ versions.add(version);
65
+ }
66
+ /**
67
+ * Solve all accumulated constraints and return resolved versions plus any conflicts.
68
+ *
69
+ * For each constrained package the solver finds the highest available version
70
+ * that satisfies every registered range. When no version satisfies all ranges
71
+ * the behaviour depends on the provided options:
72
+ * - `force`: pick the highest available version anyway and record a conflict.
73
+ * - `onConflict`: delegate to the caller (e.g. interactive prompt).
74
+ * - Otherwise: record the conflict with no resolved version.
75
+ *
76
+ * Packages with available versions but no constraints are included in the
77
+ * result with their highest available version.
78
+ *
79
+ * @param options - Optional force flag and conflict callback
80
+ * @returns Resolved version map and list of conflicts
81
+ */
82
+ async solve(options) {
83
+ const { force = false, onConflict } = options ?? {};
84
+ const resolved = new Map();
85
+ const conflicts = [];
86
+ // Track which packages we handle via constraints so we can add
87
+ // unconstrained-but-available packages afterwards.
88
+ const handled = new Set();
89
+ for (const [packageName, entry] of this.constraints) {
90
+ handled.add(packageName);
91
+ const versionSet = this.availableVersions.get(packageName);
92
+ const versions = versionSet ? Array.from(versionSet) : [];
93
+ if (entry.ranges.length === 0) {
94
+ // All constraints were wildcards - pick highest available
95
+ const highest = versions.length > 0
96
+ ? semver.maxSatisfying(versions, '*', { includePrerelease: true })
97
+ : null;
98
+ if (highest) {
99
+ resolved.set(packageName, highest);
100
+ }
101
+ continue;
102
+ }
103
+ const satisfying = findHighestSatisfying(versions, entry.ranges);
104
+ if (satisfying) {
105
+ resolved.set(packageName, satisfying);
106
+ continue;
107
+ }
108
+ // No version satisfies all constraints
109
+ const conflict = {
110
+ packageName,
111
+ ranges: entry.ranges,
112
+ requestedBy: entry.requestedBy,
113
+ };
114
+ if (force && versions.length > 0) {
115
+ const highest = semver.maxSatisfying(versions, '*', { includePrerelease: true });
116
+ if (highest) {
117
+ resolved.set(packageName, highest);
118
+ }
119
+ conflicts.push(conflict);
120
+ }
121
+ else if (onConflict && versions.length > 0) {
122
+ const chosen = await onConflict(conflict, versions);
123
+ if (chosen) {
124
+ resolved.set(packageName, chosen);
125
+ }
126
+ conflicts.push(conflict);
127
+ }
128
+ else {
129
+ conflicts.push(conflict);
130
+ }
131
+ }
132
+ // Include packages that have available versions but no constraints
133
+ // (version discovered by the fetcher without any dependent declaring a range).
134
+ for (const [packageName, versionSet] of this.availableVersions) {
135
+ if (handled.has(packageName))
136
+ continue;
137
+ const versions = Array.from(versionSet);
138
+ const highest = versions.length > 0
139
+ ? semver.maxSatisfying(versions, '*', { includePrerelease: true })
140
+ : null;
141
+ if (highest) {
142
+ resolved.set(packageName, highest);
143
+ }
144
+ }
145
+ return { resolved, conflicts };
146
+ }
147
+ /**
148
+ * Retrieve the accumulated constraints for a specific package.
149
+ * Useful for debugging and logging.
150
+ *
151
+ * @param packageName - The package to look up
152
+ * @returns The constraint entry, or undefined if no constraints exist
153
+ */
154
+ getConstraintsForPackage(packageName) {
155
+ return this.constraints.get(packageName);
156
+ }
157
+ /**
158
+ * Reset all accumulated constraints and available versions.
159
+ */
160
+ clear() {
161
+ this.constraints.clear();
162
+ this.availableVersions.clear();
163
+ }
164
+ }
165
+ export default WaveVersionSolver;
166
+ //# sourceMappingURL=version-solver.js.map