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,494 @@
1
+ # Show Remote Support
2
+
3
+ Specification for remote package metadata display in the `show` command.
4
+
5
+ ## Overview
6
+
7
+ Remote support allows users to inspect packages from the remote registry without downloading them. This is useful for:
8
+ - **Discovery**: Browse available packages before installing
9
+ - **Verification**: Check package details before committing to download
10
+ - **Comparison**: See what's available remotely vs locally
11
+ - **Access Check**: Verify authentication and permissions
12
+
13
+ ## Design Goals
14
+
15
+ 1. **Fast by Default**: Metadata-only fetching (2-5 KB, ~200-500ms)
16
+ 2. **Bandwidth Efficient**: Don't download tarballs unless requested
17
+ 3. **Optional Completeness**: Allow full download for file list if needed
18
+ 4. **Clear UX**: Indicate source (local vs remote) and limitations
19
+ 5. **Consistent API**: Reuse existing remote-pull infrastructure
20
+
21
+ ## Command Syntax
22
+
23
+ ```bash
24
+ # Default: Local search first, fall back to remote if not found
25
+ opkg show <package>
26
+
27
+ # Force remote lookup (skip local search)
28
+ opkg show <package> --remote
29
+
30
+ # Remote with full download (for complete info)
31
+ opkg show <package> --remote --download
32
+
33
+ # Authentication options
34
+ opkg show <package> --remote --profile <profile>
35
+ opkg show <package> --remote --api-key <key>
36
+ ```
37
+
38
+ ## Behavior Modes
39
+
40
+ ### Mode 1: Default (Local-First)
41
+
42
+ ```bash
43
+ opkg show my-package
44
+ ```
45
+
46
+ **Flow**:
47
+ 1. Search local sources (CWD → Workspace → Global → Registry)
48
+ 2. If found: Display local package info (current behavior)
49
+ 3. If not found: Display message and try remote
50
+ 4. If remote found: Display remote metadata
51
+ 5. If remote not found: Error
52
+
53
+ **Output Example**:
54
+ ```
55
+ ⚠️ Package 'my-package' not found locally
56
+ 💡 Checking remote registry...
57
+
58
+ ✓ Package: my-package
59
+ ✓ Version: 1.2.3
60
+ ✓ Source: remote registry (https://registry.openpackage.dev)
61
+ ✓ Type: immutable (remote)
62
+ ✓ Description: Example package
63
+ ✓ Keywords: example, demo
64
+ ✓ Private: No
65
+ ✓ Tarball Size: 2.45 MB
66
+ ✓ Created: 2025-12-01 10:30:00
67
+ ✓ Updated: 2025-12-15 14:20:00
68
+ ✓ Available Versions (15):
69
+ • 1.2.3 (current)
70
+ • 1.2.2
71
+ • 1.2.1
72
+ • ...
73
+ ✓ Download Access: Yes
74
+
75
+ 💡 To install this package locally, run:
76
+ opkg install my-package@1.2.3
77
+ ```
78
+
79
+ **Note**: File list not available (metadata only).
80
+
81
+ ### Mode 2: Remote-Only
82
+
83
+ ```bash
84
+ opkg show my-package --remote
85
+ ```
86
+
87
+ **Flow**:
88
+ 1. Skip local search entirely
89
+ 2. Fetch remote metadata
90
+ 3. Display remote package info
91
+
92
+ **Use Case**:
93
+ - Check latest remote version even if local copy exists
94
+ - Verify what's published vs what's local
95
+ - Check remote availability before pushing
96
+
97
+ ### Mode 3: Remote with Download
98
+
99
+ ```bash
100
+ opkg show my-package --remote --download
101
+ ```
102
+
103
+ **Flow**:
104
+ 1. Fetch remote metadata
105
+ 2. Download tarball to temp directory
106
+ 3. Extract and display complete info (including file list)
107
+ 4. Clean up temp files
108
+
109
+ **Output Includes**:
110
+ - All metadata fields
111
+ - Complete file list
112
+ - Dependencies from manifest
113
+ - All fields that local show displays
114
+
115
+ **Use Case**:
116
+ - Need to see file list before installing
117
+ - Inspect package structure remotely
118
+ - Verify contents match expectations
119
+
120
+ ## Remote Metadata Structure
121
+
122
+ Based on `/packages/pull/by-name/{name}` endpoint:
123
+
124
+ ### Available in Metadata Response
125
+
126
+ ✅ **Package Info**:
127
+ - `name`: Package name
128
+ - `description`: Description text
129
+ - `keywords`: Array of keywords
130
+ - `isPrivate`: Privacy flag
131
+ - `createdAt`: Package creation timestamp
132
+ - `updatedAt`: Last update timestamp
133
+
134
+ ✅ **Version Info**:
135
+ - `version`: Version number
136
+ - `tarballSize`: Size in bytes
137
+ - `createdAt`: Version creation timestamp
138
+ - `updatedAt`: Version update timestamp
139
+
140
+ ✅ **Availability**:
141
+ - `availableVersions`: Array of version strings
142
+ - `downloadUrl`: Present if user has access
143
+ - `downloads`: Array of download info
144
+
145
+ ### NOT Available in Metadata
146
+
147
+ ❌ **File List**: Not included in metadata response
148
+ ❌ **File Contents**: Not included in metadata response
149
+ ❌ **Dependencies**: Only in manifest inside tarball
150
+ ❌ **Full openpackage.yml**: Only in tarball
151
+
152
+ ## Display Format
153
+
154
+ ### Metadata-Only Display
155
+
156
+ ```
157
+ ✓ Package: <name>
158
+ ✓ Version: <version>
159
+ ✓ Source: remote registry (<registry-url>)
160
+ ✓ Type: immutable (remote)
161
+ ✓ Description: <description>
162
+ ✓ Keywords: <keywords>
163
+ ✓ Private: <Yes/No>
164
+ ✓ Tarball Size: <size in MB>
165
+ ✓ Created: <formatted-timestamp>
166
+ ✓ Updated: <formatted-timestamp>
167
+ ✓ Available Versions (<count>):
168
+ • <version> (current)
169
+ • <version>
170
+ • ...
171
+ ✓ Download Access: <Yes/No>
172
+
173
+ ⚠️ File list not available (metadata only)
174
+ 💡 Use --download flag to see complete package details
175
+ 💡 To install this package locally, run:
176
+ opkg install <name>@<version>
177
+ ```
178
+
179
+ ### With Download Display
180
+
181
+ Same as local show, plus:
182
+ ```
183
+ ✓ Source: remote registry (downloaded)
184
+ ```
185
+
186
+ All fields from local show are available.
187
+
188
+ ## Implementation Architecture
189
+
190
+ ### Module: `src/core/show/show-remote.ts` (New)
191
+
192
+ ```typescript
193
+ /**
194
+ * Remote package display for show command
195
+ */
196
+
197
+ export interface ShowRemoteOptions {
198
+ download?: boolean;
199
+ profile?: string;
200
+ apiKey?: string;
201
+ }
202
+
203
+ /**
204
+ * Show package from remote registry
205
+ *
206
+ * @param packageName - Package name
207
+ * @param version - Optional version
208
+ * @param options - Remote options
209
+ */
210
+ export async function showRemotePackage(
211
+ packageName: string,
212
+ version: string | undefined,
213
+ options: ShowRemoteOptions
214
+ ): Promise<CommandResult>
215
+
216
+ /**
217
+ * Display remote metadata-only information
218
+ */
219
+ function displayRemoteMetadata(
220
+ response: PullPackageResponse,
221
+ registryUrl: string
222
+ ): void
223
+
224
+ /**
225
+ * Download and display complete remote package info
226
+ */
227
+ async function showRemoteWithDownload(
228
+ metadata: RemotePackageMetadataSuccess,
229
+ options: ShowRemoteOptions
230
+ ): Promise<CommandResult>
231
+ ```
232
+
233
+ ### Integration Points
234
+
235
+ Reuses existing infrastructure:
236
+ - `fetchRemotePackageMetadata()` from `remote-pull.ts`
237
+ - `downloadPackageTarball()` from `remote-pull.ts`
238
+ - `extractPackageFromTarball()` from `tarball.ts`
239
+ - `authManager` for authentication
240
+ - `createHttpClient()` for HTTP requests
241
+
242
+ ### Flow Diagram
243
+
244
+ ```
245
+ show-pipeline.ts
246
+
247
+ [Local search enabled?]
248
+ ├─ Yes → Try local resolution
249
+ │ ├─ Found → Display local
250
+ │ └─ Not found → Fall back to remote
251
+ └─ No (--remote flag) → Skip to remote
252
+
253
+ [Remote fetch]
254
+
255
+ fetchRemotePackageMetadata()
256
+
257
+ [--download flag?]
258
+ ├─ Yes → Download tarball to temp
259
+ │ ├─ Extract files
260
+ │ ├─ Display complete info
261
+ │ └─ Cleanup temp
262
+ └─ No → Display metadata only
263
+ ```
264
+
265
+ ## Error Handling
266
+
267
+ ### Network Errors
268
+
269
+ ```
270
+ Error: Network error while fetching package 'my-package': fetch failed
271
+ ```
272
+
273
+ User-friendly message for connectivity issues.
274
+
275
+ ### Not Found
276
+
277
+ ```
278
+ Error: Package 'my-package' not found in remote registry
279
+ ```
280
+
281
+ Clear 404 handling.
282
+
283
+ ### Access Denied
284
+
285
+ ```
286
+ Error: Access denied to package 'my-package'. You may need to login or use a different profile.
287
+ ```
288
+
289
+ Handles 401/403 with authentication hints.
290
+
291
+ ### Authentication Required
292
+
293
+ ```
294
+ Error: Remote registry requires authentication. Run:
295
+ opkg login
296
+ ```
297
+
298
+ Prompts user to authenticate.
299
+
300
+ ## Performance Considerations
301
+
302
+ ### Metadata-Only (Default)
303
+
304
+ | Metric | Value |
305
+ |--------|-------|
306
+ | Network I/O | 2-5 KB |
307
+ | Latency | 200-500ms |
308
+ | Disk I/O | None |
309
+ | Memory | Minimal (~1 MB) |
310
+
311
+ Fast enough for interactive use.
312
+
313
+ ### With Download
314
+
315
+ | Metric | Value |
316
+ |--------|-------|
317
+ | Network I/O | 100 KB - 10 MB+ (tarball size) |
318
+ | Latency | 1-10s+ (depends on size) |
319
+ | Disk I/O | Write to temp, then delete |
320
+ | Memory | Tarball size + extraction (~2-3x) |
321
+
322
+ Slower but provides complete information.
323
+
324
+ ## User Experience
325
+
326
+ ### Discovery Workflow
327
+
328
+ ```bash
329
+ # 1. Check if package exists remotely
330
+ opkg show new-tool --remote
331
+
332
+ # 2. See if it has what I need (metadata only)
333
+ # → Check description, keywords, size
334
+
335
+ # 3. Need more details? Download for file list
336
+ opkg show new-tool --remote --download
337
+
338
+ # 4. Satisfied? Install it
339
+ opkg install new-tool
340
+ ```
341
+
342
+ ### Comparison Workflow
343
+
344
+ ```bash
345
+ # Check local version
346
+ opkg show my-package
347
+
348
+ # Check remote version
349
+ opkg show my-package --remote
350
+
351
+ # Compare output manually or with diff
352
+ ```
353
+
354
+ ## Future Enhancements
355
+
356
+ ### JSON Output Mode
357
+
358
+ ```bash
359
+ opkg show my-package --remote --json > metadata.json
360
+ ```
361
+
362
+ Enables scripting and tool integration.
363
+
364
+ ### Comparison Mode
365
+
366
+ ```bash
367
+ opkg show my-package --compare
368
+ ```
369
+
370
+ Automatically shows local vs remote side-by-side.
371
+
372
+ ### Batch Show
373
+
374
+ ```bash
375
+ opkg show pkg1 pkg2 pkg3 --remote
376
+ ```
377
+
378
+ Show multiple packages in one command.
379
+
380
+ ### Cache Metadata
381
+
382
+ Cache remote metadata responses for faster repeated queries:
383
+ - Cache duration: 5-15 minutes
384
+ - Cache location: `~/.openpackage/cache/metadata/`
385
+ - Invalidation: Manual or time-based
386
+
387
+ ## Testing Strategy
388
+
389
+ ### Unit Tests
390
+ - Remote metadata fetching
391
+ - Error handling (not found, access denied, network)
392
+ - Display formatting (metadata-only)
393
+ - Download and display (with temp cleanup)
394
+
395
+ ### Integration Tests
396
+ - End-to-end remote show
397
+ - Authentication scenarios
398
+ - Fallback from local to remote
399
+ - Download mode with extraction
400
+
401
+ ### Manual Testing
402
+ - Various package types (public, private, scoped)
403
+ - Different registry configurations
404
+ - Network failure scenarios
405
+ - Large packages (download mode)
406
+
407
+ ## Security Considerations
408
+
409
+ 1. **Authentication**: Uses existing auth infrastructure (profiles, API keys)
410
+ 2. **HTTPS Only**: All remote requests over HTTPS
411
+ 3. **No Arbitrary Downloads**: Only downloads from configured registry
412
+ 4. **Temp File Cleanup**: Always cleanup temp files, even on error
413
+ 5. **Input Validation**: Validate package names before remote fetch
414
+
415
+ ## Rollout Plan
416
+
417
+ ### Phase 1: Metadata-Only (Recommended First)
418
+ - Implement `--remote` flag
419
+ - Metadata-only display
420
+ - Auto-fallback from local to remote
421
+ - Basic error handling
422
+
423
+ ### Phase 2: Download Support
424
+ - Implement `--download` flag
425
+ - Temp file management
426
+ - Complete display with file list
427
+
428
+ ### Phase 3: Enhancements
429
+ - JSON output mode
430
+ - Comparison mode
431
+ - Metadata caching
432
+
433
+ ## Related Specs
434
+
435
+ - [Show Command](./README.md) - Main show command spec
436
+ - [Install Behavior](../install/install-behavior.md) - Remote resolution patterns
437
+ - [Registry](../registry.md) - Registry structure
438
+ - [Package Sources](../package-sources.md) - Source types
439
+
440
+ ## Examples
441
+
442
+ ### Public Package
443
+
444
+ ```bash
445
+ opkg show lodash --remote
446
+
447
+ ✓ Package: lodash
448
+ ✓ Version: 4.17.21
449
+ ✓ Source: remote registry (https://registry.openpackage.dev)
450
+ ✓ Type: immutable (remote)
451
+ ✓ Description: Lodash modular utilities
452
+ ✓ Keywords: modules, stdlib, util
453
+ ✓ Private: No
454
+ ✓ Tarball Size: 1.2 MB
455
+ ✓ Created: 2024-01-15 09:00:00
456
+ ✓ Updated: 2024-06-20 14:30:00
457
+ ✓ Available Versions (50):
458
+ • 4.17.21 (current)
459
+ • 4.17.20
460
+ • ...
461
+ ✓ Download Access: Yes
462
+ ```
463
+
464
+ ### Private Package (With Auth)
465
+
466
+ ```bash
467
+ opkg show @company/internal-tool --remote --profile work
468
+
469
+ ✓ Package: @company/internal-tool
470
+ ✓ Version: 2.1.0
471
+ ✓ Source: remote registry (https://registry.openpackage.dev)
472
+ ✓ Type: immutable (remote)
473
+ ✓ Private: Yes
474
+ ✓ Tarball Size: 512 KB
475
+ ✓ Download Access: Yes
476
+ ```
477
+
478
+ ### Package Not Found
479
+
480
+ ```bash
481
+ opkg show non-existent --remote
482
+
483
+ Error: Package 'non-existent' not found in remote registry
484
+ ```
485
+
486
+ ### Network Error
487
+
488
+ ```bash
489
+ opkg show my-package --remote
490
+
491
+ Error: Network error while fetching package 'my-package': fetch failed
492
+ ```
493
+
494
+ Retry or check connection.
@@ -0,0 +1,38 @@
1
+ # Status Command
2
+
3
+ `opkg status` reports the state of installed packages, validating sources and sync status via hashes. Helps debug drifts between source and workspace.
4
+
5
+ ## Purpose
6
+ - N/A direction: Read-only inspection.
7
+ - Uses unified index to check all packages.
8
+
9
+ ## Flow
10
+ 1. Read `.openpackage/openpackage.index.yml`.
11
+ 2. For each package:
12
+ - Resolve/validate source path exists.
13
+ - Compare source files vs. workspace mappings using content hashes.
14
+ - Classify: Synced (✅), Modified (⚠️ workspace changed), Missing (❌ source/path issue).
15
+ 3. Output table/report; optional verbose.
16
+
17
+ ## Output Example
18
+ ```
19
+ ✅ my-rules@1.0.0 synced ./.openpackage/packages/my-rules/
20
+ ⚠️ shared@1.2.3 modified ~/.openpackage/packages/shared/
21
+ ❌ community@1.0.0 missing ~/.openpackage/registry/community/1.0.0/
22
+ ```
23
+
24
+ ## Options
25
+ - `--verbose`: File-level details.
26
+ - `--json`: Machine-readable.
27
+ - Filter by package.
28
+
29
+ ## Errors
30
+ - Corrupt index: Repair hints.
31
+ - Path access issues.
32
+
33
+ ## Integration
34
+ - Ties to index schema [Package Index](package/package-index-yml.md).
35
+ - Useful before save (see modified) or uninstall.
36
+ - See [Commands Overview](commands-overview.md).
37
+
38
+ Impl: [Status Pipeline](../core/status/status-pipeline.ts).