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,483 @@
1
+ # Show Command
2
+
3
+ `opkg show` displays detailed information about packages from any source (local or remote). It provides a unified way to inspect package metadata, files, dependencies, and source information.
4
+
5
+ ## Purpose & Direction
6
+ - **Inspection Only**: Read-only command; shows package details without modifying anything
7
+ - **Multi-Source**: Supports package names, paths, git URLs, tarballs
8
+ - **Local-First**: Searches local sources first (CWD → Workspace → Global → Registry)
9
+ - **Future-Ready**: Designed to support remote metadata fetching
10
+
11
+ ## Command Syntax
12
+
13
+ ```bash
14
+ opkg show <package>
15
+ ```
16
+
17
+ Where `<package>` can be:
18
+ - Package name: `my-package`, `my-package@1.2.3`, `@scope/package`
19
+ - Path: `.`, `./path/to/package`, `/absolute/path`, `.openpackage/packages/pkg`
20
+ - Git URL: `git:https://github.com/user/repo.git#ref`, `github:user/repo#tag`
21
+ - Tarball: `./package.tgz`, `/path/to/package.tar.gz`
22
+
23
+ ## Flow
24
+
25
+ ### Local Package Show Flow
26
+
27
+ 1. **Input Classification** (via `classifyPackageInput()`)
28
+ - Detect input type: registry name, path, git URL, or tarball
29
+ - Parse git specs, check path patterns, validate tarballs
30
+
31
+ 2. **Package Resolution** (via `resolvePackageForShow()`)
32
+ - **For names**: Use unified resolution (CWD → Workspace → Global → Registry)
33
+ - **For paths**: Validate and resolve to absolute path
34
+ - **For git URLs**: Clone repository to temp location
35
+ - **For tarballs**: Validate tarball exists and is readable
36
+
37
+ 3. **Information Collection** (via `collectPackageInfo()`)
38
+ - Load `openpackage.yml` manifest
39
+ - Discover all package files (filtered for junk)
40
+ - Detect partial packages (from manifest flag or missing files)
41
+ - Determine source mutability based on location
42
+
43
+ 4. **Display Output** (via `displayPackageInfo()`)
44
+ - Package metadata (name, version, description, etc.)
45
+ - Source information (type, path, mutability)
46
+ - Dependencies (packages and dev-packages)
47
+ - File list (sorted, tree-style display)
48
+ - Resolution info (if multiple candidates found)
49
+
50
+ ## Resolution Priority
51
+
52
+ For package names, uses the same resolution strategy as `pack`:
53
+
54
+ ```
55
+ Priority Order:
56
+ 1. CWD (current directory, if name matches)
57
+ 2. Workspace packages (.openpackage/packages/)
58
+ 3. Global packages (~/.openpackage/packages/)
59
+ 4. Local registry (~/.openpackage/registry/)
60
+ ```
61
+
62
+ ### Multi-Candidate Selection Rules
63
+
64
+ When multiple sources have the package:
65
+
66
+ 1. **CWD match**: Always wins if checked and name matches
67
+ 2. **Workspace override**: Always wins among non-CWD sources
68
+ 3. **Version comparison**: Between global and registry, highest version wins
69
+ 4. **Tie-breaker**: Same version prefers global (mutable) over registry (immutable)
70
+
71
+ ### Resolution Information Display
72
+
73
+ When multiple candidates exist, show displays:
74
+ ```
75
+ Resolved from multiple sources:
76
+ ✓ workspace packages: 2.0.0
77
+ global packages: 1.5.0
78
+ local registry: 1.8.0
79
+ Selection reason: workspace packages always override
80
+ ```
81
+
82
+ ### Scope Hint Display
83
+
84
+ When a package with the same name exists in multiple scopes (workspace, global, registry), show displays a hint after the main package information:
85
+
86
+ ```
87
+ 💡 This package also exists in other scopes:
88
+ • global packages (v1.5.0)
89
+ View with: opkg show /Users/user/.openpackage/packages/my-package
90
+ • local registry (v1.8.0)
91
+ View with: opkg show /Users/user/.openpackage/registry/my-package/1.8.0
92
+ ```
93
+
94
+ This helps users understand that:
95
+ - The same package name can exist in multiple locations
96
+ - Each scope may have a different version
97
+ - Users can view each scope's package using the provided command
98
+
99
+ ## Source Type Detection
100
+
101
+ | Location | Type | Mutable | Label |
102
+ |----------|------|---------|-------|
103
+ | Current directory (matching name) | `cwd` | Yes | "current directory" |
104
+ | `.openpackage/packages/` (workspace) | `workspace` | Yes | "workspace packages" |
105
+ | `~/.openpackage/packages/` (global) | `global` | Yes | "global packages" |
106
+ | `~/.openpackage/registry/` | `registry` | No | "local registry" |
107
+ | Git repository | `git` | No | "git repository" |
108
+ | Tarball file | `tarball` | No | "tarball" |
109
+ | Other path | `path` | Yes | "path" |
110
+
111
+ Mutability determines if the package can be modified via `save`/`add` commands.
112
+
113
+ ## Display Format
114
+
115
+ ### Standard Output
116
+
117
+ ```
118
+ ✓ Package: my-package
119
+ ✓ Version: 1.2.3
120
+ ✓ Source: workspace packages (.openpackage/packages/my-package)
121
+ ✓ Type: mutable
122
+ ✓ Description: Example package for demonstration
123
+ ✓ Keywords: example, test, demo
124
+ ✓ Author: John Doe
125
+ ✓ License: MIT
126
+ ✓ Homepage: https://example.com
127
+ ✓ Repository: git - https://github.com/user/my-package.git
128
+ ✓ Private: No
129
+ ✓ Imported Packages (2):
130
+ • dependency-one@^1.0.0 (compatible with 1.0.0 (^1.0.0))
131
+ • dependency-two@~2.1.0 (compatible with 2.1.x (~2.1.0))
132
+ ✓ Imported Dev Packages (1):
133
+ • dev-tool@^3.0.0 (compatible with 3.0.0 (^3.0.0))
134
+ ✓ Files: 15
135
+ ├── commands/example.md
136
+ ├── commands/helper.md
137
+ ├── openpackage.yml
138
+ ├── README.md
139
+ ├── rules/code-style.md
140
+ ├── ...
141
+
142
+ 💡 This package also exists in other scopes:
143
+ • global packages (v1.5.0)
144
+ View with: opkg show /Users/user/.openpackage/packages/my-package
145
+ • local registry (v1.8.0)
146
+ View with: opkg show /Users/user/.openpackage/registry/my-package/1.8.0
147
+ ```
148
+
149
+ Note: The scope hint section only appears when the package exists in multiple scopes.
150
+
151
+ ### Partial Package Indicator
152
+
153
+ ```
154
+ ✓ Partial: Yes
155
+ ```
156
+
157
+ Shows when package is incomplete (e.g., partial pull from remote).
158
+
159
+ ### Unversioned Packages
160
+
161
+ For packages without a version field:
162
+ ```
163
+ ✓ Package: dev-package
164
+ ✓ Source: workspace packages (.openpackage/packages/dev-package)
165
+ ✓ Type: mutable
166
+ ✓ Description: Development version
167
+ ```
168
+
169
+ Version line is omitted entirely.
170
+
171
+ ## Scope Awareness
172
+
173
+ ### Understanding Scopes
174
+
175
+ OpenPackage supports multiple scopes where packages can exist:
176
+
177
+ - **Workspace Scope** (`.openpackage/packages/`): Project-specific packages
178
+ - **Global Scope** (`~/.openpackage/packages/`): Cross-project shared packages
179
+ - **Registry Scope** (`~/.openpackage/registry/`): Immutable version snapshots
180
+
181
+ The same package name can exist in multiple scopes simultaneously, each potentially with different versions or content.
182
+
183
+ ### Multi-Scope Detection
184
+
185
+ When you run `opkg show <package-name>`, the command:
186
+
187
+ 1. **Resolves** using standard priority (CWD → Workspace → Global → Registry)
188
+ 2. **Displays** the selected package information
189
+ 3. **Discovers** if the same package exists in other scopes
190
+ 4. **Shows hint** with commands to view packages in other scopes
191
+
192
+ ### Example: Package in Multiple Scopes
193
+
194
+ ```bash
195
+ $ opkg show my-rules
196
+
197
+ ✓ Package: my-rules
198
+ ✓ Version: 2.0.0
199
+ ✓ Source: workspace packages (.openpackage/packages/my-rules)
200
+ ✓ Type: mutable
201
+ ✓ Description: Project-specific rules
202
+ ✓ Files: 10
203
+ ├── openpackage.yml
204
+ ├── rules/coding-standards.md
205
+ ├── ...
206
+
207
+ 💡 This package also exists in other scopes:
208
+ • global packages (v1.5.0)
209
+ View with: opkg show /Users/user/.openpackage/packages/my-rules
210
+ • local registry (v1.8.0)
211
+ View with: opkg show /Users/user/.openpackage/registry/my-rules/1.8.0
212
+ ```
213
+
214
+ In this example:
215
+ - **Workspace version (2.0.0)** is shown (highest priority)
216
+ - **Global version (1.5.0)** exists with different content
217
+ - **Registry version (1.8.0)** is an older immutable snapshot
218
+ - Each can be viewed separately using the provided commands
219
+
220
+ ### Use Cases for Multi-Scope Packages
221
+
222
+ 1. **Development Workflow**: Work on a package in workspace scope while keeping a stable version in registry
223
+ 2. **Testing Changes**: Compare workspace changes against global or registry versions
224
+ 3. **Version Management**: Maintain multiple versions for different purposes
225
+ 4. **Scope Migration**: Elevate workspace packages to global, or localize global packages
226
+
227
+ ### Viewing Specific Scopes
228
+
229
+ To view a package in a specific scope, use the path directly:
230
+
231
+ ```bash
232
+ # View workspace version
233
+ opkg show .openpackage/packages/my-package
234
+
235
+ # View global version
236
+ opkg show ~/.openpackage/packages/my-package
237
+
238
+ # View registry version
239
+ opkg show ~/.openpackage/registry/my-package/1.2.3
240
+ ```
241
+
242
+ This bypasses scope resolution and shows exactly what you specify.
243
+
244
+ ## Examples
245
+
246
+ ### Show by Package Name
247
+
248
+ ```bash
249
+ opkg show my-package
250
+ ```
251
+
252
+ Searches all local sources and displays the best match.
253
+
254
+ ### Show Specific Version
255
+
256
+ ```bash
257
+ opkg show my-package@1.2.3
258
+ ```
259
+
260
+ Resolves to the specific version from registry or available sources.
261
+
262
+ ### Show by Path
263
+
264
+ ```bash
265
+ # Current directory
266
+ opkg show .
267
+
268
+ # Relative path
269
+ opkg show ./packages/shared-utils
270
+
271
+ # Workspace package path
272
+ opkg show .openpackage/packages/my-package
273
+
274
+ # Absolute path
275
+ opkg show /Users/me/projects/my-package
276
+ ```
277
+
278
+ ### Show from Git
279
+
280
+ ```bash
281
+ # Full git URL
282
+ opkg show git:https://github.com/user/repo.git
283
+
284
+ # With branch/tag/commit
285
+ opkg show git:https://github.com/user/repo.git#main
286
+ opkg show git:https://github.com/user/repo.git#v1.0.0
287
+
288
+ # GitHub shorthand
289
+ opkg show github:user/repo
290
+ opkg show github:user/repo#develop
291
+ ```
292
+
293
+ ### Show from Tarball
294
+
295
+ ```bash
296
+ opkg show ./downloaded-package.tgz
297
+ opkg show /path/to/package.tar.gz
298
+ ```
299
+
300
+ ## Options
301
+
302
+ Currently, show command has no options. Future options may include:
303
+
304
+ - `--remote`: Fetch from remote registry (skip local search)
305
+ - `--json`: Output in JSON format for scripting
306
+ - `--tree`: Display dependency tree
307
+ - `--files-only`: Show only file list
308
+ - `--download`: Download remote package for complete info (with remote support)
309
+
310
+ ## Errors
311
+
312
+ ### Package Not Found
313
+
314
+ ```
315
+ Error: Package 'my-package' not found locally
316
+ ```
317
+
318
+ Occurs when no local source has the package.
319
+
320
+ **Future**: Will suggest checking remote registry.
321
+
322
+ ### Invalid Path
323
+
324
+ ```
325
+ Error: Path './invalid' exists but is not a valid OpenPackage directory.
326
+ Valid packages must contain openpackage.yml
327
+ ```
328
+
329
+ Occurs when path doesn't contain a valid package.
330
+
331
+ ### Git Clone Failure
332
+
333
+ ```
334
+ Error: Git repository does not contain a valid OpenPackage (missing openpackage.yml)
335
+ ```
336
+
337
+ Occurs when git URL doesn't point to a valid OpenPackage repository.
338
+
339
+ ### Validation Error
340
+
341
+ ```
342
+ Error: Failed to load package manifest from: /path/to/package
343
+ ```
344
+
345
+ Occurs when `openpackage.yml` is malformed or missing.
346
+
347
+ ## Integration Points
348
+
349
+ ### Reuses Existing Infrastructure
350
+
351
+ - **Package Input Classification**: `classifyPackageInput()` from `package-input.ts`
352
+ - **Unified Resolution**: `resolvePackageByName()` from `package-name-resolution.ts`
353
+ - **Git Loading**: `loadPackageFromGit()` from `install/git-package-loader.ts`
354
+ - **Package Validation**: `isValidPackageDirectory()` from `package-context.ts`
355
+ - **File Discovery**: `packageManager.loadPackage()` from `package.ts`
356
+ - **Path Formatting**: `formatPathForDisplay()` from `formatters.ts`
357
+ - **Version Utilities**: `formatVersionLabel()`, `describeVersionRange()`, `isUnversionedVersion()`
358
+
359
+ ### Used By
360
+
361
+ Currently standalone; future uses may include:
362
+ - Interactive package selector (before install)
363
+ - Package comparison tools
364
+ - Documentation generators
365
+
366
+ ## Implementation Modules
367
+
368
+ Located in `src/core/show/`:
369
+
370
+ ```
371
+ show/
372
+ ├── show-types.ts # Type definitions
373
+ ├── package-resolver.ts # Resolution logic (~270 lines)
374
+ ├── scope-discovery.ts # Scope discovery logic (~200 lines)
375
+ ├── show-output.ts # Display formatting (~200 lines)
376
+ └── show-pipeline.ts # Orchestration (~120 lines)
377
+ ```
378
+
379
+ ### Module Responsibilities
380
+
381
+ **show-types.ts**
382
+ - Type definitions for show domain
383
+ - `ShowSourceType`, `ShowPackageSource`, `ShowPackageInfo`, `ShowResolutionInfo`
384
+ - `ScopeHintInfo` for multi-scope hints
385
+
386
+ **package-resolver.ts**
387
+ - Main: `resolvePackageForShow(packageInput, cwd)`
388
+ - Handles all input types and resolution strategies
389
+ - Determines source type and mutability
390
+ - Converts resolution info to show-specific format
391
+ - Integrates scope discovery for hints
392
+
393
+ **scope-discovery.ts** (NEW)
394
+ - Main: `discoverPackagesAcrossScopes(packageName, cwd)`
395
+ - Helper: `hasMultipleScopes(packageName, cwd)`
396
+ - Discovers packages in workspace, global, and registry scopes
397
+ - Returns `ScopeDiscoveryResult` with all found packages
398
+ - Generates show commands for each scope
399
+
400
+ **show-output.ts**
401
+ - Main: `displayPackageInfo(info, cwd, scopeHintInfo?)`
402
+ - Helper: `displayResolutionInfo(info)`
403
+ - Helper: `displayScopeHint(scopeHintInfo)` (NEW)
404
+ - All console output formatting
405
+ - Dependency and file list display
406
+ - Scope hint formatting
407
+
408
+ **show-pipeline.ts**
409
+ - Main: `runShowPipeline(packageInput, cwd)`
410
+ - Orchestrates: resolve → collect → display
411
+ - Error handling and result packaging
412
+ - Passes scope hint info to display
413
+ - Returns `CommandResult`
414
+
415
+ ## Testing
416
+
417
+ Test suite: `tests/show-command.test.ts`
418
+
419
+ Covers:
420
+ - ✅ Show workspace package by name
421
+ - ✅ Show package by relative path
422
+ - ✅ Show package from CWD
423
+ - ✅ Show registry package
424
+ - ✅ Show with version specifier
425
+ - ✅ Error handling for non-existent packages
426
+ - ✅ Multi-scope detection and hint display (NEW)
427
+ - ✅ Scope discovery across workspace, global, and registry (NEW)
428
+
429
+ ## Future Enhancements
430
+
431
+ ### Remote Support (Planned)
432
+
433
+ See [Show Remote Support](./show-remote.md) for detailed spec.
434
+
435
+ **Summary**:
436
+ - Metadata-only fetching by default (fast, lightweight)
437
+ - Optional `--download` flag for complete info
438
+ - Auto-fallback: local not found → try remote
439
+ - Clear indication of source (local vs remote)
440
+
441
+ **Example**:
442
+ ```bash
443
+ opkg show community-package --remote
444
+ # Fetches metadata from remote registry (2-5 KB)
445
+ # Displays: name, version, size, timestamps, available versions
446
+ # Note: File list not available (metadata only)
447
+
448
+ opkg show community-package --remote --download
449
+ # Downloads full tarball to temp
450
+ # Displays: complete info including file list
451
+ # Cleans up temp files after display
452
+ ```
453
+
454
+ ### Additional Features (Future)
455
+
456
+ - **JSON Output**: `--json` for scripting and tooling integration
457
+ - **Comparison Mode**: `--compare` to show local vs remote differences
458
+ - **Dependency Tree**: `--tree` to visualize full dependency graph
459
+ - **File Preview**: `--preview <file>` to show file contents
460
+ - **Batch Show**: `opkg show pkg1 pkg2 pkg3` to show multiple packages
461
+
462
+ ## Design Principles
463
+
464
+ 1. **Read-Only**: Never modifies packages or system state
465
+ 2. **Consistent**: Uses same resolution as pack (vs install which differs)
466
+ 3. **Informative**: Shows source, mutability, and resolution details
467
+ 4. **Fast**: Local operations are immediate
468
+ 5. **Extensible**: Clean architecture for future features
469
+ 6. **User-Friendly**: Clear output and helpful error messages
470
+
471
+ ## Related Commands
472
+
473
+ - **pack**: Creates immutable snapshot; show can inspect before/after
474
+ - **install**: Materializes packages; show can inspect what's installed
475
+ - **status**: Compares workspace vs source; show displays source details
476
+ - **list**: Shows all packages; show displays one in detail
477
+
478
+ ## Cross-References
479
+
480
+ - [Package Name Resolution](../pack/package-name-resolution.md) - Resolution strategy
481
+ - [Package Sources](../package-sources.md) - Source types and mutability
482
+ - [Commands Overview](../commands-overview.md) - All commands
483
+ - [CLI Options](../cli-options.md) - Global options