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
@@ -9,12 +9,12 @@ export const ERROR_MESSAGES = {
9
9
  INVALID_VERSION_FORMAT: 'Invalid version format: %s',
10
10
  INVALID_BUMP_TYPE: 'Invalid bump type: %s. Must be \'patch\', \'minor\', or \'major\'.',
11
11
  INVALID_VERSION_TYPE: 'Invalid version type: %s. Only \'%s\' is supported.',
12
- PARSE_PACKAGE_YML_FAILED: 'Failed to parse existing package.yml at %s: %s',
12
+ PARSE_PACKAGE_YML_FAILED: 'Failed to parse existing openpackage.yml at %s: %s',
13
13
  PACKAGE_DIR_NOT_FOUND: 'Package directory not found at %s'
14
14
  };
15
15
  export const LOG_PREFIXES = {
16
- CREATED: '✓ Created package.yml in',
17
- FOUND: '✓ Found existing package.yml',
16
+ CREATED: '✓ Created openpackage.yml in',
17
+ FOUND: '✓ Found existing openpackage.yml',
18
18
  NAME: '✓ Name:',
19
19
  VERSION: '✓ Version:',
20
20
  FILES: '✓ Found',
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/core/save/constants.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,aAAa,GAAG,MAAe,CAAC;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AACvC,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAE5C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,sBAAsB,EAAE,yDAAyD;IACjF,cAAc,EAAE,sDAAsD;IACtE,WAAW,EAAE,wBAAwB;IACrC,mBAAmB,EAAE,6BAA6B;IAClD,sBAAsB,EAAE,4BAA4B;IACpD,iBAAiB,EAAE,oEAAoE;IACvF,oBAAoB,EAAE,qDAAqD;IAC3E,wBAAwB,EAAE,gDAAgD;IAC1E,qBAAqB,EAAE,mCAAmC;CAClD,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE,0BAA0B;IACnC,KAAK,EAAE,8BAA8B;IACrC,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,YAAY;IACrB,KAAK,EAAE,SAAS;IAChB,YAAY,EAAE,gBAAgB;IAC9B,QAAQ,EAAE,iCAAiC;IAC3C,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,0BAA0B;IACnC,gBAAgB,EAAE,2BAA2B;IAC7C,UAAU,EAAE,uCAAuC;IACnD,WAAW,EAAE,8BAA8B;IAC3C,eAAe,EAAE,kCAAkC;IACnD,cAAc,EAAE,iCAAiC;IACjD,gBAAgB,EAAE,+BAA+B;IACjD,cAAc,EAAE,+BAA+B;IAC/C,cAAc,EAAE,0CAA0C;IAC1D,OAAO,EAAE,aAAa;IACtB,cAAc,EAAE,oBAAoB;IACpC,eAAe,EAAE,KAAK;CACd,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IACjD,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;CAC5C,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/core/save/constants.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,aAAa,GAAG,MAAe,CAAC;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AACvC,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAE5C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,sBAAsB,EAAE,yDAAyD;IACjF,cAAc,EAAE,sDAAsD;IACtE,WAAW,EAAE,wBAAwB;IACrC,mBAAmB,EAAE,6BAA6B;IAClD,sBAAsB,EAAE,4BAA4B;IACpD,iBAAiB,EAAE,oEAAoE;IACvF,oBAAoB,EAAE,qDAAqD;IAC3E,wBAAwB,EAAE,oDAAoD;IAC9E,qBAAqB,EAAE,mCAAmC;CAClD,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE,8BAA8B;IACvC,KAAK,EAAE,kCAAkC;IACzC,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,YAAY;IACrB,KAAK,EAAE,SAAS;IAChB,YAAY,EAAE,gBAAgB;IAC9B,QAAQ,EAAE,iCAAiC;IAC3C,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,0BAA0B;IACnC,gBAAgB,EAAE,2BAA2B;IAC7C,UAAU,EAAE,uCAAuC;IACnD,WAAW,EAAE,8BAA8B;IAC3C,eAAe,EAAE,kCAAkC;IACnD,cAAc,EAAE,iCAAiC;IACjD,gBAAgB,EAAE,+BAA+B;IACjD,cAAc,EAAE,+BAA+B;IAC/C,cAAc,EAAE,0CAA0C;IAC1D,OAAO,EAAE,aAAa;IACtB,cAAc,EAAE,oBAAoB;IACpC,eAAe,EAAE,KAAK;CACd,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IACjD,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;CAC5C,CAAC"}
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Flow-Based Saver
3
+ *
4
+ * Handles reverse flow transformations for the save pipeline.
5
+ * Transforms workspace platform-specific files back to universal package format.
6
+ */
7
+ import { basename } from 'path';
8
+ import { getPlatformDefinition, getGlobalImportFlows, platformUsesFlows } from '../platforms.js';
9
+ import { createFlowExecutor } from '../flows/flow-executor.js';
10
+ import { logger } from '../../utils/logger.js';
11
+ /**
12
+ * Find the matching reverse flow for a workspace file
13
+ *
14
+ * Reverse flow logic:
15
+ * - Workspace file path matches the flow's 'to' pattern
16
+ * - Transform workspace → package (reverse of install)
17
+ * - Use the flow's 'from' pattern as the target in package
18
+ */
19
+ function findReverseFlow(workspaceFilePath, platform, cwd) {
20
+ try {
21
+ const definition = getPlatformDefinition(platform, cwd);
22
+ if (!definition.import || definition.import.length === 0) {
23
+ return null;
24
+ }
25
+ }
26
+ catch (error) {
27
+ // Platform not found - return null to skip
28
+ logger.debug(`Platform ${platform} not found: ${error}`);
29
+ return null;
30
+ }
31
+ const definition = getPlatformDefinition(platform, cwd);
32
+ // Get all applicable import flows (global + platform)
33
+ const globalImportFlows = getGlobalImportFlows(cwd) ?? [];
34
+ const allImportFlows = [...globalImportFlows, ...definition.import];
35
+ // Normalize workspace path for matching
36
+ const normalizedWorkspacePath = workspaceFilePath.replace(/\\/g, '/');
37
+ for (const flow of allImportFlows) {
38
+ // Import flows use 'from' to match workspace files
39
+ // For array patterns in 'from', try each pattern
40
+ const fromPatterns = Array.isArray(flow.from) ? flow.from : [flow.from];
41
+ for (const fromPattern of fromPatterns) {
42
+ // Match the workspace file against the 'from' pattern
43
+ const match = matchWorkspacePathToPattern(normalizedWorkspacePath, fromPattern, definition.rootDir);
44
+ if (match) {
45
+ // Extract variables from the match (e.g., {name})
46
+ const variables = match.variables;
47
+ // Resolve the 'to' pattern with extracted variables (destination in package)
48
+ const toPattern = typeof flow.to === 'string' ? flow.to : Object.keys(flow.to)[0];
49
+ const registryPath = resolvePattern(toPattern, variables);
50
+ return { flow, registryPath };
51
+ }
52
+ }
53
+ }
54
+ return null;
55
+ }
56
+ function matchWorkspacePathToPattern(workspacePath, pattern, rootDir) {
57
+ // Normalize both paths
58
+ const normalizedPath = workspacePath.replace(/\\/g, '/');
59
+ const normalizedPattern = pattern.replace(/\\/g, '/');
60
+ // Extract pattern parts
61
+ const patternParts = normalizedPattern.split('/');
62
+ const pathParts = normalizedPath.split('/');
63
+ // Must have same number of parts
64
+ if (patternParts.length !== pathParts.length) {
65
+ return null;
66
+ }
67
+ const variables = {};
68
+ // Match each part
69
+ for (let i = 0; i < patternParts.length; i++) {
70
+ const patternPart = patternParts[i];
71
+ const pathPart = pathParts[i];
72
+ // Check for variable placeholder {name}
73
+ const varMatch = patternPart.match(/^\{(\w+)\}$/);
74
+ if (varMatch) {
75
+ variables[varMatch[1]] = pathPart;
76
+ continue;
77
+ }
78
+ // Check for inline variable {name}.ext
79
+ const inlineVarMatch = patternPart.match(/^(.*)\{(\w+)\}(.*)$/);
80
+ if (inlineVarMatch) {
81
+ const [, prefix = '', varName, suffix = ''] = inlineVarMatch;
82
+ if (pathPart.startsWith(prefix) && pathPart.endsWith(suffix)) {
83
+ const value = pathPart.slice(prefix.length, pathPart.length - suffix.length);
84
+ variables[varName] = value;
85
+ continue;
86
+ }
87
+ }
88
+ // Exact match required
89
+ if (patternPart !== pathPart) {
90
+ return null;
91
+ }
92
+ }
93
+ return { variables };
94
+ }
95
+ /**
96
+ * Resolve a pattern with variables
97
+ *
98
+ * Example: "rules/{name}.md" with { name: "typescript" } → "rules/typescript.md"
99
+ */
100
+ function resolvePattern(pattern, variables) {
101
+ let resolved = pattern;
102
+ for (const [key, value] of Object.entries(variables)) {
103
+ resolved = resolved.replace(`{${key}}`, value);
104
+ }
105
+ return resolved;
106
+ }
107
+ /**
108
+ * Execute reverse flow transformation
109
+ *
110
+ * Reverse transformations:
111
+ * - Read workspace file
112
+ * - Reverse key mapping (if any)
113
+ * - Reverse format conversion (if any)
114
+ * - Write to package registry path
115
+ */
116
+ async function executeReverseFlow(workspaceFilePath, flow, registryPath, packageRoot, cwd, options) {
117
+ const executor = createFlowExecutor();
118
+ try {
119
+ // Get relative path from workspace root
120
+ const relativeWorkspacePath = workspaceFilePath.startsWith(cwd)
121
+ ? workspaceFilePath.slice(cwd.length + 1).replace(/\\/g, '/')
122
+ : workspaceFilePath;
123
+ // Create reverse flow
124
+ // For now, we'll do a simple copy - full reverse transformation coming later
125
+ const reverseFlow = {
126
+ from: relativeWorkspacePath,
127
+ to: registryPath,
128
+ // TODO: Implement full reverse transformation
129
+ // - Reverse key mapping
130
+ // - Reverse format conversion
131
+ // - Reverse embed/extract
132
+ };
133
+ // Create flow context for save (reverse of install)
134
+ // For save: source is workspace, target is package
135
+ // So we swap the roots compared to install
136
+ const context = {
137
+ workspaceRoot: packageRoot, // Target for save (writes to package)
138
+ packageRoot: cwd, // Source for save (reads from workspace)
139
+ platform: '', // Not needed for reverse flow
140
+ packageName: basename(packageRoot),
141
+ variables: {},
142
+ direction: 'save',
143
+ dryRun: options.dryRun ?? false
144
+ };
145
+ // Execute the reverse flow
146
+ const result = await executor.executeFlow(reverseFlow, context);
147
+ if (!result.success) {
148
+ return {
149
+ success: false,
150
+ sourceWorkspacePath: workspaceFilePath,
151
+ targetRegistryPath: registryPath,
152
+ transformed: false,
153
+ error: result.error
154
+ };
155
+ }
156
+ return {
157
+ success: true,
158
+ sourceWorkspacePath: workspaceFilePath,
159
+ targetRegistryPath: registryPath,
160
+ transformed: result.transformed ?? false
161
+ };
162
+ }
163
+ catch (error) {
164
+ return {
165
+ success: false,
166
+ sourceWorkspacePath: workspaceFilePath,
167
+ targetRegistryPath: registryPath,
168
+ transformed: false,
169
+ error: error instanceof Error ? error : new Error(String(error))
170
+ };
171
+ }
172
+ }
173
+ /**
174
+ * Check if a platform uses flows
175
+ */
176
+ export function shouldUseFlowsForSave(platform, cwd) {
177
+ if (!platform) {
178
+ return false;
179
+ }
180
+ return platformUsesFlows(platform, cwd);
181
+ }
182
+ /**
183
+ * Save workspace files using reverse flows
184
+ *
185
+ * Process:
186
+ * 1. Group candidates by platform
187
+ * 2. For each workspace candidate:
188
+ * - Find matching reverse flow
189
+ * - Execute reverse transformation
190
+ * - Write to package registry
191
+ * 3. Return results
192
+ */
193
+ export async function saveWorkspaceFilesWithFlows(workspaceCandidates, packageRoot, cwd, options = {}) {
194
+ const fileResults = [];
195
+ const errors = [];
196
+ logger.debug(`Saving ${workspaceCandidates.length} workspace files using flows`);
197
+ for (const candidate of workspaceCandidates) {
198
+ // Skip candidates without platform info
199
+ if (!candidate.platform) {
200
+ fileResults.push({
201
+ success: false,
202
+ sourceWorkspacePath: candidate.fullPath,
203
+ targetRegistryPath: candidate.registryPath,
204
+ transformed: false,
205
+ skipped: true,
206
+ skipReason: 'No platform detected for file'
207
+ });
208
+ continue;
209
+ }
210
+ // Check if platform uses flows
211
+ if (!shouldUseFlowsForSave(candidate.platform, cwd)) {
212
+ fileResults.push({
213
+ success: false,
214
+ sourceWorkspacePath: candidate.fullPath,
215
+ targetRegistryPath: candidate.registryPath,
216
+ transformed: false,
217
+ skipped: true,
218
+ skipReason: `Platform ${candidate.platform} does not use flows`
219
+ });
220
+ continue;
221
+ }
222
+ // Find matching reverse flow
223
+ const match = findReverseFlow(candidate.displayPath, candidate.platform, cwd);
224
+ if (!match) {
225
+ // No reverse flow found - skip this file (handled by legacy save)
226
+ fileResults.push({
227
+ success: false,
228
+ sourceWorkspacePath: candidate.fullPath,
229
+ targetRegistryPath: candidate.registryPath,
230
+ transformed: false,
231
+ skipped: true,
232
+ skipReason: 'No matching reverse flow'
233
+ });
234
+ continue;
235
+ }
236
+ // Execute reverse flow
237
+ const result = await executeReverseFlow(candidate.fullPath, match.flow, match.registryPath, packageRoot, cwd, options);
238
+ fileResults.push(result);
239
+ if (!result.success) {
240
+ errors.push({
241
+ file: candidate.fullPath,
242
+ error: result.error ?? new Error('Unknown error')
243
+ });
244
+ }
245
+ }
246
+ // Calculate statistics
247
+ const filesProcessed = fileResults.filter(r => !r.skipped).length;
248
+ const filesWritten = fileResults.filter(r => r.success && !r.skipped).length;
249
+ const filesSkipped = fileResults.filter(r => r.skipped).length;
250
+ return {
251
+ success: errors.length === 0,
252
+ filesProcessed,
253
+ filesWritten,
254
+ filesSkipped,
255
+ fileResults,
256
+ errors
257
+ };
258
+ }
259
+ /**
260
+ * Get statistics from flow save result
261
+ */
262
+ export function getFlowSaveStatistics(result) {
263
+ return {
264
+ total: result.filesProcessed + result.filesSkipped,
265
+ written: result.filesWritten,
266
+ skipped: result.filesSkipped,
267
+ errors: result.errors.length
268
+ };
269
+ }
270
+ //# sourceMappingURL=flow-based-saver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-based-saver.js","sourceRoot":"","sources":["../../../src/core/save/flow-based-saver.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { MODE_LABELS } from './constants.js';
5
5
  export async function resolveWorkspaceNames(packageInput, renameOption, mode) {
6
6
  const { name: inputName, version } = parsePackageInput(packageInput);
7
7
  if (version) {
8
- throw new ValidationError(`${MODE_LABELS[mode].label} command does not accept explicit versions. Edit package.yml to change the stable line.`);
8
+ throw new ValidationError(`${MODE_LABELS[mode].label} command does not accept explicit versions. Edit openpackage.yml to change the stable line.`);
9
9
  }
10
10
  if (renameOption?.trim()) {
11
11
  const { name: renameName, version: renameVersion } = parsePackageInput(renameOption.trim());
@@ -1 +1 @@
1
- {"version":3,"file":"name-resolution.js","sourceRoot":"","sources":["../../../src/core/save/name-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAY7C,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,YAAoB,EACpB,YAAgC,EAChC,IAAc;IAEd,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACrE,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,eAAe,CACvB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,yFAAyF,CACpH,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC;QACzB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,iBAAiB,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5F,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,IAAI,eAAe,CAAC,yCAAyC,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,KAAK,SAAS,CAAC;QAC7C,OAAO;YACL,SAAS;YACT,SAAS,EAAE,UAAU;YACrB,WAAW;YACX,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;SACnD,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,2BAA2B,CAAC,SAAS,CAAC,CAAC;IAEnE,OAAO;QACL,SAAS;QACT,SAAS,EAAE,aAAa,CAAC,aAAa;QACtC,WAAW,EAAE,aAAa,CAAC,WAAW;QACtC,YAAY,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KAChE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"name-resolution.js","sourceRoot":"","sources":["../../../src/core/save/name-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAY7C,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,YAAoB,EACpB,YAAgC,EAChC,IAAc;IAEd,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACrE,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,eAAe,CACvB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,6FAA6F,CACxH,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC;QACzB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,iBAAiB,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5F,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,IAAI,eAAe,CAAC,yCAAyC,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,KAAK,SAAS,CAAC;QAC7C,OAAO;YACL,SAAS;YACT,SAAS,EAAE,UAAU;YACrB,WAAW;YACX,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;SACnD,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,2BAA2B,CAAC,SAAS,CAAC,CAAC;IAEnE,OAAO;QACL,SAAS;QACT,SAAS,EAAE,aAAa,CAAC,aAAa;QACtC,WAAW,EAAE,aAAa,CAAC,WAAW;QACtC,YAAY,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KAChE,CAAC;AACJ,CAAC"}
@@ -1,4 +1,3 @@
1
- import { dirname } from 'path';
2
1
  import { normalizePackageName } from '../../utils/package-name.js';
3
2
  import { logger } from '../../utils/logger.js';
4
3
  import { getPackageFilesDir, getPackageYmlPath, getPackageRootDir } from '../package-context.js';
@@ -12,17 +11,17 @@ export async function readOrCreateBasePackageYml(cwd, name) {
12
11
  defaultVersion: undefined
13
12
  });
14
13
  if (ensured.isNew) {
15
- logger.debug('No package.yml found for save, creating', { dir: ensured.packageDir });
14
+ logger.debug('No openpackage.yml found for save, creating', { dir: ensured.packageDir });
16
15
  console.log(`${LOG_PREFIXES.CREATED} ${ensured.packageDir}`);
17
16
  console.log(`${LOG_PREFIXES.NAME} ${ensured.packageConfig.name}`);
18
17
  console.log(`${LOG_PREFIXES.VERSION} ${ensured.packageConfig.version ?? UNVERSIONED}`);
19
18
  }
20
19
  else {
21
- logger.debug('Found existing package.yml for save', { path: ensured.packageYmlPath });
20
+ logger.debug('Found existing openpackage.yml for save', { path: ensured.packageYmlPath });
22
21
  console.log(`✓ Found existing package ${ensured.packageConfig.name}${ensured.packageConfig.version ? `@${ensured.packageConfig.version}` : ''}`);
23
22
  }
24
- // ensured.packageDir is the content directory (.openpackage/), so package root is parent
25
- const packageRootDir = dirname(ensured.packageDir);
23
+ // Cached packages mirror the payload at their root
24
+ const packageRootDir = ensured.packageDir;
26
25
  return {
27
26
  name: ensured.normalizedName,
28
27
  version: ensured.packageConfig.version,
@@ -1 +1 @@
1
- {"version":3,"file":"package-yml-generator.js","sourceRoot":"","sources":["../../../src/core/save/package-yml-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package-yml-generator.js","sourceRoot":"","sources":["../../../src/core/save/package-yml-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAuB,MAAM,uBAAuB,CAAC;AACtH,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAMpE,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,GAAW,EACX,IAAY;IAEZ,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,cAAc,EAAE;QAC9D,cAAc,EAAE,SAAS;KAC1B,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC,CAAC;IACzF,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CACT,4BAA4B,OAAO,CAAC,aAAa,CAAC,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACpI,CAAC;IACJ,CAAC;IAED,mDAAmD;IACnD,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IAE1C,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,cAAc;QAC5B,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO;QACtC,MAAM,EAAE,OAAO,CAAC,aAAa;QAC7B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,cAAc;QACd,eAAe,EAAE,OAAO,CAAC,UAAU;QACnC,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,KAAK;QACnB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAAW,EACX,WAAmB,EACnB,UAA8B,EAAE;IAEhC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,MAAM,GAAG,GAAG,MAAM,0BAA0B,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAE/D,IAAI,CAAC,YAAY,IAAI,YAAY,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACtD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE;QACrD,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI;QACrB,EAAE,EAAE,YAAY;KACjB,CAAC,CAAC;IAEH,MAAM,2BAA2B,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;IAE1D,MAAM,cAAc,GAAG,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IACtE,MAAM,cAAc,GAAG,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IACtE,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAExE,OAAO;QACL,GAAG,GAAG;QACN,IAAI,EAAE,YAAY;QAClB,cAAc;QACd,cAAc;QACd,eAAe;QACf,MAAM,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;KAC9C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,215 @@
1
+ import { join } from 'path';
2
+ import { exists, getStats, readTextFile, walkFiles } from '../../utils/fs.js';
3
+ import { calculateFileHash } from '../../utils/hash-utils.js';
4
+ import { normalizePathForProcessing } from '../../utils/path-normalization.js';
5
+ import { inferPlatformFromWorkspaceFile } from '../platforms.js';
6
+ import { logger } from '../../utils/logger.js';
7
+ import { splitFrontmatter } from '../../utils/markdown-frontmatter.js';
8
+ import { getTargetPath } from '../../utils/workspace-index-helpers.js';
9
+ /**
10
+ * Build all candidates from index mapping
11
+ *
12
+ * This function discovers all workspace and local (source) candidates
13
+ * based on the workspace index mappings.
14
+ */
15
+ export async function buildCandidates(options) {
16
+ const errors = [];
17
+ // Extract all registry paths from mappings
18
+ const mappedRegistryPaths = Object.keys(options.filesMapping);
19
+ // Build local candidates (from package source)
20
+ const localCandidates = await buildLocalCandidates(options.packageRoot, mappedRegistryPaths);
21
+ // Build workspace candidates (from workspace paths)
22
+ const { candidates: workspaceCandidates, errors: workspaceErrors } = await buildWorkspaceCandidates(options.workspaceRoot, options.packageRoot, options.filesMapping);
23
+ errors.push(...workspaceErrors);
24
+ return {
25
+ localCandidates,
26
+ workspaceCandidates,
27
+ errors
28
+ };
29
+ }
30
+ /**
31
+ * Build local (source) candidates for mapped registry paths only
32
+ *
33
+ * Only loads files that exist in the index mapping - we don't want to
34
+ * discover unmapped files in the source.
35
+ */
36
+ async function buildLocalCandidates(packageRoot, mappedRegistryPaths) {
37
+ const candidates = [];
38
+ for (const rawKey of mappedRegistryPaths) {
39
+ const normalizedKey = normalizePathForProcessing(rawKey);
40
+ if (!normalizedKey)
41
+ continue;
42
+ // Skip directory keys - we'll enumerate their contents separately
43
+ if (normalizedKey.endsWith('/'))
44
+ continue;
45
+ const absLocal = join(packageRoot, normalizedKey);
46
+ if (!(await exists(absLocal))) {
47
+ // File doesn't exist in source yet - this is fine (will be created)
48
+ continue;
49
+ }
50
+ const candidate = await buildCandidate('local', absLocal, normalizedKey, {
51
+ packageRoot,
52
+ workspaceRoot: packageRoot, // Not used for local candidates
53
+ inferPlatform: false, // Local candidates don't have platform inference
54
+ parseMarkdown: true
55
+ });
56
+ if (candidate) {
57
+ candidates.push(candidate);
58
+ }
59
+ }
60
+ return candidates;
61
+ }
62
+ /**
63
+ * Build workspace candidates from mapped workspace paths
64
+ *
65
+ * Discovers files in the workspace based on index mappings.
66
+ * For directory mappings, recursively walks the directory tree.
67
+ */
68
+ async function buildWorkspaceCandidates(workspaceRoot, packageRoot, filesMapping) {
69
+ const candidates = [];
70
+ const errors = [];
71
+ for (const [rawKey, targets] of Object.entries(filesMapping)) {
72
+ const registryKey = normalizePathForProcessing(rawKey);
73
+ if (!registryKey || !Array.isArray(targets))
74
+ continue;
75
+ const isDirectoryMapping = registryKey.endsWith('/');
76
+ for (const mapping of targets) {
77
+ const workspaceRel = getTargetPath(mapping);
78
+ const normalizedTargetPath = normalizePathForProcessing(workspaceRel);
79
+ if (!normalizedTargetPath)
80
+ continue;
81
+ const absTargetPath = join(workspaceRoot, normalizedTargetPath);
82
+ if (isDirectoryMapping) {
83
+ // Directory mapping: enumerate all files under the directory
84
+ try {
85
+ const files = await collectFilesUnderDirectory(absTargetPath);
86
+ for (const relFile of files) {
87
+ const registryPath = normalizePathForProcessing(join(registryKey, relFile));
88
+ if (!registryPath)
89
+ continue;
90
+ const absWorkspaceFile = join(absTargetPath, relFile);
91
+ const candidate = await buildCandidate('workspace', absWorkspaceFile, registryPath, {
92
+ packageRoot,
93
+ workspaceRoot,
94
+ inferPlatform: true,
95
+ parseMarkdown: true
96
+ });
97
+ if (candidate) {
98
+ candidates.push(candidate);
99
+ }
100
+ }
101
+ }
102
+ catch (error) {
103
+ errors.push({
104
+ path: absTargetPath,
105
+ registryPath: registryKey,
106
+ reason: `Failed to enumerate directory: ${error}`
107
+ });
108
+ }
109
+ }
110
+ else {
111
+ // File mapping: single file
112
+ if (!(await exists(absTargetPath))) {
113
+ // File doesn't exist in workspace - skip (not an error)
114
+ continue;
115
+ }
116
+ const candidate = await buildCandidate('workspace', absTargetPath, registryKey, {
117
+ packageRoot,
118
+ workspaceRoot,
119
+ inferPlatform: true,
120
+ parseMarkdown: true
121
+ });
122
+ if (candidate) {
123
+ candidates.push(candidate);
124
+ }
125
+ }
126
+ }
127
+ }
128
+ return { candidates, errors };
129
+ }
130
+ /**
131
+ * Build single candidate from file path
132
+ *
133
+ * Reads file content, calculates hash, extracts metadata.
134
+ * Returns null if file cannot be read.
135
+ */
136
+ async function buildCandidate(source, absPath, registryPath, options) {
137
+ try {
138
+ const content = await readTextFile(absPath);
139
+ const contentHash = await calculateFileHash(content);
140
+ const stats = await getStats(absPath);
141
+ // Calculate display path (relative to appropriate root)
142
+ const displayPath = source === 'workspace'
143
+ ? normalizePathForProcessing(absPath.slice(options.workspaceRoot.length + 1)) || registryPath
144
+ : normalizePathForProcessing(absPath.slice(options.packageRoot.length + 1)) || registryPath;
145
+ // Infer platform for workspace files
146
+ const platform = options.inferPlatform && source === 'workspace'
147
+ ? inferPlatformFromWorkspaceFile(absPath, deriveSourceDir(displayPath), registryPath, options.workspaceRoot)
148
+ : undefined;
149
+ // Parse markdown frontmatter if enabled
150
+ let frontmatter = undefined;
151
+ let rawFrontmatter;
152
+ let markdownBody;
153
+ let isMarkdown = false;
154
+ if (options.parseMarkdown && (absPath.endsWith('.md') || absPath.endsWith('.markdown'))) {
155
+ isMarkdown = true;
156
+ try {
157
+ const parsed = splitFrontmatter(content);
158
+ if (parsed.frontmatter && Object.keys(parsed.frontmatter).length > 0) {
159
+ frontmatter = parsed.frontmatter;
160
+ rawFrontmatter = parsed.rawFrontmatter;
161
+ markdownBody = parsed.body;
162
+ }
163
+ }
164
+ catch (error) {
165
+ logger.debug(`Failed to parse frontmatter for ${absPath}: ${error}`);
166
+ }
167
+ }
168
+ const candidate = {
169
+ source,
170
+ registryPath,
171
+ fullPath: absPath,
172
+ content,
173
+ contentHash,
174
+ mtime: stats.mtime.getTime(),
175
+ displayPath,
176
+ platform,
177
+ frontmatter,
178
+ rawFrontmatter,
179
+ markdownBody,
180
+ isMarkdown
181
+ };
182
+ return candidate;
183
+ }
184
+ catch (error) {
185
+ logger.warn(`Failed to build candidate for ${absPath}: ${error}`);
186
+ return null;
187
+ }
188
+ }
189
+ /**
190
+ * Collect all files under a directory recursively
191
+ *
192
+ * Returns relative paths from the directory root.
193
+ */
194
+ async function collectFilesUnderDirectory(absDir) {
195
+ const collected = [];
196
+ if (!(await exists(absDir)))
197
+ return collected;
198
+ for await (const absFile of walkFiles(absDir)) {
199
+ const relPath = absFile.slice(absDir.length + 1).replace(/\\/g, '/');
200
+ collected.push(relPath);
201
+ }
202
+ return collected;
203
+ }
204
+ /**
205
+ * Derive source directory from relative path
206
+ *
207
+ * Returns the first segment of the path (e.g., ".cursor" from ".cursor/commands/test.md")
208
+ */
209
+ function deriveSourceDir(relPath) {
210
+ if (!relPath)
211
+ return '';
212
+ const first = relPath.split('/')[0] || '';
213
+ return first;
214
+ }
215
+ //# sourceMappingURL=save-candidate-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-candidate-builder.js","sourceRoot":"","sources":["../../../src/core/save/save-candidate-builder.ts"],"names":[],"mappings":"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"}
@@ -7,19 +7,20 @@ import { getRelativePathFromBase } from '../../utils/path-normalization.js';
7
7
  import { splitFrontmatter, stripFrontmatter } from '../../utils/markdown-frontmatter.js';
8
8
  import { discoverPlatformFilesUnified } from '../discovery/platform-files-discovery.js';
9
9
  import { inferPlatformFromWorkspaceFile } from '../platforms.js';
10
- export async function loadLocalCandidates(packageDir) {
10
+ function isValidLocalCandidatePath(normalizedPath, cwd) {
11
+ if (normalizedPath === FILE_PATTERNS.OPENPACKAGE_INDEX_YML ||
12
+ normalizedPath === PACKAGE_PATHS.INDEX_RELATIVE ||
13
+ normalizedPath === FILE_PATTERNS.AGENTS_MD) {
14
+ return false;
15
+ }
16
+ return isAllowedRegistryPath(normalizedPath, cwd);
17
+ }
18
+ export async function loadLocalCandidates(packageDir, cwd) {
11
19
  const entries = await findFilesByExtension(packageDir, [], packageDir);
12
20
  const candidates = [];
13
21
  for (const entry of entries) {
14
22
  const normalizedPath = normalizeRegistryPath(entry.relativePath);
15
- if (normalizedPath === FILE_PATTERNS.PACKAGE_INDEX_YML ||
16
- normalizedPath === PACKAGE_PATHS.INDEX_RELATIVE) {
17
- continue;
18
- }
19
- if (normalizedPath === FILE_PATTERNS.AGENTS_MD) {
20
- continue;
21
- }
22
- if (!isAllowedRegistryPath(normalizedPath)) {
23
+ if (!isValidLocalCandidatePath(normalizedPath, cwd)) {
23
24
  continue;
24
25
  }
25
26
  const fullPath = entry.fullPath;
@@ -52,7 +53,7 @@ export async function discoverWorkspaceCandidates(cwd, packageName) {
52
53
  const candidates = [];
53
54
  for (const file of discovered) {
54
55
  const normalizedPath = normalizeRegistryPath(file.registryPath);
55
- if (!isAllowedRegistryPath(normalizedPath)) {
56
+ if (!isAllowedRegistryPath(normalizedPath, cwd)) {
56
57
  continue;
57
58
  }
58
59
  const content = await readTextFile(file.fullPath);
@@ -63,7 +64,7 @@ export async function discoverWorkspaceCandidates(cwd, packageName) {
63
64
  const rawFrontmatter = split?.rawFrontmatter;
64
65
  const contentHash = await calculateContentHash(normalizedPath, content);
65
66
  const displayPath = getRelativePathFromBase(file.fullPath, cwd) || normalizedPath;
66
- const platform = inferPlatformFromWorkspaceFile(file.fullPath, file.sourceDir, normalizedPath);
67
+ const platform = inferPlatformFromWorkspaceFile(file.fullPath, file.sourceDir, normalizedPath, cwd);
67
68
  candidates.push({
68
69
  source: 'workspace',
69
70
  registryPath: normalizedPath,