opkg 0.5.0 → 0.6.1

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 (397) hide show
  1. package/README.md +82 -21
  2. package/dist/commands/add.js +11 -276
  3. package/dist/commands/add.js.map +1 -1
  4. package/dist/commands/duplicate.js +5 -2
  5. package/dist/commands/duplicate.js.map +1 -1
  6. package/dist/commands/init.js +76 -145
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/install.js +30 -671
  9. package/dist/commands/install.js.map +1 -1
  10. package/dist/commands/list.js +9 -3
  11. package/dist/commands/list.js.map +1 -1
  12. package/dist/commands/login.js +58 -0
  13. package/dist/commands/login.js.map +1 -0
  14. package/dist/commands/logout.js +28 -0
  15. package/dist/commands/logout.js.map +1 -0
  16. package/dist/commands/pack.js +10 -137
  17. package/dist/commands/pack.js.map +1 -1
  18. package/dist/commands/pull.js +5 -299
  19. package/dist/commands/pull.js.map +1 -1
  20. package/dist/commands/push.js +5 -239
  21. package/dist/commands/push.js.map +1 -1
  22. package/dist/commands/save.js +29 -168
  23. package/dist/commands/save.js.map +1 -1
  24. package/dist/commands/show.js +18 -5
  25. package/dist/commands/show.js.map +1 -1
  26. package/dist/commands/status.js +21 -8
  27. package/dist/commands/status.js.map +1 -1
  28. package/dist/commands/tui.js +61 -0
  29. package/dist/commands/tui.js.map +1 -0
  30. package/dist/commands/uninstall.js +5 -5
  31. package/dist/commands/uninstall.js.map +1 -1
  32. package/dist/constants/index.js +19 -45
  33. package/dist/constants/index.js.map +1 -1
  34. package/dist/constants/workspace.js +9 -0
  35. package/dist/constants/workspace.js.map +1 -0
  36. package/dist/core/add/add-conflict-handler.js +68 -0
  37. package/dist/core/add/add-conflict-handler.js.map +1 -0
  38. package/dist/core/add/add-pipeline.js +137 -0
  39. package/dist/core/add/add-pipeline.js.map +1 -0
  40. package/dist/core/add/package-index-updater.js +66 -36
  41. package/dist/core/add/package-index-updater.js.map +1 -1
  42. package/dist/core/add/platform-path-transformer.js +47 -0
  43. package/dist/core/add/platform-path-transformer.js.map +1 -0
  44. package/dist/core/add/source-collector.js +57 -0
  45. package/dist/core/add/source-collector.js.map +1 -0
  46. package/dist/core/api-keys.js +6 -2
  47. package/dist/core/api-keys.js.map +1 -1
  48. package/dist/core/auth.js +25 -40
  49. package/dist/core/auth.js.map +1 -1
  50. package/dist/core/config.js +11 -3
  51. package/dist/core/config.js.map +1 -1
  52. package/dist/core/dependency-resolver.js +24 -11
  53. package/dist/core/dependency-resolver.js.map +1 -1
  54. package/dist/core/device-auth.js +81 -0
  55. package/dist/core/device-auth.js.map +1 -0
  56. package/dist/core/directory.js +15 -9
  57. package/dist/core/directory.js.map +1 -1
  58. package/dist/core/discovery/file-discovery.js +55 -54
  59. package/dist/core/discovery/file-discovery.js.map +1 -1
  60. package/dist/core/discovery/platform-files-discovery.js +32 -17
  61. package/dist/core/discovery/platform-files-discovery.js.map +1 -1
  62. package/dist/core/install/bulk-install-pipeline.js +200 -0
  63. package/dist/core/install/bulk-install-pipeline.js.map +1 -0
  64. package/dist/core/install/canonical-plan.js +129 -0
  65. package/dist/core/install/canonical-plan.js.map +1 -0
  66. package/dist/core/install/download-keys.js +2 -2
  67. package/dist/core/install/download-keys.js.map +1 -1
  68. package/dist/core/install/dry-run.js +2 -2
  69. package/dist/core/install/dry-run.js.map +1 -1
  70. package/dist/core/install/index.js +3 -0
  71. package/dist/core/install/index.js.map +1 -0
  72. package/dist/core/install/install-errors.js +41 -0
  73. package/dist/core/install/install-errors.js.map +1 -0
  74. package/dist/core/install/install-flow.js +8 -9
  75. package/dist/core/install/install-flow.js.map +1 -1
  76. package/dist/core/install/install-pipeline.js +296 -0
  77. package/dist/core/install/install-pipeline.js.map +1 -0
  78. package/dist/core/install/install-reporting.js +99 -0
  79. package/dist/core/install/install-reporting.js.map +1 -0
  80. package/dist/core/install/platform-resolution.js +6 -6
  81. package/dist/core/install/platform-resolution.js.map +1 -1
  82. package/dist/core/install/remote-flow.js +84 -7
  83. package/dist/core/install/remote-flow.js.map +1 -1
  84. package/dist/core/install/version-selection.js +25 -8
  85. package/dist/core/install/version-selection.js.map +1 -1
  86. package/dist/core/openpackage.js +22 -14
  87. package/dist/core/openpackage.js.map +1 -1
  88. package/dist/core/package-context.js +246 -0
  89. package/dist/core/package-context.js.map +1 -0
  90. package/dist/core/package.js +73 -9
  91. package/dist/core/package.js.map +1 -1
  92. package/dist/core/platforms.js +126 -217
  93. package/dist/core/platforms.js.map +1 -1
  94. package/dist/core/profiles.js +60 -3
  95. package/dist/core/profiles.js.map +1 -1
  96. package/dist/core/pull/pull-errors.js +62 -0
  97. package/dist/core/pull/pull-errors.js.map +1 -0
  98. package/dist/core/pull/pull-options.js +2 -0
  99. package/dist/core/pull/pull-options.js.map +1 -0
  100. package/dist/core/pull/pull-output.js +50 -0
  101. package/dist/core/pull/pull-output.js.map +1 -0
  102. package/dist/core/pull/pull-pipeline.js +141 -0
  103. package/dist/core/pull/pull-pipeline.js.map +1 -0
  104. package/dist/core/pull/pull-strategies.js +103 -0
  105. package/dist/core/pull/pull-strategies.js.map +1 -0
  106. package/dist/core/pull/pull-types.js +2 -0
  107. package/dist/core/pull/pull-types.js.map +1 -0
  108. package/dist/core/push/push-context.js +95 -0
  109. package/dist/core/push/push-context.js.map +1 -0
  110. package/dist/core/push/push-errors.js +133 -0
  111. package/dist/core/push/push-errors.js.map +1 -0
  112. package/dist/core/push/push-output.js +44 -0
  113. package/dist/core/push/push-output.js.map +1 -0
  114. package/dist/core/push/push-pipeline.js +74 -0
  115. package/dist/core/push/push-pipeline.js.map +1 -0
  116. package/dist/core/push/push-single-file.js +56 -0
  117. package/dist/core/push/push-single-file.js.map +1 -0
  118. package/dist/core/push/push-types.js +2 -0
  119. package/dist/core/push/push-types.js.map +1 -0
  120. package/dist/core/push/push-upload.js +68 -0
  121. package/dist/core/push/push-upload.js.map +1 -0
  122. package/dist/core/registry/registry-rename.js +2 -1
  123. package/dist/core/registry/registry-rename.js.map +1 -1
  124. package/dist/core/registry.js +14 -5
  125. package/dist/core/registry.js.map +1 -1
  126. package/dist/core/remote-pull.js +165 -36
  127. package/dist/core/remote-pull.js.map +1 -1
  128. package/dist/core/save/constants.js +4 -0
  129. package/dist/core/save/constants.js.map +1 -1
  130. package/dist/core/save/name-resolution.js +31 -0
  131. package/dist/core/save/name-resolution.js.map +1 -0
  132. package/dist/core/save/package-detection.js +147 -0
  133. package/dist/core/save/package-detection.js.map +1 -0
  134. package/dist/core/save/package-saver.js +82 -43
  135. package/dist/core/save/package-saver.js.map +1 -1
  136. package/dist/core/save/package-yml-generator.js +51 -71
  137. package/dist/core/save/package-yml-generator.js.map +1 -1
  138. package/dist/core/save/root-save-candidates.js.map +1 -1
  139. package/dist/core/save/save-candidate-loader.js +89 -0
  140. package/dist/core/save/save-candidate-loader.js.map +1 -0
  141. package/dist/core/save/save-conflict-resolution.js +72 -410
  142. package/dist/core/save/save-conflict-resolution.js.map +1 -1
  143. package/dist/core/save/save-conflict-resolver.js +277 -0
  144. package/dist/core/save/save-conflict-resolver.js.map +1 -0
  145. package/dist/core/save/save-pipeline.js +162 -0
  146. package/dist/core/save/save-pipeline.js.map +1 -0
  147. package/dist/core/save/save-single-file.js +124 -0
  148. package/dist/core/save/save-single-file.js.map +1 -0
  149. package/dist/core/save/save-types.js +2 -0
  150. package/dist/core/save/save-types.js.map +1 -0
  151. package/dist/core/save/save-yml-resolution.js +77 -39
  152. package/dist/core/save/save-yml-resolution.js.map +1 -1
  153. package/dist/core/save/workspace-rename.js +6 -6
  154. package/dist/core/save/workspace-rename.js.map +1 -1
  155. package/dist/core/scoping/package-scoping.js +14 -2
  156. package/dist/core/scoping/package-scoping.js.map +1 -1
  157. package/dist/core/status/status-file-discovery.js +12 -30
  158. package/dist/core/status/status-file-discovery.js.map +1 -1
  159. package/dist/core/sync/platform-sync.js +7 -4
  160. package/dist/core/sync/platform-sync.js.map +1 -1
  161. package/dist/core/sync/root-files-sync.js +59 -1
  162. package/dist/core/sync/root-files-sync.js.map +1 -1
  163. package/dist/core/token-store.js +73 -0
  164. package/dist/core/token-store.js.map +1 -0
  165. package/dist/core/uninstall/uninstall-file-discovery.js +1 -2
  166. package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
  167. package/dist/index.js +4 -0
  168. package/dist/index.js.map +1 -1
  169. package/dist/tui/app.js +95 -0
  170. package/dist/tui/app.js.map +1 -0
  171. package/dist/tui/components/package-list.js +73 -0
  172. package/dist/tui/components/package-list.js.map +1 -0
  173. package/dist/tui/controller.js +365 -0
  174. package/dist/tui/controller.js.map +1 -0
  175. package/dist/tui/index.js +12 -0
  176. package/dist/tui/index.js.map +1 -0
  177. package/dist/tui/services/file-index.js +64 -0
  178. package/dist/tui/services/file-index.js.map +1 -0
  179. package/dist/tui/services/packages.js +18 -0
  180. package/dist/tui/services/packages.js.map +1 -0
  181. package/dist/tui/services/save.js +21 -0
  182. package/dist/tui/services/save.js.map +1 -0
  183. package/dist/tui/state/app-state.js +15 -0
  184. package/dist/tui/state/app-state.js.map +1 -0
  185. package/dist/tui/state.js +17 -0
  186. package/dist/tui/state.js.map +1 -0
  187. package/dist/tui/types.js +2 -0
  188. package/dist/tui/types.js.map +1 -0
  189. package/dist/tui/views/add-file-modal.js +129 -0
  190. package/dist/tui/views/add-file-modal.js.map +1 -0
  191. package/dist/tui/views/file-preview.js +44 -0
  192. package/dist/tui/views/file-preview.js.map +1 -0
  193. package/dist/tui/views/list-packages.js +73 -0
  194. package/dist/tui/views/list-packages.js.map +1 -0
  195. package/dist/tui/views/main-menu.js +29 -0
  196. package/dist/tui/views/main-menu.js.map +1 -0
  197. package/dist/tui/views/manage-view.js +81 -0
  198. package/dist/tui/views/manage-view.js.map +1 -0
  199. package/dist/tui/views/package-hub.js +120 -0
  200. package/dist/tui/views/package-hub.js.map +1 -0
  201. package/dist/tui/views/placeholder.js +24 -0
  202. package/dist/tui/views/placeholder.js.map +1 -0
  203. package/dist/types/index.js.map +1 -1
  204. package/dist/utils/bun-bootstrap.js +72 -0
  205. package/dist/utils/bun-bootstrap.js.map +1 -0
  206. package/dist/utils/file-processing.js +5 -58
  207. package/dist/utils/file-processing.js.map +1 -1
  208. package/dist/utils/formatters.js +3 -1
  209. package/dist/utils/formatters.js.map +1 -1
  210. package/dist/utils/http-client.js +27 -5
  211. package/dist/utils/http-client.js.map +1 -1
  212. package/dist/utils/index-based-installer.js +40 -35
  213. package/dist/utils/index-based-installer.js.map +1 -1
  214. package/dist/utils/install-file-discovery.js +18 -24
  215. package/dist/utils/install-file-discovery.js.map +1 -1
  216. package/dist/utils/install-orchestrator.js +21 -21
  217. package/dist/utils/install-orchestrator.js.map +1 -1
  218. package/dist/utils/jsonc.js +44 -0
  219. package/dist/utils/jsonc.js.map +1 -0
  220. package/dist/utils/manifest-paths.js +27 -0
  221. package/dist/utils/manifest-paths.js.map +1 -0
  222. package/dist/utils/package-copy.js +199 -0
  223. package/dist/utils/package-copy.js.map +1 -0
  224. package/dist/utils/package-filters.js +125 -0
  225. package/dist/utils/package-filters.js.map +1 -0
  226. package/dist/utils/package-index-yml.js +15 -10
  227. package/dist/utils/package-index-yml.js.map +1 -1
  228. package/dist/utils/package-installation.js +4 -113
  229. package/dist/utils/package-installation.js.map +1 -1
  230. package/dist/utils/package-local-files.js +2 -35
  231. package/dist/utils/package-local-files.js.map +1 -1
  232. package/dist/utils/package-management.js +191 -75
  233. package/dist/utils/package-management.js.map +1 -1
  234. package/dist/utils/package-merge.js +48 -0
  235. package/dist/utils/package-merge.js.map +1 -0
  236. package/dist/utils/package-name.js +29 -0
  237. package/dist/utils/package-name.js.map +1 -1
  238. package/dist/utils/package-versioning.js +16 -4
  239. package/dist/utils/package-versioning.js.map +1 -1
  240. package/dist/utils/package-yml.js +41 -12
  241. package/dist/utils/package-yml.js.map +1 -1
  242. package/dist/utils/path-normalization.js +8 -53
  243. package/dist/utils/path-normalization.js.map +1 -1
  244. package/dist/utils/paths.js +17 -9
  245. package/dist/utils/paths.js.map +1 -1
  246. package/dist/utils/platform-file.js +16 -59
  247. package/dist/utils/platform-file.js.map +1 -1
  248. package/dist/utils/platform-mapper.js +29 -41
  249. package/dist/utils/platform-mapper.js.map +1 -1
  250. package/dist/utils/platform-specific-paths.js.map +1 -1
  251. package/dist/utils/platform-utils.js +28 -139
  252. package/dist/utils/platform-utils.js.map +1 -1
  253. package/dist/utils/platform-yaml-merge.js +13 -6
  254. package/dist/utils/platform-yaml-merge.js.map +1 -1
  255. package/dist/utils/prompts.js +0 -31
  256. package/dist/utils/prompts.js.map +1 -1
  257. package/dist/utils/registry-entry-filter.js +38 -24
  258. package/dist/utils/registry-entry-filter.js.map +1 -1
  259. package/dist/utils/registry-paths.js +48 -0
  260. package/dist/utils/registry-paths.js.map +1 -0
  261. package/dist/utils/root-file-installer.js +19 -0
  262. package/dist/utils/root-file-installer.js.map +1 -1
  263. package/dist/utils/root-file-registry.js.map +1 -1
  264. package/dist/utils/tarball.js +6 -2
  265. package/dist/utils/tarball.js.map +1 -1
  266. package/dist/utils/version-ranges.js +11 -8
  267. package/dist/utils/version-ranges.js.map +1 -1
  268. package/package.json +3 -2
  269. package/platforms.jsonc +178 -0
  270. package/specs/auth/auth-device-flow.md +70 -0
  271. package/specs/install/install-behavior.md +30 -0
  272. package/specs/install/package-yml-canonical.md +21 -1
  273. package/specs/install/version-resolution.md +9 -7
  274. package/specs/login/login-device-flow.md +70 -0
  275. package/specs/package/README.md +60 -0
  276. package/specs/package/nested-packages-and-parent-packages.md +79 -0
  277. package/specs/package/package-index-yml.md +171 -0
  278. package/specs/package/package-root-layout.md +78 -0
  279. package/specs/package/registry-payload-and-copy.md +77 -0
  280. package/specs/package/universal-content.md +144 -0
  281. package/specs/platforms.md +193 -0
  282. package/specs/push/push-behavior.md +38 -10
  283. package/specs/push/push-errors-and-hints.md +19 -6
  284. package/specs/push/push-remote-upload.md +3 -0
  285. package/specs/push/push-scoping.md +14 -22
  286. package/specs/push/push-version-selection.md +18 -16
  287. package/specs/save/README.md +40 -0
  288. package/specs/save/save-conflict-resolution.md +146 -0
  289. package/specs/save/save-file-discovery.md +101 -0
  290. package/specs/save/save-frontmatter-overrides.md +81 -0
  291. package/specs/save/save-modes-inputs.md +55 -0
  292. package/specs/save/save-naming-scoping.md +93 -0
  293. package/specs/save/save-package-detection.md +60 -0
  294. package/specs/save/save-registry-sync.md +126 -0
  295. package/specs/save-pack.md +1 -0
  296. package/dist/commands/release.js +0 -33
  297. package/dist/commands/release.js.map +0 -1
  298. package/dist/commands/tag.js +0 -311
  299. package/dist/commands/tag.js.map +0 -1
  300. package/dist/commands/update.js +0 -30
  301. package/dist/commands/update.js.map +0 -1
  302. package/dist/core/add/formula-index-updater.js +0 -290
  303. package/dist/core/add/formula-index-updater.js.map +0 -1
  304. package/dist/core/discovery/ai-files-discovery.js +0 -2
  305. package/dist/core/discovery/ai-files-discovery.js.map +0 -1
  306. package/dist/core/discovery/formula-files-discovery.js +0 -14
  307. package/dist/core/discovery/formula-files-discovery.js.map +0 -1
  308. package/dist/core/discovery/index-files-discovery.js +0 -91
  309. package/dist/core/discovery/index-files-discovery.js.map +0 -1
  310. package/dist/core/discovery/md-files-discovery.js +0 -82
  311. package/dist/core/discovery/md-files-discovery.js.map +0 -1
  312. package/dist/core/discovery/package-files-discovery.js +0 -14
  313. package/dist/core/discovery/package-files-discovery.js.map +0 -1
  314. package/dist/core/discovery/platform-discovery.js +0 -84
  315. package/dist/core/discovery/platform-discovery.js.map +0 -1
  316. package/dist/core/discovery/root-files-discovery.js +0 -2
  317. package/dist/core/discovery/root-files-discovery.js.map +0 -1
  318. package/dist/core/formula.js +0 -170
  319. package/dist/core/formula.js.map +0 -1
  320. package/dist/core/git-registry.js +0 -46
  321. package/dist/core/git-registry.js.map +0 -1
  322. package/dist/core/groundzero.js +0 -277
  323. package/dist/core/groundzero.js.map +0 -1
  324. package/dist/core/install/scenario.js +0 -11
  325. package/dist/core/install/scenario.js.map +0 -1
  326. package/dist/core/package-sync.js +0 -219
  327. package/dist/core/package-sync.js.map +0 -1
  328. package/dist/core/save/formula-file-generator.js +0 -167
  329. package/dist/core/save/formula-file-generator.js.map +0 -1
  330. package/dist/core/save/formula-saver.js +0 -52
  331. package/dist/core/save/formula-saver.js.map +0 -1
  332. package/dist/core/save/formula-yml-generator.js +0 -89
  333. package/dist/core/save/formula-yml-generator.js.map +0 -1
  334. package/dist/core/save/formula-yml-versioning.js +0 -108
  335. package/dist/core/save/formula-yml-versioning.js.map +0 -1
  336. package/dist/core/save/generic-file-sync.js +0 -38
  337. package/dist/core/save/generic-file-sync.js.map +0 -1
  338. package/dist/core/save/md-files-sync.js +0 -33
  339. package/dist/core/save/md-files-sync.js.map +0 -1
  340. package/dist/core/save/package-yml-versioning.js +0 -108
  341. package/dist/core/save/package-yml-versioning.js.map +0 -1
  342. package/dist/core/save/platform-sync.js +0 -95
  343. package/dist/core/save/platform-sync.js.map +0 -1
  344. package/dist/core/save/root-files-sync.js +0 -140
  345. package/dist/core/save/root-files-sync.js.map +0 -1
  346. package/dist/core/save/save-candidate-types.js +0 -2
  347. package/dist/core/save/save-candidate-types.js.map +0 -1
  348. package/dist/core/save/save-conflict-types.js +0 -2
  349. package/dist/core/save/save-conflict-types.js.map +0 -1
  350. package/dist/core/save/save-file-discovery.js +0 -5
  351. package/dist/core/save/save-file-discovery.js.map +0 -1
  352. package/dist/core/status-file-discovery.js +0 -175
  353. package/dist/core/status-file-discovery.js.map +0 -1
  354. package/dist/utils/discovery/file-processing.js +0 -156
  355. package/dist/utils/discovery/file-processing.js.map +0 -1
  356. package/dist/utils/discovery/formula-discovery.js +0 -211
  357. package/dist/utils/discovery/formula-discovery.js.map +0 -1
  358. package/dist/utils/discovery/platform-discovery.js +0 -2
  359. package/dist/utils/discovery/platform-discovery.js.map +0 -1
  360. package/dist/utils/formula-discovery.js +0 -102
  361. package/dist/utils/formula-discovery.js.map +0 -1
  362. package/dist/utils/formula-index-yml.js +0 -122
  363. package/dist/utils/formula-index-yml.js.map +0 -1
  364. package/dist/utils/formula-installation.js +0 -110
  365. package/dist/utils/formula-installation.js.map +0 -1
  366. package/dist/utils/formula-local-files.js +0 -38
  367. package/dist/utils/formula-local-files.js.map +0 -1
  368. package/dist/utils/formula-management.js +0 -191
  369. package/dist/utils/formula-management.js.map +0 -1
  370. package/dist/utils/formula-name.js +0 -97
  371. package/dist/utils/formula-name.js.map +0 -1
  372. package/dist/utils/formula-versioning.js +0 -109
  373. package/dist/utils/formula-versioning.js.map +0 -1
  374. package/dist/utils/formula-yml.js +0 -82
  375. package/dist/utils/formula-yml.js.map +0 -1
  376. package/dist/utils/git.js +0 -54
  377. package/dist/utils/git.js.map +0 -1
  378. package/dist/utils/id-based-discovery.js +0 -126
  379. package/dist/utils/id-based-discovery.js.map +0 -1
  380. package/dist/utils/id-based-installer.js +0 -249
  381. package/dist/utils/id-based-installer.js.map +0 -1
  382. package/dist/utils/index-yml-based-installer.js +0 -375
  383. package/dist/utils/index-yml-based-installer.js.map +0 -1
  384. package/dist/utils/index-yml.js +0 -124
  385. package/dist/utils/index-yml.js.map +0 -1
  386. package/dist/utils/md-frontmatter.js +0 -3
  387. package/dist/utils/md-frontmatter.js.map +0 -1
  388. package/dist/utils/package-link-yml.js +0 -92
  389. package/dist/utils/package-link-yml.js.map +0 -1
  390. package/dist/utils/platform-discovery.js +0 -2
  391. package/dist/utils/platform-discovery.js.map +0 -1
  392. package/dist/utils/platform-frontmatter-split.js +0 -15
  393. package/dist/utils/platform-frontmatter-split.js.map +0 -1
  394. package/dist/utils/timestamp-encoder.js +0 -13
  395. package/dist/utils/timestamp-encoder.js.map +0 -1
  396. package/dist/utils/wip-versioning.js +0 -24
  397. package/dist/utils/wip-versioning.js.map +0 -1
@@ -1,277 +0,0 @@
1
- import { join } from 'path';
2
- import { parseFormulaYml } from '../utils/formula-yml.js';
3
- import { exists, isDirectory, listDirectories } from '../utils/fs.js';
4
- import { logger } from '../utils/logger.js';
5
- import { FILE_PATTERNS, PLATFORM_DIRS } from '../constants/index.js';
6
- import { getLocalFormulaYmlPath, getLocalFormulasDir } from '../utils/paths.js';
7
- import { findFilesByExtension, findDirectoriesContainingFile } from '../utils/file-processing.js';
8
- import { getDetectedPlatforms, getPlatformDefinition } from './platforms.js';
9
- import { areFormulaNamesEquivalent } from '../utils/formula-name.js';
10
- /**
11
- * Find formula config file (.groundzero/formula.yml or formula.yml) in a directory
12
- */
13
- async function findFormulaConfigFile(directoryPath) {
14
- const groundzeroFormulaYmlPath = getLocalFormulaYmlPath(directoryPath);
15
- const formulaYmlPath = join(directoryPath, FILE_PATTERNS.FORMULA_YML);
16
- if (await exists(groundzeroFormulaYmlPath)) {
17
- return groundzeroFormulaYmlPath;
18
- }
19
- else if (await exists(formulaYmlPath)) {
20
- return formulaYmlPath;
21
- }
22
- return null;
23
- }
24
- /**
25
- * Get the version of an installed formula by formula name
26
- */
27
- export async function getInstalledFormulaVersion(formulaName, targetDir) {
28
- const groundzeroPath = join(targetDir, PLATFORM_DIRS.AI);
29
- const formulaGroundzeroPath = join(groundzeroPath, formulaName);
30
- if (!(await exists(formulaGroundzeroPath))) {
31
- return null;
32
- }
33
- const configPath = await findFormulaConfigFile(formulaGroundzeroPath);
34
- if (!configPath) {
35
- return null;
36
- }
37
- try {
38
- const config = await parseFormulaYml(configPath);
39
- return config.version;
40
- }
41
- catch (error) {
42
- logger.warn(`Failed to parse formula config for ${formulaName}: ${error}`);
43
- return null;
44
- }
45
- }
46
- /**
47
- * Find formula directory in ai by matching formula name
48
- */
49
- export async function findFormulaDirectory(groundzeroPath, formulaName) {
50
- if (!(await exists(groundzeroPath)) || !(await isDirectory(groundzeroPath))) {
51
- return null;
52
- }
53
- try {
54
- const subdirectories = await listDirectories(groundzeroPath);
55
- for (const subdir of subdirectories) {
56
- const subdirPath = join(groundzeroPath, subdir);
57
- const configPath = await findFormulaConfigFile(subdirPath);
58
- if (configPath) {
59
- try {
60
- const formulaConfig = await parseFormulaYml(configPath);
61
- if (areFormulaNamesEquivalent(formulaConfig.name, formulaName)) {
62
- return subdirPath;
63
- }
64
- }
65
- catch (error) {
66
- logger.warn(`Failed to parse formula file ${configPath}: ${error}`);
67
- }
68
- }
69
- }
70
- return null;
71
- }
72
- catch (error) {
73
- logger.error(`Failed to search ai directory: ${error}`);
74
- return null;
75
- }
76
- }
77
- /**
78
- * Scan groundzero directory for all available formulas
79
- */
80
- export async function scanGroundzeroFormulas(groundzeroPath) {
81
- const formulas = new Map();
82
- if (!(await exists(groundzeroPath)) || !(await isDirectory(groundzeroPath))) {
83
- logger.debug('AI directory not found or not a directory', { groundzeroPath });
84
- return formulas;
85
- }
86
- try {
87
- // Find all formula.yml files recursively under the formulas directory
88
- const formulasDir = getLocalFormulasDir(groundzeroPath);
89
- if (!(await exists(formulasDir))) {
90
- return formulas;
91
- }
92
- const formulaDirs = await findDirectoriesContainingFile(formulasDir, FILE_PATTERNS.FORMULA_YML, async (filePath) => {
93
- try {
94
- return await parseFormulaYml(filePath);
95
- }
96
- catch (error) {
97
- logger.warn(`Failed to parse formula file ${filePath}: ${error}`);
98
- return null;
99
- }
100
- });
101
- for (const { dirPath, parsedContent } of formulaDirs) {
102
- if (parsedContent) {
103
- const formulaConfig = parsedContent;
104
- formulas.set(formulaConfig.name, {
105
- name: formulaConfig.name,
106
- version: formulaConfig.version,
107
- description: formulaConfig.description,
108
- formulas: formulaConfig.formulas || [],
109
- 'dev-formulas': formulaConfig['dev-formulas'] || [],
110
- path: dirPath
111
- });
112
- }
113
- }
114
- }
115
- catch (error) {
116
- logger.error(`Failed to scan ai directory: ${error}`);
117
- }
118
- return formulas;
119
- }
120
- /**
121
- * Gather version constraints from the main and nested formula.yml files
122
- */
123
- export async function gatherGlobalVersionConstraints(cwd, includeResolutions = true) {
124
- const constraints = new Map();
125
- const addConstraint = (name, range) => {
126
- if (!name || !range) {
127
- return;
128
- }
129
- const trimmedName = name.trim();
130
- const trimmedRange = range.trim();
131
- if (!trimmedName || !trimmedRange) {
132
- return;
133
- }
134
- if (!constraints.has(trimmedName)) {
135
- constraints.set(trimmedName, new Set());
136
- }
137
- constraints.get(trimmedName).add(trimmedRange);
138
- };
139
- const collectFromConfig = (config) => {
140
- if (!config) {
141
- return;
142
- }
143
- config.formulas?.forEach(dep => addConstraint(dep.name, dep.version));
144
- config['dev-formulas']?.forEach(dep => addConstraint(dep.name, dep.version));
145
- };
146
- // Collect from main .groundzero/formula.yml if present
147
- const mainFormulaPath = getLocalFormulaYmlPath(cwd);
148
- if (await exists(mainFormulaPath)) {
149
- try {
150
- const mainConfig = await parseFormulaYml(mainFormulaPath);
151
- collectFromConfig(mainConfig);
152
- }
153
- catch (error) {
154
- logger.debug(`Failed to parse main formula.yml for constraints: ${error}`);
155
- }
156
- }
157
- // Collect from each formula under .groundzero/formulas
158
- const formulasDir = getLocalFormulasDir(cwd);
159
- if (await exists(formulasDir) && await isDirectory(formulasDir)) {
160
- try {
161
- const formulaDirs = await findDirectoriesContainingFile(formulasDir, FILE_PATTERNS.FORMULA_YML, async (filePath) => {
162
- try {
163
- return await parseFormulaYml(filePath);
164
- }
165
- catch (error) {
166
- logger.debug(`Failed to parse formula.yml at ${filePath}: ${error}`);
167
- return null;
168
- }
169
- });
170
- for (const { parsedContent } of formulaDirs) {
171
- collectFromConfig(parsedContent);
172
- }
173
- }
174
- catch (error) {
175
- logger.debug(`Failed to enumerate formulas directory for constraints: ${error}`);
176
- }
177
- }
178
- const result = new Map();
179
- for (const [name, ranges] of constraints) {
180
- result.set(name, Array.from(ranges));
181
- }
182
- return result;
183
- }
184
- /**
185
- * Gather version constraints only from the main .groundzero/formula.yml
186
- * Used to treat root-declared versions as authoritative overrides
187
- */
188
- export async function gatherRootVersionConstraints(cwd) {
189
- const result = new Map();
190
- const addConstraint = (name, range) => {
191
- if (!name || !range)
192
- return;
193
- const trimmedName = name.trim();
194
- const trimmedRange = range.trim();
195
- if (!trimmedName || !trimmedRange)
196
- return;
197
- if (!result.has(trimmedName))
198
- result.set(trimmedName, []);
199
- const arr = result.get(trimmedName);
200
- if (!arr.includes(trimmedRange))
201
- arr.push(trimmedRange);
202
- };
203
- const mainFormulaPath = getLocalFormulaYmlPath(cwd);
204
- if (await exists(mainFormulaPath)) {
205
- try {
206
- const mainConfig = await parseFormulaYml(mainFormulaPath);
207
- mainConfig.formulas?.forEach(dep => addConstraint(dep.name, dep.version));
208
- mainConfig['dev-formulas']?.forEach(dep => addConstraint(dep.name, dep.version));
209
- }
210
- catch (error) {
211
- logger.debug(`Failed to parse main formula.yml for root constraints: ${error}`);
212
- }
213
- }
214
- return result;
215
- }
216
- /**
217
- * Get formula configuration
218
- */
219
- export async function getGroundzeroFormulaConfig(groundzeroPath, formulaName) {
220
- const formulaPath = await findFormulaDirectory(groundzeroPath, formulaName);
221
- if (!formulaPath) {
222
- return null;
223
- }
224
- const configPath = await findFormulaConfigFile(formulaPath);
225
- if (!configPath) {
226
- return null;
227
- }
228
- try {
229
- return await parseFormulaYml(configPath);
230
- }
231
- catch (error) {
232
- logger.warn(`Failed to parse formula config for ${formulaName}: ${error}`);
233
- return null;
234
- }
235
- }
236
- /**
237
- * Check for existing installed formula by searching markdown files in ai, .claude, and .cursor directories
238
- */
239
- export async function checkExistingFormulaInMarkdownFiles(cwd, formulaName) {
240
- // Build search targets: ai directory + all detected platform subdirectories
241
- const targets = [];
242
- // Always include AI directory
243
- targets.push({
244
- dir: join(cwd, PLATFORM_DIRS.AI),
245
- exts: [FILE_PATTERNS.MD_FILES],
246
- label: PLATFORM_DIRS.AI
247
- });
248
- // Add detected platforms' subdirectories (rules/commands/agents, etc.)
249
- try {
250
- const platforms = await getDetectedPlatforms(cwd);
251
- for (const platform of platforms) {
252
- const def = getPlatformDefinition(platform);
253
- for (const [_, subdirDef] of Object.entries(def.subdirs)) {
254
- const dirPath = join(cwd, def.rootDir, subdirDef.path);
255
- targets.push({ dir: dirPath, exts: subdirDef.readExts, label: def.id });
256
- }
257
- }
258
- }
259
- catch (error) {
260
- logger.debug(`Failed to build platform search targets: ${error}`);
261
- }
262
- logger.debug(`Checking for existing formula '${formulaName}' across ${targets.length} locations`);
263
- // Search each target directory for files with supported extensions
264
- for (const target of targets) {
265
- try {
266
- const files = await findFilesByExtension(target.dir, target.exts);
267
- for (const file of files) {
268
- // Frontmatter support removed - cannot determine formula ownership
269
- }
270
- }
271
- catch (dirErr) {
272
- logger.debug(`Failed to search directory ${target.dir}: ${dirErr}`);
273
- }
274
- }
275
- return { found: false };
276
- }
277
- //# sourceMappingURL=groundzero.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"groundzero.js","sourceRoot":"","sources":["../../src/core/groundzero.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Determine the install scenario based on local availability and force remote flag
3
- */
4
- export function determineInstallScenario(mainAvailable, forceRemote) {
5
- return forceRemote
6
- ? 'force-remote'
7
- : mainAvailable
8
- ? 'local-primary'
9
- : 'remote-primary';
10
- }
11
- //# sourceMappingURL=scenario.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scenario.js","sourceRoot":"","sources":["../../../src/core/install/scenario.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,aAAsB,EAAE,WAAoB;IACnF,OAAO,WAAW;QAChB,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,aAAa;YACb,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,gBAAgB,CAAC;AACzB,CAAC"}
@@ -1,219 +0,0 @@
1
- import * as path from 'path';
2
- import { exists, ensureDir } from '../utils/fs.js';
3
- import { ensureRegistryRepo, ensureWorkspacePackagesRoot, getRegistryRepoPath, getWorkspaceBranchName, getWorkspacePackagePath } from './git-registry.js';
4
- import { runGitCommand, GitCommandError } from '../utils/git.js';
5
- import { logger } from '../utils/logger.js';
6
- import { parsePackageYml } from '../utils/package-yml.js';
7
- const PACKAGE_YML = 'package.yml';
8
- export async function installPackage(options) {
9
- const { cwd, packageName, version } = options;
10
- const workspaceRoot = await ensureWorkspacePackagesRoot(cwd);
11
- await ensureDir(workspaceRoot);
12
- const registryRepoPath = await ensureRegistryRepo(packageName);
13
- const workspacePath = getWorkspacePackagePath(cwd, packageName);
14
- const workspaceBranch = getWorkspaceBranchName(cwd);
15
- if (!(await exists(workspacePath))) {
16
- await runGitCommand(['clone', registryRepoPath, workspacePath]);
17
- }
18
- await ensureCloneOrigin(workspacePath, registryRepoPath);
19
- await runGitCommand(['fetch', 'origin', '--tags', '--prune'], { cwd: workspacePath });
20
- const startPoint = version ? formatVersionTag(version) : 'origin/main';
21
- const branchExists = await refExists(workspacePath, workspaceBranch);
22
- if (!branchExists) {
23
- await runGitCommand(['checkout', '-b', workspaceBranch, startPoint], { cwd: workspacePath });
24
- }
25
- else {
26
- await runGitCommand(['checkout', workspaceBranch], { cwd: workspacePath });
27
- }
28
- await runGitCommand(['branch', '--set-upstream-to', 'origin/main', workspaceBranch], { cwd: workspacePath });
29
- logger.info(`Workspace ready for ${packageName}`, {
30
- workspacePath,
31
- branch: workspaceBranch,
32
- version: version ?? 'main'
33
- });
34
- return { workspacePath, registryRepoPath, branch: workspaceBranch };
35
- }
36
- export async function updatePackage(options) {
37
- const { cwd, packageName, ffOnly } = options;
38
- const workspacePath = await ensureWorkspaceCloneExists(cwd, packageName);
39
- const workspaceBranch = getWorkspaceBranchName(cwd);
40
- const registryRepoPath = getRegistryRepoPath(packageName);
41
- await runGitCommand(['checkout', workspaceBranch], { cwd: workspacePath });
42
- await runGitCommand(['fetch', 'origin', '--tags', '--prune'], { cwd: workspacePath });
43
- const hasRemoteMain = await refExists(workspacePath, 'origin/main');
44
- if (hasRemoteMain) {
45
- const mergeArgs = ['merge'];
46
- if (ffOnly) {
47
- mergeArgs.push('--ff-only');
48
- }
49
- mergeArgs.push('origin/main');
50
- await runGitCommand(mergeArgs, { cwd: workspacePath });
51
- }
52
- else {
53
- logger.info('Registry main branch not found; skipping merge until first save.', { packageName });
54
- }
55
- return { workspacePath, registryRepoPath, branch: workspaceBranch };
56
- }
57
- export async function savePackage(options) {
58
- const { cwd, packageName, message, allowMerge } = options;
59
- const workspaceBranch = getWorkspaceBranchName(cwd);
60
- const registryRepoPath = await ensureRegistryRepo(packageName);
61
- const workspacePath = await ensureWorkspaceInitialized({
62
- cwd,
63
- packageName,
64
- registryRepoPath,
65
- workspaceBranch
66
- });
67
- await runGitCommand(['checkout', workspaceBranch], { cwd: workspacePath });
68
- const status = await runGitCommand(['status', '--porcelain'], { cwd: workspacePath });
69
- if (status.stdout) {
70
- await runGitCommand(['add', '-A'], { cwd: workspacePath });
71
- const commitMessage = message ?? `opkg save from ${path.basename(cwd)}`;
72
- await runGitCommand(['commit', '-m', commitMessage], { cwd: workspacePath });
73
- }
74
- else {
75
- logger.info('No local changes to commit before save.', { packageName });
76
- }
77
- const hasCommits = await refExists(workspacePath, 'HEAD');
78
- if (!hasCommits) {
79
- logger.info('Workspace repository has no commits yet; skipping push.', { packageName });
80
- return { workspacePath, registryRepoPath, branch: workspaceBranch };
81
- }
82
- await runGitCommand(['fetch', 'origin', '--tags', '--prune'], { cwd: workspacePath });
83
- const hasRemoteMain = await refExists(workspacePath, 'origin/main');
84
- if (hasRemoteMain) {
85
- const mergeArgs = ['merge'];
86
- if (!allowMerge) {
87
- mergeArgs.push('--ff-only');
88
- }
89
- mergeArgs.push('origin/main');
90
- await runGitCommand(mergeArgs, { cwd: workspacePath });
91
- }
92
- else {
93
- logger.info('Initializing registry main branch with first save.', { packageName });
94
- }
95
- await runGitCommand(['push', 'origin', `${workspaceBranch}:main`], { cwd: workspacePath });
96
- return { workspacePath, registryRepoPath, branch: workspaceBranch };
97
- }
98
- export async function releasePackage(options) {
99
- const { cwd, packageName, version, message, allowMerge } = options;
100
- const saveResult = await savePackage({ cwd, packageName, message, allowMerge });
101
- const { workspacePath } = saveResult;
102
- const resolvedVersion = version ?? (await readWorkspacePackageVersion(workspacePath));
103
- const tagName = formatVersionTag(resolvedVersion);
104
- const remoteTagExists = await refExists(workspacePath, `refs/tags/${tagName}`);
105
- if (remoteTagExists) {
106
- throw new Error(`Tag ${tagName} already exists for ${packageName}`);
107
- }
108
- await runGitCommand(['tag', '-a', tagName, '-m', `Release ${tagName}`], { cwd: workspacePath });
109
- await runGitCommand(['push', 'origin', tagName], { cwd: workspacePath });
110
- return { ...saveResult, tag: tagName };
111
- }
112
- async function ensureWorkspaceInitialized(options) {
113
- const { cwd, packageName, registryRepoPath, workspaceBranch } = options;
114
- await ensureWorkspacePackagesRoot(cwd);
115
- const workspacePath = getWorkspacePackagePath(cwd, packageName);
116
- await ensureDir(workspacePath);
117
- const repoExists = await isGitRepository(workspacePath);
118
- if (!repoExists) {
119
- await runGitCommand(['init'], { cwd: workspacePath });
120
- }
121
- await checkoutWorkspaceBranch(workspacePath, workspaceBranch);
122
- await ensureCloneOrigin(workspacePath, registryRepoPath);
123
- return workspacePath;
124
- }
125
- async function ensureCloneOrigin(workspacePath, registryRepoPath) {
126
- const currentRemote = await getRemoteOrigin(workspacePath);
127
- if (!currentRemote) {
128
- await runGitCommand(['remote', 'add', 'origin', registryRepoPath], { cwd: workspacePath });
129
- return;
130
- }
131
- const normalizedCurrent = path.resolve(currentRemote);
132
- const normalizedTarget = path.resolve(registryRepoPath);
133
- if (normalizedCurrent !== normalizedTarget) {
134
- throw new Error(`Workspace at ${workspacePath} is linked to a different registry repo (${currentRemote}). Remove it or update manually.`);
135
- }
136
- }
137
- async function ensureWorkspaceCloneExists(cwd, packageName) {
138
- const workspacePath = getWorkspacePackagePath(cwd, packageName);
139
- if (!(await exists(workspacePath))) {
140
- throw new Error(`Package '${packageName}' is not installed in this workspace. Run 'opkg install ${packageName}' first.`);
141
- }
142
- await ensureGitRepository(workspacePath);
143
- return workspacePath;
144
- }
145
- async function ensureGitRepository(repoPath) {
146
- try {
147
- await runGitCommand(['rev-parse', '--is-inside-work-tree'], { cwd: repoPath });
148
- }
149
- catch (error) {
150
- throw new Error(`Directory ${repoPath} is not a Git repository. Reinstall the package or fix the workspace.`);
151
- }
152
- }
153
- async function isGitRepository(repoPath) {
154
- try {
155
- await runGitCommand(['rev-parse', '--is-inside-work-tree'], { cwd: repoPath });
156
- return true;
157
- }
158
- catch (error) {
159
- if (error instanceof GitCommandError) {
160
- return false;
161
- }
162
- throw error;
163
- }
164
- }
165
- async function refExists(repoPath, ref) {
166
- try {
167
- await runGitCommand(['rev-parse', '--verify', ref], { cwd: repoPath });
168
- return true;
169
- }
170
- catch (error) {
171
- if (error instanceof GitCommandError) {
172
- return false;
173
- }
174
- throw error;
175
- }
176
- }
177
- async function getRemoteOrigin(repoPath) {
178
- try {
179
- const result = await runGitCommand(['config', '--get', 'remote.origin.url'], {
180
- cwd: repoPath,
181
- allowExitCodes: [0, 1]
182
- });
183
- return result.exitCode === 0 ? result.stdout : null;
184
- }
185
- catch (error) {
186
- if (error instanceof GitCommandError) {
187
- return null;
188
- }
189
- throw error;
190
- }
191
- }
192
- async function checkoutWorkspaceBranch(repoPath, branch) {
193
- const branchExists = await refExists(repoPath, branch);
194
- if (branchExists) {
195
- await runGitCommand(['checkout', branch], { cwd: repoPath });
196
- return;
197
- }
198
- const hasHead = await refExists(repoPath, 'HEAD');
199
- if (!hasHead) {
200
- await runGitCommand(['checkout', '--orphan', branch], { cwd: repoPath });
201
- return;
202
- }
203
- await runGitCommand(['checkout', '-b', branch], { cwd: repoPath });
204
- }
205
- function formatVersionTag(version) {
206
- return version.startsWith('v') ? version : `v${version}`;
207
- }
208
- async function readWorkspacePackageVersion(workspacePath) {
209
- const packageYmlPath = path.join(workspacePath, PACKAGE_YML);
210
- if (!(await exists(packageYmlPath))) {
211
- throw new Error(`package.yml not found in ${workspacePath}. Provide --version when running opkg release.`);
212
- }
213
- const pkg = await parsePackageYml(packageYmlPath);
214
- if (!pkg.version) {
215
- throw new Error(`package.yml at ${workspacePath} is missing a version field.`);
216
- }
217
- return pkg.version;
218
- }
219
- //# sourceMappingURL=package-sync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-sync.js","sourceRoot":"","sources":["../../src/core/package-sync.ts"],"names":[],"mappings":"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"}