everything-dev 1.53.1 → 2.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +624 -196
  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 +613 -194
  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
@@ -0,0 +1,199 @@
1
+ const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
+ const require_fastkv = require('../fastkv.cjs');
3
+ const require_config = require('../config.cjs');
4
+ const require_resolution_session = require('../resolution/session.cjs');
5
+ const require_fingerprint = require('../fingerprint.cjs');
6
+ const require_version_status = require('../version-status.cjs');
7
+ const require_shared = require('./shared.cjs');
8
+ const require_process_registry = require('../process-registry.cjs');
9
+ const require_app = require('../app.cjs');
10
+ const require_infra = require('../cli/infra.cjs');
11
+ const require_port_ownership = require('../infra/port-ownership.cjs');
12
+ const require_status = require('../cli/status.cjs');
13
+ const require_dev_logs = require('../dev-logs.cjs');
14
+ const require_process_kill = require('../process-kill.cjs');
15
+ let node_path = require("node:path");
16
+ let effect = require("effect");
17
+ let node_process = require("node:process");
18
+ node_process = require_runtime.__toESM(node_process, 1);
19
+
20
+ //#region src/commands/ops.ts
21
+ function registerOps(builder) {
22
+ return {
23
+ status: builder.status.handler(async ({ context }) => {
24
+ try {
25
+ const deps = effect.Context.get(context["effect/context"], require_shared.BosDepsTag);
26
+ const configPath = require_config.findConfigPath();
27
+ if (!configPath) return {
28
+ status: "error",
29
+ packages: [],
30
+ envFile: "missing",
31
+ error: `${require_config.MISSING_CONFIG_MESSAGE} in current directory`
32
+ };
33
+ const projectDir = (0, node_path.resolve)((0, node_path.dirname)(configPath));
34
+ return {
35
+ ...await require_status.getStatus(projectDir),
36
+ deployedVersion: await deployedVersionStatus(deps)
37
+ };
38
+ } catch (error) {
39
+ return {
40
+ status: "error",
41
+ packages: [],
42
+ envFile: "missing",
43
+ error: error instanceof Error ? error.message : "Unknown error"
44
+ };
45
+ }
46
+ }),
47
+ logs: builder.logs.handler(async ({ input, context }) => {
48
+ try {
49
+ const configDir = effect.Context.get(context["effect/context"], require_shared.BosDepsTag).session?.root ?? node_process.default.cwd();
50
+ const text = await require_dev_logs.readDevLatestLog(configDir, { tail: input.tail });
51
+ const service = input.service;
52
+ const lines = text.split("\n").filter((line) => line.length > 0).filter((line) => {
53
+ if (!service) return true;
54
+ const match = /\] \[([^\]]+)\] \[(?:OUT|ERR)\] /.exec(line);
55
+ return match?.[1] === service || match?.[1] === `plugin:${service}`;
56
+ });
57
+ return {
58
+ logFile: require_dev_logs.resolveDevLatestFile(configDir),
59
+ lines
60
+ };
61
+ } catch (error) {
62
+ return {
63
+ logFile: "unknown",
64
+ lines: [error instanceof Error ? `Failed to read logs: ${error.message}` : "Failed to read logs"]
65
+ };
66
+ }
67
+ }),
68
+ ps: builder.ps.handler(async () => {
69
+ try {
70
+ return {
71
+ status: "ok",
72
+ entries: await effect.Effect.runPromise(require_process_registry.pruneDeadEffect(require_process_registry.readRegistry()))
73
+ };
74
+ } catch (error) {
75
+ return {
76
+ status: "error",
77
+ entries: [],
78
+ error: error instanceof Error ? error.message : "Unknown error"
79
+ };
80
+ }
81
+ }),
82
+ kill: builder.kill.handler(async ({ input }) => {
83
+ try {
84
+ const configPath = require_config.findConfigPath();
85
+ const targetConfigDir = input.all ? void 0 : input.configDir ?? (configPath ? (0, node_path.resolve)((0, node_path.dirname)(configPath)) : void 0);
86
+ const targets = targetConfigDir ? require_process_registry.readRegistry().filter((entry) => entry.configDir === targetConfigDir) : require_process_registry.readRegistry();
87
+ const killed = [];
88
+ const skipped = [];
89
+ for (const entry of targets) {
90
+ const wasAlive = require_process_registry.isPidAlive(entry.pid);
91
+ if (wasAlive) await effect.Effect.runPromise(require_process_kill.killProcessGroupEscalating(entry.pid, {
92
+ terminateMs: 5e3,
93
+ signal: input.signal === "SIGKILL" ? "SIGKILL" : "SIGTERM"
94
+ }));
95
+ const reapedChildren = [];
96
+ for (const childPid of entry.childPids ?? []) if (require_process_registry.isPidAlive(childPid)) {
97
+ require_process_kill.reapGroup(childPid);
98
+ reapedChildren.push(childPid);
99
+ }
100
+ const ports = Object.values(entry.ports ?? {}).filter((port) => Number.isFinite(port) && port > 0);
101
+ const stillBound = [];
102
+ for (const port of ports) {
103
+ let bindable = false;
104
+ for (let attempt = 0; attempt < 4; attempt++) {
105
+ bindable = await effect.Effect.runPromise(require_app.probePortBindable(port));
106
+ if (bindable) break;
107
+ await new Promise((resolve) => setTimeout(resolve, 500));
108
+ }
109
+ if (!bindable) stillBound.push(port);
110
+ }
111
+ if (stillBound.length > 0) {
112
+ const owner = await effect.Effect.runPromise(require_port_ownership.ownerOfPort(stillBound[0]));
113
+ skipped.push({
114
+ pid: entry.pid,
115
+ reason: `ports still bound after kill: ${stillBound.join(", ")}${owner ? ` — held by pid ${owner.pid} (${owner.command})` : " — owner unknown"}`
116
+ });
117
+ continue;
118
+ }
119
+ require_process_registry.unregisterPid(entry.pid);
120
+ killed.push({
121
+ pid: entry.pid,
122
+ configDir: entry.configDir
123
+ });
124
+ if (!wasAlive && reapedChildren.length > 0) skipped.push({
125
+ pid: entry.pid,
126
+ reason: `process already exited; reaped orphaned children ${reapedChildren.join(", ")}`
127
+ });
128
+ }
129
+ return {
130
+ status: "killed",
131
+ killed,
132
+ skipped
133
+ };
134
+ } catch (error) {
135
+ return {
136
+ status: "error",
137
+ killed: [],
138
+ skipped: [],
139
+ error: error instanceof Error ? error.message : "Unknown error"
140
+ };
141
+ }
142
+ }),
143
+ infraExport: builder.infraExport.handler(async ({ input, context }) => {
144
+ const deps = effect.Context.get(context["effect/context"], require_shared.BosDepsTag);
145
+ const configDir = input.configDir ?? deps.session?.root ?? node_process.default.cwd();
146
+ const ci = deps.session?.runtime ? require_infra.buildCiInfraPlan(deps.session.runtime) : null;
147
+ if (!ci) {
148
+ const refreshed = await require_resolution_session.openResolution({ cwd: configDir });
149
+ if (!refreshed?.runtime) throw new Error("No resolved runtime config available for infra export");
150
+ return require_infra.buildCiInfraPlan(refreshed.runtime);
151
+ }
152
+ return {
153
+ ...ci,
154
+ account: deps.session?.config?.account ?? ci.account,
155
+ gateway: ci.gateway ?? deps.session?.config?.domain ?? deps.session?.config?.account ?? ci.account
156
+ };
157
+ })
158
+ };
159
+ }
160
+ async function deployedVersionStatus(deps) {
161
+ const config = deps.session?.config;
162
+ if (!config?.account || !config.domain) return void 0;
163
+ const { account, domain } = config;
164
+ let publishedFingerprint;
165
+ try {
166
+ const published = await require_fastkv.fetchBosConfigFromFastKv(`bos://${account}/${domain}`);
167
+ publishedFingerprint = require_fingerprint.pointerFingerprint(published);
168
+ } catch {
169
+ return;
170
+ }
171
+ const hostUrl = deps.session?.runtime?.host?.url;
172
+ if (!hostUrl) return require_version_status.computeDeployedVersionStatus({
173
+ publishedFingerprint,
174
+ servedFingerprint: null
175
+ });
176
+ try {
177
+ const response = await fetch(new URL("/.well-known/version", hostUrl));
178
+ if (!response.ok) return require_version_status.computeDeployedVersionStatus({
179
+ publishedFingerprint,
180
+ servedFingerprint: null,
181
+ servedError: `version endpoint returned ${response.status}`
182
+ });
183
+ const body = await response.json();
184
+ return require_version_status.computeDeployedVersionStatus({
185
+ publishedFingerprint,
186
+ servedFingerprint: body.fingerprint ?? null
187
+ });
188
+ } catch (error) {
189
+ return require_version_status.computeDeployedVersionStatus({
190
+ publishedFingerprint,
191
+ servedFingerprint: null,
192
+ servedError: error instanceof Error ? error.message : String(error)
193
+ });
194
+ }
195
+ }
196
+
197
+ //#endregion
198
+ exports.registerOps = registerOps;
199
+ //# sourceMappingURL=ops.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops.cjs","names":["Context","BosDepsTag","findConfigPath","MISSING_CONFIG_MESSAGE","resolve","dirname","getStatus","process","readDevLatestLog","resolveDevLatestFile","Effect","pruneDeadEffect","readRegistry","isPidAlive","killProcessGroupEscalating","probePortBindable","ownerOfPort","buildCiInfraPlan","openResolution","fetchBosConfigFromFastKv","pointerFingerprint","computeDeployedVersionStatus"],"sources":["../../src/commands/ops.ts"],"sourcesContent":["import { dirname, resolve } from \"node:path\";\nimport process from \"node:process\";\nimport { Context, Effect } from \"effect\";\nimport { probePortBindable } from \"../app\";\nimport { buildCiInfraPlan, type CiInfraPlan } from \"../cli/infra\";\nimport { getStatus } from \"../cli/status\";\nimport { findConfigPath, MISSING_CONFIG_MESSAGE } from \"../config\";\nimport { readDevLatestLog, resolveDevLatestFile } from \"../dev-logs\";\nimport { fetchBosConfigFromFastKv } from \"../fastkv\";\nimport { pointerFingerprint } from \"../fingerprint\";\nimport { ownerOfPort } from \"../infra/port-ownership\";\nimport { killProcessGroupEscalating, reapGroup } from \"../process-kill\";\nimport { isPidAlive, pruneDeadEffect, readRegistry, unregisterPid } from \"../process-registry\";\nimport { openResolution } from \"../resolution/session\";\nimport { computeDeployedVersionStatus, type DeployedVersionStatus } from \"../version-status\";\nimport { type BosBuilder, type BosDeps, BosDepsTag } from \"./shared\";\n\nexport function registerOps(builder: BosBuilder) {\n return {\n status: builder.status.handler(async ({ context }) => {\n try {\n const deps = Context.get(context[\"effect/context\"], BosDepsTag);\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n packages: [],\n envFile: \"missing\" as const,\n error: `${MISSING_CONFIG_MESSAGE} in current directory`,\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n const status = await getStatus(projectDir);\n return {\n ...status,\n deployedVersion: await deployedVersionStatus(deps),\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n packages: [],\n envFile: \"missing\" as const,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n logs: builder.logs.handler(async ({ input, context }) => {\n try {\n const deps = Context.get(context[\"effect/context\"], BosDepsTag);\n const configDir = deps.session?.root ?? process.cwd();\n const text = await readDevLatestLog(configDir, { tail: input.tail });\n const service = input.service;\n const lines = text\n .split(\"\\n\")\n .filter((line) => line.length > 0)\n .filter((line) => {\n if (!service) return true;\n const match = /\\] \\[([^\\]]+)\\] \\[(?:OUT|ERR)\\] /.exec(line);\n return match?.[1] === service || match?.[1] === `plugin:${service}`;\n });\n return {\n logFile: resolveDevLatestFile(configDir),\n lines,\n };\n } catch (error) {\n return {\n logFile: \"unknown\",\n lines: [\n error instanceof Error\n ? `Failed to read logs: ${error.message}`\n : \"Failed to read logs\",\n ],\n };\n }\n }),\n\n ps: builder.ps.handler(async () => {\n try {\n const entries = await Effect.runPromise(pruneDeadEffect(readRegistry()));\n return {\n status: \"ok\" as const,\n entries,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n entries: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n kill: builder.kill.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n const targetConfigDir = input.all\n ? undefined\n : (input.configDir ?? (configPath ? resolve(dirname(configPath)) : undefined));\n\n const targets = targetConfigDir\n ? readRegistry().filter((entry) => entry.configDir === targetConfigDir)\n : readRegistry();\n\n const killed: Array<{ pid: number; configDir: string }> = [];\n const skipped: Array<{ pid: number; reason: string }> = [];\n\n for (const entry of targets) {\n const wasAlive = isPidAlive(entry.pid);\n if (wasAlive) {\n await Effect.runPromise(\n killProcessGroupEscalating(entry.pid, {\n terminateMs: 5000,\n signal: input.signal === \"SIGKILL\" ? \"SIGKILL\" : \"SIGTERM\",\n }),\n );\n }\n\n const reapedChildren: number[] = [];\n for (const childPid of entry.childPids ?? []) {\n if (isPidAlive(childPid)) {\n reapGroup(childPid);\n reapedChildren.push(childPid);\n }\n }\n\n const ports = Object.values(entry.ports ?? {}).filter(\n (port) => Number.isFinite(port) && port > 0,\n );\n const stillBound: number[] = [];\n for (const port of ports) {\n let bindable = false;\n for (let attempt = 0; attempt < 4; attempt++) {\n bindable = await Effect.runPromise(probePortBindable(port));\n if (bindable) break;\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n if (!bindable) stillBound.push(port);\n }\n\n if (stillBound.length > 0) {\n const owner = await Effect.runPromise(ownerOfPort(stillBound[0]));\n skipped.push({\n pid: entry.pid,\n reason: `ports still bound after kill: ${stillBound.join(\", \")}${\n owner ? ` — held by pid ${owner.pid} (${owner.command})` : \" — owner unknown\"\n }`,\n });\n continue;\n }\n\n unregisterPid(entry.pid);\n killed.push({ pid: entry.pid, configDir: entry.configDir });\n if (!wasAlive && reapedChildren.length > 0) {\n skipped.push({\n pid: entry.pid,\n reason: `process already exited; reaped orphaned children ${reapedChildren.join(\", \")}`,\n });\n }\n }\n\n return {\n status: \"killed\" as const,\n killed,\n skipped,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n killed: [],\n skipped: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n infraExport: builder.infraExport.handler(async ({ input, context }) => {\n const deps = Context.get(context[\"effect/context\"], BosDepsTag);\n const configDir = input.configDir ?? deps.session?.root ?? process.cwd();\n const ci = deps.session?.runtime ? buildCiInfraPlan(deps.session.runtime) : null;\n if (!ci) {\n const refreshed = await openResolution({ cwd: configDir });\n if (!refreshed?.runtime) {\n throw new Error(\"No resolved runtime config available for infra export\");\n }\n return buildCiInfraPlan(refreshed.runtime);\n }\n const result: CiInfraPlan & { account: string; gateway: string } = {\n ...ci,\n account: deps.session?.config?.account ?? ci.account,\n gateway:\n ci.gateway ?? deps.session?.config?.domain ?? deps.session?.config?.account ?? ci.account,\n };\n return result;\n }),\n };\n}\n\nasync function deployedVersionStatus(deps: BosDeps): Promise<DeployedVersionStatus | undefined> {\n const config = deps.session?.config;\n if (!config?.account || !config.domain) return undefined;\n const { account, domain } = config;\n let publishedFingerprint: string | undefined;\n try {\n const published = await fetchBosConfigFromFastKv<Record<string, unknown>>(\n `bos://${account}/${domain}`,\n );\n publishedFingerprint = pointerFingerprint(published as never);\n } catch {\n return undefined;\n }\n\n const hostUrl = deps.session?.runtime?.host?.url;\n if (!hostUrl) {\n return computeDeployedVersionStatus({ publishedFingerprint, servedFingerprint: null });\n }\n try {\n const response = await fetch(new URL(\"/.well-known/version\", hostUrl));\n if (!response.ok) {\n return computeDeployedVersionStatus({\n publishedFingerprint,\n servedFingerprint: null,\n servedError: `version endpoint returned ${response.status}`,\n });\n }\n const body = (await response.json()) as { fingerprint?: string };\n return computeDeployedVersionStatus({\n publishedFingerprint,\n servedFingerprint: body.fingerprint ?? null,\n });\n } catch (error) {\n return computeDeployedVersionStatus({\n publishedFingerprint,\n servedFingerprint: null,\n servedError: error instanceof Error ? error.message : String(error),\n });\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,197 @@
1
+ import { fetchBosConfigFromFastKv } from "../fastkv.mjs";
2
+ import { MISSING_CONFIG_MESSAGE, findConfigPath } from "../config.mjs";
3
+ import { openResolution } from "../resolution/session.mjs";
4
+ import { pointerFingerprint } from "../fingerprint.mjs";
5
+ import { computeDeployedVersionStatus } from "../version-status.mjs";
6
+ import { BosDepsTag } from "./shared.mjs";
7
+ import { isPidAlive, pruneDeadEffect, readRegistry, unregisterPid } from "../process-registry.mjs";
8
+ import { probePortBindable } from "../app.mjs";
9
+ import { buildCiInfraPlan } from "../cli/infra.mjs";
10
+ import { ownerOfPort } from "../infra/port-ownership.mjs";
11
+ import { getStatus } from "../cli/status.mjs";
12
+ import { readDevLatestLog, resolveDevLatestFile } from "../dev-logs.mjs";
13
+ import { killProcessGroupEscalating, reapGroup } from "../process-kill.mjs";
14
+ import { dirname, resolve } from "node:path";
15
+ import { Context, Effect } from "effect";
16
+ import process from "node:process";
17
+
18
+ //#region src/commands/ops.ts
19
+ function registerOps(builder) {
20
+ return {
21
+ status: builder.status.handler(async ({ context }) => {
22
+ try {
23
+ const deps = Context.get(context["effect/context"], BosDepsTag);
24
+ const configPath = findConfigPath();
25
+ if (!configPath) return {
26
+ status: "error",
27
+ packages: [],
28
+ envFile: "missing",
29
+ error: `${MISSING_CONFIG_MESSAGE} in current directory`
30
+ };
31
+ const projectDir = resolve(dirname(configPath));
32
+ return {
33
+ ...await getStatus(projectDir),
34
+ deployedVersion: await deployedVersionStatus(deps)
35
+ };
36
+ } catch (error) {
37
+ return {
38
+ status: "error",
39
+ packages: [],
40
+ envFile: "missing",
41
+ error: error instanceof Error ? error.message : "Unknown error"
42
+ };
43
+ }
44
+ }),
45
+ logs: builder.logs.handler(async ({ input, context }) => {
46
+ try {
47
+ const configDir = Context.get(context["effect/context"], BosDepsTag).session?.root ?? process.cwd();
48
+ const text = await readDevLatestLog(configDir, { tail: input.tail });
49
+ const service = input.service;
50
+ const lines = text.split("\n").filter((line) => line.length > 0).filter((line) => {
51
+ if (!service) return true;
52
+ const match = /\] \[([^\]]+)\] \[(?:OUT|ERR)\] /.exec(line);
53
+ return match?.[1] === service || match?.[1] === `plugin:${service}`;
54
+ });
55
+ return {
56
+ logFile: resolveDevLatestFile(configDir),
57
+ lines
58
+ };
59
+ } catch (error) {
60
+ return {
61
+ logFile: "unknown",
62
+ lines: [error instanceof Error ? `Failed to read logs: ${error.message}` : "Failed to read logs"]
63
+ };
64
+ }
65
+ }),
66
+ ps: builder.ps.handler(async () => {
67
+ try {
68
+ return {
69
+ status: "ok",
70
+ entries: await Effect.runPromise(pruneDeadEffect(readRegistry()))
71
+ };
72
+ } catch (error) {
73
+ return {
74
+ status: "error",
75
+ entries: [],
76
+ error: error instanceof Error ? error.message : "Unknown error"
77
+ };
78
+ }
79
+ }),
80
+ kill: builder.kill.handler(async ({ input }) => {
81
+ try {
82
+ const configPath = findConfigPath();
83
+ const targetConfigDir = input.all ? void 0 : input.configDir ?? (configPath ? resolve(dirname(configPath)) : void 0);
84
+ const targets = targetConfigDir ? readRegistry().filter((entry) => entry.configDir === targetConfigDir) : readRegistry();
85
+ const killed = [];
86
+ const skipped = [];
87
+ for (const entry of targets) {
88
+ const wasAlive = isPidAlive(entry.pid);
89
+ if (wasAlive) await Effect.runPromise(killProcessGroupEscalating(entry.pid, {
90
+ terminateMs: 5e3,
91
+ signal: input.signal === "SIGKILL" ? "SIGKILL" : "SIGTERM"
92
+ }));
93
+ const reapedChildren = [];
94
+ for (const childPid of entry.childPids ?? []) if (isPidAlive(childPid)) {
95
+ reapGroup(childPid);
96
+ reapedChildren.push(childPid);
97
+ }
98
+ const ports = Object.values(entry.ports ?? {}).filter((port) => Number.isFinite(port) && port > 0);
99
+ const stillBound = [];
100
+ for (const port of ports) {
101
+ let bindable = false;
102
+ for (let attempt = 0; attempt < 4; attempt++) {
103
+ bindable = await Effect.runPromise(probePortBindable(port));
104
+ if (bindable) break;
105
+ await new Promise((resolve) => setTimeout(resolve, 500));
106
+ }
107
+ if (!bindable) stillBound.push(port);
108
+ }
109
+ if (stillBound.length > 0) {
110
+ const owner = await Effect.runPromise(ownerOfPort(stillBound[0]));
111
+ skipped.push({
112
+ pid: entry.pid,
113
+ reason: `ports still bound after kill: ${stillBound.join(", ")}${owner ? ` — held by pid ${owner.pid} (${owner.command})` : " — owner unknown"}`
114
+ });
115
+ continue;
116
+ }
117
+ unregisterPid(entry.pid);
118
+ killed.push({
119
+ pid: entry.pid,
120
+ configDir: entry.configDir
121
+ });
122
+ if (!wasAlive && reapedChildren.length > 0) skipped.push({
123
+ pid: entry.pid,
124
+ reason: `process already exited; reaped orphaned children ${reapedChildren.join(", ")}`
125
+ });
126
+ }
127
+ return {
128
+ status: "killed",
129
+ killed,
130
+ skipped
131
+ };
132
+ } catch (error) {
133
+ return {
134
+ status: "error",
135
+ killed: [],
136
+ skipped: [],
137
+ error: error instanceof Error ? error.message : "Unknown error"
138
+ };
139
+ }
140
+ }),
141
+ infraExport: builder.infraExport.handler(async ({ input, context }) => {
142
+ const deps = Context.get(context["effect/context"], BosDepsTag);
143
+ const configDir = input.configDir ?? deps.session?.root ?? process.cwd();
144
+ const ci = deps.session?.runtime ? buildCiInfraPlan(deps.session.runtime) : null;
145
+ if (!ci) {
146
+ const refreshed = await openResolution({ cwd: configDir });
147
+ if (!refreshed?.runtime) throw new Error("No resolved runtime config available for infra export");
148
+ return buildCiInfraPlan(refreshed.runtime);
149
+ }
150
+ return {
151
+ ...ci,
152
+ account: deps.session?.config?.account ?? ci.account,
153
+ gateway: ci.gateway ?? deps.session?.config?.domain ?? deps.session?.config?.account ?? ci.account
154
+ };
155
+ })
156
+ };
157
+ }
158
+ async function deployedVersionStatus(deps) {
159
+ const config = deps.session?.config;
160
+ if (!config?.account || !config.domain) return void 0;
161
+ const { account, domain } = config;
162
+ let publishedFingerprint;
163
+ try {
164
+ const published = await fetchBosConfigFromFastKv(`bos://${account}/${domain}`);
165
+ publishedFingerprint = pointerFingerprint(published);
166
+ } catch {
167
+ return;
168
+ }
169
+ const hostUrl = deps.session?.runtime?.host?.url;
170
+ if (!hostUrl) return computeDeployedVersionStatus({
171
+ publishedFingerprint,
172
+ servedFingerprint: null
173
+ });
174
+ try {
175
+ const response = await fetch(new URL("/.well-known/version", hostUrl));
176
+ if (!response.ok) return computeDeployedVersionStatus({
177
+ publishedFingerprint,
178
+ servedFingerprint: null,
179
+ servedError: `version endpoint returned ${response.status}`
180
+ });
181
+ const body = await response.json();
182
+ return computeDeployedVersionStatus({
183
+ publishedFingerprint,
184
+ servedFingerprint: body.fingerprint ?? null
185
+ });
186
+ } catch (error) {
187
+ return computeDeployedVersionStatus({
188
+ publishedFingerprint,
189
+ servedFingerprint: null,
190
+ servedError: error instanceof Error ? error.message : String(error)
191
+ });
192
+ }
193
+ }
194
+
195
+ //#endregion
196
+ export { registerOps };
197
+ //# sourceMappingURL=ops.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops.mjs","names":[],"sources":["../../src/commands/ops.ts"],"sourcesContent":["import { dirname, resolve } from \"node:path\";\nimport process from \"node:process\";\nimport { Context, Effect } from \"effect\";\nimport { probePortBindable } from \"../app\";\nimport { buildCiInfraPlan, type CiInfraPlan } from \"../cli/infra\";\nimport { getStatus } from \"../cli/status\";\nimport { findConfigPath, MISSING_CONFIG_MESSAGE } from \"../config\";\nimport { readDevLatestLog, resolveDevLatestFile } from \"../dev-logs\";\nimport { fetchBosConfigFromFastKv } from \"../fastkv\";\nimport { pointerFingerprint } from \"../fingerprint\";\nimport { ownerOfPort } from \"../infra/port-ownership\";\nimport { killProcessGroupEscalating, reapGroup } from \"../process-kill\";\nimport { isPidAlive, pruneDeadEffect, readRegistry, unregisterPid } from \"../process-registry\";\nimport { openResolution } from \"../resolution/session\";\nimport { computeDeployedVersionStatus, type DeployedVersionStatus } from \"../version-status\";\nimport { type BosBuilder, type BosDeps, BosDepsTag } from \"./shared\";\n\nexport function registerOps(builder: BosBuilder) {\n return {\n status: builder.status.handler(async ({ context }) => {\n try {\n const deps = Context.get(context[\"effect/context\"], BosDepsTag);\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n packages: [],\n envFile: \"missing\" as const,\n error: `${MISSING_CONFIG_MESSAGE} in current directory`,\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n const status = await getStatus(projectDir);\n return {\n ...status,\n deployedVersion: await deployedVersionStatus(deps),\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n packages: [],\n envFile: \"missing\" as const,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n logs: builder.logs.handler(async ({ input, context }) => {\n try {\n const deps = Context.get(context[\"effect/context\"], BosDepsTag);\n const configDir = deps.session?.root ?? process.cwd();\n const text = await readDevLatestLog(configDir, { tail: input.tail });\n const service = input.service;\n const lines = text\n .split(\"\\n\")\n .filter((line) => line.length > 0)\n .filter((line) => {\n if (!service) return true;\n const match = /\\] \\[([^\\]]+)\\] \\[(?:OUT|ERR)\\] /.exec(line);\n return match?.[1] === service || match?.[1] === `plugin:${service}`;\n });\n return {\n logFile: resolveDevLatestFile(configDir),\n lines,\n };\n } catch (error) {\n return {\n logFile: \"unknown\",\n lines: [\n error instanceof Error\n ? `Failed to read logs: ${error.message}`\n : \"Failed to read logs\",\n ],\n };\n }\n }),\n\n ps: builder.ps.handler(async () => {\n try {\n const entries = await Effect.runPromise(pruneDeadEffect(readRegistry()));\n return {\n status: \"ok\" as const,\n entries,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n entries: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n kill: builder.kill.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n const targetConfigDir = input.all\n ? undefined\n : (input.configDir ?? (configPath ? resolve(dirname(configPath)) : undefined));\n\n const targets = targetConfigDir\n ? readRegistry().filter((entry) => entry.configDir === targetConfigDir)\n : readRegistry();\n\n const killed: Array<{ pid: number; configDir: string }> = [];\n const skipped: Array<{ pid: number; reason: string }> = [];\n\n for (const entry of targets) {\n const wasAlive = isPidAlive(entry.pid);\n if (wasAlive) {\n await Effect.runPromise(\n killProcessGroupEscalating(entry.pid, {\n terminateMs: 5000,\n signal: input.signal === \"SIGKILL\" ? \"SIGKILL\" : \"SIGTERM\",\n }),\n );\n }\n\n const reapedChildren: number[] = [];\n for (const childPid of entry.childPids ?? []) {\n if (isPidAlive(childPid)) {\n reapGroup(childPid);\n reapedChildren.push(childPid);\n }\n }\n\n const ports = Object.values(entry.ports ?? {}).filter(\n (port) => Number.isFinite(port) && port > 0,\n );\n const stillBound: number[] = [];\n for (const port of ports) {\n let bindable = false;\n for (let attempt = 0; attempt < 4; attempt++) {\n bindable = await Effect.runPromise(probePortBindable(port));\n if (bindable) break;\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n if (!bindable) stillBound.push(port);\n }\n\n if (stillBound.length > 0) {\n const owner = await Effect.runPromise(ownerOfPort(stillBound[0]));\n skipped.push({\n pid: entry.pid,\n reason: `ports still bound after kill: ${stillBound.join(\", \")}${\n owner ? ` — held by pid ${owner.pid} (${owner.command})` : \" — owner unknown\"\n }`,\n });\n continue;\n }\n\n unregisterPid(entry.pid);\n killed.push({ pid: entry.pid, configDir: entry.configDir });\n if (!wasAlive && reapedChildren.length > 0) {\n skipped.push({\n pid: entry.pid,\n reason: `process already exited; reaped orphaned children ${reapedChildren.join(\", \")}`,\n });\n }\n }\n\n return {\n status: \"killed\" as const,\n killed,\n skipped,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n killed: [],\n skipped: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n infraExport: builder.infraExport.handler(async ({ input, context }) => {\n const deps = Context.get(context[\"effect/context\"], BosDepsTag);\n const configDir = input.configDir ?? deps.session?.root ?? process.cwd();\n const ci = deps.session?.runtime ? buildCiInfraPlan(deps.session.runtime) : null;\n if (!ci) {\n const refreshed = await openResolution({ cwd: configDir });\n if (!refreshed?.runtime) {\n throw new Error(\"No resolved runtime config available for infra export\");\n }\n return buildCiInfraPlan(refreshed.runtime);\n }\n const result: CiInfraPlan & { account: string; gateway: string } = {\n ...ci,\n account: deps.session?.config?.account ?? ci.account,\n gateway:\n ci.gateway ?? deps.session?.config?.domain ?? deps.session?.config?.account ?? ci.account,\n };\n return result;\n }),\n };\n}\n\nasync function deployedVersionStatus(deps: BosDeps): Promise<DeployedVersionStatus | undefined> {\n const config = deps.session?.config;\n if (!config?.account || !config.domain) return undefined;\n const { account, domain } = config;\n let publishedFingerprint: string | undefined;\n try {\n const published = await fetchBosConfigFromFastKv<Record<string, unknown>>(\n `bos://${account}/${domain}`,\n );\n publishedFingerprint = pointerFingerprint(published as never);\n } catch {\n return undefined;\n }\n\n const hostUrl = deps.session?.runtime?.host?.url;\n if (!hostUrl) {\n return computeDeployedVersionStatus({ publishedFingerprint, servedFingerprint: null });\n }\n try {\n const response = await fetch(new URL(\"/.well-known/version\", hostUrl));\n if (!response.ok) {\n return computeDeployedVersionStatus({\n publishedFingerprint,\n servedFingerprint: null,\n servedError: `version endpoint returned ${response.status}`,\n });\n }\n const body = (await response.json()) as { fingerprint?: string };\n return computeDeployedVersionStatus({\n publishedFingerprint,\n servedFingerprint: body.fingerprint ?? null,\n });\n } catch (error) {\n return computeDeployedVersionStatus({\n publishedFingerprint,\n servedFingerprint: null,\n servedError: error instanceof Error ? error.message : String(error),\n });\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,211 @@
1
+ const require_fastkv = require('../fastkv.cjs');
2
+ const require_config = require('../config.cjs');
3
+ const require_save_config = require('../utils/save-config.cjs');
4
+ const require_resolution_session = require('../resolution/session.cjs');
5
+ const require_build = require('../build.cjs');
6
+ const require_code_artifacts = require('../code-artifacts.cjs');
7
+ const require_shared = require('./shared.cjs');
8
+ const require_publish = require('../publish.cjs');
9
+ let node_fs = require("node:fs");
10
+ let node_path = require("node:path");
11
+ let effect = require("effect");
12
+
13
+ //#region src/commands/plugins.ts
14
+ function registerPlugins(builder) {
15
+ return {
16
+ pluginAdd: builder.pluginAdd.handler(async ({ input, context }) => {
17
+ const session = effect.Context.get(context["effect/context"], require_shared.BosDepsTag).session;
18
+ if (!session?.config) return {
19
+ status: "error",
20
+ key: "",
21
+ error: require_config.MISSING_CONFIG_MESSAGE
22
+ };
23
+ const isBosRef = input.source.startsWith("bos://");
24
+ const isLocal = input.source.startsWith("local:");
25
+ const key = sanitizePluginKey(input.as ?? (isBosRef ? input.source.split("/").pop() ?? "plugin" : defaultPluginKey(input.source)));
26
+ const existing = session.config.plugins?.[key];
27
+ const existingEntry = existing && typeof existing === "object" ? existing : {};
28
+ const applyEntryDelta = (base) => {
29
+ if (isBosRef) {
30
+ const { development: _dropped, ...rest } = base;
31
+ return {
32
+ ...rest,
33
+ extends: input.source
34
+ };
35
+ }
36
+ if (isLocal) {
37
+ const { extends: _dropped, ...rest } = base;
38
+ return {
39
+ ...rest,
40
+ development: input.source
41
+ };
42
+ }
43
+ const { development: _dropped, ...rest } = base;
44
+ return {
45
+ ...rest,
46
+ production: input.production ?? input.source
47
+ };
48
+ };
49
+ const nextPlugins = { ...session.config.plugins };
50
+ nextPlugins[key] = applyEntryDelta(existingEntry);
51
+ const nextConfig = {
52
+ ...session.config,
53
+ plugins: nextPlugins
54
+ };
55
+ const authored = session.rawConfig;
56
+ if (authored) {
57
+ const authoredExisting = authored.plugins?.[key];
58
+ const authoredBase = typeof authoredExisting === "string" ? { extends: authoredExisting } : authoredExisting && typeof authoredExisting === "object" ? authoredExisting : {};
59
+ await require_save_config.saveBosConfig(session.root, {
60
+ ...authored,
61
+ plugins: {
62
+ ...authored.plugins ?? {},
63
+ [key]: applyEntryDelta(authoredBase)
64
+ }
65
+ });
66
+ } else await require_save_config.saveBosConfig(session.root, nextConfig);
67
+ await require_code_artifacts.generateCodeArtifacts(session.root, nextConfig);
68
+ const stored = nextConfig.plugins?.[key];
69
+ const storedObj = stored && typeof stored === "object" ? stored : {};
70
+ return {
71
+ status: "added",
72
+ key,
73
+ development: storedObj.development,
74
+ production: storedObj.production,
75
+ integrity: storedObj.integrity,
76
+ version: storedObj.version
77
+ };
78
+ }),
79
+ pluginRemove: builder.pluginRemove.handler(async ({ input, context }) => {
80
+ const session = effect.Context.get(context["effect/context"], require_shared.BosDepsTag).session;
81
+ if (!session?.config) return {
82
+ status: "error",
83
+ key: input.key,
84
+ error: require_config.MISSING_CONFIG_MESSAGE
85
+ };
86
+ if (!session.config.plugins?.[input.key]) return {
87
+ status: "error",
88
+ key: input.key,
89
+ error: `Plugin '${input.key}' is not configured`
90
+ };
91
+ const nextPlugins = { ...session.config.plugins };
92
+ delete nextPlugins[input.key];
93
+ const nextConfig = {
94
+ ...session.config,
95
+ plugins: Object.keys(nextPlugins).length > 0 ? nextPlugins : void 0
96
+ };
97
+ const authored = session.rawConfig;
98
+ if (authored) {
99
+ const authoredPlugins = { ...authored.plugins ?? {} };
100
+ if (authoredPlugins[input.key] === void 0) {
101
+ if ((0, node_fs.existsSync)((0, node_path.join)(session.root, "bos.app.ts"))) return {
102
+ status: "error",
103
+ key: input.key,
104
+ error: `'${input.key}' is inherited from the parent runtime — remove it in the parent config or override it there (the authored descriptor cannot express removal)`
105
+ };
106
+ authoredPlugins[input.key] = null;
107
+ } else delete authoredPlugins[input.key];
108
+ await require_save_config.saveBosConfig(session.root, {
109
+ ...authored,
110
+ plugins: Object.keys(authoredPlugins).length > 0 ? authoredPlugins : void 0
111
+ });
112
+ } else await require_save_config.saveBosConfig(session.root, nextConfig);
113
+ await require_code_artifacts.generateCodeArtifacts(session.root, nextConfig);
114
+ return {
115
+ status: "removed",
116
+ key: input.key
117
+ };
118
+ }),
119
+ pluginList: builder.pluginList.handler(async ({ context }) => {
120
+ return {
121
+ status: "listed",
122
+ plugins: listPluginAttachments(effect.Context.get(context["effect/context"], require_shared.BosDepsTag).session?.config ?? null)
123
+ };
124
+ }),
125
+ pluginPublish: builder.pluginPublish.handler(async ({ input, context }) => {
126
+ const session = effect.Context.get(context["effect/context"], require_shared.BosDepsTag).session;
127
+ if (!session?.config) return {
128
+ status: "error",
129
+ key: input.key,
130
+ error: require_config.MISSING_CONFIG_MESSAGE
131
+ };
132
+ const attachment = session.config?.plugins?.[input.key];
133
+ if (!attachment) return {
134
+ status: "error",
135
+ key: input.key,
136
+ error: `Plugin '${input.key}' is not configured`
137
+ };
138
+ const localPath = pluginLocalPath(session.root, attachment);
139
+ if (!localPath) return {
140
+ status: "error",
141
+ key: input.key,
142
+ error: `Plugin '${input.key}' does not have a local development path`
143
+ };
144
+ const result = await require_publish.publishToFastKv({
145
+ bosConfig: session.config,
146
+ runtimeConfig: session.runtime,
147
+ configDir: session.root,
148
+ env: "production",
149
+ build: true,
150
+ dryRun: false,
151
+ verbose: false,
152
+ packages: input.key
153
+ });
154
+ if (result.status === "error") return {
155
+ status: "error",
156
+ key: input.key,
157
+ error: result.error
158
+ };
159
+ const nextSession = await require_resolution_session.openResolution({ cwd: session.root }) ?? session;
160
+ const production = (nextSession.config?.plugins?.[input.key])?.production;
161
+ const manifest = production ? await require_fastkv.fetchRemotePluginManifest(production) : null;
162
+ if (production && nextSession.config) await require_code_artifacts.generateCodeArtifacts(session.root, nextSession.config);
163
+ return {
164
+ status: "published",
165
+ key: input.key,
166
+ path: localPath,
167
+ production,
168
+ fingerprint: result.fingerprint,
169
+ version: manifest?.plugin.version
170
+ };
171
+ })
172
+ };
173
+ }
174
+ function sanitizePluginKey(value) {
175
+ 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, "");
176
+ }
177
+ function defaultPluginKey(source) {
178
+ const normalized = source.replace(/^local:/, "").replace(/\/$/, "");
179
+ if (source.startsWith("local:")) return sanitizePluginKey((0, node_path.basename)(normalized)) || "plugin";
180
+ try {
181
+ const url = new URL(source);
182
+ return sanitizePluginKey((0, node_path.basename)(url.pathname) || url.hostname) || "plugin";
183
+ } catch {
184
+ return sanitizePluginKey(source) || "plugin";
185
+ }
186
+ }
187
+ function pluginLocalPath(configDir, attachment) {
188
+ const ref = require_build.getPluginRef(attachment);
189
+ const source = ref?.development ?? ref?.production;
190
+ if (!source?.startsWith("local:")) return null;
191
+ return (0, node_path.join)(configDir, source.slice(6));
192
+ }
193
+ function listPluginAttachments(config) {
194
+ return Object.entries(config?.plugins ?? {}).map(([key, attachment]) => {
195
+ const ref = require_build.getPluginRef(attachment);
196
+ return {
197
+ key,
198
+ development: ref?.development,
199
+ production: ref?.production,
200
+ localPath: ref?.development?.startsWith("local:") ? ref.development.slice(6) : void 0,
201
+ source: ref?.development?.startsWith("local:") ? "local" : "remote",
202
+ integrity: ref?.integrity,
203
+ version: ref?.version,
204
+ name: ref?.name
205
+ };
206
+ }).sort((a, b) => a.key.localeCompare(b.key));
207
+ }
208
+
209
+ //#endregion
210
+ exports.registerPlugins = registerPlugins;
211
+ //# sourceMappingURL=plugins.cjs.map