opkg 0.5.0 → 0.6.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 (272) hide show
  1. package/README.md +49 -8
  2. package/dist/commands/add.js +11 -276
  3. package/dist/commands/add.js.map +1 -1
  4. package/dist/commands/init.js +73 -145
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/install.js +26 -668
  7. package/dist/commands/install.js.map +1 -1
  8. package/dist/commands/pack.js +10 -137
  9. package/dist/commands/pack.js.map +1 -1
  10. package/dist/commands/push.js +14 -8
  11. package/dist/commands/push.js.map +1 -1
  12. package/dist/commands/save.js +12 -167
  13. package/dist/commands/save.js.map +1 -1
  14. package/dist/commands/status.js +2 -2
  15. package/dist/commands/status.js.map +1 -1
  16. package/dist/commands/uninstall.js +5 -5
  17. package/dist/commands/uninstall.js.map +1 -1
  18. package/dist/constants/index.js +18 -45
  19. package/dist/constants/index.js.map +1 -1
  20. package/dist/constants/workspace.js +9 -0
  21. package/dist/constants/workspace.js.map +1 -0
  22. package/dist/core/add/add-conflict-handler.js +68 -0
  23. package/dist/core/add/add-conflict-handler.js.map +1 -0
  24. package/dist/core/add/add-pipeline.js +137 -0
  25. package/dist/core/add/add-pipeline.js.map +1 -0
  26. package/dist/core/add/package-index-updater.js +62 -33
  27. package/dist/core/add/package-index-updater.js.map +1 -1
  28. package/dist/core/add/platform-path-transformer.js +47 -0
  29. package/dist/core/add/platform-path-transformer.js.map +1 -0
  30. package/dist/core/add/source-collector.js +57 -0
  31. package/dist/core/add/source-collector.js.map +1 -0
  32. package/dist/core/dependency-resolver.js +3 -1
  33. package/dist/core/dependency-resolver.js.map +1 -1
  34. package/dist/core/directory.js +2 -2
  35. package/dist/core/directory.js.map +1 -1
  36. package/dist/core/discovery/file-discovery.js +55 -54
  37. package/dist/core/discovery/file-discovery.js.map +1 -1
  38. package/dist/core/discovery/platform-files-discovery.js +32 -17
  39. package/dist/core/discovery/platform-files-discovery.js.map +1 -1
  40. package/dist/core/install/bulk-install-pipeline.js +199 -0
  41. package/dist/core/install/bulk-install-pipeline.js.map +1 -0
  42. package/dist/core/install/canonical-plan.js +123 -0
  43. package/dist/core/install/canonical-plan.js.map +1 -0
  44. package/dist/core/install/dry-run.js +2 -2
  45. package/dist/core/install/dry-run.js.map +1 -1
  46. package/dist/core/install/index.js +3 -0
  47. package/dist/core/install/index.js.map +1 -0
  48. package/dist/core/install/install-errors.js +41 -0
  49. package/dist/core/install/install-errors.js.map +1 -0
  50. package/dist/core/install/install-flow.js +2 -5
  51. package/dist/core/install/install-flow.js.map +1 -1
  52. package/dist/core/install/install-pipeline.js +228 -0
  53. package/dist/core/install/install-pipeline.js.map +1 -0
  54. package/dist/core/install/install-reporting.js +99 -0
  55. package/dist/core/install/install-reporting.js.map +1 -0
  56. package/dist/core/install/platform-resolution.js +6 -6
  57. package/dist/core/install/platform-resolution.js.map +1 -1
  58. package/dist/core/install/remote-flow.js +67 -1
  59. package/dist/core/install/remote-flow.js.map +1 -1
  60. package/dist/core/openpackage.js +16 -8
  61. package/dist/core/openpackage.js.map +1 -1
  62. package/dist/core/package-context.js +246 -0
  63. package/dist/core/package-context.js.map +1 -0
  64. package/dist/core/package.js +3 -2
  65. package/dist/core/package.js.map +1 -1
  66. package/dist/core/platforms.js +126 -217
  67. package/dist/core/platforms.js.map +1 -1
  68. package/dist/core/registry/registry-rename.js +2 -1
  69. package/dist/core/registry/registry-rename.js.map +1 -1
  70. package/dist/core/registry.js +10 -3
  71. package/dist/core/registry.js.map +1 -1
  72. package/dist/core/remote-pull.js +2 -1
  73. package/dist/core/remote-pull.js.map +1 -1
  74. package/dist/core/save/constants.js +4 -0
  75. package/dist/core/save/constants.js.map +1 -1
  76. package/dist/core/save/name-resolution.js +31 -0
  77. package/dist/core/save/name-resolution.js.map +1 -0
  78. package/dist/core/save/package-detection.js +147 -0
  79. package/dist/core/save/package-detection.js.map +1 -0
  80. package/dist/core/save/package-saver.js +46 -43
  81. package/dist/core/save/package-saver.js.map +1 -1
  82. package/dist/core/save/package-yml-generator.js +50 -71
  83. package/dist/core/save/package-yml-generator.js.map +1 -1
  84. package/dist/core/save/root-save-candidates.js.map +1 -1
  85. package/dist/core/save/save-candidate-loader.js +89 -0
  86. package/dist/core/save/save-candidate-loader.js.map +1 -0
  87. package/dist/core/save/save-conflict-resolution.js +72 -410
  88. package/dist/core/save/save-conflict-resolution.js.map +1 -1
  89. package/dist/core/save/save-conflict-resolver.js +277 -0
  90. package/dist/core/save/save-conflict-resolver.js.map +1 -0
  91. package/dist/core/save/save-pipeline.js +151 -0
  92. package/dist/core/save/save-pipeline.js.map +1 -0
  93. package/dist/core/save/save-types.js +2 -0
  94. package/dist/core/save/save-types.js.map +1 -0
  95. package/dist/core/save/save-yml-resolution.js +77 -39
  96. package/dist/core/save/save-yml-resolution.js.map +1 -1
  97. package/dist/core/save/workspace-rename.js +6 -6
  98. package/dist/core/save/workspace-rename.js.map +1 -1
  99. package/dist/core/scoping/package-scoping.js +13 -1
  100. package/dist/core/scoping/package-scoping.js.map +1 -1
  101. package/dist/core/status/status-file-discovery.js +12 -30
  102. package/dist/core/status/status-file-discovery.js.map +1 -1
  103. package/dist/core/sync/platform-sync.js +7 -4
  104. package/dist/core/sync/platform-sync.js.map +1 -1
  105. package/dist/core/sync/root-files-sync.js +59 -1
  106. package/dist/core/sync/root-files-sync.js.map +1 -1
  107. package/dist/core/uninstall/uninstall-file-discovery.js +1 -2
  108. package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
  109. package/dist/types/index.js.map +1 -1
  110. package/dist/utils/file-processing.js +5 -58
  111. package/dist/utils/file-processing.js.map +1 -1
  112. package/dist/utils/index-based-installer.js +15 -33
  113. package/dist/utils/index-based-installer.js.map +1 -1
  114. package/dist/utils/install-file-discovery.js +3 -3
  115. package/dist/utils/install-file-discovery.js.map +1 -1
  116. package/dist/utils/install-orchestrator.js +21 -21
  117. package/dist/utils/install-orchestrator.js.map +1 -1
  118. package/dist/utils/jsonc.js +44 -0
  119. package/dist/utils/jsonc.js.map +1 -0
  120. package/dist/utils/package-copy.js +199 -0
  121. package/dist/utils/package-copy.js.map +1 -0
  122. package/dist/utils/package-filters.js +125 -0
  123. package/dist/utils/package-filters.js.map +1 -0
  124. package/dist/utils/package-index-yml.js +15 -10
  125. package/dist/utils/package-index-yml.js.map +1 -1
  126. package/dist/utils/package-installation.js +4 -113
  127. package/dist/utils/package-installation.js.map +1 -1
  128. package/dist/utils/package-local-files.js +2 -35
  129. package/dist/utils/package-local-files.js.map +1 -1
  130. package/dist/utils/package-management.js +59 -37
  131. package/dist/utils/package-management.js.map +1 -1
  132. package/dist/utils/package-yml.js +24 -0
  133. package/dist/utils/package-yml.js.map +1 -1
  134. package/dist/utils/path-normalization.js +8 -53
  135. package/dist/utils/path-normalization.js.map +1 -1
  136. package/dist/utils/paths.js +17 -9
  137. package/dist/utils/paths.js.map +1 -1
  138. package/dist/utils/platform-file.js +16 -59
  139. package/dist/utils/platform-file.js.map +1 -1
  140. package/dist/utils/platform-mapper.js +29 -41
  141. package/dist/utils/platform-mapper.js.map +1 -1
  142. package/dist/utils/platform-specific-paths.js.map +1 -1
  143. package/dist/utils/platform-utils.js +28 -139
  144. package/dist/utils/platform-utils.js.map +1 -1
  145. package/dist/utils/platform-yaml-merge.js +13 -6
  146. package/dist/utils/platform-yaml-merge.js.map +1 -1
  147. package/dist/utils/registry-entry-filter.js +38 -24
  148. package/dist/utils/registry-entry-filter.js.map +1 -1
  149. package/dist/utils/registry-paths.js +10 -0
  150. package/dist/utils/registry-paths.js.map +1 -0
  151. package/dist/utils/root-file-installer.js +19 -0
  152. package/dist/utils/root-file-installer.js.map +1 -1
  153. package/dist/utils/root-file-registry.js.map +1 -1
  154. package/package.json +3 -2
  155. package/platforms.jsonc +178 -0
  156. package/specs/package/README.md +60 -0
  157. package/specs/package/nested-packages-and-parent-packages.md +79 -0
  158. package/specs/package/package-index-yml.md +171 -0
  159. package/specs/package/package-root-layout.md +78 -0
  160. package/specs/package/registry-payload-and-copy.md +77 -0
  161. package/specs/package/universal-content.md +144 -0
  162. package/specs/platforms.md +193 -0
  163. package/specs/save/README.md +40 -0
  164. package/specs/save/save-conflict-resolution.md +146 -0
  165. package/specs/save/save-file-discovery.md +101 -0
  166. package/specs/save/save-frontmatter-overrides.md +81 -0
  167. package/specs/save/save-modes-inputs.md +53 -0
  168. package/specs/save/save-naming-scoping.md +93 -0
  169. package/specs/save/save-package-detection.md +60 -0
  170. package/specs/save/save-registry-sync.md +126 -0
  171. package/dist/commands/release.js +0 -33
  172. package/dist/commands/release.js.map +0 -1
  173. package/dist/commands/tag.js +0 -311
  174. package/dist/commands/tag.js.map +0 -1
  175. package/dist/commands/update.js +0 -30
  176. package/dist/commands/update.js.map +0 -1
  177. package/dist/core/add/formula-index-updater.js +0 -290
  178. package/dist/core/add/formula-index-updater.js.map +0 -1
  179. package/dist/core/discovery/ai-files-discovery.js +0 -2
  180. package/dist/core/discovery/ai-files-discovery.js.map +0 -1
  181. package/dist/core/discovery/formula-files-discovery.js +0 -14
  182. package/dist/core/discovery/formula-files-discovery.js.map +0 -1
  183. package/dist/core/discovery/index-files-discovery.js +0 -91
  184. package/dist/core/discovery/index-files-discovery.js.map +0 -1
  185. package/dist/core/discovery/md-files-discovery.js +0 -82
  186. package/dist/core/discovery/md-files-discovery.js.map +0 -1
  187. package/dist/core/discovery/package-files-discovery.js +0 -14
  188. package/dist/core/discovery/package-files-discovery.js.map +0 -1
  189. package/dist/core/discovery/platform-discovery.js +0 -84
  190. package/dist/core/discovery/platform-discovery.js.map +0 -1
  191. package/dist/core/discovery/root-files-discovery.js +0 -2
  192. package/dist/core/discovery/root-files-discovery.js.map +0 -1
  193. package/dist/core/formula.js +0 -170
  194. package/dist/core/formula.js.map +0 -1
  195. package/dist/core/git-registry.js +0 -46
  196. package/dist/core/git-registry.js.map +0 -1
  197. package/dist/core/groundzero.js +0 -277
  198. package/dist/core/groundzero.js.map +0 -1
  199. package/dist/core/install/scenario.js +0 -11
  200. package/dist/core/install/scenario.js.map +0 -1
  201. package/dist/core/package-sync.js +0 -219
  202. package/dist/core/package-sync.js.map +0 -1
  203. package/dist/core/save/formula-file-generator.js +0 -167
  204. package/dist/core/save/formula-file-generator.js.map +0 -1
  205. package/dist/core/save/formula-saver.js +0 -52
  206. package/dist/core/save/formula-saver.js.map +0 -1
  207. package/dist/core/save/formula-yml-generator.js +0 -89
  208. package/dist/core/save/formula-yml-generator.js.map +0 -1
  209. package/dist/core/save/formula-yml-versioning.js +0 -108
  210. package/dist/core/save/formula-yml-versioning.js.map +0 -1
  211. package/dist/core/save/generic-file-sync.js +0 -38
  212. package/dist/core/save/generic-file-sync.js.map +0 -1
  213. package/dist/core/save/md-files-sync.js +0 -33
  214. package/dist/core/save/md-files-sync.js.map +0 -1
  215. package/dist/core/save/package-yml-versioning.js +0 -108
  216. package/dist/core/save/package-yml-versioning.js.map +0 -1
  217. package/dist/core/save/platform-sync.js +0 -95
  218. package/dist/core/save/platform-sync.js.map +0 -1
  219. package/dist/core/save/root-files-sync.js +0 -140
  220. package/dist/core/save/root-files-sync.js.map +0 -1
  221. package/dist/core/save/save-candidate-types.js +0 -2
  222. package/dist/core/save/save-candidate-types.js.map +0 -1
  223. package/dist/core/save/save-conflict-types.js +0 -2
  224. package/dist/core/save/save-conflict-types.js.map +0 -1
  225. package/dist/core/save/save-file-discovery.js +0 -5
  226. package/dist/core/save/save-file-discovery.js.map +0 -1
  227. package/dist/core/status-file-discovery.js +0 -175
  228. package/dist/core/status-file-discovery.js.map +0 -1
  229. package/dist/utils/discovery/file-processing.js +0 -156
  230. package/dist/utils/discovery/file-processing.js.map +0 -1
  231. package/dist/utils/discovery/formula-discovery.js +0 -211
  232. package/dist/utils/discovery/formula-discovery.js.map +0 -1
  233. package/dist/utils/discovery/platform-discovery.js +0 -2
  234. package/dist/utils/discovery/platform-discovery.js.map +0 -1
  235. package/dist/utils/formula-discovery.js +0 -102
  236. package/dist/utils/formula-discovery.js.map +0 -1
  237. package/dist/utils/formula-index-yml.js +0 -122
  238. package/dist/utils/formula-index-yml.js.map +0 -1
  239. package/dist/utils/formula-installation.js +0 -110
  240. package/dist/utils/formula-installation.js.map +0 -1
  241. package/dist/utils/formula-local-files.js +0 -38
  242. package/dist/utils/formula-local-files.js.map +0 -1
  243. package/dist/utils/formula-management.js +0 -191
  244. package/dist/utils/formula-management.js.map +0 -1
  245. package/dist/utils/formula-name.js +0 -97
  246. package/dist/utils/formula-name.js.map +0 -1
  247. package/dist/utils/formula-versioning.js +0 -109
  248. package/dist/utils/formula-versioning.js.map +0 -1
  249. package/dist/utils/formula-yml.js +0 -82
  250. package/dist/utils/formula-yml.js.map +0 -1
  251. package/dist/utils/git.js +0 -54
  252. package/dist/utils/git.js.map +0 -1
  253. package/dist/utils/id-based-discovery.js +0 -126
  254. package/dist/utils/id-based-discovery.js.map +0 -1
  255. package/dist/utils/id-based-installer.js +0 -249
  256. package/dist/utils/id-based-installer.js.map +0 -1
  257. package/dist/utils/index-yml-based-installer.js +0 -375
  258. package/dist/utils/index-yml-based-installer.js.map +0 -1
  259. package/dist/utils/index-yml.js +0 -124
  260. package/dist/utils/index-yml.js.map +0 -1
  261. package/dist/utils/md-frontmatter.js +0 -3
  262. package/dist/utils/md-frontmatter.js.map +0 -1
  263. package/dist/utils/package-link-yml.js +0 -92
  264. package/dist/utils/package-link-yml.js.map +0 -1
  265. package/dist/utils/platform-discovery.js +0 -2
  266. package/dist/utils/platform-discovery.js.map +0 -1
  267. package/dist/utils/platform-frontmatter-split.js +0 -15
  268. package/dist/utils/platform-frontmatter-split.js.map +0 -1
  269. package/dist/utils/timestamp-encoder.js +0 -13
  270. package/dist/utils/timestamp-encoder.js.map +0 -1
  271. package/dist/utils/wip-versioning.js +0 -24
  272. package/dist/utils/wip-versioning.js.map +0 -1
@@ -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"}
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"}
@@ -0,0 +1,31 @@
1
+ import { parsePackageInput } from '../../utils/package-name.js';
2
+ import { ValidationError } from '../../utils/errors.js';
3
+ import { resolveEffectiveNameForSave } from '../scoping/package-scoping.js';
4
+ import { MODE_LABELS } from './constants.js';
5
+ export async function resolveWorkspaceNames(packageInput, renameOption, mode) {
6
+ const { name: inputName, version } = parsePackageInput(packageInput);
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.`);
9
+ }
10
+ if (renameOption?.trim()) {
11
+ const { name: renameName, version: renameVersion } = parsePackageInput(renameOption.trim());
12
+ if (renameVersion) {
13
+ throw new ValidationError('Rename target cannot include a version.');
14
+ }
15
+ const needsRename = renameName !== inputName;
16
+ return {
17
+ inputName,
18
+ finalName: renameName,
19
+ needsRename,
20
+ renameReason: needsRename ? 'explicit' : undefined
21
+ };
22
+ }
23
+ const scopingResult = await resolveEffectiveNameForSave(inputName);
24
+ return {
25
+ inputName,
26
+ finalName: scopingResult.effectiveName,
27
+ needsRename: scopingResult.nameChanged,
28
+ renameReason: scopingResult.nameChanged ? 'scoping' : undefined
29
+ };
30
+ }
31
+ //# sourceMappingURL=name-resolution.js.map
@@ -0,0 +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"}
@@ -0,0 +1,147 @@
1
+ import { join } from 'path';
2
+ import { DIR_PATTERNS, FILE_PATTERNS, OPENPACKAGE_DIRS } from '../../constants/index.js';
3
+ import { exists, isDirectory } from '../../utils/fs.js';
4
+ import { parsePackageYml } from '../../utils/package-yml.js';
5
+ import { arePackageNamesEquivalent } from '../../utils/package-name.js';
6
+ import { getLocalPackageDir } from '../../utils/paths.js';
7
+ import { findDirectoriesContainingFile } from '../../utils/file-processing.js';
8
+ import { logger } from '../../utils/logger.js';
9
+ /**
10
+ * Core rule: any directory that contains `.openpackage/package.yml` is a valid package.
11
+ */
12
+ export async function isValidPackageDirectory(dir) {
13
+ const packageYmlPath = join(dir, DIR_PATTERNS.OPENPACKAGE, FILE_PATTERNS.PACKAGE_YML);
14
+ return exists(packageYmlPath);
15
+ }
16
+ /**
17
+ * Load package config from a directory that satisfies the core rule.
18
+ */
19
+ export async function loadPackageConfig(dir) {
20
+ const packageYmlPath = join(dir, DIR_PATTERNS.OPENPACKAGE, FILE_PATTERNS.PACKAGE_YML);
21
+ if (!(await exists(packageYmlPath))) {
22
+ return null;
23
+ }
24
+ try {
25
+ return await parsePackageYml(packageYmlPath);
26
+ }
27
+ catch (error) {
28
+ logger.debug(`Failed to parse package.yml at ${packageYmlPath}: ${error}`);
29
+ return null;
30
+ }
31
+ }
32
+ /**
33
+ * Detect package context for save/pack commands.
34
+ *
35
+ * Scope:
36
+ * - Root package at `cwd/.openpackage/package.yml`
37
+ * - Nested packages at `cwd/.openpackage/packages/<name>/package.yml`
38
+ */
39
+ export async function detectPackageContext(cwd, packageName) {
40
+ const rootPackageYmlPath = join(cwd, DIR_PATTERNS.OPENPACKAGE, FILE_PATTERNS.PACKAGE_YML);
41
+ const hasRootPackage = await exists(rootPackageYmlPath);
42
+ // No package name provided: target cwd as the package itself.
43
+ if (!packageName) {
44
+ if (!hasRootPackage) {
45
+ return null;
46
+ }
47
+ try {
48
+ const config = await parsePackageYml(rootPackageYmlPath);
49
+ return {
50
+ packageDir: cwd,
51
+ packageYmlPath: rootPackageYmlPath,
52
+ config,
53
+ location: 'root',
54
+ isCwdPackage: true
55
+ };
56
+ }
57
+ catch (error) {
58
+ logger.warn(`Failed to parse root package.yml: ${error}`);
59
+ return null;
60
+ }
61
+ }
62
+ // Package name provided: check root first.
63
+ if (hasRootPackage) {
64
+ try {
65
+ const rootConfig = await parsePackageYml(rootPackageYmlPath);
66
+ if (arePackageNamesEquivalent(rootConfig.name, packageName)) {
67
+ return {
68
+ packageDir: cwd,
69
+ packageYmlPath: rootPackageYmlPath,
70
+ config: rootConfig,
71
+ location: 'root',
72
+ isCwdPackage: true
73
+ };
74
+ }
75
+ }
76
+ catch (error) {
77
+ logger.debug(`Failed to parse root package.yml: ${error}`);
78
+ }
79
+ }
80
+ // Check nested packages directory for direct match.
81
+ const nestedPackageDir = getLocalPackageDir(cwd, packageName);
82
+ const nestedPackageYmlPath = join(nestedPackageDir, FILE_PATTERNS.PACKAGE_YML);
83
+ if (await exists(nestedPackageYmlPath)) {
84
+ try {
85
+ const nestedConfig = await parsePackageYml(nestedPackageYmlPath);
86
+ if (arePackageNamesEquivalent(nestedConfig.name, packageName)) {
87
+ return {
88
+ packageDir: nestedPackageDir,
89
+ packageYmlPath: nestedPackageYmlPath,
90
+ config: nestedConfig,
91
+ location: 'nested',
92
+ isCwdPackage: false
93
+ };
94
+ }
95
+ }
96
+ catch (error) {
97
+ logger.debug(`Failed to parse nested package.yml at ${nestedPackageYmlPath}: ${error}`);
98
+ }
99
+ }
100
+ // Scan nested packages for cases where directory name differs from package name.
101
+ const packagesDir = join(cwd, DIR_PATTERNS.OPENPACKAGE, OPENPACKAGE_DIRS.PACKAGES);
102
+ if (await exists(packagesDir) && (await isDirectory(packagesDir))) {
103
+ try {
104
+ const packageDirs = await findDirectoriesContainingFile(packagesDir, FILE_PATTERNS.PACKAGE_YML, async (filePath) => {
105
+ try {
106
+ return await parsePackageYml(filePath);
107
+ }
108
+ catch {
109
+ return null;
110
+ }
111
+ });
112
+ for (const { dirPath, parsedContent } of packageDirs) {
113
+ if (!parsedContent)
114
+ continue;
115
+ const packageRoot = dirPath;
116
+ if (arePackageNamesEquivalent(parsedContent.name, packageName)) {
117
+ return {
118
+ packageDir: packageRoot,
119
+ packageYmlPath: join(packageRoot, FILE_PATTERNS.PACKAGE_YML),
120
+ config: parsedContent,
121
+ location: 'nested',
122
+ isCwdPackage: false
123
+ };
124
+ }
125
+ }
126
+ }
127
+ catch (error) {
128
+ logger.debug(`Failed to scan packages directory: ${error}`);
129
+ }
130
+ }
131
+ return null;
132
+ }
133
+ export function getNoPackageDetectedMessage(packageName) {
134
+ if (packageName) {
135
+ return (`Package '${packageName}' not found.\n\n` +
136
+ `Checked locations:\n` +
137
+ ` • Root package: .openpackage/package.yml\n` +
138
+ ` • Nested packages: .openpackage/packages/${packageName}/\n\n` +
139
+ `💡 To create a new package, run: opkg save ${packageName}`);
140
+ }
141
+ return (`No package detected at current directory.\n\n` +
142
+ `A valid package requires .openpackage/package.yml to exist.\n\n` +
143
+ `💡 To initialize a package:\n` +
144
+ ` • Run 'opkg init' to create a new package\n` +
145
+ ` • Or specify a package name: 'opkg save <package-name>'`);
146
+ }
147
+ //# sourceMappingURL=package-detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-detection.js","sourceRoot":"","sources":["../../../src/core/save/package-detection.ts"],"names":[],"mappings":"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"}
@@ -1,52 +1,55 @@
1
- import { normalizePackageName } from "../../utils/package-name.js";
2
- import { ensureDir, writeTextFile, remove } from "../../utils/fs.js";
3
- import { logger } from "../../utils/logger.js";
4
- import { resolveTargetDirectory, resolveTargetFilePath } from "../../utils/platform-mapper.js";
5
- import { getPackageVersionPath } from "../directory.js";
6
- import { UTF8_ENCODING } from "./constants.js";
7
- import { packageVersionExists } from "../../utils/package-versioning.js";
8
1
  /**
9
- * Save package to local registry
2
+ * Registry write operations for save/pack commands.
3
+ *
4
+ * This module handles persisting a package version to the local registry at
5
+ * ~/.openpackage/registry/<name>/<version>/...
10
6
  */
11
- export async function savePackageToRegistry(packageInfo, files, silent = true) {
12
- const config = packageInfo.config;
7
+ import { normalizePackageName } from '../../utils/package-name.js';
8
+ import { remove } from '../../utils/fs.js';
9
+ import { logger } from '../../utils/logger.js';
10
+ import { getPackageVersionPath } from '../directory.js';
11
+ import { packageVersionExists } from '../../utils/package-versioning.js';
12
+ import { writePackageFilesToDirectory } from '../../utils/package-copy.js';
13
+ // ─────────────────────────────────────────────────────────────────────────────
14
+ // Public API
15
+ // ─────────────────────────────────────────────────────────────────────────────
16
+ /**
17
+ * Save a package version to the local registry.
18
+ *
19
+ * - Normalizes the package name for consistent registry paths.
20
+ * - Clears any existing version directory before writing (idempotent overwrites).
21
+ * - Writes all provided files to the registry version directory.
22
+ *
23
+ * @param packageContext - Metadata about the package (name, version, paths).
24
+ * @param files - The registry payload to persist.
25
+ * @returns Result indicating success/failure and the normalized config.
26
+ */
27
+ export async function savePackageToRegistry(packageContext, files) {
28
+ const { config } = packageContext;
29
+ const normalizedName = normalizePackageName(config.name);
30
+ const normalizedConfig = { ...config, name: normalizedName };
31
+ const versionDir = getPackageVersionPath(normalizedName, normalizedConfig.version);
13
32
  try {
14
- // Ensure package name is normalized for consistent registry paths
15
- const normalizedConfig = { ...config, name: normalizePackageName(config.name) };
16
- const targetPath = getPackageVersionPath(normalizedConfig.name, normalizedConfig.version);
17
- // If version already exists, clear the directory first to remove old files
18
- if (await packageVersionExists(normalizedConfig.name, normalizedConfig.version)) {
19
- await remove(targetPath);
20
- logger.debug(`Cleared existing version directory: ${targetPath}`);
21
- }
22
- await ensureDir(targetPath);
23
- // Group files by target directory
24
- const directoryGroups = new Map();
25
- for (const file of files) {
26
- const targetDir = resolveTargetDirectory(targetPath, file.path);
27
- if (!directoryGroups.has(targetDir)) {
28
- directoryGroups.set(targetDir, []);
29
- }
30
- directoryGroups.get(targetDir).push(file);
31
- }
32
- // Save files in parallel by directory
33
- const savePromises = Array.from(directoryGroups.entries()).map(async ([dir, dirFiles]) => {
34
- await ensureDir(dir);
35
- const filePromises = dirFiles.map(async (file) => {
36
- const filePath = resolveTargetFilePath(dir, file.path);
37
- await writeTextFile(filePath, file.content, file.encoding || UTF8_ENCODING);
38
- });
39
- await Promise.all(filePromises);
40
- });
41
- await Promise.all(savePromises);
42
- if (!silent) {
43
- logger.info(`Package '${normalizedConfig.name}@${normalizedConfig.version}' saved to local registry`);
44
- }
33
+ await clearExistingVersion(normalizedName, normalizedConfig.version, versionDir);
34
+ await writePackageFilesToDirectory(versionDir, files);
45
35
  return { success: true, updatedConfig: normalizedConfig };
46
36
  }
47
37
  catch (error) {
48
- logger.error(`Failed to save package: ${error}`);
49
- return { success: false, error: `Failed to save package: ${error}` };
38
+ const message = `Failed to save ${normalizedName}@${normalizedConfig.version}: ${error}`;
39
+ logger.error(message);
40
+ return { success: false, error: message };
41
+ }
42
+ }
43
+ // ─────────────────────────────────────────────────────────────────────────────
44
+ // Helpers
45
+ // ─────────────────────────────────────────────────────────────────────────────
46
+ /**
47
+ * Remove an existing version directory if present (ensures clean overwrites).
48
+ */
49
+ async function clearExistingVersion(packageName, version, versionDir) {
50
+ if (await packageVersionExists(packageName, version)) {
51
+ await remove(versionDir);
52
+ logger.debug(`Cleared existing registry version: ${versionDir}`);
50
53
  }
51
54
  }
52
55
  //# sourceMappingURL=package-saver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-saver.js","sourceRoot":"","sources":["../../../src/core/save/package-saver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAEzE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAA2B,EAC3B,KAAoB,EACpB,SAAkB,IAAI;IAGtB,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAElC,IAAI,CAAC;QACH,kEAAkE;QAClE,MAAM,gBAAgB,GAAG,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAChF,MAAM,UAAU,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE1F,2EAA2E;QAC3E,IAAI,MAAM,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YAChF,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,uCAAuC,UAAU,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;QAE5B,kCAAkC;QAClC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAyB,CAAC;QAEzD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,sBAAsB,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,eAAe,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,sCAAsC;QACtC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE;YACvF,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;YAErB,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBAC/C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvD,MAAM,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAG,IAAI,CAAC,QAA2B,IAAI,aAAa,CAAC,CAAC;YAClG,CAAC,CAAC,CAAC;YAEH,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEhC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,YAAY,gBAAgB,CAAC,IAAI,IAAI,gBAAgB,CAAC,OAAO,2BAA2B,CAAC,CAAC;QACxG,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;QACjD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,KAAK,EAAE,EAAE,CAAC;IACvE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"package-saver.js","sourceRoot":"","sources":["../../../src/core/save/package-saver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAa3E,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,cAA8B,EAC9B,KAAoB;IAEpB,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC;IAClC,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,gBAAgB,GAAe,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IAEzE,MAAM,UAAU,GAAG,qBAAqB,CAAC,cAAc,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEnF,IAAI,CAAC;QACH,MAAM,oBAAoB,CAAC,cAAc,EAAE,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACjF,MAAM,4BAA4B,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAEtD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,kBAAkB,cAAc,IAAI,gBAAgB,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QACzF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;GAEG;AACH,KAAK,UAAU,oBAAoB,CACjC,WAAmB,EACnB,OAAe,EACf,UAAkB;IAElB,IAAI,MAAM,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC;QACrD,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,sCAAsC,UAAU,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
@@ -1,81 +1,60 @@
1
- import { join } from "path";
2
- import { FILE_PATTERNS } from "../../constants/index.js";
3
- import { normalizePackageName } from "../../utils/package-name.js";
4
- import { parsePackageYml, writePackageYml } from "../../utils/package-yml.js";
5
- import { ensureDir, exists, isDirectory } from "../../utils/fs.js";
6
- import { logger } from "../../utils/logger.js";
7
- import { getLocalPackageDir } from "../../utils/paths.js";
8
- import { ValidationError } from "../../utils/errors.js";
9
- import { ensureLocalOpenPackageStructure } from "../../utils/package-management.js";
10
- import { DEFAULT_VERSION, ERROR_MESSAGES, LOG_PREFIXES } from "./constants.js";
11
- /**
12
- * Create package.yml automatically in a directory without user prompts
13
- * Reuses init command logic but makes it non-interactive
14
- */
15
- async function createPackageYmlInDirectory(packageDir, packageName) {
16
- const cwd = process.cwd();
17
- // Ensure the target directory exists (including packages subdirectory)
18
- await ensureLocalOpenPackageStructure(cwd);
19
- await ensureDir(packageDir);
20
- // Create package.yml in the package directory (rTnot the main .openpackage directory)
21
- const packageYmlPath = join(packageDir, FILE_PATTERNS.PACKAGE_YML);
22
- // Create default package config
23
- const packageConfig = {
24
- name: normalizePackageName(packageName),
25
- version: DEFAULT_VERSION
26
- };
27
- // Create the package.yml file
28
- await writePackageYml(packageYmlPath, packageConfig);
29
- console.log(`${LOG_PREFIXES.CREATED} ${packageDir}`);
30
- console.log(`${LOG_PREFIXES.NAME} ${packageConfig.name}`);
31
- console.log(`${LOG_PREFIXES.VERSION} ${packageConfig.version}`);
32
- return {
33
- fullPath: packageYmlPath,
34
- config: packageConfig,
35
- isNewPackage: true
36
- };
37
- }
38
- /**
39
- * Read existing package.yml (creating a default one if missing) without mutating the version.
40
- * Used by the new save/pack flows where package.yml stays on the user-managed stable line.
41
- */
1
+ import { dirname } from 'path';
2
+ import { normalizePackageName } from '../../utils/package-name.js';
3
+ import { logger } from '../../utils/logger.js';
4
+ import { getPackageFilesDir, getPackageYmlPath, getPackageRootDir } from '../package-context.js';
5
+ import { ensurePackageWithYml } from '../../utils/package-management.js';
6
+ import { DEFAULT_VERSION, LOG_PREFIXES } from './constants.js';
7
+ import { applyWorkspacePackageRename } from './workspace-rename.js';
42
8
  export async function readOrCreateBasePackageYml(cwd, name) {
43
- await ensureLocalOpenPackageStructure(cwd);
44
- const packageDir = getLocalPackageDir(cwd, name);
45
- if (!(await exists(packageDir)) || !(await isDirectory(packageDir))) {
46
- await ensureDir(packageDir);
47
- logger.debug('Created package directory for save', { path: packageDir });
48
- }
49
9
  const normalizedName = normalizePackageName(name);
50
- const packageYmlPath = join(packageDir, FILE_PATTERNS.PACKAGE_YML);
51
- let packageConfig;
52
- let isNewPackage = false;
53
- if (await exists(packageYmlPath)) {
54
- logger.debug('Found existing package.yml for save', { path: packageYmlPath });
55
- try {
56
- packageConfig = await parsePackageYml(packageYmlPath);
57
- console.log(`✓ Found existing package ${packageConfig.name}@${packageConfig.version}`);
58
- }
59
- catch (error) {
60
- throw new ValidationError(ERROR_MESSAGES.PARSE_PACKAGE_YML_FAILED.replace('%s', packageYmlPath).replace('%s', String(error)));
61
- }
10
+ const ensured = await ensurePackageWithYml(cwd, normalizedName, {
11
+ defaultVersion: DEFAULT_VERSION
12
+ });
13
+ if (ensured.isNew) {
14
+ logger.debug('No package.yml found for save, creating', { dir: ensured.packageDir });
15
+ console.log(`${LOG_PREFIXES.CREATED} ${ensured.packageDir}`);
16
+ console.log(`${LOG_PREFIXES.NAME} ${ensured.packageConfig.name}`);
17
+ console.log(`${LOG_PREFIXES.VERSION} ${ensured.packageConfig.version}`);
62
18
  }
63
19
  else {
64
- logger.debug('No package.yml found for save, creating', { dir: packageDir });
65
- const created = await createPackageYmlInDirectory(packageDir, normalizedName);
66
- packageConfig = created.config;
67
- isNewPackage = true;
20
+ logger.debug('Found existing package.yml for save', { path: ensured.packageYmlPath });
21
+ console.log(`✓ Found existing package ${ensured.packageConfig.name}@${ensured.packageConfig.version}`);
68
22
  }
69
- let updatedConfig = packageConfig;
70
- if (packageConfig.name !== normalizedName) {
71
- updatedConfig = { ...packageConfig, name: normalizedName };
72
- await writePackageYml(packageYmlPath, updatedConfig);
23
+ // ensured.packageDir is the content directory (.openpackage/), so package root is parent
24
+ const packageRootDir = dirname(ensured.packageDir);
25
+ return {
26
+ name: ensured.normalizedName,
27
+ version: ensured.packageConfig.version,
28
+ config: ensured.packageConfig,
29
+ packageYmlPath: ensured.packageYmlPath,
30
+ packageRootDir,
31
+ packageFilesDir: ensured.packageDir,
32
+ location: 'nested',
33
+ isCwdPackage: false,
34
+ isNew: ensured.isNew
35
+ };
36
+ }
37
+ export async function loadAndPreparePackage(cwd, packageName, options = {}) {
38
+ const renameTarget = options.renameTo ? normalizePackageName(options.renameTo) : undefined;
39
+ const ctx = await readOrCreateBasePackageYml(cwd, packageName);
40
+ if (!renameTarget || renameTarget === ctx.config.name) {
41
+ return ctx;
73
42
  }
43
+ logger.debug(`Renaming package during workspace load`, {
44
+ from: ctx.config.name,
45
+ to: renameTarget
46
+ });
47
+ await applyWorkspacePackageRename(cwd, ctx, renameTarget);
48
+ const packageRootDir = getPackageRootDir(cwd, 'nested', renameTarget);
49
+ const packageYmlPath = getPackageYmlPath(cwd, 'nested', renameTarget);
50
+ const packageFilesDir = getPackageFilesDir(cwd, 'nested', renameTarget);
74
51
  return {
75
- fullPath: packageYmlPath,
76
- config: updatedConfig,
77
- isNewPackage,
78
- isRootPackage: false
52
+ ...ctx,
53
+ name: renameTarget,
54
+ packageYmlPath,
55
+ packageRootDir,
56
+ packageFilesDir,
57
+ config: { ...ctx.config, name: renameTarget }
79
58
  };
80
59
  }
81
60
  //# sourceMappingURL=package-yml-generator.js.map
@@ -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":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"root-save-candidates.js","sourceRoot":"","sources":["../../../src/core/save/root-save-candidates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAiB,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAE3E,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,UAAkB,EAClB,WAAmB;IAEnB,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,MAAM,aAAa,GAAG,yBAAyB,EAAE,CAAC;IAElD,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAC9D,MAAM,WAAW,GAAG,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACrE,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACzD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;YAE3C,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,OAAO;gBACf,YAAY,EAAE,aAAa,CAAC,SAAS;gBACrC,QAAQ;gBACR,OAAO,EAAE,WAAW;gBACpB,WAAW;gBACX,KAAK;gBACL,WAAW,EAAE,QAAQ;gBACrB,WAAW;gBACX,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE,OAAO;aACzB,CAAC,CAAC;YAEH,MAAM;QACR,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,uCAAuC,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,GAAW,EACX,WAAmB;IAEnB,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAChE,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAC9D,MAAM,WAAW,GAAG,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YAEnD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;YAExE,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,WAAW;gBACnB,YAAY,EAAE,aAAa,CAAC,SAAS;gBACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,WAAW;gBACpB,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,YAAY;gBAC9B,WAAW;gBACX,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE,OAAO;gBACxB,0EAA0E;gBAC1E,iFAAiF;gBACjF,QAAQ,EAAE,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,SAAsB,CAAC,CAAC,CAAC,SAAS;aAC/E,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,8CAA8C,IAAI,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,yBAAyB;IAChC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAEnC,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpB,IAAI,CAAC,KAAK,aAAa,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,aAAa,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"root-save-candidates.js","sourceRoot":"","sources":["../../../src/core/save/root-save-candidates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import { FILE_PATTERNS, PACKAGE_PATHS } from '../../constants/index.js';
2
+ import { findFilesByExtension, getFileMtime } from '../../utils/file-processing.js';
3
+ import { readTextFile } from '../../utils/fs.js';
4
+ import { calculateFileHash } from '../../utils/hash-utils.js';
5
+ import { isAllowedRegistryPath, normalizeRegistryPath } from '../../utils/registry-entry-filter.js';
6
+ import { getRelativePathFromBase } from '../../utils/path-normalization.js';
7
+ import { splitFrontmatter, stripFrontmatter } from '../../utils/markdown-frontmatter.js';
8
+ import { discoverPlatformFilesUnified } from '../discovery/platform-files-discovery.js';
9
+ import { inferPlatformFromWorkspaceFile } from '../platforms.js';
10
+ export async function loadLocalCandidates(packageDir) {
11
+ const entries = await findFilesByExtension(packageDir, [], packageDir);
12
+ const candidates = [];
13
+ for (const entry of entries) {
14
+ 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
+ continue;
24
+ }
25
+ const fullPath = entry.fullPath;
26
+ const content = await readTextFile(fullPath);
27
+ const isMarkdown = normalizedPath.endsWith(FILE_PATTERNS.MD_FILES);
28
+ const split = isMarkdown ? splitFrontmatter(content) : undefined;
29
+ const markdownBody = split ? split.body : content;
30
+ const frontmatter = split?.frontmatter ?? undefined;
31
+ const rawFrontmatter = split?.rawFrontmatter;
32
+ const contentHash = await calculateContentHash(normalizedPath, content);
33
+ const mtime = await getFileMtime(fullPath);
34
+ candidates.push({
35
+ source: 'local',
36
+ registryPath: normalizedPath,
37
+ fullPath,
38
+ content,
39
+ contentHash,
40
+ mtime,
41
+ displayPath: normalizedPath,
42
+ isMarkdown,
43
+ frontmatter,
44
+ rawFrontmatter,
45
+ markdownBody
46
+ });
47
+ }
48
+ return candidates;
49
+ }
50
+ export async function discoverWorkspaceCandidates(cwd, packageName) {
51
+ const discovered = await discoverPlatformFilesUnified(cwd, packageName);
52
+ const candidates = [];
53
+ for (const file of discovered) {
54
+ const normalizedPath = normalizeRegistryPath(file.registryPath);
55
+ if (!isAllowedRegistryPath(normalizedPath)) {
56
+ continue;
57
+ }
58
+ const content = await readTextFile(file.fullPath);
59
+ const isMarkdown = normalizedPath.endsWith(FILE_PATTERNS.MD_FILES);
60
+ const split = isMarkdown ? splitFrontmatter(content) : undefined;
61
+ const markdownBody = split ? split.body : content;
62
+ const frontmatter = split?.frontmatter ?? undefined;
63
+ const rawFrontmatter = split?.rawFrontmatter;
64
+ const contentHash = await calculateContentHash(normalizedPath, content);
65
+ const displayPath = getRelativePathFromBase(file.fullPath, cwd) || normalizedPath;
66
+ const platform = inferPlatformFromWorkspaceFile(file.fullPath, file.sourceDir, normalizedPath);
67
+ candidates.push({
68
+ source: 'workspace',
69
+ registryPath: normalizedPath,
70
+ fullPath: file.fullPath,
71
+ content,
72
+ contentHash,
73
+ mtime: file.mtime,
74
+ displayPath,
75
+ platform,
76
+ isMarkdown,
77
+ frontmatter,
78
+ rawFrontmatter,
79
+ markdownBody
80
+ });
81
+ }
82
+ return candidates;
83
+ }
84
+ async function calculateContentHash(registryPath, content) {
85
+ const isMarkdown = registryPath.endsWith(FILE_PATTERNS.MD_FILES);
86
+ const normalizedContent = isMarkdown ? stripFrontmatter(content) : content;
87
+ return await calculateFileHash(normalizedContent);
88
+ }
89
+ //# sourceMappingURL=save-candidate-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-candidate-loader.js","sourceRoot":"","sources":["../../../src/core/save/save-candidate-loader.ts"],"names":[],"mappings":"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"}