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
@@ -1,224 +0,0 @@
1
- ### Save / Pack Versioning Specification
2
-
3
- This document captures the agreed behavior for versioning when splitting `save` and `pack`, and how `package.yml`, `package.index.yml`, and registry metadata interact.
4
-
5
- ---
6
-
7
- ### 1. Version Sources and Responsibilities
8
-
9
- - **`<pkg>/package.yml`**
10
- - **Owner**: User, with limited, predictable CLI auto‑bump.
11
- - **Role**: Declares the **next intended stable version** for the package.
12
- - **Version field semantics**:
13
- - Before `pack`, represents the **stable version `S` that will be published** (e.g. `1.2.3`, `3.0.0`).
14
- - After a successful `pack` of `S`, the workspace (and any fresh installs of `<pkg>@S`) typically have `package.yml.version = S` recorded as the last packed stable.
15
- - Is the **canonical source of truth** any time the CLI must choose a version.
16
- - **Mutations**:
17
- - **User** can edit this manually at any time (e.g. jump from `1.2.4` to `2.0.0` for a major).
18
- - **CLI**:
19
- - `pack` **never** mutates `package.yml.version`.
20
- - `save` may **optionally auto‑bump** `package.yml.version` from `S` to `patch(S)` when it detects that:
21
- - `package.index.yml.workspace.version` is a **non‑prerelease** version, and
22
- - Its base stable line matches `package.yml.version`.
23
-
24
- - **`<pkg>/package.index.yml`**
25
- - **Owner**: CLI (tool-managed).
26
- - **Role**:
27
- - Tracks the **last effective version saved from this workspace** (WIP or stable).
28
- - Tracks `files` mapping from registry-like keys to installed workspace paths (same as current behavior).
29
- - **Fields**:
30
- - `workspace.version`:
31
- - After `save`: the **exact WIP version** (e.g. `1.2.3-<t>.<w>`).
32
- - After `pack`: the **exact stable version** that was packed (e.g. `1.2.3`).
33
- - `workspace.hash`:
34
- - 8-character hash derived from the current workspace path (`cwd`).
35
- - Used to scope cleanup of WIP registry directories to this workspace.
36
- - `files`: last saved file mapping snapshot.
37
- - **Priority vs `package.yml`**:
38
- - **Advisory only** for continuity (e.g. showing last WIP or stable).
39
- - When `package.yml.version` and `package.index.yml.workspace.version` disagree, **`package.yml.version` wins**.
40
-
41
- - **Registry layout (unified for WIP and stable)**
42
- - Stable copies:
43
- - Stored under: `~/.openpackage/registry/<pkg>/<version>/...` with full contents.
44
- - WIP copies:
45
- - For WIP saves, the registry also contains a **full copy** of the package:
46
- - Path: `~/.openpackage/registry/<pkg>/<wipVersion>/...`.
47
- - Contents mirror the workspace package at the time of `save`, just like stable copies.
48
- - There is **no special `package.link.yml` indirection**; WIP versions are materialized the same way as stable versions, differentiated only by their version strings.
49
-
50
- ---
51
-
52
- ### 2. WIP Version Scheme
53
-
54
- - **Goal**:
55
- - Keep `package.yml.version` as a clean, user-visible **next stable target**.
56
- - Ensure WIP versions:
57
- - Are clearly attributable to a workspace and save moment.
58
- - Are semver pre‑releases of the exact version the user intends to ship next.
59
-
60
- - **Given**:
61
- - `package.yml.version = S` (next intended stable string, e.g. `1.2.3`).
62
-
63
- - **Definitions**:
64
- - A **WIP version** is of the form:
65
- - `S-<t>.<w>`
66
- - `t` (time component):
67
- - A **fixed-width, zero-padded base36 encoding of epoch seconds** (or a similar monotonically increasing time base).
68
- - Example (illustrative): `000fz8`, `000fz9`, `000fza`, ...
69
- - `w` (workspace component):
70
- - A **tiny workspace tag** derived from the current workspace path, e.g. the first **3 base36 characters** of an 8-character `workspace.hash`.
71
- - Example: `a3k`, `k7p`.
72
- - Example full WIP: `1.2.3-000fz8.a3k`.
73
-
74
- - **Semver ordering**:
75
- - For the above:
76
- - All `S-<t>.<w>` are **semver pre-releases of `S`**, and:
77
- - For a fixed-width base36 `t`, lexicographic order of `<t>` matches time order.
78
- - Therefore **`S-<t>.<w> < S`** always holds, and newer saves for the same `S` have larger `<t>` values.
79
- - This preserves:
80
- - A clean, user-chosen stable `S` in `package.yml`.
81
- - WIP versions as **pre-releases of that exact upcoming stable**.
82
-
83
- ---
84
-
85
- ### 3. `save` Command Versioning Behavior
86
-
87
- > **CLI contract**:
88
- > - `save` has **no `--bump` option**.
89
- > - `save` does **not** support `<pkg>@<version>` syntax; it always derives its versioning behavior from `package.yml.version` for the target package.
90
- > - It always computes the WIP version automatically from `package.yml.version` and the current workspace state.
91
-
92
- #### 3.1 Inputs considered
93
-
94
- On each `save <pkg>`:
95
-
96
- - Read:
97
- - `package.yml.version` → `S` (next intended stable).
98
- - `package.index.yml.workspace.version` if present → `lastWorkspaceVersion`.
99
- - `workspaceHash` derived from `cwd`.
100
-
101
- - Compute:
102
- - The **effective stable base `S_eff`** to use for WIP:
103
- - Normally `S_eff = S`.
104
- - If `package.index.yml.workspace.version` is present and:
105
- - Is a **non‑prerelease** semver `S_last`, and
106
- - `base(S_last) === S`,
107
- - then treat this as **“just packed (or installed) `S`”** and set `S_eff = patch(S)`.
108
- - `wipVersion = S_eff-<t>.<w>`, where:
109
- - `t` is computed from current epoch seconds and encoded as **fixed-width base36**.
110
- - `w` is derived from `workspaceHash` (e.g. 2–3 leading base36 chars).
111
-
112
- #### 3.2 Normal case: `package.yml` and index agree on version line
113
-
114
- Examples:
115
-
116
- - `package.yml.version = 1.2.3`, `package.index.yml.workspace.version` is:
117
- - Missing (first save), or
118
- - A WIP like `1.2.3-000fz8.a3k`, or
119
- - A stable like `1.2.3` from a previous `pack` or install.
120
-
121
- Behavior:
122
-
123
- - If `package.index.yml.workspace.version` is **missing**:
124
- - Treat this as the **first save**; generate a WIP on the current line:
125
- - `S_eff = S`, `wipVersion = S-<t>.<w>`.
126
- - If `package.index.yml.workspace.version` is **WIP or other pre-release** derived from `S`:
127
- - Continue the WIP stream on that same stable line:
128
- - `S_eff = S`, `wipVersion = S-<tNew>.<w>`.
129
- - If `package.index.yml.workspace.version` is a **stable** `S` whose base matches `package.yml.version`:
130
- - Treat this as **“S has been packed/installed; start the next patch line”**:
131
- - Compute `Snext = patch(S)`.
132
- - Use `S_eff = Snext` and `wipVersion = Snext-<t>.<w>`.
133
- - Optionally auto‑bump `package.yml.version` to `Snext` after a successful save to keep the workspace line aligned.
134
-
135
- - Effect:
136
- - A new WIP copy is saved to the registry at `<pkg>/<wipVersion>/...`.
137
- - Older WIP copies for the **same `workspaceHash`** are cleaned up (registry directories).
138
-
139
- #### 3.3 Out-of-sync case: user manually changes `package.yml.version`
140
-
141
- Scenario:
142
-
143
- - Previous state:
144
- - `package.index.yml.workspace.version = 1.2.3-000fz8.a3k` or `1.2.3`.
145
- - User edits:
146
- - `package.yml.version = 3.0.0` (or any different stable).
147
- - User runs `save`.
148
-
149
- Behavior:
150
-
151
- - The CLI recomputes:
152
- - `S = 3.0.0`.
153
- - Treat this as a **reset to a new version line**.
154
- - Log a clear message, for example:
155
- - “Detected mismatch: `package.yml` version is `3.0.0`, last workspace version was `1.2.3-000fz8.a3k`. Starting a new WIP sequence from `3.0.0-<t>.<w>` based on `package.yml`.”
156
- - Generate `wipVersion = 3.0.0-<t>.<w>`.
157
-
158
- - Writes:
159
- - `package.yml.version` stays at the user-specified `3.0.0` (unless a later save cycle triggers an auto‑bump based on a new stable line).
160
- - `package.index.yml.workspace.version` becomes `3.0.0-<t>.<w>` (when maintained by the CLI).
161
- - Registry WIP copy is created accordingly, with old WIPs for this `workspaceHash` cleaned up.
162
-
163
- - This rule is **the same** whether the old `lastWorkspaceVersion` was WIP or stable:
164
- - In all mismatched cases, `package.yml` wins and the WIP stream restarts from `package.yml.version`.
165
-
166
- ---
167
-
168
- ### 4. `pack` Command Versioning Behavior
169
-
170
- `pack <pkg>` is the “promote to stable copy” operation.
171
-
172
- - Inputs:
173
- - `package.yml.version = S` (next intended stable).
174
- - `package.index.yml.workspace.version` (might be WIP or a previous stable).
175
- - **No `--bump` option**: version bumping is expressed by the user editing `package.yml.version` directly or via the `save` auto‑bump rule.
176
- - **No `<pkg>@<version>` syntax**: `pack` always uses `package.yml.version` as the target stable version; users change the target by editing `package.yml.version`, not via `@<version>` on the CLI.
177
-
178
- - Behavior:
179
- - **Target stable version**:
180
- - `pack` **always publishes exactly `S`** as the stable version.
181
- - Example:
182
- - `package.yml.version = 1.2.3`.
183
- - WIPs are `1.2.3-<t>.<w>` for various `<t>`/`<w>`.
184
- - `pack` publishes `1.2.3` as stable.
185
- - If there is no existing WIP stream, `pack` still publishes `S` directly from the current workspace files.
186
- - **Registry**:
187
- - Copies full package contents to `registry/<pkg>/<S>/...`.
188
- - **Index**:
189
- - Sets `package.index.yml.workspace.version` to that stable version `S`.
190
- - Refreshes `files` mapping based on the just-packed snapshot.
191
- - **WIP cleanup**:
192
- - Removes this workspace’s WIP registry directories for that package, using `workspaceHash`.
193
-
194
- - `package.yml.version` after `pack`:
195
- - `pack` **does not mutate** `package.yml.version`.
196
- - After a successful `pack` of `S`:
197
- - The workspace (and any fresh installs of `<pkg>@S`) will typically have `package.yml.version = S` and `package.index.yml.workspace.version = S`.
198
- - The transition to the next development cycle (e.g. `Snext = patch(S)`) is handled by the **`save` flow**, which:
199
- - Detects when `package.index.yml.workspace.version` is a **non‑prerelease** version whose base equals `package.yml.version`.
200
- - Uses `patch(S)` as the base for new WIP versions.
201
- - May auto‑bump `package.yml.version` to `patch(S)` as part of that `save` operation.
202
- - If `pack` fails, `package.index.yml` and `package.yml.version` MUST NOT be changed.
203
-
204
- ---
205
-
206
- ### 5. Invariants and UX Guarantees
207
-
208
- - **Priority**:
209
- - `package.yml.version` is always the **canonical** version declaration for the **next** stable release.
210
- - `package.index.yml.workspace.version` is always **derived**, never the authority (it reflects the last WIP or last packed stable).
211
-
212
- - **Semver correctness**:
213
- - For any stable `S` and its associated WIP stream:
214
- - `S-<t>.<w> < S` always holds for all WIP versions derived from `S`.
215
-
216
- - **User mental model**:
217
- - “The version in `package.yml` is the **next stable** I’m working toward.”
218
- - “`save` creates WIP versions as pre-releases of that version (`<version>-<t>.<w>`) and, when the last workspace version is a stable `S`, can auto‑bump the line to `patch(S)` for the next cycle.”
219
- - “`pack` publishes that exact version and records it as the last packed stable; it does **not** change `package.yml.version` directly.”
220
-
221
- - **Workspace isolation**:
222
- - WIP registry entries are always scoped by `workspaceHash`, and `save`/`pack` clean up WIPs only for the current workspace.
223
-
224
-
@@ -1,68 +0,0 @@
1
- I would like to split the `save` command into two separate commands: `save` and `pack`, **but both should use the same “full copy into local registry” model** (no special link-only WIP layout).
2
-
3
- For `save` command:
4
- - Perform platform sync (same as current `save`).
5
- - Compute the next WIP version (see `save-pack-versioning.md`).
6
- - **Copy the entire package** from `.openpackage/packages/<pkg>` into the local registry under the computed WIP version (same copy logic as existing `save --stable` / `pack`).
7
- - On each save, remove older WIP versions for the same workspace (per `workspaceHash`) to keep the registry clean.
8
- - Prefer not to update the `package.yml` version number; instead, keep WIP/stable details in `package.index.yml` and registry metadata.
9
- - The `save` command always saves the next prerelease version based on the current stable (for example: `1.0.0` then `1.0.1-000fz8.a3k`, `1.0.1-000fz9.a3k`, `1.0.1-000fza.a3k`).
10
- - **Usage:** `opkg save` (cwd package), `opkg save <package>`, or `opkg save <package> <path>` (runs add for the path, then saves).
11
-
12
- For `pack` command:
13
- - This is essentially the same as “promote current workspace state to a stable version”.
14
- - The stable version is basically the current workspace version with the prerelease tag removed (the base `package.yml.version`).
15
- - **Copy the entire package** from `.openpackage/packages/<pkg>` into the local registry under the stable version (use the same copy logic as for `save` WIP copies).
16
-
17
- ### Implementation Plan: Split `save` → `save` (WIP Pointer) + `pack` (Stable Copy)
18
-
19
- This plan refactors the existing `save` command into two orthogonal ones, minimizing disruption:
20
- - **`save <pkg>`**: Create a WIP prerelease version by copying the full package into the registry (auto-next prerelease).
21
- - **`pack <pkg>`**: Full stable copy (reuse ~90% existing copy logic, strip prerelease).
22
-
23
- **Goals Achieved**:
24
- - `save`: Fast iterative dev (sync + full copy), per-workspace cleanup, minimal version coupling.
25
- - `pack`: "Promote" to stable (copy snapshot).
26
- - Versioning: Auto-bump PATCH on first WIP from stable base; subsequent WIP reuse base.
27
- - No staging `package.yml` mutation (per pref—version in registry metadata only).
28
- - Registry layout is unified: **both WIP and stable versions are stored as full copies** under `~/.openpackage/registry/<pkg>/<version>/...`.
29
-
30
- **Assumptions** (based on codebase snapshot):
31
- - Pkg staging: `<cwd>/.openpackage/packages/<pkg>/` (files + `package.yml` w/ base version).
32
- - Registry: `~/.openpackage/registry/<pkg>/<full-version>/` (dirs w/ files/index.yml).
33
- - Existing `save.ts`: Orchestrates sync → version gen → copy → yml.
34
- - wsHash: 8-char SHA256(cwd) via `hash-utils.ts`.
35
- - ts: 6-char base36 epoch sec pad via new util.
36
- - Commands auto-detect `<pkg>` via context/discovery if omitted.
37
-
38
- **Migration**:
39
- - Remove `save stable`, now favor `pack`.
40
- - `save` now always WIP.
41
-
42
- ### Questions for Clarification
43
- 1. **Base version source/target**:
44
- - Where read base for `save` bump? Staging `package.yml`? Registry latest stable? User arg?
45
- - Confirm: Staging `package.yml` stays unchanged (e.g., always `1.0.0`), full WIP only in registry `index.yml`?
46
- 2. **Platform sync details**: What does "platform sync" entail exactly? Run `platform-sync.ts` + `root-files-sync.ts` always pre-save/pack? Any pkg-specific?
47
- 3. **Local staging after save**: Keep files at `packages/<pkg>` (source for full copy), no special renaming needed.
48
- 4. **Current save bumps?**: Does existing `save` auto-bump versions (how)? Bump minor/patch? Need to read `save/package-yml-versioning.ts`?
49
- 5. **Pack cleanup**: Auto-rm this WS's WIP on pack? Or flag?
50
- 6. **CLI syntax**: `save [pkg]` (infer from cwd)? `save --base 1.0.1`? `pack --force`?
51
- 7. **WIP promotion**: Typical flow `save` → iterate → `pack`? Any `save --pack` shortcut?
52
- 8. **Multi-pkg**: Commands handle one `<pkg>` or all?
53
- 9. **Errors**: If registry copy is corrupted on install, fallback to what? (Registry copies should be self-contained.)
54
- 10. **wsHash precision**: 8 chars enough (1-in-10^15 collision)? Full SHA if paranoid.
55
-
56
- Feedback:
57
- - Completely remove `save --stable` stable option, no backwards compatability, `pack` command onwards
58
- Clarification:
59
- 1. Read base for save bump using staging ws .openpackage/packages/<pkg>/package.yml. There is an existing .openpackage/packages/<pkg>/package.index.yml file with version and files fields. For WIP builds, package.yml version will always show base version, the package.index.yml version will show/be updated to exact version, whether stable or wip.
60
- 2. Please take a look at the current implementation of save.ts, it should include both platform-sync and root-files-sync. Basically any existing functionality should remain intact, and be used for both save and pack, only changes are the ones I mentioned explicitly.
61
- 3. Keep files at `packages/<pkg>` after save, no changes
62
- 4. Current save performs auto bumping to wip on saves, should be pretty much the same except with new prerelease timestamp and ws stamps. Please read save.ts related files
63
- 5. Yes, auto clean up after pack, rm the WS's WIP on pack
64
- 6. Yes perform save [pkg], no save --base, pretty much use existing. Yes to implementing `pack --force` option.
65
- 7. No `save --pack` shortcut, since `pack` should already do everything save does but more, keep distinct
66
- 8. One <pkg> per command (in general, keep as close to current implementation as possible except for specifically mentioned changes)
67
- 9. Let's focus on save and pack commands ONLY for now, it's ok if install breaks, we will work on it next in a different batch/session
68
- 10. 8 chars is enough for now, I may even shorten it (not expecting a lot of workspaces on single machine)
File without changes