okengine 0.2.6 → 0.3.2

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 (681) hide show
  1. package/AGENTS.md +33 -30
  2. package/README.md +74 -340
  3. package/{spec/manifest.v1.schema.json → manifest.v1.schema.json} +40 -9
  4. package/package.json +47 -44
  5. package/site/content/docs/ai/llms-txt.mdx +54 -0
  6. package/site/content/docs/ai/mcp.mdx +123 -0
  7. package/site/content/docs/ai/meta.json +5 -0
  8. package/site/content/docs/ai/skills.mdx +53 -0
  9. package/site/content/docs/console/access.mdx +29 -0
  10. package/site/content/docs/console/ai.mdx +35 -0
  11. package/site/content/docs/console/architecture.mdx +35 -0
  12. package/site/content/docs/console/channels.mdx +37 -0
  13. package/site/content/docs/console/clock.mdx +31 -0
  14. package/site/content/docs/console/flows.mdx +31 -0
  15. package/site/content/docs/console/gates.mdx +35 -0
  16. package/site/content/docs/console/manifest-diff.mdx +34 -0
  17. package/site/content/docs/console/meta.json +23 -0
  18. package/site/content/docs/console/overview.mdx +40 -0
  19. package/site/content/docs/console/plugins.mdx +41 -0
  20. package/site/content/docs/console/privacy.mdx +32 -0
  21. package/site/content/docs/console/runs.mdx +40 -0
  22. package/site/content/docs/console/signals.mdx +31 -0
  23. package/site/content/docs/console/store.mdx +32 -0
  24. package/site/content/docs/console/tenancy.mdx +32 -0
  25. package/site/content/docs/console/traces.mdx +34 -0
  26. package/site/content/docs/console/vault.mdx +37 -0
  27. package/site/content/docs/elements/ai.mdx +180 -0
  28. package/site/content/docs/elements/channel.mdx +167 -0
  29. package/site/content/docs/elements/clock.mdx +182 -0
  30. package/site/content/docs/elements/flow.mdx +288 -0
  31. package/site/content/docs/elements/gate.mdx +171 -0
  32. package/site/content/docs/elements/meta.json +5 -0
  33. package/site/content/docs/elements/signal.mdx +171 -0
  34. package/site/content/docs/elements/store.mdx +320 -0
  35. package/site/content/docs/elements/vault.mdx +263 -0
  36. package/site/content/docs/get-started/basic-usage.mdx +124 -0
  37. package/site/content/docs/get-started/comparison.mdx +65 -0
  38. package/site/content/docs/get-started/installation.mdx +113 -0
  39. package/site/content/docs/get-started/introduction.mdx +123 -0
  40. package/site/content/docs/get-started/meta.json +5 -0
  41. package/site/content/docs/index.mdx +63 -0
  42. package/site/content/docs/meta.json +5 -0
  43. package/site/content/docs/plugins/compression.mdx +60 -0
  44. package/site/content/docs/plugins/cors.mdx +92 -0
  45. package/site/content/docs/plugins/csrf.mdx +96 -0
  46. package/site/content/docs/plugins/ip-allowlist.mdx +92 -0
  47. package/site/content/docs/plugins/maintenance-mode.mdx +101 -0
  48. package/site/content/docs/plugins/meta.json +15 -0
  49. package/site/content/docs/plugins/security-headers.mdx +136 -0
  50. package/site/content/docs/reference/cli.md +101 -0
  51. package/site/content/docs/reference/configuration.mdx +159 -0
  52. package/site/content/docs/reference/environment-variables.mdx +87 -0
  53. package/site/content/docs/reference/errors.mdx +80 -0
  54. package/site/content/docs/reference/fx.mdx +117 -0
  55. package/site/content/docs/reference/meta.json +5 -0
  56. package/site/content/docs/reference/plugins.mdx +249 -0
  57. package/site/content/docs/reference/security.md +63 -0
  58. package/src/auth/api-keys.ts +2 -5
  59. package/src/auth/attenuation.ts +2 -6
  60. package/src/auth/auth.test.ts +56 -31
  61. package/src/auth/invoke-as.ts +1 -3
  62. package/src/auth/operator.ts +8 -26
  63. package/src/auth/planes.ts +2 -7
  64. package/src/auth/plugin.ts +4 -7
  65. package/src/auth/roles.ts +1 -5
  66. package/src/auth/sessions.ts +10 -39
  67. package/src/cli/args.ts +1 -5
  68. package/src/cli/ask-dev-mode.ts +40 -0
  69. package/src/cli/build.ts +1 -2
  70. package/src/cli/client-add.test.ts +8 -15
  71. package/src/cli/client-add.ts +5 -14
  72. package/src/cli/completion.test.ts +1 -5
  73. package/src/cli/completion.ts +4 -17
  74. package/src/cli/db-auto-push.test.ts +64 -0
  75. package/src/cli/db-auto-push.ts +72 -0
  76. package/src/cli/db.test.ts +189 -0
  77. package/src/cli/db.ts +456 -0
  78. package/src/cli/dev-app-runner.ts +2 -8
  79. package/src/cli/dev-db-push.test.ts +193 -0
  80. package/src/cli/dev-mode.test.ts +45 -0
  81. package/src/cli/dev-mode.ts +78 -0
  82. package/src/cli/dev-schema-sync.test.ts +66 -0
  83. package/src/cli/dev-schema-sync.ts +139 -0
  84. package/src/cli/dev.test.ts +264 -15
  85. package/src/cli/dev.ts +355 -139
  86. package/src/cli/doc-staleness.test.ts +69 -0
  87. package/src/cli/docker-cli.test.ts +27 -8
  88. package/src/cli/docker.ts +11 -3
  89. package/src/cli/doctor-diff.test.ts +1 -5
  90. package/src/cli/doctor-diff.ts +17 -46
  91. package/src/cli/doctor-pii.ts +2 -7
  92. package/src/cli/doctor.test.ts +26 -4
  93. package/src/cli/doctor.ts +35 -11
  94. package/src/cli/drizzle-env.test.ts +67 -0
  95. package/src/cli/drizzle-env.ts +78 -0
  96. package/src/cli/ensure-drizzle-config.ts +50 -0
  97. package/src/cli/eval.ts +4 -14
  98. package/src/cli/gates-list.ts +1 -4
  99. package/src/cli/hero-meta.test.ts +17 -19
  100. package/src/cli/hero-meta.ts +20 -30
  101. package/src/cli/images.ts +3 -8
  102. package/src/cli/index.ts +11 -2
  103. package/src/cli/load-config.images.test.ts +14 -14
  104. package/src/cli/load-config.ts +47 -47
  105. package/src/cli/mcp-from-console.ts +1 -4
  106. package/src/cli/mode.ts +65 -0
  107. package/src/cli/openbao-bootstrap.test.ts +147 -0
  108. package/src/cli/openbao-bootstrap.ts +280 -0
  109. package/src/cli/openbao-restart.integration.test.ts +136 -0
  110. package/src/cli/ports.test.ts +7 -14
  111. package/src/cli/ports.ts +7 -5
  112. package/src/cli/privacy-erase.ts +1 -3
  113. package/src/cli/registry.ts +75 -25
  114. package/src/cli/resolve-dev-sql-env.test.ts +48 -0
  115. package/src/cli/resolve-dev-sql-env.ts +42 -0
  116. package/src/cli/schema.ts +3 -10
  117. package/src/cli/stack.ts +8 -10
  118. package/src/cli/start.ts +4 -15
  119. package/src/cli/upgrade.ts +1 -4
  120. package/src/cli/vault-cmd.ts +63 -0
  121. package/src/client/budget-entry.ts +1 -6
  122. package/src/client/create.test.ts +6 -12
  123. package/src/client/create.ts +2 -8
  124. package/src/client/errors.ts +1 -4
  125. package/src/client/index.ts +1 -6
  126. package/src/client/notes-contract.test.ts +4 -13
  127. package/src/client/transport.ts +9 -30
  128. package/src/client/types.ts +15 -30
  129. package/src/compiler/aot.test.ts +2 -9
  130. package/src/compiler/aot.ts +1 -4
  131. package/src/compiler/differential.test.ts +3 -11
  132. package/src/compiler/dynamic.ts +1 -4
  133. package/src/compiler/effects-infer.ts +8 -34
  134. package/src/compiler/emit.ts +1 -3
  135. package/src/compiler/extract.test.ts +136 -30
  136. package/src/compiler/extract.ts +485 -157
  137. package/src/compiler/fixtures/skyport/oke.config.ts +3 -3
  138. package/src/compiler/fixtures/skyport/src/flows/bookings/index.ts +7 -3
  139. package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +1 -3
  140. package/src/compiler/fixtures/skyport/src/flows/support/index.ts +4 -1
  141. package/src/compiler/fixtures/skyport.expected.json +24 -83
  142. package/src/compiler/fixtures/triggers/five-triggers.ts +1 -2
  143. package/src/compiler/http-parse.ts +2 -9
  144. package/src/compiler/index.ts +1 -5
  145. package/src/compiler/response.ts +16 -7
  146. package/src/compiler/sucrose.ts +11 -31
  147. package/src/config/define-config.test.ts +55 -34
  148. package/src/config/index.ts +177 -46
  149. package/src/config/resolve-driver.test.ts +28 -17
  150. package/src/console/budget.test.ts +1 -4
  151. package/src/console/index.ts +1 -4
  152. package/src/console/server/access.test.ts +15 -43
  153. package/src/console/server/access.ts +19 -49
  154. package/src/console/server/ai.test.ts +3 -11
  155. package/src/console/server/ai.ts +23 -46
  156. package/src/console/server/app.ts +16 -45
  157. package/src/console/server/auth-rate.test.ts +4 -12
  158. package/src/console/server/bind.ts +1 -5
  159. package/src/console/server/channels.test.ts +2 -6
  160. package/src/console/server/channels.ts +10 -35
  161. package/src/console/server/claim.ts +2 -8
  162. package/src/console/server/clock.test.ts +2 -6
  163. package/src/console/server/clock.ts +8 -26
  164. package/src/console/server/console.test.ts +1 -3
  165. package/src/console/server/diff.test.ts +5 -17
  166. package/src/console/server/diff.ts +10 -31
  167. package/src/console/server/dry-run.audit.test.ts +2 -8
  168. package/src/console/server/flows.ts +64 -233
  169. package/src/console/server/gates.test.ts +14 -50
  170. package/src/console/server/gates.ts +13 -48
  171. package/src/console/server/index.ts +2 -9
  172. package/src/console/server/live.ts +3 -12
  173. package/src/console/server/operator-db.test.ts +4 -15
  174. package/src/console/server/operator-db.ts +13 -32
  175. package/src/console/server/plugin.ts +50 -53
  176. package/src/console/server/plugins.test.ts +2 -6
  177. package/src/console/server/plugins.ts +17 -56
  178. package/src/console/server/runs-pii.ts +2 -7
  179. package/src/console/server/security.gate.test.ts +18 -40
  180. package/src/console/server/serve.ts +10 -25
  181. package/src/console/server/signals.test.ts +1 -3
  182. package/src/console/server/signals.ts +17 -40
  183. package/src/console/server/state.ts +21 -59
  184. package/src/console/server/store.test.ts +20 -22
  185. package/src/console/server/store.ts +31 -76
  186. package/src/console/server/vault.test.ts +12 -29
  187. package/src/console/server/vault.ts +44 -66
  188. package/src/console/ui/access/AccessA11yView.tsx +6 -21
  189. package/src/console/ui/access/a11y.test.tsx +3 -12
  190. package/src/console/ui/access/acknowledgement.test.ts +1 -4
  191. package/src/console/ui/access/acknowledgement.ts +1 -3
  192. package/src/console/ui/access/blast-radius.ts +1 -3
  193. package/src/console/ui/access/confirmation.test.ts +1 -5
  194. package/src/console/ui/access/confirmation.ts +1 -4
  195. package/src/console/ui/access/fixture.ts +1 -5
  196. package/src/console/ui/access/grantable.test.ts +1 -3
  197. package/src/console/ui/access/grantable.ts +2 -7
  198. package/src/console/ui/access/index.ts +2 -9
  199. package/src/console/ui/access/provenance.test.ts +1 -3
  200. package/src/console/ui/access/provenance.ts +2 -6
  201. package/src/console/ui/access/search.test.ts +1 -5
  202. package/src/console/ui/access/search.ts +2 -6
  203. package/src/console/ui/ai/AiA11yView.tsx +6 -17
  204. package/src/console/ui/ai/a11y.test.tsx +2 -5
  205. package/src/console/ui/ai/fixture.ts +2 -7
  206. package/src/console/ui/ai/format.ts +1 -3
  207. package/src/console/ui/ai/group.test.ts +1 -3
  208. package/src/console/ui/ai/group.ts +4 -12
  209. package/src/console/ui/ai/index.ts +2 -9
  210. package/src/console/ui/ai/promotion.test.ts +2 -7
  211. package/src/console/ui/ai/promotion.ts +4 -13
  212. package/src/console/ui/ai/search.test.ts +2 -11
  213. package/src/console/ui/ai/search.ts +3 -13
  214. package/src/console/ui/ai/types.ts +1 -8
  215. package/src/console/ui/architecture/ArchitectureA11yView.tsx +8 -29
  216. package/src/console/ui/architecture/a11y.test.tsx +1 -2
  217. package/src/console/ui/architecture/declared.ts +1 -5
  218. package/src/console/ui/architecture/index.ts +7 -35
  219. package/src/console/ui/architecture/layout.ts +1 -3
  220. package/src/console/ui/architecture/pathologies.ts +10 -19
  221. package/src/console/ui/architecture/search.ts +6 -15
  222. package/src/console/ui/architecture/traffic.ts +4 -14
  223. package/src/console/ui/architecture/types.ts +2 -10
  224. package/src/console/ui/architecture/view.test.ts +7 -19
  225. package/src/console/ui/architecture/view.ts +9 -36
  226. package/src/console/ui/channels/ChannelsA11yView.tsx +4 -13
  227. package/src/console/ui/channels/a11y.test.tsx +1 -2
  228. package/src/console/ui/channels/confirmation.test.ts +1 -4
  229. package/src/console/ui/channels/confirmation.ts +1 -4
  230. package/src/console/ui/channels/findings.ts +1 -5
  231. package/src/console/ui/channels/index.ts +2 -8
  232. package/src/console/ui/channels/locale.test.ts +1 -3
  233. package/src/console/ui/channels/locale.ts +2 -8
  234. package/src/console/ui/channels/search.ts +4 -13
  235. package/src/console/ui/channels/taxonomy.ts +1 -3
  236. package/src/console/ui/clock/ClockA11yView.tsx +9 -26
  237. package/src/console/ui/clock/a11y.test.tsx +2 -5
  238. package/src/console/ui/clock/confirmation.test.ts +1 -3
  239. package/src/console/ui/clock/confirmation.ts +1 -4
  240. package/src/console/ui/clock/findings.ts +1 -4
  241. package/src/console/ui/clock/health.ts +2 -7
  242. package/src/console/ui/clock/index.ts +2 -10
  243. package/src/console/ui/clock/search.test.ts +1 -3
  244. package/src/console/ui/clock/search.ts +2 -6
  245. package/src/console/ui/clock/timeline.test.ts +1 -3
  246. package/src/console/ui/clock/waiting-on.test.ts +1 -5
  247. package/src/console/ui/clock/waiting-on.ts +2 -7
  248. package/src/console/ui/diff/DiffA11yView.tsx +8 -17
  249. package/src/console/ui/diff/a11y.test.tsx +2 -5
  250. package/src/console/ui/diff/group.test.ts +3 -13
  251. package/src/console/ui/diff/group.ts +2 -8
  252. package/src/console/ui/diff/index.ts +2 -8
  253. package/src/console/ui/diff/search.test.ts +1 -5
  254. package/src/console/ui/diff/search.ts +4 -16
  255. package/src/console/ui/diff/summary.ts +1 -2
  256. package/src/console/ui/dist/assets/{index-Dy4jht9P.js → index-BWo8R7NR.js} +2 -2
  257. package/src/console/ui/dist/assets/{panel-access-Dd37LU2c.js → panel-access-C0J2D-a2.js} +1 -1
  258. package/src/console/ui/dist/assets/{panel-ai-CC7LR6-J.js → panel-ai-D_m6WQI8.js} +1 -1
  259. package/src/console/ui/dist/assets/{panel-architecture-B5b3iKCz.js → panel-architecture-CKnXFyUx.js} +1 -1
  260. package/src/console/ui/dist/assets/{panel-channels-CeNjTKXp.js → panel-channels-BOmQ-onL.js} +1 -1
  261. package/src/console/ui/dist/assets/{panel-clock-DgFTLoHV.js → panel-clock-giAq0Ccv.js} +1 -1
  262. package/src/console/ui/dist/assets/{panel-diff-DxehccqB.js → panel-diff-cdonmH8c.js} +1 -1
  263. package/src/console/ui/dist/assets/{panel-flows-BtrVn-Eg.js → panel-flows-DlCU5zjA.js} +2 -2
  264. package/src/console/ui/dist/assets/{panel-gates-Z9MKRGdH.js → panel-gates-XclZxWD5.js} +1 -1
  265. package/src/console/ui/dist/assets/{panel-overview-Dt_AeXgd.js → panel-overview-BznEOTnb.js} +1 -1
  266. package/src/console/ui/dist/assets/{panel-plugins-DWd0TowH.js → panel-plugins-CcGM1g64.js} +1 -1
  267. package/src/console/ui/dist/assets/{panel-runs-DGstFHeq.js → panel-runs-CGWNHLR4.js} +1 -1
  268. package/src/console/ui/dist/assets/{panel-signals-DzEa2Fnt.js → panel-signals-CNywkdak.js} +1 -1
  269. package/src/console/ui/dist/assets/{panel-store-BJkbNgxx.js → panel-store-KmTbFHMH.js} +1 -1
  270. package/src/console/ui/dist/assets/{panel-traces-BaRVO3gM.js → panel-traces-DBLx2ilD.js} +1 -1
  271. package/src/console/ui/dist/assets/panel-vault-CEnFc0dk.js +1 -0
  272. package/src/console/ui/dist/index.html +1 -1
  273. package/src/console/ui/flows/FlowsA11yView.tsx +7 -22
  274. package/src/console/ui/flows/a11y.test.tsx +2 -8
  275. package/src/console/ui/flows/buffer.test.ts +3 -11
  276. package/src/console/ui/flows/buffer.ts +4 -11
  277. package/src/console/ui/flows/confirmation.ts +1 -3
  278. package/src/console/ui/flows/contract.test.ts +3 -7
  279. package/src/console/ui/flows/contract.ts +12 -36
  280. package/src/console/ui/flows/graph.test.ts +3 -11
  281. package/src/console/ui/flows/graph.ts +5 -15
  282. package/src/console/ui/flows/index.ts +1 -6
  283. package/src/console/ui/flows/save-as-test.ts +1 -3
  284. package/src/console/ui/flows/search.ts +8 -25
  285. package/src/console/ui/flows/tiers.ts +2 -9
  286. package/src/console/ui/gates/GatesA11yView.tsx +4 -13
  287. package/src/console/ui/gates/a11y.test.tsx +2 -5
  288. package/src/console/ui/gates/audit.ts +1 -3
  289. package/src/console/ui/gates/denial.test.ts +1 -3
  290. package/src/console/ui/gates/denial.ts +4 -12
  291. package/src/console/ui/gates/findings.ts +1 -3
  292. package/src/console/ui/gates/group.test.ts +3 -3
  293. package/src/console/ui/gates/group.ts +3 -11
  294. package/src/console/ui/gates/index.ts +2 -10
  295. package/src/console/ui/gates/search.ts +3 -10
  296. package/src/console/ui/overview/OverviewA11yView.tsx +9 -27
  297. package/src/console/ui/overview/a11y.test.tsx +1 -2
  298. package/src/console/ui/overview/busiest.ts +1 -3
  299. package/src/console/ui/overview/compose.ts +1 -13
  300. package/src/console/ui/overview/cost.ts +34 -38
  301. package/src/console/ui/overview/fixture.ts +21 -26
  302. package/src/console/ui/overview/golden.ts +4 -14
  303. package/src/console/ui/overview/index.ts +2 -9
  304. package/src/console/ui/overview/rank.test.ts +3 -10
  305. package/src/console/ui/overview/rank.ts +2 -7
  306. package/src/console/ui/overview/slo.test.ts +5 -9
  307. package/src/console/ui/overview/slo.ts +6 -23
  308. package/src/console/ui/overview/verdict.ts +3 -10
  309. package/src/console/ui/plugins/PluginsA11yView.tsx +8 -18
  310. package/src/console/ui/plugins/a11y.test.tsx +1 -2
  311. package/src/console/ui/plugins/fixture.ts +2 -4
  312. package/src/console/ui/plugins/group.test.ts +1 -3
  313. package/src/console/ui/plugins/group.ts +1 -6
  314. package/src/console/ui/plugins/index.ts +3 -13
  315. package/src/console/ui/plugins/search.ts +7 -19
  316. package/src/console/ui/runs/RunsA11yView.tsx +5 -20
  317. package/src/console/ui/runs/a11y.test.tsx +2 -5
  318. package/src/console/ui/runs/explain.ts +2 -6
  319. package/src/console/ui/runs/group.ts +3 -12
  320. package/src/console/ui/runs/histogram.test.ts +2 -11
  321. package/src/console/ui/runs/histogram.ts +1 -4
  322. package/src/console/ui/runs/index.ts +4 -18
  323. package/src/console/ui/runs/project.ts +2 -6
  324. package/src/console/ui/runs/query.test.ts +1 -3
  325. package/src/console/ui/runs/query.ts +12 -35
  326. package/src/console/ui/runs/search.ts +5 -19
  327. package/src/console/ui/runs/trace-link.test.ts +2 -6
  328. package/src/console/ui/runs/trace-link.ts +4 -16
  329. package/src/console/ui/runs/types.ts +1 -3
  330. package/src/console/ui/shell/App.tsx +2 -10
  331. package/src/console/ui/shell/client.ts +22 -115
  332. package/src/console/ui/shell/components/ui.tsx +1 -4
  333. package/src/console/ui/shell/layout/Shell.tsx +2 -4
  334. package/src/console/ui/shell/main.tsx +31 -96
  335. package/src/console/ui/shell/panels/access/AccessPanel.tsx +34 -98
  336. package/src/console/ui/shell/panels/ai/AiPanel.tsx +35 -106
  337. package/src/console/ui/shell/panels/architecture/ArchitecturePanel.tsx +18 -66
  338. package/src/console/ui/shell/panels/channels/ChannelsPanel.tsx +20 -57
  339. package/src/console/ui/shell/panels/clock/ClockPanel.tsx +22 -54
  340. package/src/console/ui/shell/panels/diff/DiffPanel.tsx +20 -61
  341. package/src/console/ui/shell/panels/flows/ContractEditor.tsx +6 -23
  342. package/src/console/ui/shell/panels/flows/FlowDrawer.tsx +13 -28
  343. package/src/console/ui/shell/panels/flows/FlowsPanel.tsx +9 -29
  344. package/src/console/ui/shell/panels/gates/GatesPanel.tsx +24 -80
  345. package/src/console/ui/shell/panels/overview/OverviewPanel.tsx +20 -58
  346. package/src/console/ui/shell/panels/plugins/PluginsPanel.tsx +16 -41
  347. package/src/console/ui/shell/panels/runs/RunsPanel.tsx +31 -99
  348. package/src/console/ui/shell/panels/signals/SignalsPanel.tsx +38 -101
  349. package/src/console/ui/shell/panels/store/StorePanel.tsx +27 -66
  350. package/src/console/ui/shell/panels/traces/TracesPanel.tsx +28 -89
  351. package/src/console/ui/shell/panels/vault/VaultPanel.tsx +22 -53
  352. package/src/console/ui/shell/setup/Wizard.tsx +3 -5
  353. package/src/console/ui/shell/styles.css +1 -2
  354. package/src/console/ui/signals/SignalsA11yView.tsx +9 -33
  355. package/src/console/ui/signals/a11y.test.tsx +2 -5
  356. package/src/console/ui/signals/confirmation.test.ts +1 -5
  357. package/src/console/ui/signals/confirmation.ts +2 -6
  358. package/src/console/ui/signals/dry-run.ts +1 -3
  359. package/src/console/ui/signals/durable.ts +1 -3
  360. package/src/console/ui/signals/findings.ts +1 -3
  361. package/src/console/ui/signals/group.test.ts +2 -8
  362. package/src/console/ui/signals/group.ts +2 -10
  363. package/src/console/ui/signals/index.ts +1 -4
  364. package/src/console/ui/signals/monitor.ts +2 -7
  365. package/src/console/ui/signals/schema-form.test.ts +3 -14
  366. package/src/console/ui/signals/schema-form.ts +1 -4
  367. package/src/console/ui/signals/search.ts +4 -13
  368. package/src/console/ui/store/StoreA11yView.tsx +3 -9
  369. package/src/console/ui/store/a11y.test.tsx +2 -5
  370. package/src/console/ui/store/confirmation.test.ts +1 -3
  371. package/src/console/ui/store/confirmation.ts +1 -4
  372. package/src/console/ui/store/dry-run.ts +2 -5
  373. package/src/console/ui/store/fixture.ts +1 -2
  374. package/src/console/ui/store/group.test.ts +1 -6
  375. package/src/console/ui/store/group.ts +1 -4
  376. package/src/console/ui/store/index.ts +1 -5
  377. package/src/console/ui/store/search.ts +2 -6
  378. package/src/console/ui/store/will-not-fire.ts +1 -2
  379. package/src/console/ui/traces/TracesA11yView.tsx +10 -29
  380. package/src/console/ui/traces/a11y.test.tsx +1 -2
  381. package/src/console/ui/traces/chain.test.ts +5 -19
  382. package/src/console/ui/traces/chain.ts +1 -3
  383. package/src/console/ui/traces/critical-path.test.ts +1 -3
  384. package/src/console/ui/traces/critical-path.ts +2 -6
  385. package/src/console/ui/traces/filter.test.ts +2 -6
  386. package/src/console/ui/traces/filter.ts +5 -13
  387. package/src/console/ui/traces/fold.test.ts +4 -12
  388. package/src/console/ui/traces/fold.ts +1 -3
  389. package/src/console/ui/traces/mini.ts +1 -3
  390. package/src/console/ui/traces/replay.test.ts +1 -3
  391. package/src/console/ui/traces/replay.ts +1 -3
  392. package/src/console/ui/traces/sampling.ts +1 -4
  393. package/src/console/ui/traces/search.ts +4 -17
  394. package/src/console/ui/traces/tier.ts +1 -3
  395. package/src/console/ui/vault/VaultA11yView.tsx +5 -17
  396. package/src/console/ui/vault/a11y.test.tsx +1 -2
  397. package/src/console/ui/vault/blast-radius.ts +1 -3
  398. package/src/console/ui/vault/confirmation.test.ts +1 -5
  399. package/src/console/ui/vault/confirmation.ts +1 -4
  400. package/src/console/ui/vault/dormant.test.ts +1 -4
  401. package/src/console/ui/vault/export-safe.test.ts +1 -5
  402. package/src/console/ui/vault/export-safe.ts +1 -4
  403. package/src/console/ui/vault/fixture.ts +3 -3
  404. package/src/console/ui/vault/group.ts +1 -2
  405. package/src/console/ui/vault/index.ts +2 -10
  406. package/src/console/ui/vault/search.ts +2 -6
  407. package/src/console/ui/vault/types.ts +1 -1
  408. package/src/console/xss.gate.test.ts +1 -3
  409. package/src/docker/compose.ts +215 -27
  410. package/src/docker/derive.ts +6 -14
  411. package/src/docker/docker.test.ts +118 -15
  412. package/src/docker/dockerfile.integration.test.ts +12 -21
  413. package/src/docker/helpers.ts +5 -4
  414. package/src/docker/index.ts +9 -6
  415. package/src/docker/pin.ts +1 -9
  416. package/src/docker/recipes/index.ts +6 -6
  417. package/src/docker/recipes/mailpit.ts +22 -0
  418. package/src/docker/recipes/openbao.ts +47 -0
  419. package/src/docker/recipes/postgres.ts +17 -6
  420. package/src/docker/recipes/redis.ts +11 -2
  421. package/src/docker/recipes/rustfs.ts +32 -0
  422. package/src/docker/stack-id.test.ts +73 -5
  423. package/src/docker/stack-id.ts +124 -33
  424. package/src/docker/stack.integration.test.ts +6 -21
  425. package/src/docker/stack.ts +36 -4
  426. package/src/docker/types.ts +16 -4
  427. package/src/docs-origin.ts +4 -4
  428. package/src/drivers/ai-anthropic.ts +5 -14
  429. package/src/drivers/ai-mock.ts +2 -5
  430. package/src/drivers/ai-openai-compatible.ts +4 -10
  431. package/src/drivers/ai-providers.test.ts +6 -13
  432. package/src/drivers/bun-native-completeness.test.ts +6 -15
  433. package/src/drivers/channel-console.ts +6 -7
  434. package/src/drivers/channel-fcm.ts +20 -30
  435. package/src/drivers/channel-resend.ts +1 -3
  436. package/src/drivers/channel-smtp.ts +2 -6
  437. package/src/drivers/channel-types.ts +2 -12
  438. package/src/drivers/channel-unifonic.ts +2 -6
  439. package/src/drivers/channel-wa-cloud.ts +2 -6
  440. package/src/drivers/channel-webpush.ts +21 -60
  441. package/src/drivers/conformance.test.ts +2 -10
  442. package/src/drivers/conformance.ts +8 -21
  443. package/src/drivers/drizzle-dialect.test.ts +20 -0
  444. package/src/drivers/drizzle-dialect.ts +37 -0
  445. package/src/drivers/fs.ts +2 -8
  446. package/src/drivers/index.ts +12 -57
  447. package/src/drivers/memory.ts +287 -75
  448. package/src/drivers/pgvector.ts +7 -11
  449. package/src/drivers/postgres.ts +7 -13
  450. package/src/drivers/redis.ts +13 -37
  451. package/src/drivers/s3.ts +15 -18
  452. package/src/drivers/signal-engine.ts +12 -49
  453. package/src/drivers/signal-memory.ts +2 -8
  454. package/src/drivers/signal-nats.ts +4 -9
  455. package/src/drivers/signal-postgres.ts +62 -129
  456. package/src/drivers/signal-redis.ts +7 -21
  457. package/src/drivers/signal-types.ts +1 -4
  458. package/src/drivers/sqlite.ts +3 -12
  459. package/src/drivers/types.ts +4 -23
  460. package/src/drivers/vault-driver-removal.test.ts +55 -0
  461. package/src/drivers/vault-env.ts +2 -6
  462. package/src/drivers/vault-infisical.ts +1 -5
  463. package/src/drivers/vault-managed.ts +1 -5
  464. package/src/drivers/vault-memory.ts +1 -5
  465. package/src/drivers/vault-openbao.test.ts +97 -0
  466. package/src/drivers/vault-openbao.ts +103 -40
  467. package/src/drivers/vault-types.ts +3 -16
  468. package/src/elements/ai/declare.ts +4 -14
  469. package/src/elements/ai/eval.ts +2 -6
  470. package/src/elements/ai/pii.ts +1 -3
  471. package/src/elements/ai/runtime.ts +12 -50
  472. package/src/elements/ai/schema.ts +4 -15
  473. package/src/elements/ai.test.ts +13 -24
  474. package/src/elements/ai.ts +1 -5
  475. package/src/elements/channel/consent.ts +3 -12
  476. package/src/elements/channel/costs.ts +4 -15
  477. package/src/elements/channel/declare.ts +1 -4
  478. package/src/elements/channel/email-auth.ts +1 -4
  479. package/src/elements/channel/locale.ts +2 -10
  480. package/src/elements/channel/mask.ts +1 -3
  481. package/src/elements/channel/mime.ts +2 -12
  482. package/src/elements/channel/outcomes.test.ts +1 -5
  483. package/src/elements/channel/outcomes.ts +5 -15
  484. package/src/elements/channel/receipts.ts +2 -7
  485. package/src/elements/channel/runtime.ts +28 -74
  486. package/src/elements/channel/suppression.ts +8 -14
  487. package/src/elements/channel.test.ts +8 -31
  488. package/src/elements/channel.ts +3 -14
  489. package/src/elements/clock/actions.ts +6 -18
  490. package/src/elements/clock/declare.ts +1 -3
  491. package/src/elements/clock/dst.ts +1 -5
  492. package/src/elements/clock/durable.ts +4 -16
  493. package/src/elements/clock/health.ts +2 -7
  494. package/src/elements/clock/leader.ts +2 -9
  495. package/src/elements/clock/reconcile.ts +4 -15
  496. package/src/elements/clock/runtime.ts +2 -5
  497. package/src/elements/clock/schedule.ts +4 -20
  498. package/src/elements/clock.test.ts +2 -7
  499. package/src/elements/clock.ts +5 -23
  500. package/src/elements/gate/permissions.ts +1 -4
  501. package/src/elements/gate/runtime.ts +7 -28
  502. package/src/elements/gate.ts +1 -5
  503. package/src/elements/index.ts +9 -7
  504. package/src/elements/signal/declare.ts +2 -7
  505. package/src/elements/signal/reconcile.test.ts +1 -4
  506. package/src/elements/signal/runtime.ts +1 -3
  507. package/src/elements/signal.test.ts +3 -15
  508. package/src/elements/signal.ts +2 -8
  509. package/src/elements/store/cache.test.ts +46 -0
  510. package/src/elements/store/cache.ts +3 -11
  511. package/src/elements/store/classify.ts +5 -22
  512. package/src/elements/store/declare.ts +11 -17
  513. package/src/elements/store/domain-ddl.test.ts +86 -0
  514. package/src/elements/store/emit-drizzle.ts +363 -0
  515. package/src/elements/store/files-policy.test.ts +1 -5
  516. package/src/elements/store/files-policy.ts +4 -12
  517. package/src/elements/store/load-plugin-tables.ts +103 -0
  518. package/src/elements/store/missing-relation.test.ts +83 -0
  519. package/src/elements/store/missing-relation.ts +38 -0
  520. package/src/elements/store/replica.ts +1 -4
  521. package/src/elements/store/resource-list-docs.fixture.ts +56 -0
  522. package/src/elements/store/resource-list-docs.test.ts +79 -0
  523. package/src/elements/store/resource.test.ts +253 -0
  524. package/src/elements/store/resource.ts +786 -0
  525. package/src/elements/store/runtime.ts +25 -28
  526. package/src/elements/store/schema-decl.test.ts +227 -0
  527. package/src/elements/store/schema-decl.ts +516 -0
  528. package/src/elements/store/sql-condition.test.ts +132 -0
  529. package/src/elements/store/sql-condition.ts +293 -65
  530. package/src/elements/store/sql-session.test.ts +135 -0
  531. package/src/elements/store/sql-session.ts +241 -84
  532. package/src/elements/store/table.ts +69 -23
  533. package/src/elements/store.test.ts +17 -39
  534. package/src/elements/store.ts +53 -31
  535. package/src/elements/vault/chain.ts +34 -0
  536. package/src/elements/vault/declare.ts +22 -32
  537. package/src/elements/vault/fingerprint.ts +2 -7
  538. package/src/elements/vault/redact.ts +2 -6
  539. package/src/elements/vault/runtime.ts +19 -33
  540. package/src/elements/vault.test.ts +12 -55
  541. package/src/elements/vault.ts +9 -13
  542. package/src/index.ts +5 -2
  543. package/src/kernel/adopt-routes.ts +15 -29
  544. package/src/kernel/app.ts +92 -118
  545. package/src/kernel/auth-resolve.ts +2 -9
  546. package/src/kernel/boot-bind/ai.ts +1 -4
  547. package/src/kernel/boot-bind/channel.test.ts +60 -0
  548. package/src/kernel/boot-bind/channel.ts +61 -5
  549. package/src/kernel/boot-bind/clock.ts +2 -6
  550. package/src/kernel/boot-bind/gate.ts +2 -8
  551. package/src/kernel/boot-bind/runs.ts +1 -3
  552. package/src/kernel/boot-bind/signal.ts +3 -10
  553. package/src/kernel/boot-bind/store.test.ts +27 -18
  554. package/src/kernel/boot-bind/store.ts +93 -52
  555. package/src/kernel/boot-bind/vault.ts +2 -8
  556. package/src/kernel/boot.test.ts +4 -10
  557. package/src/kernel/boot.ts +30 -77
  558. package/src/kernel/budget.test.ts +1 -3
  559. package/src/kernel/capability.ts +3 -10
  560. package/src/kernel/dry-run.test.ts +1 -4
  561. package/src/kernel/dry-run.ts +3 -11
  562. package/src/kernel/edge.test.ts +68 -0
  563. package/src/kernel/effects.test.ts +1 -5
  564. package/src/kernel/effects.ts +4 -11
  565. package/src/kernel/errors.registry.test.ts +2 -8
  566. package/src/kernel/errors.ts +23 -32
  567. package/src/kernel/flow.test.ts +12 -25
  568. package/src/kernel/flow.ts +13 -25
  569. package/src/kernel/fx.test.ts +31 -40
  570. package/src/kernel/fx.ts +135 -90
  571. package/src/kernel/hook-timing.test.ts +3 -6
  572. package/src/kernel/hook-timing.ts +5 -14
  573. package/src/kernel/hooks.test.ts +43 -10
  574. package/src/kernel/hooks.ts +25 -12
  575. package/src/kernel/index.ts +11 -17
  576. package/src/kernel/journal.ts +7 -31
  577. package/src/kernel/on.ts +45 -9
  578. package/src/kernel/pipeline.test.ts +10 -19
  579. package/src/kernel/pipeline.ts +5 -17
  580. package/src/kernel/plug.ts +4 -11
  581. package/src/kernel/plugin/conflicts.test.ts +13 -25
  582. package/src/kernel/plugin/decorate.test.ts +8 -13
  583. package/src/kernel/plugin/scoping.test.ts +4 -11
  584. package/src/kernel/plugin.ts +81 -27
  585. package/src/kernel/registry-isolation.test.ts +74 -0
  586. package/src/kernel/registry.ts +102 -30
  587. package/src/kernel/router.test.ts +15 -13
  588. package/src/kernel/router.ts +9 -29
  589. package/src/kernel/routing-budget.test.ts +1 -3
  590. package/src/kernel/run-telemetry.ts +1 -3
  591. package/src/kernel/triggers.ts +63 -21
  592. package/src/manifest/diff.test.ts +26 -91
  593. package/src/manifest/diff.ts +95 -225
  594. package/src/manifest/fixtures/skyport.excerpt.json +1 -1
  595. package/src/manifest/fixtures/skyport.manifest.json +1 -1
  596. package/src/manifest/index.ts +3 -10
  597. package/src/manifest/types.ts +30 -6
  598. package/src/manifest/undeclared.test.ts +4 -12
  599. package/src/manifest/undeclared.ts +1 -2
  600. package/src/manifest/validate.test.ts +2 -6
  601. package/src/manifest/validate.ts +5 -15
  602. package/src/mcp/authorization.ts +8 -27
  603. package/src/mcp/confirmation.ts +3 -10
  604. package/src/mcp/data.ts +2 -6
  605. package/src/mcp/docs-index.ts +4 -7
  606. package/src/mcp/docs-mcp.test.ts +3 -12
  607. package/src/mcp/docs-server.ts +7 -27
  608. package/src/mcp/docs-tools.ts +2 -6
  609. package/src/mcp/index.ts +1 -6
  610. package/src/mcp/injection.gate.test.ts +4 -18
  611. package/src/mcp/mcp.test.ts +18 -49
  612. package/src/mcp/protocol.ts +3 -10
  613. package/src/mcp/server.ts +11 -52
  614. package/src/mcp/session.ts +4 -14
  615. package/src/mcp/tools.ts +14 -50
  616. package/src/plugins/catalogue.test.ts +3 -7
  617. package/src/plugins/catalogue.ts +1 -3
  618. package/src/plugins/compression.test.ts +127 -0
  619. package/src/plugins/compression.ts +94 -0
  620. package/src/plugins/config-source.test.ts +204 -0
  621. package/src/plugins/config-source.ts +209 -0
  622. package/src/plugins/cors.test.ts +138 -0
  623. package/src/plugins/cors.ts +129 -0
  624. package/src/plugins/csrf.test.ts +102 -0
  625. package/src/plugins/csrf.ts +86 -0
  626. package/src/plugins/headers.ts +54 -0
  627. package/src/plugins/index.ts +26 -0
  628. package/src/plugins/ip-allowlist.test.ts +105 -0
  629. package/src/plugins/ip-allowlist.ts +76 -0
  630. package/src/plugins/maintenance-mode.test.ts +91 -0
  631. package/src/plugins/maintenance-mode.ts +85 -0
  632. package/src/plugins/node-import-scan.ts +2 -5
  633. package/src/plugins/security-headers.test.ts +243 -0
  634. package/src/plugins/security-headers.ts +255 -0
  635. package/src/plugins/supply-chain.ts +5 -17
  636. package/src/release/exports.ts +3 -8
  637. package/src/release/measure.exports.test.ts +1 -3
  638. package/src/release/measure.ts +16 -45
  639. package/src/runs/bench.test.ts +1 -3
  640. package/src/runs/collect.ts +8 -25
  641. package/src/runs/drivers/clickhouse.ts +2 -9
  642. package/src/runs/drivers/files.ts +9 -31
  643. package/src/runs/drivers/memory.ts +5 -22
  644. package/src/runs/drivers/postgres.ts +8 -20
  645. package/src/runs/duckdb.ts +2 -8
  646. package/src/runs/index.ts +3 -14
  647. package/src/runs/outlier.ts +3 -10
  648. package/src/runs/parquet.ts +8 -26
  649. package/src/runs/privacy.ts +2 -8
  650. package/src/runs/runs.test.ts +3 -9
  651. package/src/runs/runtime.ts +7 -32
  652. package/src/runs/shred.ts +10 -29
  653. package/src/runs/types.ts +1 -4
  654. package/src/runtime/bun.ts +4 -15
  655. package/src/runtime/cold-start.bench.ts +1 -3
  656. package/src/runtime/dev-request-log.test.ts +1 -4
  657. package/src/runtime/dev-request-log.ts +1 -4
  658. package/src/runtime/index.ts +1 -6
  659. package/src/runtime/primitives.ts +5 -4
  660. package/src/runtime/security.ts +3 -13
  661. package/src/runtime/serve.test.ts +4 -7
  662. package/src/runtime/types.ts +1 -4
  663. package/src/runtime/web-standard.ts +3 -15
  664. package/src/term.test.ts +4 -6
  665. package/src/term.ts +49 -98
  666. package/src/test/create-test-app.test.ts +4 -14
  667. package/src/test/create-test-app.ts +27 -33
  668. package/src/test/provisions.integration.test.ts +3 -11
  669. package/src/upgrade/codemods.test.ts +25 -6
  670. package/src/upgrade/codemods.ts +116 -3
  671. package/src/validation/standard-schema.test.ts +2 -5
  672. package/src/validation/standard-schema.ts +13 -33
  673. package/docs/spec/console.md +0 -739
  674. package/docs/spec/example.md +0 -1196
  675. package/docs/spec/four-applications.md +0 -1195
  676. package/docs/spec/unified-theory.md +0 -489
  677. package/src/cli/doc-drift.test.ts +0 -146
  678. package/src/cli/doc-drift.ts +0 -430
  679. package/src/cli/doctor-diff-examples.ts +0 -92
  680. package/src/console/ui/dist/assets/panel-vault-BbfWdox0.js +0 -1
  681. package/src/drivers/vault-sops.ts +0 -271
@@ -6,26 +6,11 @@
6
6
  * Never installs — hands a `bun add …` command for community packages.
7
7
  */
8
8
 
9
- import {
10
- allHookCostSummaries,
11
- type HookCostSummary,
12
- } from "../../kernel/hook-timing.ts";
9
+ import { allHookCostSummaries, type HookCostSummary } from "../../kernel/hook-timing.ts";
13
10
  import type { PluginRegistry } from "../../kernel/registry.ts";
14
- import type {
15
- Manifest,
16
- ManifestChange,
17
- Plugin,
18
- PluginOrigin,
19
- } from "../../manifest/types.ts";
20
- import {
21
- CORE_PLUGINS,
22
- isCorePluginOn,
23
- type PluginConfigProbe,
24
- } from "../../plugins/catalogue.ts";
25
- import type {
26
- PackageJsonProbe,
27
- SupplyChainSignals,
28
- } from "../../plugins/supply-chain.ts";
11
+ import type { Manifest, ManifestChange, Plugin, PluginOrigin } from "../../manifest/types.ts";
12
+ import { CORE_PLUGINS, isCorePluginOn, type PluginConfigProbe } from "../../plugins/catalogue.ts";
13
+ import type { PackageJsonProbe, SupplyChainSignals } from "../../plugins/supply-chain.ts";
29
14
  import type { ScanSourceFile } from "../../plugins/node-import-scan.ts";
30
15
 
31
16
  /** Plugin on/off — derived, never a config flag. */
@@ -93,21 +78,15 @@ export interface ProjectPluginsOptions {
93
78
  readonly cwd: string;
94
79
  readonly now: () => number;
95
80
  /** Injected capability-diff changes keyed by plugin id (tests). */
96
- readonly capabilityDiffByPlugin?: Readonly<
97
- Record<string, readonly ManifestChange[]>
98
- >;
81
+ readonly capabilityDiffByPlugin?: Readonly<Record<string, readonly ManifestChange[]>>;
99
82
  /** When true, run doctor merge-base diff (default true). */
100
83
  readonly resolveCapabilityDiff?: boolean;
101
84
  /** Injected hook cost summaries (tests). */
102
85
  readonly hookCosts?: Readonly<Record<string, HookCostSummary>>;
103
86
  /** Per-plugin sources for oxc scan. */
104
- readonly sourcesByPlugin?: Readonly<
105
- Record<string, readonly ScanSourceFile[]>
106
- >;
87
+ readonly sourcesByPlugin?: Readonly<Record<string, readonly ScanSourceFile[]>>;
107
88
  /** Per-plugin package.json injections (tests). */
108
- readonly packageJsonByPlugin?: Readonly<
109
- Record<string, PackageJsonProbe | null>
110
- >;
89
+ readonly packageJsonByPlugin?: Readonly<Record<string, PackageJsonProbe | null>>;
111
90
  /** Per-plugin boot conflicts. */
112
91
  readonly bootConflictsByPlugin?: Readonly<Record<string, readonly string[]>>;
113
92
  /** Skip npm network. */
@@ -143,12 +122,7 @@ export async function projectPluginsList(
143
122
  const rows: ConsolePluginRow[] = [];
144
123
 
145
124
  for (const spec of CORE_PLUGINS) {
146
- const on = isCorePluginOn(
147
- spec.id,
148
- options.manifest,
149
- options.config,
150
- new Set(plugged.keys()),
151
- );
125
+ const on = isCorePluginOn(spec.id, options.manifest, options.config, new Set(plugged.keys()));
152
126
  const meta = plugged.get(spec.id);
153
127
  const manifestPlugin = options.manifest?.plugins?.[spec.id];
154
128
  rows.push(
@@ -242,12 +216,8 @@ function collectPlugged(
242
216
  const scopes = [...(prev?.scopes ?? []), scope];
243
217
  out.set(id, {
244
218
  version: caps.version ?? prev?.version ?? null,
245
- declares: caps.declares.length
246
- ? [...caps.declares]
247
- : (prev?.declares ?? []),
248
- intercepts: caps.intercepts.length
249
- ? [...caps.intercepts]
250
- : (prev?.intercepts ?? []),
219
+ declares: caps.declares.length ? [...caps.declares] : (prev?.declares ?? []),
220
+ intercepts: caps.intercepts.length ? [...caps.intercepts] : (prev?.intercepts ?? []),
251
221
  scopes,
252
222
  origin: prev?.origin,
253
223
  });
@@ -280,13 +250,10 @@ async function buildRow(input: {
280
250
  readonly options: ProjectPluginsOptions;
281
251
  readonly enableHint: string | null;
282
252
  }): Promise<ConsolePluginRow> {
283
- const packageName =
284
- input.origin === "community" ? communityPackageName(input.id) : null;
253
+ const packageName = input.origin === "community" ? communityPackageName(input.id) : null;
285
254
  const cost = input.costs[input.id] ?? null;
286
255
  const intercepts = input.interceptStages.map((stage) => {
287
- const stageCost = cost?.byStage[
288
- stage as keyof NonNullable<typeof cost>["byStage"]
289
- ];
256
+ const stageCost = cost?.byStage[stage as keyof NonNullable<typeof cost>["byStage"]];
290
257
  return {
291
258
  stage,
292
259
  meanMs: stageCost?.meanMs ?? null,
@@ -305,9 +272,8 @@ async function buildRow(input: {
305
272
  fetchNpm: input.options.fetchNpm,
306
273
  };
307
274
 
308
- const { projectSupplyChain, projectSupplyChainSync } = await import(
309
- "../../plugins/supply-chain.ts"
310
- );
275
+ const { projectSupplyChain, projectSupplyChainSync } =
276
+ await import("../../plugins/supply-chain.ts");
311
277
  const supplyChain = input.options.syncSupplyChain
312
278
  ? projectSupplyChainSync(supplyOpts)
313
279
  : await projectSupplyChain(supplyOpts);
@@ -337,10 +303,7 @@ async function buildRow(input: {
337
303
  kind: c.kind,
338
304
  summary: c.summary,
339
305
  })),
340
- installCommand:
341
- input.origin === "community" && packageName
342
- ? `bun add ${packageName}`
343
- : null,
306
+ installCommand: input.origin === "community" && packageName ? `bun add ${packageName}` : null,
344
307
  enableHint: input.enableHint,
345
308
  packageName,
346
309
  };
@@ -400,9 +363,7 @@ export function filterCapabilityDiffForPlugin(
400
363
  pluginId: string,
401
364
  ): readonly ManifestChange[] {
402
365
  const prefix = `/plugins/${pluginId}`;
403
- return changes.filter(
404
- (c) => c.path === prefix || c.path.startsWith(`${prefix}/`),
405
- );
366
+ return changes.filter((c) => c.path === prefix || c.path.startsWith(`${prefix}/`));
406
367
  }
407
368
 
408
369
  function communityPackageName(id: string): string {
@@ -421,7 +382,7 @@ function enableHintForCore(id: string, on: boolean): string | null {
421
382
  case "rate-limit":
422
383
  return "app.plug(rateLimit({ max: 30 })) // or unit.plug / flow.plug";
423
384
  case "tenancy":
424
- return "oke.config.ts → tenancy: { isolation: \"row\", resolve: … }";
385
+ return 'oke.config.ts → tenancy: { isolation: "row", resolve: … }';
425
386
  case "privacy":
426
387
  return "oke.config.ts → privacy: { … } // or runs: { redact: { … } }";
427
388
  default:
@@ -39,9 +39,7 @@ export function piiFieldNamesFromManifest(
39
39
  "pii" in tags &&
40
40
  (tags as { pii?: boolean }).pii
41
41
  ) {
42
- const col = key.includes(".")
43
- ? key.slice(key.lastIndexOf(".") + 1)
44
- : key;
42
+ const col = key.includes(".") ? key.slice(key.lastIndexOf(".") + 1) : key;
45
43
  names.add(col);
46
44
  }
47
45
  }
@@ -88,10 +86,7 @@ export function maskWideEventForConsole(
88
86
  if (line.data === undefined) return line;
89
87
  return {
90
88
  ...line,
91
- data: maskPiiRecord(
92
- line.data as Record<string, unknown>,
93
- piiFields,
94
- ),
89
+ data: maskPiiRecord(line.data as Record<string, unknown>, piiFields),
95
90
  };
96
91
  });
97
92
  return { ...event, dimensions, logs };
@@ -17,18 +17,12 @@ import type { WideEvent } from "../../runs/types.ts";
17
17
  import type { ConsoleAppHandle } from "./app.ts";
18
18
  import { AUTH_RATE_LIMIT } from "./auth-rate.ts";
19
19
  import { projectRun } from "./flows.ts";
20
- import {
21
- maskWideEventForConsole,
22
- piiFieldNamesFromManifest,
23
- } from "./runs-pii.ts";
20
+ import { maskWideEventForConsole, piiFieldNamesFromManifest } from "./runs-pii.ts";
24
21
  import { startConsoleApp } from "./serve.ts";
25
22
 
26
23
  /** Deduplicate console.* flows from the live binding registry. */
27
24
  function consoleFlows(handle: ConsoleAppHandle) {
28
- const byName = new Map<
29
- string,
30
- { readonly name: string; readonly plane: string | undefined }
31
- >();
25
+ const byName = new Map<string, { readonly name: string; readonly plane: string | undefined }>();
32
26
  for (const binding of handle.app.bindings) {
33
27
  const name = binding.flow.name;
34
28
  if (!name.startsWith("console.")) continue;
@@ -106,19 +100,14 @@ describe("console security gates (whole surface)", () => {
106
100
  const failures: string[] = [];
107
101
  for (const binding of handle.app.bindings) {
108
102
  if (!binding.flow.name.startsWith("console.")) continue;
109
- const result = await handle.app.execute(
110
- binding.flow,
111
- {},
112
- binding.trigger,
113
- {
114
- validated: true,
115
- principal: {
116
- plane: "user",
117
- userId: "user-plane-1",
118
- scopes: ["bookings:create"],
119
- },
103
+ const result = await handle.app.execute(binding.flow, {}, binding.trigger, {
104
+ validated: true,
105
+ principal: {
106
+ plane: "user",
107
+ userId: "user-plane-1",
108
+ scopes: ["bookings:create"],
120
109
  },
121
- );
110
+ });
122
111
  const code = result.failure?.error?.code;
123
112
  if (code !== "Forbidden") {
124
113
  failures.push(`${binding.flow.name} → ${code ?? "no-failure"}`);
@@ -197,29 +186,20 @@ describe("console security gates (whole surface)", () => {
197
186
 
198
187
  test("7. every registered console.* flow leaves a Runs entry when executed", async () => {
199
188
  const flows = consoleFlows(handle);
200
- const before = new Set(
201
- (await handle.state.listRuns()).map((r: WideEvent) => r.flow),
202
- );
189
+ const before = new Set((await handle.state.listRuns()).map((r: WideEvent) => r.flow));
203
190
 
204
191
  for (const flowMeta of flows) {
205
192
  if (before.has(flowMeta.name)) continue;
206
- const binding = handle.app.bindings.find(
207
- (b: Binding) => b.flow.name === flowMeta.name,
208
- );
193
+ const binding = handle.app.bindings.find((b: Binding) => b.flow.name === flowMeta.name);
209
194
  expect(binding).toBeDefined();
210
195
  try {
211
- await handle.app.execute(
212
- binding!.flow,
213
- {},
214
- binding!.trigger,
215
- {
216
- validated: true,
217
- principal: {
218
- plane: "operator",
219
- operatorId,
220
- },
196
+ await handle.app.execute(binding!.flow, {}, binding!.trigger, {
197
+ validated: true,
198
+ principal: {
199
+ plane: "operator",
200
+ operatorId,
221
201
  },
222
- );
202
+ });
223
203
  } catch {
224
204
  // Handler throws still record a wide event (pipeline catches).
225
205
  }
@@ -227,9 +207,7 @@ describe("console security gates (whole surface)", () => {
227
207
 
228
208
  const after = await handle.state.listRuns();
229
209
  const names = new Set(after.map((r: WideEvent) => r.flow));
230
- const missing = flows
231
- .map((f) => f.name)
232
- .filter((name) => !names.has(name));
210
+ const missing = flows.map((f) => f.name).filter((name) => !names.has(name));
233
211
  expect(missing).toEqual([]);
234
212
  });
235
213
 
@@ -83,8 +83,9 @@ export async function serveConsole(
83
83
  : {}),
84
84
  });
85
85
 
86
+ // Console serve `"dev"` is the auth/session flavor — ConfigEnv uses `local`.
86
87
  const env = options.env ?? "dev";
87
- await handle.app.boot({ env });
88
+ await handle.app.boot({ env: env === "dev" ? "local" : env });
88
89
  handle.state.listRuns = async () => {
89
90
  const runs = handle.app.bootResult?.runs;
90
91
  if (!runs) return [];
@@ -94,8 +95,7 @@ export async function serveConsole(
94
95
  await bindManifestStoreRuntime(handle.state);
95
96
  await bindManifestVaultRuntime(handle.state);
96
97
 
97
- const staticDir =
98
- options.staticDir ?? new URL("../ui/dist/", import.meta.url).pathname;
98
+ const staticDir = options.staticDir ?? new URL("../ui/dist/", import.meta.url).pathname;
99
99
 
100
100
  const live = createLiveWebsocket(handle.state);
101
101
  const allowed = resolveAllowedHosts(hostname, options.allowedHosts);
@@ -112,9 +112,7 @@ export async function serveConsole(
112
112
  const authed = withCookieAuth(request);
113
113
 
114
114
  if (url.pathname.startsWith("/console/")) {
115
- const response = await runWithDevSurface("Console", () =>
116
- handle.app.fetch(authed),
117
- );
115
+ const response = await runWithDevSurface("Console", () => handle.app.fetch(authed));
118
116
  const withCookies = await attachSessionCookies(authed, response);
119
117
  return withConsoleSecurityHeaders(withCookies);
120
118
  }
@@ -172,9 +170,7 @@ export async function serveConsole(
172
170
  const boundPort = server.port ?? port;
173
171
  const boundHost = server.hostname ?? hostname;
174
172
  const hostForUrl =
175
- boundHost.includes(":") && !boundHost.startsWith("[")
176
- ? `[${boundHost}]`
177
- : boundHost;
173
+ boundHost.includes(":") && !boundHost.startsWith("[") ? `[${boundHost}]` : boundHost;
178
174
  const url = new URL(`http://${hostForUrl}:${boundPort}/`);
179
175
 
180
176
  return {
@@ -238,9 +234,7 @@ export function withCookieAuth(request: Request): Request {
238
234
  return request;
239
235
  }
240
236
  const cookie = request.headers.get("cookie") ?? "";
241
- const match = cookie.match(
242
- new RegExp(`(?:^|;\\s*)${CONSOLE_COOKIES.access}=([^;]+)`),
243
- );
237
+ const match = cookie.match(new RegExp(`(?:^|;\\s*)${CONSOLE_COOKIES.access}=([^;]+)`));
244
238
  if (!match?.[1]) return request;
245
239
  const token = decodeURIComponent(match[1]);
246
240
  const headers = new Headers(request.headers);
@@ -261,8 +255,7 @@ export async function attachSessionCookies(
261
255
  if (response.status >= 400) return response;
262
256
  const url = new URL(request.url);
263
257
  const isSessionIssue =
264
- url.pathname === "/console/setup/claim" ||
265
- url.pathname === "/console/session/login";
258
+ url.pathname === "/console/setup/claim" || url.pathname === "/console/session/login";
266
259
  const isLogout = url.pathname === "/console/session/logout";
267
260
  if (!isSessionIssue && !isLogout) return response;
268
261
 
@@ -277,10 +270,7 @@ export async function attachSessionCookies(
277
270
 
278
271
  const headers = new Headers(response.headers);
279
272
  if (isLogout) {
280
- headers.append(
281
- "Set-Cookie",
282
- consoleSessionCookie(CONSOLE_COOKIES.access, "", { clear: true }),
283
- );
273
+ headers.append("Set-Cookie", consoleSessionCookie(CONSOLE_COOKIES.access, "", { clear: true }));
284
274
  headers.append(
285
275
  "Set-Cookie",
286
276
  consoleSessionCookie(CONSOLE_COOKIES.refresh, "", { clear: true }),
@@ -305,10 +295,7 @@ export async function attachSessionCookies(
305
295
  });
306
296
  }
307
297
 
308
- async function serveStatic(
309
- staticDir: string,
310
- pathname: string,
311
- ): Promise<Response | null> {
298
+ async function serveStatic(staticDir: string, pathname: string): Promise<Response | null> {
312
299
  if (pathname.includes("..")) return null;
313
300
  const path = pathname === "/" ? "index.html" : pathname.replace(/^\//, "");
314
301
  const file = Bun.file(`${staticDir}${path}`);
@@ -317,9 +304,7 @@ async function serveStatic(
317
304
  }
318
305
 
319
306
  function pluginFrameResponse(pathname: string): Response {
320
- const id = pathname
321
- .slice("/plugin-frame/".length)
322
- .replace(/[^a-z0-9_-]/gi, "");
307
+ const id = pathname.slice("/plugin-frame/".length).replace(/[^a-z0-9_-]/gi, "");
323
308
  const html = `<!doctype html>
324
309
  <html lang="en">
325
310
  <head>
@@ -1,9 +1,7 @@
1
1
  import { describe, expect, test } from "bun:test";
2
2
  import { memorySignalDriver } from "../../drivers/signal-memory.ts";
3
3
  import { signal } from "../../elements/signal/declare.ts";
4
- import {
5
- createMemorySignalConfigStore,
6
- } from "../../elements/signal/reconcile.ts";
4
+ import { createMemorySignalConfigStore } from "../../elements/signal/reconcile.ts";
7
5
  import { createSignalRuntime } from "../../elements/signal/runtime.ts";
8
6
  import type { Manifest } from "../../manifest/types.ts";
9
7
  import { projectSignalsList } from "./signals.ts";
@@ -13,10 +13,7 @@ import type {
13
13
  SignalReplayResult,
14
14
  SignalStats,
15
15
  } from "../../drivers/signal-types.ts";
16
- import type {
17
- SignalConfigRow,
18
- SignalConfigStore,
19
- } from "../../elements/signal/reconcile.ts";
16
+ import type { SignalConfigRow, SignalConfigStore } from "../../elements/signal/reconcile.ts";
20
17
  import { reconcileSignals } from "../../elements/signal/reconcile.ts";
21
18
  import { signal as declareSignal } from "../../elements/signal/declare.ts";
22
19
 
@@ -84,15 +81,14 @@ export interface ProjectSignalsOptions {
84
81
  export async function projectSignalsList(
85
82
  options: ProjectSignalsOptions,
86
83
  ): Promise<readonly ConsoleSignalRow[]> {
87
- const declared = Object.entries(options.manifest?.signals ?? {}).map(
88
- ([name, s]) =>
89
- declareSignal(name, {
90
- delivery: s.delivery,
91
- retries: s.retries,
92
- deadLetter: s.deadLetter,
93
- schema: s.schema,
94
- optional: s.optional,
95
- }),
84
+ const declared = Object.entries(options.manifest?.signals ?? {}).map(([name, s]) =>
85
+ declareSignal(name, {
86
+ delivery: s.delivery,
87
+ retries: s.retries,
88
+ deadLetter: s.deadLetter,
89
+ schema: s.schema,
90
+ optional: s.optional,
91
+ }),
96
92
  );
97
93
  const reconciled = await reconcileSignals(declared, options.config);
98
94
  const statsByName = new Map<string, SignalStats>();
@@ -109,10 +105,7 @@ export async function projectSignalsList(
109
105
  const stats = statsByName.get(cfg.name);
110
106
  const producers = producersOf(cfg.name, flows);
111
107
  const consumers = consumersOf(cfg.name, flows);
112
- const consumersDurable =
113
- consumers.length === 0
114
- ? null
115
- : consumers.every((c) => c.durable);
108
+ const consumersDurable = consumers.length === 0 ? null : consumers.every((c) => c.durable);
116
109
 
117
110
  // Attach causal run ids onto dead letters when a matching emit exists.
118
111
  const deadLetters = (stats?.deadLetters ?? []).map((dl) =>
@@ -165,13 +158,10 @@ export async function projectSignalsList(
165
158
  schema: stats.schema,
166
159
  subscribers: [...stats.subscribers],
167
160
  recentLive: [...stats.recentLive],
168
- deadLetters: stats.deadLetters.map((dl) =>
169
- withCause(dl, name, options.runs),
170
- ),
161
+ deadLetters: stats.deadLetters.map((dl) => withCause(dl, name, options.runs)),
171
162
  producers,
172
163
  consumers,
173
- consumersDurable:
174
- consumers.length === 0 ? null : consumers.every((c) => c.durable),
164
+ consumersDurable: consumers.length === 0 ? null : consumers.every((c) => c.durable),
175
165
  });
176
166
  }
177
167
 
@@ -208,10 +198,7 @@ export async function discardViaBus(
208
198
  return bus.discard(options);
209
199
  }
210
200
 
211
- function producersOf(
212
- signalName: string,
213
- flows: NonNullable<Manifest["flows"]>,
214
- ): SignalEndpoint[] {
201
+ function producersOf(signalName: string, flows: NonNullable<Manifest["flows"]>): SignalEndpoint[] {
215
202
  const out: SignalEndpoint[] = [];
216
203
  for (const [flowId, flow] of Object.entries(flows)) {
217
204
  if (flow.effects?.emits?.includes(signalName)) {
@@ -221,10 +208,7 @@ function producersOf(
221
208
  return out;
222
209
  }
223
210
 
224
- function consumersOf(
225
- signalName: string,
226
- flows: NonNullable<Manifest["flows"]>,
227
- ): SignalEndpoint[] {
211
+ function consumersOf(signalName: string, flows: NonNullable<Manifest["flows"]>): SignalEndpoint[] {
228
212
  const out: SignalEndpoint[] = [];
229
213
  for (const [flowId, flow] of Object.entries(flows)) {
230
214
  if (flow.trigger?.signal === signalName) {
@@ -234,10 +218,7 @@ function consumersOf(
234
218
  return out;
235
219
  }
236
220
 
237
- function endpoint(
238
- flowId: string,
239
- flow: NonNullable<Manifest["flows"]>[string],
240
- ): SignalEndpoint {
221
+ function endpoint(flowId: string, flow: NonNullable<Manifest["flows"]>[string]): SignalEndpoint {
241
222
  return {
242
223
  flowId,
243
224
  durable: flow.durable === true,
@@ -246,9 +227,7 @@ function endpoint(
246
227
  };
247
228
  }
248
229
 
249
- function peakTierOf(
250
- flow: NonNullable<Manifest["flows"]>[string],
251
- ): SignalEndpoint["peakTier"] {
230
+ function peakTierOf(flow: NonNullable<Manifest["flows"]>[string]): SignalEndpoint["peakTier"] {
252
231
  const e = flow.effects;
253
232
  if (!e) return "none";
254
233
  if ((e.sends?.length ?? 0) > 0 || (e.asks?.length ?? 0) > 0) return "external";
@@ -266,9 +245,7 @@ function withCause(
266
245
  ): DeadLetter & { readonly causeRunId?: string; readonly causeFlow?: string } {
267
246
  if (!runs || runs.length === 0) return dl;
268
247
  const match = runs.find((r) =>
269
- r.effects.some(
270
- (e) => e.kind === "emit" && e.resource === signalName,
271
- ),
248
+ r.effects.some((e) => e.kind === "emit" && e.resource === signalName),
272
249
  );
273
250
  if (!match) return dl;
274
251
  return {
@@ -26,11 +26,7 @@ import type {
26
26
  SignalReplayOptions,
27
27
  SignalReplayResult,
28
28
  } from "../../drivers/signal-types.ts";
29
- import type {
30
- AgentToolEffect,
31
- AiRuntime,
32
- EvalSuiteResult,
33
- } from "../../elements/ai.ts";
29
+ import type { AgentToolEffect, AiRuntime, EvalSuiteResult } from "../../elements/ai.ts";
34
30
  import {
35
31
  createMemorySignalConfigStore,
36
32
  type SignalConfigStore,
@@ -38,10 +34,7 @@ import {
38
34
  import type { Manifest } from "../../manifest/types.ts";
39
35
  import type { WideEvent } from "../../runs/types.ts";
40
36
  import type { ConsoleAiProjection } from "./ai.ts";
41
- import {
42
- createLoginAttemptBag,
43
- type LoginAttemptBag,
44
- } from "./auth-rate.ts";
37
+ import { createLoginAttemptBag, type LoginAttemptBag } from "./auth-rate.ts";
45
38
  import { mintClaimCode, type ClaimCodeState } from "./claim.ts";
46
39
  import type { ConsoleSignalRow } from "./signals.ts";
47
40
  import type {
@@ -68,19 +61,12 @@ import {
68
61
  import type { ConsoleVaultRow, VaultWriteInput } from "./vault.ts";
69
62
  import type { ChannelInbox } from "../../drivers/channel-types.ts";
70
63
  import type { ChannelRuntime, TemplateCatalog } from "../../elements/channel.ts";
71
- import type {
72
- ConsoleChannelPreview,
73
- ConsoleChannelsList,
74
- EmailAuthResult,
75
- } from "./channels.ts";
64
+ import type { ConsoleChannelPreview, ConsoleChannelsList, EmailAuthResult } from "./channels.ts";
76
65
  import type { OkeConfig } from "../../config/index.ts";
77
66
  import type { PluginRegistry } from "../../kernel/registry.ts";
78
67
  import type { ConsolePluginsList } from "./plugins.ts";
79
68
  import type { ConsoleDiffProjection } from "./diff.ts";
80
- import {
81
- loadConsolePanel,
82
- type ConsolePanelId,
83
- } from "./panel-load.ts";
69
+ import { loadConsolePanel, type ConsolePanelId } from "./panel-load.ts";
84
70
 
85
71
  /** User-plane identity row for the Flows invoke-as picker. */
86
72
  export interface ConsoleIdentity {
@@ -192,9 +178,7 @@ export interface ConsoleState {
192
178
  /** Replay / dry-run via the real bus. */
193
179
  replaySignals: (options: SignalReplayOptions) => Promise<SignalReplayResult>;
194
180
  /** Discard dead letters via the real bus. */
195
- discardSignals: (
196
- options: SignalDiscardOptions,
197
- ) => Promise<{ readonly discarded: number }>;
181
+ discardSignals: (options: SignalDiscardOptions) => Promise<{ readonly discarded: number }>;
198
182
  /**
199
183
  * Live store runtime. Bound after boot from Manifest (memory default)
200
184
  * or host injection.
@@ -214,13 +198,9 @@ export interface ConsoleState {
214
198
  options?: { readonly dryRun?: boolean },
215
199
  ) => Promise<StoreEditResult>;
216
200
  /** Delete rows/keys. */
217
- deleteStore: (
218
- input: StoreDeleteInput,
219
- ) => Promise<{ readonly deleted: number }>;
201
+ deleteStore: (input: StoreDeleteInput) => Promise<{ readonly deleted: number }>;
220
202
  /** Purge cache keys for a resource. */
221
- purgeStoreCache: (
222
- resource: ResourceRef,
223
- ) => Promise<{ readonly keys: readonly string[] }>;
203
+ purgeStoreCache: (resource: ResourceRef) => Promise<{ readonly keys: readonly string[] }>;
224
204
  /** Raw SQL console. */
225
205
  runStoreSql: (
226
206
  ref: ResourceRef,
@@ -247,9 +227,11 @@ export interface ConsoleState {
247
227
  /** Pause a cron. */
248
228
  pauseCron: (name: string) => Promise<{ readonly name: string; readonly status: string }>;
249
229
  /** Edit overridable schedule. */
250
- editSchedule: (
251
- input: EditScheduleInput,
252
- ) => Promise<{ readonly name: string; readonly effectiveCron?: string; readonly effectiveEvery?: string }>;
230
+ editSchedule: (input: EditScheduleInput) => Promise<{
231
+ readonly name: string;
232
+ readonly effectiveCron?: string;
233
+ readonly effectiveEvery?: string;
234
+ }>;
253
235
  /** Wake a sleeping durable run early and resume. */
254
236
  wakeEarly: (runId: string) => Promise<{
255
237
  readonly runId: string;
@@ -423,20 +405,15 @@ export interface CreateConsoleStateOptions {
423
405
  *
424
406
  * @param options - Secret, clock, cwd
425
407
  */
426
- export function createConsoleState(
427
- options: CreateConsoleStateOptions = {},
428
- ): ConsoleState {
408
+ export function createConsoleState(options: CreateConsoleStateOptions = {}): ConsoleState {
429
409
  const secret =
430
- options.secret ??
431
- process.env.OKE_CONSOLE_SECRET ??
432
- `oke-console-dev-${crypto.randomUUID()}`;
410
+ options.secret ?? process.env.OKE_CONSOLE_SECRET ?? `oke-console-dev-${crypto.randomUUID()}`;
433
411
  const now = options.now ?? (() => Date.now());
434
412
  const operators = options.operators ?? createOperatorStore();
435
413
  const claim = mintClaimCode(now);
436
414
  const sessions = options.sessions ?? createSessionStore();
437
415
  const liveSubscribers = new Set<(msg: ConsoleLiveMessage) => void>();
438
- const persistOperator =
439
- options.persistOperator ?? ((_operatorId: string) => {});
416
+ const persistOperator = options.persistOperator ?? ((_operatorId: string) => {});
440
417
  const persistSessions = options.persistSessions ?? (() => {});
441
418
 
442
419
  const signalConfig = createMemorySignalConfigStore();
@@ -445,9 +422,7 @@ export function createConsoleState(
445
422
  const constructed = new Set<ConsolePanelId>();
446
423
  let accessSeeded = false;
447
424
 
448
- const markPanel = async <T>(
449
- id: ConsolePanelId,
450
- ): Promise<T> => {
425
+ const markPanel = async <T>(id: ConsolePanelId): Promise<T> => {
451
426
  constructed.add(id);
452
427
  return loadConsolePanel<T>(id);
453
428
  };
@@ -901,10 +876,7 @@ export async function consoleEffectsForFlow(
901
876
  * @param state - Console state
902
877
  * @param message - Payload
903
878
  */
904
- export function publishLive(
905
- state: ConsoleState,
906
- message: ConsoleLiveMessage,
907
- ): void {
879
+ export function publishLive(state: ConsoleState, message: ConsoleLiveMessage): void {
908
880
  for (const sub of state.liveSubscribers) {
909
881
  try {
910
882
  sub(message);
@@ -937,10 +909,7 @@ export function setManifest(state: ConsoleState, manifest: Manifest): void {
937
909
  * @param state - Console state
938
910
  * @param runtime - Gate runtime
939
911
  */
940
- export function bindGateRuntime(
941
- state: ConsoleState,
942
- runtime: GateRuntime,
943
- ): void {
912
+ export function bindGateRuntime(state: ConsoleState, runtime: GateRuntime): void {
944
913
  state.gateRuntime = runtime;
945
914
  }
946
915
 
@@ -949,21 +918,14 @@ export function bindGateRuntime(
949
918
  *
950
919
  * @param state - Console state
951
920
  */
952
- export async function bindManifestGateRuntime(
953
- state: ConsoleState,
954
- ): Promise<void> {
921
+ export async function bindManifestGateRuntime(state: ConsoleState): Promise<void> {
955
922
  if (state.gateRuntime) return;
956
923
  if (!state.manifest?.gates && !state.manifest?.flows) return;
957
924
  const hasGates =
958
925
  Object.keys(state.manifest.gates ?? {}).length > 0 ||
959
- Object.values(state.manifest.flows ?? {}).some(
960
- (f) => (f.gates?.length ?? 0) > 0,
961
- );
926
+ Object.values(state.manifest.flows ?? {}).some((f) => (f.gates?.length ?? 0) > 0);
962
927
  if (!hasGates) return;
963
- const { runtime } = await createManifestGateRuntime(
964
- state.manifest,
965
- state.now,
966
- );
928
+ const { runtime } = await createManifestGateRuntime(state.manifest, state.now);
967
929
  state.gateRuntime = runtime;
968
930
  }
969
931