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,520 @@
1
+ # Set Command Specification
2
+
3
+ ## Overview
4
+
5
+ The `opkg set` command updates manifest fields in `openpackage.yml` for mutable package sources. It provides both interactive and batch modes for modifying package metadata.
6
+
7
+ ## Command Signature
8
+
9
+ ```bash
10
+ opkg set [package] [options]
11
+ ```
12
+
13
+ ## Arguments
14
+
15
+ - `[package]` (optional) - Package name or path
16
+ - If omitted, operates on the package in the current directory
17
+ - Can be a package name (searches workspace/global) or a path
18
+
19
+ ## Options
20
+
21
+ ### Field Options
22
+
23
+ - `--ver <version>` - Set package version (must be valid semver)
24
+ - `--name <name>` - Set package name
25
+ - `--description <desc>` - Set package description
26
+ - `--keywords <keywords>` - Set keywords (space-separated)
27
+ - `--author <author>` - Set package author
28
+ - `--license <license>` - Set license identifier
29
+ - `--homepage <url>` - Set homepage URL
30
+ - `--private` - Mark package as private
31
+
32
+ ### Behavior Options
33
+
34
+ - `-f, --force` - Skip confirmation prompts
35
+ - `--non-interactive` - Require flags, no prompting (for CI/CD)
36
+ - `-h, --help` - Display help for command
37
+
38
+ ## Modes of Operation
39
+
40
+ ### Interactive Mode
41
+
42
+ Triggered when no field options are provided. Prompts user for each field, showing current values as defaults.
43
+
44
+ ```bash
45
+ # Interactive update of CWD package
46
+ opkg set
47
+
48
+ # Interactive update of named package
49
+ opkg set my-package
50
+ ```
51
+
52
+ **Behavior:**
53
+ 1. Displays current package information
54
+ 2. Prompts for each field with current value as default
55
+ 3. Shows change diff before applying
56
+ 4. Requires confirmation (unless `--force`)
57
+ 5. Only updates fields that changed
58
+
59
+ ### Batch Mode
60
+
61
+ Triggered when one or more field options are provided. Updates only specified fields.
62
+
63
+ ```bash
64
+ # Update version
65
+ opkg set my-package --ver 1.2.0
66
+
67
+ # Update multiple fields
68
+ opkg set my-package --ver 2.0.0 --description "New description"
69
+
70
+ # Update CWD package
71
+ opkg set --ver 0.5.0
72
+ ```
73
+
74
+ **Behavior:**
75
+ 1. Validates all provided field values
76
+ 2. Shows change diff
77
+ 3. Applies changes immediately (no confirmation unless interactive mode)
78
+
79
+ ### Non-Interactive Mode
80
+
81
+ Used for CI/CD pipelines. Requires at least one field flag.
82
+
83
+ ```bash
84
+ opkg set my-package --ver 1.0.0 --non-interactive
85
+ ```
86
+
87
+ **Behavior:**
88
+ - Errors if no field flags provided
89
+ - No prompts or confirmations
90
+ - Fails fast on validation errors
91
+
92
+ ## Package Resolution
93
+
94
+ The command searches for packages in the following order:
95
+
96
+ 1. **Current directory** (if no package argument)
97
+ - Looks for `openpackage.yml` in CWD
98
+
99
+ 2. **Workspace packages** (if package name provided)
100
+ - `.openpackage/packages/<package-name>/`
101
+
102
+ 3. **Global packages** (if package name provided)
103
+ - `~/.openpackage/packages/<package-name>/`
104
+
105
+ **Registry packages are excluded** - they are immutable and cannot be modified.
106
+
107
+ ## Field Specifications
108
+
109
+ ### Version Field (`--ver`)
110
+
111
+ **Format:** Valid semantic version
112
+
113
+ **Validation:**
114
+ - Must be valid semver (e.g., `1.0.0`, `2.1.3-beta.1`)
115
+ - Validated using semver library
116
+
117
+ **Examples:**
118
+ ```bash
119
+ opkg set --ver 1.2.3
120
+ opkg set --ver 2.0.0-alpha.1
121
+ opkg set --ver 0.1.0
122
+ ```
123
+
124
+ ### Name Field (`--name`)
125
+
126
+ **Format:** Package name string
127
+
128
+ **Validation:**
129
+ - Must contain only: `a-z`, `0-9`, `.`, `_`, `-`
130
+ - Automatically normalized to lowercase
131
+ - No spaces allowed
132
+ - Supports scoped names: `@scope/package-name`
133
+
134
+ **Examples:**
135
+ ```bash
136
+ opkg set --name my-package
137
+ opkg set --name @myorg/my-package
138
+ opkg set --name package.name
139
+ ```
140
+
141
+ ### Description Field (`--description`)
142
+
143
+ **Format:** Plain text string
144
+
145
+ **Validation:** None (any string allowed)
146
+
147
+ **Examples:**
148
+ ```bash
149
+ opkg set --description "My awesome package"
150
+ opkg set --description "" # Clear description
151
+ ```
152
+
153
+ ### Keywords Field (`--keywords`)
154
+
155
+ **Format:** Space-separated string
156
+
157
+ **Processing:**
158
+ - Split by whitespace
159
+ - Empty strings filtered out
160
+ - Stored as array in YAML
161
+
162
+ **Examples:**
163
+ ```bash
164
+ opkg set --keywords "ai coding assistant"
165
+ # Results in: keywords: [ai, coding, assistant]
166
+
167
+ opkg set --keywords "test"
168
+ # Results in: keywords: [test]
169
+ ```
170
+
171
+ ### Author Field (`--author`)
172
+
173
+ **Format:** Plain text string
174
+
175
+ **Validation:** None (any string allowed)
176
+
177
+ **Examples:**
178
+ ```bash
179
+ opkg set --author "John Doe"
180
+ opkg set --author "Jane Smith <jane@example.com>"
181
+ ```
182
+
183
+ ### License Field (`--license`)
184
+
185
+ **Format:** License identifier string
186
+
187
+ **Validation:** None (any string allowed, but should be valid SPDX identifier)
188
+
189
+ **Examples:**
190
+ ```bash
191
+ opkg set --license MIT
192
+ opkg set --license "Apache-2.0"
193
+ opkg set --license ISC
194
+ ```
195
+
196
+ ### Homepage Field (`--homepage`)
197
+
198
+ **Format:** URL string
199
+
200
+ **Validation:**
201
+ - Must be valid URL format
202
+ - Typically starts with `http://` or `https://`
203
+
204
+ **Examples:**
205
+ ```bash
206
+ opkg set --homepage https://example.com
207
+ opkg set --homepage https://github.com/user/repo
208
+ ```
209
+
210
+ ### Private Field (`--private`)
211
+
212
+ **Format:** Boolean flag
213
+
214
+ **Behavior:**
215
+ - Flag present = `true`
216
+ - Flag absent = no change (or `false` in interactive mode)
217
+
218
+ **Examples:**
219
+ ```bash
220
+ opkg set --private
221
+ # Results in: private: true
222
+ ```
223
+
224
+ ## Output and Feedback
225
+
226
+ ### Change Diff Display
227
+
228
+ Before applying changes, displays a diff of what will change:
229
+
230
+ ```
231
+ 📝 Changes to apply:
232
+ version: 1.0.0 → 1.1.0
233
+ description: Old description → New description
234
+ keywords: [test, demo] → [test, demo, updated]
235
+ ```
236
+
237
+ ### Success Output
238
+
239
+ After successful update:
240
+
241
+ ```
242
+ ✓ Updated my-package manifest
243
+ Path: .openpackage/packages/my-package
244
+ Type: workspace package
245
+ Updated: version, description
246
+ ```
247
+
248
+ ### No Changes Detected
249
+
250
+ When no fields changed:
251
+
252
+ ```
253
+ ✓ No changes made to my-package
254
+ Manifest unchanged
255
+ ```
256
+
257
+ ## Error Handling
258
+
259
+ ### Missing Package
260
+
261
+ **Error:** No openpackage.yml in CWD and no package specified
262
+
263
+ ```
264
+ Error: No openpackage.yml found in current directory.
265
+ Either specify a package name or run from a package root:
266
+ opkg set <package-name> [options]
267
+ opkg set [options] # When in package root
268
+ ```
269
+
270
+ ### Package Not Found
271
+
272
+ **Error:** Named package doesn't exist in workspace or global
273
+
274
+ ```
275
+ Error: Package 'nonexistent' not found in workspace or global packages.
276
+ Available locations:
277
+ - Workspace packages: ./.openpackage/packages/
278
+ - Global packages: ~/.openpackage/packages/
279
+ ```
280
+
281
+ ### Immutable Package
282
+
283
+ **Error:** Attempting to modify registry package
284
+
285
+ ```
286
+ Error: Package 'my-package' not found in workspace or global packages.
287
+
288
+ Registry packages are immutable and cannot be modified directly.
289
+ To edit a registry package:
290
+ 1. Install it with a mutable source: opkg install my-package --path <local-path>
291
+ 2. Or copy it to workspace: opkg pull my-package
292
+ ```
293
+
294
+ ### Invalid Version
295
+
296
+ **Error:** Version doesn't follow semver
297
+
298
+ ```
299
+ Error: Invalid version format: "not-a-version"
300
+ Version must be valid semver (e.g., 1.0.0, 2.1.3-beta.1)
301
+ ```
302
+
303
+ ### Invalid Name
304
+
305
+ **Error:** Name contains invalid characters
306
+
307
+ ```
308
+ Error: Package name 'invalid name' contains invalid characters (use only: a-z, 0-9, ., _, -)
309
+ ```
310
+
311
+ ### Invalid URL
312
+
313
+ **Error:** Homepage is not a valid URL
314
+
315
+ ```
316
+ Error: Invalid homepage URL: "not-a-url"
317
+ Must be a valid URL (e.g., https://example.com)
318
+ ```
319
+
320
+ ### Non-Interactive Without Flags
321
+
322
+ **Error:** Non-interactive mode requires field flags
323
+
324
+ ```
325
+ Error: Non-interactive mode requires at least one field flag.
326
+ Available flags: --ver, --name, --description, --keywords, --author, --license, --homepage, --private
327
+ Example: opkg set my-package --ver 1.0.0 --non-interactive
328
+ ```
329
+
330
+ ## Mutability and Immutability
331
+
332
+ ### Mutable Sources (Allowed)
333
+
334
+ - ✅ Workspace packages (`.openpackage/packages/`)
335
+ - ✅ Global packages (`~/.openpackage/packages/`)
336
+ - ✅ Current directory packages (with `openpackage.yml`)
337
+
338
+ ### Immutable Sources (Rejected)
339
+
340
+ - ❌ Registry packages (`~/.openpackage/registry/`)
341
+ - Packed versions are snapshots and cannot be modified
342
+ - Must be pulled/copied to mutable location first
343
+
344
+ ## Use Cases
345
+
346
+ ### Version Bump for Release
347
+
348
+ ```bash
349
+ # Update version before packing
350
+ opkg set my-package --ver 1.2.0
351
+ opkg pack my-package
352
+ ```
353
+
354
+ ### Add Metadata to Existing Package
355
+
356
+ ```bash
357
+ # Add complete metadata
358
+ opkg set my-package \
359
+ --description "My awesome package" \
360
+ --keywords "ai coding assistant" \
361
+ --author "John Doe" \
362
+ --license "MIT" \
363
+ --homepage "https://example.com"
364
+ ```
365
+
366
+ ### Rename Package
367
+
368
+ ```bash
369
+ # Update the name
370
+ opkg set old-name --name new-name
371
+
372
+ # Note: Package directory remains the same
373
+ # Consider updating workspace index references if needed
374
+ ```
375
+
376
+ ### Mark as Private
377
+
378
+ ```bash
379
+ # Prevent accidental public push
380
+ opkg set my-package --private
381
+ ```
382
+
383
+ ### Interactive Metadata Update
384
+
385
+ ```bash
386
+ # Review and update all fields interactively
387
+ opkg set my-package
388
+ ```
389
+
390
+ ### CI/CD Version Update
391
+
392
+ ```bash
393
+ # Automated version bump in pipeline
394
+ opkg set my-package --ver $NEW_VERSION --non-interactive
395
+ ```
396
+
397
+ ## Integration with Other Commands
398
+
399
+ ### With `pack`
400
+
401
+ ```bash
402
+ # Set version, then pack to registry
403
+ opkg set my-package --ver 1.0.0
404
+ opkg pack my-package
405
+ ```
406
+
407
+ ### With `push`
408
+
409
+ ```bash
410
+ # Update metadata before pushing to remote
411
+ opkg set my-package --description "Production ready"
412
+ opkg pack my-package
413
+ opkg push my-package
414
+ ```
415
+
416
+ ### With `new`
417
+
418
+ ```bash
419
+ # Create package, then add metadata later
420
+ opkg new my-package --scope local --non-interactive
421
+ opkg set my-package --ver 1.0.0 --description "Initial version"
422
+ ```
423
+
424
+ ## Comparison with Related Commands
425
+
426
+ | Command | Purpose | Creates Files | Modifies Metadata | Supports Interactive |
427
+ |---------|---------|---------------|-------------------|---------------------|
428
+ | `opkg new` | Create new package | ✅ Yes | ✅ Initial | ✅ Yes |
429
+ | `opkg set` | Update existing package | ❌ No | ✅ Update | ✅ Yes |
430
+ | `opkg pack` | Snapshot to registry | ✅ Registry copy | ❌ No | ❌ No |
431
+ | `opkg save` | Sync workspace edits | ❌ No | ❌ No | ❌ No |
432
+
433
+ ## Technical Implementation
434
+
435
+ See [set-behavior.md](./set-behavior.md) for detailed implementation behavior.
436
+
437
+ ## Examples
438
+
439
+ ### Basic Usage
440
+
441
+ ```bash
442
+ # Update version of CWD package
443
+ cd my-package/
444
+ opkg set --ver 1.1.0
445
+
446
+ # Update named workspace package
447
+ opkg set my-package --ver 2.0.0
448
+
449
+ # Update multiple fields
450
+ opkg set my-package --ver 1.5.0 --author "Jane Doe" --license "Apache-2.0"
451
+ ```
452
+
453
+ ### Interactive Usage
454
+
455
+ ```bash
456
+ # Prompt for all fields
457
+ opkg set my-package
458
+
459
+ # Example session:
460
+ # Current package: my-package (v1.0.0)
461
+ # Leave blank to keep current value
462
+ #
463
+ # Name [my-package]:
464
+ # Version [1.0.0]: 1.1.0
465
+ # Description [My package]: Updated description
466
+ # Keywords [test demo]: test demo updated
467
+ # Author [John Doe]:
468
+ # License [MIT]:
469
+ # Homepage []: https://example.com
470
+ # Private [false]:
471
+ #
472
+ # 📝 Changes to apply:
473
+ # version: 1.0.0 → 1.1.0
474
+ # description: My package → Updated description
475
+ # keywords: [test, demo] → [test, demo, updated]
476
+ # homepage: (not set) → https://example.com
477
+ #
478
+ # Apply these changes? (y/n): y
479
+ #
480
+ # ✓ Updated my-package manifest
481
+ ```
482
+
483
+ ### Automated Usage
484
+
485
+ ```bash
486
+ #!/bin/bash
487
+ # CI/CD script for version bumping
488
+
489
+ NEW_VERSION=$(node -p "require('./package.json').version")
490
+
491
+ opkg set my-package \
492
+ --ver "$NEW_VERSION" \
493
+ --non-interactive
494
+
495
+ opkg pack my-package
496
+ ```
497
+
498
+ ## Design Rationale
499
+
500
+ ### Option Names
501
+
502
+ - **`--ver`** instead of `--version`: Avoids conflict with Commander.js's global `--version` flag
503
+ - **`--name`**: Not reserved by Commander in subcommands, provides clear intent
504
+ - Other options use full descriptive names for clarity
505
+
506
+ ### Mutability Enforcement
507
+
508
+ Only mutable sources are allowed to prevent accidental modification of registry snapshots, which serve as immutable history.
509
+
510
+ ### Change Detection
511
+
512
+ Shows diffs before applying to prevent accidental modifications and provide transparency.
513
+
514
+ ### Interactive Mode
515
+
516
+ Default to interactive when no flags provided to encourage thoughtful metadata updates.
517
+
518
+ ### Validation Before Write
519
+
520
+ All fields validated before any file modifications to prevent partial updates on error.