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,376 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ getOpenPackageDirectories
4
+ } from "./chunk-GDVFS3YP.js";
5
+ import {
6
+ exists,
7
+ readJsonOrJsoncFile,
8
+ writeJsonFile,
9
+ writeJsoncFile
10
+ } from "./chunk-S47F4OG4.js";
11
+ import {
12
+ ConfigError
13
+ } from "./chunk-ID4SVDQZ.js";
14
+ import {
15
+ logger
16
+ } from "./chunk-5EFWGD33.js";
17
+
18
+ // ../core/src/core/profiles.ts
19
+ import { join as join2 } from "path";
20
+
21
+ // ../core/src/core/config.ts
22
+ import { join, extname } from "path";
23
+ var CONFIG_FILE_NAMES = ["config.jsonc", "config.json"], DEFAULT_CONFIG_FILE = "config.jsonc", DEFAULT_CONFIG = {
24
+ defaults: {
25
+ license: "MIT"
26
+ }
27
+ }, ConfigManager = class {
28
+ constructor() {
29
+ this.config = null;
30
+ this.configPath = null;
31
+ this.openPackageDirs = getOpenPackageDirectories();
32
+ }
33
+ /**
34
+ * Find the existing config file (supports both .json and .jsonc)
35
+ * Returns the path to the existing config file, or null if none exists
36
+ */
37
+ async findConfigFile() {
38
+ for (let fileName of CONFIG_FILE_NAMES) {
39
+ let path = join(this.openPackageDirs.config, fileName);
40
+ if (await exists(path))
41
+ return path;
42
+ }
43
+ return null;
44
+ }
45
+ /**
46
+ * Get the config path to use for saving
47
+ * If a config file already exists, use that format
48
+ * Otherwise, use the default format (JSONC)
49
+ */
50
+ async getConfigPath() {
51
+ if (this.configPath)
52
+ return this.configPath;
53
+ let existingPath = await this.findConfigFile();
54
+ return existingPath ? (this.configPath = existingPath, existingPath) : (this.configPath = join(this.openPackageDirs.config, DEFAULT_CONFIG_FILE), this.configPath);
55
+ }
56
+ /**
57
+ * Load configuration from file, create default if it doesn't exist
58
+ */
59
+ async load() {
60
+ if (this.config)
61
+ return this.config;
62
+ try {
63
+ let configPath = await this.findConfigFile();
64
+ if (configPath) {
65
+ logger.debug(`Loading config from: ${configPath}`);
66
+ let fileConfig = await readJsonOrJsoncFile(configPath);
67
+ this.configPath = configPath, this.config = {
68
+ ...DEFAULT_CONFIG,
69
+ ...fileConfig,
70
+ defaults: {
71
+ ...DEFAULT_CONFIG.defaults,
72
+ ...fileConfig.defaults ?? {}
73
+ }
74
+ };
75
+ } else
76
+ logger.debug("Config file not found, using defaults"), this.config = { ...DEFAULT_CONFIG }, await this.save();
77
+ return this.config;
78
+ } catch (error) {
79
+ throw logger.error("Failed to load configuration", { error }), new ConfigError(`Failed to load configuration: ${error}`);
80
+ }
81
+ }
82
+ /**
83
+ * Save current configuration to file
84
+ * Uses JSONC format for new files, preserves existing format
85
+ */
86
+ async save() {
87
+ if (!this.config)
88
+ throw new ConfigError("No configuration loaded to save");
89
+ try {
90
+ let configPath = await this.getConfigPath(), ext = extname(configPath);
91
+ logger.debug(`Saving config to: ${configPath}`), ext === ".jsonc" ? await writeJsoncFile(configPath, this.config) : await writeJsonFile(configPath, this.config);
92
+ } catch (error) {
93
+ throw logger.error("Failed to save configuration", { error, configPath: this.configPath }), new ConfigError(`Failed to save configuration: ${error}`);
94
+ }
95
+ }
96
+ /**
97
+ * Get a configuration value
98
+ */
99
+ async get(key) {
100
+ return (await this.load())[key];
101
+ }
102
+ /**
103
+ * Set a configuration value
104
+ */
105
+ async set(key, value) {
106
+ let config = await this.load();
107
+ config[key] = value, this.config = config, await this.save(), logger.info(`Configuration updated: ${key} = ${value}`);
108
+ }
109
+ /**
110
+ * Get all configuration values
111
+ */
112
+ async getAll() {
113
+ return await this.load();
114
+ }
115
+ /**
116
+ * Reset configuration to defaults
117
+ */
118
+ async reset() {
119
+ this.config = { ...DEFAULT_CONFIG }, await this.save(), logger.info("Configuration reset to defaults");
120
+ }
121
+ /**
122
+ * Validate configuration
123
+ */
124
+ async validate() {
125
+ try {
126
+ let config = await this.load();
127
+ if (typeof config != "object" || config === null)
128
+ throw new ConfigError("Invalid configuration structure");
129
+ return !0;
130
+ } catch (error) {
131
+ return logger.error("Configuration validation failed", { error }), !1;
132
+ }
133
+ }
134
+ /**
135
+ * Get the configuration file path
136
+ * Returns the path that will be used for the config file
137
+ */
138
+ async getConfigFilePath() {
139
+ return await this.getConfigPath();
140
+ }
141
+ /**
142
+ * Get OpenPackage directories
143
+ */
144
+ getDirectories() {
145
+ return this.openPackageDirs;
146
+ }
147
+ /**
148
+ * Get telemetry disabled setting
149
+ * Returns undefined if not set in config
150
+ */
151
+ async getTelemetryDisabled() {
152
+ return (await this.load()).telemetry?.disabled;
153
+ }
154
+ }, configManager = new ConfigManager();
155
+
156
+ // ../core/src/utils/ini.ts
157
+ import { readFile, writeFile, chmod } from "fs/promises";
158
+ function parseIni(content) {
159
+ let result = {}, currentSection = "", lines = content.split(`
160
+ `);
161
+ for (let line of lines) {
162
+ let trimmed = line.trim();
163
+ if (!trimmed || trimmed.startsWith("#"))
164
+ continue;
165
+ if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
166
+ currentSection = trimmed.slice(1, -1), result[currentSection] || (result[currentSection] = {});
167
+ continue;
168
+ }
169
+ let equalIndex = trimmed.indexOf("=");
170
+ if (equalIndex > 0) {
171
+ let key = trimmed.slice(0, equalIndex).trim(), value = trimmed.slice(equalIndex + 1).trim();
172
+ currentSection ? result[currentSection][key] = value : (result.default || (result.default = {}), result.default[key] = value);
173
+ }
174
+ }
175
+ return result;
176
+ }
177
+ function stringifyIni(data) {
178
+ let lines = [];
179
+ for (let [sectionName, section] of Object.entries(data))
180
+ if (Object.keys(section).length > 0) {
181
+ lines.push(`[${sectionName}]`);
182
+ for (let [key, value] of Object.entries(section))
183
+ lines.push(`${key} = ${value}`);
184
+ lines.push("");
185
+ }
186
+ return lines.join(`
187
+ `);
188
+ }
189
+ async function readIniFile(filePath) {
190
+ try {
191
+ if (!await exists(filePath))
192
+ return logger.debug(`INI file not found: ${filePath}`), {};
193
+ let content = await readFile(filePath, "utf-8");
194
+ return parseIni(content);
195
+ } catch (error) {
196
+ throw logger.error(`Failed to read INI file: ${filePath}`, { error }), new Error(`Failed to read INI file: ${error}`);
197
+ }
198
+ }
199
+ async function writeIniFile(filePath, data) {
200
+ try {
201
+ let content = stringifyIni(data);
202
+ await writeFile(filePath, content, "utf-8"), await chmod(filePath, 384), logger.debug(`INI file written: ${filePath}`);
203
+ } catch (error) {
204
+ throw logger.error(`Failed to write INI file: ${filePath}`, { error }), new Error(`Failed to write INI file: ${error}`);
205
+ }
206
+ }
207
+ function setIniValue(data, section, key, value) {
208
+ data[section] || (data[section] = {}), data[section][key] = value;
209
+ }
210
+ function removeIniSection(data, section) {
211
+ delete data[section];
212
+ }
213
+ function hasIniSection(data, section) {
214
+ return section in data && Object.keys(data[section]).length > 0;
215
+ }
216
+
217
+ // ../core/src/core/profiles.ts
218
+ var CREDENTIALS_FILE_NAME = "credentials", ProfileManager = class {
219
+ constructor() {
220
+ this.openPackageDirs = getOpenPackageDirectories(), this.credentialsPath = join2(this.openPackageDirs.config, CREDENTIALS_FILE_NAME);
221
+ }
222
+ /**
223
+ * List all available profiles
224
+ */
225
+ async listProfiles() {
226
+ try {
227
+ let profiles = (await configManager.getAll()).profiles || {};
228
+ return Object.keys(profiles);
229
+ } catch (error) {
230
+ throw logger.error("Failed to list profiles", { error }), new ConfigError(`Failed to list profiles: ${error}`);
231
+ }
232
+ }
233
+ /**
234
+ * Get a specific profile with its configuration and credentials
235
+ */
236
+ async getProfile(profileName) {
237
+ try {
238
+ let profiles = (await configManager.getAll()).profiles || {};
239
+ if (!profiles[profileName])
240
+ return null;
241
+ let profileConfig = profiles[profileName], mergedProfileConfig = {
242
+ ...profileConfig,
243
+ defaults: {
244
+ ...profileConfig.defaults ?? {}
245
+ }
246
+ }, credentials;
247
+ try {
248
+ let apiKey = (await readIniFile(this.credentialsPath))[profileName]?.api_key;
249
+ apiKey && (credentials = { api_key: apiKey });
250
+ } catch (error) {
251
+ logger.debug(`No credentials found for profile: ${profileName}`, { error });
252
+ }
253
+ return {
254
+ name: profileName,
255
+ config: mergedProfileConfig,
256
+ credentials
257
+ };
258
+ } catch (error) {
259
+ throw logger.error(`Failed to get profile: ${profileName}`, { error }), new ConfigError(`Failed to get profile: ${error}`);
260
+ }
261
+ }
262
+ /**
263
+ * Set or update a profile configuration
264
+ */
265
+ async setProfile(profileName, profileConfig) {
266
+ try {
267
+ let config = await configManager.getAll();
268
+ config.profiles || (config.profiles = {}), config.profiles[profileName] = profileConfig, await configManager.set("profiles", config.profiles), logger.info(`Profile '${profileName}' configuration updated`);
269
+ } catch (error) {
270
+ throw logger.error(`Failed to set profile: ${profileName}`, { error }), new ConfigError(`Failed to set profile: ${error}`);
271
+ }
272
+ }
273
+ /**
274
+ * Set or update the default scope for a profile without disturbing other fields.
275
+ */
276
+ async setProfileDefaultScope(profileName, scope) {
277
+ try {
278
+ let config = await configManager.getAll(), normalizedScope = scope.startsWith("@") ? scope : `@${scope}`;
279
+ config.profiles || (config.profiles = {});
280
+ let existingProfile = config.profiles[profileName] ?? {};
281
+ if (existingProfile.defaults?.scope === normalizedScope)
282
+ return;
283
+ config.profiles[profileName] = {
284
+ ...existingProfile,
285
+ defaults: {
286
+ ...existingProfile.defaults ?? {},
287
+ scope: normalizedScope
288
+ }
289
+ }, await configManager.set("profiles", config.profiles), logger.info(`Default scope for profile '${profileName}' set to ${normalizedScope}`);
290
+ } catch (error) {
291
+ throw logger.error(`Failed to set default scope for profile: ${profileName}`, { error }), new ConfigError(`Failed to set default scope for profile: ${error}`);
292
+ }
293
+ }
294
+ /**
295
+ * Set credentials for a profile
296
+ */
297
+ async setProfileCredentials(profileName, credentials) {
298
+ try {
299
+ let credentialsData = {};
300
+ try {
301
+ credentialsData = await readIniFile(this.credentialsPath);
302
+ } catch {
303
+ logger.debug("Credentials file does not exist, creating new one");
304
+ }
305
+ credentials.api_key !== void 0 && setIniValue(credentialsData, profileName, "api_key", credentials.api_key), await writeIniFile(this.credentialsPath, credentialsData), logger.info(`Credentials for profile '${profileName}' updated`);
306
+ } catch (error) {
307
+ throw logger.error(`Failed to set credentials for profile: ${profileName}`, { error }), new ConfigError(`Failed to set credentials for profile: ${error}`);
308
+ }
309
+ }
310
+ /**
311
+ * Remove stored credentials for a profile without deleting the profile entry.
312
+ */
313
+ async clearProfileCredentials(profileName) {
314
+ try {
315
+ let credentialsData = await readIniFile(this.credentialsPath);
316
+ if (!hasIniSection(credentialsData, profileName))
317
+ return;
318
+ removeIniSection(credentialsData, profileName), await writeIniFile(this.credentialsPath, credentialsData), logger.info(`Credentials for profile '${profileName}' removed`);
319
+ } catch (error) {
320
+ throw logger.error(`Failed to clear credentials for profile: ${profileName}`, { error }), new ConfigError(`Failed to clear credentials for profile: ${error}`);
321
+ }
322
+ }
323
+ /**
324
+ * Delete a profile and its credentials
325
+ */
326
+ async deleteProfile(profileName) {
327
+ try {
328
+ let config = await configManager.getAll();
329
+ config.profiles && config.profiles[profileName] && (delete config.profiles[profileName], await configManager.set("profiles", config.profiles));
330
+ try {
331
+ let credentialsData = await readIniFile(this.credentialsPath);
332
+ hasIniSection(credentialsData, profileName) && (removeIniSection(credentialsData, profileName), await writeIniFile(this.credentialsPath, credentialsData));
333
+ } catch {
334
+ logger.debug("No credentials file to update");
335
+ }
336
+ logger.info(`Profile '${profileName}' deleted`);
337
+ } catch (error) {
338
+ throw logger.error(`Failed to delete profile: ${profileName}`, { error }), new ConfigError(`Failed to delete profile: ${error}`);
339
+ }
340
+ }
341
+ /**
342
+ * Check if a profile exists
343
+ */
344
+ async hasProfile(profileName) {
345
+ try {
346
+ let config = await configManager.getAll();
347
+ return !!(config.profiles && config.profiles[profileName]);
348
+ } catch (error) {
349
+ return logger.error(`Failed to check if profile exists: ${profileName}`, { error }), !1;
350
+ }
351
+ }
352
+ /**
353
+ * Get the default profile name
354
+ */
355
+ async getDefaultProfileName() {
356
+ return "default";
357
+ }
358
+ /**
359
+ * Get credentials file path
360
+ */
361
+ getCredentialsPath() {
362
+ return this.credentialsPath;
363
+ }
364
+ /**
365
+ * Get OpenPackage directories
366
+ */
367
+ getDirectories() {
368
+ return this.openPackageDirs;
369
+ }
370
+ }, profileManager = new ProfileManager();
371
+
372
+ export {
373
+ configManager,
374
+ profileManager
375
+ };
376
+ //# sourceMappingURL=chunk-WF7H2YDU.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../core/src/core/profiles.ts", "../../core/src/core/config.ts", "../../core/src/utils/ini.ts"],
4
+ "sourcesContent": ["import { join } from 'path';\nimport { Profile, ProfileConfig, ProfileCredentials } from '../types/index.js';\nimport { configManager } from './config.js';\nimport { getOpenPackageDirectories } from './directory.js';\nimport { readIniFile, writeIniFile, IniFile, setIniValue, removeIniSection, hasIniSection } from '../utils/ini.js';\nimport { logger } from '../utils/logger.js';\nimport { ConfigError } from '../utils/errors.js';\n\n/**\n * Profile management for OpenPackage CLI\n * Handles profile configuration and credentials\n */\n\nconst CREDENTIALS_FILE_NAME = 'credentials';\n\nclass ProfileManager {\n private credentialsPath: string;\n private openPackageDirs: ReturnType<typeof getOpenPackageDirectories>;\n\n constructor() {\n this.openPackageDirs = getOpenPackageDirectories();\n this.credentialsPath = join(this.openPackageDirs.config, CREDENTIALS_FILE_NAME);\n }\n\n /**\n * List all available profiles\n */\n async listProfiles(): Promise<string[]> {\n try {\n const config = await configManager.getAll();\n const profiles = config.profiles || {};\n return Object.keys(profiles);\n } catch (error) {\n logger.error('Failed to list profiles', { error });\n throw new ConfigError(`Failed to list profiles: ${error}`);\n }\n }\n\n /**\n * Get a specific profile with its configuration and credentials\n */\n async getProfile(profileName: string): Promise<Profile | null> {\n try {\n const config = await configManager.getAll();\n const profiles = config.profiles || {};\n \n if (!profiles[profileName]) {\n return null;\n }\n\n const profileConfig = profiles[profileName];\n const mergedProfileConfig: ProfileConfig = {\n ...profileConfig,\n defaults: {\n ...(profileConfig.defaults ?? {})\n }\n };\n let credentials: ProfileCredentials | undefined;\n\n // Load credentials from credentials file\n try {\n const credentialsData = await readIniFile(this.credentialsPath);\n const apiKey = credentialsData[profileName]?.api_key;\n if (apiKey) {\n credentials = { api_key: apiKey };\n }\n } catch (error) {\n logger.debug(`No credentials found for profile: ${profileName}`, { error });\n }\n\n return {\n name: profileName,\n config: mergedProfileConfig,\n credentials\n };\n } catch (error) {\n logger.error(`Failed to get profile: ${profileName}`, { error });\n throw new ConfigError(`Failed to get profile: ${error}`);\n }\n }\n\n /**\n * Set or update a profile configuration\n */\n async setProfile(profileName: string, profileConfig: ProfileConfig): Promise<void> {\n try {\n const config = await configManager.getAll();\n \n if (!config.profiles) {\n config.profiles = {};\n }\n \n config.profiles[profileName] = profileConfig;\n \n // Update the config using the existing configManager\n await configManager.set('profiles' as keyof typeof config, config.profiles);\n \n logger.info(`Profile '${profileName}' configuration updated`);\n } catch (error) {\n logger.error(`Failed to set profile: ${profileName}`, { error });\n throw new ConfigError(`Failed to set profile: ${error}`);\n }\n }\n\n /**\n * Set or update the default scope for a profile without disturbing other fields.\n */\n async setProfileDefaultScope(profileName: string, scope: string): Promise<void> {\n try {\n const config = await configManager.getAll();\n const normalizedScope = scope.startsWith('@') ? scope : `@${scope}`;\n\n if (!config.profiles) {\n config.profiles = {};\n }\n\n const existingProfile = config.profiles[profileName] ?? {};\n const currentScope = existingProfile.defaults?.scope;\n\n // No-op if already set to the desired scope\n if (currentScope === normalizedScope) {\n return;\n }\n\n config.profiles[profileName] = {\n ...existingProfile,\n defaults: {\n ...(existingProfile.defaults ?? {}),\n scope: normalizedScope\n }\n };\n\n await configManager.set('profiles' as keyof typeof config, config.profiles);\n logger.info(`Default scope for profile '${profileName}' set to ${normalizedScope}`);\n } catch (error) {\n logger.error(`Failed to set default scope for profile: ${profileName}`, { error });\n throw new ConfigError(`Failed to set default scope for profile: ${error}`);\n }\n }\n\n /**\n * Set credentials for a profile\n */\n async setProfileCredentials(profileName: string, credentials: ProfileCredentials): Promise<void> {\n try {\n let credentialsData: IniFile = {};\n \n // Read existing credentials if file exists\n try {\n credentialsData = await readIniFile(this.credentialsPath);\n } catch (error) {\n logger.debug('Credentials file does not exist, creating new one');\n }\n \n // Set credentials for the profile (API key only)\n if (credentials.api_key !== undefined) {\n setIniValue(credentialsData, profileName, 'api_key', credentials.api_key);\n }\n \n // Write back to file\n await writeIniFile(this.credentialsPath, credentialsData);\n \n logger.info(`Credentials for profile '${profileName}' updated`);\n } catch (error) {\n logger.error(`Failed to set credentials for profile: ${profileName}`, { error });\n throw new ConfigError(`Failed to set credentials for profile: ${error}`);\n }\n }\n\n\t/**\n\t * Remove stored credentials for a profile without deleting the profile entry.\n\t */\n\tasync clearProfileCredentials(profileName: string): Promise<void> {\n\t\ttry {\n\t\t\tconst credentialsData = await readIniFile(this.credentialsPath);\n\t\t\tif (!hasIniSection(credentialsData, profileName)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tremoveIniSection(credentialsData, profileName);\n\t\t\tawait writeIniFile(this.credentialsPath, credentialsData);\n\t\t\tlogger.info(`Credentials for profile '${profileName}' removed`);\n\t\t} catch (error) {\n\t\t\tlogger.error(`Failed to clear credentials for profile: ${profileName}`, { error });\n\t\t\tthrow new ConfigError(`Failed to clear credentials for profile: ${error}`);\n\t\t}\n\t}\n\n /**\n * Delete a profile and its credentials\n */\n async deleteProfile(profileName: string): Promise<void> {\n try {\n // Remove from config\n const config = await configManager.getAll();\n if (config.profiles && config.profiles[profileName]) {\n delete config.profiles[profileName];\n await configManager.set('profiles' as keyof typeof config, config.profiles);\n }\n \n // Remove credentials\n try {\n const credentialsData = await readIniFile(this.credentialsPath);\n if (hasIniSection(credentialsData, profileName)) {\n removeIniSection(credentialsData, profileName);\n await writeIniFile(this.credentialsPath, credentialsData);\n }\n } catch (error) {\n logger.debug('No credentials file to update');\n }\n \n logger.info(`Profile '${profileName}' deleted`);\n } catch (error) {\n logger.error(`Failed to delete profile: ${profileName}`, { error });\n throw new ConfigError(`Failed to delete profile: ${error}`);\n }\n }\n\n /**\n * Check if a profile exists\n */\n async hasProfile(profileName: string): Promise<boolean> {\n try {\n const config = await configManager.getAll();\n return !!(config.profiles && config.profiles[profileName]);\n } catch (error) {\n logger.error(`Failed to check if profile exists: ${profileName}`, { error });\n return false;\n }\n }\n\n /**\n * Get the default profile name\n */\n async getDefaultProfileName(): Promise<string> {\n return 'default';\n }\n\n /**\n * Get credentials file path\n */\n getCredentialsPath(): string {\n return this.credentialsPath;\n }\n\n /**\n * Get OpenPackage directories\n */\n getDirectories(): ReturnType<typeof getOpenPackageDirectories> {\n return this.openPackageDirs;\n }\n}\n\n// Create and export a singleton instance\nexport const profileManager = new ProfileManager();\n\n// Export the class for testing purposes\nexport { ProfileManager };\n", "import { join, extname } from 'path';\nimport { OpenPackageConfig, OpenPackageDirectories } from '../types/index.js';\nimport { readJsonOrJsoncFile, writeJsoncFile, writeJsonFile, exists } from '../utils/fs.js';\nimport { logger } from '../utils/logger.js';\nimport { ConfigError } from '../utils/errors.js';\nimport { getOpenPackageDirectories } from './directory.js';\n\n/**\n * Configuration management for the OpenPackage CLI\n * Supports both JSON and JSONC formats\n */\n\nconst CONFIG_FILE_NAMES = ['config.jsonc', 'config.json'];\nconst DEFAULT_CONFIG_FILE = 'config.jsonc'; // Use JSONC by default for new configs\n\n// Default configuration values\nconst DEFAULT_CONFIG: OpenPackageConfig = {\n defaults: {\n license: 'MIT'\n }\n};\n\nclass ConfigManager {\n private config: OpenPackageConfig | null = null;\n private configPath: string | null = null;\n private openPackageDirs: OpenPackageDirectories;\n\n constructor() {\n this.openPackageDirs = getOpenPackageDirectories();\n }\n\n /**\n * Find the existing config file (supports both .json and .jsonc)\n * Returns the path to the existing config file, or null if none exists\n */\n private async findConfigFile(): Promise<string | null> {\n for (const fileName of CONFIG_FILE_NAMES) {\n const path = join(this.openPackageDirs.config, fileName);\n if (await exists(path)) {\n return path;\n }\n }\n return null;\n }\n\n /**\n * Get the config path to use for saving\n * If a config file already exists, use that format\n * Otherwise, use the default format (JSONC)\n */\n private async getConfigPath(): Promise<string> {\n if (this.configPath) {\n return this.configPath;\n }\n\n // Check if a config file already exists\n const existingPath = await this.findConfigFile();\n if (existingPath) {\n this.configPath = existingPath;\n return existingPath;\n }\n\n // No existing config, use default\n this.configPath = join(this.openPackageDirs.config, DEFAULT_CONFIG_FILE);\n return this.configPath;\n }\n\n /**\n * Load configuration from file, create default if it doesn't exist\n */\n async load(): Promise<OpenPackageConfig> {\n if (this.config) {\n return this.config;\n }\n\n try {\n const configPath = await this.findConfigFile();\n \n if (configPath) {\n logger.debug(`Loading config from: ${configPath}`);\n const fileConfig = await readJsonOrJsoncFile<OpenPackageConfig>(configPath);\n this.configPath = configPath;\n this.config = {\n ...DEFAULT_CONFIG,\n ...fileConfig,\n defaults: {\n ...DEFAULT_CONFIG.defaults,\n ...(fileConfig.defaults ?? {})\n }\n };\n } else {\n logger.debug('Config file not found, using defaults');\n this.config = { ...DEFAULT_CONFIG };\n await this.save(); // Create the config file with defaults\n }\n\n return this.config;\n } catch (error) {\n logger.error('Failed to load configuration', { error });\n throw new ConfigError(`Failed to load configuration: ${error}`);\n }\n }\n\n /**\n * Save current configuration to file\n * Uses JSONC format for new files, preserves existing format\n */\n async save(): Promise<void> {\n if (!this.config) {\n throw new ConfigError('No configuration loaded to save');\n }\n\n try {\n const configPath = await this.getConfigPath();\n const ext = extname(configPath);\n \n logger.debug(`Saving config to: ${configPath}`);\n \n // Write in JSONC format if the extension is .jsonc, otherwise use JSON\n if (ext === '.jsonc') {\n await writeJsoncFile(configPath, this.config);\n } else {\n await writeJsonFile(configPath, this.config);\n }\n } catch (error) {\n logger.error('Failed to save configuration', { error, configPath: this.configPath });\n throw new ConfigError(`Failed to save configuration: ${error}`);\n }\n }\n\n /**\n * Get a configuration value\n */\n async get<K extends keyof OpenPackageConfig>(key: K): Promise<OpenPackageConfig[K]> {\n const config = await this.load();\n return config[key];\n }\n\n /**\n * Set a configuration value\n */\n async set<K extends keyof OpenPackageConfig>(key: K, value: OpenPackageConfig[K]): Promise<void> {\n const config = await this.load();\n config[key] = value;\n this.config = config;\n await this.save();\n logger.info(`Configuration updated: ${key} = ${value}`);\n }\n\n /**\n * Get all configuration values\n */\n async getAll(): Promise<OpenPackageConfig> {\n return await this.load();\n }\n\n /**\n * Reset configuration to defaults\n */\n async reset(): Promise<void> {\n this.config = { ...DEFAULT_CONFIG };\n await this.save();\n logger.info('Configuration reset to defaults');\n }\n\n /**\n * Validate configuration\n */\n async validate(): Promise<boolean> {\n try {\n const config = await this.load();\n \n // Basic validation - config structure is valid\n if (typeof config !== 'object' || config === null) {\n throw new ConfigError('Invalid configuration structure');\n }\n\n return true;\n } catch (error) {\n logger.error('Configuration validation failed', { error });\n return false;\n }\n }\n\n /**\n * Get the configuration file path\n * Returns the path that will be used for the config file\n */\n async getConfigFilePath(): Promise<string> {\n return await this.getConfigPath();\n }\n\n /**\n * Get OpenPackage directories\n */\n getDirectories(): OpenPackageDirectories {\n return this.openPackageDirs;\n }\n\n /**\n * Get telemetry disabled setting\n * Returns undefined if not set in config\n */\n async getTelemetryDisabled(): Promise<boolean | undefined> {\n const config = await this.load();\n return config.telemetry?.disabled;\n }\n\n}\n\n// Create and export a singleton instance\nexport const configManager = new ConfigManager();\n\n// Export the class for testing purposes\nexport { ConfigManager };\n", "import { readFile, writeFile, chmod } from 'fs/promises';\nimport { exists } from './fs.js';\nimport { logger } from './logger.js';\n\n/**\n * Lightweight INI file parser/writer for credentials file\n * Handles sections, key-value pairs, and comments\n */\n\nexport interface IniSection {\n [key: string]: string;\n}\n\nexport interface IniFile {\n [section: string]: IniSection;\n}\n\n/**\n * Parse INI file content into structured object\n */\nexport function parseIni(content: string): IniFile {\n const result: IniFile = {};\n let currentSection = '';\n \n const lines = content.split('\\n');\n \n for (const line of lines) {\n const trimmed = line.trim();\n \n // Skip empty lines and comments\n if (!trimmed || trimmed.startsWith('#')) {\n continue;\n }\n \n // Section header [section]\n if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\n currentSection = trimmed.slice(1, -1);\n if (!result[currentSection]) {\n result[currentSection] = {};\n }\n continue;\n }\n \n // Key-value pair\n const equalIndex = trimmed.indexOf('=');\n if (equalIndex > 0) {\n const key = trimmed.slice(0, equalIndex).trim();\n const value = trimmed.slice(equalIndex + 1).trim();\n \n if (currentSection) {\n result[currentSection][key] = value;\n } else {\n // Handle key-value pairs without section (treat as default section)\n if (!result['default']) {\n result['default'] = {};\n }\n result['default'][key] = value;\n }\n }\n }\n \n return result;\n}\n\n/**\n * Convert structured object back to INI format\n */\nexport function stringifyIni(data: IniFile): string {\n const lines: string[] = [];\n \n for (const [sectionName, section] of Object.entries(data)) {\n if (Object.keys(section).length > 0) {\n lines.push(`[${sectionName}]`);\n \n for (const [key, value] of Object.entries(section)) {\n lines.push(`${key} = ${value}`);\n }\n \n lines.push(''); // Empty line between sections\n }\n }\n \n return lines.join('\\n');\n}\n\n/**\n * Read and parse INI file\n */\nexport async function readIniFile(filePath: string): Promise<IniFile> {\n try {\n if (!(await exists(filePath))) {\n logger.debug(`INI file not found: ${filePath}`);\n return {};\n }\n \n const content = await readFile(filePath, 'utf-8');\n return parseIni(content);\n } catch (error) {\n logger.error(`Failed to read INI file: ${filePath}`, { error });\n throw new Error(`Failed to read INI file: ${error}`);\n }\n}\n\n/**\n * Write INI file with proper permissions\n */\nexport async function writeIniFile(filePath: string, data: IniFile): Promise<void> {\n try {\n const content = stringifyIni(data);\n await writeFile(filePath, content, 'utf-8');\n \n // Set secure permissions (600) for credentials file\n await chmod(filePath, 0o600);\n \n logger.debug(`INI file written: ${filePath}`);\n } catch (error) {\n logger.error(`Failed to write INI file: ${filePath}`, { error });\n throw new Error(`Failed to write INI file: ${error}`);\n }\n}\n\n/**\n * Get a specific value from INI file\n */\nexport function getIniValue(data: IniFile, section: string, key: string): string | undefined {\n return data[section]?.[key];\n}\n\n/**\n * Set a specific value in INI file data\n */\nexport function setIniValue(data: IniFile, section: string, key: string, value: string): void {\n if (!data[section]) {\n data[section] = {};\n }\n data[section][key] = value;\n}\n\n/**\n * Remove a section from INI file data\n */\nexport function removeIniSection(data: IniFile, section: string): void {\n delete data[section];\n}\n\n/**\n * Check if a section exists in INI file data\n */\nexport function hasIniSection(data: IniFile, section: string): boolean {\n return section in data && Object.keys(data[section]).length > 0;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["join", "join"]
7
+ }