opkg 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/README.md +109 -186
  2. package/assets/openpackage_ascii_dark.png +0 -0
  3. package/assets/openpackage_ascii_light.png +0 -0
  4. package/dist/commands/add.js +34 -10
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/apply.js +16 -0
  7. package/dist/commands/apply.js.map +1 -0
  8. package/dist/commands/delete.js +1 -1
  9. package/dist/commands/delete.js.map +1 -1
  10. package/dist/commands/install.js +177 -8
  11. package/dist/commands/install.js.map +1 -1
  12. package/dist/commands/list.js +2 -2
  13. package/dist/commands/list.js.map +1 -1
  14. package/dist/commands/login.js +1 -1
  15. package/dist/commands/login.js.map +1 -1
  16. package/dist/commands/logout.js +1 -1
  17. package/dist/commands/logout.js.map +1 -1
  18. package/dist/commands/new.js +125 -0
  19. package/dist/commands/new.js.map +1 -0
  20. package/dist/commands/pack.js +7 -13
  21. package/dist/commands/pack.js.map +1 -1
  22. package/dist/commands/pull.js +1 -1
  23. package/dist/commands/pull.js.map +1 -1
  24. package/dist/commands/push.js +1 -1
  25. package/dist/commands/push.js.map +1 -1
  26. package/dist/commands/remove.js +63 -0
  27. package/dist/commands/remove.js.map +1 -0
  28. package/dist/commands/save.js +11 -17
  29. package/dist/commands/save.js.map +1 -1
  30. package/dist/commands/set.js +33 -0
  31. package/dist/commands/set.js.map +1 -0
  32. package/dist/commands/show.js +16 -94
  33. package/dist/commands/show.js.map +1 -1
  34. package/dist/commands/status.js +26 -701
  35. package/dist/commands/status.js.map +1 -1
  36. package/dist/commands/uninstall.js +14 -427
  37. package/dist/commands/uninstall.js.map +1 -1
  38. package/dist/constants/index.js +72 -16
  39. package/dist/constants/index.js.map +1 -1
  40. package/dist/core/add/add-conflict-handler.js +1 -8
  41. package/dist/core/add/add-conflict-handler.js.map +1 -1
  42. package/dist/core/add/add-pipeline.js +12 -10
  43. package/dist/core/add/add-pipeline.js.map +1 -1
  44. package/dist/core/add/add-to-source-pipeline.js +123 -0
  45. package/dist/core/add/add-to-source-pipeline.js.map +1 -0
  46. package/dist/core/add/package-index-updater.js +77 -78
  47. package/dist/core/add/package-index-updater.js.map +1 -1
  48. package/dist/core/add/platform-path-transformer.js +6 -4
  49. package/dist/core/add/platform-path-transformer.js.map +1 -1
  50. package/dist/core/add/source-collector.js +2 -3
  51. package/dist/core/add/source-collector.js.map +1 -1
  52. package/dist/core/apply/apply-pipeline.js +110 -0
  53. package/dist/core/apply/apply-pipeline.js.map +1 -0
  54. package/dist/core/dependency-resolver.js +263 -21
  55. package/dist/core/dependency-resolver.js.map +1 -1
  56. package/dist/core/discovery/file-discovery.js +1 -2
  57. package/dist/core/discovery/file-discovery.js.map +1 -1
  58. package/dist/core/discovery/platform-files-discovery.js +33 -18
  59. package/dist/core/discovery/platform-files-discovery.js.map +1 -1
  60. package/dist/core/flows/flow-executor.js +974 -0
  61. package/dist/core/flows/flow-executor.js.map +1 -0
  62. package/dist/core/flows/flow-inverter.js +442 -0
  63. package/dist/core/flows/flow-inverter.js.map +1 -0
  64. package/dist/core/flows/flow-key-extractor.js +101 -0
  65. package/dist/core/flows/flow-key-extractor.js.map +1 -0
  66. package/dist/core/flows/flow-key-mapper.js +382 -0
  67. package/dist/core/flows/flow-key-mapper.js.map +1 -0
  68. package/dist/core/flows/flow-transforms.js +632 -0
  69. package/dist/core/flows/flow-transforms.js.map +1 -0
  70. package/dist/core/flows/map-pipeline/context.js +73 -0
  71. package/dist/core/flows/map-pipeline/context.js.map +1 -0
  72. package/dist/core/flows/map-pipeline/index.js +156 -0
  73. package/dist/core/flows/map-pipeline/index.js.map +1 -0
  74. package/dist/core/flows/map-pipeline/operations/copy.js +104 -0
  75. package/dist/core/flows/map-pipeline/operations/copy.js.map +1 -0
  76. package/dist/core/flows/map-pipeline/operations/pipe.js +70 -0
  77. package/dist/core/flows/map-pipeline/operations/pipe.js.map +1 -0
  78. package/dist/core/flows/map-pipeline/operations/rename.js +102 -0
  79. package/dist/core/flows/map-pipeline/operations/rename.js.map +1 -0
  80. package/dist/core/flows/map-pipeline/operations/set.js +50 -0
  81. package/dist/core/flows/map-pipeline/operations/set.js.map +1 -0
  82. package/dist/core/flows/map-pipeline/operations/switch.js +79 -0
  83. package/dist/core/flows/map-pipeline/operations/switch.js.map +1 -0
  84. package/dist/core/flows/map-pipeline/operations/transform.js +543 -0
  85. package/dist/core/flows/map-pipeline/operations/transform.js.map +1 -0
  86. package/dist/core/flows/map-pipeline/operations/unset.js +65 -0
  87. package/dist/core/flows/map-pipeline/operations/unset.js.map +1 -0
  88. package/dist/core/flows/map-pipeline/types.js +8 -0
  89. package/dist/core/flows/map-pipeline/types.js.map +1 -0
  90. package/dist/core/flows/map-pipeline/utils.js +278 -0
  91. package/dist/core/flows/map-pipeline/utils.js.map +1 -0
  92. package/dist/core/flows/platform-converter.js +328 -0
  93. package/dist/core/flows/platform-converter.js.map +1 -0
  94. package/dist/core/flows/source-resolver.js +192 -0
  95. package/dist/core/flows/source-resolver.js.map +1 -0
  96. package/dist/core/flows/toml-domain-transforms.js +23 -0
  97. package/dist/core/flows/toml-domain-transforms.js.map +1 -0
  98. package/dist/core/install/bulk-install-pipeline.js +68 -7
  99. package/dist/core/install/bulk-install-pipeline.js.map +1 -1
  100. package/dist/core/install/canonical-plan.js +3 -3
  101. package/dist/core/install/canonical-plan.js.map +1 -1
  102. package/dist/core/install/dry-run.js +3 -3
  103. package/dist/core/install/dry-run.js.map +1 -1
  104. package/dist/core/install/flow-based-installer.js +1158 -0
  105. package/dist/core/install/flow-based-installer.js.map +1 -0
  106. package/dist/core/install/flow-workspace-tracker.js +111 -0
  107. package/dist/core/install/flow-workspace-tracker.js.map +1 -0
  108. package/dist/core/install/format-detector.js +228 -0
  109. package/dist/core/install/format-detector.js.map +1 -0
  110. package/dist/core/install/git-package-loader.js +20 -0
  111. package/dist/core/install/git-package-loader.js.map +1 -0
  112. package/dist/core/install/install-errors.js +1 -1
  113. package/dist/core/install/install-errors.js.map +1 -1
  114. package/dist/core/install/install-flow.js +34 -14
  115. package/dist/core/install/install-flow.js.map +1 -1
  116. package/dist/core/install/install-pipeline.js +52 -17
  117. package/dist/core/install/install-pipeline.js.map +1 -1
  118. package/dist/core/install/install-reporting.js +26 -8
  119. package/dist/core/install/install-reporting.js.map +1 -1
  120. package/dist/core/install/local-source-resolution.js +103 -0
  121. package/dist/core/install/local-source-resolution.js.map +1 -0
  122. package/dist/core/install/marketplace-handler.js +221 -0
  123. package/dist/core/install/marketplace-handler.js.map +1 -0
  124. package/dist/core/install/path-install-pipeline.js +241 -0
  125. package/dist/core/install/path-install-pipeline.js.map +1 -0
  126. package/dist/core/install/path-package-loader.js +116 -0
  127. package/dist/core/install/path-package-loader.js.map +1 -0
  128. package/dist/core/install/plugin-detector.js +72 -0
  129. package/dist/core/install/plugin-detector.js.map +1 -0
  130. package/dist/core/install/plugin-to-universal-converter.js +218 -0
  131. package/dist/core/install/plugin-to-universal-converter.js.map +1 -0
  132. package/dist/core/install/plugin-transformer.js +191 -0
  133. package/dist/core/install/plugin-transformer.js.map +1 -0
  134. package/dist/core/install/version-selection.js +1 -1
  135. package/dist/core/install/version-selection.js.map +1 -1
  136. package/dist/core/openpackage.js +40 -22
  137. package/dist/core/openpackage.js.map +1 -1
  138. package/dist/core/pack/pack-output.js +62 -0
  139. package/dist/core/pack/pack-output.js.map +1 -0
  140. package/dist/core/pack/pack-pipeline.js +186 -0
  141. package/dist/core/pack/pack-pipeline.js.map +1 -0
  142. package/dist/core/package-context.js +45 -70
  143. package/dist/core/package-context.js.map +1 -1
  144. package/dist/core/package-creation.js +203 -0
  145. package/dist/core/package-creation.js.map +1 -0
  146. package/dist/core/package.js +20 -6
  147. package/dist/core/package.js.map +1 -1
  148. package/dist/core/platforms.js +665 -209
  149. package/dist/core/platforms.js.map +1 -1
  150. package/dist/core/push/push-context.js +1 -1
  151. package/dist/core/push/push-context.js.map +1 -1
  152. package/dist/core/push/push-upload.js +2 -2
  153. package/dist/core/push/push-upload.js.map +1 -1
  154. package/dist/core/registry.js +6 -6
  155. package/dist/core/registry.js.map +1 -1
  156. package/dist/core/remote-pull.js +2 -2
  157. package/dist/core/remote-pull.js.map +1 -1
  158. package/dist/core/remove/removal-collector.js +52 -0
  159. package/dist/core/remove/removal-collector.js.map +1 -0
  160. package/dist/core/remove/removal-confirmation.js +39 -0
  161. package/dist/core/remove/removal-confirmation.js.map +1 -0
  162. package/dist/core/remove/remove-from-source-pipeline.js +173 -0
  163. package/dist/core/remove/remove-from-source-pipeline.js.map +1 -0
  164. package/dist/core/save/constants.js +3 -3
  165. package/dist/core/save/constants.js.map +1 -1
  166. package/dist/core/save/flow-based-saver.js +270 -0
  167. package/dist/core/save/flow-based-saver.js.map +1 -0
  168. package/dist/core/save/name-resolution.js +1 -1
  169. package/dist/core/save/name-resolution.js.map +1 -1
  170. package/dist/core/save/package-yml-generator.js +4 -5
  171. package/dist/core/save/package-yml-generator.js.map +1 -1
  172. package/dist/core/save/save-candidate-builder.js +215 -0
  173. package/dist/core/save/save-candidate-builder.js.map +1 -0
  174. package/dist/core/save/save-candidate-loader.js +12 -11
  175. package/dist/core/save/save-candidate-loader.js.map +1 -1
  176. package/dist/core/save/save-conflict-analyzer.js +150 -0
  177. package/dist/core/save/save-conflict-analyzer.js.map +1 -0
  178. package/dist/core/save/save-conflict-resolution.js +28 -14
  179. package/dist/core/save/save-conflict-resolution.js.map +1 -1
  180. package/dist/core/save/save-conflict-resolver.js +31 -275
  181. package/dist/core/save/save-conflict-resolver.js.map +1 -1
  182. package/dist/core/save/save-group-builder.js +52 -0
  183. package/dist/core/save/save-group-builder.js.map +1 -0
  184. package/dist/core/save/save-interactive-resolver.js +190 -0
  185. package/dist/core/save/save-interactive-resolver.js.map +1 -0
  186. package/dist/core/save/save-pipeline.js +58 -34
  187. package/dist/core/save/save-pipeline.js.map +1 -1
  188. package/dist/core/save/save-platform-handler.js +53 -0
  189. package/dist/core/save/save-platform-handler.js.map +1 -0
  190. package/dist/core/save/save-resolution-executor.js +145 -0
  191. package/dist/core/save/save-resolution-executor.js.map +1 -0
  192. package/dist/core/save/save-result-reporter.js +167 -0
  193. package/dist/core/save/save-result-reporter.js.map +1 -0
  194. package/dist/core/save/save-to-source-pipeline.js +154 -0
  195. package/dist/core/save/save-to-source-pipeline.js.map +1 -0
  196. package/dist/core/save/save-versioning.js +4 -4
  197. package/dist/core/save/save-versioning.js.map +1 -1
  198. package/dist/core/save/save-write-coordinator.js +204 -0
  199. package/dist/core/save/save-write-coordinator.js.map +1 -0
  200. package/dist/core/save/save-yml-resolution.js +28 -216
  201. package/dist/core/save/save-yml-resolution.js.map +1 -1
  202. package/dist/core/save/workspace-rename.js +7 -8
  203. package/dist/core/save/workspace-rename.js.map +1 -1
  204. package/dist/core/set/set-output.js +72 -0
  205. package/dist/core/set/set-output.js.map +1 -0
  206. package/dist/core/set/set-pipeline.js +361 -0
  207. package/dist/core/set/set-pipeline.js.map +1 -0
  208. package/dist/core/set/set-types.js +5 -0
  209. package/dist/core/set/set-types.js.map +1 -0
  210. package/dist/core/show/package-resolver.js +257 -0
  211. package/dist/core/show/package-resolver.js.map +1 -0
  212. package/dist/core/show/scope-discovery.js +165 -0
  213. package/dist/core/show/scope-discovery.js.map +1 -0
  214. package/dist/core/show/show-output.js +168 -0
  215. package/dist/core/show/show-output.js.map +1 -0
  216. package/dist/core/show/show-pipeline.js +113 -0
  217. package/dist/core/show/show-pipeline.js.map +1 -0
  218. package/dist/core/show/show-types.js +5 -0
  219. package/dist/core/show/show-types.js.map +1 -0
  220. package/dist/core/source-resolution/dependency-graph.js +104 -0
  221. package/dist/core/source-resolution/dependency-graph.js.map +1 -0
  222. package/dist/core/source-resolution/resolve-mutable-source.js +109 -0
  223. package/dist/core/source-resolution/resolve-mutable-source.js.map +1 -0
  224. package/dist/core/source-resolution/resolve-package-source.js +29 -0
  225. package/dist/core/source-resolution/resolve-package-source.js.map +1 -0
  226. package/dist/core/source-resolution/resolve-registry-version.js +35 -0
  227. package/dist/core/source-resolution/resolve-registry-version.js.map +1 -0
  228. package/dist/core/source-resolution/types.js.map +1 -0
  229. package/dist/core/status/status-file-discovery.js +23 -12
  230. package/dist/core/status/status-file-discovery.js.map +1 -1
  231. package/dist/core/status/status-pipeline.js +134 -0
  232. package/dist/core/status/status-pipeline.js.map +1 -0
  233. package/dist/core/sync/platform-sync-summary.js +27 -0
  234. package/dist/core/sync/platform-sync-summary.js.map +1 -0
  235. package/dist/core/uninstall/flow-aware-uninstaller.js +189 -0
  236. package/dist/core/uninstall/flow-aware-uninstaller.js.map +1 -0
  237. package/dist/core/uninstall/uninstall-file-discovery.js +11 -6
  238. package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
  239. package/dist/core/uninstall/uninstall-pipeline.js +141 -0
  240. package/dist/core/uninstall/uninstall-pipeline.js.map +1 -0
  241. package/dist/core/universal-patterns.js +64 -0
  242. package/dist/core/universal-patterns.js.map +1 -0
  243. package/dist/index.js +99 -6
  244. package/dist/index.js.map +1 -1
  245. package/dist/types/flows.js +8 -0
  246. package/dist/types/flows.js.map +1 -0
  247. package/dist/types/index.js +3 -0
  248. package/dist/types/index.js.map +1 -1
  249. package/dist/types/platform-flows.js +8 -0
  250. package/dist/types/platform-flows.js.map +1 -0
  251. package/dist/types/workspace-index.js +6 -0
  252. package/dist/types/workspace-index.js.map +1 -0
  253. package/dist/utils/custom-path-resolution.js +160 -0
  254. package/dist/utils/custom-path-resolution.js.map +1 -0
  255. package/dist/utils/dependency-coverage.js +1 -1
  256. package/dist/utils/dependency-coverage.js.map +1 -1
  257. package/dist/utils/file-processing.js +1 -1
  258. package/dist/utils/flow-index-installer.js +209 -0
  259. package/dist/utils/flow-index-installer.js.map +1 -0
  260. package/dist/utils/formatters.js +47 -1
  261. package/dist/utils/formatters.js.map +1 -1
  262. package/dist/utils/fs.js +17 -0
  263. package/dist/utils/fs.js.map +1 -1
  264. package/dist/utils/git-clone-registry.js +88 -0
  265. package/dist/utils/git-clone-registry.js.map +1 -0
  266. package/dist/utils/git-clone.js +69 -0
  267. package/dist/utils/git-clone.js.map +1 -0
  268. package/dist/utils/git-spec.js +96 -0
  269. package/dist/utils/git-spec.js.map +1 -0
  270. package/dist/utils/http-client.js +7 -0
  271. package/dist/utils/http-client.js.map +1 -1
  272. package/dist/utils/index-based-installer.js +356 -163
  273. package/dist/utils/index-based-installer.js.map +1 -1
  274. package/dist/utils/install-conflict-handler.js +2 -2
  275. package/dist/utils/install-conflict-handler.js.map +1 -1
  276. package/dist/utils/install-file-discovery.js +18 -13
  277. package/dist/utils/install-file-discovery.js.map +1 -1
  278. package/dist/utils/install-helpers.js +43 -20
  279. package/dist/utils/install-helpers.js.map +1 -1
  280. package/dist/utils/jsonc.js +23 -1
  281. package/dist/utils/jsonc.js.map +1 -1
  282. package/dist/utils/manifest-paths.js +1 -1
  283. package/dist/utils/manifest-paths.js.map +1 -1
  284. package/dist/utils/markdown-frontmatter.js +46 -0
  285. package/dist/utils/markdown-frontmatter.js.map +1 -1
  286. package/dist/utils/package-copy.js +5 -103
  287. package/dist/utils/package-copy.js.map +1 -1
  288. package/dist/utils/package-filters.js +9 -105
  289. package/dist/utils/package-filters.js.map +1 -1
  290. package/dist/utils/package-index-yml.js +27 -6
  291. package/dist/utils/package-index-yml.js.map +1 -1
  292. package/dist/utils/package-input.js +98 -0
  293. package/dist/utils/package-input.js.map +1 -0
  294. package/dist/utils/package-management.js +80 -28
  295. package/dist/utils/package-management.js.map +1 -1
  296. package/dist/utils/package-name-resolution.js +327 -0
  297. package/dist/utils/package-name-resolution.js.map +1 -0
  298. package/dist/utils/package-name.js +18 -16
  299. package/dist/utils/package-name.js.map +1 -1
  300. package/dist/utils/package-versioning.js +2 -33
  301. package/dist/utils/package-versioning.js.map +1 -1
  302. package/dist/utils/package-yml.js +19 -28
  303. package/dist/utils/package-yml.js.map +1 -1
  304. package/dist/utils/path-resolution.js +102 -0
  305. package/dist/utils/path-resolution.js.map +1 -0
  306. package/dist/utils/paths.js +6 -6
  307. package/dist/utils/paths.js.map +1 -1
  308. package/dist/utils/platform-file.js +36 -24
  309. package/dist/utils/platform-file.js.map +1 -1
  310. package/dist/utils/platform-mapper.js +222 -68
  311. package/dist/utils/platform-mapper.js.map +1 -1
  312. package/dist/utils/platform-root-files.js +44 -0
  313. package/dist/utils/platform-root-files.js.map +1 -0
  314. package/dist/utils/platform-utils.js +35 -54
  315. package/dist/utils/platform-utils.js.map +1 -1
  316. package/dist/utils/platform-yaml-merge.js +20 -140
  317. package/dist/utils/platform-yaml-merge.js.map +1 -1
  318. package/dist/utils/prompts.js +92 -7
  319. package/dist/utils/prompts.js.map +1 -1
  320. package/dist/utils/registry-entry-filter.js +50 -27
  321. package/dist/utils/registry-entry-filter.js.map +1 -1
  322. package/dist/utils/registry-paths.js +5 -4
  323. package/dist/utils/registry-paths.js.map +1 -1
  324. package/dist/utils/scope-resolution.js +156 -0
  325. package/dist/utils/scope-resolution.js.map +1 -0
  326. package/dist/utils/source-mutability.js +15 -0
  327. package/dist/utils/source-mutability.js.map +1 -0
  328. package/dist/utils/tarball.js +29 -4
  329. package/dist/utils/tarball.js.map +1 -1
  330. package/dist/utils/version-ranges.js +1 -32
  331. package/dist/utils/version-ranges.js.map +1 -1
  332. package/dist/utils/workspace-index-helpers.js +28 -0
  333. package/dist/utils/workspace-index-helpers.js.map +1 -0
  334. package/dist/utils/workspace-index-ownership.js +100 -0
  335. package/dist/utils/workspace-index-ownership.js.map +1 -0
  336. package/dist/utils/workspace-index-yml.js +173 -0
  337. package/dist/utils/workspace-index-yml.js.map +1 -0
  338. package/examples/custom-subdirs-platform.jsonc +157 -0
  339. package/package.json +7 -2
  340. package/platforms.jsonc +531 -84
  341. package/schemas/map-pipeline-v1.json +256 -0
  342. package/schemas/platforms-v1.json +400 -0
  343. package/specs/README.md +88 -0
  344. package/specs/add/README.md +166 -0
  345. package/specs/agents-claude.md +570 -0
  346. package/specs/agents-opencode.md +622 -0
  347. package/specs/apply/README.md +21 -0
  348. package/specs/apply/apply-behavior.md +58 -0
  349. package/specs/apply/apply-command.md +51 -0
  350. package/specs/apply/conflicts.md +41 -0
  351. package/specs/apply/index-effects.md +81 -0
  352. package/specs/architecture.md +107 -0
  353. package/specs/auth/README.md +17 -0
  354. package/specs/auth/auth-http-contract.md +25 -0
  355. package/specs/auth/cli/credentials.md +39 -0
  356. package/specs/auth/cli/login.md +32 -0
  357. package/specs/auth/cli/logout.md +16 -0
  358. package/specs/claude-mcp.md +1065 -0
  359. package/specs/claude-plugins-marketplace.md +363 -0
  360. package/specs/claude-plugins.md +413 -0
  361. package/specs/cli-options.md +52 -0
  362. package/specs/codex-mcp.md +114 -0
  363. package/specs/commands-overview.md +175 -0
  364. package/specs/directory-layout.md +95 -0
  365. package/specs/install/README.md +12 -4
  366. package/specs/install/git-sources.md +230 -0
  367. package/specs/install/install-behavior.md +483 -73
  368. package/specs/install/package-yml-canonical.md +67 -35
  369. package/specs/install/version-resolution.md +69 -115
  370. package/specs/new/README.md +769 -0
  371. package/specs/new/SUMMARY.md +310 -0
  372. package/specs/new/scope-behavior.md +793 -0
  373. package/specs/pack/README.md +77 -0
  374. package/specs/pack/package-name-resolution.md +330 -0
  375. package/specs/package/README.md +18 -17
  376. package/specs/package/nested-packages-and-parent-packages.md +32 -31
  377. package/specs/package/package-index-yml.md +95 -101
  378. package/specs/package/package-root-layout.md +64 -46
  379. package/specs/package/registry-payload-and-copy.md +50 -44
  380. package/specs/package/universal-content.md +33 -56
  381. package/specs/package-sources.md +248 -0
  382. package/specs/platforms/README.md +52 -0
  383. package/specs/platforms/configuration.md +571 -0
  384. package/specs/platforms/detection.md +552 -0
  385. package/specs/platforms/directory-layout.md +599 -0
  386. package/specs/platforms/examples.md +1146 -0
  387. package/specs/platforms/flow-reference.md +1240 -0
  388. package/specs/platforms/flows.md +1488 -0
  389. package/specs/platforms/map-pipeline.md +801 -0
  390. package/specs/platforms/overview.md +349 -0
  391. package/specs/platforms/specification.md +700 -0
  392. package/specs/platforms/troubleshooting.md +697 -0
  393. package/specs/platforms/universal-converter.md +520 -0
  394. package/specs/push/README.md +1 -0
  395. package/specs/push/push-behavior.md +11 -3
  396. package/specs/push/push-remote-upload.md +1 -1
  397. package/specs/push/push-scoping.md +1 -1
  398. package/specs/push/push-version-selection.md +1 -1
  399. package/specs/registry.md +111 -0
  400. package/specs/remove/README.md +257 -0
  401. package/specs/save/README.md +21 -17
  402. package/specs/save/save-conflict-resolution.md +205 -83
  403. package/specs/save/save-file-discovery.md +6 -4
  404. package/specs/save/save-frontmatter-overrides.md +11 -15
  405. package/specs/save/save-modes-inputs.md +9 -39
  406. package/specs/save/save-naming-scoping.md +4 -4
  407. package/specs/save/save-package-detection.md +13 -13
  408. package/specs/save/save-registry-sync.md +16 -106
  409. package/specs/save/save-versioning.md +80 -0
  410. package/specs/scope-management.md +92 -0
  411. package/specs/set/README.md +520 -0
  412. package/specs/set/set-behavior.md +563 -0
  413. package/specs/show/README.md +483 -0
  414. package/specs/show/show-remote.md +494 -0
  415. package/specs/status/README.md +38 -0
  416. package/specs/uninstall/README.md +231 -0
  417. package/dist/commands/duplicate.js +0 -69
  418. package/dist/commands/duplicate.js.map +0 -1
  419. package/dist/commands/init.js +0 -117
  420. package/dist/commands/init.js.map +0 -1
  421. package/dist/commands/prune.js +0 -357
  422. package/dist/commands/prune.js.map +0 -1
  423. package/dist/commands/tui.js +0 -61
  424. package/dist/commands/tui.js.map +0 -1
  425. package/dist/core/install/index.js +0 -3
  426. package/dist/core/install/index.js.map +0 -1
  427. package/dist/core/push/push-single-file.js +0 -56
  428. package/dist/core/push/push-single-file.js.map +0 -1
  429. package/dist/core/save/package-detection.js +0 -147
  430. package/dist/core/save/package-detection.js.map +0 -1
  431. package/dist/core/save/save-single-file.js +0 -124
  432. package/dist/core/save/save-single-file.js.map +0 -1
  433. package/dist/core/token-store.js +0 -73
  434. package/dist/core/token-store.js.map +0 -1
  435. package/dist/tui/app.js +0 -95
  436. package/dist/tui/app.js.map +0 -1
  437. package/dist/tui/components/package-list.js +0 -73
  438. package/dist/tui/components/package-list.js.map +0 -1
  439. package/dist/tui/controller.js +0 -365
  440. package/dist/tui/controller.js.map +0 -1
  441. package/dist/tui/index.js +0 -12
  442. package/dist/tui/index.js.map +0 -1
  443. package/dist/tui/services/file-index.js +0 -64
  444. package/dist/tui/services/file-index.js.map +0 -1
  445. package/dist/tui/services/packages.js +0 -18
  446. package/dist/tui/services/packages.js.map +0 -1
  447. package/dist/tui/services/save.js +0 -21
  448. package/dist/tui/services/save.js.map +0 -1
  449. package/dist/tui/state/app-state.js +0 -15
  450. package/dist/tui/state/app-state.js.map +0 -1
  451. package/dist/tui/state.js +0 -17
  452. package/dist/tui/state.js.map +0 -1
  453. package/dist/tui/types.js.map +0 -1
  454. package/dist/tui/views/add-file-modal.js +0 -129
  455. package/dist/tui/views/add-file-modal.js.map +0 -1
  456. package/dist/tui/views/file-preview.js +0 -44
  457. package/dist/tui/views/file-preview.js.map +0 -1
  458. package/dist/tui/views/list-packages.js +0 -73
  459. package/dist/tui/views/list-packages.js.map +0 -1
  460. package/dist/tui/views/main-menu.js +0 -29
  461. package/dist/tui/views/main-menu.js.map +0 -1
  462. package/dist/tui/views/manage-view.js +0 -81
  463. package/dist/tui/views/manage-view.js.map +0 -1
  464. package/dist/tui/views/package-hub.js +0 -120
  465. package/dist/tui/views/package-hub.js.map +0 -1
  466. package/dist/tui/views/placeholder.js +0 -24
  467. package/dist/tui/views/placeholder.js.map +0 -1
  468. package/dist/utils/bun-bootstrap.js +0 -72
  469. package/dist/utils/bun-bootstrap.js.map +0 -1
  470. package/dist/utils/entity-id.js +0 -19
  471. package/dist/utils/entity-id.js.map +0 -1
  472. package/dist/utils/package-local-files.js +0 -5
  473. package/dist/utils/package-local-files.js.map +0 -1
  474. package/dist/utils/path-matching.js +0 -74
  475. package/dist/utils/path-matching.js.map +0 -1
  476. package/dist/utils/root-file-operations.js +0 -39
  477. package/dist/utils/root-file-operations.js.map +0 -1
  478. package/dist/utils/root-file-transformer.js +0 -27
  479. package/dist/utils/root-file-transformer.js.map +0 -1
  480. package/dist/utils/yaml-frontmatter.js +0 -25
  481. package/dist/utils/yaml-frontmatter.js.map +0 -1
  482. package/specs/auth/auth-device-flow.md +0 -70
  483. package/specs/login/login-device-flow.md +0 -70
  484. package/specs/platforms.md +0 -193
  485. package/specs/save-pack-versioning.md +0 -224
  486. package/specs/save-pack.md +0 -68
  487. /package/dist/{tui → core/source-resolution}/types.js +0 -0
@@ -1,357 +0,0 @@
1
- import * as semver from 'semver';
2
- import { ensureRegistryDirectories, listPackageVersions, getPackageVersionPath } from '../core/directory.js';
3
- import { registryManager } from '../core/registry.js';
4
- import { packageManager } from '../core/package.js';
5
- import { logger } from '../utils/logger.js';
6
- import { withErrorHandling, UserCancellationError } from '../utils/errors.js';
7
- import { promptConfirmation } from '../utils/prompts.js';
8
- import { isPrereleaseVersion } from '../utils/version-ranges.js';
9
- import { extractBaseVersion } from '../utils/version-generator.js';
10
- import { exists, getDirectorySize } from '../utils/fs.js';
11
- /**
12
- * Extract timestamp from a prerelease version
13
- */
14
- function extractTimestamp(version) {
15
- if (!isPrereleaseVersion(version)) {
16
- return 0;
17
- }
18
- // WIP versions are treated as the latest
19
- return Number.MAX_SAFE_INTEGER;
20
- }
21
- /**
22
- * Find all prerelease versions in the registry
23
- */
24
- async function findPrereleaseVersions(packageFilter) {
25
- logger.debug('Finding prerelease versions', { packageFilter });
26
- const packages = await registryManager.listPackages(undefined, true); // Get all versions, no filter yet
27
- const prereleaseVersions = [];
28
- for (const pkg of packages) {
29
- // Apply exact package name filtering if provided
30
- if (packageFilter && pkg.name !== packageFilter) {
31
- continue;
32
- }
33
- if (isPrereleaseVersion(pkg.version)) {
34
- const baseVersion = extractBaseVersion(pkg.version);
35
- const timestamp = extractTimestamp(pkg.version);
36
- const packagePath = getPackageVersionPath(pkg.name, pkg.version);
37
- prereleaseVersions.push({
38
- packageName: pkg.name,
39
- version: pkg.version,
40
- baseVersion,
41
- timestamp,
42
- path: packagePath
43
- });
44
- }
45
- }
46
- logger.debug(`Found ${prereleaseVersions.length} prerelease versions`);
47
- return prereleaseVersions;
48
- }
49
- /**
50
- * Get the latest base version for a package (highest semver)
51
- * Considers both stable versions and base versions from prereleases
52
- */
53
- async function getLatestBaseVersion(packageName) {
54
- const allVersions = await listPackageVersions(packageName);
55
- const baseVersions = new Set();
56
- for (const version of allVersions) {
57
- if (isPrereleaseVersion(version)) {
58
- // Extract base version from prerelease version
59
- const baseVersion = extractBaseVersion(version);
60
- baseVersions.add(baseVersion);
61
- }
62
- else {
63
- // Add stable version directly
64
- baseVersions.add(version);
65
- }
66
- }
67
- if (baseVersions.size === 0) {
68
- return null;
69
- }
70
- return [...baseVersions].sort(semver.compare).pop();
71
- }
72
- /**
73
- * Group prerelease versions by package
74
- */
75
- function groupByPackage(versions) {
76
- const groups = new Map();
77
- for (const version of versions) {
78
- if (!groups.has(version.packageName)) {
79
- groups.set(version.packageName, []);
80
- }
81
- groups.get(version.packageName).push(version);
82
- }
83
- return groups;
84
- }
85
- /**
86
- * Compare prerelease versions by timestamp (ascending order)
87
- */
88
- function compareByTimestamp(a, b) {
89
- return a.timestamp - b.timestamp;
90
- }
91
- /**
92
- * Analyze which versions to delete and preserve based on preservation rules
93
- */
94
- async function analyzeDeletionSafety(versions, options) {
95
- if (options.all) {
96
- return { toDelete: versions, toPreserve: [] };
97
- }
98
- const packageGroups = groupByPackage(versions);
99
- const toDelete = [];
100
- const toPreserve = [];
101
- for (const [packageName, packageVersions] of packageGroups) {
102
- // 1. Find the latest base version (highest semver)
103
- const latestBaseVersion = await getLatestBaseVersion(packageName);
104
- if (!latestBaseVersion) {
105
- // No stable versions exist, delete all prereleases
106
- toDelete.push(...packageVersions);
107
- continue;
108
- }
109
- // 2. Get prerelease versions ONLY for the latest base version
110
- const latestBasePrereleases = packageVersions.filter(v => v.baseVersion === latestBaseVersion);
111
- if (latestBasePrereleases.length > 0) {
112
- // 3. Preserve only the latest prerelease of the latest base version
113
- const sortedPrereleases = latestBasePrereleases.sort(compareByTimestamp);
114
- const latestPrerelease = sortedPrereleases[sortedPrereleases.length - 1]; // Get the last (latest) one
115
- toPreserve.push(latestPrerelease);
116
- // 4. Delete all other prereleases of the latest base version
117
- toDelete.push(...sortedPrereleases.slice(0, -1)); // All except the last one
118
- }
119
- // 5. Delete ALL prerelease versions of older base versions
120
- const olderBasePrereleases = packageVersions.filter(v => v.baseVersion !== latestBaseVersion);
121
- toDelete.push(...olderBasePrereleases);
122
- }
123
- return { toDelete, toPreserve };
124
- }
125
- /**
126
- * Calculate approximate size of directories to be deleted
127
- */
128
- async function calculateFreedSpace(versions) {
129
- let totalSize = 0;
130
- for (const version of versions) {
131
- try {
132
- if (await exists(version.path)) {
133
- const size = await getDirectorySize(version.path);
134
- totalSize += size;
135
- }
136
- }
137
- catch (error) {
138
- logger.debug(`Failed to calculate size for ${version.path}`, { error });
139
- }
140
- }
141
- return totalSize;
142
- }
143
- /**
144
- * Format bytes to human readable string
145
- */
146
- function formatBytes(bytes) {
147
- if (bytes === 0)
148
- return '0 B';
149
- const k = 1024;
150
- const sizes = ['B', 'KB', 'MB', 'GB'];
151
- const i = Math.floor(Math.log(bytes) / Math.log(k));
152
- return `${(bytes / Math.pow(k, i)).toFixed(1)} ${sizes[i]}`;
153
- }
154
- /**
155
- * Confirm prune operation with detailed breakdown
156
- */
157
- async function confirmPruneOperation(toDelete, toPreserve) {
158
- console.log('🔍 Prerelease Version Analysis:\n');
159
- // Show what will be preserved
160
- if (toPreserve.length > 0) {
161
- console.log('✅ Versions to PRESERVE (latest prerelease of latest base version):');
162
- const preserveGroups = groupByPackage(toPreserve);
163
- for (const [packageName, versions] of preserveGroups) {
164
- for (const version of versions) {
165
- console.log(` 📦 ${packageName}@${version.version} (latest prerelease of v${version.baseVersion})`);
166
- }
167
- }
168
- console.log();
169
- }
170
- // Show packages with no prereleases for latest base version
171
- const deleteGroups = groupByPackage(toDelete);
172
- const preserveGroups = groupByPackage(toPreserve);
173
- const packagesWithoutLatestPrereleases = [...deleteGroups.keys()].filter(name => !preserveGroups.has(name));
174
- if (packagesWithoutLatestPrereleases.length > 0) {
175
- console.log('ℹ️ No prerelease versions found for latest base versions:');
176
- for (const packageName of packagesWithoutLatestPrereleases) {
177
- const latestBase = await getLatestBaseVersion(packageName);
178
- console.log(` 📦 ${packageName} (latest: v${latestBase} - no prereleases)`);
179
- }
180
- console.log();
181
- }
182
- // Show what will be deleted
183
- if (toDelete.length > 0) {
184
- console.log('🗑️ Versions to DELETE:');
185
- for (const [packageName, versions] of deleteGroups) {
186
- console.log(` 📦 ${packageName} (${versions.length} versions):`);
187
- // Group by base version for better display
188
- const versionsByBase = new Map();
189
- for (const version of versions) {
190
- if (!versionsByBase.has(version.baseVersion)) {
191
- versionsByBase.set(version.baseVersion, []);
192
- }
193
- versionsByBase.get(version.baseVersion).push(version);
194
- }
195
- // Sort base versions
196
- const sortedBases = [...versionsByBase.keys()].sort(semver.compare);
197
- for (const baseVersion of sortedBases) {
198
- const baseVersions = versionsByBase.get(baseVersion);
199
- const latestBase = await getLatestBaseVersion(packageName);
200
- const isOlderBase = baseVersion !== latestBase;
201
- for (const version of baseVersions) {
202
- const reason = isOlderBase
203
- ? `(older base: v${baseVersion})`
204
- : `(older prerelease of v${baseVersion})`;
205
- console.log(` └─ ${version.version} ${reason}`);
206
- }
207
- }
208
- }
209
- console.log();
210
- // Calculate and show freed space
211
- const freedSpace = await calculateFreedSpace(toDelete);
212
- if (freedSpace > 0) {
213
- console.log(`💾 Estimated space to be freed: ~${formatBytes(freedSpace)}\n`);
214
- }
215
- }
216
- // Confirmation prompt
217
- const shouldProceed = await promptConfirmation(`Delete ${toDelete.length} prerelease version(s)?`, false // Default to 'no' for safety
218
- );
219
- if (!shouldProceed) {
220
- throw new UserCancellationError();
221
- }
222
- }
223
- /**
224
- * Execute the prune operation
225
- */
226
- async function executePruneOperation(versions) {
227
- const errors = [];
228
- const deletedVersions = [];
229
- const freedSpace = await calculateFreedSpace(versions);
230
- console.log('🧹 Cleaning up prerelease versions...\n');
231
- for (const version of versions) {
232
- try {
233
- await packageManager.deletePackageVersion(version.packageName, version.version);
234
- deletedVersions.push(version);
235
- console.log(`✓ Deleted ${version.packageName}@${version.version}`);
236
- }
237
- catch (error) {
238
- const errorMsg = `Failed to delete ${version.packageName}@${version.version}: ${error}`;
239
- errors.push(errorMsg);
240
- logger.error(errorMsg, { error, version });
241
- console.log(`✗ ${errorMsg}`);
242
- }
243
- }
244
- return {
245
- totalFound: versions.length,
246
- totalDeleted: deletedVersions.length,
247
- totalPreserved: 0, // Will be set by caller
248
- deletedVersions,
249
- preservedVersions: [], // Will be set by caller
250
- freedSpace,
251
- errors
252
- };
253
- }
254
- /**
255
- * Main prune command implementation
256
- */
257
- async function pruneCommand(packageName, options = {}) {
258
- logger.info(`Pruning prerelease versions${packageName ? ` for package: ${packageName}` : ''}`);
259
- // Ensure registry directories exist
260
- await ensureRegistryDirectories();
261
- try {
262
- // 1. Discovery phase
263
- const allPrereleaseVersions = await findPrereleaseVersions(packageName);
264
- if (allPrereleaseVersions.length === 0) {
265
- const scope = packageName ? `for package '${packageName}'` : 'in local registry';
266
- console.log(`No prerelease versions found ${scope}.`);
267
- const emptyResult = {
268
- totalFound: 0,
269
- totalDeleted: 0,
270
- totalPreserved: 0,
271
- deletedVersions: [],
272
- preservedVersions: [],
273
- freedSpace: 0,
274
- errors: []
275
- };
276
- return { success: true, data: emptyResult };
277
- }
278
- // 2. Safety analysis
279
- const { toDelete, toPreserve } = await analyzeDeletionSafety(allPrereleaseVersions, options);
280
- // 3. Dry run mode
281
- if (options.dryRun) {
282
- await confirmPruneOperation(toDelete, toPreserve);
283
- console.log('\n🔍 Dry run complete. Use \'opkg prune\' without --dry-run to perform the cleanup.');
284
- const dryRunResult = {
285
- totalFound: allPrereleaseVersions.length,
286
- totalDeleted: 0,
287
- totalPreserved: toPreserve.length,
288
- deletedVersions: [],
289
- preservedVersions: toPreserve,
290
- freedSpace: await calculateFreedSpace(toDelete),
291
- errors: []
292
- };
293
- return { success: true, data: dryRunResult };
294
- }
295
- // 4. Confirmation (unless --force)
296
- if (!options.force && toDelete.length > 0) {
297
- await confirmPruneOperation(toDelete, toPreserve);
298
- }
299
- // 5. Execution
300
- if (toDelete.length === 0) {
301
- console.log('✨ No prerelease versions need to be pruned.');
302
- const noOpResult = {
303
- totalFound: allPrereleaseVersions.length,
304
- totalDeleted: 0,
305
- totalPreserved: toPreserve.length,
306
- deletedVersions: [],
307
- preservedVersions: toPreserve,
308
- freedSpace: 0,
309
- errors: []
310
- };
311
- return { success: true, data: noOpResult };
312
- }
313
- const result = await executePruneOperation(toDelete);
314
- result.totalPreserved = toPreserve.length;
315
- result.preservedVersions = toPreserve;
316
- // 6. Summary
317
- console.log('\n🎉 Cleanup complete!');
318
- console.log(` 📊 ${result.totalDeleted} prerelease version(s) deleted`);
319
- if (result.totalPreserved > 0) {
320
- console.log(` ✅ ${result.totalPreserved} version(s) preserved`);
321
- }
322
- if (result.freedSpace > 0) {
323
- console.log(` 💾 ${formatBytes(result.freedSpace)} freed`);
324
- }
325
- if (result.errors.length > 0) {
326
- console.log(` ⚠️ ${result.errors.length} error(s) occurred`);
327
- }
328
- return { success: true, data: result };
329
- }
330
- catch (error) {
331
- if (error instanceof UserCancellationError) {
332
- throw error; // Re-throw to be handled by withErrorHandling
333
- }
334
- logger.error('Failed to prune prerelease versions', { error, packageName, options });
335
- throw error instanceof Error ? error : new Error(`Prune operation failed: ${error}`);
336
- }
337
- }
338
- /**
339
- * Setup the prune command
340
- */
341
- export function setupPruneCommand(program) {
342
- program
343
- .command('prune')
344
- .description('Remove old prerelease versions from local registry. Preserves latest prerelease of latest version unless --all is specified.')
345
- .argument('[package-name]', 'specific package to prune (optional)')
346
- .option('--all', 'delete ALL prerelease versions including latest ones')
347
- .option('--dry-run', 'show what would be deleted without doing it')
348
- .option('-f, --force', 'skip confirmation prompts')
349
- .option('-i, --interactive', 'interactively select versions to delete')
350
- .action(withErrorHandling(async (packageName, options) => {
351
- const result = await pruneCommand(packageName, options);
352
- if (!result.success) {
353
- throw new Error(result.error || 'Prune operation failed');
354
- }
355
- }));
356
- }
357
- //# sourceMappingURL=prune.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prune.js","sourceRoot":"","sources":["../../src/commands/prune.ts"],"names":[],"mappings":"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"}
@@ -1,61 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- import { resolve, dirname } from 'node:path';
3
- import { fileURLToPath } from 'node:url';
4
- import { existsSync } from 'node:fs';
5
- import { logger } from '../utils/logger.js';
6
- import { withErrorHandling } from '../utils/errors.js';
7
- import { ensureBunBinary } from '../utils/bun-bootstrap.js';
8
- /**
9
- * Dynamically loads and starts the OpenPackage TUI to avoid loading TUI dependencies
10
- * when running non-TUI commands.
11
- */
12
- export async function launchTui() {
13
- logger.info('Starting OpenPackage TUI');
14
- if (!process?.versions?.bun) {
15
- const bunCommand = await ensureBunBinary();
16
- const distCommandsDir = dirname(fileURLToPath(import.meta.url)); // dist/commands
17
- const projectRoot = resolve(distCommandsDir, '../..'); // go up to repo root for node_modules
18
- const distPath = resolve(distCommandsDir, '../tui/index.js');
19
- logger.info('Re-invoking under Bun for TUI rendering', { bunCommand, distPath });
20
- if (!existsSync(distPath)) {
21
- console.error(`TUI entrypoint not found at ${distPath}. Did you run "npm run build"?`);
22
- process.exit(1);
23
- }
24
- // Use "bun <file>" (not "bun run <file>", which expects a package.json script)
25
- const child = spawn(bunCommand, [distPath], {
26
- stdio: 'inherit',
27
- env: { ...process.env },
28
- cwd: projectRoot,
29
- });
30
- child.on('error', (error) => {
31
- console.error('OpenPackage TUI requires the Bun runtime. Install Bun (https://bun.sh) and rerun with `bunx openpackage` or set BUN_BIN to your bun path.');
32
- logger.debug('Failed to spawn bun for TUI', { error });
33
- process.exit(1);
34
- });
35
- child.on('exit', (code, signal) => {
36
- if (signal) {
37
- process.kill(process.pid, signal);
38
- return;
39
- }
40
- if (code && code !== 0) {
41
- console.error(`Bun exited with code ${code}. Ensure Bun is installed and runnable (set BUN_BIN if needed).`);
42
- }
43
- process.exit(code ?? 0);
44
- });
45
- return;
46
- }
47
- const { startOpenPackageTui } = await import('../tui/index.js');
48
- await startOpenPackageTui();
49
- }
50
- /**
51
- * Registers the `tui` command for explicit launches.
52
- */
53
- export function setupTuiCommand(program) {
54
- program
55
- .command('tui')
56
- .description('Launch the OpenPackage TUI')
57
- .action(withErrorHandling(async () => {
58
- await launchTui();
59
- }));
60
- }
61
- //# sourceMappingURL=tui.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/commands/tui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC9B,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAExC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,MAAM,eAAe,EAAE,CAAC;QAC3C,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACjF,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,sCAAsC;QAC7F,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QAE7D,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,+BAA+B,QAAQ,gCAAgC,CAAC,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QAED,+EAA+E;QAC/E,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE;YAC3C,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;YACvB,GAAG,EAAE,WAAW;SAChB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,OAAO,CAAC,KAAK,CACZ,2IAA2I,CAC3I,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACjC,IAAI,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAClC,OAAO;YACR,CAAC;YACD,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CACZ,wBAAwB,IAAI,iEAAiE,CAC7F,CAAC;YACH,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,OAAO;IACR,CAAC;IAED,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAChE,MAAM,mBAAmB,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC/C,OAAO;SACL,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE;QACpC,MAAM,SAAS,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -1,3 +0,0 @@
1
- export { runInstallPipeline } from './install-pipeline.js';
2
- export { runBulkInstallPipeline } from './bulk-install-pipeline.js';
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/install/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1,56 +0,0 @@
1
- import { resolve, relative } from 'path';
2
- import { DIR_PATTERNS } from '../../constants/index.js';
3
- import { exists, isFile } from '../../utils/fs.js';
4
- import { listAllPackages } from '../directory.js';
5
- import { normalizePathForProcessing } from '../../utils/path-normalization.js';
6
- import { mapPlatformFileToUniversal } from '../../utils/platform-mapper.js';
7
- import { safePrompts } from '../../utils/prompts.js';
8
- import { UserCancellationError } from '../../utils/errors.js';
9
- export const SINGLE_FILE_PACKAGE = 'f';
10
- export async function resolveSingleFileInput(cwd, rawInput) {
11
- const absolutePath = resolve(cwd, rawInput);
12
- const looksLikePath = rawInput.includes('/') || rawInput.includes('\\') || rawInput.startsWith('.');
13
- let registryPath = null;
14
- if (await exists(absolutePath)) {
15
- if (await isFile(absolutePath)) {
16
- registryPath = computeRegistryPath(cwd, absolutePath);
17
- }
18
- }
19
- if (!registryPath && looksLikePath) {
20
- registryPath = normalizePathForProcessing(rawInput);
21
- }
22
- if (!registryPath) {
23
- return null;
24
- }
25
- const allPackages = await listAllPackages();
26
- const singleFilePackages = allPackages.filter(name => name === SINGLE_FILE_PACKAGE || name.endsWith(`/${SINGLE_FILE_PACKAGE}`));
27
- if (singleFilePackages.length === 0) {
28
- console.error("❌ Single-file package 'f' not found in local registry. Run 'opkg save <file>' first.");
29
- return { kind: 'missing', registryPath };
30
- }
31
- let selectedPackage = singleFilePackages[0];
32
- if (singleFilePackages.length > 1) {
33
- const response = await safePrompts({
34
- type: 'select',
35
- name: 'pkg',
36
- message: 'Select single-file package to push',
37
- choices: singleFilePackages.map(pkg => ({ title: pkg, value: pkg })),
38
- hint: 'Use arrow keys to navigate, Enter to select'
39
- });
40
- selectedPackage = response.pkg;
41
- }
42
- if (!selectedPackage) {
43
- throw new UserCancellationError('Operation cancelled by user');
44
- }
45
- return { kind: 'ok', packageName: selectedPackage, registryPath };
46
- }
47
- function computeRegistryPath(cwd, absolutePath) {
48
- const platformMapping = mapPlatformFileToUniversal(absolutePath);
49
- if (platformMapping) {
50
- const { subdir, relPath } = platformMapping;
51
- return normalizePathForProcessing([DIR_PATTERNS.OPENPACKAGE, subdir, relPath].filter(Boolean).join('/'));
52
- }
53
- const rel = relative(cwd, absolutePath);
54
- return normalizePathForProcessing(rel);
55
- }
56
- //# sourceMappingURL=push-single-file.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"push-single-file.js","sourceRoot":"","sources":["../../../src/core/push/push-single-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAMtC,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAW,EACX,QAAgB;IAEhB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC3C,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IAEnG,IAAI,YAAY,GAAkB,IAAI,CAAA;IAEtC,IAAI,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,IAAI,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/B,YAAY,GAAG,mBAAmB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAED,IAAI,CAAC,YAAY,IAAI,aAAa,EAAE,CAAC;QACnC,YAAY,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAA;IACrD,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAA;IAC3C,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAC3C,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,mBAAmB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,mBAAmB,EAAE,CAAC,CACjF,CAAA;IAED,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,sFAAsF,CAAC,CAAA;QACrG,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAA;IAC1C,CAAC;IAED,IAAI,eAAe,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;IAE3C,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;YACjC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,oCAAoC;YAC7C,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACpE,IAAI,EAAE,6CAA6C;SACpD,CAAC,CAAA;QACF,eAAe,GAAI,QAAgB,CAAC,GAAG,CAAA;IACzC,CAAC;IAED,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,qBAAqB,CAAC,6BAA6B,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,CAAA;AACnE,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW,EAAE,YAAoB;IAC5D,MAAM,eAAe,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAA;IAChE,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAA;QAC3C,OAAO,0BAA0B,CAC/B,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACtE,CAAA;IACH,CAAC;IACD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;IACvC,OAAO,0BAA0B,CAAC,GAAG,CAAC,CAAA;AACxC,CAAC"}
@@ -1,147 +0,0 @@
1
- import { join } from 'path';
2
- import { DIR_PATTERNS, FILE_PATTERNS, OPENPACKAGE_DIRS } from '../../constants/index.js';
3
- import { exists, isDirectory } from '../../utils/fs.js';
4
- import { parsePackageYml } from '../../utils/package-yml.js';
5
- import { arePackageNamesEquivalent } from '../../utils/package-name.js';
6
- import { getLocalPackageDir } from '../../utils/paths.js';
7
- import { findDirectoriesContainingFile } from '../../utils/file-processing.js';
8
- import { logger } from '../../utils/logger.js';
9
- /**
10
- * Core rule: any directory that contains `.openpackage/package.yml` is a valid package.
11
- */
12
- export async function isValidPackageDirectory(dir) {
13
- const packageYmlPath = join(dir, DIR_PATTERNS.OPENPACKAGE, FILE_PATTERNS.PACKAGE_YML);
14
- return exists(packageYmlPath);
15
- }
16
- /**
17
- * Load package config from a directory that satisfies the core rule.
18
- */
19
- export async function loadPackageConfig(dir) {
20
- const packageYmlPath = join(dir, DIR_PATTERNS.OPENPACKAGE, FILE_PATTERNS.PACKAGE_YML);
21
- if (!(await exists(packageYmlPath))) {
22
- return null;
23
- }
24
- try {
25
- return await parsePackageYml(packageYmlPath);
26
- }
27
- catch (error) {
28
- logger.debug(`Failed to parse package.yml at ${packageYmlPath}: ${error}`);
29
- return null;
30
- }
31
- }
32
- /**
33
- * Detect package context for save/pack commands.
34
- *
35
- * Scope:
36
- * - Root package at `cwd/.openpackage/package.yml`
37
- * - Nested packages at `cwd/.openpackage/packages/<name>/package.yml`
38
- */
39
- export async function detectPackageContext(cwd, packageName) {
40
- const rootPackageYmlPath = join(cwd, DIR_PATTERNS.OPENPACKAGE, FILE_PATTERNS.PACKAGE_YML);
41
- const hasRootPackage = await exists(rootPackageYmlPath);
42
- // No package name provided: target cwd as the package itself.
43
- if (!packageName) {
44
- if (!hasRootPackage) {
45
- return null;
46
- }
47
- try {
48
- const config = await parsePackageYml(rootPackageYmlPath);
49
- return {
50
- packageDir: cwd,
51
- packageYmlPath: rootPackageYmlPath,
52
- config,
53
- location: 'root',
54
- isCwdPackage: true
55
- };
56
- }
57
- catch (error) {
58
- logger.warn(`Failed to parse root package.yml: ${error}`);
59
- return null;
60
- }
61
- }
62
- // Package name provided: check root first.
63
- if (hasRootPackage) {
64
- try {
65
- const rootConfig = await parsePackageYml(rootPackageYmlPath);
66
- if (arePackageNamesEquivalent(rootConfig.name, packageName)) {
67
- return {
68
- packageDir: cwd,
69
- packageYmlPath: rootPackageYmlPath,
70
- config: rootConfig,
71
- location: 'root',
72
- isCwdPackage: true
73
- };
74
- }
75
- }
76
- catch (error) {
77
- logger.debug(`Failed to parse root package.yml: ${error}`);
78
- }
79
- }
80
- // Check nested packages directory for direct match.
81
- const nestedPackageDir = getLocalPackageDir(cwd, packageName);
82
- const nestedPackageYmlPath = join(nestedPackageDir, FILE_PATTERNS.PACKAGE_YML);
83
- if (await exists(nestedPackageYmlPath)) {
84
- try {
85
- const nestedConfig = await parsePackageYml(nestedPackageYmlPath);
86
- if (arePackageNamesEquivalent(nestedConfig.name, packageName)) {
87
- return {
88
- packageDir: nestedPackageDir,
89
- packageYmlPath: nestedPackageYmlPath,
90
- config: nestedConfig,
91
- location: 'nested',
92
- isCwdPackage: false
93
- };
94
- }
95
- }
96
- catch (error) {
97
- logger.debug(`Failed to parse nested package.yml at ${nestedPackageYmlPath}: ${error}`);
98
- }
99
- }
100
- // Scan nested packages for cases where directory name differs from package name.
101
- const packagesDir = join(cwd, DIR_PATTERNS.OPENPACKAGE, OPENPACKAGE_DIRS.PACKAGES);
102
- if (await exists(packagesDir) && (await isDirectory(packagesDir))) {
103
- try {
104
- const packageDirs = await findDirectoriesContainingFile(packagesDir, FILE_PATTERNS.PACKAGE_YML, async (filePath) => {
105
- try {
106
- return await parsePackageYml(filePath);
107
- }
108
- catch {
109
- return null;
110
- }
111
- });
112
- for (const { dirPath, parsedContent } of packageDirs) {
113
- if (!parsedContent)
114
- continue;
115
- const packageRoot = dirPath;
116
- if (arePackageNamesEquivalent(parsedContent.name, packageName)) {
117
- return {
118
- packageDir: packageRoot,
119
- packageYmlPath: join(packageRoot, FILE_PATTERNS.PACKAGE_YML),
120
- config: parsedContent,
121
- location: 'nested',
122
- isCwdPackage: false
123
- };
124
- }
125
- }
126
- }
127
- catch (error) {
128
- logger.debug(`Failed to scan packages directory: ${error}`);
129
- }
130
- }
131
- return null;
132
- }
133
- export function getNoPackageDetectedMessage(packageName) {
134
- if (packageName) {
135
- return (`Package '${packageName}' not found.\n\n` +
136
- `Checked locations:\n` +
137
- ` • Root package: .openpackage/package.yml\n` +
138
- ` • Nested packages: .openpackage/packages/${packageName}/\n\n` +
139
- `💡 To create a new package, run: opkg save ${packageName}`);
140
- }
141
- return (`No package detected at current directory.\n\n` +
142
- `A valid package requires .openpackage/package.yml to exist.\n\n` +
143
- `💡 To initialize a package:\n` +
144
- ` • Run 'opkg init' to create a new package\n` +
145
- ` • Or specify a package name: 'opkg save <package-name>'`);
146
- }
147
- //# sourceMappingURL=package-detection.js.map