opkg 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/README.md +109 -186
  2. package/assets/openpackage_ascii_dark.png +0 -0
  3. package/assets/openpackage_ascii_light.png +0 -0
  4. package/dist/commands/add.js +34 -10
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/apply.js +16 -0
  7. package/dist/commands/apply.js.map +1 -0
  8. package/dist/commands/delete.js +1 -1
  9. package/dist/commands/delete.js.map +1 -1
  10. package/dist/commands/install.js +177 -8
  11. package/dist/commands/install.js.map +1 -1
  12. package/dist/commands/list.js +2 -2
  13. package/dist/commands/list.js.map +1 -1
  14. package/dist/commands/login.js +1 -1
  15. package/dist/commands/login.js.map +1 -1
  16. package/dist/commands/logout.js +1 -1
  17. package/dist/commands/logout.js.map +1 -1
  18. package/dist/commands/new.js +125 -0
  19. package/dist/commands/new.js.map +1 -0
  20. package/dist/commands/pack.js +7 -13
  21. package/dist/commands/pack.js.map +1 -1
  22. package/dist/commands/pull.js +1 -1
  23. package/dist/commands/pull.js.map +1 -1
  24. package/dist/commands/push.js +1 -1
  25. package/dist/commands/push.js.map +1 -1
  26. package/dist/commands/remove.js +63 -0
  27. package/dist/commands/remove.js.map +1 -0
  28. package/dist/commands/save.js +11 -17
  29. package/dist/commands/save.js.map +1 -1
  30. package/dist/commands/set.js +33 -0
  31. package/dist/commands/set.js.map +1 -0
  32. package/dist/commands/show.js +16 -94
  33. package/dist/commands/show.js.map +1 -1
  34. package/dist/commands/status.js +26 -701
  35. package/dist/commands/status.js.map +1 -1
  36. package/dist/commands/uninstall.js +14 -427
  37. package/dist/commands/uninstall.js.map +1 -1
  38. package/dist/constants/index.js +72 -16
  39. package/dist/constants/index.js.map +1 -1
  40. package/dist/core/add/add-conflict-handler.js +1 -8
  41. package/dist/core/add/add-conflict-handler.js.map +1 -1
  42. package/dist/core/add/add-pipeline.js +12 -10
  43. package/dist/core/add/add-pipeline.js.map +1 -1
  44. package/dist/core/add/add-to-source-pipeline.js +123 -0
  45. package/dist/core/add/add-to-source-pipeline.js.map +1 -0
  46. package/dist/core/add/package-index-updater.js +77 -78
  47. package/dist/core/add/package-index-updater.js.map +1 -1
  48. package/dist/core/add/platform-path-transformer.js +6 -4
  49. package/dist/core/add/platform-path-transformer.js.map +1 -1
  50. package/dist/core/add/source-collector.js +2 -3
  51. package/dist/core/add/source-collector.js.map +1 -1
  52. package/dist/core/apply/apply-pipeline.js +110 -0
  53. package/dist/core/apply/apply-pipeline.js.map +1 -0
  54. package/dist/core/dependency-resolver.js +263 -21
  55. package/dist/core/dependency-resolver.js.map +1 -1
  56. package/dist/core/discovery/file-discovery.js +1 -2
  57. package/dist/core/discovery/file-discovery.js.map +1 -1
  58. package/dist/core/discovery/platform-files-discovery.js +33 -18
  59. package/dist/core/discovery/platform-files-discovery.js.map +1 -1
  60. package/dist/core/flows/flow-executor.js +974 -0
  61. package/dist/core/flows/flow-executor.js.map +1 -0
  62. package/dist/core/flows/flow-inverter.js +442 -0
  63. package/dist/core/flows/flow-inverter.js.map +1 -0
  64. package/dist/core/flows/flow-key-extractor.js +101 -0
  65. package/dist/core/flows/flow-key-extractor.js.map +1 -0
  66. package/dist/core/flows/flow-key-mapper.js +382 -0
  67. package/dist/core/flows/flow-key-mapper.js.map +1 -0
  68. package/dist/core/flows/flow-transforms.js +632 -0
  69. package/dist/core/flows/flow-transforms.js.map +1 -0
  70. package/dist/core/flows/map-pipeline/context.js +73 -0
  71. package/dist/core/flows/map-pipeline/context.js.map +1 -0
  72. package/dist/core/flows/map-pipeline/index.js +156 -0
  73. package/dist/core/flows/map-pipeline/index.js.map +1 -0
  74. package/dist/core/flows/map-pipeline/operations/copy.js +104 -0
  75. package/dist/core/flows/map-pipeline/operations/copy.js.map +1 -0
  76. package/dist/core/flows/map-pipeline/operations/pipe.js +70 -0
  77. package/dist/core/flows/map-pipeline/operations/pipe.js.map +1 -0
  78. package/dist/core/flows/map-pipeline/operations/rename.js +102 -0
  79. package/dist/core/flows/map-pipeline/operations/rename.js.map +1 -0
  80. package/dist/core/flows/map-pipeline/operations/set.js +50 -0
  81. package/dist/core/flows/map-pipeline/operations/set.js.map +1 -0
  82. package/dist/core/flows/map-pipeline/operations/switch.js +79 -0
  83. package/dist/core/flows/map-pipeline/operations/switch.js.map +1 -0
  84. package/dist/core/flows/map-pipeline/operations/transform.js +543 -0
  85. package/dist/core/flows/map-pipeline/operations/transform.js.map +1 -0
  86. package/dist/core/flows/map-pipeline/operations/unset.js +65 -0
  87. package/dist/core/flows/map-pipeline/operations/unset.js.map +1 -0
  88. package/dist/core/flows/map-pipeline/types.js +8 -0
  89. package/dist/core/flows/map-pipeline/types.js.map +1 -0
  90. package/dist/core/flows/map-pipeline/utils.js +278 -0
  91. package/dist/core/flows/map-pipeline/utils.js.map +1 -0
  92. package/dist/core/flows/platform-converter.js +328 -0
  93. package/dist/core/flows/platform-converter.js.map +1 -0
  94. package/dist/core/flows/source-resolver.js +192 -0
  95. package/dist/core/flows/source-resolver.js.map +1 -0
  96. package/dist/core/flows/toml-domain-transforms.js +23 -0
  97. package/dist/core/flows/toml-domain-transforms.js.map +1 -0
  98. package/dist/core/install/bulk-install-pipeline.js +68 -7
  99. package/dist/core/install/bulk-install-pipeline.js.map +1 -1
  100. package/dist/core/install/canonical-plan.js +3 -3
  101. package/dist/core/install/canonical-plan.js.map +1 -1
  102. package/dist/core/install/dry-run.js +3 -3
  103. package/dist/core/install/dry-run.js.map +1 -1
  104. package/dist/core/install/flow-based-installer.js +1158 -0
  105. package/dist/core/install/flow-based-installer.js.map +1 -0
  106. package/dist/core/install/flow-workspace-tracker.js +111 -0
  107. package/dist/core/install/flow-workspace-tracker.js.map +1 -0
  108. package/dist/core/install/format-detector.js +228 -0
  109. package/dist/core/install/format-detector.js.map +1 -0
  110. package/dist/core/install/git-package-loader.js +20 -0
  111. package/dist/core/install/git-package-loader.js.map +1 -0
  112. package/dist/core/install/install-errors.js +1 -1
  113. package/dist/core/install/install-errors.js.map +1 -1
  114. package/dist/core/install/install-flow.js +34 -14
  115. package/dist/core/install/install-flow.js.map +1 -1
  116. package/dist/core/install/install-pipeline.js +52 -17
  117. package/dist/core/install/install-pipeline.js.map +1 -1
  118. package/dist/core/install/install-reporting.js +26 -8
  119. package/dist/core/install/install-reporting.js.map +1 -1
  120. package/dist/core/install/local-source-resolution.js +103 -0
  121. package/dist/core/install/local-source-resolution.js.map +1 -0
  122. package/dist/core/install/marketplace-handler.js +221 -0
  123. package/dist/core/install/marketplace-handler.js.map +1 -0
  124. package/dist/core/install/path-install-pipeline.js +241 -0
  125. package/dist/core/install/path-install-pipeline.js.map +1 -0
  126. package/dist/core/install/path-package-loader.js +116 -0
  127. package/dist/core/install/path-package-loader.js.map +1 -0
  128. package/dist/core/install/plugin-detector.js +72 -0
  129. package/dist/core/install/plugin-detector.js.map +1 -0
  130. package/dist/core/install/plugin-to-universal-converter.js +218 -0
  131. package/dist/core/install/plugin-to-universal-converter.js.map +1 -0
  132. package/dist/core/install/plugin-transformer.js +191 -0
  133. package/dist/core/install/plugin-transformer.js.map +1 -0
  134. package/dist/core/install/version-selection.js +1 -1
  135. package/dist/core/install/version-selection.js.map +1 -1
  136. package/dist/core/openpackage.js +40 -22
  137. package/dist/core/openpackage.js.map +1 -1
  138. package/dist/core/pack/pack-output.js +62 -0
  139. package/dist/core/pack/pack-output.js.map +1 -0
  140. package/dist/core/pack/pack-pipeline.js +186 -0
  141. package/dist/core/pack/pack-pipeline.js.map +1 -0
  142. package/dist/core/package-context.js +45 -70
  143. package/dist/core/package-context.js.map +1 -1
  144. package/dist/core/package-creation.js +203 -0
  145. package/dist/core/package-creation.js.map +1 -0
  146. package/dist/core/package.js +20 -6
  147. package/dist/core/package.js.map +1 -1
  148. package/dist/core/platforms.js +665 -209
  149. package/dist/core/platforms.js.map +1 -1
  150. package/dist/core/push/push-context.js +1 -1
  151. package/dist/core/push/push-context.js.map +1 -1
  152. package/dist/core/push/push-upload.js +2 -2
  153. package/dist/core/push/push-upload.js.map +1 -1
  154. package/dist/core/registry.js +6 -6
  155. package/dist/core/registry.js.map +1 -1
  156. package/dist/core/remote-pull.js +2 -2
  157. package/dist/core/remote-pull.js.map +1 -1
  158. package/dist/core/remove/removal-collector.js +52 -0
  159. package/dist/core/remove/removal-collector.js.map +1 -0
  160. package/dist/core/remove/removal-confirmation.js +39 -0
  161. package/dist/core/remove/removal-confirmation.js.map +1 -0
  162. package/dist/core/remove/remove-from-source-pipeline.js +173 -0
  163. package/dist/core/remove/remove-from-source-pipeline.js.map +1 -0
  164. package/dist/core/save/constants.js +3 -3
  165. package/dist/core/save/constants.js.map +1 -1
  166. package/dist/core/save/flow-based-saver.js +270 -0
  167. package/dist/core/save/flow-based-saver.js.map +1 -0
  168. package/dist/core/save/name-resolution.js +1 -1
  169. package/dist/core/save/name-resolution.js.map +1 -1
  170. package/dist/core/save/package-yml-generator.js +4 -5
  171. package/dist/core/save/package-yml-generator.js.map +1 -1
  172. package/dist/core/save/save-candidate-builder.js +215 -0
  173. package/dist/core/save/save-candidate-builder.js.map +1 -0
  174. package/dist/core/save/save-candidate-loader.js +12 -11
  175. package/dist/core/save/save-candidate-loader.js.map +1 -1
  176. package/dist/core/save/save-conflict-analyzer.js +150 -0
  177. package/dist/core/save/save-conflict-analyzer.js.map +1 -0
  178. package/dist/core/save/save-conflict-resolution.js +28 -14
  179. package/dist/core/save/save-conflict-resolution.js.map +1 -1
  180. package/dist/core/save/save-conflict-resolver.js +31 -275
  181. package/dist/core/save/save-conflict-resolver.js.map +1 -1
  182. package/dist/core/save/save-group-builder.js +52 -0
  183. package/dist/core/save/save-group-builder.js.map +1 -0
  184. package/dist/core/save/save-interactive-resolver.js +190 -0
  185. package/dist/core/save/save-interactive-resolver.js.map +1 -0
  186. package/dist/core/save/save-pipeline.js +58 -34
  187. package/dist/core/save/save-pipeline.js.map +1 -1
  188. package/dist/core/save/save-platform-handler.js +53 -0
  189. package/dist/core/save/save-platform-handler.js.map +1 -0
  190. package/dist/core/save/save-resolution-executor.js +145 -0
  191. package/dist/core/save/save-resolution-executor.js.map +1 -0
  192. package/dist/core/save/save-result-reporter.js +167 -0
  193. package/dist/core/save/save-result-reporter.js.map +1 -0
  194. package/dist/core/save/save-to-source-pipeline.js +154 -0
  195. package/dist/core/save/save-to-source-pipeline.js.map +1 -0
  196. package/dist/core/save/save-versioning.js +4 -4
  197. package/dist/core/save/save-versioning.js.map +1 -1
  198. package/dist/core/save/save-write-coordinator.js +204 -0
  199. package/dist/core/save/save-write-coordinator.js.map +1 -0
  200. package/dist/core/save/save-yml-resolution.js +28 -216
  201. package/dist/core/save/save-yml-resolution.js.map +1 -1
  202. package/dist/core/save/workspace-rename.js +7 -8
  203. package/dist/core/save/workspace-rename.js.map +1 -1
  204. package/dist/core/set/set-output.js +72 -0
  205. package/dist/core/set/set-output.js.map +1 -0
  206. package/dist/core/set/set-pipeline.js +361 -0
  207. package/dist/core/set/set-pipeline.js.map +1 -0
  208. package/dist/core/set/set-types.js +5 -0
  209. package/dist/core/set/set-types.js.map +1 -0
  210. package/dist/core/show/package-resolver.js +257 -0
  211. package/dist/core/show/package-resolver.js.map +1 -0
  212. package/dist/core/show/scope-discovery.js +165 -0
  213. package/dist/core/show/scope-discovery.js.map +1 -0
  214. package/dist/core/show/show-output.js +168 -0
  215. package/dist/core/show/show-output.js.map +1 -0
  216. package/dist/core/show/show-pipeline.js +113 -0
  217. package/dist/core/show/show-pipeline.js.map +1 -0
  218. package/dist/core/show/show-types.js +5 -0
  219. package/dist/core/show/show-types.js.map +1 -0
  220. package/dist/core/source-resolution/dependency-graph.js +104 -0
  221. package/dist/core/source-resolution/dependency-graph.js.map +1 -0
  222. package/dist/core/source-resolution/resolve-mutable-source.js +109 -0
  223. package/dist/core/source-resolution/resolve-mutable-source.js.map +1 -0
  224. package/dist/core/source-resolution/resolve-package-source.js +29 -0
  225. package/dist/core/source-resolution/resolve-package-source.js.map +1 -0
  226. package/dist/core/source-resolution/resolve-registry-version.js +35 -0
  227. package/dist/core/source-resolution/resolve-registry-version.js.map +1 -0
  228. package/dist/core/source-resolution/types.js.map +1 -0
  229. package/dist/core/status/status-file-discovery.js +23 -12
  230. package/dist/core/status/status-file-discovery.js.map +1 -1
  231. package/dist/core/status/status-pipeline.js +134 -0
  232. package/dist/core/status/status-pipeline.js.map +1 -0
  233. package/dist/core/sync/platform-sync-summary.js +27 -0
  234. package/dist/core/sync/platform-sync-summary.js.map +1 -0
  235. package/dist/core/uninstall/flow-aware-uninstaller.js +189 -0
  236. package/dist/core/uninstall/flow-aware-uninstaller.js.map +1 -0
  237. package/dist/core/uninstall/uninstall-file-discovery.js +11 -6
  238. package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
  239. package/dist/core/uninstall/uninstall-pipeline.js +141 -0
  240. package/dist/core/uninstall/uninstall-pipeline.js.map +1 -0
  241. package/dist/core/universal-patterns.js +64 -0
  242. package/dist/core/universal-patterns.js.map +1 -0
  243. package/dist/index.js +99 -6
  244. package/dist/index.js.map +1 -1
  245. package/dist/types/flows.js +8 -0
  246. package/dist/types/flows.js.map +1 -0
  247. package/dist/types/index.js +3 -0
  248. package/dist/types/index.js.map +1 -1
  249. package/dist/types/platform-flows.js +8 -0
  250. package/dist/types/platform-flows.js.map +1 -0
  251. package/dist/types/workspace-index.js +6 -0
  252. package/dist/types/workspace-index.js.map +1 -0
  253. package/dist/utils/custom-path-resolution.js +160 -0
  254. package/dist/utils/custom-path-resolution.js.map +1 -0
  255. package/dist/utils/dependency-coverage.js +1 -1
  256. package/dist/utils/dependency-coverage.js.map +1 -1
  257. package/dist/utils/file-processing.js +1 -1
  258. package/dist/utils/flow-index-installer.js +209 -0
  259. package/dist/utils/flow-index-installer.js.map +1 -0
  260. package/dist/utils/formatters.js +47 -1
  261. package/dist/utils/formatters.js.map +1 -1
  262. package/dist/utils/fs.js +17 -0
  263. package/dist/utils/fs.js.map +1 -1
  264. package/dist/utils/git-clone-registry.js +88 -0
  265. package/dist/utils/git-clone-registry.js.map +1 -0
  266. package/dist/utils/git-clone.js +69 -0
  267. package/dist/utils/git-clone.js.map +1 -0
  268. package/dist/utils/git-spec.js +96 -0
  269. package/dist/utils/git-spec.js.map +1 -0
  270. package/dist/utils/http-client.js +7 -0
  271. package/dist/utils/http-client.js.map +1 -1
  272. package/dist/utils/index-based-installer.js +356 -163
  273. package/dist/utils/index-based-installer.js.map +1 -1
  274. package/dist/utils/install-conflict-handler.js +2 -2
  275. package/dist/utils/install-conflict-handler.js.map +1 -1
  276. package/dist/utils/install-file-discovery.js +18 -13
  277. package/dist/utils/install-file-discovery.js.map +1 -1
  278. package/dist/utils/install-helpers.js +43 -20
  279. package/dist/utils/install-helpers.js.map +1 -1
  280. package/dist/utils/jsonc.js +23 -1
  281. package/dist/utils/jsonc.js.map +1 -1
  282. package/dist/utils/manifest-paths.js +1 -1
  283. package/dist/utils/manifest-paths.js.map +1 -1
  284. package/dist/utils/markdown-frontmatter.js +46 -0
  285. package/dist/utils/markdown-frontmatter.js.map +1 -1
  286. package/dist/utils/package-copy.js +5 -103
  287. package/dist/utils/package-copy.js.map +1 -1
  288. package/dist/utils/package-filters.js +9 -105
  289. package/dist/utils/package-filters.js.map +1 -1
  290. package/dist/utils/package-index-yml.js +27 -6
  291. package/dist/utils/package-index-yml.js.map +1 -1
  292. package/dist/utils/package-input.js +98 -0
  293. package/dist/utils/package-input.js.map +1 -0
  294. package/dist/utils/package-management.js +80 -28
  295. package/dist/utils/package-management.js.map +1 -1
  296. package/dist/utils/package-name-resolution.js +327 -0
  297. package/dist/utils/package-name-resolution.js.map +1 -0
  298. package/dist/utils/package-name.js +18 -16
  299. package/dist/utils/package-name.js.map +1 -1
  300. package/dist/utils/package-versioning.js +2 -33
  301. package/dist/utils/package-versioning.js.map +1 -1
  302. package/dist/utils/package-yml.js +19 -28
  303. package/dist/utils/package-yml.js.map +1 -1
  304. package/dist/utils/path-resolution.js +102 -0
  305. package/dist/utils/path-resolution.js.map +1 -0
  306. package/dist/utils/paths.js +6 -6
  307. package/dist/utils/paths.js.map +1 -1
  308. package/dist/utils/platform-file.js +36 -24
  309. package/dist/utils/platform-file.js.map +1 -1
  310. package/dist/utils/platform-mapper.js +222 -68
  311. package/dist/utils/platform-mapper.js.map +1 -1
  312. package/dist/utils/platform-root-files.js +44 -0
  313. package/dist/utils/platform-root-files.js.map +1 -0
  314. package/dist/utils/platform-utils.js +35 -54
  315. package/dist/utils/platform-utils.js.map +1 -1
  316. package/dist/utils/platform-yaml-merge.js +20 -140
  317. package/dist/utils/platform-yaml-merge.js.map +1 -1
  318. package/dist/utils/prompts.js +92 -7
  319. package/dist/utils/prompts.js.map +1 -1
  320. package/dist/utils/registry-entry-filter.js +50 -27
  321. package/dist/utils/registry-entry-filter.js.map +1 -1
  322. package/dist/utils/registry-paths.js +5 -4
  323. package/dist/utils/registry-paths.js.map +1 -1
  324. package/dist/utils/scope-resolution.js +156 -0
  325. package/dist/utils/scope-resolution.js.map +1 -0
  326. package/dist/utils/source-mutability.js +15 -0
  327. package/dist/utils/source-mutability.js.map +1 -0
  328. package/dist/utils/tarball.js +29 -4
  329. package/dist/utils/tarball.js.map +1 -1
  330. package/dist/utils/version-ranges.js +1 -32
  331. package/dist/utils/version-ranges.js.map +1 -1
  332. package/dist/utils/workspace-index-helpers.js +28 -0
  333. package/dist/utils/workspace-index-helpers.js.map +1 -0
  334. package/dist/utils/workspace-index-ownership.js +100 -0
  335. package/dist/utils/workspace-index-ownership.js.map +1 -0
  336. package/dist/utils/workspace-index-yml.js +173 -0
  337. package/dist/utils/workspace-index-yml.js.map +1 -0
  338. package/examples/custom-subdirs-platform.jsonc +157 -0
  339. package/package.json +7 -2
  340. package/platforms.jsonc +531 -84
  341. package/schemas/map-pipeline-v1.json +256 -0
  342. package/schemas/platforms-v1.json +400 -0
  343. package/specs/README.md +88 -0
  344. package/specs/add/README.md +166 -0
  345. package/specs/agents-claude.md +570 -0
  346. package/specs/agents-opencode.md +622 -0
  347. package/specs/apply/README.md +21 -0
  348. package/specs/apply/apply-behavior.md +58 -0
  349. package/specs/apply/apply-command.md +51 -0
  350. package/specs/apply/conflicts.md +41 -0
  351. package/specs/apply/index-effects.md +81 -0
  352. package/specs/architecture.md +107 -0
  353. package/specs/auth/README.md +17 -0
  354. package/specs/auth/auth-http-contract.md +25 -0
  355. package/specs/auth/cli/credentials.md +39 -0
  356. package/specs/auth/cli/login.md +32 -0
  357. package/specs/auth/cli/logout.md +16 -0
  358. package/specs/claude-mcp.md +1065 -0
  359. package/specs/claude-plugins-marketplace.md +363 -0
  360. package/specs/claude-plugins.md +413 -0
  361. package/specs/cli-options.md +52 -0
  362. package/specs/codex-mcp.md +114 -0
  363. package/specs/commands-overview.md +175 -0
  364. package/specs/directory-layout.md +95 -0
  365. package/specs/install/README.md +12 -4
  366. package/specs/install/git-sources.md +230 -0
  367. package/specs/install/install-behavior.md +483 -73
  368. package/specs/install/package-yml-canonical.md +67 -35
  369. package/specs/install/version-resolution.md +69 -115
  370. package/specs/new/README.md +769 -0
  371. package/specs/new/SUMMARY.md +310 -0
  372. package/specs/new/scope-behavior.md +793 -0
  373. package/specs/pack/README.md +77 -0
  374. package/specs/pack/package-name-resolution.md +330 -0
  375. package/specs/package/README.md +18 -17
  376. package/specs/package/nested-packages-and-parent-packages.md +32 -31
  377. package/specs/package/package-index-yml.md +95 -101
  378. package/specs/package/package-root-layout.md +64 -46
  379. package/specs/package/registry-payload-and-copy.md +50 -44
  380. package/specs/package/universal-content.md +33 -56
  381. package/specs/package-sources.md +248 -0
  382. package/specs/platforms/README.md +52 -0
  383. package/specs/platforms/configuration.md +571 -0
  384. package/specs/platforms/detection.md +552 -0
  385. package/specs/platforms/directory-layout.md +599 -0
  386. package/specs/platforms/examples.md +1146 -0
  387. package/specs/platforms/flow-reference.md +1240 -0
  388. package/specs/platforms/flows.md +1488 -0
  389. package/specs/platforms/map-pipeline.md +801 -0
  390. package/specs/platforms/overview.md +349 -0
  391. package/specs/platforms/specification.md +700 -0
  392. package/specs/platforms/troubleshooting.md +697 -0
  393. package/specs/platforms/universal-converter.md +520 -0
  394. package/specs/push/README.md +1 -0
  395. package/specs/push/push-behavior.md +11 -3
  396. package/specs/push/push-remote-upload.md +1 -1
  397. package/specs/push/push-scoping.md +1 -1
  398. package/specs/push/push-version-selection.md +1 -1
  399. package/specs/registry.md +111 -0
  400. package/specs/remove/README.md +257 -0
  401. package/specs/save/README.md +21 -17
  402. package/specs/save/save-conflict-resolution.md +205 -83
  403. package/specs/save/save-file-discovery.md +6 -4
  404. package/specs/save/save-frontmatter-overrides.md +11 -15
  405. package/specs/save/save-modes-inputs.md +9 -39
  406. package/specs/save/save-naming-scoping.md +4 -4
  407. package/specs/save/save-package-detection.md +13 -13
  408. package/specs/save/save-registry-sync.md +16 -106
  409. package/specs/save/save-versioning.md +80 -0
  410. package/specs/scope-management.md +92 -0
  411. package/specs/set/README.md +520 -0
  412. package/specs/set/set-behavior.md +563 -0
  413. package/specs/show/README.md +483 -0
  414. package/specs/show/show-remote.md +494 -0
  415. package/specs/status/README.md +38 -0
  416. package/specs/uninstall/README.md +231 -0
  417. package/dist/commands/duplicate.js +0 -69
  418. package/dist/commands/duplicate.js.map +0 -1
  419. package/dist/commands/init.js +0 -117
  420. package/dist/commands/init.js.map +0 -1
  421. package/dist/commands/prune.js +0 -357
  422. package/dist/commands/prune.js.map +0 -1
  423. package/dist/commands/tui.js +0 -61
  424. package/dist/commands/tui.js.map +0 -1
  425. package/dist/core/install/index.js +0 -3
  426. package/dist/core/install/index.js.map +0 -1
  427. package/dist/core/push/push-single-file.js +0 -56
  428. package/dist/core/push/push-single-file.js.map +0 -1
  429. package/dist/core/save/package-detection.js +0 -147
  430. package/dist/core/save/package-detection.js.map +0 -1
  431. package/dist/core/save/save-single-file.js +0 -124
  432. package/dist/core/save/save-single-file.js.map +0 -1
  433. package/dist/core/token-store.js +0 -73
  434. package/dist/core/token-store.js.map +0 -1
  435. package/dist/tui/app.js +0 -95
  436. package/dist/tui/app.js.map +0 -1
  437. package/dist/tui/components/package-list.js +0 -73
  438. package/dist/tui/components/package-list.js.map +0 -1
  439. package/dist/tui/controller.js +0 -365
  440. package/dist/tui/controller.js.map +0 -1
  441. package/dist/tui/index.js +0 -12
  442. package/dist/tui/index.js.map +0 -1
  443. package/dist/tui/services/file-index.js +0 -64
  444. package/dist/tui/services/file-index.js.map +0 -1
  445. package/dist/tui/services/packages.js +0 -18
  446. package/dist/tui/services/packages.js.map +0 -1
  447. package/dist/tui/services/save.js +0 -21
  448. package/dist/tui/services/save.js.map +0 -1
  449. package/dist/tui/state/app-state.js +0 -15
  450. package/dist/tui/state/app-state.js.map +0 -1
  451. package/dist/tui/state.js +0 -17
  452. package/dist/tui/state.js.map +0 -1
  453. package/dist/tui/types.js.map +0 -1
  454. package/dist/tui/views/add-file-modal.js +0 -129
  455. package/dist/tui/views/add-file-modal.js.map +0 -1
  456. package/dist/tui/views/file-preview.js +0 -44
  457. package/dist/tui/views/file-preview.js.map +0 -1
  458. package/dist/tui/views/list-packages.js +0 -73
  459. package/dist/tui/views/list-packages.js.map +0 -1
  460. package/dist/tui/views/main-menu.js +0 -29
  461. package/dist/tui/views/main-menu.js.map +0 -1
  462. package/dist/tui/views/manage-view.js +0 -81
  463. package/dist/tui/views/manage-view.js.map +0 -1
  464. package/dist/tui/views/package-hub.js +0 -120
  465. package/dist/tui/views/package-hub.js.map +0 -1
  466. package/dist/tui/views/placeholder.js +0 -24
  467. package/dist/tui/views/placeholder.js.map +0 -1
  468. package/dist/utils/bun-bootstrap.js +0 -72
  469. package/dist/utils/bun-bootstrap.js.map +0 -1
  470. package/dist/utils/entity-id.js +0 -19
  471. package/dist/utils/entity-id.js.map +0 -1
  472. package/dist/utils/package-local-files.js +0 -5
  473. package/dist/utils/package-local-files.js.map +0 -1
  474. package/dist/utils/path-matching.js +0 -74
  475. package/dist/utils/path-matching.js.map +0 -1
  476. package/dist/utils/root-file-operations.js +0 -39
  477. package/dist/utils/root-file-operations.js.map +0 -1
  478. package/dist/utils/root-file-transformer.js +0 -27
  479. package/dist/utils/root-file-transformer.js.map +0 -1
  480. package/dist/utils/yaml-frontmatter.js +0 -25
  481. package/dist/utils/yaml-frontmatter.js.map +0 -1
  482. package/specs/auth/auth-device-flow.md +0 -70
  483. package/specs/login/login-device-flow.md +0 -70
  484. package/specs/platforms.md +0 -193
  485. package/specs/save-pack-versioning.md +0 -224
  486. package/specs/save-pack.md +0 -68
  487. /package/dist/{tui → core/source-resolution}/types.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-resolution-executor.js","sourceRoot":"","sources":["../../../src/core/save/save-resolution-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Build save operation report
3
+ *
4
+ * Aggregates analysis and write results into a comprehensive report.
5
+ */
6
+ export function buildSaveReport(packageName, analyses, writeResults) {
7
+ const flattenedResults = writeResults.flat();
8
+ // Count operations
9
+ const createdFiles = flattenedResults.filter(r => r.success && r.operation.operation === 'create' && !r.operation.isPlatformSpecific).length;
10
+ const updatedFiles = flattenedResults.filter(r => r.success && r.operation.operation === 'update' && !r.operation.isPlatformSpecific).length;
11
+ const platformSpecificFiles = flattenedResults.filter(r => r.success && r.operation.isPlatformSpecific && r.operation.operation !== 'skip').length;
12
+ const errorCount = flattenedResults.filter(r => !r.success).length;
13
+ // Count interactive prompts
14
+ const interactivePrompts = analyses.filter(a => a.recommendedStrategy === 'interactive').length;
15
+ // Count groups
16
+ const totalGroups = analyses.length;
17
+ const skippedGroups = analyses.filter(a => a.type === 'no-action-needed' || a.type === 'no-change-needed').length;
18
+ const processedGroups = totalGroups - skippedGroups;
19
+ const summary = {
20
+ packageName,
21
+ totalGroups,
22
+ processedGroups,
23
+ skippedGroups,
24
+ createdFiles,
25
+ updatedFiles,
26
+ platformSpecificFiles,
27
+ errorCount,
28
+ interactivePrompts
29
+ };
30
+ return {
31
+ summary,
32
+ operations: flattenedResults,
33
+ analyses
34
+ };
35
+ }
36
+ /**
37
+ * Format save report for console output
38
+ *
39
+ * Returns array of message lines to display to user.
40
+ */
41
+ export function formatSaveReport(report) {
42
+ const lines = [];
43
+ const { summary, operations } = report;
44
+ // Success header
45
+ if (summary.errorCount === 0) {
46
+ lines.push(`✓ Saved ${summary.packageName}`);
47
+ }
48
+ else {
49
+ lines.push(`⚠ Saved ${summary.packageName} with ${summary.errorCount} error(s)`);
50
+ }
51
+ // No changes case
52
+ if (summary.processedGroups === 0 && summary.errorCount === 0) {
53
+ lines.push(' No workspace changes detected');
54
+ return lines;
55
+ }
56
+ // File operations
57
+ const fileOperations = [];
58
+ if (summary.createdFiles > 0) {
59
+ fileOperations.push(`${summary.createdFiles} created`);
60
+ }
61
+ if (summary.updatedFiles > 0) {
62
+ fileOperations.push(`${summary.updatedFiles} updated`);
63
+ }
64
+ if (summary.platformSpecificFiles > 0) {
65
+ fileOperations.push(`${summary.platformSpecificFiles} platform-specific`);
66
+ }
67
+ if (fileOperations.length > 0) {
68
+ lines.push(` ${fileOperations.join(', ')}`);
69
+ }
70
+ // List individual operations (limited)
71
+ const successfulOps = operations.filter(op => op.success && op.operation.operation !== 'skip');
72
+ const maxDisplay = 10;
73
+ for (let i = 0; i < Math.min(successfulOps.length, maxDisplay); i++) {
74
+ const result = successfulOps[i];
75
+ lines.push(` ${formatWriteOperation(result)}`);
76
+ }
77
+ if (successfulOps.length > maxDisplay) {
78
+ lines.push(` ... and ${successfulOps.length - maxDisplay} more`);
79
+ }
80
+ // List errors if any
81
+ if (summary.errorCount > 0) {
82
+ const errorMessages = formatErrors(operations);
83
+ lines.push('');
84
+ lines.push('Errors:');
85
+ lines.push(...errorMessages);
86
+ }
87
+ return lines;
88
+ }
89
+ /**
90
+ * Create CommandResult from report
91
+ *
92
+ * Converts report into the standard CommandResult format.
93
+ */
94
+ export function createCommandResult(report) {
95
+ const messages = formatSaveReport(report);
96
+ const message = messages.join('\n');
97
+ // Consider operation successful if no errors
98
+ const success = report.summary.errorCount === 0;
99
+ // Print the message to console
100
+ console.log(message);
101
+ return {
102
+ success,
103
+ error: success ? undefined : `Save completed with ${report.summary.errorCount} error(s)`
104
+ };
105
+ }
106
+ /**
107
+ * Format write operation for display
108
+ *
109
+ * Returns a user-friendly string describing the operation.
110
+ */
111
+ function formatWriteOperation(result) {
112
+ const op = result.operation;
113
+ let prefix = '';
114
+ switch (op.operation) {
115
+ case 'create':
116
+ prefix = op.isPlatformSpecific ? '+ Platform' : '+ Created';
117
+ break;
118
+ case 'update':
119
+ prefix = op.isPlatformSpecific ? '↻ Platform' : '↻ Updated';
120
+ break;
121
+ case 'skip':
122
+ prefix = '- Skipped';
123
+ break;
124
+ }
125
+ const path = op.registryPath;
126
+ const platformSuffix = op.platform ? ` (${op.platform})` : '';
127
+ return `${prefix}: ${path}${platformSuffix}`;
128
+ }
129
+ /**
130
+ * Format error messages
131
+ *
132
+ * Returns array of formatted error message lines.
133
+ */
134
+ function formatErrors(results) {
135
+ const errors = [];
136
+ const failedResults = results.filter(r => !r.success);
137
+ for (const result of failedResults) {
138
+ const path = result.operation.registryPath || result.operation.targetPath;
139
+ const message = result.error?.message || 'Unknown error';
140
+ errors.push(` ✗ ${path}: ${message}`);
141
+ }
142
+ return errors;
143
+ }
144
+ /**
145
+ * Create minimal success result
146
+ *
147
+ * Convenience function for simple success cases.
148
+ */
149
+ export function createSuccessResult(packageName, message) {
150
+ const msg = message || `✓ Saved ${packageName}`;
151
+ console.log(msg);
152
+ return {
153
+ success: true
154
+ };
155
+ }
156
+ /**
157
+ * Create error result
158
+ *
159
+ * Convenience function for error cases.
160
+ */
161
+ export function createErrorResult(error) {
162
+ return {
163
+ success: false,
164
+ error
165
+ };
166
+ }
167
+ //# sourceMappingURL=save-result-reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-result-reporter.js","sourceRoot":"","sources":["../../../src/core/save/save-result-reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ import { assertMutableSourceOrThrow } from '../../utils/source-mutability.js';
2
+ import { readWorkspaceIndex } from '../../utils/workspace-index-yml.js';
3
+ import { resolvePackageSource } from '../source-resolution/resolve-package-source.js';
4
+ import { logger } from '../../utils/logger.js';
5
+ import { buildCandidates } from './save-candidate-builder.js';
6
+ import { buildCandidateGroups, filterGroupsWithWorkspace } from './save-group-builder.js';
7
+ import { analyzeGroup } from './save-conflict-analyzer.js';
8
+ import { executeResolution } from './save-resolution-executor.js';
9
+ import { pruneExistingPlatformCandidates } from './save-platform-handler.js';
10
+ import { writeResolution } from './save-write-coordinator.js';
11
+ import { buildSaveReport, createCommandResult, createSuccessResult, createErrorResult } from './save-result-reporter.js';
12
+ /**
13
+ * Run the complete save-to-source pipeline
14
+ *
15
+ * This is the main entry point for the save operation.
16
+ * It coordinates all phases of the save process.
17
+ */
18
+ export async function runSaveToSourcePipeline(packageName, options = {}) {
19
+ // Phase 1: Validate preconditions
20
+ const validation = await validateSavePreconditions(packageName);
21
+ if (!validation.valid) {
22
+ return createErrorResult(validation.error);
23
+ }
24
+ const { cwd, packageRoot, filesMapping } = validation;
25
+ // Phase 2: Build candidates from workspace and source
26
+ logger.debug(`Building candidates for ${packageName}`);
27
+ const candidateResult = await buildCandidates({
28
+ packageRoot: packageRoot,
29
+ workspaceRoot: cwd,
30
+ filesMapping: filesMapping
31
+ });
32
+ if (candidateResult.errors.length > 0) {
33
+ logger.warn(`Encountered ${candidateResult.errors.length} error(s) building candidates`);
34
+ candidateResult.errors.forEach(err => logger.warn(` ${err.path}: ${err.reason}`));
35
+ }
36
+ // Phase 3: Build candidate groups (organize by registry path)
37
+ logger.debug('Building candidate groups');
38
+ const allGroups = buildCandidateGroups(candidateResult.localCandidates, candidateResult.workspaceCandidates);
39
+ // Phase 4: Prune platform-specific candidates with existing files
40
+ logger.debug('Pruning existing platform-specific files');
41
+ await pruneExistingPlatformCandidates(packageRoot, allGroups);
42
+ // Phase 5: Filter to groups with workspace candidates
43
+ const activeGroups = filterGroupsWithWorkspace(allGroups);
44
+ if (activeGroups.length === 0) {
45
+ return createSuccessResult(packageName, `✓ Saved ${packageName}\n No workspace changes detected`);
46
+ }
47
+ logger.debug(`Processing ${activeGroups.length} group(s) with workspace candidates`);
48
+ // Phase 6: Analyze groups and execute resolutions
49
+ const analyses = [];
50
+ const allWriteResults = [];
51
+ for (const group of activeGroups) {
52
+ // Analyze the group
53
+ const analysis = analyzeGroup(group, options.force ?? false);
54
+ analyses.push(analysis);
55
+ // Skip if no action needed
56
+ if (analysis.type === 'no-action-needed' || analysis.type === 'no-change-needed') {
57
+ logger.debug(`Skipping ${group.registryPath}: ${analysis.type}`);
58
+ continue;
59
+ }
60
+ // Execute resolution strategy (pass packageRoot for parity checking)
61
+ const resolution = await executeResolution(group, analysis, packageRoot);
62
+ if (!resolution) {
63
+ logger.debug(`No resolution returned for ${group.registryPath}`);
64
+ continue;
65
+ }
66
+ // Write resolved content to source
67
+ const writeResults = await writeResolution(packageRoot, group.registryPath, resolution, group.local);
68
+ allWriteResults.push(writeResults);
69
+ }
70
+ // Phase 7: Build and format report
71
+ logger.debug('Building save report');
72
+ const report = buildSaveReport(packageName, analyses, allWriteResults);
73
+ return createCommandResult(report);
74
+ }
75
+ /**
76
+ * Validate save preconditions
77
+ *
78
+ * Checks that:
79
+ * - Package name is provided
80
+ * - Workspace index exists
81
+ * - Package has file mappings
82
+ * - Package source is resolvable
83
+ * - Source is mutable (not registry)
84
+ */
85
+ async function validateSavePreconditions(packageName) {
86
+ const cwd = process.cwd();
87
+ // Check package name provided
88
+ if (!packageName) {
89
+ return {
90
+ valid: false,
91
+ error: 'Package name is required for save.'
92
+ };
93
+ }
94
+ // Read workspace index
95
+ let index;
96
+ try {
97
+ const result = await readWorkspaceIndex(cwd);
98
+ index = result.index;
99
+ }
100
+ catch (error) {
101
+ return {
102
+ valid: false,
103
+ error: `Failed to read workspace index: ${error}`
104
+ };
105
+ }
106
+ // Check package exists in index
107
+ const pkgIndex = index.packages?.[packageName];
108
+ if (!pkgIndex) {
109
+ return {
110
+ valid: false,
111
+ error: `Package '${packageName}' is not installed in this workspace.\n` +
112
+ `Run 'opkg install ${packageName}' to install it first.`
113
+ };
114
+ }
115
+ // Check package has file mappings
116
+ if (!pkgIndex.files || Object.keys(pkgIndex.files).length === 0) {
117
+ return {
118
+ valid: false,
119
+ error: `Package '${packageName}' has no files installed.\n` +
120
+ `Run 'opkg apply ${packageName}' to sync files to the workspace.`
121
+ };
122
+ }
123
+ // Resolve package source
124
+ let source;
125
+ try {
126
+ source = await resolvePackageSource(cwd, packageName);
127
+ }
128
+ catch (error) {
129
+ return {
130
+ valid: false,
131
+ error: `Failed to resolve package source: ${error}`
132
+ };
133
+ }
134
+ // Check source is mutable
135
+ try {
136
+ assertMutableSourceOrThrow(source.absolutePath, {
137
+ packageName: source.packageName,
138
+ command: 'save'
139
+ });
140
+ }
141
+ catch (error) {
142
+ return {
143
+ valid: false,
144
+ error: error instanceof Error ? error.message : String(error)
145
+ };
146
+ }
147
+ return {
148
+ valid: true,
149
+ cwd,
150
+ packageRoot: source.absolutePath,
151
+ filesMapping: pkgIndex.files
152
+ };
153
+ }
154
+ //# sourceMappingURL=save-to-source-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-to-source-pipeline.js","sourceRoot":"","sources":["../../../src/core/save/save-to-source-pipeline.ts"],"names":[],"mappings":"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"}
@@ -7,12 +7,12 @@ export function computeWipVersion(baseStable, lastWorkspaceVersion, workspacePat
7
7
  const lastBase = lastWorkspaceVersion ? extractBaseVersion(lastWorkspaceVersion) : undefined;
8
8
  const reset = Boolean(lastWorkspaceVersion && lastBase !== normalizedStable);
9
9
  const resetMessage = reset
10
- ? `package.yml version ${normalizedStable} differs from last saved version ${lastWorkspaceVersion}. ` +
10
+ ? `openpackage.yml version ${normalizedStable} differs from last saved version ${lastWorkspaceVersion}. ` +
11
11
  `Resetting WIP stream for ${normalizedStable}.`
12
12
  : undefined;
13
13
  // Determine whether the last workspace version represents a packed/installed
14
14
  // stable. Only when it is a non-prerelease semver whose base matches
15
- // package.yml.version do we start a new WIP stream from patch(stable).
15
+ // openpackage.yml.version do we start a new WIP stream from patch(stable).
16
16
  let effectiveStable = normalizedStable;
17
17
  let shouldBumpPackageYml = false;
18
18
  let nextStable;
@@ -20,7 +20,7 @@ export function computeWipVersion(baseStable, lastWorkspaceVersion, workspacePat
20
20
  const parsedLast = semver.parse(lastWorkspaceVersion);
21
21
  const isStableLast = Boolean(parsedLast && parsedLast.prerelease.length === 0);
22
22
  if (isStableLast) {
23
- // lastWorkspaceVersion is a stable S on the same base line as package.yml.
23
+ // lastWorkspaceVersion is a stable S on the same base line as openpackage.yml.
24
24
  // Begin the next development cycle from patch(S).
25
25
  nextStable = bumpStableVersion(normalizedStable, 'patch');
26
26
  effectiveStable = nextStable;
@@ -44,7 +44,7 @@ export function computePackTargetVersion(baseStable, lastWorkspaceVersion) {
44
44
  const lastBase = lastWorkspaceVersion ? extractBaseVersion(lastWorkspaceVersion) : undefined;
45
45
  const reset = Boolean(lastWorkspaceVersion && lastBase !== normalizedStable);
46
46
  const resetMessage = reset
47
- ? `package.yml version ${normalizedStable} differs from last packed version ${lastWorkspaceVersion}. ` +
47
+ ? `openpackage.yml version ${normalizedStable} differs from last packed version ${lastWorkspaceVersion}. ` +
48
48
  `Promoting ${normalizedStable} as the next stable release.`
49
49
  : undefined;
50
50
  const nextStable = bumpStableVersion(normalizedStable, 'patch');
@@ -1 +1 @@
1
- {"version":3,"file":"save-versioning.js","sourceRoot":"","sources":["../../../src/core/save/save-versioning.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"save-versioning.js","sourceRoot":"","sources":["../../../src/core/save/save-versioning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,204 @@
1
+ import { dirname, join } from 'path';
2
+ import { ensureDir, exists, readTextFile, writeTextFile } from '../../utils/fs.js';
3
+ import { logger } from '../../utils/logger.js';
4
+ import { createPlatformSpecificRegistryPath } from '../../utils/platform-specific-paths.js';
5
+ import { UTF8_ENCODING } from './constants.js';
6
+ /**
7
+ * Core responsibility: Write resolved content to source
8
+ * Input: Resolution results
9
+ * Output: Write operation results
10
+ */
11
+ /**
12
+ * Coordinate all writes for a resolution result
13
+ *
14
+ * Writes both universal content and platform-specific content.
15
+ * Returns detailed results for each write operation.
16
+ *
17
+ * Note: Universal candidate can be null if user chose to save
18
+ * only platform-specific variants.
19
+ */
20
+ export async function writeResolution(packageRoot, registryPath, resolution, localCandidate) {
21
+ const results = [];
22
+ // Write universal content (if selected)
23
+ if (resolution.selection) {
24
+ const universalResult = await writeUniversal(packageRoot, registryPath, resolution.selection, localCandidate);
25
+ results.push(universalResult);
26
+ }
27
+ else {
28
+ // No universal selected - log this
29
+ logger.debug(`No universal content selected for ${registryPath} - keeping original untouched`);
30
+ }
31
+ // Write platform-specific content
32
+ for (const platformCandidate of resolution.platformSpecific) {
33
+ const platformResult = await writePlatformSpecific(packageRoot, registryPath, platformCandidate);
34
+ results.push(platformResult);
35
+ }
36
+ return results;
37
+ }
38
+ /**
39
+ * Write universal content to source
40
+ *
41
+ * Writes the selected workspace candidate to the package source.
42
+ * Optimizes by skipping write if content is identical to existing source.
43
+ */
44
+ async function writeUniversal(packageRoot, registryPath, candidate, localCandidate) {
45
+ const targetPath = join(packageRoot, registryPath);
46
+ // Determine if write is needed
47
+ const writeDecision = shouldWrite(candidate, localCandidate);
48
+ const operation = {
49
+ registryPath,
50
+ targetPath,
51
+ content: candidate.content,
52
+ operation: writeDecision.operation,
53
+ isPlatformSpecific: false
54
+ };
55
+ // Skip if no write needed
56
+ if (!writeDecision.needed) {
57
+ logger.debug(`Skipping write for ${registryPath}: content identical to source`);
58
+ return {
59
+ operation,
60
+ success: true
61
+ };
62
+ }
63
+ // Perform write
64
+ const writeResult = await safeWrite(targetPath, getContentToWrite(candidate));
65
+ if (writeResult.success) {
66
+ logger.debug(`${operation.operation === 'create' ? 'Created' : 'Updated'} ${registryPath}`);
67
+ }
68
+ return {
69
+ operation,
70
+ success: writeResult.success,
71
+ error: writeResult.error
72
+ };
73
+ }
74
+ /**
75
+ * Write platform-specific content to source
76
+ *
77
+ * Writes a platform-specific variant to a platform-specific path
78
+ * (e.g., commands.cursor.md, CLAUDE.md).
79
+ */
80
+ async function writePlatformSpecific(packageRoot, registryPath, candidate) {
81
+ const platform = candidate.platform;
82
+ if (!platform || platform === 'ai') {
83
+ return {
84
+ operation: {
85
+ registryPath,
86
+ targetPath: '',
87
+ content: '',
88
+ operation: 'skip',
89
+ isPlatformSpecific: true
90
+ },
91
+ success: false,
92
+ error: new Error('Candidate has no platform association')
93
+ };
94
+ }
95
+ const platformRegistryPath = createPlatformSpecificRegistryPath(registryPath, platform);
96
+ if (!platformRegistryPath) {
97
+ return {
98
+ operation: {
99
+ registryPath,
100
+ targetPath: '',
101
+ content: '',
102
+ operation: 'skip',
103
+ isPlatformSpecific: true,
104
+ platform
105
+ },
106
+ success: false,
107
+ error: new Error(`Could not create platform-specific path for ${platform}`)
108
+ };
109
+ }
110
+ const targetPath = join(packageRoot, platformRegistryPath);
111
+ // Determine operation type
112
+ const fileExists = await exists(targetPath);
113
+ const operationType = fileExists ? 'update' : 'create';
114
+ const operation = {
115
+ registryPath: platformRegistryPath,
116
+ targetPath,
117
+ content: getContentToWrite(candidate),
118
+ operation: operationType,
119
+ isPlatformSpecific: true,
120
+ platform
121
+ };
122
+ // Check if content matches existing (optimization)
123
+ if (fileExists) {
124
+ try {
125
+ const existingContent = await readTextFile(targetPath, UTF8_ENCODING);
126
+ if (existingContent === operation.content) {
127
+ logger.debug(`Skipping write for ${platformRegistryPath}: content identical`);
128
+ operation.operation = 'skip';
129
+ return {
130
+ operation,
131
+ success: true
132
+ };
133
+ }
134
+ }
135
+ catch (error) {
136
+ // Ignore read errors - will attempt write anyway
137
+ logger.debug(`Could not read existing file ${platformRegistryPath}: ${error}`);
138
+ }
139
+ }
140
+ // Perform write
141
+ const writeResult = await safeWrite(targetPath, operation.content);
142
+ if (writeResult.success) {
143
+ logger.debug(`${operationType === 'create' ? 'Created' : 'Updated'} platform-specific file: ${platformRegistryPath}`);
144
+ }
145
+ return {
146
+ operation,
147
+ success: writeResult.success,
148
+ error: writeResult.error
149
+ };
150
+ }
151
+ /**
152
+ * Determine if write is needed (optimization)
153
+ *
154
+ * Compares candidate content with local (source) content.
155
+ * Returns whether write is needed and what operation type.
156
+ */
157
+ function shouldWrite(candidate, localCandidate) {
158
+ // No local candidate means file doesn't exist - create
159
+ if (!localCandidate) {
160
+ return { needed: true, operation: 'create' };
161
+ }
162
+ // Compare content hashes
163
+ if (candidate.contentHash === localCandidate.contentHash) {
164
+ // Content identical - skip write
165
+ return { needed: false, operation: 'skip' };
166
+ }
167
+ // Content differs - update
168
+ return { needed: true, operation: 'update' };
169
+ }
170
+ /**
171
+ * Get content to write from candidate
172
+ *
173
+ * For root files, uses sectionBody if available.
174
+ * Otherwise uses full content.
175
+ */
176
+ function getContentToWrite(candidate) {
177
+ if (candidate.isRootFile && candidate.sectionBody) {
178
+ return candidate.sectionBody.trim();
179
+ }
180
+ return candidate.content;
181
+ }
182
+ /**
183
+ * Safely write file with error handling
184
+ *
185
+ * Ensures parent directory exists before writing.
186
+ * Returns success/error result without throwing.
187
+ */
188
+ async function safeWrite(targetPath, content) {
189
+ try {
190
+ // Ensure parent directory exists
191
+ await ensureDir(dirname(targetPath));
192
+ // Write file
193
+ await writeTextFile(targetPath, content, UTF8_ENCODING);
194
+ return { success: true };
195
+ }
196
+ catch (error) {
197
+ logger.error(`Failed to write file ${targetPath}: ${error}`);
198
+ return {
199
+ success: false,
200
+ error: error instanceof Error ? error : new Error(String(error))
201
+ };
202
+ }
203
+ }
204
+ //# sourceMappingURL=save-write-coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-write-coordinator.js","sourceRoot":"","sources":["../../../src/core/save/save-write-coordinator.ts"],"names":[],"mappings":"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"}