opkg 0.6.2 → 0.7.0

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 (500) hide show
  1. package/README.md +71 -168
  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 +160 -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 +70 -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/discovery/file-discovery.js +1 -2
  55. package/dist/core/discovery/file-discovery.js.map +1 -1
  56. package/dist/core/discovery/platform-files-discovery.js +33 -18
  57. package/dist/core/discovery/platform-files-discovery.js.map +1 -1
  58. package/dist/core/flows/flow-executor.js +974 -0
  59. package/dist/core/flows/flow-executor.js.map +1 -0
  60. package/dist/core/flows/flow-inverter.js +442 -0
  61. package/dist/core/flows/flow-inverter.js.map +1 -0
  62. package/dist/core/flows/flow-key-extractor.js +101 -0
  63. package/dist/core/flows/flow-key-extractor.js.map +1 -0
  64. package/dist/core/flows/flow-key-mapper.js +382 -0
  65. package/dist/core/flows/flow-key-mapper.js.map +1 -0
  66. package/dist/core/flows/flow-transforms.js +632 -0
  67. package/dist/core/flows/flow-transforms.js.map +1 -0
  68. package/dist/core/flows/map-pipeline/context.js +73 -0
  69. package/dist/core/flows/map-pipeline/context.js.map +1 -0
  70. package/dist/core/flows/map-pipeline/index.js +156 -0
  71. package/dist/core/flows/map-pipeline/index.js.map +1 -0
  72. package/dist/core/flows/map-pipeline/operations/copy.js +104 -0
  73. package/dist/core/flows/map-pipeline/operations/copy.js.map +1 -0
  74. package/dist/core/flows/map-pipeline/operations/pipe.js +70 -0
  75. package/dist/core/flows/map-pipeline/operations/pipe.js.map +1 -0
  76. package/dist/core/flows/map-pipeline/operations/rename.js +102 -0
  77. package/dist/core/flows/map-pipeline/operations/rename.js.map +1 -0
  78. package/dist/core/flows/map-pipeline/operations/set.js +50 -0
  79. package/dist/core/flows/map-pipeline/operations/set.js.map +1 -0
  80. package/dist/core/flows/map-pipeline/operations/switch.js +79 -0
  81. package/dist/core/flows/map-pipeline/operations/switch.js.map +1 -0
  82. package/dist/core/flows/map-pipeline/operations/transform.js +543 -0
  83. package/dist/core/flows/map-pipeline/operations/transform.js.map +1 -0
  84. package/dist/core/flows/map-pipeline/operations/unset.js +65 -0
  85. package/dist/core/flows/map-pipeline/operations/unset.js.map +1 -0
  86. package/dist/core/flows/map-pipeline/types.js +8 -0
  87. package/dist/core/flows/map-pipeline/types.js.map +1 -0
  88. package/dist/core/flows/map-pipeline/utils.js +278 -0
  89. package/dist/core/flows/map-pipeline/utils.js.map +1 -0
  90. package/dist/core/flows/platform-converter.js +328 -0
  91. package/dist/core/flows/platform-converter.js.map +1 -0
  92. package/dist/core/flows/source-resolver.js +192 -0
  93. package/dist/core/flows/source-resolver.js.map +1 -0
  94. package/dist/core/flows/toml-domain-transforms.js +23 -0
  95. package/dist/core/flows/toml-domain-transforms.js.map +1 -0
  96. package/dist/core/install/bulk-install-pipeline.js +37 -6
  97. package/dist/core/install/bulk-install-pipeline.js.map +1 -1
  98. package/dist/core/install/canonical-plan.js +3 -3
  99. package/dist/core/install/canonical-plan.js.map +1 -1
  100. package/dist/core/install/dry-run.js +3 -3
  101. package/dist/core/install/dry-run.js.map +1 -1
  102. package/dist/core/install/flow-based-installer.js +1158 -0
  103. package/dist/core/install/flow-based-installer.js.map +1 -0
  104. package/dist/core/install/flow-workspace-tracker.js +111 -0
  105. package/dist/core/install/flow-workspace-tracker.js.map +1 -0
  106. package/dist/core/install/format-detector.js +228 -0
  107. package/dist/core/install/format-detector.js.map +1 -0
  108. package/dist/core/install/git-package-loader.js +20 -0
  109. package/dist/core/install/git-package-loader.js.map +1 -0
  110. package/dist/core/install/install-errors.js +1 -1
  111. package/dist/core/install/install-errors.js.map +1 -1
  112. package/dist/core/install/install-flow.js +34 -14
  113. package/dist/core/install/install-flow.js.map +1 -1
  114. package/dist/core/install/install-pipeline.js +52 -17
  115. package/dist/core/install/install-pipeline.js.map +1 -1
  116. package/dist/core/install/install-reporting.js +24 -7
  117. package/dist/core/install/install-reporting.js.map +1 -1
  118. package/dist/core/install/local-source-resolution.js +103 -0
  119. package/dist/core/install/local-source-resolution.js.map +1 -0
  120. package/dist/core/install/marketplace-handler.js +221 -0
  121. package/dist/core/install/marketplace-handler.js.map +1 -0
  122. package/dist/core/install/path-install-pipeline.js +39 -25
  123. package/dist/core/install/path-install-pipeline.js.map +1 -1
  124. package/dist/core/install/path-package-loader.js +25 -10
  125. package/dist/core/install/path-package-loader.js.map +1 -1
  126. package/dist/core/install/plugin-detector.js +72 -0
  127. package/dist/core/install/plugin-detector.js.map +1 -0
  128. package/dist/core/install/plugin-to-universal-converter.js +218 -0
  129. package/dist/core/install/plugin-to-universal-converter.js.map +1 -0
  130. package/dist/core/install/plugin-transformer.js +191 -0
  131. package/dist/core/install/plugin-transformer.js.map +1 -0
  132. package/dist/core/install/version-selection.js +1 -1
  133. package/dist/core/install/version-selection.js.map +1 -1
  134. package/dist/core/openpackage.js +40 -22
  135. package/dist/core/openpackage.js.map +1 -1
  136. package/dist/core/pack/pack-output.js +62 -0
  137. package/dist/core/pack/pack-output.js.map +1 -0
  138. package/dist/core/pack/pack-pipeline.js +186 -0
  139. package/dist/core/pack/pack-pipeline.js.map +1 -0
  140. package/dist/core/package-context.js +45 -70
  141. package/dist/core/package-context.js.map +1 -1
  142. package/dist/core/package-creation.js +203 -0
  143. package/dist/core/package-creation.js.map +1 -0
  144. package/dist/core/package.js +20 -6
  145. package/dist/core/package.js.map +1 -1
  146. package/dist/core/platforms.js +400 -157
  147. package/dist/core/platforms.js.map +1 -1
  148. package/dist/core/push/push-context.js +1 -1
  149. package/dist/core/push/push-context.js.map +1 -1
  150. package/dist/core/push/push-upload.js +2 -2
  151. package/dist/core/push/push-upload.js.map +1 -1
  152. package/dist/core/registry.js +6 -6
  153. package/dist/core/registry.js.map +1 -1
  154. package/dist/core/remote-pull.js +2 -2
  155. package/dist/core/remote-pull.js.map +1 -1
  156. package/dist/core/remove/removal-collector.js +52 -0
  157. package/dist/core/remove/removal-collector.js.map +1 -0
  158. package/dist/core/remove/removal-confirmation.js +39 -0
  159. package/dist/core/remove/removal-confirmation.js.map +1 -0
  160. package/dist/core/remove/remove-from-source-pipeline.js +173 -0
  161. package/dist/core/remove/remove-from-source-pipeline.js.map +1 -0
  162. package/dist/core/save/constants.js +3 -3
  163. package/dist/core/save/constants.js.map +1 -1
  164. package/dist/core/save/flow-based-saver.js +270 -0
  165. package/dist/core/save/flow-based-saver.js.map +1 -0
  166. package/dist/core/save/name-resolution.js +1 -1
  167. package/dist/core/save/name-resolution.js.map +1 -1
  168. package/dist/core/save/package-yml-generator.js +4 -5
  169. package/dist/core/save/package-yml-generator.js.map +1 -1
  170. package/dist/core/save/save-candidate-builder.js +215 -0
  171. package/dist/core/save/save-candidate-builder.js.map +1 -0
  172. package/dist/core/save/save-candidate-loader.js +6 -6
  173. package/dist/core/save/save-candidate-loader.js.map +1 -1
  174. package/dist/core/save/save-conflict-analyzer.js +150 -0
  175. package/dist/core/save/save-conflict-analyzer.js.map +1 -0
  176. package/dist/core/save/save-conflict-resolution.js +28 -14
  177. package/dist/core/save/save-conflict-resolution.js.map +1 -1
  178. package/dist/core/save/save-conflict-resolver.js +31 -275
  179. package/dist/core/save/save-conflict-resolver.js.map +1 -1
  180. package/dist/core/save/save-group-builder.js +52 -0
  181. package/dist/core/save/save-group-builder.js.map +1 -0
  182. package/dist/core/save/save-interactive-resolver.js +190 -0
  183. package/dist/core/save/save-interactive-resolver.js.map +1 -0
  184. package/dist/core/save/save-pipeline.js +44 -33
  185. package/dist/core/save/save-pipeline.js.map +1 -1
  186. package/dist/core/save/save-platform-handler.js +53 -0
  187. package/dist/core/save/save-platform-handler.js.map +1 -0
  188. package/dist/core/save/save-resolution-executor.js +145 -0
  189. package/dist/core/save/save-resolution-executor.js.map +1 -0
  190. package/dist/core/save/save-result-reporter.js +167 -0
  191. package/dist/core/save/save-result-reporter.js.map +1 -0
  192. package/dist/core/save/save-to-source-pipeline.js +154 -0
  193. package/dist/core/save/save-to-source-pipeline.js.map +1 -0
  194. package/dist/core/save/save-versioning.js +4 -4
  195. package/dist/core/save/save-versioning.js.map +1 -1
  196. package/dist/core/save/save-write-coordinator.js +204 -0
  197. package/dist/core/save/save-write-coordinator.js.map +1 -0
  198. package/dist/core/save/save-yml-resolution.js +28 -216
  199. package/dist/core/save/save-yml-resolution.js.map +1 -1
  200. package/dist/core/save/workspace-rename.js +7 -8
  201. package/dist/core/save/workspace-rename.js.map +1 -1
  202. package/dist/core/set/set-output.js +72 -0
  203. package/dist/core/set/set-output.js.map +1 -0
  204. package/dist/core/set/set-pipeline.js +361 -0
  205. package/dist/core/set/set-pipeline.js.map +1 -0
  206. package/dist/core/set/set-types.js +5 -0
  207. package/dist/core/set/set-types.js.map +1 -0
  208. package/dist/core/show/package-resolver.js +257 -0
  209. package/dist/core/show/package-resolver.js.map +1 -0
  210. package/dist/core/show/scope-discovery.js +165 -0
  211. package/dist/core/show/scope-discovery.js.map +1 -0
  212. package/dist/core/show/show-output.js +168 -0
  213. package/dist/core/show/show-output.js.map +1 -0
  214. package/dist/core/show/show-pipeline.js +113 -0
  215. package/dist/core/show/show-pipeline.js.map +1 -0
  216. package/dist/core/show/show-types.js +5 -0
  217. package/dist/core/show/show-types.js.map +1 -0
  218. package/dist/core/source-resolution/dependency-graph.js +104 -0
  219. package/dist/core/source-resolution/dependency-graph.js.map +1 -0
  220. package/dist/core/source-resolution/resolve-mutable-source.js +109 -0
  221. package/dist/core/source-resolution/resolve-mutable-source.js.map +1 -0
  222. package/dist/core/source-resolution/resolve-package-source.js +29 -0
  223. package/dist/core/source-resolution/resolve-package-source.js.map +1 -0
  224. package/dist/core/source-resolution/resolve-registry-version.js +35 -0
  225. package/dist/core/source-resolution/resolve-registry-version.js.map +1 -0
  226. package/dist/core/source-resolution/types.js.map +1 -0
  227. package/dist/core/status/status-file-discovery.js +23 -12
  228. package/dist/core/status/status-file-discovery.js.map +1 -1
  229. package/dist/core/status/status-pipeline.js +134 -0
  230. package/dist/core/status/status-pipeline.js.map +1 -0
  231. package/dist/core/sync/platform-sync-summary.js +27 -0
  232. package/dist/core/sync/platform-sync-summary.js.map +1 -0
  233. package/dist/core/uninstall/flow-aware-uninstaller.js +189 -0
  234. package/dist/core/uninstall/flow-aware-uninstaller.js.map +1 -0
  235. package/dist/core/uninstall/uninstall-file-discovery.js +11 -6
  236. package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
  237. package/dist/core/uninstall/uninstall-pipeline.js +141 -0
  238. package/dist/core/uninstall/uninstall-pipeline.js.map +1 -0
  239. package/dist/core/universal-patterns.js +64 -0
  240. package/dist/core/universal-patterns.js.map +1 -0
  241. package/dist/index.js +75 -7
  242. package/dist/index.js.map +1 -1
  243. package/dist/types/flows.js +8 -0
  244. package/dist/types/flows.js.map +1 -0
  245. package/dist/types/index.js +3 -0
  246. package/dist/types/index.js.map +1 -1
  247. package/dist/types/platform-flows.js +8 -0
  248. package/dist/types/platform-flows.js.map +1 -0
  249. package/dist/types/workspace-index.js +6 -0
  250. package/dist/types/workspace-index.js.map +1 -0
  251. package/dist/utils/custom-path-resolution.js +160 -0
  252. package/dist/utils/custom-path-resolution.js.map +1 -0
  253. package/dist/utils/dependency-coverage.js +1 -1
  254. package/dist/utils/dependency-coverage.js.map +1 -1
  255. package/dist/utils/file-processing.js +1 -1
  256. package/dist/utils/flow-index-installer.js +209 -0
  257. package/dist/utils/flow-index-installer.js.map +1 -0
  258. package/dist/utils/formatters.js +47 -1
  259. package/dist/utils/formatters.js.map +1 -1
  260. package/dist/utils/fs.js +17 -0
  261. package/dist/utils/fs.js.map +1 -1
  262. package/dist/utils/git-clone-registry.js +88 -0
  263. package/dist/utils/git-clone-registry.js.map +1 -0
  264. package/dist/utils/git-clone.js +69 -0
  265. package/dist/utils/git-clone.js.map +1 -0
  266. package/dist/utils/git-spec.js +96 -0
  267. package/dist/utils/git-spec.js.map +1 -0
  268. package/dist/utils/http-client.js +7 -0
  269. package/dist/utils/http-client.js.map +1 -1
  270. package/dist/utils/index-based-installer.js +346 -154
  271. package/dist/utils/index-based-installer.js.map +1 -1
  272. package/dist/utils/install-conflict-handler.js +2 -2
  273. package/dist/utils/install-conflict-handler.js.map +1 -1
  274. package/dist/utils/install-file-discovery.js +18 -13
  275. package/dist/utils/install-file-discovery.js.map +1 -1
  276. package/dist/utils/install-helpers.js +43 -22
  277. package/dist/utils/install-helpers.js.map +1 -1
  278. package/dist/utils/manifest-paths.js +1 -1
  279. package/dist/utils/manifest-paths.js.map +1 -1
  280. package/dist/utils/markdown-frontmatter.js +46 -0
  281. package/dist/utils/markdown-frontmatter.js.map +1 -1
  282. package/dist/utils/package-copy.js +5 -103
  283. package/dist/utils/package-copy.js.map +1 -1
  284. package/dist/utils/package-filters.js +9 -105
  285. package/dist/utils/package-filters.js.map +1 -1
  286. package/dist/utils/package-index-yml.js +27 -6
  287. package/dist/utils/package-index-yml.js.map +1 -1
  288. package/dist/utils/package-input.js +46 -3
  289. package/dist/utils/package-input.js.map +1 -1
  290. package/dist/utils/package-management.js +60 -29
  291. package/dist/utils/package-management.js.map +1 -1
  292. package/dist/utils/package-name-resolution.js +327 -0
  293. package/dist/utils/package-name-resolution.js.map +1 -0
  294. package/dist/utils/package-name.js +18 -16
  295. package/dist/utils/package-name.js.map +1 -1
  296. package/dist/utils/package-versioning.js +2 -33
  297. package/dist/utils/package-versioning.js.map +1 -1
  298. package/dist/utils/package-yml.js +19 -28
  299. package/dist/utils/package-yml.js.map +1 -1
  300. package/dist/utils/path-resolution.js +102 -0
  301. package/dist/utils/path-resolution.js.map +1 -0
  302. package/dist/utils/paths.js +6 -6
  303. package/dist/utils/paths.js.map +1 -1
  304. package/dist/utils/platform-file.js +32 -20
  305. package/dist/utils/platform-file.js.map +1 -1
  306. package/dist/utils/platform-mapper.js +214 -44
  307. package/dist/utils/platform-mapper.js.map +1 -1
  308. package/dist/utils/platform-root-files.js +44 -0
  309. package/dist/utils/platform-root-files.js.map +1 -0
  310. package/dist/utils/platform-utils.js +13 -6
  311. package/dist/utils/platform-utils.js.map +1 -1
  312. package/dist/utils/platform-yaml-merge.js +20 -141
  313. package/dist/utils/platform-yaml-merge.js.map +1 -1
  314. package/dist/utils/prompts.js +90 -5
  315. package/dist/utils/prompts.js.map +1 -1
  316. package/dist/utils/registry-entry-filter.js +48 -25
  317. package/dist/utils/registry-entry-filter.js.map +1 -1
  318. package/dist/utils/scope-resolution.js +156 -0
  319. package/dist/utils/scope-resolution.js.map +1 -0
  320. package/dist/utils/source-mutability.js +15 -0
  321. package/dist/utils/source-mutability.js.map +1 -0
  322. package/dist/utils/tarball.js +29 -4
  323. package/dist/utils/tarball.js.map +1 -1
  324. package/dist/utils/version-ranges.js +1 -32
  325. package/dist/utils/version-ranges.js.map +1 -1
  326. package/dist/utils/workspace-index-helpers.js +28 -0
  327. package/dist/utils/workspace-index-helpers.js.map +1 -0
  328. package/dist/utils/workspace-index-ownership.js +100 -0
  329. package/dist/utils/workspace-index-ownership.js.map +1 -0
  330. package/dist/utils/workspace-index-yml.js +173 -0
  331. package/dist/utils/workspace-index-yml.js.map +1 -0
  332. package/examples/custom-subdirs-platform.jsonc +111 -44
  333. package/package.json +7 -2
  334. package/platforms.jsonc +490 -82
  335. package/schemas/map-pipeline-v1.json +256 -0
  336. package/schemas/platforms-v1.json +400 -0
  337. package/specs/README.md +88 -0
  338. package/specs/add/README.md +166 -0
  339. package/specs/agents-claude.md +570 -0
  340. package/specs/agents-opencode.md +622 -0
  341. package/specs/apply/README.md +21 -0
  342. package/specs/apply/apply-behavior.md +58 -0
  343. package/specs/apply/apply-command.md +51 -0
  344. package/specs/apply/conflicts.md +41 -0
  345. package/specs/apply/index-effects.md +81 -0
  346. package/specs/architecture.md +107 -0
  347. package/specs/auth/README.md +17 -0
  348. package/specs/auth/auth-http-contract.md +25 -0
  349. package/specs/auth/cli/credentials.md +39 -0
  350. package/specs/auth/cli/login.md +32 -0
  351. package/specs/auth/cli/logout.md +16 -0
  352. package/specs/claude-mcp.md +1065 -0
  353. package/specs/claude-plugins-marketplace.md +363 -0
  354. package/specs/claude-plugins.md +413 -0
  355. package/specs/cli-options.md +13 -3
  356. package/specs/codex-mcp.md +114 -0
  357. package/specs/commands-overview.md +175 -0
  358. package/specs/directory-layout.md +95 -0
  359. package/specs/install/README.md +11 -4
  360. package/specs/install/git-sources.md +230 -0
  361. package/specs/install/install-behavior.md +478 -76
  362. package/specs/install/package-yml-canonical.md +67 -35
  363. package/specs/install/version-resolution.md +69 -115
  364. package/specs/new/README.md +769 -0
  365. package/specs/new/SUMMARY.md +310 -0
  366. package/specs/new/scope-behavior.md +793 -0
  367. package/specs/pack/README.md +77 -0
  368. package/specs/pack/package-name-resolution.md +330 -0
  369. package/specs/package/README.md +16 -12
  370. package/specs/package/nested-packages-and-parent-packages.md +32 -31
  371. package/specs/package/package-index-yml.md +95 -101
  372. package/specs/package/package-root-layout.md +64 -46
  373. package/specs/package/registry-payload-and-copy.md +50 -44
  374. package/specs/package/universal-content.md +33 -49
  375. package/specs/package-sources.md +248 -0
  376. package/specs/platforms/README.md +52 -0
  377. package/specs/platforms/configuration.md +571 -0
  378. package/specs/platforms/detection.md +552 -0
  379. package/specs/platforms/directory-layout.md +599 -0
  380. package/specs/platforms/examples.md +1146 -0
  381. package/specs/platforms/flow-reference.md +1240 -0
  382. package/specs/platforms/flows.md +1488 -0
  383. package/specs/platforms/map-pipeline.md +801 -0
  384. package/specs/platforms/overview.md +349 -0
  385. package/specs/platforms/specification.md +700 -0
  386. package/specs/platforms/troubleshooting.md +697 -0
  387. package/specs/platforms/universal-converter.md +520 -0
  388. package/specs/push/push-behavior.md +4 -4
  389. package/specs/push/push-remote-upload.md +1 -1
  390. package/specs/push/push-scoping.md +1 -1
  391. package/specs/push/push-version-selection.md +1 -1
  392. package/specs/registry.md +111 -0
  393. package/specs/remove/README.md +257 -0
  394. package/specs/save/README.md +19 -17
  395. package/specs/save/save-conflict-resolution.md +205 -83
  396. package/specs/save/save-file-discovery.md +6 -4
  397. package/specs/save/save-frontmatter-overrides.md +11 -15
  398. package/specs/save/save-modes-inputs.md +8 -38
  399. package/specs/save/save-naming-scoping.md +4 -4
  400. package/specs/save/save-package-detection.md +12 -12
  401. package/specs/save/save-registry-sync.md +16 -106
  402. package/specs/save/save-versioning.md +80 -0
  403. package/specs/scope-management.md +92 -0
  404. package/specs/set/README.md +520 -0
  405. package/specs/set/set-behavior.md +563 -0
  406. package/specs/show/README.md +483 -0
  407. package/specs/show/show-remote.md +494 -0
  408. package/specs/status/README.md +38 -0
  409. package/specs/uninstall/README.md +231 -0
  410. package/dist/commands/duplicate.js +0 -69
  411. package/dist/commands/duplicate.js.map +0 -1
  412. package/dist/commands/init.js +0 -117
  413. package/dist/commands/init.js.map +0 -1
  414. package/dist/commands/prune.js +0 -357
  415. package/dist/commands/prune.js.map +0 -1
  416. package/dist/commands/tui.js +0 -61
  417. package/dist/commands/tui.js.map +0 -1
  418. package/dist/core/install/index.js +0 -3
  419. package/dist/core/install/index.js.map +0 -1
  420. package/dist/core/install/local-source-handler.js +0 -76
  421. package/dist/core/install/local-source-handler.js.map +0 -1
  422. package/dist/core/push/push-single-file.js +0 -56
  423. package/dist/core/push/push-single-file.js.map +0 -1
  424. package/dist/core/save/package-detection.js +0 -147
  425. package/dist/core/save/package-detection.js.map +0 -1
  426. package/dist/core/save/save-single-file.js +0 -124
  427. package/dist/core/save/save-single-file.js.map +0 -1
  428. package/dist/core/token-store.js +0 -73
  429. package/dist/core/token-store.js.map +0 -1
  430. package/dist/mcp/access/context.js +0 -20
  431. package/dist/mcp/access/context.js.map +0 -1
  432. package/dist/mcp/access/index.js +0 -57
  433. package/dist/mcp/access/index.js.map +0 -1
  434. package/dist/mcp/server.js +0 -20
  435. package/dist/mcp/server.js.map +0 -1
  436. package/dist/tui/app.js +0 -105
  437. package/dist/tui/app.js.map +0 -1
  438. package/dist/tui/components/package-list.js +0 -73
  439. package/dist/tui/components/package-list.js.map +0 -1
  440. package/dist/tui/controller.js +0 -708
  441. package/dist/tui/controller.js.map +0 -1
  442. package/dist/tui/index.js +0 -12
  443. package/dist/tui/index.js.map +0 -1
  444. package/dist/tui/services/file-index.js +0 -64
  445. package/dist/tui/services/file-index.js.map +0 -1
  446. package/dist/tui/services/local-mgmt.js +0 -68
  447. package/dist/tui/services/local-mgmt.js.map +0 -1
  448. package/dist/tui/services/packages.js +0 -18
  449. package/dist/tui/services/packages.js.map +0 -1
  450. package/dist/tui/services/save.js +0 -21
  451. package/dist/tui/services/save.js.map +0 -1
  452. package/dist/tui/services/status.js +0 -18
  453. package/dist/tui/services/status.js.map +0 -1
  454. package/dist/tui/state/app-state.js +0 -21
  455. package/dist/tui/state/app-state.js.map +0 -1
  456. package/dist/tui/state.js +0 -17
  457. package/dist/tui/state.js.map +0 -1
  458. package/dist/tui/types.js.map +0 -1
  459. package/dist/tui/views/add-file-modal.js +0 -129
  460. package/dist/tui/views/add-file-modal.js.map +0 -1
  461. package/dist/tui/views/dashboard.js +0 -106
  462. package/dist/tui/views/dashboard.js.map +0 -1
  463. package/dist/tui/views/file-preview.js +0 -44
  464. package/dist/tui/views/file-preview.js.map +0 -1
  465. package/dist/tui/views/list-packages.js +0 -73
  466. package/dist/tui/views/list-packages.js.map +0 -1
  467. package/dist/tui/views/main-menu.js +0 -33
  468. package/dist/tui/views/main-menu.js.map +0 -1
  469. package/dist/tui/views/manage-view.js +0 -81
  470. package/dist/tui/views/manage-view.js.map +0 -1
  471. package/dist/tui/views/package-detail.js +0 -254
  472. package/dist/tui/views/package-detail.js.map +0 -1
  473. package/dist/tui/views/package-hub.js +0 -120
  474. package/dist/tui/views/package-hub.js.map +0 -1
  475. package/dist/tui/views/placeholder.js +0 -24
  476. package/dist/tui/views/placeholder.js.map +0 -1
  477. package/dist/utils/bun-bootstrap.js +0 -72
  478. package/dist/utils/bun-bootstrap.js.map +0 -1
  479. package/dist/utils/command-helpers.js +0 -24
  480. package/dist/utils/command-helpers.js.map +0 -1
  481. package/dist/utils/cwd-resolver.js +0 -45
  482. package/dist/utils/cwd-resolver.js.map +0 -1
  483. package/dist/utils/entity-id.js +0 -19
  484. package/dist/utils/entity-id.js.map +0 -1
  485. package/dist/utils/package-local-files.js +0 -5
  486. package/dist/utils/package-local-files.js.map +0 -1
  487. package/dist/utils/path-matching.js +0 -74
  488. package/dist/utils/path-matching.js.map +0 -1
  489. package/dist/utils/root-file-operations.js +0 -39
  490. package/dist/utils/root-file-operations.js.map +0 -1
  491. package/dist/utils/root-file-transformer.js +0 -27
  492. package/dist/utils/root-file-transformer.js.map +0 -1
  493. package/dist/utils/yaml-frontmatter.js +0 -25
  494. package/dist/utils/yaml-frontmatter.js.map +0 -1
  495. package/specs/auth/auth-device-flow.md +0 -70
  496. package/specs/login/login-device-flow.md +0 -70
  497. package/specs/platforms.md +0 -214
  498. package/specs/save-pack-versioning.md +0 -224
  499. package/specs/save-pack.md +0 -68
  500. /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. **No API keys. No MCP.**
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
+ ## How it works
46
48
 
47
- **No API keys required. No MCP installation.**
49
+ 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
50
 
49
51
  1. Declare a package
50
- 2. Add specs and AI coding config files
51
- 3. Sync to multiple codebases
52
+ 2. Add rules, commands, subagents, skills, mcp configs, specs, docs etc.
53
+ 3. Install and sync to multiple codebases
54
+
55
+ ## Use cases
56
+
57
+ - Install Claude Code Plugins to any coding platform
58
+ - Reuse files and configs across multiple codebases
59
+ - Sync configs across multiple platforms
60
+ - Modular management of specs, rules, commands, agents, skills, and MCPs
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
71
+ ### Compose a package
63
72
 
64
73
  ```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.
74
+ opkg new <package>
75
+ ```
76
76
 
77
- ```bash title="Terminal"
78
- opkg add <package> <path-to-dir-or-file>
79
- ```
77
+ Then manually add/update/remove files to and from the package following this structure:
80
78
 
81
- > [!TIP]
82
- > Learn how to compose packages by reading the [packages doc](https://openpackage.dev/docs/packages) from our official docs.
79
+ ```txt title="Structure"
80
+ <package>
81
+
82
+ │ # Package files
83
+ ├── openpackage.yml # The OpenPackage manifest, required
84
+ ├── README.md # LICENSE.md, CONTRIBUTING.md, etc.
85
+
86
+ │ # Content files
87
+ ├── rules/ # Rule files
88
+ ├── commands/ # Command files (slash commands)
89
+ ├── agents/ # Agent files (subagents)
90
+ ├── skills/ # Skill files (skills)
91
+ ├── root/ # Any other root dirs or files (Ex: specs/, docs/, tests/, etc.)
92
+ ├── AGENTS.md # Platform root file
93
+ ├── mcp.jsonc # MCP config file
94
+
95
+ │ # Custom files
96
+ └── <other> # Customizable via `platforms.jsonc` overrides/extensions
97
+ ```
83
98
 
84
- Use `save` or `pack` to save the set of dirs and files as a package to your local registry for reuse and distribution.
99
+ You can also use the `add` and `remove` commands to add/remove files to/from a package.
85
100
 
86
101
  ```bash title="Terminal"
87
- opkg save [package] # Prerelease/unversioned
88
- opkg pack [package] # Stable releases
102
+ opkg add <package> .cursor/commands/clean.md # Adds workspace file or dir to package
103
+ opkg remove <package> commands/clean.md # Removes file or dir from package
89
104
  ```
90
105
 
91
106
  > [!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.
107
+ > Learn more about packages from the [packages doc](https://openpackage.dev/docs/packages) on our official docs.
105
108
 
106
109
  ### Install packages
107
110
  ```bash title="Terminal"
108
111
  opkg install <package>
109
112
  ```
110
- Adds all files under the specified package to the codebase at cwd.
111
-
112
- ### Uninstall packages
113
- ```bash title="Terminal"
114
- opkg uninstall <package>
115
- ```
116
- Removes all files for the specified package from the codebase at cwd.
117
-
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
129
- ```bash title="Terminal"
130
- opkg login
131
- ```
132
-
133
- > [!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
- ```
113
+ Installs all files from a package into the codebase at cwd, formatted and converted to per platform conventions and into their respective dirs.
148
114
 
149
- #### Multiple files via package
115
+ The install command supports various package sources:
150
116
  ```bash title="Terminal"
151
- # In current codebase
152
- opkg save essentials
153
- # In another codebase
154
- opkg install essentials
117
+ opkg install essentials # Local/remote registry
118
+ opkg install ../packages/essentials/ # Local path
119
+ opkg install github:https://github.com/enulus/awesome-openpackage.git # GitHub package repo
120
+ opkg install github:https://github.com/anthropics/claude-code.git # GitHub Claude Code Plugins marketplace
155
121
  ```
156
122
 
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
166
-
167
- # After save:
168
- # .cursor/commands/essentials/cleanup.md
169
- # .claude/commands/essentials/cleanup.md
170
- # .opencode/command/essentials/cleanup.md
171
- ```
172
123
 
173
- ### Modular management of files
174
- Create domain specific packages for modular reuse.
124
+ ### Uninstall packages
175
125
  ```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
126
+ opkg uninstall <package>
196
127
  ```
128
+ Removes all files for a package from the codebase at cwd.
197
129
 
198
130
  > [!TIP]
199
131
  > Learn more by heading over to the [official docs](https://openpackage.dev/docs).
200
132
 
201
- ## Package Structure
202
-
203
- Packages are composed using the following directory structure:
204
-
205
- ```txt title="Structure"
206
- <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
221
- ```
222
-
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.)
226
-
227
- > [!TIP]
228
- > Learn more about packages from the [packages doc](https://openpackage.dev/docs/packages) from our official docs.
229
-
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/ | | | mcp-servers.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,111 @@ 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.sourcePath,
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
103
+ const marketplace = await parseMarketplace(pluginDetection.manifestPath);
104
+ const selectedPlugins = await promptPluginSelection(marketplace);
105
+ if (selectedPlugins.length === 0) {
106
+ console.log('No plugins selected. Installation cancelled.');
107
+ return { success: true };
108
+ }
109
+ // Install selected plugins
110
+ return await installMarketplacePlugins(result.sourcePath, marketplace, selectedPlugins, classification.gitUrl, classification.gitRef, options);
111
+ }
112
+ // Not a marketplace, install as regular package/plugin
113
+ return await runPathInstallPipeline({
114
+ ...options,
115
+ sourcePath: result.sourcePath,
116
+ sourceType: 'directory',
117
+ targetDir,
118
+ gitUrl: classification.gitUrl,
119
+ gitRef: classification.gitRef,
120
+ gitSubdirectory: classification.gitSubdirectory
121
+ });
122
+ }
36
123
  if (classification.type === 'directory' || classification.type === 'tarball') {
124
+ // Display source comparison info if available
125
+ if (classification.sourceComparisonInfo) {
126
+ displayPackageSourceResolution(classification.sourceComparisonInfo);
127
+ }
128
+ // Check if this is a marketplace (only for directories, not tarballs)
129
+ if (classification.type === 'directory') {
130
+ const pluginDetection = await detectPluginType(classification.resolvedPath);
131
+ if (pluginDetection.isPlugin && pluginDetection.type === 'marketplace') {
132
+ logger.info('Detected Claude Code marketplace from local path, prompting for plugin selection', {
133
+ path: classification.resolvedPath
134
+ });
135
+ // Parse marketplace and prompt for selection
136
+ const marketplace = await parseMarketplace(pluginDetection.manifestPath);
137
+ const selectedPlugins = await promptPluginSelection(marketplace);
138
+ if (selectedPlugins.length === 0) {
139
+ console.log('No plugins selected. Installation cancelled.');
140
+ return { success: true };
141
+ }
142
+ // Install selected plugins (no git URL for local paths)
143
+ return await installMarketplacePlugins(classification.resolvedPath, marketplace, selectedPlugins, classification.resolvedPath, // Use path as "url" for tracking
144
+ undefined, // No git ref for local paths
145
+ options);
146
+ }
147
+ }
37
148
  return await runPathInstallPipeline({
38
149
  ...options,
39
150
  sourcePath: classification.resolvedPath,
@@ -51,12 +162,58 @@ async function installCommand(packageInput, options) {
51
162
  targetDir
52
163
  });
53
164
  }
165
+ /**
166
+ * Display user-friendly information about package source resolution
167
+ */
168
+ function displayPackageSourceResolution(info) {
169
+ const { candidates, selected, reason } = info;
170
+ // Workspace override - simple message
171
+ if (reason === 'workspace-override') {
172
+ console.log(`✓ Found ${selected.packageName} in workspace packages`);
173
+ console.log(`💡 Workspace packages always override global/registry`);
174
+ return;
175
+ }
176
+ // Single source - simple message
177
+ if (reason === 'only-source' && candidates.length === 1) {
178
+ const sourceType = selected.type === 'global' ? 'global packages' :
179
+ selected.type === 'registry' ? 'registry' : 'workspace packages';
180
+ console.log(`✓ Found ${selected.packageName} in ${sourceType}`);
181
+ return;
182
+ }
183
+ // Multiple sources - show comparison
184
+ if (candidates.length > 1) {
185
+ console.log(`Resolving ${selected.packageName}...`);
186
+ for (const candidate of candidates) {
187
+ const label = candidate.type === 'global' ? 'Global packages' : 'Registry';
188
+ const suffix = candidate.type === 'global' ? ' (mutable)' : ' (stable)';
189
+ console.log(` • ${label}: ${candidate.version}${suffix}`);
190
+ }
191
+ const sourceLabel = selected.type === 'global' ? 'global packages' : 'registry';
192
+ if (reason === 'newer-version') {
193
+ console.log(`✓ Using ${selected.packageName}@${selected.version} from ${sourceLabel} (newer version)`);
194
+ // Warn about outdated global if registry was selected
195
+ if (selected.type === 'registry') {
196
+ const global = candidates.find((c) => c.type === 'global');
197
+ if (global) {
198
+ console.log(`⚠️ Global packages has older version (${global.version})`);
199
+ console.log(`💡 To update global: cd ~/.openpackage/packages/${selected.packageName} && opkg pack`);
200
+ }
201
+ }
202
+ }
203
+ else if (reason === 'same-version-prefer-mutable') {
204
+ console.log(`✓ Using ${selected.packageName}@${selected.version} from ${sourceLabel} (same version, prefer mutable)`);
205
+ }
206
+ else {
207
+ console.log(`✓ Using ${selected.packageName}@${selected.version} from ${sourceLabel}`);
208
+ }
209
+ }
210
+ }
54
211
  export function setupInstallCommand(program) {
55
212
  program
56
213
  .command('install')
57
214
  .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.')
215
+ .description('Install packages to workspace')
216
+ .argument('[package-name]', 'name of the package to install (optional - installs all from openpackage.yml if not specified). Supports package@version syntax.')
60
217
  .option('--dry-run', 'preview changes without applying them')
61
218
  .option('--force', 'overwrite existing files')
62
219
  .option('--conflicts <strategy>', 'conflict handling strategy: keep-both, overwrite, skip, or ask')
@@ -64,7 +221,6 @@ export function setupInstallCommand(program) {
64
221
  .option('--platforms <platforms...>', 'prepare specific platforms (e.g., cursor claudecode opencode)')
65
222
  .option('--remote', 'pull and install from remote registry, ignoring local versions')
66
223
  .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
224
  .option('--profile <profile>', 'profile to use for authentication')
69
225
  .option('--api-key <key>', 'API key for authentication (overrides profile)')
70
226
  .action(withErrorHandling(async (packageName, options) => {