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
@@ -0,0 +1,129 @@
1
+ import { BoxRenderable, InputRenderable, InputRenderableEvents, SelectRenderable, SelectRenderableEvents, TextRenderable, } from '@opentui/core';
2
+ export function createAddFileModalView(renderer) {
3
+ const container = new BoxRenderable(renderer, {
4
+ id: 'opkg-add-file-modal',
5
+ width: '100%',
6
+ height: '100%',
7
+ flexDirection: 'column',
8
+ gap: 1,
9
+ visible: false,
10
+ });
11
+ const title = new TextRenderable(renderer, {
12
+ id: 'opkg-add-file-title',
13
+ content: 'Add file to package',
14
+ fg: '#bbbbbb',
15
+ });
16
+ const status = new TextRenderable(renderer, {
17
+ id: 'opkg-add-file-status',
18
+ content: 'Type to search. Enter to add. Esc/b to cancel.',
19
+ fg: '#888888',
20
+ });
21
+ const input = new InputRenderable(renderer, {
22
+ id: 'opkg-add-file-input',
23
+ width: '100%',
24
+ placeholder: 'Search file path...',
25
+ });
26
+ const results = new SelectRenderable(renderer, {
27
+ id: 'opkg-add-file-results',
28
+ width: '100%',
29
+ height: 12,
30
+ showScrollIndicator: true,
31
+ showDescription: false,
32
+ wrapSelection: false,
33
+ options: [],
34
+ });
35
+ container.add(title);
36
+ container.add(status);
37
+ container.add(input);
38
+ container.add(results);
39
+ container.add(new TextRenderable(renderer, {
40
+ id: 'opkg-add-file-hint',
41
+ content: 'Enter=add, Esc/b=cancel, ↑/↓ to navigate matches.',
42
+ fg: '#888888',
43
+ }));
44
+ let onQueryChangeCb = null;
45
+ let onSelectionChangeCb = null;
46
+ let onConfirmCb = null;
47
+ let suppressSelectionNotify = false;
48
+ const getSelectedPath = () => {
49
+ const opt = results.getSelectedOption();
50
+ return opt?.value ?? null;
51
+ };
52
+ input.on(InputRenderableEvents.INPUT, (value) => {
53
+ onQueryChangeCb?.(value ?? '');
54
+ });
55
+ input.on(InputRenderableEvents.ENTER, () => {
56
+ onConfirmCb?.(getSelectedPath());
57
+ });
58
+ results.on(SelectRenderableEvents.SELECTION_CHANGED, () => {
59
+ if (suppressSelectionNotify)
60
+ return;
61
+ onSelectionChangeCb?.(getSelectedPath());
62
+ });
63
+ results.on(SelectRenderableEvents.ITEM_SELECTED, () => {
64
+ onConfirmCb?.(getSelectedPath());
65
+ });
66
+ const setResults = (items) => {
67
+ if (!items.length) {
68
+ results.options = [];
69
+ status.content = 'No matches.';
70
+ return;
71
+ }
72
+ results.options = items.map((item) => ({
73
+ name: item.display,
74
+ description: '',
75
+ value: item.value,
76
+ }));
77
+ suppressSelectionNotify = true;
78
+ results.setSelectedIndex(0);
79
+ suppressSelectionNotify = false;
80
+ onSelectionChangeCb?.(getSelectedPath());
81
+ status.content = `Matches: ${items.length}. Enter=add, Esc/b=cancel.`;
82
+ };
83
+ return {
84
+ container,
85
+ setLoading: (message = 'Indexing files...') => {
86
+ status.content = message;
87
+ },
88
+ setStatus: (message) => {
89
+ status.content = message;
90
+ },
91
+ setResults,
92
+ setPreview: () => {
93
+ // no-op (preview removed)
94
+ },
95
+ setQuery: (value) => {
96
+ input.value = value;
97
+ },
98
+ getQuery: () => input.value ?? '',
99
+ getSelectedPath,
100
+ focusSearch: () => {
101
+ input.focus();
102
+ },
103
+ moveSelection: (delta) => {
104
+ if (delta < 0) {
105
+ results.moveUp(Math.abs(delta));
106
+ }
107
+ else if (delta > 0) {
108
+ results.moveDown(delta);
109
+ }
110
+ onSelectionChangeCb?.(getSelectedPath());
111
+ },
112
+ onQueryChange: (cb) => {
113
+ onQueryChangeCb = cb;
114
+ },
115
+ onSelectionChange: (cb) => {
116
+ onSelectionChangeCb = cb;
117
+ },
118
+ onConfirm: (cb) => {
119
+ onConfirmCb = cb;
120
+ },
121
+ show: () => {
122
+ container.visible = true;
123
+ },
124
+ hide: () => {
125
+ container.visible = false;
126
+ },
127
+ };
128
+ }
129
+ //# sourceMappingURL=add-file-modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-file-modal.js","sourceRoot":"","sources":["../../../src/tui/views/add-file-modal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { BoxRenderable, TextRenderable } from '@opentui/core';
2
+ export function createFilePreviewView(renderer) {
3
+ const container = new BoxRenderable(renderer, {
4
+ id: 'opkg-file-preview',
5
+ width: '100%',
6
+ height: '100%',
7
+ flexDirection: 'column',
8
+ gap: 1,
9
+ visible: false,
10
+ });
11
+ const title = new TextRenderable(renderer, {
12
+ id: 'opkg-file-preview-title',
13
+ content: 'Preview',
14
+ fg: '#bbbbbb',
15
+ });
16
+ const body = new TextRenderable(renderer, {
17
+ id: 'opkg-file-preview-body',
18
+ content: '',
19
+ fg: '#aaaaaa',
20
+ });
21
+ const hint = new TextRenderable(renderer, {
22
+ id: 'opkg-file-preview-hint',
23
+ content: 'b/Esc to go back.',
24
+ fg: '#888888',
25
+ });
26
+ container.add(title);
27
+ container.add(body);
28
+ container.add(hint);
29
+ return {
30
+ container,
31
+ setContent: (newTitle, newBody) => {
32
+ title.content = newTitle;
33
+ body.content = newBody;
34
+ },
35
+ show: () => {
36
+ container.visible = true;
37
+ },
38
+ hide: () => {
39
+ container.visible = false;
40
+ },
41
+ isVisible: () => container.visible ?? false,
42
+ };
43
+ }
44
+ //# sourceMappingURL=file-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-preview.js","sourceRoot":"","sources":["../../../src/tui/views/file-preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG9D,MAAM,UAAU,qBAAqB,CAAC,QAAa;IAClD,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE;QAC7C,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,aAAa,EAAE,QAAQ;QACvB,GAAG,EAAE,CAAC;QACN,OAAO,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,QAAQ,EAAE;QAC1C,EAAE,EAAE,yBAAyB;QAC7B,OAAO,EAAE,SAAS;QAClB,EAAE,EAAE,SAAS;KACb,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,cAAc,CAAC,QAAQ,EAAE;QACzC,EAAE,EAAE,wBAAwB;QAC5B,OAAO,EAAE,EAAE;QACX,EAAE,EAAE,SAAS;KACb,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,cAAc,CAAC,QAAQ,EAAE;QACzC,EAAE,EAAE,wBAAwB;QAC5B,OAAO,EAAE,mBAAmB;QAC5B,EAAE,EAAE,SAAS;KACb,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAEpB,OAAO;QACN,SAAS;QACT,UAAU,EAAE,CAAC,QAAgB,EAAE,OAAe,EAAE,EAAE;YACjD,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACxB,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACV,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACV,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QAC3B,CAAC;QACD,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,IAAI,KAAK;KAC3C,CAAC;AACH,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { BoxRenderable, SelectRenderable, SelectRenderableEvents, TextRenderable, } from '@opentui/core';
2
+ export function createListPackagesView(renderer) {
3
+ const container = new BoxRenderable(renderer, {
4
+ id: 'opkg-list-packages',
5
+ width: '100%',
6
+ height: '100%',
7
+ flexDirection: 'column',
8
+ gap: 1,
9
+ });
10
+ const title = new TextRenderable(renderer, {
11
+ id: 'opkg-list-title',
12
+ content: 'List Local Packages',
13
+ fg: '#bbbbbb',
14
+ });
15
+ const status = new TextRenderable(renderer, {
16
+ id: 'opkg-list-status',
17
+ content: 'Loading packages...',
18
+ fg: '#888888',
19
+ });
20
+ const select = new SelectRenderable(renderer, {
21
+ id: 'opkg-list-select',
22
+ width: '100%',
23
+ height: 12,
24
+ options: [],
25
+ showDescription: true,
26
+ showScrollIndicator: true,
27
+ });
28
+ let onSelect = null;
29
+ select.on(SelectRenderableEvents.ITEM_SELECTED, (_idx, option) => {
30
+ if (option?.value && onSelect) {
31
+ onSelect(option.value);
32
+ }
33
+ });
34
+ container.add(title);
35
+ container.add(status);
36
+ container.add(select);
37
+ const setPackages = (pkgs) => {
38
+ if (!pkgs.length) {
39
+ select.options = [];
40
+ status.content = 'No packages found. Use "opkg init" or save/pack first.';
41
+ return;
42
+ }
43
+ select.options = pkgs.map((pkg) => ({
44
+ name: `${pkg.name}@${pkg.version}`,
45
+ description: pkg.description ?? '',
46
+ value: pkg,
47
+ }));
48
+ status.content = 'Select a package (Enter). Press b/Esc to return.';
49
+ };
50
+ const setLoading = (message = 'Loading packages...') => {
51
+ status.content = message;
52
+ };
53
+ const setError = (message) => {
54
+ status.content = message;
55
+ select.options = [];
56
+ };
57
+ const setOnSelect = (cb) => {
58
+ onSelect = cb;
59
+ };
60
+ const focus = () => {
61
+ select.focus();
62
+ };
63
+ return {
64
+ container,
65
+ select,
66
+ setPackages,
67
+ setLoading,
68
+ setError,
69
+ setOnSelect,
70
+ focus,
71
+ };
72
+ }
73
+ //# sourceMappingURL=list-packages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-packages.js","sourceRoot":"","sources":["../../../src/tui/views/list-packages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { BoxRenderable, SelectRenderable, TextRenderable } from '@opentui/core';
2
+ export function createMainMenu(renderer) {
3
+ const mainMenuContainer = new BoxRenderable(renderer, {
4
+ id: 'opkg-main-menu',
5
+ width: '100%',
6
+ height: '100%',
7
+ flexDirection: 'column',
8
+ gap: 1,
9
+ });
10
+ const title = new TextRenderable(renderer, {
11
+ id: 'opkg-main-menu-title',
12
+ content: 'Select an action',
13
+ fg: '#bbbbbb',
14
+ });
15
+ const mainMenuSelect = new SelectRenderable(renderer, {
16
+ id: 'opkg-main-menu-select',
17
+ width: '100%',
18
+ height: 8,
19
+ options: [
20
+ { name: 'Add / Update Package', description: 'Create package, add files, save/pack', value: 'add-update' },
21
+ { name: 'List Local Packages', description: 'View packages in local registry', value: 'list' },
22
+ { name: 'Exit', description: 'Quit the TUI', value: 'exit' },
23
+ ],
24
+ });
25
+ mainMenuContainer.add(title);
26
+ mainMenuContainer.add(mainMenuSelect);
27
+ return { mainMenuContainer, mainMenuSelect };
28
+ }
29
+ //# sourceMappingURL=main-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-menu.js","sourceRoot":"","sources":["../../../src/tui/views/main-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEhF,MAAM,UAAU,cAAc,CAAC,QAAa;IAC3C,MAAM,iBAAiB,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE;QACrD,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,aAAa,EAAE,QAAQ;QACvB,GAAG,EAAE,CAAC;KACN,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,QAAQ,EAAE;QAC1C,EAAE,EAAE,sBAAsB;QAC1B,OAAO,EAAE,kBAAkB;QAC3B,EAAE,EAAE,SAAS;KACb,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAI,gBAAgB,CAAC,QAAQ,EAAE;QACrD,EAAE,EAAE,uBAAuB;QAC3B,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,CAAC;QACT,OAAO,EAAE;YACR,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,sCAAsC,EAAE,KAAK,EAAE,YAAY,EAAE;YAC1G,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,iCAAiC,EAAE,KAAK,EAAE,MAAM,EAAE;YAC9F,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE;SAC5D;KACD,CAAC,CAAC;IAEH,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACtC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,81 @@
1
+ import blessed from 'blessed';
2
+ export function createManageView(state, screen, pkg, // RegistryEntry or Package
3
+ onBack, onAddFile, onSave) {
4
+ const manageBox = blessed.box({
5
+ label: ` Manage Package: ${pkg.name || 'New'}@${pkg.version || 'wip'} `,
6
+ border: 'line',
7
+ style: {
8
+ bg: 'black',
9
+ fg: 'white',
10
+ border: {
11
+ fg: 'yellow'
12
+ }
13
+ },
14
+ width: 80,
15
+ height: '80%',
16
+ top: 2,
17
+ left: 'center',
18
+ scrollable: true,
19
+ mouse: true,
20
+ keys: true
21
+ });
22
+ screen.append(manageBox);
23
+ // Stub package info
24
+ const infoText = blessed.text({
25
+ content: `Description: ${pkg.description || 'No desc'}\nPlatform: ${pkg.platform || 'universal'}\nStatus: ${state.dirty ? 'Unsaved changes' : 'Saved'}`,
26
+ tags: true,
27
+ style: { fg: 'gray' }
28
+ });
29
+ manageBox.append(infoText);
30
+ // Stub file list (Phase 3: Use discoverPackageFiles())
31
+ const fileList = blessed.list({
32
+ label: ' Files (Phase 3: Real list from discoverPackageFiles) ',
33
+ border: 'line',
34
+ items: ['example-file1.ts', 'package.yml', '➕ Add File (Phase 3)', '← Back'],
35
+ top: 5,
36
+ width: '100%',
37
+ height: 10,
38
+ style: { selected: { bg: 'magenta' } },
39
+ keys: true,
40
+ mouse: true,
41
+ vi: true
42
+ });
43
+ manageBox.append(fileList);
44
+ fileList.on('select', (item, idx) => {
45
+ const selected = fileList.getItem(idx).getText();
46
+ if (selected === '← Back') {
47
+ onBack();
48
+ manageBox.detach();
49
+ screen.render();
50
+ return;
51
+ }
52
+ else if (selected === '➕ Add File (Phase 3)') {
53
+ onAddFile();
54
+ return;
55
+ }
56
+ screen.log(`Phase 3 TODO: View file content for ${selected}`);
57
+ });
58
+ // Bottom actions
59
+ const actionsBox = blessed.box({
60
+ label: ' Actions ',
61
+ border: 'line',
62
+ bottom: 0,
63
+ width: '100%',
64
+ height: 3,
65
+ style: { bg: 'black', fg: 'green' },
66
+ content: '{green-fg}💾 Save (calls save-pipeline) 📦 Pack (calls pack logic) Esc: Back{/}'
67
+ });
68
+ manageBox.append(actionsBox);
69
+ // Stub action keys
70
+ manageBox.key(['s'], () => {
71
+ onSave();
72
+ screen.log('Phase 3 TODO: Run save-pipeline for upsert');
73
+ });
74
+ manageBox.key(['p'], () => {
75
+ screen.log('Phase 3 TODO: Run pack for tarball');
76
+ });
77
+ fileList.focus();
78
+ screen.render();
79
+ return manageBox;
80
+ }
81
+ //# sourceMappingURL=manage-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage-view.js","sourceRoot":"","sources":["../../../src/tui/views/manage-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ import { BoxRenderable, SelectRenderable, SelectRenderableEvents, TextRenderable } from '@opentui/core';
2
+ import path from 'node:path';
3
+ export function createPackageHubView(renderer) {
4
+ const container = new BoxRenderable(renderer, {
5
+ id: 'opkg-package-hub',
6
+ width: '100%',
7
+ height: '100%',
8
+ flexDirection: 'column',
9
+ gap: 1,
10
+ });
11
+ const title = new TextRenderable(renderer, {
12
+ id: 'opkg-package-hub-title',
13
+ content: 'Add/Update Package',
14
+ fg: '#bbbbbb',
15
+ });
16
+ const packageName = new TextRenderable(renderer, {
17
+ id: 'opkg-package-hub-package',
18
+ content: 'Package: (none selected)',
19
+ fg: '#cccccc',
20
+ });
21
+ const status = new TextRenderable(renderer, {
22
+ id: 'opkg-package-hub-status',
23
+ content: 'No package selected. Choose one from list or create new.',
24
+ fg: '#888888',
25
+ });
26
+ const filesSelect = new SelectRenderable(renderer, {
27
+ id: 'opkg-package-hub-files-select',
28
+ width: '100%',
29
+ height: 12,
30
+ showScrollIndicator: true,
31
+ showDescription: false,
32
+ wrapSelection: false,
33
+ options: [],
34
+ });
35
+ container.add(title);
36
+ container.add(packageName);
37
+ container.add(status);
38
+ container.add(filesSelect);
39
+ let infoLines = [
40
+ 'a=add file (planned), Enter=preview, Del=remove, s=save, k=pack, b/Esc=back.',
41
+ ];
42
+ const infoRenderables = [];
43
+ const renderInfo = () => {
44
+ // ensure we have renderables for each line
45
+ for (let i = infoRenderables.length; i < infoLines.length; i += 1) {
46
+ const r = new TextRenderable(renderer, {
47
+ id: `opkg-package-hub-line-${i}`,
48
+ content: '',
49
+ fg: '#888888',
50
+ });
51
+ infoRenderables.push(r);
52
+ container.add(r);
53
+ }
54
+ infoRenderables.forEach((r, idx) => {
55
+ if (idx < infoLines.length) {
56
+ r.content = infoLines[idx];
57
+ r.visible = true;
58
+ }
59
+ else {
60
+ r.visible = false;
61
+ }
62
+ });
63
+ };
64
+ renderInfo();
65
+ let onEnter = null;
66
+ filesSelect.on(SelectRenderableEvents.ITEM_SELECTED, () => {
67
+ onEnter?.();
68
+ });
69
+ return {
70
+ container,
71
+ setPackageName: (name) => {
72
+ packageName.content = name ? `Package: ${name}` : 'Package: (none selected)';
73
+ },
74
+ setFiles: (paths) => {
75
+ if (!paths.length) {
76
+ filesSelect.options = [];
77
+ status.content = 'No files found in package.';
78
+ return;
79
+ }
80
+ const cwd = process.cwd();
81
+ filesSelect.options = paths.map((p) => {
82
+ const display = p.startsWith('/') || p.match(/^[A-Za-z]:[\\/]/)
83
+ ? relativeSafe(cwd, p)
84
+ : p;
85
+ return {
86
+ name: display,
87
+ description: '',
88
+ value: p,
89
+ };
90
+ });
91
+ status.content = `Files (${paths.length}). Enter=preview, Del=remove.`;
92
+ },
93
+ setStatus: (message) => {
94
+ status.content = message;
95
+ },
96
+ getSelectedFile: () => {
97
+ const opt = filesSelect.getSelectedOption();
98
+ return opt?.value ?? null;
99
+ },
100
+ focusFiles: () => {
101
+ filesSelect.focus();
102
+ },
103
+ setEmptyState: (message) => {
104
+ status.content = message;
105
+ filesSelect.options = [];
106
+ },
107
+ setInfoLines: (lines) => {
108
+ infoLines = lines;
109
+ renderInfo();
110
+ },
111
+ onFileEnter: (cb) => {
112
+ onEnter = cb;
113
+ },
114
+ };
115
+ }
116
+ function relativeSafe(cwd, target) {
117
+ const rel = path.relative(cwd, target);
118
+ return rel === '' ? '.' : rel;
119
+ }
120
+ //# sourceMappingURL=package-hub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-hub.js","sourceRoot":"","sources":["../../../src/tui/views/package-hub.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { BoxRenderable, TextRenderable } from '@opentui/core';
2
+ export function createPlaceholderView(renderer, opts) {
3
+ const container = new BoxRenderable(renderer, {
4
+ id: opts.id,
5
+ width: '100%',
6
+ height: '100%',
7
+ flexDirection: 'column',
8
+ gap: 1,
9
+ });
10
+ container.add(new TextRenderable(renderer, {
11
+ id: `${opts.id}-title`,
12
+ content: opts.title,
13
+ fg: '#bbbbbb',
14
+ }));
15
+ opts.lines.forEach((line, idx) => {
16
+ container.add(new TextRenderable(renderer, {
17
+ id: `${opts.id}-line-${idx}`,
18
+ content: line,
19
+ fg: '#888888',
20
+ }));
21
+ });
22
+ return container;
23
+ }
24
+ //# sourceMappingURL=placeholder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../../src/tui/views/placeholder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,UAAU,qBAAqB,CACpC,QAAa,EACb,IAAoD;IAEpD,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE;QAC7C,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,aAAa,EAAE,QAAQ;QACvB,GAAG,EAAE,CAAC;KACN,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,QAAQ,EAAE;QAC1C,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,QAAQ;QACtB,OAAO,EAAE,IAAI,CAAC,KAAK;QACnB,EAAE,EAAE,SAAS;KACb,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAChC,SAAS,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,QAAQ,EAAE;YAC1C,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,SAAS,GAAG,EAAE;YAC5B,OAAO,EAAE,IAAI;YACb,EAAE,EAAE,SAAS;SACb,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AAClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2LH,cAAc;AACd,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAIzC,YAAY,OAAe,EAAE,IAAY,EAAE,OAAa;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,CAAN,IAAY,UAUX;AAVD,WAAY,UAAU;IACpB,qDAAuC,CAAA;IACvC,+DAAiD,CAAA;IACjD,iDAAmC,CAAA;IACnC,+CAAiC,CAAA;IACjC,6CAA+B,CAAA;IAC/B,qDAAuC,CAAA;IACvC,mDAAqC,CAAA;IACrC,mDAAqC,CAAA;IACrC,2CAA6B,CAAA;AAC/B,CAAC,EAVW,UAAU,KAAV,UAAU,QAUrB;AAED,eAAe;AACf,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,2BAAe,CAAA;AACjB,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwNH,cAAc;AACd,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAIzC,YAAY,OAAe,EAAE,IAAY,EAAE,OAAa;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,CAAN,IAAY,UAUX;AAVD,WAAY,UAAU;IACpB,qDAAuC,CAAA;IACvC,+DAAiD,CAAA;IACjD,iDAAmC,CAAA;IACnC,+CAAiC,CAAA;IACjC,6CAA+B,CAAA;IAC/B,qDAAuC,CAAA;IACvC,mDAAqC,CAAA;IACrC,mDAAqC,CAAA;IACrC,2CAA6B,CAAA;AAC/B,CAAC,EAVW,UAAU,KAAV,UAAU,QAUrB;AAED,eAAe;AACf,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,2BAAe,CAAA;AACjB,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB"}
@@ -0,0 +1,72 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { existsSync, mkdirSync } from 'node:fs';
3
+ import { chmod } from 'node:fs/promises';
4
+ import { join } from 'node:path';
5
+ import os from 'node:os';
6
+ import { logger } from './logger.js';
7
+ const DEFAULT_INSTALL_DIR = join(os.homedir(), '.opkg', 'bun');
8
+ const DEFAULT_BUN_HOME = join(os.homedir(), '.bun'); // bun installer fallback
9
+ const BUN_BIN_NAME = process.platform === 'win32' ? 'bun.exe' : 'bun';
10
+ /**
11
+ * Ensures a Bun binary is available. If Bun is not present on the system,
12
+ * downloads it into a cached directory (DEFAULT_INSTALL_DIR) using the
13
+ * official install script. Returns the path to the Bun executable.
14
+ */
15
+ export async function ensureBunBinary() {
16
+ // 1) Respect explicit override
17
+ const envOverride = process.env.BUN_BIN;
18
+ if (envOverride) {
19
+ return envOverride;
20
+ }
21
+ // 2) If Bun already on PATH and running under Bun, just use it
22
+ if (process?.versions?.bun) {
23
+ return process.execPath;
24
+ }
25
+ // 3) Check cached installation
26
+ const cachedBin = join(DEFAULT_INSTALL_DIR, 'bin', BUN_BIN_NAME);
27
+ if (existsSync(cachedBin)) {
28
+ return cachedBin;
29
+ }
30
+ // 4) Download via official install script into cache dir
31
+ if (process.platform === 'win32') {
32
+ throw new Error('Automatic Bun bootstrap is not implemented for Windows. Please install Bun manually.');
33
+ }
34
+ logger.info('Bun not found; downloading to cache', { installDir: DEFAULT_INSTALL_DIR });
35
+ mkdirSync(DEFAULT_INSTALL_DIR, { recursive: true });
36
+ await runShellCommand(`curl -fsSL https://bun.sh/install | bash`, { BUN_INSTALL: DEFAULT_INSTALL_DIR });
37
+ if (!existsSync(cachedBin)) {
38
+ const defaultInstalled = join(DEFAULT_BUN_HOME, 'bin', BUN_BIN_NAME);
39
+ if (existsSync(defaultInstalled)) {
40
+ logger.warn('Bun installed to default ~/.bun; using that path instead', { defaultInstalled });
41
+ return defaultInstalled;
42
+ }
43
+ throw new Error(`Failed to install Bun to ${cachedBin}`);
44
+ }
45
+ try {
46
+ await chmod(cachedBin, 0o755);
47
+ }
48
+ catch {
49
+ // non-fatal
50
+ }
51
+ return cachedBin;
52
+ }
53
+ async function runShellCommand(cmd, envAdd = {}) {
54
+ return new Promise((resolve, reject) => {
55
+ const child = spawn(cmd, {
56
+ stdio: 'inherit',
57
+ shell: true,
58
+ env: { ...process.env, ...envAdd },
59
+ });
60
+ child.on('error', reject);
61
+ child.on('exit', (code, signal) => {
62
+ if (signal) {
63
+ return reject(new Error(`Command terminated by signal ${signal}`));
64
+ }
65
+ if (code && code !== 0) {
66
+ return reject(new Error(`Command exited with code ${code}`));
67
+ }
68
+ resolve();
69
+ });
70
+ });
71
+ }
72
+ //# sourceMappingURL=bun-bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bun-bootstrap.js","sourceRoot":"","sources":["../../src/utils/bun-bootstrap.ts"],"names":[],"mappings":"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"}