opkg 0.6.1 → 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 (487) hide show
  1. package/README.md +109 -186
  2. package/assets/openpackage_ascii_dark.png +0 -0
  3. package/assets/openpackage_ascii_light.png +0 -0
  4. package/dist/commands/add.js +34 -10
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/apply.js +16 -0
  7. package/dist/commands/apply.js.map +1 -0
  8. package/dist/commands/delete.js +1 -1
  9. package/dist/commands/delete.js.map +1 -1
  10. package/dist/commands/install.js +177 -8
  11. package/dist/commands/install.js.map +1 -1
  12. package/dist/commands/list.js +2 -2
  13. package/dist/commands/list.js.map +1 -1
  14. package/dist/commands/login.js +1 -1
  15. package/dist/commands/login.js.map +1 -1
  16. package/dist/commands/logout.js +1 -1
  17. package/dist/commands/logout.js.map +1 -1
  18. package/dist/commands/new.js +125 -0
  19. package/dist/commands/new.js.map +1 -0
  20. package/dist/commands/pack.js +7 -13
  21. package/dist/commands/pack.js.map +1 -1
  22. package/dist/commands/pull.js +1 -1
  23. package/dist/commands/pull.js.map +1 -1
  24. package/dist/commands/push.js +1 -1
  25. package/dist/commands/push.js.map +1 -1
  26. package/dist/commands/remove.js +63 -0
  27. package/dist/commands/remove.js.map +1 -0
  28. package/dist/commands/save.js +11 -17
  29. package/dist/commands/save.js.map +1 -1
  30. package/dist/commands/set.js +33 -0
  31. package/dist/commands/set.js.map +1 -0
  32. package/dist/commands/show.js +16 -94
  33. package/dist/commands/show.js.map +1 -1
  34. package/dist/commands/status.js +26 -701
  35. package/dist/commands/status.js.map +1 -1
  36. package/dist/commands/uninstall.js +14 -427
  37. package/dist/commands/uninstall.js.map +1 -1
  38. package/dist/constants/index.js +72 -16
  39. package/dist/constants/index.js.map +1 -1
  40. package/dist/core/add/add-conflict-handler.js +1 -8
  41. package/dist/core/add/add-conflict-handler.js.map +1 -1
  42. package/dist/core/add/add-pipeline.js +12 -10
  43. package/dist/core/add/add-pipeline.js.map +1 -1
  44. package/dist/core/add/add-to-source-pipeline.js +123 -0
  45. package/dist/core/add/add-to-source-pipeline.js.map +1 -0
  46. package/dist/core/add/package-index-updater.js +77 -78
  47. package/dist/core/add/package-index-updater.js.map +1 -1
  48. package/dist/core/add/platform-path-transformer.js +6 -4
  49. package/dist/core/add/platform-path-transformer.js.map +1 -1
  50. package/dist/core/add/source-collector.js +2 -3
  51. package/dist/core/add/source-collector.js.map +1 -1
  52. package/dist/core/apply/apply-pipeline.js +110 -0
  53. package/dist/core/apply/apply-pipeline.js.map +1 -0
  54. package/dist/core/dependency-resolver.js +263 -21
  55. package/dist/core/dependency-resolver.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 +328 -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 +68 -7
  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 +1158 -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 +20 -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 +26 -8
  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 +221 -0
  123. package/dist/core/install/marketplace-handler.js.map +1 -0
  124. package/dist/core/install/path-install-pipeline.js +241 -0
  125. package/dist/core/install/path-install-pipeline.js.map +1 -0
  126. package/dist/core/install/path-package-loader.js +116 -0
  127. package/dist/core/install/path-package-loader.js.map +1 -0
  128. package/dist/core/install/plugin-detector.js +72 -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 +191 -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 +665 -209
  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 +12 -11
  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 +58 -34
  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 +99 -6
  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-clone-registry.js +88 -0
  265. package/dist/utils/git-clone-registry.js.map +1 -0
  266. package/dist/utils/git-clone.js +69 -0
  267. package/dist/utils/git-clone.js.map +1 -0
  268. package/dist/utils/git-spec.js +96 -0
  269. package/dist/utils/git-spec.js.map +1 -0
  270. package/dist/utils/http-client.js +7 -0
  271. package/dist/utils/http-client.js.map +1 -1
  272. package/dist/utils/index-based-installer.js +356 -163
  273. package/dist/utils/index-based-installer.js.map +1 -1
  274. package/dist/utils/install-conflict-handler.js +2 -2
  275. package/dist/utils/install-conflict-handler.js.map +1 -1
  276. package/dist/utils/install-file-discovery.js +18 -13
  277. package/dist/utils/install-file-discovery.js.map +1 -1
  278. package/dist/utils/install-helpers.js +43 -20
  279. package/dist/utils/install-helpers.js.map +1 -1
  280. package/dist/utils/jsonc.js +23 -1
  281. package/dist/utils/jsonc.js.map +1 -1
  282. package/dist/utils/manifest-paths.js +1 -1
  283. package/dist/utils/manifest-paths.js.map +1 -1
  284. package/dist/utils/markdown-frontmatter.js +46 -0
  285. package/dist/utils/markdown-frontmatter.js.map +1 -1
  286. package/dist/utils/package-copy.js +5 -103
  287. package/dist/utils/package-copy.js.map +1 -1
  288. package/dist/utils/package-filters.js +9 -105
  289. package/dist/utils/package-filters.js.map +1 -1
  290. package/dist/utils/package-index-yml.js +27 -6
  291. package/dist/utils/package-index-yml.js.map +1 -1
  292. package/dist/utils/package-input.js +98 -0
  293. package/dist/utils/package-input.js.map +1 -0
  294. package/dist/utils/package-management.js +80 -28
  295. package/dist/utils/package-management.js.map +1 -1
  296. package/dist/utils/package-name-resolution.js +327 -0
  297. package/dist/utils/package-name-resolution.js.map +1 -0
  298. package/dist/utils/package-name.js +18 -16
  299. package/dist/utils/package-name.js.map +1 -1
  300. package/dist/utils/package-versioning.js +2 -33
  301. package/dist/utils/package-versioning.js.map +1 -1
  302. package/dist/utils/package-yml.js +19 -28
  303. package/dist/utils/package-yml.js.map +1 -1
  304. package/dist/utils/path-resolution.js +102 -0
  305. package/dist/utils/path-resolution.js.map +1 -0
  306. package/dist/utils/paths.js +6 -6
  307. package/dist/utils/paths.js.map +1 -1
  308. package/dist/utils/platform-file.js +36 -24
  309. package/dist/utils/platform-file.js.map +1 -1
  310. package/dist/utils/platform-mapper.js +222 -68
  311. package/dist/utils/platform-mapper.js.map +1 -1
  312. package/dist/utils/platform-root-files.js +44 -0
  313. package/dist/utils/platform-root-files.js.map +1 -0
  314. package/dist/utils/platform-utils.js +35 -54
  315. package/dist/utils/platform-utils.js.map +1 -1
  316. package/dist/utils/platform-yaml-merge.js +20 -140
  317. package/dist/utils/platform-yaml-merge.js.map +1 -1
  318. package/dist/utils/prompts.js +92 -7
  319. package/dist/utils/prompts.js.map +1 -1
  320. package/dist/utils/registry-entry-filter.js +50 -27
  321. package/dist/utils/registry-entry-filter.js.map +1 -1
  322. package/dist/utils/registry-paths.js +5 -4
  323. package/dist/utils/registry-paths.js.map +1 -1
  324. package/dist/utils/scope-resolution.js +156 -0
  325. package/dist/utils/scope-resolution.js.map +1 -0
  326. package/dist/utils/source-mutability.js +15 -0
  327. package/dist/utils/source-mutability.js.map +1 -0
  328. package/dist/utils/tarball.js +29 -4
  329. package/dist/utils/tarball.js.map +1 -1
  330. package/dist/utils/version-ranges.js +1 -32
  331. package/dist/utils/version-ranges.js.map +1 -1
  332. package/dist/utils/workspace-index-helpers.js +28 -0
  333. package/dist/utils/workspace-index-helpers.js.map +1 -0
  334. package/dist/utils/workspace-index-ownership.js +100 -0
  335. package/dist/utils/workspace-index-ownership.js.map +1 -0
  336. package/dist/utils/workspace-index-yml.js +173 -0
  337. package/dist/utils/workspace-index-yml.js.map +1 -0
  338. package/examples/custom-subdirs-platform.jsonc +157 -0
  339. package/package.json +7 -2
  340. package/platforms.jsonc +531 -84
  341. package/schemas/map-pipeline-v1.json +256 -0
  342. package/schemas/platforms-v1.json +400 -0
  343. package/specs/README.md +88 -0
  344. package/specs/add/README.md +166 -0
  345. package/specs/agents-claude.md +570 -0
  346. package/specs/agents-opencode.md +622 -0
  347. package/specs/apply/README.md +21 -0
  348. package/specs/apply/apply-behavior.md +58 -0
  349. package/specs/apply/apply-command.md +51 -0
  350. package/specs/apply/conflicts.md +41 -0
  351. package/specs/apply/index-effects.md +81 -0
  352. package/specs/architecture.md +107 -0
  353. package/specs/auth/README.md +17 -0
  354. package/specs/auth/auth-http-contract.md +25 -0
  355. package/specs/auth/cli/credentials.md +39 -0
  356. package/specs/auth/cli/login.md +32 -0
  357. package/specs/auth/cli/logout.md +16 -0
  358. package/specs/claude-mcp.md +1065 -0
  359. package/specs/claude-plugins-marketplace.md +363 -0
  360. package/specs/claude-plugins.md +413 -0
  361. package/specs/cli-options.md +52 -0
  362. package/specs/codex-mcp.md +114 -0
  363. package/specs/commands-overview.md +175 -0
  364. package/specs/directory-layout.md +95 -0
  365. package/specs/install/README.md +12 -4
  366. package/specs/install/git-sources.md +230 -0
  367. package/specs/install/install-behavior.md +483 -73
  368. package/specs/install/package-yml-canonical.md +67 -35
  369. package/specs/install/version-resolution.md +69 -115
  370. package/specs/new/README.md +769 -0
  371. package/specs/new/SUMMARY.md +310 -0
  372. package/specs/new/scope-behavior.md +793 -0
  373. package/specs/pack/README.md +77 -0
  374. package/specs/pack/package-name-resolution.md +330 -0
  375. package/specs/package/README.md +18 -17
  376. package/specs/package/nested-packages-and-parent-packages.md +32 -31
  377. package/specs/package/package-index-yml.md +95 -101
  378. package/specs/package/package-root-layout.md +64 -46
  379. package/specs/package/registry-payload-and-copy.md +50 -44
  380. package/specs/package/universal-content.md +33 -56
  381. package/specs/package-sources.md +248 -0
  382. package/specs/platforms/README.md +52 -0
  383. package/specs/platforms/configuration.md +571 -0
  384. package/specs/platforms/detection.md +552 -0
  385. package/specs/platforms/directory-layout.md +599 -0
  386. package/specs/platforms/examples.md +1146 -0
  387. package/specs/platforms/flow-reference.md +1240 -0
  388. package/specs/platforms/flows.md +1488 -0
  389. package/specs/platforms/map-pipeline.md +801 -0
  390. package/specs/platforms/overview.md +349 -0
  391. package/specs/platforms/specification.md +700 -0
  392. package/specs/platforms/troubleshooting.md +697 -0
  393. package/specs/platforms/universal-converter.md +520 -0
  394. package/specs/push/README.md +1 -0
  395. package/specs/push/push-behavior.md +11 -3
  396. package/specs/push/push-remote-upload.md +1 -1
  397. package/specs/push/push-scoping.md +1 -1
  398. package/specs/push/push-version-selection.md +1 -1
  399. package/specs/registry.md +111 -0
  400. package/specs/remove/README.md +257 -0
  401. package/specs/save/README.md +21 -17
  402. package/specs/save/save-conflict-resolution.md +205 -83
  403. package/specs/save/save-file-discovery.md +6 -4
  404. package/specs/save/save-frontmatter-overrides.md +11 -15
  405. package/specs/save/save-modes-inputs.md +9 -39
  406. package/specs/save/save-naming-scoping.md +4 -4
  407. package/specs/save/save-package-detection.md +13 -13
  408. package/specs/save/save-registry-sync.md +16 -106
  409. package/specs/save/save-versioning.md +80 -0
  410. package/specs/scope-management.md +92 -0
  411. package/specs/set/README.md +520 -0
  412. package/specs/set/set-behavior.md +563 -0
  413. package/specs/show/README.md +483 -0
  414. package/specs/show/show-remote.md +494 -0
  415. package/specs/status/README.md +38 -0
  416. package/specs/uninstall/README.md +231 -0
  417. package/dist/commands/duplicate.js +0 -69
  418. package/dist/commands/duplicate.js.map +0 -1
  419. package/dist/commands/init.js +0 -117
  420. package/dist/commands/init.js.map +0 -1
  421. package/dist/commands/prune.js +0 -357
  422. package/dist/commands/prune.js.map +0 -1
  423. package/dist/commands/tui.js +0 -61
  424. package/dist/commands/tui.js.map +0 -1
  425. package/dist/core/install/index.js +0 -3
  426. package/dist/core/install/index.js.map +0 -1
  427. package/dist/core/push/push-single-file.js +0 -56
  428. package/dist/core/push/push-single-file.js.map +0 -1
  429. package/dist/core/save/package-detection.js +0 -147
  430. package/dist/core/save/package-detection.js.map +0 -1
  431. package/dist/core/save/save-single-file.js +0 -124
  432. package/dist/core/save/save-single-file.js.map +0 -1
  433. package/dist/core/token-store.js +0 -73
  434. package/dist/core/token-store.js.map +0 -1
  435. package/dist/tui/app.js +0 -95
  436. package/dist/tui/app.js.map +0 -1
  437. package/dist/tui/components/package-list.js +0 -73
  438. package/dist/tui/components/package-list.js.map +0 -1
  439. package/dist/tui/controller.js +0 -365
  440. package/dist/tui/controller.js.map +0 -1
  441. package/dist/tui/index.js +0 -12
  442. package/dist/tui/index.js.map +0 -1
  443. package/dist/tui/services/file-index.js +0 -64
  444. package/dist/tui/services/file-index.js.map +0 -1
  445. package/dist/tui/services/packages.js +0 -18
  446. package/dist/tui/services/packages.js.map +0 -1
  447. package/dist/tui/services/save.js +0 -21
  448. package/dist/tui/services/save.js.map +0 -1
  449. package/dist/tui/state/app-state.js +0 -15
  450. package/dist/tui/state/app-state.js.map +0 -1
  451. package/dist/tui/state.js +0 -17
  452. package/dist/tui/state.js.map +0 -1
  453. package/dist/tui/types.js.map +0 -1
  454. package/dist/tui/views/add-file-modal.js +0 -129
  455. package/dist/tui/views/add-file-modal.js.map +0 -1
  456. package/dist/tui/views/file-preview.js +0 -44
  457. package/dist/tui/views/file-preview.js.map +0 -1
  458. package/dist/tui/views/list-packages.js +0 -73
  459. package/dist/tui/views/list-packages.js.map +0 -1
  460. package/dist/tui/views/main-menu.js +0 -29
  461. package/dist/tui/views/main-menu.js.map +0 -1
  462. package/dist/tui/views/manage-view.js +0 -81
  463. package/dist/tui/views/manage-view.js.map +0 -1
  464. package/dist/tui/views/package-hub.js +0 -120
  465. package/dist/tui/views/package-hub.js.map +0 -1
  466. package/dist/tui/views/placeholder.js +0 -24
  467. package/dist/tui/views/placeholder.js.map +0 -1
  468. package/dist/utils/bun-bootstrap.js +0 -72
  469. package/dist/utils/bun-bootstrap.js.map +0 -1
  470. package/dist/utils/entity-id.js +0 -19
  471. package/dist/utils/entity-id.js.map +0 -1
  472. package/dist/utils/package-local-files.js +0 -5
  473. package/dist/utils/package-local-files.js.map +0 -1
  474. package/dist/utils/path-matching.js +0 -74
  475. package/dist/utils/path-matching.js.map +0 -1
  476. package/dist/utils/root-file-operations.js +0 -39
  477. package/dist/utils/root-file-operations.js.map +0 -1
  478. package/dist/utils/root-file-transformer.js +0 -27
  479. package/dist/utils/root-file-transformer.js.map +0 -1
  480. package/dist/utils/yaml-frontmatter.js +0 -25
  481. package/dist/utils/yaml-frontmatter.js.map +0 -1
  482. package/specs/auth/auth-device-flow.md +0 -70
  483. package/specs/login/login-device-flow.md +0 -70
  484. package/specs/platforms.md +0 -193
  485. package/specs/save-pack-versioning.md +0 -224
  486. package/specs/save-pack.md +0 -68
  487. /package/dist/{tui → core/source-resolution}/types.js +0 -0
@@ -0,0 +1,571 @@
1
+ # Platform Configuration
2
+
3
+ ## Configuration File
4
+
5
+ The platform system is configured through a single file: **`platforms.jsonc`**
6
+
7
+ ### File Locations
8
+
9
+ Three configuration files are merged in priority order:
10
+
11
+ 1. **Built-in** (lowest priority)
12
+ - Location: `<cli-install>/platforms.jsonc`
13
+ - Contains: Default configurations for 13 platforms
14
+ - Ships with: CLI installation
15
+
16
+ 2. **Global** (middle priority)
17
+ - Location: `~/.openpackage/platforms.jsonc` or `~/.openpackage/platforms.json`
18
+ - Purpose: User-wide customizations
19
+ - Use case: Personal preferences, custom platforms
20
+
21
+ 3. **Workspace** (highest priority)
22
+ - Location: `<workspace>/.openpackage/platforms.jsonc` or `<workspace>/.openpackage/platforms.json`
23
+ - Purpose: Project-specific overrides
24
+ - Use case: Disable platforms, custom flows, team standards
25
+
26
+ ### File Format
27
+
28
+ Supports both JSONC (with comments) and JSON:
29
+
30
+ ```jsonc
31
+ // platforms.jsonc
32
+ {
33
+ "$schema": "./node_modules/opkg-cli/schemas/platforms-v1.json",
34
+
35
+ "global": {
36
+ "export": [ /* universal export flows */ ],
37
+ "import": [ /* universal import flows */ ]
38
+ },
39
+
40
+ "cursor": {
41
+ "name": "Cursor",
42
+ "rootDir": ".cursor",
43
+ "export": [ /* package → workspace flows */ ],
44
+ "import": [ /* workspace → package flows */ ]
45
+ }
46
+ }
47
+ ```
48
+
49
+ **Note:** If both `.jsonc` and `.json` exist, `.jsonc` takes precedence.
50
+
51
+ ## Configuration Schema
52
+
53
+ ### Top-Level Structure
54
+
55
+ ```typescript
56
+ interface PlatformsConfig {
57
+ $schema?: string // Optional: JSON Schema reference
58
+ global?: { // Optional: Universal flows
59
+ export?: Flow[] // Package → Workspace
60
+ import?: Flow[] // Workspace → Package
61
+ }
62
+ [platformId: string]: { // Per-platform definitions
63
+ name: string
64
+ rootDir: string
65
+ rootFile?: string
66
+ aliases?: string[]
67
+ enabled?: boolean
68
+ export?: Flow[] // Package → Workspace
69
+ import?: Flow[] // Workspace → Package
70
+ }
71
+ }
72
+ ```
73
+
74
+ ### Platform Entry
75
+
76
+ Each platform is defined by a top-level key (lowercase, kebab-case):
77
+
78
+ ```jsonc
79
+ {
80
+ "cursor": { // Platform ID (required, unique)
81
+ "name": "Cursor", // Display name (required)
82
+ "rootDir": ".cursor", // Root directory (required)
83
+ "rootFile": "CURSOR.md", // Optional root file
84
+ "aliases": ["cursorcli"], // Optional CLI shortcuts
85
+ "enabled": true, // Optional (default: true)
86
+ "export": [ // Export flows (package → workspace)
87
+ { "from": "...", "to": "..." }
88
+ ],
89
+ "import": [ // Import flows (workspace → package)
90
+ { "from": "...", "to": "..." }
91
+ ]
92
+ }
93
+ }
94
+ ```
95
+
96
+ #### Required Fields
97
+
98
+ - **`name`** (string) - Human-readable display name
99
+ - Example: `"Cursor"`, `"Claude Code"`, `"Windsurf"`
100
+
101
+ - **`rootDir`** (string) - Platform root directory
102
+ - Example: `".cursor"`, `".claude"`, `".windsurf"`
103
+ - Used for: Detection and file path resolution
104
+
105
+ #### Optional Fields
106
+
107
+ - **`export`** (array) - Export flows (package → workspace, used by install/apply)
108
+ - Minimum: Empty array `[]` (no install/apply transformations)
109
+ - See: [Flows](./flows.md) for flow schema
110
+
111
+ - **`import`** (array) - Import flows (workspace → package, used by save)
112
+ - Minimum: Empty array `[]` (no save transformations)
113
+ - See: [Flows](./flows.md) for flow schema
114
+
115
+ **Note:** At least one of `export`, `import`, or `rootFile` must be defined.
116
+
117
+ #### Optional Fields
118
+
119
+ - **`rootFile`** (string) - Root file at project root
120
+ - Example: `"CLAUDE.md"`, `"GEMINI.md"`
121
+ - Used for: Additional detection signal
122
+
123
+ - **`aliases`** (string[]) - CLI-friendly shortcuts
124
+ - Example: `["cursorcli", "cursor-editor"]`
125
+ - Case-insensitive matching
126
+
127
+ - **`enabled`** (boolean) - Platform activation flag
128
+ - Default: `true`
129
+ - Use case: Disable built-in platforms without removing config
130
+
131
+ ### Global Flows
132
+
133
+ Optional section for universal transformations that apply to all platforms:
134
+
135
+ ```jsonc
136
+ {
137
+ "global": {
138
+ "flows": [
139
+ { "from": "AGENTS.md", "to": "AGENTS.md" },
140
+ { "from": "README.md", "to": "README.md" }
141
+ ]
142
+ }
143
+ }
144
+ ```
145
+
146
+ **Execution order:**
147
+ 1. Global flows execute first
148
+ 2. Platform-specific flows execute second
149
+
150
+ **Use cases:**
151
+ - Universal documentation files
152
+ - Shared configuration files
153
+ - Cross-platform root files
154
+
155
+ ## Merge Behavior
156
+
157
+ ### Merge Strategy
158
+
159
+ Configurations are **deep merged** with last-writer-wins semantics:
160
+
161
+ ```
162
+ workspace config
163
+ ↓ merges over
164
+ global config
165
+ ↓ merges over
166
+ built-in config
167
+ ```
168
+
169
+ ### Platform-Level Merging
170
+
171
+ **Add new platform:**
172
+ ```jsonc
173
+ // workspace/.openpackage/platforms.jsonc
174
+ {
175
+ "my-custom-platform": {
176
+ "name": "My Platform",
177
+ "rootDir": ".myplatform",
178
+ "flows": [ /* ... */ ]
179
+ }
180
+ }
181
+ ```
182
+
183
+ **Override existing platform:**
184
+ ```jsonc
185
+ // workspace/.openpackage/platforms.jsonc
186
+ {
187
+ "cursor": {
188
+ "flows": [
189
+ // Completely replaces built-in flows
190
+ { "from": "rules/*.md", "to": ".cursor/custom/*.md" }
191
+ ]
192
+ }
193
+ }
194
+ ```
195
+
196
+ **Disable platform:**
197
+ ```jsonc
198
+ // workspace/.openpackage/platforms.jsonc
199
+ {
200
+ "windsurf": {
201
+ "enabled": false // Platform exists but won't execute
202
+ }
203
+ }
204
+ ```
205
+
206
+ ### Field-Level Merging
207
+
208
+ | Field | Merge Behavior | Example |
209
+ |-------|----------------|---------|
210
+ | `name` | Replace | Workspace value replaces built-in |
211
+ | `rootDir` | Replace | Workspace value replaces built-in |
212
+ | `rootFile` | Replace | Workspace value replaces built-in |
213
+ | `aliases` | Replace | Workspace array replaces built-in array |
214
+ | `enabled` | Replace | Workspace boolean replaces built-in |
215
+ | `flows` | Replace | Workspace flows replace built-in flows entirely |
216
+
217
+ **Important:** Flows are **not merged** at array level. The entire `flows` array is replaced.
218
+
219
+ ### Global Flows Merging
220
+
221
+ Global flows are merged at the array level:
222
+
223
+ ```jsonc
224
+ // built-in
225
+ { "global": { "flows": [A, B] } }
226
+
227
+ // workspace override
228
+ { "global": { "flows": [C] } }
229
+
230
+ // result
231
+ { "global": { "flows": [C] } } // Workspace replaces built-in
232
+ ```
233
+
234
+ ## Validation
235
+
236
+ ### Load-Time Validation
237
+
238
+ Configurations are validated when loaded:
239
+
240
+ - **Required fields** - Must be present and non-empty
241
+ - **Type checking** - Fields must match expected types
242
+ - **Unique IDs** - Platform IDs must be unique
243
+ - **Flow schema** - Each flow must be valid
244
+
245
+ **On error:**
246
+ ```
247
+ Error: Platform 'cursor': missing required field 'rootDir'
248
+ Error: Platform 'claude': invalid flow at index 2: missing 'from' field
249
+ ```
250
+
251
+ ### Manual Validation
252
+
253
+ Validate configuration explicitly:
254
+
255
+ ```bash
256
+ # Validate current workspace configuration
257
+ opkg validate platforms
258
+
259
+ # Strict mode (comprehensive checks)
260
+ opkg validate platforms --strict
261
+ ```
262
+
263
+ **Validation checks:**
264
+ - Schema compliance
265
+ - Required fields present
266
+ - Valid transform names
267
+ - Valid JSONPath expressions
268
+ - No circular dependencies
269
+
270
+ ## Schema Versioning
271
+
272
+ ### JSON Schema Reference
273
+
274
+ Reference the JSON Schema for IDE support:
275
+
276
+ ```jsonc
277
+ {
278
+ "$schema": "./node_modules/opkg-cli/schemas/platforms-v1.json",
279
+
280
+ "cursor": { /* ... */ }
281
+ }
282
+ ```
283
+
284
+ **Benefits:**
285
+ - Autocomplete in VS Code, Cursor, etc.
286
+ - Inline error detection
287
+ - Field documentation on hover
288
+
289
+ ### Schema Versions
290
+
291
+ - **v1** - Current version with flows-based configuration
292
+ - Version inferred from schema path or CLI version
293
+
294
+ ### Schema Location Options
295
+
296
+ **Relative to node_modules:**
297
+ ```jsonc
298
+ { "$schema": "./node_modules/opkg-cli/schemas/platforms-v1.json" }
299
+ ```
300
+
301
+ **Relative to workspace:**
302
+ ```jsonc
303
+ { "$schema": "./schemas/platforms-v1.json" }
304
+ ```
305
+
306
+ **Absolute URL (for global config):**
307
+ ```jsonc
308
+ { "$schema": "https://cdn.openpackage.ai/schemas/platforms-v1.json" }
309
+ ```
310
+
311
+ ## Common Configuration Patterns
312
+
313
+ ### Pattern 1: Global Override
314
+
315
+ Customize a built-in platform for all projects:
316
+
317
+ ```jsonc
318
+ // ~/.openpackage/platforms.jsonc
319
+ {
320
+ "cursor": {
321
+ "flows": [
322
+ {
323
+ "from": "rules/*.md",
324
+ "to": ".cursor/my-rules/*.mdc"
325
+ }
326
+ ]
327
+ }
328
+ }
329
+ ```
330
+
331
+ ### Pattern 2: Workspace Customization
332
+
333
+ Override for specific project:
334
+
335
+ ```jsonc
336
+ // <workspace>/.openpackage/platforms.jsonc
337
+ {
338
+ "cursor": {
339
+ "rootDir": ".cursor-custom", // Non-standard directory
340
+ "flows": [
341
+ { "from": "rules/*.md", "to": ".cursor-custom/rules/*.md" }
342
+ ]
343
+ }
344
+ }
345
+ ```
346
+
347
+ ### Pattern 3: Custom Platform
348
+
349
+ Add support for proprietary platform:
350
+
351
+ ```jsonc
352
+ // <workspace>/.openpackage/platforms.jsonc
353
+ {
354
+ "my-ai-platform": {
355
+ "name": "My AI Platform",
356
+ "rootDir": ".myai",
357
+ "rootFile": "MYAI.md",
358
+ "flows": [
359
+ { "from": "rules/*.md", "to": ".myai/prompts/*.md" },
360
+ { "from": "agents/*.md", "to": ".myai/assistants/*.yaml" }
361
+ ]
362
+ }
363
+ }
364
+ ```
365
+
366
+ ### Pattern 4: Disable Platforms
367
+
368
+ Prevent flows from executing:
369
+
370
+ ```jsonc
371
+ // <workspace>/.openpackage/platforms.jsonc
372
+ {
373
+ "windsurf": { "enabled": false },
374
+ "cline": { "enabled": false },
375
+ "roo-code": { "enabled": false }
376
+ }
377
+ ```
378
+
379
+ ### Pattern 5: Minimal Override
380
+
381
+ Keep built-in flows but change one setting:
382
+
383
+ ```jsonc
384
+ // <workspace>/.openpackage/platforms.jsonc
385
+ {
386
+ "cursor": {
387
+ "rootDir": ".cursor-v2"
388
+ // Note: Must re-specify flows or they'll be lost
389
+ }
390
+ }
391
+ ```
392
+
393
+ **Warning:** Partial overrides require re-specifying `flows` array.
394
+
395
+ ## Adding Custom Platforms
396
+
397
+ ### Step 1: Define Platform
398
+
399
+ Create workspace config:
400
+
401
+ ```jsonc
402
+ // <workspace>/.openpackage/platforms.jsonc
403
+ {
404
+ "my-platform": {
405
+ "name": "My Platform",
406
+ "rootDir": ".myplatform",
407
+ "flows": [] // Start with empty flows
408
+ }
409
+ }
410
+ ```
411
+
412
+ ### Step 2: Create Platform Directory
413
+
414
+ ```bash
415
+ mkdir .myplatform
416
+ ```
417
+
418
+ ### Step 3: Add Flows
419
+
420
+ ```jsonc
421
+ {
422
+ "my-platform": {
423
+ "name": "My Platform",
424
+ "rootDir": ".myplatform",
425
+ "flows": [
426
+ {
427
+ "from": "rules/*.md",
428
+ "to": ".myplatform/rules/*.md"
429
+ }
430
+ ]
431
+ }
432
+ }
433
+ ```
434
+
435
+ ### Step 4: Test
436
+
437
+ ```bash
438
+ # Validate configuration
439
+ opkg validate platforms
440
+
441
+ # Test with dry-run
442
+ opkg install @user/some-package --dry-run
443
+ ```
444
+
445
+ ### Step 5: Iterate
446
+
447
+ Add more flows as needed. See [Flow Reference](./flow-reference.md) for all options.
448
+
449
+ ## Configuration Tips
450
+
451
+ ### 1. Start Simple
452
+
453
+ Begin with minimal flows and add complexity incrementally:
454
+
455
+ ```jsonc
456
+ {
457
+ "flows": [
458
+ { "from": "rules/*.md", "to": ".platform/rules/*.md" }
459
+ ]
460
+ }
461
+ ```
462
+
463
+ ### 2. Test Changes
464
+
465
+ Always validate and dry-run:
466
+
467
+ ```bash
468
+ opkg validate platforms --strict
469
+ opkg install @user/package --dry-run
470
+ ```
471
+
472
+ ### 3. Version Control
473
+
474
+ Commit workspace config to share with team:
475
+
476
+ ```bash
477
+ git add .openpackage/platforms.jsonc
478
+ ```
479
+
480
+ ### 4. Document Overrides
481
+
482
+ Add comments explaining why you override:
483
+
484
+ ```jsonc
485
+ {
486
+ "cursor": {
487
+ // Custom directory structure for monorepo
488
+ "rootDir": ".cursor-workspace",
489
+ "flows": [ /* ... */ ]
490
+ }
491
+ }
492
+ ```
493
+
494
+ ### 5. Use Schema
495
+
496
+ Reference schema for IDE support:
497
+
498
+ ```jsonc
499
+ {
500
+ "$schema": "./node_modules/opkg-cli/schemas/platforms-v1.json"
501
+ }
502
+ ```
503
+
504
+ ## Troubleshooting
505
+
506
+ ### Configuration Not Loading
507
+
508
+ **Check file location:**
509
+ ```bash
510
+ ls -la ~/.openpackage/platforms.jsonc
511
+ ls -la .openpackage/platforms.jsonc
512
+ ```
513
+
514
+ **Check JSON syntax:**
515
+ ```bash
516
+ opkg validate platforms
517
+ ```
518
+
519
+ ### Flows Not Executing
520
+
521
+ **Check platform detection:**
522
+ ```bash
523
+ opkg status # Shows detected platforms
524
+ ```
525
+
526
+ **Check enabled flag:**
527
+ ```jsonc
528
+ {
529
+ "cursor": {
530
+ "enabled": true // Must be true or omitted
531
+ }
532
+ }
533
+ ```
534
+
535
+ ### Merge Not Working
536
+
537
+ **Remember:** Flows array is replaced entirely, not merged.
538
+
539
+ **Solution:** Copy built-in flows if you want to extend:
540
+ ```jsonc
541
+ {
542
+ "cursor": {
543
+ "flows": [
544
+ // Copy built-in flows here
545
+ { "from": "rules/*.md", "to": ".cursor/rules/*.mdc" },
546
+ // Add your custom flow
547
+ { "from": "custom/*.md", "to": ".cursor/custom/*.md" }
548
+ ]
549
+ }
550
+ }
551
+ ```
552
+
553
+ ### Schema Errors
554
+
555
+ **Update schema path** if moved:
556
+ ```jsonc
557
+ {
558
+ "$schema": "./node_modules/opkg-cli/schemas/platforms-v1.json"
559
+ }
560
+ ```
561
+
562
+ **Reinstall CLI** if schema missing:
563
+ ```bash
564
+ npm install -g opkg-cli
565
+ ```
566
+
567
+ ## Next Steps
568
+
569
+ - **Learn flow syntax:** See [Flows](./flows.md)
570
+ - **View flow options:** See [Flow Reference](./flow-reference.md)
571
+ - **See examples:** See [Examples](./examples.md)