opkg 0.6.2 → 0.7.1

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 (509) hide show
  1. package/README.md +73 -170
  2. package/dist/commands/add.js +34 -10
  3. package/dist/commands/add.js.map +1 -1
  4. package/dist/commands/apply.js +16 -0
  5. package/dist/commands/apply.js.map +1 -0
  6. package/dist/commands/delete.js +1 -1
  7. package/dist/commands/delete.js.map +1 -1
  8. package/dist/commands/install.js +165 -4
  9. package/dist/commands/install.js.map +1 -1
  10. package/dist/commands/list.js +2 -2
  11. package/dist/commands/list.js.map +1 -1
  12. package/dist/commands/login.js +1 -1
  13. package/dist/commands/login.js.map +1 -1
  14. package/dist/commands/logout.js +1 -1
  15. package/dist/commands/logout.js.map +1 -1
  16. package/dist/commands/new.js +125 -0
  17. package/dist/commands/new.js.map +1 -0
  18. package/dist/commands/pack.js +7 -13
  19. package/dist/commands/pack.js.map +1 -1
  20. package/dist/commands/pull.js +1 -1
  21. package/dist/commands/pull.js.map +1 -1
  22. package/dist/commands/push.js +1 -1
  23. package/dist/commands/push.js.map +1 -1
  24. package/dist/commands/remove.js +63 -0
  25. package/dist/commands/remove.js.map +1 -0
  26. package/dist/commands/save.js +11 -17
  27. package/dist/commands/save.js.map +1 -1
  28. package/dist/commands/set.js +33 -0
  29. package/dist/commands/set.js.map +1 -0
  30. package/dist/commands/show.js +16 -94
  31. package/dist/commands/show.js.map +1 -1
  32. package/dist/commands/status.js +26 -701
  33. package/dist/commands/status.js.map +1 -1
  34. package/dist/commands/uninstall.js +14 -427
  35. package/dist/commands/uninstall.js.map +1 -1
  36. package/dist/constants/index.js +91 -9
  37. package/dist/constants/index.js.map +1 -1
  38. package/dist/core/add/add-conflict-handler.js +1 -8
  39. package/dist/core/add/add-conflict-handler.js.map +1 -1
  40. package/dist/core/add/add-pipeline.js +12 -10
  41. package/dist/core/add/add-pipeline.js.map +1 -1
  42. package/dist/core/add/add-to-source-pipeline.js +123 -0
  43. package/dist/core/add/add-to-source-pipeline.js.map +1 -0
  44. package/dist/core/add/package-index-updater.js +77 -78
  45. package/dist/core/add/package-index-updater.js.map +1 -1
  46. package/dist/core/add/platform-path-transformer.js +5 -3
  47. package/dist/core/add/platform-path-transformer.js.map +1 -1
  48. package/dist/core/add/source-collector.js +1 -2
  49. package/dist/core/add/source-collector.js.map +1 -1
  50. package/dist/core/apply/apply-pipeline.js +110 -0
  51. package/dist/core/apply/apply-pipeline.js.map +1 -0
  52. package/dist/core/dependency-resolver.js +240 -68
  53. package/dist/core/dependency-resolver.js.map +1 -1
  54. package/dist/core/directory.js +18 -18
  55. package/dist/core/directory.js.map +1 -1
  56. package/dist/core/discovery/file-discovery.js +1 -2
  57. package/dist/core/discovery/file-discovery.js.map +1 -1
  58. package/dist/core/discovery/platform-files-discovery.js +33 -18
  59. package/dist/core/discovery/platform-files-discovery.js.map +1 -1
  60. package/dist/core/flows/flow-executor.js +974 -0
  61. package/dist/core/flows/flow-executor.js.map +1 -0
  62. package/dist/core/flows/flow-inverter.js +442 -0
  63. package/dist/core/flows/flow-inverter.js.map +1 -0
  64. package/dist/core/flows/flow-key-extractor.js +101 -0
  65. package/dist/core/flows/flow-key-extractor.js.map +1 -0
  66. package/dist/core/flows/flow-key-mapper.js +382 -0
  67. package/dist/core/flows/flow-key-mapper.js.map +1 -0
  68. package/dist/core/flows/flow-transforms.js +632 -0
  69. package/dist/core/flows/flow-transforms.js.map +1 -0
  70. package/dist/core/flows/map-pipeline/context.js +73 -0
  71. package/dist/core/flows/map-pipeline/context.js.map +1 -0
  72. package/dist/core/flows/map-pipeline/index.js +156 -0
  73. package/dist/core/flows/map-pipeline/index.js.map +1 -0
  74. package/dist/core/flows/map-pipeline/operations/copy.js +104 -0
  75. package/dist/core/flows/map-pipeline/operations/copy.js.map +1 -0
  76. package/dist/core/flows/map-pipeline/operations/pipe.js +70 -0
  77. package/dist/core/flows/map-pipeline/operations/pipe.js.map +1 -0
  78. package/dist/core/flows/map-pipeline/operations/rename.js +102 -0
  79. package/dist/core/flows/map-pipeline/operations/rename.js.map +1 -0
  80. package/dist/core/flows/map-pipeline/operations/set.js +50 -0
  81. package/dist/core/flows/map-pipeline/operations/set.js.map +1 -0
  82. package/dist/core/flows/map-pipeline/operations/switch.js +79 -0
  83. package/dist/core/flows/map-pipeline/operations/switch.js.map +1 -0
  84. package/dist/core/flows/map-pipeline/operations/transform.js +543 -0
  85. package/dist/core/flows/map-pipeline/operations/transform.js.map +1 -0
  86. package/dist/core/flows/map-pipeline/operations/unset.js +65 -0
  87. package/dist/core/flows/map-pipeline/operations/unset.js.map +1 -0
  88. package/dist/core/flows/map-pipeline/types.js +8 -0
  89. package/dist/core/flows/map-pipeline/types.js.map +1 -0
  90. package/dist/core/flows/map-pipeline/utils.js +278 -0
  91. package/dist/core/flows/map-pipeline/utils.js.map +1 -0
  92. package/dist/core/flows/platform-converter.js +327 -0
  93. package/dist/core/flows/platform-converter.js.map +1 -0
  94. package/dist/core/flows/source-resolver.js +192 -0
  95. package/dist/core/flows/source-resolver.js.map +1 -0
  96. package/dist/core/flows/toml-domain-transforms.js +23 -0
  97. package/dist/core/flows/toml-domain-transforms.js.map +1 -0
  98. package/dist/core/install/bulk-install-pipeline.js +38 -6
  99. package/dist/core/install/bulk-install-pipeline.js.map +1 -1
  100. package/dist/core/install/canonical-plan.js +3 -3
  101. package/dist/core/install/canonical-plan.js.map +1 -1
  102. package/dist/core/install/dry-run.js +3 -3
  103. package/dist/core/install/dry-run.js.map +1 -1
  104. package/dist/core/install/flow-based-installer.js +1176 -0
  105. package/dist/core/install/flow-based-installer.js.map +1 -0
  106. package/dist/core/install/flow-workspace-tracker.js +111 -0
  107. package/dist/core/install/flow-workspace-tracker.js.map +1 -0
  108. package/dist/core/install/format-detector.js +228 -0
  109. package/dist/core/install/format-detector.js.map +1 -0
  110. package/dist/core/install/git-package-loader.js +38 -0
  111. package/dist/core/install/git-package-loader.js.map +1 -0
  112. package/dist/core/install/install-errors.js +1 -1
  113. package/dist/core/install/install-errors.js.map +1 -1
  114. package/dist/core/install/install-flow.js +34 -14
  115. package/dist/core/install/install-flow.js.map +1 -1
  116. package/dist/core/install/install-pipeline.js +52 -17
  117. package/dist/core/install/install-pipeline.js.map +1 -1
  118. package/dist/core/install/install-reporting.js +24 -7
  119. package/dist/core/install/install-reporting.js.map +1 -1
  120. package/dist/core/install/local-source-resolution.js +103 -0
  121. package/dist/core/install/local-source-resolution.js.map +1 -0
  122. package/dist/core/install/marketplace-handler.js +262 -0
  123. package/dist/core/install/marketplace-handler.js.map +1 -0
  124. package/dist/core/install/path-install-pipeline.js +46 -28
  125. package/dist/core/install/path-install-pipeline.js.map +1 -1
  126. package/dist/core/install/path-package-loader.js +37 -16
  127. package/dist/core/install/path-package-loader.js.map +1 -1
  128. package/dist/core/install/plugin-detector.js +70 -0
  129. package/dist/core/install/plugin-detector.js.map +1 -0
  130. package/dist/core/install/plugin-to-universal-converter.js +218 -0
  131. package/dist/core/install/plugin-to-universal-converter.js.map +1 -0
  132. package/dist/core/install/plugin-transformer.js +201 -0
  133. package/dist/core/install/plugin-transformer.js.map +1 -0
  134. package/dist/core/install/version-selection.js +1 -1
  135. package/dist/core/install/version-selection.js.map +1 -1
  136. package/dist/core/openpackage.js +40 -22
  137. package/dist/core/openpackage.js.map +1 -1
  138. package/dist/core/pack/pack-output.js +62 -0
  139. package/dist/core/pack/pack-output.js.map +1 -0
  140. package/dist/core/pack/pack-pipeline.js +186 -0
  141. package/dist/core/pack/pack-pipeline.js.map +1 -0
  142. package/dist/core/package-context.js +45 -70
  143. package/dist/core/package-context.js.map +1 -1
  144. package/dist/core/package-creation.js +203 -0
  145. package/dist/core/package-creation.js.map +1 -0
  146. package/dist/core/package.js +20 -6
  147. package/dist/core/package.js.map +1 -1
  148. package/dist/core/platforms.js +400 -157
  149. package/dist/core/platforms.js.map +1 -1
  150. package/dist/core/push/push-context.js +1 -1
  151. package/dist/core/push/push-context.js.map +1 -1
  152. package/dist/core/push/push-upload.js +2 -2
  153. package/dist/core/push/push-upload.js.map +1 -1
  154. package/dist/core/registry.js +6 -6
  155. package/dist/core/registry.js.map +1 -1
  156. package/dist/core/remote-pull.js +2 -2
  157. package/dist/core/remote-pull.js.map +1 -1
  158. package/dist/core/remove/removal-collector.js +52 -0
  159. package/dist/core/remove/removal-collector.js.map +1 -0
  160. package/dist/core/remove/removal-confirmation.js +39 -0
  161. package/dist/core/remove/removal-confirmation.js.map +1 -0
  162. package/dist/core/remove/remove-from-source-pipeline.js +173 -0
  163. package/dist/core/remove/remove-from-source-pipeline.js.map +1 -0
  164. package/dist/core/save/constants.js +3 -3
  165. package/dist/core/save/constants.js.map +1 -1
  166. package/dist/core/save/flow-based-saver.js +270 -0
  167. package/dist/core/save/flow-based-saver.js.map +1 -0
  168. package/dist/core/save/name-resolution.js +1 -1
  169. package/dist/core/save/name-resolution.js.map +1 -1
  170. package/dist/core/save/package-yml-generator.js +4 -5
  171. package/dist/core/save/package-yml-generator.js.map +1 -1
  172. package/dist/core/save/save-candidate-builder.js +215 -0
  173. package/dist/core/save/save-candidate-builder.js.map +1 -0
  174. package/dist/core/save/save-candidate-loader.js +6 -6
  175. package/dist/core/save/save-candidate-loader.js.map +1 -1
  176. package/dist/core/save/save-conflict-analyzer.js +150 -0
  177. package/dist/core/save/save-conflict-analyzer.js.map +1 -0
  178. package/dist/core/save/save-conflict-resolution.js +28 -14
  179. package/dist/core/save/save-conflict-resolution.js.map +1 -1
  180. package/dist/core/save/save-conflict-resolver.js +31 -275
  181. package/dist/core/save/save-conflict-resolver.js.map +1 -1
  182. package/dist/core/save/save-group-builder.js +52 -0
  183. package/dist/core/save/save-group-builder.js.map +1 -0
  184. package/dist/core/save/save-interactive-resolver.js +190 -0
  185. package/dist/core/save/save-interactive-resolver.js.map +1 -0
  186. package/dist/core/save/save-pipeline.js +44 -33
  187. package/dist/core/save/save-pipeline.js.map +1 -1
  188. package/dist/core/save/save-platform-handler.js +53 -0
  189. package/dist/core/save/save-platform-handler.js.map +1 -0
  190. package/dist/core/save/save-resolution-executor.js +145 -0
  191. package/dist/core/save/save-resolution-executor.js.map +1 -0
  192. package/dist/core/save/save-result-reporter.js +167 -0
  193. package/dist/core/save/save-result-reporter.js.map +1 -0
  194. package/dist/core/save/save-to-source-pipeline.js +154 -0
  195. package/dist/core/save/save-to-source-pipeline.js.map +1 -0
  196. package/dist/core/save/save-versioning.js +4 -4
  197. package/dist/core/save/save-versioning.js.map +1 -1
  198. package/dist/core/save/save-write-coordinator.js +204 -0
  199. package/dist/core/save/save-write-coordinator.js.map +1 -0
  200. package/dist/core/save/save-yml-resolution.js +28 -216
  201. package/dist/core/save/save-yml-resolution.js.map +1 -1
  202. package/dist/core/save/workspace-rename.js +7 -8
  203. package/dist/core/save/workspace-rename.js.map +1 -1
  204. package/dist/core/set/set-output.js +72 -0
  205. package/dist/core/set/set-output.js.map +1 -0
  206. package/dist/core/set/set-pipeline.js +361 -0
  207. package/dist/core/set/set-pipeline.js.map +1 -0
  208. package/dist/core/set/set-types.js +5 -0
  209. package/dist/core/set/set-types.js.map +1 -0
  210. package/dist/core/show/package-resolver.js +257 -0
  211. package/dist/core/show/package-resolver.js.map +1 -0
  212. package/dist/core/show/scope-discovery.js +165 -0
  213. package/dist/core/show/scope-discovery.js.map +1 -0
  214. package/dist/core/show/show-output.js +168 -0
  215. package/dist/core/show/show-output.js.map +1 -0
  216. package/dist/core/show/show-pipeline.js +113 -0
  217. package/dist/core/show/show-pipeline.js.map +1 -0
  218. package/dist/core/show/show-types.js +5 -0
  219. package/dist/core/show/show-types.js.map +1 -0
  220. package/dist/core/source-resolution/dependency-graph.js +104 -0
  221. package/dist/core/source-resolution/dependency-graph.js.map +1 -0
  222. package/dist/core/source-resolution/resolve-mutable-source.js +109 -0
  223. package/dist/core/source-resolution/resolve-mutable-source.js.map +1 -0
  224. package/dist/core/source-resolution/resolve-package-source.js +29 -0
  225. package/dist/core/source-resolution/resolve-package-source.js.map +1 -0
  226. package/dist/core/source-resolution/resolve-registry-version.js +35 -0
  227. package/dist/core/source-resolution/resolve-registry-version.js.map +1 -0
  228. package/dist/core/source-resolution/types.js.map +1 -0
  229. package/dist/core/status/status-file-discovery.js +23 -12
  230. package/dist/core/status/status-file-discovery.js.map +1 -1
  231. package/dist/core/status/status-pipeline.js +134 -0
  232. package/dist/core/status/status-pipeline.js.map +1 -0
  233. package/dist/core/sync/platform-sync-summary.js +27 -0
  234. package/dist/core/sync/platform-sync-summary.js.map +1 -0
  235. package/dist/core/uninstall/flow-aware-uninstaller.js +189 -0
  236. package/dist/core/uninstall/flow-aware-uninstaller.js.map +1 -0
  237. package/dist/core/uninstall/uninstall-file-discovery.js +11 -6
  238. package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
  239. package/dist/core/uninstall/uninstall-pipeline.js +141 -0
  240. package/dist/core/uninstall/uninstall-pipeline.js.map +1 -0
  241. package/dist/core/universal-patterns.js +64 -0
  242. package/dist/core/universal-patterns.js.map +1 -0
  243. package/dist/index.js +75 -7
  244. package/dist/index.js.map +1 -1
  245. package/dist/types/flows.js +8 -0
  246. package/dist/types/flows.js.map +1 -0
  247. package/dist/types/index.js +3 -0
  248. package/dist/types/index.js.map +1 -1
  249. package/dist/types/platform-flows.js +8 -0
  250. package/dist/types/platform-flows.js.map +1 -0
  251. package/dist/types/workspace-index.js +6 -0
  252. package/dist/types/workspace-index.js.map +1 -0
  253. package/dist/utils/custom-path-resolution.js +160 -0
  254. package/dist/utils/custom-path-resolution.js.map +1 -0
  255. package/dist/utils/dependency-coverage.js +1 -1
  256. package/dist/utils/dependency-coverage.js.map +1 -1
  257. package/dist/utils/file-processing.js +1 -1
  258. package/dist/utils/flow-index-installer.js +209 -0
  259. package/dist/utils/flow-index-installer.js.map +1 -0
  260. package/dist/utils/formatters.js +47 -1
  261. package/dist/utils/formatters.js.map +1 -1
  262. package/dist/utils/fs.js +17 -0
  263. package/dist/utils/fs.js.map +1 -1
  264. package/dist/utils/git-cache.js +196 -0
  265. package/dist/utils/git-cache.js.map +1 -0
  266. package/dist/utils/git-clone-registry.js +88 -0
  267. package/dist/utils/git-clone-registry.js.map +1 -0
  268. package/dist/utils/git-clone.js +149 -0
  269. package/dist/utils/git-clone.js.map +1 -0
  270. package/dist/utils/git-spec.js +96 -0
  271. package/dist/utils/git-spec.js.map +1 -0
  272. package/dist/utils/git-url-parser.js +113 -0
  273. package/dist/utils/git-url-parser.js.map +1 -0
  274. package/dist/utils/http-client.js +7 -0
  275. package/dist/utils/http-client.js.map +1 -1
  276. package/dist/utils/index-based-installer.js +346 -154
  277. package/dist/utils/index-based-installer.js.map +1 -1
  278. package/dist/utils/install-conflict-handler.js +2 -2
  279. package/dist/utils/install-conflict-handler.js.map +1 -1
  280. package/dist/utils/install-file-discovery.js +18 -13
  281. package/dist/utils/install-file-discovery.js.map +1 -1
  282. package/dist/utils/install-helpers.js +43 -22
  283. package/dist/utils/install-helpers.js.map +1 -1
  284. package/dist/utils/manifest-paths.js +1 -1
  285. package/dist/utils/manifest-paths.js.map +1 -1
  286. package/dist/utils/markdown-frontmatter.js +46 -0
  287. package/dist/utils/markdown-frontmatter.js.map +1 -1
  288. package/dist/utils/package-copy.js +5 -103
  289. package/dist/utils/package-copy.js.map +1 -1
  290. package/dist/utils/package-filters.js +9 -105
  291. package/dist/utils/package-filters.js.map +1 -1
  292. package/dist/utils/package-index-yml.js +27 -6
  293. package/dist/utils/package-index-yml.js.map +1 -1
  294. package/dist/utils/package-input.js +48 -4
  295. package/dist/utils/package-input.js.map +1 -1
  296. package/dist/utils/package-management.js +60 -29
  297. package/dist/utils/package-management.js.map +1 -1
  298. package/dist/utils/package-name-resolution.js +327 -0
  299. package/dist/utils/package-name-resolution.js.map +1 -0
  300. package/dist/utils/package-name.js +68 -28
  301. package/dist/utils/package-name.js.map +1 -1
  302. package/dist/utils/package-versioning.js +2 -33
  303. package/dist/utils/package-versioning.js.map +1 -1
  304. package/dist/utils/package-yml.js +19 -28
  305. package/dist/utils/package-yml.js.map +1 -1
  306. package/dist/utils/path-resolution.js +102 -0
  307. package/dist/utils/path-resolution.js.map +1 -0
  308. package/dist/utils/paths.js +6 -6
  309. package/dist/utils/paths.js.map +1 -1
  310. package/dist/utils/platform-file.js +34 -24
  311. package/dist/utils/platform-file.js.map +1 -1
  312. package/dist/utils/platform-mapper.js +214 -44
  313. package/dist/utils/platform-mapper.js.map +1 -1
  314. package/dist/utils/platform-root-files.js +44 -0
  315. package/dist/utils/platform-root-files.js.map +1 -0
  316. package/dist/utils/platform-utils.js +13 -6
  317. package/dist/utils/platform-utils.js.map +1 -1
  318. package/dist/utils/platform-yaml-merge.js +20 -141
  319. package/dist/utils/platform-yaml-merge.js.map +1 -1
  320. package/dist/utils/plugin-naming.js +111 -0
  321. package/dist/utils/plugin-naming.js.map +1 -0
  322. package/dist/utils/prompts.js +90 -5
  323. package/dist/utils/prompts.js.map +1 -1
  324. package/dist/utils/registry-entry-filter.js +48 -25
  325. package/dist/utils/registry-entry-filter.js.map +1 -1
  326. package/dist/utils/scope-resolution.js +156 -0
  327. package/dist/utils/scope-resolution.js.map +1 -0
  328. package/dist/utils/source-mutability.js +15 -0
  329. package/dist/utils/source-mutability.js.map +1 -0
  330. package/dist/utils/tarball.js +31 -6
  331. package/dist/utils/tarball.js.map +1 -1
  332. package/dist/utils/version-ranges.js +1 -32
  333. package/dist/utils/version-ranges.js.map +1 -1
  334. package/dist/utils/workspace-index-helpers.js +28 -0
  335. package/dist/utils/workspace-index-helpers.js.map +1 -0
  336. package/dist/utils/workspace-index-ownership.js +100 -0
  337. package/dist/utils/workspace-index-ownership.js.map +1 -0
  338. package/dist/utils/workspace-index-yml.js +173 -0
  339. package/dist/utils/workspace-index-yml.js.map +1 -0
  340. package/examples/custom-subdirs-platform.jsonc +111 -44
  341. package/package.json +7 -2
  342. package/platforms.jsonc +490 -82
  343. package/schemas/map-pipeline-v1.json +256 -0
  344. package/schemas/platforms-v1.json +400 -0
  345. package/specs/README.md +88 -0
  346. package/specs/add/README.md +166 -0
  347. package/specs/agents-claude.md +570 -0
  348. package/specs/agents-opencode.md +622 -0
  349. package/specs/apply/README.md +21 -0
  350. package/specs/apply/apply-behavior.md +58 -0
  351. package/specs/apply/apply-command.md +51 -0
  352. package/specs/apply/conflicts.md +41 -0
  353. package/specs/apply/index-effects.md +81 -0
  354. package/specs/architecture.md +107 -0
  355. package/specs/auth/README.md +17 -0
  356. package/specs/auth/auth-http-contract.md +25 -0
  357. package/specs/auth/cli/credentials.md +39 -0
  358. package/specs/auth/cli/login.md +32 -0
  359. package/specs/auth/cli/logout.md +16 -0
  360. package/specs/claude-mcp.md +1065 -0
  361. package/specs/claude-plugins-marketplace.md +363 -0
  362. package/specs/claude-plugins.md +413 -0
  363. package/specs/cli-options.md +13 -3
  364. package/specs/codex-mcp.md +114 -0
  365. package/specs/commands-overview.md +175 -0
  366. package/specs/directory-layout.md +95 -0
  367. package/specs/install/README.md +12 -4
  368. package/specs/install/git-cache.md +403 -0
  369. package/specs/install/git-sources.md +318 -0
  370. package/specs/install/install-behavior.md +478 -76
  371. package/specs/install/package-yml-canonical.md +67 -35
  372. package/specs/install/version-resolution.md +69 -115
  373. package/specs/new/README.md +771 -0
  374. package/specs/new/SUMMARY.md +310 -0
  375. package/specs/new/scope-behavior.md +793 -0
  376. package/specs/pack/README.md +77 -0
  377. package/specs/pack/package-name-resolution.md +330 -0
  378. package/specs/package/README.md +16 -12
  379. package/specs/package/nested-packages-and-parent-packages.md +32 -31
  380. package/specs/package/package-index-yml.md +95 -101
  381. package/specs/package/package-root-layout.md +64 -46
  382. package/specs/package/registry-payload-and-copy.md +50 -44
  383. package/specs/package/universal-content.md +33 -49
  384. package/specs/package-sources.md +248 -0
  385. package/specs/platforms/README.md +52 -0
  386. package/specs/platforms/configuration.md +571 -0
  387. package/specs/platforms/detection.md +552 -0
  388. package/specs/platforms/directory-layout.md +599 -0
  389. package/specs/platforms/examples.md +1146 -0
  390. package/specs/platforms/flow-reference.md +1240 -0
  391. package/specs/platforms/flows.md +1488 -0
  392. package/specs/platforms/map-pipeline.md +801 -0
  393. package/specs/platforms/overview.md +349 -0
  394. package/specs/platforms/specification.md +700 -0
  395. package/specs/platforms/troubleshooting.md +697 -0
  396. package/specs/platforms/universal-converter.md +520 -0
  397. package/specs/push/push-behavior.md +4 -4
  398. package/specs/push/push-remote-upload.md +1 -1
  399. package/specs/push/push-scoping.md +1 -1
  400. package/specs/push/push-version-selection.md +1 -1
  401. package/specs/registry.md +111 -0
  402. package/specs/remove/README.md +257 -0
  403. package/specs/save/README.md +19 -17
  404. package/specs/save/save-conflict-resolution.md +205 -83
  405. package/specs/save/save-file-discovery.md +6 -4
  406. package/specs/save/save-frontmatter-overrides.md +11 -15
  407. package/specs/save/save-modes-inputs.md +8 -38
  408. package/specs/save/save-naming-scoping.md +4 -4
  409. package/specs/save/save-package-detection.md +12 -12
  410. package/specs/save/save-registry-sync.md +16 -106
  411. package/specs/save/save-versioning.md +80 -0
  412. package/specs/scope-management.md +92 -0
  413. package/specs/set/README.md +523 -0
  414. package/specs/set/set-behavior.md +563 -0
  415. package/specs/show/README.md +483 -0
  416. package/specs/show/show-remote.md +494 -0
  417. package/specs/status/README.md +38 -0
  418. package/specs/uninstall/README.md +231 -0
  419. package/dist/commands/duplicate.js +0 -69
  420. package/dist/commands/duplicate.js.map +0 -1
  421. package/dist/commands/init.js +0 -117
  422. package/dist/commands/init.js.map +0 -1
  423. package/dist/commands/prune.js +0 -357
  424. package/dist/commands/prune.js.map +0 -1
  425. package/dist/commands/tui.js +0 -61
  426. package/dist/commands/tui.js.map +0 -1
  427. package/dist/core/install/index.js +0 -3
  428. package/dist/core/install/index.js.map +0 -1
  429. package/dist/core/install/local-source-handler.js +0 -76
  430. package/dist/core/install/local-source-handler.js.map +0 -1
  431. package/dist/core/push/push-single-file.js +0 -56
  432. package/dist/core/push/push-single-file.js.map +0 -1
  433. package/dist/core/save/package-detection.js +0 -147
  434. package/dist/core/save/package-detection.js.map +0 -1
  435. package/dist/core/save/save-single-file.js +0 -124
  436. package/dist/core/save/save-single-file.js.map +0 -1
  437. package/dist/core/token-store.js +0 -73
  438. package/dist/core/token-store.js.map +0 -1
  439. package/dist/mcp/access/context.js +0 -20
  440. package/dist/mcp/access/context.js.map +0 -1
  441. package/dist/mcp/access/index.js +0 -57
  442. package/dist/mcp/access/index.js.map +0 -1
  443. package/dist/mcp/server.js +0 -20
  444. package/dist/mcp/server.js.map +0 -1
  445. package/dist/tui/app.js +0 -105
  446. package/dist/tui/app.js.map +0 -1
  447. package/dist/tui/components/package-list.js +0 -73
  448. package/dist/tui/components/package-list.js.map +0 -1
  449. package/dist/tui/controller.js +0 -708
  450. package/dist/tui/controller.js.map +0 -1
  451. package/dist/tui/index.js +0 -12
  452. package/dist/tui/index.js.map +0 -1
  453. package/dist/tui/services/file-index.js +0 -64
  454. package/dist/tui/services/file-index.js.map +0 -1
  455. package/dist/tui/services/local-mgmt.js +0 -68
  456. package/dist/tui/services/local-mgmt.js.map +0 -1
  457. package/dist/tui/services/packages.js +0 -18
  458. package/dist/tui/services/packages.js.map +0 -1
  459. package/dist/tui/services/save.js +0 -21
  460. package/dist/tui/services/save.js.map +0 -1
  461. package/dist/tui/services/status.js +0 -18
  462. package/dist/tui/services/status.js.map +0 -1
  463. package/dist/tui/state/app-state.js +0 -21
  464. package/dist/tui/state/app-state.js.map +0 -1
  465. package/dist/tui/state.js +0 -17
  466. package/dist/tui/state.js.map +0 -1
  467. package/dist/tui/types.js.map +0 -1
  468. package/dist/tui/views/add-file-modal.js +0 -129
  469. package/dist/tui/views/add-file-modal.js.map +0 -1
  470. package/dist/tui/views/dashboard.js +0 -106
  471. package/dist/tui/views/dashboard.js.map +0 -1
  472. package/dist/tui/views/file-preview.js +0 -44
  473. package/dist/tui/views/file-preview.js.map +0 -1
  474. package/dist/tui/views/list-packages.js +0 -73
  475. package/dist/tui/views/list-packages.js.map +0 -1
  476. package/dist/tui/views/main-menu.js +0 -33
  477. package/dist/tui/views/main-menu.js.map +0 -1
  478. package/dist/tui/views/manage-view.js +0 -81
  479. package/dist/tui/views/manage-view.js.map +0 -1
  480. package/dist/tui/views/package-detail.js +0 -254
  481. package/dist/tui/views/package-detail.js.map +0 -1
  482. package/dist/tui/views/package-hub.js +0 -120
  483. package/dist/tui/views/package-hub.js.map +0 -1
  484. package/dist/tui/views/placeholder.js +0 -24
  485. package/dist/tui/views/placeholder.js.map +0 -1
  486. package/dist/utils/bun-bootstrap.js +0 -72
  487. package/dist/utils/bun-bootstrap.js.map +0 -1
  488. package/dist/utils/command-helpers.js +0 -24
  489. package/dist/utils/command-helpers.js.map +0 -1
  490. package/dist/utils/cwd-resolver.js +0 -45
  491. package/dist/utils/cwd-resolver.js.map +0 -1
  492. package/dist/utils/entity-id.js +0 -19
  493. package/dist/utils/entity-id.js.map +0 -1
  494. package/dist/utils/package-local-files.js +0 -5
  495. package/dist/utils/package-local-files.js.map +0 -1
  496. package/dist/utils/path-matching.js +0 -74
  497. package/dist/utils/path-matching.js.map +0 -1
  498. package/dist/utils/root-file-operations.js +0 -39
  499. package/dist/utils/root-file-operations.js.map +0 -1
  500. package/dist/utils/root-file-transformer.js +0 -27
  501. package/dist/utils/root-file-transformer.js.map +0 -1
  502. package/dist/utils/yaml-frontmatter.js +0 -25
  503. package/dist/utils/yaml-frontmatter.js.map +0 -1
  504. package/specs/auth/auth-device-flow.md +0 -70
  505. package/specs/login/login-device-flow.md +0 -70
  506. package/specs/platforms.md +0 -214
  507. package/specs/save-pack-versioning.md +0 -224
  508. package/specs/save-pack.md +0 -68
  509. /package/dist/{tui → core/source-resolution}/types.js +0 -0
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  </a>
10
10
  </p>
11
11
 
12
- <p align="center">Organized agentic coding for teams.</p>
12
+ <p align="center">Universal plugins for coding agents.</p>
13
13
  <p align="center">
14
14
  <a href="https://www.npmjs.com/package/opkg " target="blank">
15
15
  <img src="https://img.shields.io/npm/v/opkg?style=flat-square" alt="Npm package for OpenPackage">
@@ -29,26 +29,35 @@
29
29
 
30
30
  # OpenPackage
31
31
 
32
- **OpenPackage is the centralized hub for organizing your specs and configs for agentic coding, giving you consistent context and workflows between sessions, projects, and teams.**
32
+ OpenPackage turns your AI coding setups into reusable modules that anyone can instantly install to any platform, any codebase, ensuring consistent workflows across projects and teams.
33
33
 
34
34
  ## Why OpenPackage?
35
35
 
36
36
  Modern AI coding tools are powerful, but lack organization, reusability, and efficiency.
37
- - Specs across individuals and codebases, diverging, unversioned, and incohesive.
38
- - Rules, commands, and subagents scattered across multiple projects.
37
+ - Rules, commands, subagents, and skills scattered across multiple projects.
39
38
  - Familiar workflows rebuilt for each project, incompatible between AI coding platforms.
39
+ - Specs across individuals and codebases, diverging, unversioned, and incohesive.
40
40
 
41
- OpenPackage organizes your specs and AI coding configs into reusable packages that can be accessed by any session, any project, and any coding platform.
41
+ OpenPackage takes care of cross-platform conversions, config composition, and portability, freeing you to build more, faster.
42
42
 
43
- ## How it works
43
+ - Install & sync pre-built workflows to speed up coding. No more reinventing the wheel.
44
+ - Reuse rules, slash commands, and skills across multiple codebases and platforms.
45
+ - Share and compose packages together to create powerful workflows that continuously evolve.
44
46
 
45
- At it's core, OpenPackage is a lightweight CLI tool for creating versioned, AI coding platform agnostic packages, each contaning sets of specs and coding config files for simplified installs, uninstalls, and distribution.
47
+ ## Use cases
46
48
 
47
- **No API keys required. No MCP installation.**
49
+ - Install Claude Code Plugins to any coding platform
50
+ - Sync specs, rules, commands, agents, skills, and MCPs across platforms
51
+ - Reuse files and configs across multiple codebases
52
+ - Modular management of configs and specs
53
+
54
+ ## How it works
55
+
56
+ At its core, OpenPackage is a lightweight CLI tool for creating versioned, AI coding platform agnostic packages, each contaning sets of coding config files and specs for simplified installs, uninstalls, and distribution. It's basically Claude Code Plugins, but universal, more powerful, and open source.
48
57
 
49
58
  1. Declare a package
50
- 2. Add specs and AI coding config files
51
- 3. Sync to multiple codebases
59
+ 2. Add rules, commands, subagents, skills, mcp configs, specs, docs etc.
60
+ 3. Install and sync to multiple codebases
52
61
 
53
62
  ## Quick start
54
63
 
@@ -59,193 +68,87 @@ npm
59
68
  npm install -g opkg
60
69
  ```
61
70
 
62
- ### Create a package
63
-
64
- ```bash title="Terminal"
65
- opkg init # Initialize the workspace as a package, or
66
- opkg init <package> # Initialize a package under cwd `.openpackage/packages`
67
- ```
68
-
69
- > [!NOTE]
70
- > You can also use command `openpackage` instead of `opkg`
71
-
72
- ### Add/update/remove package files
73
-
74
- Directly update the files (at cwd or in `.openpackage/packages/`) and perform `opkg save`.
75
- You can also use the add command to add workspace files to a package.
76
-
77
- ```bash title="Terminal"
78
- opkg add <package> <path-to-dir-or-file>
79
- ```
80
-
81
- > [!TIP]
82
- > Learn how to compose packages by reading the [packages doc](https://openpackage.dev/docs/packages) from our official docs.
83
-
84
- Use `save` or `pack` to save the set of dirs and files as a package to your local registry for reuse and distribution.
85
-
86
- ```bash title="Terminal"
87
- opkg save [package] # Prerelease/unversioned
88
- opkg pack [package] # Stable releases
89
- ```
90
-
91
- > [!TIP]
92
- > Packages are saved to your local machine at `~/.openpackage/registry/`.
93
-
94
- ### List local packages
95
- ```bash title="Terminal"
96
- opkg list
97
- ```
98
- Shows all packages currently saved to the local registry.
99
-
100
- ### Show local package details
101
- ```bash title="Terminal"
102
- opkg show <package>
103
- ```
104
- Outputs the details of the package and lists all included files.
105
-
106
71
  ### Install packages
107
72
  ```bash title="Terminal"
108
73
  opkg install <package>
109
74
  ```
110
- Adds all files under the specified package to the codebase at cwd.
75
+ Installs all files from a package into the codebase at cwd, formatted and converted to per platform conventions and into their respective dirs.
111
76
 
112
- ### Uninstall packages
77
+ The install command supports various package sources:
113
78
  ```bash title="Terminal"
114
- opkg uninstall <package>
79
+ opkg install essentials # Local/remote registry
80
+ opkg install ../packages/essentials/ # Local path
81
+ opkg install git:https://github.com/enulus/awesome-openpackage.git # GitHub package repo
82
+ opkg install github:anthropics/claude-code # GitHub Claude Code Plugins marketplace
83
+ opkg install github:anthropics/claude-code#subdirectory=plugins/commit-commands # GitHub Claude Code Plugin
115
84
  ```
116
- Removes all files for the specified package from the codebase at cwd.
117
85
 
118
- ### Upload packages (push)
119
- ```bash title="Terminal"
120
- opkg push <package>
121
- ```
122
-
123
- ### Download packages (pull)
124
- ```bash title="Terminal"
125
- opkg pull <package>
126
- ```
127
-
128
- ### Authenticate CLI
86
+ ### Uninstall packages
129
87
  ```bash title="Terminal"
130
- opkg login
88
+ opkg uninstall <package>
131
89
  ```
90
+ Removes all files for a package from the codebase at cwd.
132
91
 
133
92
  > [!TIP]
134
- > Create an account at [openpackage.dev](https://openpackage.dev) to manage packages remotely.
135
-
136
- ## Use Cases
137
-
138
- ### Reuse files across multiple codebases
139
- Reuse rules, slash commands, and more across multiple codebases.
140
-
141
- #### Single file
142
- ```bash title="Terminal"
143
- # In current codebase
144
- opkg save f specs/nextjs.md
145
- # In another codebase
146
- opkg install f/specs/nextjs.md
147
- ```
148
-
149
- #### Multiple files via package
150
- ```bash title="Terminal"
151
- # In current codebase
152
- opkg save essentials
153
- # In another codebase
154
- opkg install essentials
155
- ```
156
-
157
- ### Sync files across multiple platforms
158
- Automatically sync your rules, slash commands, and more across multiple platform.
159
- ```bash title="Terminal"
160
- # Current codebase has .cursor, .claude, .opencode directories
161
- opkg save essentials .cursor/commands/essentials
162
- # OpenPackage CLI automatically generates/syncs the same command files across all platforms.
163
-
164
- # Before save:
165
- # .cursor/commands/essentials/cleanup.md
93
+ > Learn more by heading over to the [official docs](https://openpackage.dev/docs).
166
94
 
167
- # After save:
168
- # .cursor/commands/essentials/cleanup.md
169
- # .claude/commands/essentials/cleanup.md
170
- # .opencode/command/essentials/cleanup.md
171
- ```
95
+ ### Compose a package
172
96
 
173
- ### Modular management of files
174
- Create domain specific packages for modular reuse.
175
97
  ```bash title="Terminal"
176
- # Create typescript package
177
- opkg save typescript .cursor/rules/typescript
178
-
179
- # Create scalable-nextjs package
180
- opkg save scalable-nextjs .cursor/rules/nextjs
181
-
182
- # Create scalable-nestjs package
183
- opkg save scalable-nestjs .cursor/rules/nestjs
184
-
185
- # Create mongodb package
186
- opkg save mongodb .cursor/rules/mongodb
187
-
188
- # In your NextJS codebase
189
- opkg install typescript
190
- opkg install scalable-nextjs
191
-
192
- # In your NestJS codebase
193
- opkg install typescript
194
- opkg install scalable-nestjs
195
- opkg install mongodb
196
- ```
197
-
198
- > [!TIP]
199
- > Learn more by heading over to the [official docs](https://openpackage.dev/docs).
200
-
201
- ## Package Structure
98
+ opkg new <package>
99
+ ```
202
100
 
203
- Packages are composed using the following directory structure:
101
+ Then manually add/update/remove files to and from the package following this structure:
204
102
 
205
103
  ```txt title="Structure"
206
104
  <package>
207
- ├── .openpackage/
208
- ├── package.yml # The OpenPackage manifest, required
209
- ├── rules/
210
- │ │ └── # Rule files
211
- ├── commands/
212
- │ └── # Command files (slash commands)
213
- ├── agents/
214
- │ │ └── # Agent files (subagents)
215
- │ └── skills/
216
- │ └── # Skill files (Claude Code skills)
217
- ├── <dirs-or-files>
218
- │ └── # Any other root dirs or files (Ex: specs/, docs/, tests/, etc.)
219
- ├── README.md # Metadata files (LICENSE.md, CONTRIBUTING.md, etc.)
220
- └── AGENTS.md # Platform root file
105
+
106
+ │ # Package files
107
+ ├── openpackage.yml # The OpenPackage manifest, required
108
+ ├── README.md # LICENSE.md, CONTRIBUTING.md, etc.
109
+
110
+ │ # Content files
111
+ ├── rules/ # Rule files
112
+ ├── commands/ # Command files (slash commands)
113
+ ├── agents/ # Agent files (subagents)
114
+ ├── skills/ # Skill files (skills)
115
+ ├── root/ # Any other root dirs or files (Ex: specs/, docs/, tests/, etc.)
116
+ ├── AGENTS.md # Platform root file
117
+ ├── mcp.jsonc # MCP config file
118
+
119
+ │ # Custom files
120
+ └── <other> # Customizable via `platforms.jsonc` overrides/extensions
221
121
  ```
222
122
 
223
- There are two ways to compose packages:
224
- - In a project workspace: `opkg init <package>` will create a package in `.openpackage/packages/<packages>/`
225
- - In a dedicated package codebase: `opkg init` will create a package at cwd (similar to npm, pypi, etc.)
123
+ You can also use the `add` and `remove` commands to add/remove files to/from a package.
124
+
125
+ ```bash title="Terminal"
126
+ opkg add <package> .cursor/commands/clean.md # Adds workspace file or dir to package
127
+ opkg remove <package> commands/clean.md # Removes file or dir from package
128
+ ```
226
129
 
227
130
  > [!TIP]
228
- > Learn more about packages from the [packages doc](https://openpackage.dev/docs/packages) from our official docs.
131
+ > Learn more about packages from the [packages doc](https://openpackage.dev/docs/packages) on our official docs.
229
132
 
230
133
  ## Supported Platforms
231
134
 
232
135
  OpenPackage performs installation and platform sync of files for supported AI coding platforms outlined by the table below.
233
136
 
234
- | Platform | Directory | Root file | Rules | Commands | Agents | Skills |
235
- | --- | --- | --- | --- | --- | --- | --- |
236
- | Antigravity | .agent/ | | rules/ | workflows/ | | |
237
- | Augment Code | .augment/ | | rules/ | commands/ | | |
238
- | Claude Code | .claude/ | CLAUDE.md | rules/ | commands/ | agents/ | skills/ |
239
- | Codex | .codex/ | AGENTS.md | | prompts/ | | |
240
- | Cursor | .cursor/ | AGENTS.md | rules/ | commands/ | | |
241
- | Factory | .factory/ | AGENTS.md | | commands/ | droids/ | |
242
- | Kilo Code | .kilocode/ | AGENTS.md | rules/ | workflows/ | | |
243
- | Kiro | .kiro/ | | steering/ | | | |
244
- | OpenCode | .opencode/ | AGENTS.md | | command/ | agent/ | |
245
- | Qwen Code | .qwen/ | QWEN.md | | | agents/ | |
246
- | Roo | .roo/ | AGENTS.md | | commands/ | | |
247
- | Warp | .warp/ | WARP.md | | | |
248
- | Windsurf | .windsurf/ | | rules/ | | | |
137
+ | Platform | Directory | Root file | Rules | Commands | Agents | Skills | MCP |
138
+ | --- | --- | --- | --- | --- | --- | --- | --- |
139
+ | Antigravity | .agent/ | | rules/ | workflows/ | | | |
140
+ | Augment Code | .augment/ | | rules/ | commands/ | | | |
141
+ | Claude Code | .claude/ | CLAUDE.md | rules/ | commands/ | agents/ | skills/ | .mcp.json (root) |
142
+ | Codex | .codex/ | AGENTS.md | | prompts/ | | | config.toml |
143
+ | Cursor | .cursor/ | AGENTS.md | rules/ | commands/ | agents/ | | mcp.json |
144
+ | Factory | .factory/ | AGENTS.md | | commands/ | droids/ | | mcp.json |
145
+ | Kilo Code | .kilocode/ | AGENTS.md | rules/ | workflows/ | | | mcp.json |
146
+ | Kiro | .kiro/ | | steering/ | | | | settings/mcp.json |
147
+ | OpenCode | .opencode/ | AGENTS.md | | command/ | agent/ | skills/ | opencode.json |
148
+ | Qwen Code | .qwen/ | QWEN.md | | | agents/ | | settings.json |
149
+ | Roo | .roo/ | AGENTS.md | | commands/ | | | mcp.json |
150
+ | Warp | .warp/ | WARP.md | | | | |
151
+ | Windsurf | .windsurf/ | | rules/ | | | | |
249
152
 
250
153
  The built-in `platforms.jsonc` defines supported platforms, but can be overridden by user configs:
251
154
  - Global: `~/.openpackage/platforms.jsonc` (`.json`)
@@ -255,7 +158,7 @@ Deep-merged (local > global > built-in) for per-project customization.
255
158
 
256
159
  ## Contributing
257
160
 
258
- We would love your help building the future of package management for agentic coding.
161
+ We would love your help building a more open source and universally compatible agentic coding ecosystem.
259
162
 
260
163
  Feel free to create [PRs](https://github.com/enulus/OpenPackage/pulls) and [Github issues](https://github.com/enulus/OpenPackage/issues) for:
261
164
  - Bugs
@@ -1,21 +1,45 @@
1
1
  import { withErrorHandling } from '../utils/errors.js';
2
- import { runAddPipeline } from '../core/add/add-pipeline.js';
2
+ import { runAddToSourcePipeline } from '../core/add/add-to-source-pipeline.js';
3
+ import { readWorkspaceIndex } from '../utils/workspace-index-yml.js';
4
+ import { formatPathForDisplay } from '../utils/formatters.js';
3
5
  export function setupAddCommand(program) {
4
6
  program
5
7
  .command('add')
6
- .argument('[package-or-path]', 'package name, or path when omitting package name')
7
- .argument('[path]', 'file or directory to add (when first arg is a package name)')
8
- .description('Copy supported workspace files or directories into a local package directory.\n' +
9
- 'Usage examples:\n' +
10
- ' opkg add my-package .cursor/rules/example.md\n' +
11
- ' opkg add my-package ai/helpers/\n' +
12
- ' opkg add ai/helpers/\n')
8
+ .argument('<package-name>', 'package name')
9
+ .argument('<path>', 'file or directory to add')
10
+ .description('Add files to a mutable package source')
13
11
  .option('--platform-specific', 'Save platform-specific variants for platform subdir inputs')
14
- .action(withErrorHandling(async (packageOrPath, pathArg, options) => {
15
- const result = await runAddPipeline(packageOrPath, pathArg, options);
12
+ .option('--apply', 'Apply changes to workspace immediately (requires package to be installed)')
13
+ .action(withErrorHandling(async (packageName, pathArg, options) => {
14
+ const result = await runAddToSourcePipeline(packageName, pathArg, options);
16
15
  if (!result.success) {
17
16
  throw new Error(result.error || 'Add operation failed');
18
17
  }
18
+ // Provide helpful feedback
19
+ if (result.data) {
20
+ const cwd = process.cwd();
21
+ const { filesAdded, sourcePath, sourceType, packageName: resolvedName } = result.data;
22
+ // Format the path for display using unified formatter
23
+ const displayPath = formatPathForDisplay(sourcePath, cwd);
24
+ console.log(`\n✓ Added ${filesAdded} file${filesAdded !== 1 ? 's' : ''} to ${resolvedName}`);
25
+ console.log(` Path: ${displayPath}`);
26
+ console.log(` Type: ${sourceType} package`);
27
+ if (!options.apply) {
28
+ // Check if package is installed in workspace
29
+ const workspaceIndexRecord = await readWorkspaceIndex(cwd);
30
+ const isInstalled = !!workspaceIndexRecord.index.packages[resolvedName];
31
+ if (isInstalled) {
32
+ console.log(`\n💡 Changes not synced to workspace.`);
33
+ console.log(` To sync changes, run:`);
34
+ console.log(` opkg apply ${resolvedName}`);
35
+ }
36
+ else {
37
+ console.log(`\n💡 Package not installed in workspace.`);
38
+ console.log(` To install and sync, run:`);
39
+ console.log(` opkg install ${resolvedName}`);
40
+ }
41
+ }
42
+ }
19
43
  }));
20
44
  }
21
45
  //# sourceMappingURL=add.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAA2B,MAAM,6BAA6B,CAAC;AAEtF,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;SACjF,QAAQ,CAAC,QAAQ,EAAE,6DAA6D,CAAC;SACjF,WAAW,CACV,iFAAiF;QACjF,mBAAmB;QACnB,kDAAkD;QAClD,qCAAqC;QACrC,0BAA0B,CAC3B;SACA,MAAM,CAAC,qBAAqB,EAAE,4DAA4D,CAAC;SAC3F,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,aAAiC,EAAE,OAA2B,EAAE,OAA2B,EAAE,EAAE;QACtH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,sBAAsB,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAA2B,MAAM,uCAAuC,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC;SAC1C,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;SAC9C,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,qBAAqB,EAAE,4DAA4D,CAAC;SAC3F,MAAM,CAAC,SAAS,EAAE,2EAA2E,CAAC;SAC9F,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,WAA+B,EAAE,OAA2B,EAAE,OAA2B,EAAE,EAAE;QACpH,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,sBAAsB,CAAC,CAAC;QAC1D,CAAC;QAED,2BAA2B;QAC3B,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;YAEtF,sDAAsD;YACtD,MAAM,WAAW,GAAG,oBAAoB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAE1D,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,QAAQ,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,YAAY,EAAE,CAAC,CAAC;YAC7F,OAAO,CAAC,GAAG,CAAC,WAAW,WAAW,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,UAAU,CAAC,CAAC;YAE7C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,6CAA6C;gBAC7C,MAAM,oBAAoB,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;gBAC3D,MAAM,WAAW,GAAG,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAExE,IAAI,WAAW,EAAE,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;oBACrD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;oBACxC,OAAO,CAAC,GAAG,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;gBACjD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;oBACxD,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;oBAC5C,OAAO,CAAC,GAAG,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { withErrorHandling } from '../utils/errors.js';
2
+ import { runApplyPipeline } from '../core/apply/apply-pipeline.js';
3
+ export function setupApplyCommand(program) {
4
+ program
5
+ .command('apply')
6
+ .description('Apply/sync package across platforms')
7
+ .argument('[package-name]', 'package name to apply (defaults to current/root package)')
8
+ .option('-f, --force', 'overwrite existing files without prompting')
9
+ .option('--dry-run', 'plan apply without writing files')
10
+ .action(withErrorHandling(async (packageName, options) => {
11
+ const result = await runApplyPipeline(packageName, options ?? {});
12
+ if (!result.success)
13
+ throw new Error(result.error || 'Apply operation failed');
14
+ }));
15
+ }
16
+ //# sourceMappingURL=apply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAA6B,MAAM,iCAAiC,CAAC;AAE9F,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,qCAAqC,CAAC;SAClD,QAAQ,CAAC,gBAAgB,EAAE,0DAA0D,CAAC;SACtF,MAAM,CAAC,aAAa,EAAE,4CAA4C,CAAC;SACnE,MAAM,CAAC,WAAW,EAAE,kCAAkC,CAAC;SACvD,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,WAA+B,EAAE,OAA6B,EAAE,EAAE;QACzF,MAAM,MAAM,GAAkB,MAAM,gBAAgB,CAAC,WAAW,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,wBAAwB,CAAC,CAAC;IACjF,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
@@ -151,7 +151,7 @@ export function setupDeleteCommand(program) {
151
151
  program
152
152
  .command('delete')
153
153
  .alias('del')
154
- .description('Delete a package from local registry. Supports versioning with package@version syntax and prerelease version deletion.')
154
+ .description('Delete package from local registry')
155
155
  .argument('<package>', 'package name or package@version to delete. Use package@baseVersion to delete all prerelease versions of that base version.')
156
156
  .option('-f, --force', 'skip confirmation prompt')
157
157
  .option('-i, --interactive', 'interactively select version to delete')
@@ -1 +1 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,17 @@
1
+ import { resolve } from 'path';
2
+ import { formatPathForDisplay } from '../utils/formatters.js';
1
3
  import { DIR_PATTERNS, PACKAGE_PATHS } from '../constants/index.js';
2
4
  import { runBulkInstallPipeline } from '../core/install/bulk-install-pipeline.js';
3
5
  import { runInstallPipeline, determineResolutionMode } from '../core/install/install-pipeline.js';
4
6
  import { runPathInstallPipeline } from '../core/install/path-install-pipeline.js';
5
- import { withErrorHandling } from '../utils/errors.js';
7
+ import { loadPackageFromGit } from '../core/install/git-package-loader.js';
8
+ import { inferSourceType } from '../core/install/path-package-loader.js';
9
+ import { detectPluginType } from '../core/install/plugin-detector.js';
10
+ import { parseMarketplace, promptPluginSelection, installMarketplacePlugins } from '../core/install/marketplace-handler.js';
11
+ import { withErrorHandling, ValidationError } from '../utils/errors.js';
6
12
  import { normalizePlatforms } from '../utils/platform-mapper.js';
7
13
  import { classifyPackageInput } from '../utils/package-input.js';
14
+ import { findExistingPathOrGitSource } from '../utils/install-helpers.js';
8
15
  import { logger } from '../utils/logger.js';
9
16
  import { normalizePathForProcessing } from '../utils/path-normalization.js';
10
17
  function assertTargetDirOutsideMetadata(targetDir) {
@@ -33,7 +40,116 @@ async function installCommand(packageInput, options) {
33
40
  }
34
41
  // Classify the input to determine if it's a registry name, directory, or tarball
35
42
  const classification = await classifyPackageInput(packageInput, cwd);
43
+ // For registry-type inputs (package names), check if it's actually a path/git dependency in openpackage.yml
44
+ // This ensures we respect the manifest's declared source type on subsequent installs
45
+ if (classification.type === 'registry' && classification.name) {
46
+ const existingSource = await findExistingPathOrGitSource(cwd, classification.name);
47
+ if (existingSource) {
48
+ if (existingSource.type === 'git') {
49
+ const subdirPart = existingSource.subdirectory ? `&subdirectory=${existingSource.subdirectory}` : '';
50
+ logger.info(`Using git source from openpackage.yml for '${classification.name}': ${existingSource.url}`);
51
+ console.log(`✓ Using git source from openpackage.yml: ${existingSource.url}${existingSource.ref ? `#${existingSource.ref}` : ''}${subdirPart}`);
52
+ const result = await loadPackageFromGit({
53
+ url: existingSource.url,
54
+ ref: existingSource.ref,
55
+ subdirectory: existingSource.subdirectory
56
+ });
57
+ if (result.isMarketplace) {
58
+ throw new ValidationError(`Package '${classification.name}' is declared as a git source in openpackage.yml, ` +
59
+ `but the repository is a Claude Code plugin marketplace. ` +
60
+ `Marketplaces cannot be used as dependencies via openpackage.yml.`);
61
+ }
62
+ return await runPathInstallPipeline({
63
+ ...options,
64
+ sourcePath: result.repoPath,
65
+ sourceType: 'directory',
66
+ targetDir,
67
+ gitUrl: existingSource.url,
68
+ gitRef: existingSource.ref,
69
+ gitSubdirectory: existingSource.subdirectory
70
+ });
71
+ }
72
+ else if (existingSource.type === 'path') {
73
+ logger.info(`Using path source from openpackage.yml for '${classification.name}': ${existingSource.path}`);
74
+ const displayPath = formatPathForDisplay(existingSource.path, cwd);
75
+ console.log(`✓ Using path source from openpackage.yml: ${displayPath}`);
76
+ const resolvedPath = resolve(cwd, existingSource.path);
77
+ const sourceType = inferSourceType(existingSource.path);
78
+ return await runPathInstallPipeline({
79
+ ...options,
80
+ sourcePath: resolvedPath,
81
+ sourceType,
82
+ targetDir
83
+ });
84
+ }
85
+ }
86
+ }
87
+ if (classification.type === 'git') {
88
+ const result = await loadPackageFromGit({
89
+ url: classification.gitUrl,
90
+ ref: classification.gitRef,
91
+ subdirectory: classification.gitSubdirectory
92
+ });
93
+ // Check if this is a marketplace
94
+ if (result.isMarketplace) {
95
+ logger.info('Detected Claude Code marketplace, prompting for plugin selection', {
96
+ url: classification.gitUrl
97
+ });
98
+ const pluginDetection = await detectPluginType(result.sourcePath);
99
+ if (!pluginDetection.manifestPath) {
100
+ throw new ValidationError('Marketplace manifest not found');
101
+ }
102
+ // Parse marketplace and prompt for selection (pass context for fallback naming)
103
+ const marketplace = await parseMarketplace(pluginDetection.manifestPath, {
104
+ gitUrl: classification.gitUrl,
105
+ repoPath: result.repoPath
106
+ });
107
+ const selectedPlugins = await promptPluginSelection(marketplace);
108
+ if (selectedPlugins.length === 0) {
109
+ console.log('No plugins selected. Installation cancelled.');
110
+ return { success: true };
111
+ }
112
+ // Install selected plugins
113
+ return await installMarketplacePlugins(result.repoPath, marketplace, selectedPlugins, classification.gitUrl, classification.gitRef, options);
114
+ }
115
+ // Not a marketplace, install as regular package/plugin
116
+ return await runPathInstallPipeline({
117
+ ...options,
118
+ sourcePath: result.repoPath,
119
+ sourceType: 'directory',
120
+ targetDir,
121
+ gitUrl: classification.gitUrl,
122
+ gitRef: classification.gitRef,
123
+ gitSubdirectory: classification.gitSubdirectory
124
+ });
125
+ }
36
126
  if (classification.type === 'directory' || classification.type === 'tarball') {
127
+ // Display source comparison info if available
128
+ if (classification.sourceComparisonInfo) {
129
+ displayPackageSourceResolution(classification.sourceComparisonInfo);
130
+ }
131
+ // Check if this is a marketplace (only for directories, not tarballs)
132
+ if (classification.type === 'directory') {
133
+ const pluginDetection = await detectPluginType(classification.resolvedPath);
134
+ if (pluginDetection.isPlugin && pluginDetection.type === 'marketplace') {
135
+ logger.info('Detected Claude Code marketplace from local path, prompting for plugin selection', {
136
+ path: classification.resolvedPath
137
+ });
138
+ // Parse marketplace and prompt for selection (pass context for fallback naming)
139
+ const marketplace = await parseMarketplace(pluginDetection.manifestPath, {
140
+ repoPath: classification.resolvedPath
141
+ });
142
+ const selectedPlugins = await promptPluginSelection(marketplace);
143
+ if (selectedPlugins.length === 0) {
144
+ console.log('No plugins selected. Installation cancelled.');
145
+ return { success: true };
146
+ }
147
+ // Install selected plugins (no git URL for local paths)
148
+ return await installMarketplacePlugins(classification.resolvedPath, marketplace, selectedPlugins, classification.resolvedPath, // Use path as "url" for tracking
149
+ undefined, // No git ref for local paths
150
+ options);
151
+ }
152
+ }
37
153
  return await runPathInstallPipeline({
38
154
  ...options,
39
155
  sourcePath: classification.resolvedPath,
@@ -51,12 +167,58 @@ async function installCommand(packageInput, options) {
51
167
  targetDir
52
168
  });
53
169
  }
170
+ /**
171
+ * Display user-friendly information about package source resolution
172
+ */
173
+ function displayPackageSourceResolution(info) {
174
+ const { candidates, selected, reason } = info;
175
+ // Workspace override - simple message
176
+ if (reason === 'workspace-override') {
177
+ console.log(`✓ Found ${selected.packageName} in workspace packages`);
178
+ console.log(`💡 Workspace packages always override global/registry`);
179
+ return;
180
+ }
181
+ // Single source - simple message
182
+ if (reason === 'only-source' && candidates.length === 1) {
183
+ const sourceType = selected.type === 'global' ? 'global packages' :
184
+ selected.type === 'registry' ? 'registry' : 'workspace packages';
185
+ console.log(`✓ Found ${selected.packageName} in ${sourceType}`);
186
+ return;
187
+ }
188
+ // Multiple sources - show comparison
189
+ if (candidates.length > 1) {
190
+ console.log(`Resolving ${selected.packageName}...`);
191
+ for (const candidate of candidates) {
192
+ const label = candidate.type === 'global' ? 'Global packages' : 'Registry';
193
+ const suffix = candidate.type === 'global' ? ' (mutable)' : ' (stable)';
194
+ console.log(` • ${label}: ${candidate.version}${suffix}`);
195
+ }
196
+ const sourceLabel = selected.type === 'global' ? 'global packages' : 'registry';
197
+ if (reason === 'newer-version') {
198
+ console.log(`✓ Using ${selected.packageName}@${selected.version} from ${sourceLabel} (newer version)`);
199
+ // Warn about outdated global if registry was selected
200
+ if (selected.type === 'registry') {
201
+ const global = candidates.find((c) => c.type === 'global');
202
+ if (global) {
203
+ console.log(`⚠️ Global packages has older version (${global.version})`);
204
+ console.log(`💡 To update global: cd ~/.openpackage/packages/${selected.packageName} && opkg pack`);
205
+ }
206
+ }
207
+ }
208
+ else if (reason === 'same-version-prefer-mutable') {
209
+ console.log(`✓ Using ${selected.packageName}@${selected.version} from ${sourceLabel} (same version, prefer mutable)`);
210
+ }
211
+ else {
212
+ console.log(`✓ Using ${selected.packageName}@${selected.version} from ${sourceLabel}`);
213
+ }
214
+ }
215
+ }
54
216
  export function setupInstallCommand(program) {
55
217
  program
56
218
  .command('install')
57
219
  .alias('i')
58
- .description('Install packages from the local (and optional remote) registry into this workspace. Works with WIP copies from `opkg save` and stable releases from `opkg pack`.')
59
- .argument('[package-name]', 'name of the package to install (optional - installs all from package.yml if not specified). Supports package@version syntax.')
220
+ .description('Install packages to workspace')
221
+ .argument('[package-name]', 'name of the package to install (optional - installs all from openpackage.yml if not specified). Supports package@version syntax.')
60
222
  .option('--dry-run', 'preview changes without applying them')
61
223
  .option('--force', 'overwrite existing files')
62
224
  .option('--conflicts <strategy>', 'conflict handling strategy: keep-both, overwrite, skip, or ask')
@@ -64,7 +226,6 @@ export function setupInstallCommand(program) {
64
226
  .option('--platforms <platforms...>', 'prepare specific platforms (e.g., cursor claudecode opencode)')
65
227
  .option('--remote', 'pull and install from remote registry, ignoring local versions')
66
228
  .option('--local', 'resolve and install using only local registry versions, skipping remote metadata and pulls')
67
- .option('--stable', 'prefer the latest stable version when resolving; ignore newer prerelease/WIP versions if a satisfying stable exists')
68
229
  .option('--profile <profile>', 'profile to use for authentication')
69
230
  .option('--api-key <key>', 'API key for authentication (overrides profile)')
70
231
  .action(withErrorHandling(async (packageName, options) => {