everything-dev 1.53.2 → 2.0.0-rc.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 (713) hide show
  1. package/README.md +2 -11
  2. package/dist/_virtual/_rolldown/runtime.cjs +17 -2
  3. package/dist/_virtual/_rolldown/runtime.mjs +36 -0
  4. package/dist/api/auth-middleware.cjs +161 -0
  5. package/dist/api/auth-middleware.cjs.map +1 -0
  6. package/dist/api/auth-middleware.d.cts +69 -0
  7. package/dist/api/auth-middleware.d.mts +69 -0
  8. package/dist/api/auth-middleware.mjs +160 -0
  9. package/dist/api/auth-middleware.mjs.map +1 -0
  10. package/dist/api-contract.cjs +250 -62
  11. package/dist/api-contract.cjs.map +1 -1
  12. package/dist/api-contract.mjs +246 -65
  13. package/dist/api-contract.mjs.map +1 -1
  14. package/dist/app.cjs +99 -26
  15. package/dist/app.cjs.map +1 -1
  16. package/dist/app.d.cts +3 -0
  17. package/dist/app.d.mts +3 -0
  18. package/dist/app.mjs +100 -27
  19. package/dist/app.mjs.map +1 -1
  20. package/dist/auth-login.cjs +163 -0
  21. package/dist/auth-login.cjs.map +1 -0
  22. package/dist/auth-login.mjs +162 -0
  23. package/dist/auth-login.mjs.map +1 -0
  24. package/dist/auth-session.cjs +64 -0
  25. package/dist/auth-session.cjs.map +1 -0
  26. package/dist/auth-session.mjs +58 -0
  27. package/dist/auth-session.mjs.map +1 -0
  28. package/dist/auth-types-gen.cjs +0 -1
  29. package/dist/auth-types-gen.cjs.map +1 -1
  30. package/dist/build.cjs +37 -173
  31. package/dist/build.cjs.map +1 -1
  32. package/dist/build.mjs +37 -171
  33. package/dist/build.mjs.map +1 -1
  34. package/dist/bundle-cache.cjs +74 -0
  35. package/dist/bundle-cache.cjs.map +1 -0
  36. package/dist/bundle-cache.d.cts +27 -0
  37. package/dist/bundle-cache.d.mts +27 -0
  38. package/dist/bundle-cache.mjs +68 -0
  39. package/dist/bundle-cache.mjs.map +1 -0
  40. package/dist/bundle-fs-resolve.cjs +209 -0
  41. package/dist/bundle-fs-resolve.cjs.map +1 -0
  42. package/dist/bundle-fs-resolve.d.cts +76 -0
  43. package/dist/bundle-fs-resolve.d.mts +76 -0
  44. package/dist/bundle-fs-resolve.mjs +202 -0
  45. package/dist/bundle-fs-resolve.mjs.map +1 -0
  46. package/dist/cdn-deploy.cjs +126 -0
  47. package/dist/cdn-deploy.cjs.map +1 -0
  48. package/dist/cdn-deploy.mjs +124 -0
  49. package/dist/cdn-deploy.mjs.map +1 -0
  50. package/dist/cli/db-doctor.cjs +19 -19
  51. package/dist/cli/db-doctor.cjs.map +1 -1
  52. package/dist/cli/db-doctor.mjs +18 -18
  53. package/dist/cli/db-doctor.mjs.map +1 -1
  54. package/dist/cli/db-repair.cjs +9 -32
  55. package/dist/cli/db-repair.cjs.map +1 -1
  56. package/dist/cli/db-repair.mjs +9 -32
  57. package/dist/cli/db-repair.mjs.map +1 -1
  58. package/dist/cli/framework-version.cjs +7 -3
  59. package/dist/cli/framework-version.cjs.map +1 -1
  60. package/dist/cli/framework-version.mjs +7 -3
  61. package/dist/cli/framework-version.mjs.map +1 -1
  62. package/dist/cli/infra.cjs +159 -251
  63. package/dist/cli/infra.cjs.map +1 -1
  64. package/dist/cli/infra.mjs +154 -242
  65. package/dist/cli/infra.mjs.map +1 -1
  66. package/dist/cli/init.cjs +627 -199
  67. package/dist/cli/init.cjs.map +1 -1
  68. package/dist/cli/init.d.cts +61 -8
  69. package/dist/cli/init.d.mts +61 -8
  70. package/dist/cli/init.mjs +616 -197
  71. package/dist/cli/init.mjs.map +1 -1
  72. package/dist/cli/parse.cjs +8 -7
  73. package/dist/cli/parse.cjs.map +1 -1
  74. package/dist/cli/parse.mjs +9 -7
  75. package/dist/cli/parse.mjs.map +1 -1
  76. package/dist/cli/prompts.cjs +14 -1
  77. package/dist/cli/prompts.cjs.map +1 -1
  78. package/dist/cli/prompts.mjs +14 -1
  79. package/dist/cli/prompts.mjs.map +1 -1
  80. package/dist/cli/prune.cjs +220 -0
  81. package/dist/cli/prune.cjs.map +1 -0
  82. package/dist/cli/prune.mjs +220 -0
  83. package/dist/cli/prune.mjs.map +1 -0
  84. package/dist/cli/snapshot.cjs +2 -1
  85. package/dist/cli/snapshot.cjs.map +1 -1
  86. package/dist/cli/snapshot.mjs +2 -1
  87. package/dist/cli/snapshot.mjs.map +1 -1
  88. package/dist/cli/status.cjs +5 -4
  89. package/dist/cli/status.cjs.map +1 -1
  90. package/dist/cli/status.mjs +6 -5
  91. package/dist/cli/status.mjs.map +1 -1
  92. package/dist/cli/sync.cjs +156 -58
  93. package/dist/cli/sync.cjs.map +1 -1
  94. package/dist/cli/sync.mjs +158 -63
  95. package/dist/cli/sync.mjs.map +1 -1
  96. package/dist/cli/timing.cjs +0 -1
  97. package/dist/cli/timing.cjs.map +1 -1
  98. package/dist/cli/upgrade.cjs +95 -69
  99. package/dist/cli/upgrade.cjs.map +1 -1
  100. package/dist/cli/upgrade.mjs +97 -72
  101. package/dist/cli/upgrade.mjs.map +1 -1
  102. package/dist/cli/utils/helpers.cjs.map +1 -1
  103. package/dist/cli.cjs +320 -72
  104. package/dist/cli.cjs.map +1 -1
  105. package/dist/cli.mjs +316 -68
  106. package/dist/cli.mjs.map +1 -1
  107. package/dist/code-artifacts.cjs +76 -8
  108. package/dist/code-artifacts.cjs.map +1 -1
  109. package/dist/code-artifacts.mjs +76 -10
  110. package/dist/code-artifacts.mjs.map +1 -1
  111. package/dist/commands/build.cjs +65 -0
  112. package/dist/commands/build.cjs.map +1 -0
  113. package/dist/commands/build.mjs +65 -0
  114. package/dist/commands/build.mjs.map +1 -0
  115. package/dist/commands/config.cjs +77 -0
  116. package/dist/commands/config.cjs.map +1 -0
  117. package/dist/commands/config.d.cts +8 -0
  118. package/dist/commands/config.d.mts +8 -0
  119. package/dist/commands/config.mjs +74 -0
  120. package/dist/commands/config.mjs.map +1 -0
  121. package/dist/commands/db.cjs +107 -0
  122. package/dist/commands/db.cjs.map +1 -0
  123. package/dist/commands/db.mjs +107 -0
  124. package/dist/commands/db.mjs.map +1 -0
  125. package/dist/commands/deploy.cjs +336 -0
  126. package/dist/commands/deploy.cjs.map +1 -0
  127. package/dist/commands/deploy.mjs +334 -0
  128. package/dist/commands/deploy.mjs.map +1 -0
  129. package/dist/commands/dev.cjs +75 -0
  130. package/dist/commands/dev.cjs.map +1 -0
  131. package/dist/commands/dev.mjs +73 -0
  132. package/dist/commands/dev.mjs.map +1 -0
  133. package/dist/commands/init.cjs +234 -0
  134. package/dist/commands/init.cjs.map +1 -0
  135. package/dist/commands/init.mjs +231 -0
  136. package/dist/commands/init.mjs.map +1 -0
  137. package/dist/commands/keys.cjs +255 -0
  138. package/dist/commands/keys.cjs.map +1 -0
  139. package/dist/commands/keys.mjs +253 -0
  140. package/dist/commands/keys.mjs.map +1 -0
  141. package/dist/commands/ops.cjs +199 -0
  142. package/dist/commands/ops.cjs.map +1 -0
  143. package/dist/commands/ops.mjs +197 -0
  144. package/dist/commands/ops.mjs.map +1 -0
  145. package/dist/commands/plugins.cjs +211 -0
  146. package/dist/commands/plugins.cjs.map +1 -0
  147. package/dist/commands/plugins.mjs +211 -0
  148. package/dist/commands/plugins.mjs.map +1 -0
  149. package/dist/commands/shared.cjs +8 -0
  150. package/dist/commands/shared.cjs.map +1 -0
  151. package/dist/commands/shared.d.cts +6 -0
  152. package/dist/commands/shared.d.mts +6 -0
  153. package/dist/commands/shared.mjs +8 -0
  154. package/dist/commands/shared.mjs.map +1 -0
  155. package/dist/commands/upgrade.cjs +325 -0
  156. package/dist/commands/upgrade.cjs.map +1 -0
  157. package/dist/commands/upgrade.mjs +323 -0
  158. package/dist/commands/upgrade.mjs.map +1 -0
  159. package/dist/components/dev-render.cjs +340 -0
  160. package/dist/components/dev-render.cjs.map +1 -0
  161. package/dist/components/dev-render.mjs +332 -0
  162. package/dist/components/dev-render.mjs.map +1 -0
  163. package/dist/config.cjs +460 -221
  164. package/dist/config.cjs.map +1 -1
  165. package/dist/config.d.cts +491 -48
  166. package/dist/config.d.mts +491 -48
  167. package/dist/config.mjs +439 -212
  168. package/dist/config.mjs.map +1 -1
  169. package/dist/contract.cjs +327 -50
  170. package/dist/contract.cjs.map +1 -1
  171. package/dist/contract.d.cts +1951 -1062
  172. package/dist/contract.d.mts +1951 -1062
  173. package/dist/contract.meta.cjs +107 -12
  174. package/dist/contract.meta.cjs.map +1 -1
  175. package/dist/contract.meta.d.cts +166 -8
  176. package/dist/contract.meta.d.mts +166 -8
  177. package/dist/contract.meta.mjs +107 -11
  178. package/dist/contract.meta.mjs.map +1 -1
  179. package/dist/contract.mjs +580 -327
  180. package/dist/contract.mjs.map +1 -1
  181. package/dist/dag.cjs +5 -3
  182. package/dist/dag.cjs.map +1 -1
  183. package/dist/dag.mjs +6 -3
  184. package/dist/dag.mjs.map +1 -1
  185. package/dist/db/binding.cjs +80 -0
  186. package/dist/db/binding.cjs.map +1 -0
  187. package/dist/db/binding.d.cts +39 -0
  188. package/dist/db/binding.d.mts +39 -0
  189. package/dist/db/binding.mjs +78 -0
  190. package/dist/db/binding.mjs.map +1 -0
  191. package/dist/db/bindings.cjs +78 -0
  192. package/dist/db/bindings.cjs.map +1 -0
  193. package/dist/db/bindings.d.cts +34 -0
  194. package/dist/db/bindings.d.mts +34 -0
  195. package/dist/db/bindings.mjs +76 -0
  196. package/dist/db/bindings.mjs.map +1 -0
  197. package/dist/db/core.cjs +204 -0
  198. package/dist/db/core.cjs.map +1 -0
  199. package/dist/db/core.d.cts +69 -0
  200. package/dist/db/core.d.mts +69 -0
  201. package/dist/db/core.mjs +192 -0
  202. package/dist/db/core.mjs.map +1 -0
  203. package/dist/db/driver.cjs +167 -0
  204. package/dist/db/driver.cjs.map +1 -0
  205. package/dist/db/driver.d.cts +50 -0
  206. package/dist/db/driver.d.mts +50 -0
  207. package/dist/db/driver.mjs +165 -0
  208. package/dist/db/driver.mjs.map +1 -0
  209. package/dist/db/drizzle-kit.cjs +177 -0
  210. package/dist/db/drizzle-kit.cjs.map +1 -0
  211. package/dist/db/drizzle-kit.d.cts +25 -0
  212. package/dist/db/drizzle-kit.d.mts +25 -0
  213. package/dist/db/drizzle-kit.mjs +175 -0
  214. package/dist/db/drizzle-kit.mjs.map +1 -0
  215. package/dist/db/errors.cjs +27 -0
  216. package/dist/db/errors.cjs.map +1 -0
  217. package/dist/db/errors.d.cts +16 -0
  218. package/dist/db/errors.d.mts +16 -0
  219. package/dist/db/errors.mjs +26 -0
  220. package/dist/db/errors.mjs.map +1 -0
  221. package/dist/db/identity.cjs +55 -0
  222. package/dist/db/identity.cjs.map +1 -0
  223. package/dist/db/identity.d.cts +40 -0
  224. package/dist/db/identity.d.mts +40 -0
  225. package/dist/db/identity.mjs +53 -0
  226. package/dist/db/identity.mjs.map +1 -0
  227. package/dist/db/index.cjs +43 -0
  228. package/dist/db/index.d.cts +9 -0
  229. package/dist/db/index.d.mts +9 -0
  230. package/dist/db/index.mjs +10 -0
  231. package/dist/db/run-migrations.cjs +343 -0
  232. package/dist/db/run-migrations.cjs.map +1 -0
  233. package/dist/db/run-migrations.d.cts +87 -0
  234. package/dist/db/run-migrations.d.mts +87 -0
  235. package/dist/db/run-migrations.mjs +341 -0
  236. package/dist/db/run-migrations.mjs.map +1 -0
  237. package/dist/delegate-signer.cjs +85 -0
  238. package/dist/delegate-signer.cjs.map +1 -0
  239. package/dist/delegate-signer.mjs +84 -0
  240. package/dist/delegate-signer.mjs.map +1 -0
  241. package/dist/deploy-diff.cjs +119 -0
  242. package/dist/deploy-diff.cjs.map +1 -0
  243. package/dist/deploy-diff.mjs +109 -0
  244. package/dist/deploy-diff.mjs.map +1 -0
  245. package/dist/descriptor/constructors.cjs +49 -0
  246. package/dist/descriptor/constructors.cjs.map +1 -0
  247. package/dist/descriptor/constructors.d.cts +27 -0
  248. package/dist/descriptor/constructors.d.mts +27 -0
  249. package/dist/descriptor/constructors.mjs +45 -0
  250. package/dist/descriptor/constructors.mjs.map +1 -0
  251. package/dist/descriptor/index.cjs +24 -0
  252. package/dist/descriptor/index.d.cts +5 -0
  253. package/dist/descriptor/index.d.mts +5 -0
  254. package/dist/descriptor/index.mjs +6 -0
  255. package/dist/descriptor/resolve.cjs +258 -0
  256. package/dist/descriptor/resolve.cjs.map +1 -0
  257. package/dist/descriptor/resolve.d.cts +50 -0
  258. package/dist/descriptor/resolve.d.mts +50 -0
  259. package/dist/descriptor/resolve.mjs +252 -0
  260. package/dist/descriptor/resolve.mjs.map +1 -0
  261. package/dist/descriptor/schema.cjs +109 -0
  262. package/dist/descriptor/schema.cjs.map +1 -0
  263. package/dist/descriptor/schema.d.cts +217 -0
  264. package/dist/descriptor/schema.d.mts +217 -0
  265. package/dist/descriptor/schema.mjs +102 -0
  266. package/dist/descriptor/schema.mjs.map +1 -0
  267. package/dist/descriptor/serialize.cjs +45 -0
  268. package/dist/descriptor/serialize.cjs.map +1 -0
  269. package/dist/descriptor/serialize.d.cts +7 -0
  270. package/dist/descriptor/serialize.d.mts +7 -0
  271. package/dist/descriptor/serialize.mjs +45 -0
  272. package/dist/descriptor/serialize.mjs.map +1 -0
  273. package/dist/dev-log-pipeline.cjs +273 -0
  274. package/dist/dev-log-pipeline.cjs.map +1 -0
  275. package/dist/dev-log-pipeline.mjs +267 -0
  276. package/dist/dev-log-pipeline.mjs.map +1 -0
  277. package/dist/dev-logs.cjs +39 -8
  278. package/dist/dev-logs.cjs.map +1 -1
  279. package/dist/dev-logs.mjs +37 -9
  280. package/dist/dev-logs.mjs.map +1 -1
  281. package/dist/dev-program.cjs +405 -0
  282. package/dist/dev-program.cjs.map +1 -0
  283. package/dist/dev-program.d.cts +10 -0
  284. package/dist/dev-program.d.mts +10 -0
  285. package/dist/dev-program.mjs +395 -0
  286. package/dist/dev-program.mjs.map +1 -0
  287. package/dist/dev-session-data.d.cts +27 -0
  288. package/dist/dev-session-data.d.mts +27 -0
  289. package/dist/dev-session.cjs +178 -105
  290. package/dist/dev-session.cjs.map +1 -1
  291. package/dist/dev-session.mjs +180 -105
  292. package/dist/dev-session.mjs.map +1 -1
  293. package/dist/env/process-env.cjs +16 -0
  294. package/dist/env/process-env.cjs.map +1 -0
  295. package/dist/env/process-env.mjs +13 -0
  296. package/dist/env/process-env.mjs.map +1 -0
  297. package/dist/env/project-env.cjs +144 -0
  298. package/dist/env/project-env.cjs.map +1 -0
  299. package/dist/env/project-env.d.cts +1 -0
  300. package/dist/env/project-env.d.mts +1 -0
  301. package/dist/env/project-env.mjs +132 -0
  302. package/dist/env/project-env.mjs.map +1 -0
  303. package/dist/fastkv.cjs +59 -12
  304. package/dist/fastkv.cjs.map +1 -1
  305. package/dist/fastkv.d.cts +42 -6
  306. package/dist/fastkv.d.mts +42 -6
  307. package/dist/fastkv.mjs +58 -13
  308. package/dist/fastkv.mjs.map +1 -1
  309. package/dist/fingerprint.cjs +57 -0
  310. package/dist/fingerprint.cjs.map +1 -0
  311. package/dist/fingerprint.d.cts +14 -0
  312. package/dist/fingerprint.d.mts +14 -0
  313. package/dist/fingerprint.mjs +55 -0
  314. package/dist/fingerprint.mjs.map +1 -0
  315. package/dist/http-client.cjs +17 -17
  316. package/dist/http-client.cjs.map +1 -1
  317. package/dist/http-client.mjs +17 -17
  318. package/dist/http-client.mjs.map +1 -1
  319. package/dist/image-deploy.cjs +186 -0
  320. package/dist/image-deploy.cjs.map +1 -0
  321. package/dist/image-deploy.mjs +182 -0
  322. package/dist/image-deploy.mjs.map +1 -0
  323. package/dist/index.cjs +66 -18
  324. package/dist/index.d.cts +8 -7
  325. package/dist/index.d.mts +8 -7
  326. package/dist/index.mjs +6 -5
  327. package/dist/infra/docker.cjs +77 -0
  328. package/dist/infra/docker.cjs.map +1 -0
  329. package/dist/infra/docker.d.cts +10 -0
  330. package/dist/infra/docker.d.mts +10 -0
  331. package/dist/infra/docker.mjs +69 -0
  332. package/dist/infra/docker.mjs.map +1 -0
  333. package/dist/infra/materializer.cjs +74 -0
  334. package/dist/infra/materializer.cjs.map +1 -0
  335. package/dist/infra/materializer.mjs +70 -0
  336. package/dist/infra/materializer.mjs.map +1 -0
  337. package/dist/infra/planner.cjs +135 -103
  338. package/dist/infra/planner.cjs.map +1 -1
  339. package/dist/infra/planner.mjs +137 -104
  340. package/dist/infra/planner.mjs.map +1 -1
  341. package/dist/infra/port-ownership.cjs +57 -0
  342. package/dist/infra/port-ownership.cjs.map +1 -0
  343. package/dist/infra/port-ownership.mjs +57 -0
  344. package/dist/infra/port-ownership.mjs.map +1 -0
  345. package/dist/infra/preflight.cjs +45 -33
  346. package/dist/infra/preflight.cjs.map +1 -1
  347. package/dist/infra/preflight.d.cts +1 -0
  348. package/dist/infra/preflight.d.mts +1 -0
  349. package/dist/infra/preflight.mjs +46 -34
  350. package/dist/infra/preflight.mjs.map +1 -1
  351. package/dist/infra/types.cjs.map +1 -1
  352. package/dist/infra/types.d.cts +2 -0
  353. package/dist/infra/types.d.mts +2 -0
  354. package/dist/infra/types.mjs.map +1 -1
  355. package/dist/integrity.cjs +50 -61
  356. package/dist/integrity.cjs.map +1 -1
  357. package/dist/integrity.d.cts +16 -10
  358. package/dist/integrity.d.mts +16 -10
  359. package/dist/integrity.mjs +50 -59
  360. package/dist/integrity.mjs.map +1 -1
  361. package/dist/internal/manifest-normalizer.cjs +8 -2
  362. package/dist/internal/manifest-normalizer.cjs.map +1 -1
  363. package/dist/internal/manifest-normalizer.mjs +9 -3
  364. package/dist/internal/manifest-normalizer.mjs.map +1 -1
  365. package/dist/merge.cjs +19 -1
  366. package/dist/merge.cjs.map +1 -1
  367. package/dist/merge.d.cts +1 -1
  368. package/dist/merge.d.mts +1 -1
  369. package/dist/merge.mjs +19 -2
  370. package/dist/merge.mjs.map +1 -1
  371. package/dist/mf.cjs +190 -3
  372. package/dist/mf.cjs.map +1 -1
  373. package/dist/mf.d.cts +24 -2
  374. package/dist/mf.d.mts +24 -2
  375. package/dist/mf.mjs +189 -4
  376. package/dist/mf.mjs.map +1 -1
  377. package/dist/near-cli.cjs +59 -91
  378. package/dist/near-cli.cjs.map +1 -1
  379. package/dist/near-cli.mjs +58 -90
  380. package/dist/near-cli.mjs.map +1 -1
  381. package/dist/near-signer.cjs +73 -0
  382. package/dist/near-signer.cjs.map +1 -0
  383. package/dist/near-signer.mjs +70 -0
  384. package/dist/near-signer.mjs.map +1 -0
  385. package/dist/network.cjs +0 -1
  386. package/dist/network.cjs.map +1 -1
  387. package/dist/orchestrator.cjs +256 -87
  388. package/dist/orchestrator.cjs.map +1 -1
  389. package/dist/orchestrator.mjs +248 -87
  390. package/dist/orchestrator.mjs.map +1 -1
  391. package/dist/platform-deploy.cjs +81 -0
  392. package/dist/platform-deploy.cjs.map +1 -0
  393. package/dist/platform-deploy.mjs +80 -0
  394. package/dist/platform-deploy.mjs.map +1 -0
  395. package/dist/plugin.cjs +54 -1389
  396. package/dist/plugin.cjs.map +1 -1
  397. package/dist/plugin.d.cts +6 -896
  398. package/dist/plugin.d.mts +6 -896
  399. package/dist/plugin.mjs +53 -1387
  400. package/dist/plugin.mjs.map +1 -1
  401. package/dist/process-kill.cjs +44 -0
  402. package/dist/process-kill.cjs.map +1 -0
  403. package/dist/process-kill.mjs +43 -0
  404. package/dist/process-kill.mjs.map +1 -0
  405. package/dist/process-registry.cjs +64 -9
  406. package/dist/process-registry.cjs.map +1 -1
  407. package/dist/process-registry.mjs +61 -10
  408. package/dist/process-registry.mjs.map +1 -1
  409. package/dist/progress.cjs +45 -0
  410. package/dist/progress.cjs.map +1 -0
  411. package/dist/progress.d.cts +13 -0
  412. package/dist/progress.d.mts +13 -0
  413. package/dist/progress.mjs +42 -0
  414. package/dist/progress.mjs.map +1 -0
  415. package/dist/publish.cjs +513 -79
  416. package/dist/publish.cjs.map +1 -1
  417. package/dist/publish.mjs +515 -82
  418. package/dist/publish.mjs.map +1 -1
  419. package/dist/registry-use.cjs +41 -0
  420. package/dist/registry-use.cjs.map +1 -0
  421. package/dist/registry-use.mjs +40 -0
  422. package/dist/registry-use.mjs.map +1 -0
  423. package/dist/resolution/session.cjs +335 -0
  424. package/dist/resolution/session.cjs.map +1 -0
  425. package/dist/resolution/session.d.cts +105 -0
  426. package/dist/resolution/session.d.mts +105 -0
  427. package/dist/resolution/session.mjs +331 -0
  428. package/dist/resolution/session.mjs.map +1 -0
  429. package/dist/rollback.cjs +131 -0
  430. package/dist/rollback.cjs.map +1 -0
  431. package/dist/rollback.mjs +128 -0
  432. package/dist/rollback.mjs.map +1 -0
  433. package/dist/sdk.cjs +7 -7
  434. package/dist/sdk.d.cts +3 -3
  435. package/dist/sdk.d.mts +3 -3
  436. package/dist/sdk.mjs +2 -2
  437. package/dist/service-descriptor.cjs +67 -34
  438. package/dist/service-descriptor.cjs.map +1 -1
  439. package/dist/service-descriptor.d.cts +4 -1
  440. package/dist/service-descriptor.d.mts +3 -0
  441. package/dist/service-descriptor.mjs +63 -35
  442. package/dist/service-descriptor.mjs.map +1 -1
  443. package/dist/shared-deps.cjs +17 -16
  444. package/dist/shared-deps.cjs.map +1 -1
  445. package/dist/shared-deps.mjs +17 -16
  446. package/dist/shared-deps.mjs.map +1 -1
  447. package/dist/start-config-source.cjs +24 -0
  448. package/dist/start-config-source.cjs.map +1 -0
  449. package/dist/start-config-source.d.cts +29 -0
  450. package/dist/start-config-source.d.mts +29 -0
  451. package/dist/start-config-source.mjs +22 -0
  452. package/dist/start-config-source.mjs.map +1 -0
  453. package/dist/storage-upload.cjs +145 -0
  454. package/dist/storage-upload.cjs.map +1 -0
  455. package/dist/storage-upload.mjs +143 -0
  456. package/dist/storage-upload.mjs.map +1 -0
  457. package/dist/types.cjs +126 -20
  458. package/dist/types.cjs.map +1 -1
  459. package/dist/types.d.cts +867 -585
  460. package/dist/types.d.mts +867 -585
  461. package/dist/types.mjs +307 -208
  462. package/dist/types.mjs.map +1 -1
  463. package/dist/ui/api.cjs +105 -0
  464. package/dist/ui/api.cjs.map +1 -0
  465. package/dist/ui/api.d.cts +31 -0
  466. package/dist/ui/api.d.mts +31 -0
  467. package/dist/ui/api.mjs +99 -0
  468. package/dist/ui/api.mjs.map +1 -0
  469. package/dist/ui/auth-guards.cjs +50 -0
  470. package/dist/ui/auth-guards.cjs.map +1 -0
  471. package/dist/ui/auth-guards.d.cts +39 -0
  472. package/dist/ui/auth-guards.d.mts +39 -0
  473. package/dist/ui/auth-guards.mjs +48 -0
  474. package/dist/ui/auth-guards.mjs.map +1 -0
  475. package/dist/ui/auth.cjs +197 -0
  476. package/dist/ui/auth.cjs.map +1 -0
  477. package/dist/ui/auth.d.cts +56 -0
  478. package/dist/ui/auth.d.mts +56 -0
  479. package/dist/ui/auth.mjs +179 -0
  480. package/dist/ui/auth.mjs.map +1 -0
  481. package/dist/ui/entry.cjs +16 -0
  482. package/dist/ui/entry.cjs.map +1 -0
  483. package/dist/ui/entry.d.cts +12 -0
  484. package/dist/ui/entry.d.mts +12 -0
  485. package/dist/ui/entry.mjs +15 -0
  486. package/dist/ui/entry.mjs.map +1 -0
  487. package/dist/ui/head.cjs +14 -7
  488. package/dist/ui/head.cjs.map +1 -1
  489. package/dist/ui/head.mjs +15 -7
  490. package/dist/ui/head.mjs.map +1 -1
  491. package/dist/ui/hydrate.cjs +265 -0
  492. package/dist/ui/hydrate.cjs.map +1 -0
  493. package/dist/ui/hydrate.d.cts +48 -0
  494. package/dist/ui/hydrate.d.mts +48 -0
  495. package/dist/ui/hydrate.mjs +263 -0
  496. package/dist/ui/hydrate.mjs.map +1 -0
  497. package/dist/ui/i18n.cjs +153 -0
  498. package/dist/ui/i18n.cjs.map +1 -0
  499. package/dist/ui/i18n.d.cts +29 -0
  500. package/dist/ui/i18n.d.mts +29 -0
  501. package/dist/ui/i18n.mjs +140 -0
  502. package/dist/ui/i18n.mjs.map +1 -0
  503. package/dist/ui/index.cjs +19 -1
  504. package/dist/ui/index.d.cts +6 -3
  505. package/dist/ui/index.d.mts +6 -3
  506. package/dist/ui/index.mjs +5 -2
  507. package/dist/ui/locale.cjs +53 -0
  508. package/dist/ui/locale.cjs.map +1 -0
  509. package/dist/ui/locale.d.cts +18 -0
  510. package/dist/ui/locale.d.mts +18 -0
  511. package/dist/ui/locale.mjs +49 -0
  512. package/dist/ui/locale.mjs.map +1 -0
  513. package/dist/ui/manifest/index.cjs +25 -0
  514. package/dist/ui/manifest/index.cjs.map +1 -0
  515. package/dist/ui/manifest/index.d.cts +9 -0
  516. package/dist/ui/manifest/index.d.mts +9 -0
  517. package/dist/ui/manifest/index.mjs +13 -0
  518. package/dist/ui/manifest/index.mjs.map +1 -0
  519. package/dist/ui/manifest-generator.cjs +8 -0
  520. package/dist/ui/manifest-generator.d.cts +1 -0
  521. package/dist/ui/manifest-generator.d.mts +1 -0
  522. package/dist/ui/manifest-generator.mjs +3 -0
  523. package/dist/ui/message-catalogs.cjs +8 -0
  524. package/dist/ui/message-catalogs.cjs.map +1 -0
  525. package/dist/ui/message-catalogs.d.cts +5 -0
  526. package/dist/ui/message-catalogs.d.mts +5 -0
  527. package/dist/ui/message-catalogs.mjs +8 -0
  528. package/dist/ui/message-catalogs.mjs.map +1 -0
  529. package/dist/ui/metadata.cjs +0 -1
  530. package/dist/ui/metadata.cjs.map +1 -1
  531. package/dist/ui/metadata.d.cts +1 -1
  532. package/dist/ui/metadata.d.mts +1 -1
  533. package/dist/ui/plugin-path.cjs +37 -0
  534. package/dist/ui/plugin-path.cjs.map +1 -0
  535. package/dist/ui/plugin-path.d.cts +25 -0
  536. package/dist/ui/plugin-path.d.mts +25 -0
  537. package/dist/ui/plugin-path.mjs +35 -0
  538. package/dist/ui/plugin-path.mjs.map +1 -0
  539. package/dist/ui/router-client.cjs +61 -0
  540. package/dist/ui/router-client.cjs.map +1 -0
  541. package/dist/ui/router-client.d.cts +20 -0
  542. package/dist/ui/router-client.d.mts +20 -0
  543. package/dist/ui/router-client.mjs +60 -0
  544. package/dist/ui/router-client.mjs.map +1 -0
  545. package/dist/ui/router-defaults.cjs +48 -0
  546. package/dist/ui/router-defaults.cjs.map +1 -0
  547. package/dist/ui/router-defaults.d.cts +8 -0
  548. package/dist/ui/router-defaults.d.mts +8 -0
  549. package/dist/ui/router-defaults.mjs +45 -0
  550. package/dist/ui/router-defaults.mjs.map +1 -0
  551. package/dist/ui/router-error.cjs +70 -0
  552. package/dist/ui/router-error.cjs.map +1 -0
  553. package/dist/ui/router-error.d.cts +19 -0
  554. package/dist/ui/router-error.d.mts +19 -0
  555. package/dist/ui/router-error.mjs +69 -0
  556. package/dist/ui/router-error.mjs.map +1 -0
  557. package/dist/ui/router-server.cjs +153 -0
  558. package/dist/ui/router-server.cjs.map +1 -0
  559. package/dist/ui/router-server.d.cts +38 -0
  560. package/dist/ui/router-server.d.mts +38 -0
  561. package/dist/ui/router-server.mjs +152 -0
  562. package/dist/ui/router-server.mjs.map +1 -0
  563. package/dist/ui/router.cjs +4 -16
  564. package/dist/ui/router.cjs.map +1 -1
  565. package/dist/ui/router.mjs +4 -15
  566. package/dist/ui/router.mjs.map +1 -1
  567. package/dist/ui/runtime.cjs +5 -1
  568. package/dist/ui/runtime.cjs.map +1 -1
  569. package/dist/ui/runtime.d.cts +2 -1
  570. package/dist/ui/runtime.d.mts +2 -1
  571. package/dist/ui/runtime.mjs +5 -1
  572. package/dist/ui/runtime.mjs.map +1 -1
  573. package/dist/ui/slot.cjs +34 -0
  574. package/dist/ui/slot.cjs.map +1 -0
  575. package/dist/ui/slot.d.cts +43 -0
  576. package/dist/ui/slot.d.mts +43 -0
  577. package/dist/ui/slot.mjs +34 -0
  578. package/dist/ui/slot.mjs.map +1 -0
  579. package/dist/ui/tenant.cjs +300 -0
  580. package/dist/ui/tenant.cjs.map +1 -0
  581. package/dist/ui/tenant.d.cts +122 -0
  582. package/dist/ui/tenant.d.mts +122 -0
  583. package/dist/ui/tenant.mjs +279 -0
  584. package/dist/ui/tenant.mjs.map +1 -0
  585. package/dist/ui/types.d.cts +32 -2
  586. package/dist/ui/types.d.mts +32 -2
  587. package/dist/ui/version-check.cjs +47 -0
  588. package/dist/ui/version-check.cjs.map +1 -0
  589. package/dist/ui/version-check.d.cts +23 -0
  590. package/dist/ui/version-check.d.mts +23 -0
  591. package/dist/ui/version-check.mjs +46 -0
  592. package/dist/ui/version-check.mjs.map +1 -0
  593. package/dist/utils/banner.cjs +2 -2
  594. package/dist/utils/banner.cjs.map +1 -1
  595. package/dist/utils/banner.mjs +2 -2
  596. package/dist/utils/banner.mjs.map +1 -1
  597. package/dist/utils/linkify.cjs +1 -1
  598. package/dist/utils/linkify.cjs.map +1 -1
  599. package/dist/utils/linkify.mjs +1 -0
  600. package/dist/utils/linkify.mjs.map +1 -1
  601. package/dist/utils/run.cjs +6 -6
  602. package/dist/utils/run.cjs.map +1 -1
  603. package/dist/utils/run.mjs +6 -6
  604. package/dist/utils/run.mjs.map +1 -1
  605. package/dist/utils/save-config.cjs +12 -0
  606. package/dist/utils/save-config.cjs.map +1 -1
  607. package/dist/utils/save-config.mjs +12 -0
  608. package/dist/utils/save-config.mjs.map +1 -1
  609. package/dist/utils/snapshot-hash.cjs +10 -0
  610. package/dist/utils/snapshot-hash.cjs.map +1 -0
  611. package/dist/utils/snapshot-hash.mjs +10 -0
  612. package/dist/utils/snapshot-hash.mjs.map +1 -0
  613. package/dist/utils/string.cjs +0 -1
  614. package/dist/utils/string.cjs.map +1 -1
  615. package/dist/utils/theme.cjs +30 -12
  616. package/dist/utils/theme.cjs.map +1 -1
  617. package/dist/utils/theme.mjs +30 -11
  618. package/dist/utils/theme.mjs.map +1 -1
  619. package/dist/version-manifest-deploy.cjs +50 -0
  620. package/dist/version-manifest-deploy.cjs.map +1 -0
  621. package/dist/version-manifest-deploy.mjs +49 -0
  622. package/dist/version-manifest-deploy.mjs.map +1 -0
  623. package/dist/version-manifest-resolve.cjs +42 -0
  624. package/dist/version-manifest-resolve.cjs.map +1 -0
  625. package/dist/version-manifest-resolve.d.cts +38 -0
  626. package/dist/version-manifest-resolve.d.mts +38 -0
  627. package/dist/version-manifest-resolve.mjs +40 -0
  628. package/dist/version-manifest-resolve.mjs.map +1 -0
  629. package/dist/version-status.cjs +18 -0
  630. package/dist/version-status.cjs.map +1 -0
  631. package/dist/version-status.d.cts +22 -0
  632. package/dist/version-status.d.mts +22 -0
  633. package/dist/version-status.mjs +17 -0
  634. package/dist/version-status.mjs.map +1 -0
  635. package/dist/workspace-catalog.cjs +53 -0
  636. package/dist/workspace-catalog.cjs.map +1 -0
  637. package/dist/workspace-catalog.mjs +51 -0
  638. package/dist/workspace-catalog.mjs.map +1 -0
  639. package/dist/workspace.cjs +237 -0
  640. package/dist/workspace.cjs.map +1 -0
  641. package/dist/workspace.mjs +233 -0
  642. package/dist/workspace.mjs.map +1 -0
  643. package/package.json +179 -27
  644. package/skills/add-a-route/SKILL.md +132 -0
  645. package/skills/api-and-auth/SKILL.md +87 -21
  646. package/skills/api-and-auth/references/middleware.md +1 -1
  647. package/skills/cli-reference/SKILL.md +48 -21
  648. package/skills/code-style/SKILL.md +8 -0
  649. package/skills/dev-workflow/SKILL.md +50 -26
  650. package/skills/extends-config/SKILL.md +31 -19
  651. package/skills/init-upgrade/SKILL.md +29 -16
  652. package/skills/plugin-development/SKILL.md +46 -112
  653. package/skills/plugin-development/references/database.md +82 -0
  654. package/skills/plugin-development/references/request-context.md +67 -0
  655. package/skills/publish-sync/SKILL.md +99 -22
  656. package/skills/registry/SKILL.md +82 -0
  657. package/skills/super-app/SKILL.md +25 -15
  658. package/skills/talk-to-the-app/SKILL.md +138 -0
  659. package/skills/ui-integration/SKILL.md +93 -11
  660. package/dist/cli/db-studio.cjs +0 -131
  661. package/dist/cli/db-studio.cjs.map +0 -1
  662. package/dist/cli/db-studio.mjs +0 -127
  663. package/dist/cli/db-studio.mjs.map +0 -1
  664. package/dist/cli/init.d.cts.map +0 -1
  665. package/dist/cli/init.d.mts.map +0 -1
  666. package/dist/components/dev-view.cjs +0 -309
  667. package/dist/components/dev-view.cjs.map +0 -1
  668. package/dist/components/dev-view.mjs +0 -309
  669. package/dist/components/dev-view.mjs.map +0 -1
  670. package/dist/components/streaming-view.cjs +0 -134
  671. package/dist/components/streaming-view.cjs.map +0 -1
  672. package/dist/components/streaming-view.mjs +0 -132
  673. package/dist/components/streaming-view.mjs.map +0 -1
  674. package/dist/config.d.cts.map +0 -1
  675. package/dist/config.d.mts.map +0 -1
  676. package/dist/contract.d.cts.map +0 -1
  677. package/dist/contract.d.mts.map +0 -1
  678. package/dist/contract.meta.d.cts.map +0 -1
  679. package/dist/contract.meta.d.mts.map +0 -1
  680. package/dist/dag.d.cts.map +0 -1
  681. package/dist/dag.d.mts.map +0 -1
  682. package/dist/db.cjs +0 -81
  683. package/dist/db.cjs.map +0 -1
  684. package/dist/db.d.cts +0 -30
  685. package/dist/db.d.cts.map +0 -1
  686. package/dist/db.d.mts +0 -30
  687. package/dist/db.d.mts.map +0 -1
  688. package/dist/db.mjs +0 -75
  689. package/dist/db.mjs.map +0 -1
  690. package/dist/fastkv.d.cts.map +0 -1
  691. package/dist/fastkv.d.mts.map +0 -1
  692. package/dist/integrity.d.cts.map +0 -1
  693. package/dist/integrity.d.mts.map +0 -1
  694. package/dist/merge.d.cts.map +0 -1
  695. package/dist/merge.d.mts.map +0 -1
  696. package/dist/mf.d.cts.map +0 -1
  697. package/dist/mf.d.mts.map +0 -1
  698. package/dist/plugin.d.cts.map +0 -1
  699. package/dist/plugin.d.mts.map +0 -1
  700. package/dist/service-descriptor.d.cts.map +0 -1
  701. package/dist/service-descriptor.d.mts.map +0 -1
  702. package/dist/types.d.cts.map +0 -1
  703. package/dist/types.d.mts.map +0 -1
  704. package/dist/ui/head.d.cts.map +0 -1
  705. package/dist/ui/head.d.mts.map +0 -1
  706. package/dist/ui/metadata.d.cts.map +0 -1
  707. package/dist/ui/metadata.d.mts.map +0 -1
  708. package/dist/ui/router.d.cts.map +0 -1
  709. package/dist/ui/router.d.mts.map +0 -1
  710. package/dist/ui/runtime.d.cts.map +0 -1
  711. package/dist/ui/runtime.d.mts.map +0 -1
  712. package/dist/ui/types.d.cts.map +0 -1
  713. package/dist/ui/types.d.mts.map +0 -1
package/dist/plugin.mjs CHANGED
@@ -1,1401 +1,67 @@
1
- import { buildRegistryConfigUrl, fetchBosConfigFromFastKv, fetchRemotePluginManifest, getRegistryNamespaceForAccount, parseBosUrl } from "./fastkv.mjs";
2
- import { mergeBosConfigWithExtends, resolveExtendsRef } from "./merge.mjs";
3
- import { getNetworkIdForAccount } from "./network.mjs";
4
- import { BosConfigSchema } from "./types.mjs";
5
- import { buildRuntimePluginsForConfig, drainConfigWarnings, findConfigPath, getHostDevelopmentPort, getProjectRoot, loadLocalConfig, loadResolvedConfig, resolveConfigComposableEntries, resumeWarnings, suppressWarnings } from "./config.mjs";
6
1
  import { createPlugin, z } from "./sdk.mjs";
7
2
  import { bosContract } from "./contract.mjs";
8
- import { computeSriHashForUrl, parseDeployLines } from "./integrity.mjs";
9
- import { pruneDeadEffect, readRegistry, unregisterPid } from "./process-registry.mjs";
10
- import { PortAllocatorLive, buildRuntimeConfig, detectLocalPackages } from "./app.mjs";
11
- import { syncResolvedSharedDeps } from "./shared-deps.mjs";
12
- import { run } from "./utils/run.mjs";
13
- import { colors } from "./utils/theme.mjs";
14
- import { buildEveryPluginQuietly, buildEverythingDevQuietly, buildWorkspaceTargets, fileExists, getPluginRef, readJsonFile, selectWorkspaceTargets } from "./build.mjs";
15
- import { ensureEnvFile, loadProjectEnv, syncGeneratedInfra, writeGeneratedInfra } from "./cli/infra.mjs";
16
- import { saveBosConfig } from "./utils/save-config.mjs";
17
- import { buildInitPatterns, buildPluginRouteExclusions, copyFilteredFiles, detectGitRemoteUrl, fetchParentConfig, generateDatabaseMigrations, personalizeAgentsMd, personalizeConfig, removeInitLockfile, resolveSourceDir, runBunInstall, runTypesGen, scaffoldMinimalProject, stripOrphanedWorkspacesFromLockfile, writeInitSnapshot } from "./cli/init.mjs";
18
- import { getStatus } from "./cli/status.mjs";
19
- import { syncTemplate } from "./cli/sync.mjs";
20
- import { upgradeTemplate } from "./cli/upgrade.mjs";
21
- import { generateCodeArtifacts } from "./code-artifacts.mjs";
22
- import { buildDescription, buildServiceDescriptorMap, buildServiceDescriptorMapFromPlan } from "./service-descriptor.mjs";
23
- import { planInfra } from "./infra/planner.mjs";
24
- import { preflightLocalInfra } from "./infra/preflight.mjs";
25
- import { addFunctionCallAccessKey, deleteAccessKeys, ensureNearCli, listPublishKeys } from "./near-cli.mjs";
26
- import { extractPublishedUrl, publishToFastKv } from "./publish.mjs";
27
- import { existsSync, readFileSync, writeFileSync } from "node:fs";
28
- import { basename, dirname, join, relative, resolve } from "node:path";
29
- import { Effect } from "effect";
30
- import { EventEmitter } from "node:events";
3
+ import { openResolution } from "./resolution/session.mjs";
4
+ import { DatabaseBindings, makeDatabaseBindings } from "./db/bindings.mjs";
5
+ import { DrizzleKit, makeDrizzleKitLive } from "./db/drizzle-kit.mjs";
6
+ import { BosDepsTag } from "./commands/shared.mjs";
7
+ import { registerBuild } from "./commands/build.mjs";
8
+ import { registerConfig, resolveRemoteConfigChain } from "./commands/config.mjs";
9
+ import { registerDb } from "./commands/db.mjs";
10
+ import { registerDeploy } from "./commands/deploy.mjs";
11
+ import { ProjectEnv, ProjectEnvLive } from "./env/project-env.mjs";
12
+ import { pluginEvents } from "./progress.mjs";
13
+ import { registerDev } from "./commands/dev.mjs";
14
+ import { registerInit } from "./commands/init.mjs";
15
+ import { registerKeys } from "./commands/keys.mjs";
16
+ import { registerOps } from "./commands/ops.mjs";
17
+ import { registerPlugins } from "./commands/plugins.mjs";
18
+ import { registerUpgrade } from "./commands/upgrade.mjs";
19
+ import { Context, Effect, Layer } from "effect";
20
+ import { buildScoped, buildScopedContext } from "every-plugin";
31
21
  import process from "node:process";
32
- import { createInterface } from "node:readline/promises";
22
+ import * as p from "@clack/prompts";
33
23
 
34
24
  //#region src/plugin.ts
35
- const pluginEvents = new EventEmitter();
36
- let pendingSession = null;
37
- let pendingStartSummary = null;
38
- function consumeDevSession() {
39
- const data = pendingSession;
40
- const summary = pendingStartSummary;
41
- pendingSession = null;
42
- pendingStartSummary = null;
43
- if (!data) return null;
44
- return summary ? {
45
- ...data,
46
- summary
47
- } : data;
48
- }
49
- async function timePhase(timings, name, fn) {
50
- pluginEvents.emit("progress", {
51
- phase: name,
52
- status: "running"
53
- });
54
- const startedAt = Date.now();
55
- try {
56
- const result = await fn();
57
- timings.push({
58
- name,
59
- durationMs: Date.now() - startedAt
60
- });
61
- pluginEvents.emit("progress", {
62
- phase: name,
63
- status: "done",
64
- durationMs: Date.now() - startedAt
65
- });
66
- return result;
67
- } catch (error) {
68
- pluginEvents.emit("progress", {
69
- phase: name,
70
- status: "error",
71
- durationMs: Date.now() - startedAt
72
- });
73
- throw error;
74
- }
75
- }
76
- const PUBLISH_FUNCTION_NAMES = ["__fastdata_kv"];
77
- function parseSourceMode(value, defaultValue) {
78
- if (value === "local" || value === "remote") return value;
79
- return defaultValue;
80
- }
81
- function buildConfigResult(bosConfig, full = false) {
82
- const packages = bosConfig?.app && typeof bosConfig.app === "object" ? Object.keys(bosConfig.app) : [];
83
- const remotes = packages.filter((name) => name !== "host");
84
- return {
85
- config: bosConfig ?? null,
86
- packages,
87
- remotes,
88
- full
89
- };
90
- }
91
- function isValidProxyUrl(url) {
92
- try {
93
- const parsed = new URL(url);
94
- return parsed.protocol === "http:" || parsed.protocol === "https:";
95
- } catch {
96
- return false;
97
- }
98
- }
99
- function resolveProxyUrl(bosConfig) {
100
- if (!bosConfig) return null;
101
- const apiConfig = bosConfig.app.api;
102
- if (!apiConfig) return null;
103
- if (apiConfig.proxy && isValidProxyUrl(apiConfig.proxy)) return apiConfig.proxy;
104
- if (apiConfig.production && isValidProxyUrl(apiConfig.production)) return apiConfig.production;
105
- return null;
106
- }
107
- function sanitizePluginKey(value) {
108
- return value.replace(/[^A-Za-z0-9/_-]/g, "-").replace(/\/+/g, "/").split("/").filter(Boolean).map((segment) => segment.replace(/[^A-Za-z0-9_-]/g, "-")).join("/").replace(/^\/+|\/+$/g, "");
109
- }
110
- function defaultPluginKey(source) {
111
- const normalized = source.replace(/^local:/, "").replace(/\/$/, "");
112
- if (source.startsWith("local:")) return sanitizePluginKey(basename(normalized)) || "plugin";
113
- try {
114
- const url = new URL(source);
115
- return sanitizePluginKey(basename(url.pathname) || url.hostname) || "plugin";
116
- } catch {
117
- return sanitizePluginKey(source) || "plugin";
118
- }
119
- }
120
- function pluginLocalPath(configDir, attachment) {
121
- const ref = getPluginRef(attachment);
122
- const source = ref?.development ?? ref?.production;
123
- if (!source?.startsWith("local:")) return null;
124
- return join(configDir, source.slice(6));
125
- }
126
- function listPluginAttachments(config) {
127
- return Object.entries(config?.plugins ?? {}).map(([key, attachment]) => {
128
- const ref = getPluginRef(attachment);
129
- return {
130
- key,
131
- development: ref?.development,
132
- production: ref?.production,
133
- localPath: ref?.development?.startsWith("local:") ? ref.development.slice(6) : void 0,
134
- source: ref?.development?.startsWith("local:") ? "local" : "remote",
135
- integrity: ref?.integrity,
136
- version: ref?.version,
137
- name: ref?.name
138
- };
139
- }).sort((a, b) => a.key.localeCompare(b.key));
140
- }
141
- async function resolveRemoteConfigChain(accountId, gatewayId, visited) {
142
- const selfRef = `bos://${accountId}/${gatewayId}`;
143
- if (visited.has(selfRef)) throw new Error(`Circular extends detected: ${selfRef}`);
144
- const nextVisited = new Set(visited);
145
- nextVisited.add(selfRef);
146
- const config = await fetchBosConfigFromFastKv(selfRef);
147
- const parentRef = config.extends ? resolveExtendsRef(config.extends, "production") : void 0;
148
- let merged;
149
- if (!parentRef) merged = config;
150
- else {
151
- const { accountId: parentAccountId, gatewayId: parentGatewayId } = parseBosUrl(parentRef);
152
- merged = mergeBosConfigWithExtends(await resolveRemoteConfigChain(parentAccountId, parentGatewayId, nextVisited), config);
153
- }
154
- return resolveConfigComposableEntries(BosConfigSchema.parse(merged), process.cwd(), "production");
155
- }
156
- async function fetchPublishedConfig(accountId, gatewayId) {
157
- try {
158
- return await resolveRemoteConfigChain(accountId, gatewayId, /* @__PURE__ */ new Set());
159
- } catch (error) {
160
- if (error instanceof Error && error.message.startsWith("No config found")) return null;
161
- throw error;
162
- }
163
- }
164
25
  var plugin_default = createPlugin({
165
- variables: z.object({ configPath: z.string().optional() }),
26
+ variables: z.object({
27
+ configPath: z.string().optional(),
28
+ configDir: z.string().optional()
29
+ }),
166
30
  secrets: z.object({}),
167
31
  contract: bosContract,
168
- initialize: (config) => Effect.promise(async () => {
169
- const configResult = await loadResolvedConfig({ path: config.variables.configPath });
170
- return {
171
- bosConfig: configResult?.config ?? null,
172
- runtimeConfig: configResult?.runtime ?? null,
173
- configDir: getProjectRoot()
174
- };
32
+ initialize: (config, _plugins) => Effect.gen(function* () {
33
+ const session = yield* Effect.promise(() => openResolution({ path: config.variables.configPath }));
34
+ const projectEnv = yield* buildScoped(ProjectEnv, ProjectEnvLive);
35
+ const effectContext = yield* Effect.context();
36
+ const configDir = config.variables.configDir ?? session?.root ?? process.cwd();
37
+ const services = yield* buildScopedContext(Layer.mergeAll(makeDatabaseBindings({
38
+ projectDir: configDir,
39
+ loadRuntimeConfig: async () => await session?.buildRuntime() ?? null,
40
+ loadEnv: () => Effect.runPromiseWith(effectContext)(projectEnv.load(configDir))
41
+ }), makeDrizzleKitLive({
42
+ projectDir: configDir,
43
+ onLog: (message) => p.log.info(message)
44
+ })));
45
+ return Layer.succeed(BosDepsTag, {
46
+ session,
47
+ databaseBindings: Context.get(services, DatabaseBindings),
48
+ drizzleKit: Context.get(services, DrizzleKit)
49
+ });
175
50
  }),
176
- shutdown: () => Effect.void,
177
- createRouter: (deps, builder) => ({
178
- config: builder.config.handler(async ({ input }) => {
179
- if (input.full) return buildConfigResult(deps.bosConfig, true);
180
- return buildConfigResult((await loadLocalConfig({ cwd: deps.configDir }))?.config ?? null, false);
181
- }),
182
- pluginAdd: builder.pluginAdd.handler(async ({ input }) => {
183
- if (!deps.bosConfig) return {
184
- status: "error",
185
- key: "",
186
- error: "No bos.config.json found"
187
- };
188
- const isBosRef = input.source.startsWith("bos://");
189
- const isLocal = input.source.startsWith("local:");
190
- const key = sanitizePluginKey(input.as ?? (isBosRef ? input.source.split("/").pop() ?? "plugin" : defaultPluginKey(input.source)));
191
- const existing = deps.bosConfig.plugins?.[key];
192
- const existingEntry = existing && typeof existing === "object" ? existing : {};
193
- const nextPlugins = { ...deps.bosConfig.plugins ?? {} };
194
- if (isBosRef) nextPlugins[key] = {
195
- ...existingEntry,
196
- extends: input.source
197
- };
198
- else if (isLocal) nextPlugins[key] = {
199
- ...existingEntry,
200
- development: input.source,
201
- ...existingEntry.extends ? {} : {}
202
- };
203
- else nextPlugins[key] = {
204
- ...existingEntry,
205
- production: input.production ?? input.source
206
- };
207
- deps.bosConfig = {
208
- ...deps.bosConfig,
209
- plugins: nextPlugins
210
- };
211
- await saveBosConfig(deps.configDir, deps.bosConfig);
212
- await generateCodeArtifacts(deps.configDir, deps.bosConfig);
213
- const stored = deps.bosConfig.plugins?.[key];
214
- const storedObj = stored && typeof stored === "object" ? stored : {};
215
- return {
216
- status: "added",
217
- key,
218
- development: storedObj.development,
219
- production: storedObj.production,
220
- integrity: storedObj.integrity,
221
- version: storedObj.version
222
- };
223
- }),
224
- pluginRemove: builder.pluginRemove.handler(async ({ input }) => {
225
- if (!deps.bosConfig) return {
226
- status: "error",
227
- key: input.key,
228
- error: "No bos.config.json found"
229
- };
230
- if (!deps.bosConfig.plugins?.[input.key]) return {
231
- status: "error",
232
- key: input.key,
233
- error: `Plugin '${input.key}' is not configured`
234
- };
235
- const nextPlugins = { ...deps.bosConfig.plugins ?? {} };
236
- delete nextPlugins[input.key];
237
- deps.bosConfig = {
238
- ...deps.bosConfig,
239
- plugins: Object.keys(nextPlugins).length > 0 ? nextPlugins : void 0
240
- };
241
- await saveBosConfig(deps.configDir, deps.bosConfig);
242
- await generateCodeArtifacts(deps.configDir, deps.bosConfig);
243
- return {
244
- status: "removed",
245
- key: input.key
246
- };
247
- }),
248
- pluginList: builder.pluginList.handler(async () => {
249
- return {
250
- status: "listed",
251
- plugins: listPluginAttachments(deps.bosConfig)
252
- };
253
- }),
254
- pluginPublish: builder.pluginPublish.handler(async ({ input }) => {
255
- if (!deps.bosConfig) return {
256
- status: "error",
257
- key: input.key,
258
- error: "No bos.config.json found"
259
- };
260
- const attachment = deps.bosConfig.plugins?.[input.key];
261
- if (!attachment) return {
262
- status: "error",
263
- key: input.key,
264
- error: `Plugin '${input.key}' is not configured`
265
- };
266
- const attachmentRef = getPluginRef(attachment);
267
- const localPath = pluginLocalPath(deps.configDir, attachment);
268
- if (!localPath) return {
269
- status: "error",
270
- key: input.key,
271
- error: `Plugin '${input.key}' does not have a local development path`
272
- };
273
- const pkgPath = join(localPath, "package.json");
274
- if (!await fileExists(pkgPath)) return {
275
- status: "error",
276
- key: input.key,
277
- error: `Missing package.json at ${localPath}`
278
- };
279
- const pkgJson = await readJsonFile(pkgPath);
280
- const script = pkgJson.scripts?.deploy ? "deploy" : "build";
281
- const { stdout, stderr, exitCode } = await run("bun", ["run", script], {
282
- cwd: localPath,
283
- capture: true
284
- });
285
- if (exitCode !== 0) {
286
- if (stdout.trim()) process.stdout.write(stdout);
287
- if (stderr.trim()) process.stderr.write(stderr);
288
- return {
289
- status: "error",
290
- key: input.key,
291
- error: `Publish failed with exit code ${exitCode}`
292
- };
293
- }
294
- if (stdout.trim()) process.stdout.write(stdout);
295
- if (stderr.trim()) process.stderr.write(stderr);
296
- const output = `${stdout}\n${stderr}`;
297
- const deployEntry = parseDeployLines(output).find((e) => e.urlField === `plugins.${input.key}.production`);
298
- let publishedUrl;
299
- let integrity;
300
- if (deployEntry) {
301
- publishedUrl = deployEntry.url;
302
- integrity = deployEntry.integrity;
303
- } else {
304
- publishedUrl = extractPublishedUrl(output) ?? void 0;
305
- integrity = publishedUrl ? await computeSriHashForUrl(publishedUrl) ?? void 0 : void 0;
306
- }
307
- let manifest = null;
308
- if (publishedUrl) manifest = await fetchRemotePluginManifest(publishedUrl);
309
- else if (attachmentRef?.production) {
310
- manifest = await fetchRemotePluginManifest(attachmentRef.production);
311
- if (manifest) publishedUrl = attachmentRef.production;
312
- }
313
- const version = manifest?.plugin.version ?? pkgJson.version;
314
- if (publishedUrl) {
315
- const rootConfigPath = join(deps.configDir, "bos.config.json");
316
- try {
317
- const rootConfig = JSON.parse(readFileSync(rootConfigPath, "utf-8"));
318
- if (!rootConfig.plugins || typeof rootConfig.plugins !== "object") rootConfig.plugins = {};
319
- const plugins = rootConfig.plugins;
320
- if (!plugins[input.key] || typeof plugins[input.key] !== "object") plugins[input.key] = {};
321
- const entry = plugins[input.key];
322
- entry.production = publishedUrl;
323
- if (integrity) entry.integrity = integrity;
324
- else delete entry.integrity;
325
- writeFileSync(rootConfigPath, `${JSON.stringify(rootConfig, null, 2)}\n`);
326
- console.log(` ✅ Updated bos.config.json: plugins.${input.key}.production`);
327
- } catch (err) {
328
- console.error(` ❌ Failed to update bos.config.json:`, err instanceof Error ? err.message : err);
329
- }
330
- await generateCodeArtifacts(deps.configDir, deps.bosConfig);
331
- }
332
- return {
333
- status: "published",
334
- key: input.key,
335
- path: localPath,
336
- script,
337
- production: publishedUrl ?? attachmentRef?.production,
338
- integrity: integrity ?? void 0,
339
- version: version ?? void 0
340
- };
341
- }),
342
- dev: builder.dev.handler(async ({ input }) => {
343
- const devTimings = [];
344
- ensureEnvFile(deps.configDir);
345
- loadProjectEnv(deps.configDir);
346
- const localPackages = detectLocalPackages(deps.bosConfig ?? void 0, deps.runtimeConfig ?? void 0);
347
- const hostSource = localPackages.includes("host") ? parseSourceMode(input.host, "local") : "remote";
348
- const uiSource = localPackages.includes("ui") ? parseSourceMode(input.ui, "local") : "remote";
349
- const apiSource = localPackages.includes("api") ? parseSourceMode(input.api, "local") : "remote";
350
- const authSource = localPackages.includes("auth") ? parseSourceMode(input.auth, "local") : "remote";
351
- const ssr = input.ssr ?? false;
352
- const proxy = input.proxy ?? false;
353
- const sharedSync = await timePhase(devTimings, "shared deps", () => syncResolvedSharedDeps({
354
- configDir: deps.configDir,
355
- hostMode: hostSource,
356
- bosConfig: deps.bosConfig ?? void 0,
357
- extendsChain: []
358
- }));
359
- let configMayHaveChanged = false;
360
- if (sharedSync.catalogChanged) {
361
- await timePhase(devTimings, "install", () => run("bun", ["install"], { cwd: deps.configDir }));
362
- configMayHaveChanged = true;
363
- }
364
- const shouldBuildPlugin = apiSource === "local" && !proxy || localPackages.some((pkg) => pkg.startsWith("plugin:"));
365
- await timePhase(devTimings, "build", async () => {
366
- const buildTasks = [buildEverythingDevQuietly(deps.configDir)];
367
- if (shouldBuildPlugin) buildTasks.push(buildEveryPluginQuietly(deps.configDir));
368
- await Promise.all(buildTasks);
369
- });
370
- let devExtendsChain;
371
- if (configMayHaveChanged || input.remotePlugins !== void 0) {
372
- const refreshed = await timePhase(devTimings, "resolve config", () => loadResolvedConfig({
373
- cwd: deps.configDir,
374
- remotePlugins: input.remotePlugins
375
- }));
376
- deps.bosConfig = refreshed?.config ?? deps.bosConfig;
377
- deps.runtimeConfig = refreshed?.runtime ?? deps.runtimeConfig;
378
- devExtendsChain = refreshed?.source.extended;
379
- }
380
- if (!deps.bosConfig) return {
381
- status: "error",
382
- description: "No bos.config.json found",
383
- processes: [],
384
- timings: devTimings
385
- };
386
- if (proxy && !resolveProxyUrl(deps.bosConfig)) return {
387
- status: "error",
388
- description: "No valid proxy URL configured in bos.config.json",
389
- processes: [],
390
- timings: devTimings
391
- };
392
- suppressWarnings();
393
- const developmentRuntime = await buildRuntimeConfig(deps.bosConfig, {
394
- uiSource,
395
- apiSource,
396
- authSource,
397
- hostSource,
398
- env: "development",
399
- plugins: deps.runtimeConfig?.plugins
400
- });
401
- drainConfigWarnings();
402
- resumeWarnings();
403
- const plan = await timePhase(devTimings, "ports", () => Effect.runPromise(planInfra({
404
- configDir: deps.configDir,
405
- bosConfig: developmentRuntime,
406
- cli: {
407
- port: input.port,
408
- apiPort: input.apiPort,
409
- authPort: input.authPort,
410
- uiPort: input.uiPort,
411
- pluginPortStart: input.pluginPortStart,
412
- ssr,
413
- proxy,
414
- hostSource,
415
- uiSource,
416
- apiSource,
417
- authSource,
418
- interactive: input.interactive
419
- }
420
- }).pipe(Effect.provide(PortAllocatorLive))));
421
- const mergedEnv = { ...plan.envGenerated };
422
- for (const [k, v] of Object.entries(process.env)) if (v != null && !(k in plan.envGenerated)) mergedEnv[k] = v;
423
- const preflightFailures = await Effect.runPromise(preflightLocalInfra(plan.envGenerated, mergedEnv));
424
- if (preflightFailures.length > 0) return {
425
- status: "error",
426
- description: `Infra preflight failed: ${preflightFailures.map((f) => f.error).join("; ")}`,
427
- processes: [],
428
- timings: devTimings
429
- };
430
- const services = buildServiceDescriptorMapFromPlan(plan, {
431
- ssr,
432
- proxy
433
- });
434
- writeGeneratedInfra(deps.configDir, plan.runtimeConfig);
435
- ensureEnvFile(deps.configDir);
436
- loadProjectEnv(deps.configDir);
437
- const packages = [...plan.serviceDescriptors.keys()];
438
- if (process.env.DEBUG === "true" || process.env.DEBUG === "1") console.error("[DEBUG dev] services keys:", packages.join(", "));
439
- if (services.get("api")?.proxy) {
440
- const proxyUrl = resolveProxyUrl(deps.bosConfig);
441
- if (proxyUrl) plan.orchestrator.env.API_PROXY = proxyUrl;
442
- }
443
- pendingSession = {
444
- orchestrator: plan.orchestrator,
445
- services,
446
- runtimeConfig: plan.runtimeConfig
447
- };
448
- await timePhase(devTimings, "generate artifacts", () => generateCodeArtifacts(deps.configDir, deps.bosConfig, {
449
- env: "development",
450
- extendsChain: devExtendsChain,
451
- runtimeConfig: plan.runtimeConfig
452
- }));
453
- return {
454
- status: "started",
455
- description: buildDescription(services) || plan.description,
456
- processes: packages,
457
- timings: devTimings
458
- };
459
- }),
460
- start: builder.start.handler(async ({ input }) => {
461
- ensureEnvFile(deps.configDir);
462
- loadProjectEnv(deps.configDir);
463
- pluginEvents.emit("progress", {
464
- phase: "config",
465
- status: "running"
466
- });
467
- const bosEnv = input.env ?? (process.env.BOS_ENV === "staging" ? "staging" : "production");
468
- const account = input.account ?? process.env.BOS_ACCOUNT;
469
- const domain = input.domain ?? process.env.BOS_GATEWAY;
470
- let config = null;
471
- let remoteConfig = null;
472
- if (account && domain) try {
473
- remoteConfig = await fetchPublishedConfig(account, domain);
474
- if (remoteConfig) config = remoteConfig;
475
- else return {
476
- status: "error",
477
- url: "",
478
- error: `No config found at bos://${account}/${domain}. Verify the account and gateway are correct and the config has been published.\nExpected URL: ${buildRegistryConfigUrl(account, domain)}`
479
- };
480
- } catch (error) {
481
- return {
482
- status: "error",
483
- url: "",
484
- error: `Failed to fetch config for bos://${account}/${domain}: ${error instanceof Error ? error.message : "Unknown error"}\nExpected URL: ${buildRegistryConfigUrl(account, domain)}`
485
- };
486
- }
487
- else config = deps.bosConfig;
488
- if (!config) return {
489
- status: "error",
490
- url: "",
491
- error: "No configuration found. Provide --account and --gateway flags, or create a local bos.config.json."
492
- };
493
- if (account) config = {
494
- ...config,
495
- account
496
- };
497
- if (domain) config = {
498
- ...config,
499
- domain
500
- };
501
- const port = input.port ?? getHostDevelopmentPort(config.app.host.development);
502
- const isStaging = bosEnv === "staging";
503
- const runtimePlugins = await buildRuntimePluginsForConfig(config, deps.configDir, "production");
504
- suppressWarnings();
505
- const runtimeConfig = await buildRuntimeConfig(config, {
506
- uiSource: "remote",
507
- apiSource: "remote",
508
- authSource: "remote",
509
- hostSource: "remote",
510
- env: "production",
511
- plugins: runtimePlugins
512
- });
513
- drainConfigWarnings();
514
- resumeWarnings();
515
- if (isStaging && config.staging?.domain) runtimeConfig.domain = config.staging.domain;
516
- if (isStaging) runtimeConfig.env = "staging";
517
- syncGeneratedInfra(deps.configDir, runtimeConfig);
518
- ensureEnvFile(deps.configDir);
519
- loadProjectEnv(deps.configDir);
520
- pluginEvents.emit("progress", {
521
- phase: "generate artifacts",
522
- status: "running"
523
- });
524
- await generateCodeArtifacts(deps.configDir, config, {
525
- env: "production",
526
- runtimeConfig
527
- });
528
- pluginEvents.emit("progress", {
529
- phase: "generate artifacts",
530
- status: "done"
531
- });
532
- const productionEnv = {};
533
- const warnings = [];
534
- if (!process.env.CORS_ORIGIN && config.domain) {
535
- const defaultOrigin = `https://${isStaging ? config.staging?.domain ?? config.domain : config.domain}`;
536
- productionEnv.CORS_ORIGIN = defaultOrigin;
537
- warnings.push(`CORS_ORIGIN defaulting to ${defaultOrigin}`);
538
- }
539
- const requiredSecrets = /* @__PURE__ */ new Set();
540
- const missingSecrets = [];
541
- if (runtimeConfig.host.secrets) for (const s of runtimeConfig.host.secrets) requiredSecrets.add(s);
542
- if (runtimeConfig.auth?.secrets) for (const s of runtimeConfig.auth.secrets) requiredSecrets.add(s);
543
- if (runtimeConfig.api?.secrets) for (const s of runtimeConfig.api.secrets) requiredSecrets.add(s);
544
- for (const plugin of Object.values(runtimeConfig.plugins ?? {})) if (plugin.secrets) for (const s of plugin.secrets) requiredSecrets.add(s);
545
- for (const secret of requiredSecrets) {
546
- const value = process.env[secret];
547
- if (!value || value.length === 0) missingSecrets.push(secret);
548
- }
549
- if (missingSecrets.length > 0) warnings.push(`Missing ${missingSecrets.length} secret(s): ${missingSecrets.join(", ")}`);
550
- const stagingEnvVars = isStaging ? { BOS_GATEWAY: config.staging?.domain ?? config.domain ?? "" } : {};
551
- const plan = await Effect.runPromise(planInfra({
552
- configDir: deps.configDir,
553
- bosConfig: runtimeConfig,
554
- cli: {
555
- port: input.port,
556
- ssr: false,
557
- proxy: false,
558
- hostSource: "remote",
559
- uiSource: "remote",
560
- apiSource: "remote",
561
- authSource: "remote",
562
- interactive: input.interactive
563
- }
564
- }).pipe(Effect.provide(PortAllocatorLive)));
565
- const services = buildServiceDescriptorMap(plan.runtimeConfig);
566
- const summary = {
567
- configSource: remoteConfig ? `bos://${account}/${domain}` : findConfigPath() ?? "bos.config.json",
568
- configSourceHttp: remoteConfig && account && domain ? buildRegistryConfigUrl(account, domain) : void 0,
569
- account: config.account,
570
- domain: config.domain ?? void 0,
571
- modules: {
572
- host: plan.runtimeConfig.host.remoteUrl ?? plan.runtimeConfig.host.url ?? "local",
573
- ui: plan.runtimeConfig.ui.url ?? "local",
574
- api: plan.runtimeConfig.api.url ?? "local",
575
- auth: plan.runtimeConfig.auth?.url ?? void 0
576
- },
577
- warnings
578
- };
579
- pendingSession = {
580
- orchestrator: {
581
- packages: ["host"],
582
- env: {
583
- NODE_ENV: "production",
584
- ...productionEnv,
585
- ...stagingEnvVars,
586
- ...plan.launch.env
587
- },
588
- description: `${isStaging ? "Staging" : "Production"} Mode (${config.account})`,
589
- port: plan.resolvedPorts.host ?? port,
590
- interactive: input.interactive,
591
- noLogs: true
592
- },
593
- services,
594
- runtimeConfig: plan.runtimeConfig
595
- };
596
- pendingStartSummary = summary;
597
- pluginEvents.emit("progress", {
598
- phase: "config",
599
- status: "done"
600
- });
601
- return {
602
- status: "running",
603
- url: plan.launch.hostUrl ?? `http://localhost:${plan.resolvedPorts.host ?? port}`
604
- };
605
- }),
606
- build: builder.build.handler(async ({ input }) => {
607
- if (!deps.bosConfig) return {
608
- status: "error",
609
- built: [],
610
- skipped: []
611
- };
612
- const buildEnv = input.deploy ? "production" : "development";
613
- const targets = selectWorkspaceTargets(input.packages, deps.bosConfig);
614
- if (targets.length === 0) return {
615
- status: "error",
616
- built: [],
617
- skipped: []
618
- };
619
- suppressWarnings();
620
- const runtimeConfig = await buildRuntimeConfig(deps.bosConfig, {
621
- uiSource: deps.bosConfig.app.ui?.development ? "local" : "remote",
622
- apiSource: deps.bosConfig.app.api?.development ? "local" : "remote",
623
- authSource: deps.bosConfig.app.auth?.development ? "local" : "remote",
624
- hostSource: deps.bosConfig.app.host?.development ? "local" : "remote",
625
- env: buildEnv,
626
- plugins: deps.runtimeConfig?.plugins
627
- });
628
- drainConfigWarnings();
629
- resumeWarnings();
630
- await generateCodeArtifacts(deps.configDir, deps.bosConfig, {
631
- env: buildEnv,
632
- runtimeConfig
633
- });
634
- const { built, skipped } = await buildWorkspaceTargets({
635
- configDir: deps.configDir,
636
- bosConfig: deps.bosConfig,
637
- runtimeConfig,
638
- targets,
639
- deploy: input.deploy
640
- });
641
- if (built.length === 0) return {
642
- status: "error",
643
- built: [],
644
- skipped
645
- };
646
- return {
647
- status: "success",
648
- built,
649
- skipped,
650
- deployed: input.deploy
651
- };
652
- }),
653
- publish: builder.publish.handler(async ({ input }) => {
654
- if (!deps.bosConfig) return {
655
- status: "error",
656
- registryUrl: "",
657
- error: "No bos.config.json found"
658
- };
659
- const result = await publishToFastKv({
660
- bosConfig: deps.bosConfig,
661
- runtimeConfig: deps.runtimeConfig,
662
- configDir: deps.configDir,
663
- env: input.env,
664
- build: input.deploy,
665
- dryRun: input.dryRun,
666
- verbose: input.verbose,
667
- packages: input.packages,
668
- network: input.network,
669
- privateKey: input.privateKey
670
- });
671
- if (result.publishConfig) {
672
- const refreshed = await loadResolvedConfig({ cwd: deps.configDir });
673
- if (refreshed?.config) {
674
- deps.bosConfig = refreshed.config;
675
- deps.runtimeConfig = refreshed.runtime;
676
- }
677
- }
678
- return {
679
- status: result.status,
680
- registryUrl: result.registryUrl,
681
- txHash: result.txHash,
682
- error: result.error,
683
- built: result.built,
684
- skipped: result.skipped,
685
- deployResults: result.deployResults
686
- };
687
- }),
688
- deploy: builder.deploy.handler(async ({ input }) => {
689
- if (!deps.bosConfig) return {
690
- status: "error",
691
- registryUrl: "",
692
- redeployed: false,
693
- error: "No bos.config.json found"
694
- };
695
- const result = await publishToFastKv({
696
- bosConfig: deps.bosConfig,
697
- runtimeConfig: deps.runtimeConfig,
698
- configDir: deps.configDir,
699
- env: input.env,
700
- build: input.build,
701
- dryRun: input.dryRun,
702
- verbose: input.verbose,
703
- packages: input.packages,
704
- network: input.network,
705
- privateKey: input.privateKey
706
- });
707
- if (result.status === "error") return {
708
- status: "error",
709
- registryUrl: result.registryUrl,
710
- txHash: result.txHash,
711
- built: result.built,
712
- skipped: result.skipped,
713
- redeployed: false,
714
- error: result.error,
715
- deployResults: result.deployResults
716
- };
717
- if (result.status === "dry-run") return {
718
- status: "dry-run",
719
- registryUrl: result.registryUrl,
720
- built: result.built,
721
- skipped: result.skipped,
722
- redeployed: false
723
- };
724
- if (result.publishConfig) {
725
- const refreshed = await loadResolvedConfig({ cwd: deps.configDir });
726
- if (refreshed?.config) {
727
- deps.bosConfig = refreshed.config;
728
- deps.runtimeConfig = refreshed.runtime;
729
- }
730
- }
731
- let redeployed = false;
732
- let service;
733
- if (process.env.RAILWAY_TOKEN) {
734
- const railwayService = input.service ?? deps.bosConfig.ci?.railway?.service;
735
- if (!railwayService) {
736
- console.log();
737
- console.log(colors.yellow(" Railway redeploy skipped: ci.railway.service is not configured in bos.config.json"));
738
- return {
739
- status: "published",
740
- registryUrl: result.registryUrl,
741
- txHash: result.txHash,
742
- built: result.built,
743
- skipped: result.skipped,
744
- redeployed: false,
745
- deployResults: result.deployResults,
746
- error: "Config published but Railway redeploy failed: ci.railway.service is not configured in bos.config.json"
747
- };
748
- }
749
- service = railwayService;
750
- console.log();
751
- console.log(` Redeploying Railway service ${colors.cyan(railwayService)}...`);
752
- try {
753
- const railResult = await run("railway", [
754
- "redeploy",
755
- "--service",
756
- railwayService,
757
- "--yes"
758
- ], { capture: true });
759
- if (railResult?.stdout) {
760
- for (const line of railResult.stdout.split("\n")) if (line.trim()) console.log(` ${colors.dim(line.trim())}`);
761
- }
762
- redeployed = true;
763
- console.log(colors.green(` Railway redeploy complete`));
764
- } catch (error) {
765
- const message = error instanceof Error ? error.message : String(error);
766
- const railError = message.includes("not found") || message.includes("ENOENT") ? "Railway CLI not found. Install it: npm i -g @railway/cli" : `Railway redeploy failed: ${message}`;
767
- console.log(colors.yellow(` ${railError}`));
768
- return {
769
- status: "published",
770
- registryUrl: result.registryUrl,
771
- txHash: result.txHash,
772
- built: result.built,
773
- skipped: result.skipped,
774
- redeployed: false,
775
- service,
776
- deployResults: result.deployResults,
777
- error: `Config published but ${railError}`
778
- };
779
- }
780
- } else {
781
- console.log();
782
- console.log(colors.yellow(" Railway redeploy skipped (RAILWAY_TOKEN not set)"));
783
- }
784
- return {
785
- status: "deployed",
786
- registryUrl: result.registryUrl,
787
- txHash: result.txHash,
788
- built: result.built,
789
- skipped: result.skipped,
790
- redeployed,
791
- service,
792
- deployResults: result.deployResults
793
- };
794
- }),
795
- keyPublish: builder.keyPublish.handler(async ({ input }) => {
796
- if (!deps.bosConfig) return {
797
- status: "error",
798
- account: "",
799
- network: "mainnet",
800
- contract: "",
801
- allowance: input.allowance,
802
- functionNames: PUBLISH_FUNCTION_NAMES,
803
- error: "No bos.config.json found"
804
- };
805
- const account = deps.bosConfig.account;
806
- const network = getNetworkIdForAccount(account);
807
- const contract = getRegistryNamespaceForAccount(account);
808
- try {
809
- await Effect.runPromise(ensureNearCli);
810
- const oldKeys = await listPublishKeys({
811
- account,
812
- contract,
813
- network
814
- });
815
- const keyPair = await addFunctionCallAccessKey({
816
- account,
817
- contract,
818
- allowance: input.allowance,
819
- functionNames: PUBLISH_FUNCTION_NAMES,
820
- network
821
- });
822
- if (oldKeys.length > 0) {
823
- console.log();
824
- console.log(` Found ${oldKeys.length} existing publish key${oldKeys.length > 1 ? "s" : ""}:`);
825
- for (const k of oldKeys) console.log(` ${colors.dim(k)}`);
826
- const rl = createInterface({
827
- input: process.stdin,
828
- output: process.stdout
829
- });
830
- const answer = await rl.question(" Remove old key(s)? [Y/n] ");
831
- rl.close();
832
- if (answer.toLowerCase() !== "n" && answer.toLowerCase() !== "no") try {
833
- await deleteAccessKeys(account, oldKeys, network);
834
- console.log(` ${colors.green("✓")} Removed ${oldKeys.length} old key${oldKeys.length > 1 ? "s" : ""}`);
835
- } catch {
836
- console.log(` ${colors.yellow("⚠")} Failed to remove old key${oldKeys.length > 1 ? "s" : ""} (new key still active)`);
837
- }
838
- else console.log(` ${colors.dim("Old key(s) retained.")}`);
839
- }
840
- return {
841
- status: "published",
842
- account,
843
- network,
844
- contract,
845
- allowance: input.allowance,
846
- functionNames: PUBLISH_FUNCTION_NAMES,
847
- publicKey: keyPair.publicKey,
848
- privateKey: keyPair.privateKey
849
- };
850
- } catch (error) {
851
- return {
852
- status: "error",
853
- account,
854
- network,
855
- contract,
856
- allowance: input.allowance,
857
- functionNames: PUBLISH_FUNCTION_NAMES,
858
- error: error instanceof Error ? error.message : "Unknown error"
859
- };
860
- }
861
- }),
862
- init: builder.init.handler(async ({ input }) => {
863
- try {
864
- const timings = [];
865
- let extendsAccount = "";
866
- let extendsGateway = "";
867
- let directory = input.directory;
868
- const account = input.account;
869
- const domain = input.domain;
870
- let overrides = input.overrides;
871
- let plugins = input.plugins;
872
- if (input.extends) {
873
- const match = (input.extends.startsWith("bos://") ? input.extends : `bos://${input.extends}`).match(/^bos:\/\/([^/]+)\/(.+)$/);
874
- if (match) {
875
- extendsAccount = match[1];
876
- extendsGateway = match[2];
877
- }
878
- }
879
- extendsAccount = extendsAccount || "dev.everything.near";
880
- extendsGateway = extendsGateway || "everything.dev";
881
- let parentPluginKeys = [];
882
- let parentConfig = null;
883
- try {
884
- parentConfig = await timePhase(timings, "parent config", () => fetchParentConfig(extendsAccount, extendsGateway));
885
- if (parentConfig?.plugins && typeof parentConfig.plugins === "object") parentPluginKeys = Object.keys(parentConfig.plugins);
886
- } catch (e) {
887
- console.warn(`[init] Failed to fetch parent config from ${extendsAccount}/${extendsGateway}: ${e instanceof Error ? e.message : e}`);
888
- }
889
- overrides = overrides?.length ? overrides : ["ui", "api"];
890
- if (overrides.includes("plugins") && plugins === void 0) plugins = parentPluginKeys;
891
- plugins = plugins ?? [];
892
- const pluginDirMap = {};
893
- if (parentConfig?.plugins) for (const plugin of plugins) {
894
- const entry = parentConfig.plugins?.[plugin];
895
- if (entry && typeof entry === "object") {
896
- const dev = entry.development;
897
- if (typeof dev === "string") {
898
- const match = dev.match(/^local:plugins\/(.+)$/);
899
- if (match?.[1] && match[1] !== plugin) pluginDirMap[plugin] = match[1];
900
- }
901
- }
902
- }
903
- directory = directory || domain || extendsGateway;
904
- const targetDir = resolve(directory);
905
- const extendsRef = `bos://${extendsAccount}/${extendsGateway}`;
906
- const repository = await detectGitRemoteUrl(process.cwd()).catch(() => void 0) ?? parentConfig?.repository;
907
- if (!parentConfig) try {
908
- parentConfig = await timePhase(timings, "parent config", () => fetchParentConfig(extendsAccount, extendsGateway));
909
- } catch {
910
- return {
911
- status: "error",
912
- directory,
913
- extendsRef,
914
- account,
915
- domain,
916
- extends: extendsRef,
917
- plugins,
918
- overrides,
919
- filesCopied: 0,
920
- timings,
921
- error: `No config found at ${extendsRef} — are you sure this is the right parent?`
922
- };
923
- }
924
- const { sourceDir, parentConfig: resolvedParentConfig, cleanup } = await timePhase(timings, "template source", () => resolveSourceDir({
925
- extendsAccount,
926
- extendsGateway,
927
- source: input.source
928
- }));
929
- parentConfig = resolvedParentConfig;
930
- const isMinimalScaffold = sourceDir === "";
931
- try {
932
- let filesCopied;
933
- if (isMinimalScaffold) {
934
- filesCopied = await timePhase(timings, "scaffold project", () => scaffoldMinimalProject(targetDir, parentConfig, {
935
- extendsAccount,
936
- extendsGateway,
937
- account: account || extendsAccount,
938
- domain,
939
- plugins,
940
- overrides,
941
- repository,
942
- title: parentConfig?.title,
943
- description: parentConfig?.description
944
- }));
945
- await timePhase(timings, "personalize config", () => personalizeConfig(targetDir, {
946
- extendsAccount,
947
- extendsGateway,
948
- account: account || extendsAccount,
949
- domain: domain || extendsGateway,
950
- plugins,
951
- overrides,
952
- mode: "init",
953
- repository,
954
- title: parentConfig?.title,
955
- description: parentConfig?.description,
956
- testnet: parentConfig?.testnet,
957
- staging: parentConfig?.staging
958
- }));
959
- } else {
960
- const patterns = buildInitPatterns(overrides, plugins, pluginDirMap);
961
- const routeExclusions = overrides.includes("ui") ? buildPluginRouteExclusions(parentConfig, plugins) : [];
962
- filesCopied = await timePhase(timings, "copy files", () => copyFilteredFiles(sourceDir, targetDir, patterns, {
963
- overrides,
964
- plugins,
965
- ignore: routeExclusions
966
- }));
967
- await timePhase(timings, "personalize config", () => personalizeConfig(targetDir, {
968
- extendsAccount,
969
- extendsGateway,
970
- account: account || extendsAccount,
971
- domain: domain || extendsGateway,
972
- plugins,
973
- overrides,
974
- workspaceOpts: { sourceDir },
975
- repository,
976
- title: parentConfig?.title,
977
- description: parentConfig?.description,
978
- testnet: parentConfig?.testnet,
979
- staging: parentConfig?.staging
980
- }));
981
- await timePhase(timings, "write snapshot", () => writeInitSnapshot(targetDir, extendsAccount, extendsGateway, sourceDir, patterns, {
982
- overrides,
983
- plugins,
984
- ignore: routeExclusions
985
- }));
986
- await timePhase(timings, "personalize agents", () => personalizeAgentsMd(targetDir, {
987
- overrides,
988
- plugins
989
- }));
990
- }
991
- await timePhase(timings, "sync shared deps", () => syncResolvedSharedDeps({
992
- configDir: targetDir,
993
- hostMode: "local"
994
- }));
995
- const lockfilePath = join(targetDir, "bun.lock");
996
- stripOrphanedWorkspacesFromLockfile(lockfilePath, computeAllowedWorkspaces(overrides, plugins));
997
- removeInitLockfile(lockfilePath);
998
- const initConfig = await timePhase(timings, "resolve config", () => loadResolvedConfig({ cwd: targetDir }));
999
- if (initConfig?.runtime) await timePhase(timings, "generate env/docker", async () => {
1000
- writeGeneratedInfra(targetDir, initConfig.runtime);
1001
- });
1002
- await timePhase(timings, "create env file", async () => {
1003
- ensureEnvFile(targetDir);
1004
- });
1005
- if (!input.noInstall) {
1006
- await timePhase(timings, "install dependencies", () => runBunInstall(targetDir));
1007
- await timePhase(timings, "generate types", () => runTypesGen(targetDir));
1008
- await timePhase(timings, "generate migrations", () => generateDatabaseMigrations(targetDir));
1009
- }
1010
- if (input.noInstall && initConfig?.config) await timePhase(timings, "generate code artifacts", () => generateCodeArtifacts(targetDir, initConfig.config));
1011
- return {
1012
- status: "initialized",
1013
- directory,
1014
- extendsRef,
1015
- account,
1016
- domain,
1017
- extends: extendsRef,
1018
- plugins,
1019
- overrides,
1020
- filesCopied,
1021
- timings,
1022
- targetDir
1023
- };
1024
- } finally {
1025
- await cleanup();
1026
- }
1027
- } catch (error) {
1028
- const extendsRef = input.extends ? input.extends.startsWith("bos://") ? input.extends : `bos://${input.extends}` : "bos://dev.everything.near/everything.dev";
1029
- return {
1030
- status: "error",
1031
- directory: input.directory ?? "",
1032
- extendsRef,
1033
- account: input.account,
1034
- domain: input.domain,
1035
- extends: extendsRef,
1036
- plugins: input.plugins ?? [],
1037
- overrides: input.overrides,
1038
- filesCopied: 0,
1039
- timings: [],
1040
- error: error instanceof Error ? error.message : "Unknown error"
1041
- };
1042
- }
1043
- }),
1044
- sync: builder.sync.handler(async ({ input }) => {
1045
- try {
1046
- const configPath = findConfigPath();
1047
- if (!configPath) return {
1048
- status: "error",
1049
- updated: [],
1050
- skipped: [],
1051
- added: [],
1052
- error: "No bos.config.json found in current directory"
1053
- };
1054
- const projectDir = resolve(dirname(configPath));
1055
- const result = await syncTemplate(projectDir, input);
1056
- if (result.status === "synced" || result.status === "dry-run") {
1057
- const syncedConfig = await loadResolvedConfig({ cwd: projectDir });
1058
- if (syncedConfig?.config) await generateCodeArtifacts(projectDir, syncedConfig.config);
1059
- }
1060
- return result;
1061
- } catch (error) {
1062
- return {
1063
- status: "error",
1064
- updated: [],
1065
- skipped: [],
1066
- added: [],
1067
- error: error instanceof Error ? error.message : "Unknown error"
1068
- };
1069
- }
1070
- }),
1071
- upgrade: builder.upgrade.handler(async ({ input }) => {
1072
- try {
1073
- const configPath = findConfigPath();
1074
- if (!configPath) return {
1075
- status: "error",
1076
- packages: [],
1077
- error: "No bos.config.json found in current directory"
1078
- };
1079
- return await upgradeTemplate(resolve(dirname(configPath)), input);
1080
- } catch (error) {
1081
- return {
1082
- status: "error",
1083
- packages: [],
1084
- error: error instanceof Error ? error.message : "Unknown error"
1085
- };
1086
- }
1087
- }),
1088
- typesGen: builder.typesGen.handler(async ({ input }) => {
1089
- try {
1090
- const configPath = findConfigPath();
1091
- if (!configPath) return {
1092
- status: "error",
1093
- generated: [],
1094
- fetched: [],
1095
- skipped: [],
1096
- failed: [],
1097
- error: "No bos.config.json found in current directory"
1098
- };
1099
- const projectDir = resolve(dirname(configPath));
1100
- const refreshed = await loadResolvedConfig({
1101
- cwd: projectDir,
1102
- env: input.env ?? (process.env.NODE_ENV === "production" ? "production" : "development"),
1103
- remotePlugins: input.remotePlugins
1104
- });
1105
- if (!refreshed) return {
1106
- status: "error",
1107
- generated: [],
1108
- fetched: [],
1109
- skipped: [],
1110
- failed: [],
1111
- error: "Failed to load bos.config.json"
1112
- };
1113
- if (input.dryRun) {
1114
- const pluginEntries = Object.entries(refreshed.runtime.plugins ?? {});
1115
- const fetched = [];
1116
- const skipped = [];
1117
- const hasLocalApiWorkspace = existsSync(join(projectDir, "api", "src"));
1118
- if (refreshed.runtime.api.source !== "local") fetched.push(`api remote (${refreshed.runtime.api.url})`);
1119
- else {
1120
- const path = refreshed.runtime.api.localPath ? ` (${relative(projectDir, refreshed.runtime.api.localPath)})` : "";
1121
- skipped.push(`api local${path}`);
1122
- }
1123
- if (refreshed.runtime.auth) if (refreshed.runtime.auth.source !== "local") fetched.push(`auth remote (${refreshed.runtime.auth.url})`);
1124
- else {
1125
- const path = refreshed.runtime.auth.localPath ? ` (${relative(projectDir, refreshed.runtime.auth.localPath)})` : "";
1126
- skipped.push(`auth local${path}`);
1127
- }
1128
- for (const [key, plugin] of pluginEntries) if (plugin.url && plugin.source !== "local") fetched.push(`${key} remote (${plugin.url})`);
1129
- else if (plugin.localPath) skipped.push(`${key} local (${relative(projectDir, plugin.localPath)})`);
1130
- else skipped.push(`${key} no URL resolved`);
1131
- const generated = ["ui/src/lib/api-types.gen.ts", "ui/src/lib/auth-types.gen.ts"];
1132
- if (hasLocalApiWorkspace) generated.push("api/src/lib/plugins-types.gen.ts", "api/src/lib/auth-types.gen.ts");
1133
- if (existsSync(join(projectDir, "host", "src"))) generated.push("host/src/lib/auth-types.gen.ts");
1134
- for (const [key, _plugin] of pluginEntries) if (existsSync(join(projectDir, "plugins", key, "src", "lib", "plugins-client.gen.ts"))) generated.push(`plugins/${key}/src/lib/plugins-client.gen.ts`);
1135
- return {
1136
- status: "success",
1137
- generated,
1138
- fetched,
1139
- skipped,
1140
- failed: []
1141
- };
1142
- }
1143
- const artifacts = await generateCodeArtifacts(projectDir, refreshed.config, { runtimeConfig: refreshed.runtime });
1144
- const hasLocalApiWorkspace = existsSync(join(projectDir, "api", "src"));
1145
- const generated = ["ui/src/lib/api-types.gen.ts"];
1146
- if (hasLocalApiWorkspace) generated.push("api/src/lib/plugins-types.gen.ts", "api/src/lib/auth-types.gen.ts");
1147
- if (refreshed.runtime.auth && (refreshed.runtime.auth.source !== "local" || refreshed.runtime.auth.localPath)) generated.push("ui/src/lib/auth-types.gen.ts");
1148
- if (existsSync(join(projectDir, "host", "src"))) generated.push("host/src/lib/auth-types.gen.ts");
1149
- for (const [key, _plugin] of Object.entries(refreshed.runtime.plugins ?? {})) if (existsSync(join(projectDir, "plugins", key, "src", "lib", "plugins-client.gen.ts"))) generated.push(`plugins/${key}/src/lib/plugins-client.gen.ts`);
1150
- const contractStatus = artifacts?.contractStatus ?? [];
1151
- const fetched = [];
1152
- const skipped = [];
1153
- const failed = [];
1154
- for (const entry of contractStatus) if (entry.source === "remote") fetched.push(entry.url ? `${entry.key} remote (${entry.url})` : entry.key);
1155
- else if (entry.source === "local") {
1156
- const path = entry.localPath ? ` (${relative(projectDir, entry.localPath)})` : "";
1157
- skipped.push(`${entry.key} local${path}`);
1158
- } else if (entry.source === "skipped") skipped.push(`${entry.key} no URL resolved`);
1159
- else if (entry.source === "failed") {
1160
- const detail = entry.error ? `: ${entry.error}` : "";
1161
- failed.push(`${entry.key}${detail}`);
1162
- }
1163
- return {
1164
- status: "success",
1165
- generated,
1166
- fetched,
1167
- skipped,
1168
- failed
1169
- };
1170
- } catch (error) {
1171
- return {
1172
- status: "error",
1173
- generated: [],
1174
- fetched: [],
1175
- skipped: [],
1176
- failed: [],
1177
- error: error instanceof Error ? error.message : "Unknown error"
1178
- };
1179
- }
1180
- }),
1181
- dbStudio: builder.dbStudio.handler(async ({ input }) => {
1182
- try {
1183
- const configPath = findConfigPath();
1184
- if (!configPath) return {
1185
- status: "error",
1186
- plugin: input.plugin,
1187
- source: "remote",
1188
- section: "",
1189
- error: "No bos.config.json found in current directory"
1190
- };
1191
- const projectDir = resolve(dirname(configPath));
1192
- loadProjectEnv(projectDir);
1193
- const refreshed = await loadResolvedConfig({ cwd: projectDir });
1194
- if (!refreshed) return {
1195
- status: "error",
1196
- plugin: input.plugin,
1197
- source: "remote",
1198
- section: "",
1199
- error: "Failed to load bos.config.json"
1200
- };
1201
- const { resolvePluginDbInfo } = await import("./cli/db-studio.mjs");
1202
- const info = resolvePluginDbInfo(input.plugin, refreshed.runtime, projectDir);
1203
- return {
1204
- status: "success",
1205
- plugin: info.key,
1206
- source: info.source,
1207
- section: info.section,
1208
- databaseSecret: info.databaseSecret,
1209
- databaseUrl: info.databaseUrl,
1210
- workspaceDir: info.workspaceDir
1211
- };
1212
- } catch (error) {
1213
- return {
1214
- status: "error",
1215
- plugin: input.plugin,
1216
- source: "remote",
1217
- section: "",
1218
- error: error instanceof Error ? error.message : "Unknown error"
1219
- };
1220
- }
1221
- }),
1222
- dbDoctor: builder.dbDoctor.handler(async ({ input }) => {
1223
- try {
1224
- const configPath = findConfigPath();
1225
- if (!configPath) return {
1226
- status: "error",
1227
- plugin: input.plugin,
1228
- slug: "",
1229
- journalTable: "",
1230
- journalSchema: "",
1231
- diagnosis: "error",
1232
- localMigrationCount: 0,
1233
- appliedHashCount: 0,
1234
- expectedTables: [],
1235
- missingTables: [],
1236
- error: "No bos.config.json"
1237
- };
1238
- const projectDir = resolve(dirname(configPath));
1239
- loadProjectEnv(projectDir);
1240
- const refreshed = await loadResolvedConfig({ cwd: projectDir });
1241
- if (!refreshed) return {
1242
- status: "error",
1243
- plugin: input.plugin,
1244
- slug: "",
1245
- journalTable: "",
1246
- journalSchema: "",
1247
- diagnosis: "error",
1248
- localMigrationCount: 0,
1249
- appliedHashCount: 0,
1250
- expectedTables: [],
1251
- missingTables: [],
1252
- error: "Failed to load config"
1253
- };
1254
- const { resolvePluginDbInfo } = await import("./cli/db-studio.mjs");
1255
- const info = resolvePluginDbInfo(input.plugin, refreshed.runtime, projectDir);
1256
- const { diagnosePlugin } = await import("./cli/db-doctor.mjs");
1257
- return {
1258
- status: "success",
1259
- ...await diagnosePlugin(info)
1260
- };
1261
- } catch (error) {
1262
- return {
1263
- status: "error",
1264
- plugin: input.plugin,
1265
- slug: "",
1266
- journalTable: "",
1267
- journalSchema: "",
1268
- diagnosis: "error",
1269
- localMigrationCount: 0,
1270
- appliedHashCount: 0,
1271
- expectedTables: [],
1272
- missingTables: [],
1273
- error: error instanceof Error ? error.message : "Unknown error"
1274
- };
1275
- }
1276
- }),
1277
- dbRepair: builder.dbRepair.handler(async ({ input }) => {
1278
- try {
1279
- const configPath = findConfigPath();
1280
- if (!configPath) return {
1281
- status: "error",
1282
- message: "No bos.config.json found",
1283
- diagnosis: null,
1284
- error: "No config"
1285
- };
1286
- const projectDir = resolve(dirname(configPath));
1287
- loadProjectEnv(projectDir);
1288
- const refreshed = await loadResolvedConfig({ cwd: projectDir });
1289
- if (!refreshed) return {
1290
- status: "error",
1291
- message: "Failed to load config",
1292
- diagnosis: null,
1293
- error: "Config load failed"
1294
- };
1295
- const { resolvePluginDbInfo } = await import("./cli/db-studio.mjs");
1296
- const info = resolvePluginDbInfo(input.plugin, refreshed.runtime, projectDir);
1297
- const { repairPlugin } = await import("./cli/db-repair.mjs");
1298
- const result = await repairPlugin(info, input.mode ?? "history-reset");
1299
- return {
1300
- ...result,
1301
- error: result.status === "error" ? result.message : void 0
1302
- };
1303
- } catch (error) {
1304
- return {
1305
- status: "error",
1306
- message: error instanceof Error ? error.message : "Unknown error",
1307
- diagnosis: null,
1308
- error: error instanceof Error ? error.message : "Unknown error"
1309
- };
1310
- }
1311
- }),
1312
- status: builder.status.handler(async () => {
1313
- try {
1314
- const configPath = findConfigPath();
1315
- if (!configPath) return {
1316
- status: "error",
1317
- packages: [],
1318
- envFile: "missing",
1319
- error: "No bos.config.json found in current directory"
1320
- };
1321
- return await getStatus(resolve(dirname(configPath)));
1322
- } catch (error) {
1323
- return {
1324
- status: "error",
1325
- packages: [],
1326
- envFile: "missing",
1327
- error: error instanceof Error ? error.message : "Unknown error"
1328
- };
1329
- }
1330
- }),
1331
- ps: builder.ps.handler(async () => {
1332
- try {
1333
- return {
1334
- status: "ok",
1335
- entries: await Effect.runPromise(pruneDeadEffect(readRegistry()))
1336
- };
1337
- } catch (error) {
1338
- return {
1339
- status: "error",
1340
- entries: [],
1341
- error: error instanceof Error ? error.message : "Unknown error"
1342
- };
1343
- }
1344
- }),
1345
- kill: builder.kill.handler(async ({ input }) => {
1346
- try {
1347
- const entries = await Effect.runPromise(pruneDeadEffect(readRegistry()));
1348
- const configPath = findConfigPath();
1349
- const targetConfigDir = input.all ? void 0 : input.configDir ?? (configPath ? resolve(dirname(configPath)) : void 0);
1350
- const targets = targetConfigDir ? entries.filter((entry) => entry.configDir === targetConfigDir) : entries;
1351
- const killed = [];
1352
- const skipped = [];
1353
- for (const entry of targets) try {
1354
- process.kill(entry.pid, input.signal === "SIGKILL" ? "SIGKILL" : "SIGTERM");
1355
- killed.push({
1356
- pid: entry.pid,
1357
- configDir: entry.configDir
1358
- });
1359
- unregisterPid(entry.pid);
1360
- } catch (err) {
1361
- if (err.code === "ESRCH") {
1362
- skipped.push({
1363
- pid: entry.pid,
1364
- reason: "process already exited"
1365
- });
1366
- unregisterPid(entry.pid);
1367
- } else skipped.push({
1368
- pid: entry.pid,
1369
- reason: err.message ?? "kill failed"
1370
- });
1371
- }
1372
- return {
1373
- status: "killed",
1374
- killed,
1375
- skipped
1376
- };
1377
- } catch (error) {
1378
- return {
1379
- status: "error",
1380
- killed: [],
1381
- skipped: [],
1382
- error: error instanceof Error ? error.message : "Unknown error"
1383
- };
1384
- }
1385
- })
51
+ createRouter: (builder) => ({
52
+ ...registerConfig(builder),
53
+ ...registerPlugins(builder),
54
+ ...registerDev(builder),
55
+ ...registerBuild(builder),
56
+ ...registerDeploy(builder),
57
+ ...registerKeys(builder),
58
+ ...registerInit(builder),
59
+ ...registerUpgrade(builder),
60
+ ...registerDb(builder),
61
+ ...registerOps(builder)
1386
62
  })
1387
63
  });
1388
- function computeAllowedWorkspaces(overrides, plugins) {
1389
- const workspaces = [];
1390
- for (const section of overrides) {
1391
- if (section === "host") workspaces.push("host");
1392
- if (section === "ui") workspaces.push("ui");
1393
- if (section === "api") workspaces.push("api");
1394
- }
1395
- if (plugins && plugins.length > 0) workspaces.push("plugins/*");
1396
- return workspaces;
1397
- }
1398
64
 
1399
65
  //#endregion
1400
- export { consumeDevSession, plugin_default as default, pluginEvents, resolveRemoteConfigChain };
66
+ export { plugin_default as default, pluginEvents, resolveRemoteConfigChain };
1401
67
  //# sourceMappingURL=plugin.mjs.map